; 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_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 }>

@.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
@__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon = external hidden unnamed_addr constant [54 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon = external hidden unnamed_addr constant [178 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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon(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 [120 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 ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %struct.libxsmm_loop_label_tracker_struct, align 4
  %40 = alloca %struct.libxsmm_const_data_tracker, align 4
  %41 = alloca %struct.libxsmm_gp_reg_mapping_struct, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca [15 x i8], align 1
  %46 = alloca %struct.libxsmm_asparse_reg_op, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, 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 i32, align 4
  %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
  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
  %69 = load ptr, ptr %8, align 8, !tbaa !5
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %70, i32 0, i32 0
  %72 = load i32, ptr %71, align 1, !tbaa !9
  %73 = zext i32 %72 to i64
  %74 = getelementptr inbounds i32, ptr %69, i64 %73
  %75 = load i32, ptr %74, align 4, !tbaa !14
  store i32 %75, ptr %17, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %76 = load i32, ptr %17, align 4, !tbaa !14
  %77 = icmp ne i32 0, %76
  br i1 %77, label %78, label %83

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

83:                                               ; preds = %5
  br label %84

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

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

93:                                               ; preds = %84
  br label %94

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

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

103:                                              ; preds = %94
  br label %104

104:                                              ; preds = %103, %98
  %105 = phi ptr [ %102, %98 ], [ null, %103 ]
  store ptr %105, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %106 = load ptr, ptr %7, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %106, i32 0, i32 8
  %108 = getelementptr inbounds [3 x i8], ptr %107, i64 0, i64 0
  %109 = call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef %108)
  %110 = icmp eq i32 0, %109
  %111 = zext i1 %110 to i32
  store i32 %111, ptr %21, align 4, !tbaa !14
  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
  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 480, 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
  %112 = load i32, ptr %21, align 4, !tbaa !14
  %113 = icmp ne i32 %112, 0
  %114 = zext i1 %113 to i64
  %115 = select i1 %113, i32 7, i32 5
  store i32 %115, ptr %30, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  %116 = load i32, ptr %21, align 4, !tbaa !14
  %117 = icmp ne i32 %116, 0
  %118 = zext i1 %117 to i64
  %119 = select i1 %117, i32 6, i32 4
  store i32 %119, ptr %31, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %120 = load i32, ptr %21, align 4, !tbaa !14
  %121 = icmp ne i32 %120, 0
  %122 = zext i1 %121 to i64
  %123 = select i1 %121, i32 2, i32 4
  store i32 %123, ptr %32, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %124 = load i32, ptr %21, align 4, !tbaa !14
  %125 = icmp ne i32 %124, 0
  %126 = zext i1 %125 to i64
  %127 = select i1 %125, i32 8, i32 4
  store i32 %127, ptr %33, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  %128 = load ptr, ptr %7, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %128, i32 0, i32 6
  %130 = load i32, ptr %129, align 1, !tbaa !15
  %131 = and i32 48, %130
  %132 = icmp eq i32 48, %131
  br i1 %132, label %133, label %140

133:                                              ; preds = %104
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %134, i32 0, i32 5
  %136 = load i32, ptr %135, align 1, !tbaa !16
  %137 = load i32, ptr %32, align 4, !tbaa !14
  %138 = urem i32 %136, %137
  %139 = icmp eq i32 0, %138
  br label %140

140:                                              ; preds = %133, %104
  %141 = phi i1 [ false, %104 ], [ %139, %133 ]
  %142 = zext i1 %141 to i64
  %143 = select i1 %141, i32 1, i32 0
  store i32 %143, ptr %34, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  %144 = load ptr, ptr %7, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %144, i32 0, i32 6
  %146 = load i32, ptr %145, align 1, !tbaa !15
  %147 = and i32 4, %146
  store i32 %147, ptr %35, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %148 = call noalias ptr @malloc(i64 noundef 7602176) #9
  store ptr %148, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 2052, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 82440, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 132, ptr %41) #8
  %149 = load ptr, ptr %18, align 8, !tbaa !5
  %150 = icmp eq ptr null, %149
  br i1 %150, label %160, label %151

151:                                              ; preds = %140
  %152 = load ptr, ptr %19, align 8, !tbaa !5
  %153 = icmp eq ptr null, %152
  br i1 %153, label %160, label %154

154:                                              ; preds = %151
  %155 = load ptr, ptr %20, align 8, !tbaa !5
  %156 = icmp eq ptr null, %155
  br i1 %156, label %160, label %157

157:                                              ; preds = %154
  %158 = load ptr, ptr %36, align 8, !tbaa !5
  %159 = icmp eq ptr null, %158
  br i1 %159, label %160, label %169

160:                                              ; preds = %157, %154, %151, %140
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  %162 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %163 = icmp ult i32 1, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %160
  %165 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %167

166:                                              ; preds = %160
  br label %167

167:                                              ; preds = %166, %164
  %168 = phi i32 [ %165, %164 ], [ 1, %166 ]
  call void @libxsmm_handle_error(ptr noundef %161, i32 noundef 90027, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef @.str, i32 noundef 841, i32 noundef %168)
  br label %1079

169:                                              ; preds = %157
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %170, i32 0, i32 1
  %172 = load i32, ptr %171, align 1, !tbaa !17
  %173 = load i32, ptr %32, align 4, !tbaa !14
  %174 = icmp eq i32 %172, %173
  br i1 %174, label %175, label %176

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

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

183:                                              ; preds = %176
  store i32 2, ptr %16, align 4, !tbaa !14
  br label %202

184:                                              ; preds = %176
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %185, i32 0, i32 1
  %187 = load i32, ptr %186, align 1, !tbaa !17
  %188 = load i32, ptr %32, align 4, !tbaa !14
  %189 = mul i32 4, %188
  %190 = icmp eq i32 %187, %189
  br i1 %190, label %191, label %192

191:                                              ; preds = %184
  store i32 4, ptr %16, align 4, !tbaa !14
  br label %201

192:                                              ; preds = %184
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %195 = icmp ult i32 1, %194
  br i1 %195, label %196, label %198

196:                                              ; preds = %192
  %197 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %199

198:                                              ; preds = %192
  br label %199

199:                                              ; preds = %198, %196
  %200 = phi i32 [ %197, %196 ], [ 1, %198 ]
  call void @libxsmm_handle_error(ptr noundef %193, i32 noundef 90016, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef @.str, i32 noundef 853, i32 noundef %200)
  br label %1079

201:                                              ; preds = %191
  br label %202

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

203:                                              ; preds = %202, %175
  %204 = load i32, ptr %32, align 4, !tbaa !14
  %205 = load i32, ptr %16, align 4, !tbaa !14
  %206 = sub i32 32, %205
  %207 = load i32, ptr %16, align 4, !tbaa !14
  %208 = icmp ugt i32 %207, 1
  %209 = zext i1 %208 to i64
  %210 = select i1 %208, i32 2, i32 1
  %211 = sub i32 %206, %210
  %212 = mul i32 %204, %211
  store i32 %212, ptr %22, align 4, !tbaa !14
  %213 = load ptr, ptr %10, align 8, !tbaa !5
  %214 = icmp ne ptr null, %213
  br i1 %214, label %215, label %216

215:                                              ; preds = %203
  br label %217

216:                                              ; preds = %203
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 861, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon) #10
  unreachable

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

225:                                              ; preds = %217
  %226 = load ptr, ptr %6, align 8, !tbaa !5
  %227 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %228 = icmp ult i32 1, %227
  br i1 %228, label %229, label %231

229:                                              ; preds = %225
  %230 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %232

231:                                              ; preds = %225
  br label %232

232:                                              ; preds = %231, %229
  %233 = phi i32 [ %230, %229 ], [ 1, %231 ]
  call void @libxsmm_handle_error(ptr noundef %226, i32 noundef 90036, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef @.str, i32 noundef 869, i32 noundef %233)
  br label %1079

234:                                              ; preds = %217
  %235 = load i32, ptr %21, align 4, !tbaa !14
  %236 = icmp ne i32 %235, 0
  br i1 %236, label %257, label %237

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

238:                                              ; preds = %253, %237
  %239 = load i32, ptr %12, align 4, !tbaa !14
  %240 = load i32, ptr %13, align 4, !tbaa !14
  %241 = icmp ult i32 %239, %240
  br i1 %241, label %242, label %256

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

253:                                              ; preds = %242
  %254 = load i32, ptr %12, align 4, !tbaa !14
  %255 = add i32 %254, 1
  store i32 %255, ptr %12, align 4, !tbaa !14
  br label %238, !llvm.loop !22

256:                                              ; preds = %238
  br label %257

257:                                              ; preds = %256, %234
  %258 = load i32, ptr %13, align 4, !tbaa !14
  %259 = load i32, ptr %22, align 4, !tbaa !14
  %260 = icmp ule i32 %258, %259
  br i1 %260, label %261, label %290

261:                                              ; preds = %257
  %262 = load i32, ptr %13, align 4, !tbaa !14
  %263 = load i32, ptr %32, align 4, !tbaa !14
  %264 = sub i32 %263, 1
  %265 = add i32 %262, %264
  %266 = load i32, ptr %32, align 4, !tbaa !14
  %267 = udiv i32 %265, %266
  store i32 %267, ptr %25, align 4, !tbaa !14
  %268 = load i32, ptr %25, align 4, !tbaa !14
  %269 = load i32, ptr %16, align 4, !tbaa !14
  %270 = icmp ugt i32 %269, 1
  %271 = zext i1 %270 to i64
  %272 = select i1 %270, i32 2, i32 1
  %273 = add i32 %268, %272
  store i32 %273, ptr %23, align 4, !tbaa !14
  store i32 44, ptr %24, align 4, !tbaa !14
  %274 = load i32, ptr %23, align 4, !tbaa !14
  %275 = load i32, ptr %16, align 4, !tbaa !14
  %276 = mul i32 4, %275
  %277 = add i32 %274, %276
  %278 = icmp ule i32 %277, 32
  br i1 %278, label %279, label %280

279:                                              ; preds = %261
  store i32 4, ptr %15, align 4, !tbaa !14
  br label %289

280:                                              ; preds = %261
  %281 = load i32, ptr %23, align 4, !tbaa !14
  %282 = load i32, ptr %16, align 4, !tbaa !14
  %283 = mul i32 2, %282
  %284 = add i32 %281, %283
  %285 = icmp ule i32 %284, 32
  br i1 %285, label %286, label %287

286:                                              ; preds = %280
  store i32 2, ptr %15, align 4, !tbaa !14
  br label %288

287:                                              ; preds = %280
  store i32 1, ptr %15, align 4, !tbaa !14
  br label %288

288:                                              ; preds = %287, %286
  br label %289

289:                                              ; preds = %288, %279
  br label %304

290:                                              ; preds = %257
  store i32 4, ptr %15, align 4, !tbaa !14
  store i32 44, ptr %24, align 4, !tbaa !14
  %291 = load i32, ptr %15, align 4, !tbaa !14
  %292 = load i32, ptr %16, align 4, !tbaa !14
  %293 = mul i32 %291, %292
  %294 = sub i32 32, %293
  store i32 %294, ptr %23, align 4, !tbaa !14
  %295 = load i32, ptr %23, align 4, !tbaa !14
  %296 = load i32, ptr %16, align 4, !tbaa !14
  %297 = icmp ugt i32 %296, 1
  %298 = zext i1 %297 to i64
  %299 = select i1 %297, i32 2, i32 1
  %300 = sub i32 %295, %299
  store i32 %300, ptr %25, align 4, !tbaa !14
  %301 = load i32, ptr %25, align 4, !tbaa !14
  %302 = load i32, ptr %32, align 4, !tbaa !14
  %303 = mul i32 %301, %302
  store i32 %303, ptr %29, align 4, !tbaa !14
  br label %304

304:                                              ; preds = %290, %289
  %305 = load ptr, ptr %7, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %305, i32 0, i32 0
  %307 = load i32, ptr %306, align 1, !tbaa !9
  %308 = load i32, ptr %15, align 4, !tbaa !14
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = load ptr, ptr %19, align 8, !tbaa !5
  %312 = load ptr, ptr %20, align 8, !tbaa !5
  %313 = load ptr, ptr %36, align 8, !tbaa !5
  call void @libxsmm_asparse_reg_sequence(i32 noundef %307, i32 noundef %308, ptr noundef %309, ptr noundef %310, ptr noundef %311, ptr noundef %312, i32 noundef 65536, ptr noundef %313, ptr noundef %37)
  %314 = load i32, ptr %37, align 4, !tbaa !14
  %315 = icmp eq i32 0, %314
  br i1 %315, label %316, label %325

316:                                              ; preds = %304
  %317 = load ptr, ptr %6, align 8, !tbaa !5
  %318 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %319 = icmp ult i32 1, %318
  br i1 %319, label %320, label %322

320:                                              ; preds = %316
  %321 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !14
  br label %323

322:                                              ; preds = %316
  br label %323

323:                                              ; preds = %322, %320
  %324 = phi i32 [ %321, %320 ], [ 1, %322 ]
  call void @libxsmm_handle_error(ptr noundef %317, i32 noundef 90005, ptr noundef @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef @.str, i32 noundef 911, i32 noundef %324)
  br label %1079

325:                                              ; preds = %304
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef %41)
  %326 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 0
  store i32 32, ptr %326, align 4, !tbaa !24
  %327 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 3
  store i32 33, ptr %327, align 4, !tbaa !26
  %328 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  store i32 34, ptr %328, align 4, !tbaa !27
  %329 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  store i32 56, ptr %329, align 4, !tbaa !28
  %330 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  store i32 57, ptr %330, align 4, !tbaa !29
  %331 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %331, i8 -1, i64 480, i1 false)
  call void @libxsmm_reset_const_data_tracker(ptr noundef %40)
  call void @libxsmm_reset_loop_label_tracker(ptr noundef %39)
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_open_stream(ptr noundef %332, i16 noundef zeroext 4095)
  %333 = load ptr, ptr %7, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %333, i32 0, i32 6
  %335 = load i32, ptr %334, align 1, !tbaa !15
  %336 = and i32 16384, %335
  %337 = icmp eq i32 %336, 16384
  br i1 %337, label %338, label %358

338:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  store i32 80, ptr %43, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  store i32 128, ptr %44, align 4, !tbaa !14
  %339 = load ptr, ptr %6, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 0
  %341 = load i32, ptr %340, align 4, !tbaa !24
  %342 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 0
  %343 = load i32, ptr %342, align 4, !tbaa !24
  %344 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %345 = load i32, ptr %344, align 4, !tbaa !29
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %339, i32 noundef 167772167, i32 noundef %341, i32 noundef %343, i32 noundef %345, i32 noundef 0, i32 noundef 0)
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %348 = load i32, ptr %347, align 4, !tbaa !29
  %349 = load i32, ptr %43, align 4, !tbaa !14
  %350 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 3
  %351 = load i32, ptr %350, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %346, i32 noundef -1186988026, i32 noundef %348, i32 noundef 127, i32 noundef %349, i32 noundef %351)
  %352 = load ptr, ptr %6, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %354 = load i32, ptr %353, align 4, !tbaa !29
  %355 = load i32, ptr %44, align 4, !tbaa !14
  %356 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %357 = load i32, ptr %356, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %352, i32 noundef -1186988026, i32 noundef %354, i32 noundef 127, i32 noundef %355, i32 noundef %357)
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %359

358:                                              ; preds = %325
  br label %359

359:                                              ; preds = %358, %338
  %360 = load i32, ptr %13, align 4, !tbaa !14
  %361 = load i32, ptr %22, align 4, !tbaa !14
  %362 = icmp ule i32 %360, %361
  br i1 %362, label %363, label %415

363:                                              ; preds = %359
  %364 = load ptr, ptr %6, align 8, !tbaa !5
  %365 = load ptr, ptr %18, align 8, !tbaa !5
  %366 = load i32, ptr %13, align 4, !tbaa !14
  %367 = load i32, ptr %33, align 4, !tbaa !14
  %368 = mul i32 %366, %367
  %369 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %364, ptr noundef %365, i32 noundef %368, i32 noundef 16, i32 noundef 1, ptr noundef %40)
  store i32 %369, ptr %14, align 4, !tbaa !14
  %370 = load i32, ptr %13, align 4, !tbaa !14
  %371 = load i32, ptr %33, align 4, !tbaa !14
  %372 = mul i32 %370, %371
  %373 = urem i32 %372, 16
  %374 = icmp ne i32 %373, 0
  br i1 %374, label %375, label %383

375:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 15, ptr %45) #8
  call void @llvm.memset.p0.i64(ptr align 1 %45, i8 0, i64 15, i1 false)
  %376 = load ptr, ptr %6, align 8, !tbaa !5
  %377 = getelementptr inbounds [15 x i8], ptr %45, i64 0, i64 0
  %378 = load i32, ptr %13, align 4, !tbaa !14
  %379 = load i32, ptr %33, align 4, !tbaa !14
  %380 = mul i32 %378, %379
  %381 = urem i32 %380, 16
  %382 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %376, ptr noundef %377, i32 noundef %381, i32 noundef 1, i32 noundef 1, ptr noundef %40)
  call void @llvm.lifetime.end.p0(i64 15, ptr %45) #8
  br label %383

383:                                              ; preds = %375, %363
  %384 = load ptr, ptr %6, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %386 = load i32, ptr %385, align 4, !tbaa !28
  %387 = load i32, ptr %14, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %384, i32 noundef %386, i32 noundef %387, ptr noundef %40)
  %388 = load i32, ptr %25, align 4, !tbaa !14
  %389 = urem i32 %388, 2
  %390 = icmp ne i32 %389, 0
  br i1 %390, label %391, label %395

391:                                              ; preds = %383
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %394 = load i32, ptr %393, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %392, i32 noundef 1027604486, i32 noundef %394, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1)
  br label %395

395:                                              ; preds = %391, %383
  %396 = load i32, ptr %25, align 4, !tbaa !14
  %397 = urem i32 %396, 2
  store i32 %397, ptr %12, align 4, !tbaa !14
  br label %398

398:                                              ; preds = %411, %395
  %399 = load i32, ptr %12, align 4, !tbaa !14
  %400 = load i32, ptr %25, align 4, !tbaa !14
  %401 = icmp ult i32 %399, %400
  br i1 %401, label %402, label %414

402:                                              ; preds = %398
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %405 = load i32, ptr %404, align 4, !tbaa !28
  %406 = load i32, ptr %12, align 4, !tbaa !14
  %407 = mul i32 16, %406
  %408 = load i32, ptr %12, align 4, !tbaa !14
  %409 = load i32, ptr %12, align 4, !tbaa !14
  %410 = add i32 %409, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %403, i32 noundef 759169031, i32 noundef %405, i32 noundef %407, i32 noundef %408, i32 noundef %410, i32 noundef 1)
  br label %411

411:                                              ; preds = %402
  %412 = load i32, ptr %12, align 4, !tbaa !14
  %413 = add i32 %412, 2
  store i32 %413, ptr %12, align 4, !tbaa !14
  br label %398, !llvm.loop !30

414:                                              ; preds = %398
  br label %415

415:                                              ; preds = %414, %359
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  %417 = load ptr, ptr %7, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %417, i32 0, i32 10
  %419 = load i64, ptr %418, align 1, !tbaa !31
  %420 = trunc i64 %419 to i32
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %416, ptr noundef %39, i32 noundef 55, i32 noundef %420)
  %421 = load i32, ptr %13, align 4, !tbaa !14
  %422 = load i32, ptr %22, align 4, !tbaa !14
  %423 = icmp ugt i32 %421, %422
  br i1 %423, label %424, label %426

424:                                              ; preds = %415
  %425 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %425, i32 noundef 58, i32 noundef 0, ptr noundef %40)
  br label %426

426:                                              ; preds = %424, %415
  %427 = load ptr, ptr %6, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 3
  %429 = load i32, ptr %428, align 4, !tbaa !26
  %430 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %431 = load i32, ptr %430, align 4, !tbaa !29
  call void @libxsmm_generator_mov_aarch64(ptr noundef %427, i32 noundef %429, i32 noundef %431)
  store i32 0, ptr %38, align 4, !tbaa !14
  br label %432

432:                                              ; preds = %968, %426
  %433 = load i32, ptr %38, align 4, !tbaa !14
  %434 = load i32, ptr %37, align 4, !tbaa !14
  %435 = icmp ult i32 %433, %434
  br i1 %435, label %436, label %971

436:                                              ; preds = %432
  call void @llvm.lifetime.start.p0(i64 116, ptr %46) #8
  %437 = load ptr, ptr %36, align 8, !tbaa !5
  %438 = load i32, ptr %38, align 4, !tbaa !14
  %439 = zext i32 %438 to i64
  %440 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %437, i64 %439
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %440, i64 116, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  %441 = load i32, ptr %25, align 4, !tbaa !14
  store i32 %441, ptr %47, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %442 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 0
  %443 = load i32, ptr %442, align 4, !tbaa !35
  %444 = load ptr, ptr %7, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %444, i32 0, i32 4
  %446 = load i32, ptr %445, align 1, !tbaa !37
  %447 = mul i32 %443, %446
  %448 = load i32, ptr %33, align 4, !tbaa !14
  %449 = mul i32 %447, %448
  store i32 %449, ptr %48, align 4, !tbaa !14
  %450 = load i32, ptr %48, align 4, !tbaa !14
  %451 = load i32, ptr %26, align 4, !tbaa !14
  %452 = icmp ne i32 %450, %451
  br i1 %452, label %453, label %482

453:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #8
  %454 = load i32, ptr %48, align 4, !tbaa !14
  %455 = load i32, ptr %26, align 4, !tbaa !14
  %456 = icmp sgt i32 %454, %455
  %457 = zext i1 %456 to i64
  %458 = select i1 %456, i32 4096, i32 4097
  store i32 %458, ptr %49, align 4, !tbaa !14
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = load i32, ptr %49, align 4, !tbaa !14
  %461 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %462 = load i32, ptr %461, align 4, !tbaa !29
  %463 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %464 = load i32, ptr %463, align 4, !tbaa !28
  %465 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %466 = load i32, ptr %465, align 4, !tbaa !29
  %467 = load i32, ptr %48, align 4, !tbaa !14
  %468 = load i32, ptr %26, align 4, !tbaa !14
  %469 = icmp slt i32 %467, %468
  br i1 %469, label %470, label %474

470:                                              ; preds = %453
  %471 = load i32, ptr %26, align 4, !tbaa !14
  %472 = load i32, ptr %48, align 4, !tbaa !14
  %473 = sub nsw i32 %471, %472
  br label %478

474:                                              ; preds = %453
  %475 = load i32, ptr %48, align 4, !tbaa !14
  %476 = load i32, ptr %26, align 4, !tbaa !14
  %477 = sub nsw i32 %475, %476
  br label %478

478:                                              ; preds = %474, %470
  %479 = phi i32 [ %473, %470 ], [ %477, %474 ]
  %480 = sext i32 %479 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %459, i32 noundef %460, i32 noundef %462, i32 noundef %464, i32 noundef %466, i64 noundef %480)
  %481 = load i32, ptr %48, align 4, !tbaa !14
  store i32 %481, ptr %26, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #8
  br label %482

482:                                              ; preds = %478, %436
  %483 = load i32, ptr %16, align 4, !tbaa !14
  %484 = icmp eq i32 1, %483
  br i1 %484, label %485, label %687

485:                                              ; preds = %482
  %486 = load i32, ptr %27, align 4, !tbaa !14
  %487 = load i32, ptr %48, align 4, !tbaa !14
  %488 = icmp ne i32 %486, %487
  br i1 %488, label %489, label %495

489:                                              ; preds = %485
  %490 = load ptr, ptr %6, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %492 = load i32, ptr %491, align 4, !tbaa !29
  %493 = load i32, ptr %47, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %490, i32 noundef 1027604486, i32 noundef %492, i32 noundef 0, i32 noundef 0, i32 noundef %493, i32 noundef 1)
  %494 = load i32, ptr %48, align 4, !tbaa !14
  store i32 %494, ptr %27, align 4, !tbaa !14
  br label %495

495:                                              ; preds = %489, %485
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %496

496:                                              ; preds = %683, %495
  %497 = load i32, ptr %12, align 4, !tbaa !14
  %498 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 2
  %499 = load i16, ptr %498, align 4, !tbaa !38
  %500 = zext i16 %499 to i32
  %501 = icmp ult i32 %497, %500
  br i1 %501, label %502, label %686

502:                                              ; preds = %496
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %503 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 3
  %504 = load i32, ptr %12, align 4, !tbaa !14
  %505 = zext i32 %504 to i64
  %506 = getelementptr inbounds [12 x i16], ptr %503, i64 0, i64 %505
  %507 = load i16, ptr %506, align 2, !tbaa !34
  %508 = zext i16 %507 to i32
  store i32 %508, ptr %50, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  %509 = load i32, ptr %24, align 4, !tbaa !14
  %510 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 5
  %511 = load i32, ptr %12, align 4, !tbaa !14
  %512 = zext i32 %511 to i64
  %513 = getelementptr inbounds [12 x i8], ptr %510, i64 0, i64 %512
  %514 = load i8, ptr %513, align 1, !tbaa !33
  %515 = zext i8 %514 to i32
  %516 = add i32 %509, %515
  store i32 %516, ptr %52, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #8
  %517 = load i32, ptr %13, align 4, !tbaa !14
  %518 = load i32, ptr %22, align 4, !tbaa !14
  %519 = icmp ugt i32 %517, %518
  br i1 %519, label %520, label %521

520:                                              ; preds = %502
  br label %523

521:                                              ; preds = %502
  %522 = load i32, ptr %50, align 4, !tbaa !14
  br label %523

523:                                              ; preds = %521, %520
  %524 = phi i32 [ -1, %520 ], [ %522, %521 ]
  store i32 %524, ptr %53, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %525 = load i32, ptr %23, align 4, !tbaa !14
  %526 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 5
  %527 = load i32, ptr %12, align 4, !tbaa !14
  %528 = zext i32 %527 to i64
  %529 = getelementptr inbounds [12 x i8], ptr %526, i64 0, i64 %528
  %530 = load i8, ptr %529, align 1, !tbaa !33
  %531 = zext i8 %530 to i32
  %532 = add i32 %525, %531
  store i32 %532, ptr %54, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %533 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 1
  %534 = load i32, ptr %12, align 4, !tbaa !14
  %535 = zext i32 %534 to i64
  %536 = getelementptr inbounds [12 x i32], ptr %533, i64 0, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !14
  %538 = load ptr, ptr %7, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %538, i32 0, i32 5
  %540 = load i32, ptr %539, align 1, !tbaa !16
  %541 = mul i32 %537, %540
  %542 = load i32, ptr %33, align 4, !tbaa !14
  %543 = mul i32 %541, %542
  store i32 %543, ptr %55, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #8
  store i32 0, ptr %56, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #8
  %544 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 4
  %545 = load i32, ptr %12, align 4, !tbaa !14
  %546 = zext i32 %545 to i64
  %547 = getelementptr inbounds [12 x i8], ptr %544, i64 0, i64 %546
  %548 = load i8, ptr %547, align 1, !tbaa !33
  %549 = sext i8 %548 to i32
  %550 = icmp eq i32 %549, 1
  %551 = zext i1 %550 to i64
  %552 = select i1 %550, i32 260050959, i32 260067343
  store i32 %552, ptr %57, align 4, !tbaa !14
  %553 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 6
  %554 = load i32, ptr %12, align 4, !tbaa !14
  %555 = zext i32 %554 to i64
  %556 = getelementptr inbounds [12 x i8], ptr %553, i64 0, i64 %555
  %557 = load i8, ptr %556, align 1, !tbaa !33
  %558 = zext i8 %557 to i32
  %559 = and i32 1, %558
  %560 = icmp ne i32 %559, 0
  br i1 %560, label %561, label %586

561:                                              ; preds = %523
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %564 = load i32, ptr %563, align 4, !tbaa !27
  %565 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %566 = load i32, ptr %565, align 4, !tbaa !28
  %567 = load i32, ptr %52, align 4, !tbaa !14
  %568 = load i32, ptr %55, align 4, !tbaa !14
  %569 = zext i32 %568 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %562, i32 noundef 4096, i32 noundef %564, i32 noundef %566, i32 noundef %567, i64 noundef %569)
  %570 = load i32, ptr %35, align 4, !tbaa !14
  %571 = icmp ne i32 %570, 0
  br i1 %571, label %572, label %581

572:                                              ; preds = %561
  store i32 260083727, ptr %57, align 4, !tbaa !14
  %573 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 4
  %574 = load i32, ptr %12, align 4, !tbaa !14
  %575 = zext i32 %574 to i64
  %576 = getelementptr inbounds [12 x i8], ptr %573, i64 0, i64 %575
  %577 = load i8, ptr %576, align 1, !tbaa !33
  %578 = sext i8 %577 to i32
  %579 = icmp eq i32 %578, -1
  %580 = zext i1 %579 to i32
  store i32 %580, ptr %56, align 4, !tbaa !14
  br label %585

581:                                              ; preds = %561
  %582 = load ptr, ptr %6, align 8, !tbaa !5
  %583 = load i32, ptr %52, align 4, !tbaa !14
  %584 = load i32, ptr %54, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %582, i32 noundef 1027604486, i32 noundef %583, i32 noundef 0, i32 noundef 0, i32 noundef %584, i32 noundef 1)
  br label %585

585:                                              ; preds = %581, %572
  br label %586

586:                                              ; preds = %585, %523
  %587 = load i32, ptr %13, align 4, !tbaa !14
  %588 = load i32, ptr %22, align 4, !tbaa !14
  %589 = icmp ugt i32 %587, %588
  br i1 %589, label %590, label %649

590:                                              ; preds = %586
  store i32 0, ptr %51, align 4, !tbaa !14
  br label %591

591:                                              ; preds = %605, %590
  %592 = load i32, ptr %51, align 4, !tbaa !14
  %593 = load i32, ptr %29, align 4, !tbaa !14
  %594 = icmp ult i32 %592, %593
  br i1 %594, label %595, label %608

595:                                              ; preds = %591
  %596 = load i32, ptr %51, align 4, !tbaa !14
  %597 = zext i32 %596 to i64
  %598 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 %597
  %599 = load i32, ptr %598, align 4, !tbaa !14
  %600 = load i32, ptr %50, align 4, !tbaa !14
  %601 = icmp eq i32 %599, %600
  br i1 %601, label %602, label %604

602:                                              ; preds = %595
  %603 = load i32, ptr %51, align 4, !tbaa !14
  store i32 %603, ptr %53, align 4, !tbaa !14
  br label %608

604:                                              ; preds = %595
  br label %605

605:                                              ; preds = %604
  %606 = load i32, ptr %51, align 4, !tbaa !14
  %607 = add i32 %606, 1
  store i32 %607, ptr %51, align 4, !tbaa !14
  br label %591, !llvm.loop !39

608:                                              ; preds = %602, %591
  %609 = load i32, ptr %53, align 4, !tbaa !14
  %610 = icmp eq i32 -1, %609
  br i1 %610, label %611, label %648

611:                                              ; preds = %608
  %612 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 0
  %613 = load i32, ptr %29, align 4, !tbaa !14
  %614 = load ptr, ptr %36, align 8, !tbaa !5
  %615 = load i32, ptr %38, align 4, !tbaa !14
  %616 = zext i32 %615 to i64
  %617 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %614, i64 %616
  %618 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %617, i64 1
  %619 = load i32, ptr %37, align 4, !tbaa !14
  %620 = load i32, ptr %38, align 4, !tbaa !14
  %621 = sub i32 %619, %620
  %622 = sub i32 %621, 1
  %623 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef %612, i32 noundef %613, ptr noundef %618, i32 noundef %622)
  store i32 %623, ptr %53, align 4, !tbaa !14
  %624 = load ptr, ptr %6, align 8, !tbaa !5
  %625 = load ptr, ptr %18, align 8, !tbaa !5
  %626 = load i32, ptr %33, align 4, !tbaa !14
  %627 = load i32, ptr %50, align 4, !tbaa !14
  %628 = mul i32 %626, %627
  %629 = zext i32 %628 to i64
  %630 = getelementptr inbounds i8, ptr %625, i64 %629
  %631 = load i32, ptr %33, align 4, !tbaa !14
  %632 = load i32, ptr %33, align 4, !tbaa !14
  %633 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %624, ptr noundef %630, i32 noundef %631, i32 noundef %632, i32 noundef 1, ptr noundef %40)
  %634 = load ptr, ptr %6, align 8, !tbaa !5
  %635 = load i32, ptr %33, align 4, !tbaa !14
  %636 = load i32, ptr %53, align 4, !tbaa !14
  %637 = load i32, ptr %32, align 4, !tbaa !14
  %638 = udiv i32 %636, %637
  %639 = load i32, ptr %53, align 4, !tbaa !14
  %640 = load i32, ptr %32, align 4, !tbaa !14
  %641 = urem i32 %639, %640
  %642 = trunc i32 %641 to i16
  %643 = load i32, ptr %31, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_struct_move(ptr noundef %634, i32 noundef 232751106, i32 noundef 58, i32 noundef 0, i32 noundef %635, i32 noundef %638, i16 noundef signext %642, i32 noundef %643)
  %644 = load i32, ptr %50, align 4, !tbaa !14
  %645 = load i32, ptr %53, align 4, !tbaa !14
  %646 = zext i32 %645 to i64
  %647 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 %646
  store i32 %644, ptr %647, align 4, !tbaa !14
  br label %648

648:                                              ; preds = %611, %608
  br label %649

649:                                              ; preds = %648, %586
  %650 = load ptr, ptr %6, align 8, !tbaa !5
  %651 = load i32, ptr %57, align 4, !tbaa !14
  %652 = load i32, ptr %47, align 4, !tbaa !14
  %653 = load i32, ptr %53, align 4, !tbaa !14
  %654 = load i32, ptr %32, align 4, !tbaa !14
  %655 = udiv i32 %653, %654
  %656 = load i32, ptr %53, align 4, !tbaa !14
  %657 = load i32, ptr %32, align 4, !tbaa !14
  %658 = urem i32 %656, %657
  %659 = trunc i32 %658 to i8
  %660 = load i32, ptr %54, align 4, !tbaa !14
  %661 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %650, i32 noundef %651, i32 noundef %652, i32 noundef %655, i8 noundef zeroext %659, i32 noundef %660, i32 noundef %661)
  %662 = load i32, ptr %56, align 4, !tbaa !14
  %663 = icmp ne i32 %662, 0
  br i1 %663, label %664, label %669

664:                                              ; preds = %649
  %665 = load ptr, ptr %6, align 8, !tbaa !5
  %666 = load i32, ptr %54, align 4, !tbaa !14
  %667 = load i32, ptr %54, align 4, !tbaa !14
  %668 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %665, i32 noundef 782301194, i32 noundef %666, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %667, i32 noundef %668)
  br label %669

669:                                              ; preds = %664, %649
  %670 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 6
  %671 = load i32, ptr %12, align 4, !tbaa !14
  %672 = zext i32 %671 to i64
  %673 = getelementptr inbounds [12 x i8], ptr %670, i64 0, i64 %672
  %674 = load i8, ptr %673, align 1, !tbaa !33
  %675 = zext i8 %674 to i32
  %676 = and i32 2, %675
  %677 = icmp ne i32 %676, 0
  br i1 %677, label %678, label %682

678:                                              ; preds = %669
  %679 = load ptr, ptr %6, align 8, !tbaa !5
  %680 = load i32, ptr %52, align 4, !tbaa !14
  %681 = load i32, ptr %54, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %679, i32 noundef 1023410182, i32 noundef %680, i32 noundef 0, i32 noundef 0, i32 noundef %681, i32 noundef 1)
  br label %682

682:                                              ; preds = %678, %669
  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 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %683

683:                                              ; preds = %682
  %684 = load i32, ptr %12, align 4, !tbaa !14
  %685 = add i32 %684, 1
  store i32 %685, ptr %12, align 4, !tbaa !14
  br label %496, !llvm.loop !40

686:                                              ; preds = %496
  br label %967

687:                                              ; preds = %482
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %688

688:                                              ; preds = %963, %687
  %689 = load i32, ptr %11, align 4, !tbaa !14
  %690 = load i32, ptr %16, align 4, !tbaa !14
  %691 = icmp ult i32 %689, %690
  br i1 %691, label %692, label %966

692:                                              ; preds = %688
  %693 = load i32, ptr %27, align 4, !tbaa !14
  %694 = load i32, ptr %48, align 4, !tbaa !14
  %695 = load i32, ptr %11, align 4, !tbaa !14
  %696 = mul nsw i32 %695, 16
  %697 = add nsw i32 %694, %696
  %698 = icmp ne i32 %693, %697
  br i1 %698, label %699, label %712

699:                                              ; preds = %692
  %700 = load ptr, ptr %6, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 23
  %702 = load i32, ptr %701, align 4, !tbaa !29
  %703 = load i32, ptr %11, align 4, !tbaa !14
  %704 = mul i32 16, %703
  %705 = load i32, ptr %47, align 4, !tbaa !14
  %706 = load i32, ptr %47, align 4, !tbaa !14
  %707 = add i32 %706, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %700, i32 noundef 759169031, i32 noundef %702, i32 noundef %704, i32 noundef %705, i32 noundef %707, i32 noundef 1)
  %708 = load i32, ptr %48, align 4, !tbaa !14
  %709 = load i32, ptr %11, align 4, !tbaa !14
  %710 = mul i32 16, %709
  %711 = add i32 %708, %710
  store i32 %711, ptr %27, align 4, !tbaa !14
  br label %712

712:                                              ; preds = %699, %692
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %713

713:                                              ; preds = %959, %712
  %714 = load i32, ptr %12, align 4, !tbaa !14
  %715 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 2
  %716 = load i16, ptr %715, align 4, !tbaa !38
  %717 = zext i16 %716 to i32
  %718 = icmp ult i32 %714, %717
  br i1 %718, label %719, label %962

719:                                              ; preds = %713
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %720 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 3
  %721 = load i32, ptr %12, align 4, !tbaa !14
  %722 = zext i32 %721 to i64
  %723 = getelementptr inbounds [12 x i16], ptr %720, i64 0, i64 %722
  %724 = load i16, ptr %723, align 2, !tbaa !34
  %725 = zext i16 %724 to i32
  store i32 %725, ptr %58, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #8
  %726 = load i32, ptr %24, align 4, !tbaa !14
  %727 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 5
  %728 = load i32, ptr %12, align 4, !tbaa !14
  %729 = zext i32 %728 to i64
  %730 = getelementptr inbounds [12 x i8], ptr %727, i64 0, i64 %729
  %731 = load i8, ptr %730, align 1, !tbaa !33
  %732 = zext i8 %731 to i32
  %733 = add i32 %726, %732
  store i32 %733, ptr %60, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #8
  %734 = load i32, ptr %13, align 4, !tbaa !14
  %735 = load i32, ptr %22, align 4, !tbaa !14
  %736 = icmp ugt i32 %734, %735
  br i1 %736, label %737, label %738

737:                                              ; preds = %719
  br label %740

738:                                              ; preds = %719
  %739 = load i32, ptr %58, align 4, !tbaa !14
  br label %740

740:                                              ; preds = %738, %737
  %741 = phi i32 [ -1, %737 ], [ %739, %738 ]
  store i32 %741, ptr %61, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %742 = load i32, ptr %23, align 4, !tbaa !14
  %743 = load i32, ptr %16, align 4, !tbaa !14
  %744 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 5
  %745 = load i32, ptr %12, align 4, !tbaa !14
  %746 = zext i32 %745 to i64
  %747 = getelementptr inbounds [12 x i8], ptr %744, i64 0, i64 %746
  %748 = load i8, ptr %747, align 1, !tbaa !33
  %749 = zext i8 %748 to i32
  %750 = mul i32 %743, %749
  %751 = add i32 %742, %750
  store i32 %751, ptr %62, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #8
  %752 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 1
  %753 = load i32, ptr %12, align 4, !tbaa !14
  %754 = zext i32 %753 to i64
  %755 = getelementptr inbounds [12 x i32], ptr %752, i64 0, i64 %754
  %756 = load i32, ptr %755, align 4, !tbaa !14
  %757 = load ptr, ptr %7, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %757, i32 0, i32 5
  %759 = load i32, ptr %758, align 1, !tbaa !16
  %760 = mul i32 %756, %759
  %761 = load i32, ptr %33, align 4, !tbaa !14
  %762 = mul i32 %760, %761
  store i32 %762, ptr %63, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  store i32 0, ptr %64, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #8
  %763 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 4
  %764 = load i32, ptr %12, align 4, !tbaa !14
  %765 = zext i32 %764 to i64
  %766 = getelementptr inbounds [12 x i8], ptr %763, i64 0, i64 %765
  %767 = load i8, ptr %766, align 1, !tbaa !33
  %768 = sext i8 %767 to i32
  %769 = icmp eq i32 %768, 1
  %770 = zext i1 %769 to i64
  %771 = select i1 %769, i32 260050959, i32 260067343
  store i32 %771, ptr %65, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %772 = load i32, ptr %34, align 4, !tbaa !14
  %773 = icmp ne i32 %772, 0
  %774 = zext i1 %773 to i64
  %775 = select i1 %773, i32 738197511, i32 754974727
  store i32 %775, ptr %66, align 4, !tbaa !14
  %776 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 6
  %777 = load i32, ptr %12, align 4, !tbaa !14
  %778 = zext i32 %777 to i64
  %779 = getelementptr inbounds [12 x i8], ptr %776, i64 0, i64 %778
  %780 = load i8, ptr %779, align 1, !tbaa !33
  %781 = zext i8 %780 to i32
  %782 = and i32 1, %781
  %783 = icmp ne i32 %782, 0
  br i1 %783, label %784, label %821

784:                                              ; preds = %740
  %785 = load i32, ptr %11, align 4, !tbaa !14
  %786 = icmp eq i32 0, %785
  br i1 %786, label %787, label %796

787:                                              ; preds = %784
  %788 = load ptr, ptr %6, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %790 = load i32, ptr %789, align 4, !tbaa !27
  %791 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %792 = load i32, ptr %791, align 4, !tbaa !28
  %793 = load i32, ptr %60, align 4, !tbaa !14
  %794 = load i32, ptr %63, align 4, !tbaa !14
  %795 = zext i32 %794 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %788, i32 noundef 4096, i32 noundef %790, i32 noundef %792, i32 noundef %793, i64 noundef %795)
  br label %796

796:                                              ; preds = %787, %784
  %797 = load i32, ptr %35, align 4, !tbaa !14
  %798 = icmp ne i32 %797, 0
  br i1 %798, label %799, label %808

799:                                              ; preds = %796
  store i32 260083727, ptr %65, align 4, !tbaa !14
  %800 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 4
  %801 = load i32, ptr %12, align 4, !tbaa !14
  %802 = zext i32 %801 to i64
  %803 = getelementptr inbounds [12 x i8], ptr %800, i64 0, i64 %802
  %804 = load i8, ptr %803, align 1, !tbaa !33
  %805 = sext i8 %804 to i32
  %806 = icmp eq i32 %805, -1
  %807 = zext i1 %806 to i32
  store i32 %807, ptr %64, align 4, !tbaa !14
  br label %820

808:                                              ; preds = %796
  %809 = load ptr, ptr %6, align 8, !tbaa !5
  %810 = load i32, ptr %60, align 4, !tbaa !14
  %811 = load i32, ptr %11, align 4, !tbaa !14
  %812 = mul i32 16, %811
  %813 = load i32, ptr %62, align 4, !tbaa !14
  %814 = load i32, ptr %11, align 4, !tbaa !14
  %815 = add i32 %813, %814
  %816 = load i32, ptr %62, align 4, !tbaa !14
  %817 = load i32, ptr %11, align 4, !tbaa !14
  %818 = add i32 %816, %817
  %819 = add i32 %818, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %809, i32 noundef 759169031, i32 noundef %810, i32 noundef %812, i32 noundef %815, i32 noundef %819, i32 noundef 1)
  br label %820

820:                                              ; preds = %808, %799
  br label %821

821:                                              ; preds = %820, %740
  %822 = load i32, ptr %13, align 4, !tbaa !14
  %823 = load i32, ptr %22, align 4, !tbaa !14
  %824 = icmp ugt i32 %822, %823
  br i1 %824, label %825, label %884

825:                                              ; preds = %821
  store i32 0, ptr %59, align 4, !tbaa !14
  br label %826

826:                                              ; preds = %840, %825
  %827 = load i32, ptr %59, align 4, !tbaa !14
  %828 = load i32, ptr %29, align 4, !tbaa !14
  %829 = icmp ult i32 %827, %828
  br i1 %829, label %830, label %843

830:                                              ; preds = %826
  %831 = load i32, ptr %59, align 4, !tbaa !14
  %832 = zext i32 %831 to i64
  %833 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 %832
  %834 = load i32, ptr %833, align 4, !tbaa !14
  %835 = load i32, ptr %58, align 4, !tbaa !14
  %836 = icmp eq i32 %834, %835
  br i1 %836, label %837, label %839

837:                                              ; preds = %830
  %838 = load i32, ptr %59, align 4, !tbaa !14
  store i32 %838, ptr %61, align 4, !tbaa !14
  br label %843

839:                                              ; preds = %830
  br label %840

840:                                              ; preds = %839
  %841 = load i32, ptr %59, align 4, !tbaa !14
  %842 = add i32 %841, 1
  store i32 %842, ptr %59, align 4, !tbaa !14
  br label %826, !llvm.loop !41

843:                                              ; preds = %837, %826
  %844 = load i32, ptr %61, align 4, !tbaa !14
  %845 = icmp eq i32 -1, %844
  br i1 %845, label %846, label %883

846:                                              ; preds = %843
  %847 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 0
  %848 = load i32, ptr %29, align 4, !tbaa !14
  %849 = load ptr, ptr %36, align 8, !tbaa !5
  %850 = load i32, ptr %38, align 4, !tbaa !14
  %851 = zext i32 %850 to i64
  %852 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %849, i64 %851
  %853 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %852, i64 1
  %854 = load i32, ptr %37, align 4, !tbaa !14
  %855 = load i32, ptr %38, align 4, !tbaa !14
  %856 = sub i32 %854, %855
  %857 = sub i32 %856, 1
  %858 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef %847, i32 noundef %848, ptr noundef %853, i32 noundef %857)
  store i32 %858, ptr %61, align 4, !tbaa !14
  %859 = load ptr, ptr %6, align 8, !tbaa !5
  %860 = load ptr, ptr %18, align 8, !tbaa !5
  %861 = load i32, ptr %33, align 4, !tbaa !14
  %862 = load i32, ptr %58, align 4, !tbaa !14
  %863 = mul i32 %861, %862
  %864 = zext i32 %863 to i64
  %865 = getelementptr inbounds i8, ptr %860, i64 %864
  %866 = load i32, ptr %33, align 4, !tbaa !14
  %867 = load i32, ptr %33, align 4, !tbaa !14
  %868 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %859, ptr noundef %865, i32 noundef %866, i32 noundef %867, i32 noundef 1, ptr noundef %40)
  %869 = load ptr, ptr %6, align 8, !tbaa !5
  %870 = load i32, ptr %33, align 4, !tbaa !14
  %871 = load i32, ptr %61, align 4, !tbaa !14
  %872 = load i32, ptr %32, align 4, !tbaa !14
  %873 = udiv i32 %871, %872
  %874 = load i32, ptr %61, align 4, !tbaa !14
  %875 = load i32, ptr %32, align 4, !tbaa !14
  %876 = urem i32 %874, %875
  %877 = trunc i32 %876 to i16
  %878 = load i32, ptr %31, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_struct_move(ptr noundef %869, i32 noundef 232751106, i32 noundef 58, i32 noundef 0, i32 noundef %870, i32 noundef %873, i16 noundef signext %877, i32 noundef %878)
  %879 = load i32, ptr %58, align 4, !tbaa !14
  %880 = load i32, ptr %61, align 4, !tbaa !14
  %881 = zext i32 %880 to i64
  %882 = getelementptr inbounds [120 x i32], ptr %28, i64 0, i64 %881
  store i32 %879, ptr %882, align 4, !tbaa !14
  br label %883

883:                                              ; preds = %846, %843
  br label %884

884:                                              ; preds = %883, %821
  %885 = load ptr, ptr %6, align 8, !tbaa !5
  %886 = load i32, ptr %65, align 4, !tbaa !14
  %887 = load i32, ptr %47, align 4, !tbaa !14
  %888 = load i32, ptr %61, align 4, !tbaa !14
  %889 = load i32, ptr %32, align 4, !tbaa !14
  %890 = udiv i32 %888, %889
  %891 = load i32, ptr %61, align 4, !tbaa !14
  %892 = load i32, ptr %32, align 4, !tbaa !14
  %893 = urem i32 %891, %892
  %894 = trunc i32 %893 to i8
  %895 = load i32, ptr %62, align 4, !tbaa !14
  %896 = load i32, ptr %11, align 4, !tbaa !14
  %897 = add i32 %895, %896
  %898 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %885, i32 noundef %886, i32 noundef %887, i32 noundef %890, i8 noundef zeroext %894, i32 noundef %897, i32 noundef %898)
  %899 = load ptr, ptr %6, align 8, !tbaa !5
  %900 = load i32, ptr %65, align 4, !tbaa !14
  %901 = load i32, ptr %47, align 4, !tbaa !14
  %902 = add i32 %901, 1
  %903 = load i32, ptr %61, align 4, !tbaa !14
  %904 = load i32, ptr %32, align 4, !tbaa !14
  %905 = udiv i32 %903, %904
  %906 = load i32, ptr %61, align 4, !tbaa !14
  %907 = load i32, ptr %32, align 4, !tbaa !14
  %908 = urem i32 %906, %907
  %909 = trunc i32 %908 to i8
  %910 = load i32, ptr %62, align 4, !tbaa !14
  %911 = load i32, ptr %11, align 4, !tbaa !14
  %912 = add i32 %910, %911
  %913 = add i32 %912, 1
  %914 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %899, i32 noundef %900, i32 noundef %902, i32 noundef %905, i8 noundef zeroext %909, i32 noundef %913, i32 noundef %914)
  %915 = load i32, ptr %64, align 4, !tbaa !14
  %916 = icmp ne i32 %915, 0
  br i1 %916, label %917, label %936

917:                                              ; preds = %884
  %918 = load ptr, ptr %6, align 8, !tbaa !5
  %919 = load i32, ptr %62, align 4, !tbaa !14
  %920 = load i32, ptr %11, align 4, !tbaa !14
  %921 = add i32 %919, %920
  %922 = load i32, ptr %62, align 4, !tbaa !14
  %923 = load i32, ptr %11, align 4, !tbaa !14
  %924 = add i32 %922, %923
  %925 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %918, i32 noundef 782301194, i32 noundef %921, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %924, i32 noundef %925)
  %926 = load ptr, ptr %6, align 8, !tbaa !5
  %927 = load i32, ptr %62, align 4, !tbaa !14
  %928 = load i32, ptr %11, align 4, !tbaa !14
  %929 = add i32 %927, %928
  %930 = add i32 %929, 1
  %931 = load i32, ptr %62, align 4, !tbaa !14
  %932 = load i32, ptr %11, align 4, !tbaa !14
  %933 = add i32 %931, %932
  %934 = add i32 %933, 1
  %935 = load i32, ptr %30, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %926, i32 noundef 782301194, i32 noundef %930, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %934, i32 noundef %935)
  br label %936

936:                                              ; preds = %917, %884
  %937 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %46, i32 0, i32 6
  %938 = load i32, ptr %12, align 4, !tbaa !14
  %939 = zext i32 %938 to i64
  %940 = getelementptr inbounds [12 x i8], ptr %937, i64 0, i64 %939
  %941 = load i8, ptr %940, align 1, !tbaa !33
  %942 = zext i8 %941 to i32
  %943 = and i32 2, %942
  %944 = icmp ne i32 %943, 0
  br i1 %944, label %945, label %958

945:                                              ; preds = %936
  %946 = load ptr, ptr %6, align 8, !tbaa !5
  %947 = load i32, ptr %66, align 4, !tbaa !14
  %948 = load i32, ptr %60, align 4, !tbaa !14
  %949 = load i32, ptr %11, align 4, !tbaa !14
  %950 = mul i32 16, %949
  %951 = load i32, ptr %62, align 4, !tbaa !14
  %952 = load i32, ptr %11, align 4, !tbaa !14
  %953 = add i32 %951, %952
  %954 = load i32, ptr %62, align 4, !tbaa !14
  %955 = load i32, ptr %11, align 4, !tbaa !14
  %956 = add i32 %954, %955
  %957 = add i32 %956, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %946, i32 noundef %947, i32 noundef %948, i32 noundef %950, i32 noundef %953, i32 noundef %957, i32 noundef 1)
  br label %958

958:                                              ; preds = %945, %936
  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 4, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %959

959:                                              ; preds = %958
  %960 = load i32, ptr %12, align 4, !tbaa !14
  %961 = add i32 %960, 1
  store i32 %961, ptr %12, align 4, !tbaa !14
  br label %713, !llvm.loop !42

962:                                              ; preds = %713
  br label %963

963:                                              ; preds = %962
  %964 = load i32, ptr %11, align 4, !tbaa !14
  %965 = add i32 %964, 2
  store i32 %965, ptr %11, align 4, !tbaa !14
  br label %688, !llvm.loop !43

966:                                              ; preds = %688
  br label %967

967:                                              ; preds = %966, %686
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 116, ptr %46) #8
  br label %968

968:                                              ; preds = %967
  %969 = load i32, ptr %38, align 4, !tbaa !14
  %970 = add i32 %969, 1
  store i32 %970, ptr %38, align 4, !tbaa !14
  br label %432, !llvm.loop !44

971:                                              ; preds = %432
  %972 = load i32, ptr %35, align 4, !tbaa !14
  %973 = icmp ne i32 %972, 0
  br i1 %973, label %974, label %1058

974:                                              ; preds = %971
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  store i32 0, ptr %67, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %975 = load i32, ptr %16, align 4, !tbaa !14
  %976 = icmp eq i32 1, %975
  br i1 %976, label %977, label %978

977:                                              ; preds = %974
  store i32 1023410182, ptr %68, align 4, !tbaa !14
  br label %983

978:                                              ; preds = %974
  %979 = load i32, ptr %34, align 4, !tbaa !14
  %980 = icmp ne i32 %979, 0
  %981 = zext i1 %980 to i64
  %982 = select i1 %980, i32 738197511, i32 754974727
  store i32 %982, ptr %68, align 4, !tbaa !14
  br label %983

983:                                              ; preds = %978, %977
  store i32 0, ptr %12, align 4, !tbaa !14
  br label %984

984:                                              ; preds = %1054, %983
  %985 = load i32, ptr %12, align 4, !tbaa !14
  %986 = load ptr, ptr %7, align 8, !tbaa !5
  %987 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %986, i32 0, i32 0
  %988 = load i32, ptr %987, align 1, !tbaa !9
  %989 = icmp ult i32 %985, %988
  br i1 %989, label %990, label %1057

990:                                              ; preds = %984
  %991 = load ptr, ptr %8, align 8, !tbaa !5
  %992 = load i32, ptr %12, align 4, !tbaa !14
  %993 = add i32 %992, 1
  %994 = zext i32 %993 to i64
  %995 = getelementptr inbounds i32, ptr %991, i64 %994
  %996 = load i32, ptr %995, align 4, !tbaa !14
  %997 = load ptr, ptr %8, align 8, !tbaa !5
  %998 = load i32, ptr %12, align 4, !tbaa !14
  %999 = zext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  %1001 = load i32, ptr %1000, align 4, !tbaa !14
  %1002 = icmp eq i32 %996, %1001
  br i1 %1002, label %1003, label %1053

1003:                                             ; preds = %990
  %1004 = load i32, ptr %67, align 4, !tbaa !14
  %1005 = icmp ne i32 %1004, 0
  br i1 %1005, label %1011, label %1006

1006:                                             ; preds = %1003
  %1007 = load ptr, ptr %6, align 8, !tbaa !5
  %1008 = load i32, ptr %23, align 4, !tbaa !14
  %1009 = load i32, ptr %23, align 4, !tbaa !14
  %1010 = load i32, ptr %23, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1007, i32 noundef 773856275, i32 noundef %1008, i32 noundef %1009, i8 noundef zeroext 0, i32 noundef %1010, i32 noundef 1)
  store i32 1, ptr %67, align 4, !tbaa !14
  br label %1011

1011:                                             ; preds = %1006, %1003
  %1012 = load ptr, ptr %6, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %1014 = load i32, ptr %1013, align 4, !tbaa !27
  %1015 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 22
  %1016 = load i32, ptr %1015, align 4, !tbaa !28
  %1017 = load i32, ptr %24, align 4, !tbaa !14
  %1018 = load i32, ptr %12, align 4, !tbaa !14
  %1019 = zext i32 %1018 to i64
  %1020 = load ptr, ptr %7, align 8, !tbaa !5
  %1021 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %1020, i32 0, i32 5
  %1022 = load i32, ptr %1021, align 1, !tbaa !16
  %1023 = zext i32 %1022 to i64
  %1024 = mul i64 %1019, %1023
  %1025 = load i32, ptr %33, align 4, !tbaa !14
  %1026 = zext i32 %1025 to i64
  %1027 = mul i64 %1024, %1026
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1012, i32 noundef 4096, i32 noundef %1014, i32 noundef %1016, i32 noundef %1017, i64 noundef %1027)
  %1028 = load i32, ptr %16, align 4, !tbaa !14
  %1029 = icmp eq i32 1, %1028
  br i1 %1029, label %1030, label %1035

1030:                                             ; preds = %1011
  %1031 = load ptr, ptr %6, align 8, !tbaa !5
  %1032 = load i32, ptr %68, align 4, !tbaa !14
  %1033 = load i32, ptr %24, align 4, !tbaa !14
  %1034 = load i32, ptr %23, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1031, i32 noundef %1032, i32 noundef %1033, i32 noundef 0, i32 noundef 0, i32 noundef %1034, i32 noundef 1)
  br label %1052

1035:                                             ; preds = %1011
  store i32 0, ptr %11, align 4, !tbaa !14
  br label %1036

1036:                                             ; preds = %1048, %1035
  %1037 = load i32, ptr %11, align 4, !tbaa !14
  %1038 = load i32, ptr %16, align 4, !tbaa !14
  %1039 = icmp ult i32 %1037, %1038
  br i1 %1039, label %1040, label %1051

1040:                                             ; preds = %1036
  %1041 = load ptr, ptr %6, align 8, !tbaa !5
  %1042 = load i32, ptr %68, align 4, !tbaa !14
  %1043 = load i32, ptr %24, align 4, !tbaa !14
  %1044 = load i32, ptr %11, align 4, !tbaa !14
  %1045 = mul i32 16, %1044
  %1046 = load i32, ptr %23, align 4, !tbaa !14
  %1047 = load i32, ptr %23, align 4, !tbaa !14
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %1041, i32 noundef %1042, i32 noundef %1043, i32 noundef %1045, i32 noundef %1046, i32 noundef %1047, i32 noundef 1)
  br label %1048

1048:                                             ; preds = %1040
  %1049 = load i32, ptr %11, align 4, !tbaa !14
  %1050 = add i32 %1049, 2
  store i32 %1050, ptr %11, align 4, !tbaa !14
  br label %1036, !llvm.loop !45

1051:                                             ; preds = %1036
  br label %1052

1052:                                             ; preds = %1051, %1030
  br label %1053

1053:                                             ; preds = %1052, %990
  br label %1054

1054:                                             ; preds = %1053
  %1055 = load i32, ptr %12, align 4, !tbaa !14
  %1056 = add i32 %1055, 1
  store i32 %1056, ptr %12, align 4, !tbaa !14
  br label %984, !llvm.loop !46

1057:                                             ; preds = %984
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %1058

1058:                                             ; preds = %1057, %971
  %1059 = load ptr, ptr %6, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 3
  %1061 = load i32, ptr %1060, align 4, !tbaa !26
  %1062 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 3
  %1063 = load i32, ptr %1062, align 4, !tbaa !26
  %1064 = load i32, ptr %16, align 4, !tbaa !14
  %1065 = mul i32 16, %1064
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1059, i32 noundef 285212678, i32 noundef %1061, i32 noundef %1063, i32 noundef %1065, i8 noundef zeroext 0)
  %1066 = load ptr, ptr %6, align 8, !tbaa !5
  %1067 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %1068 = load i32, ptr %1067, align 4, !tbaa !27
  %1069 = getelementptr inbounds %struct.libxsmm_gp_reg_mapping_struct, ptr %41, i32 0, i32 5
  %1070 = load i32, ptr %1069, align 4, !tbaa !27
  %1071 = load i32, ptr %16, align 4, !tbaa !14
  %1072 = mul i32 16, %1071
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %1066, i32 noundef 285212678, i32 noundef %1068, i32 noundef %1070, i32 noundef %1072, i8 noundef zeroext 0)
  %1073 = load ptr, ptr %6, align 8, !tbaa !5
  %1074 = load i32, ptr %32, align 4, !tbaa !14
  %1075 = load i32, ptr %16, align 4, !tbaa !14
  %1076 = mul i32 %1074, %1075
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %1073, ptr noundef %39, i32 noundef 55, i32 noundef %1076)
  %1077 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_stream(ptr noundef %1077, i16 noundef zeroext 4095)
  %1078 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_close_data(ptr noundef %1078, ptr noundef %40)
  br label %1079

1079:                                             ; preds = %1058, %323, %232, %199, %167
  %1080 = load ptr, ptr %18, align 8, !tbaa !5
  call void @free(ptr noundef %1080) #8
  %1081 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %1081) #8
  %1082 = load ptr, ptr %20, align 8, !tbaa !5
  call void @free(ptr noundef %1082) #8
  %1083 = load ptr, ptr %36, align 8, !tbaa !5
  call void @free(ptr noundef %1083) #8
  call void @llvm.lifetime.end.p0(i64 132, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 82440, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 2052, 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 8, 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 480, 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_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_aarch64_instruction_asimd_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #6

declare void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 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_asimd_struct_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef signext, i32 noundef) #6

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

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 = !{!10, !11, i64 20}
!17 = !{!10, !11, i64 4}
!18 = !{!19, !19, i64 0}
!19 = !{!"double", !7, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!25, !11, i64 0}
!25 = !{!"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}
!26 = !{!25, !11, i64 12}
!27 = !{!25, !11, i64 20}
!28 = !{!25, !11, i64 88}
!29 = !{!25, !11, i64 92}
!30 = distinct !{!30, !23}
!31 = !{!10, !12, i64 33}
!32 = !{i64 0, i64 4, !14, i64 4, i64 48, !33, i64 52, i64 2, !34, i64 54, i64 24, !33, i64 78, i64 12, !33, i64 90, i64 12, !33, i64 102, i64 12, !33}
!33 = !{!7, !7, i64 0}
!34 = !{!13, !13, i64 0}
!35 = !{!36, !11, i64 0}
!36 = !{!"", !11, i64 0, !7, i64 4, !13, i64 52, !7, i64 54, !7, i64 78, !7, i64 90, !7, i64 102}
!37 = !{!10, !11, i64 16}
!38 = !{!36, !13, i64 52}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}
!44 = distinct !{!44, !23}
!45 = distinct !{!45, !23}
!46 = distinct !{!46, !23}


; 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_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
@__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon = external hidden unnamed_addr constant [54 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon = external hidden unnamed_addr constant [178 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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon(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 [120 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_gp_reg_mapping_struct, align 4
  %12 = alloca [15 x i8], align 1
  %13 = alloca %struct.libxsmm_asparse_reg_op, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #9
  %14 = load i32, ptr %1, align 1, !tbaa !5
  %15 = zext i32 %14 to i64
  %16 = getelementptr inbounds i32, ptr %2, i64 %15
  %17 = load i32, ptr %16, align 4, !tbaa !12
  %.not = icmp eq i32 %17, 0
  br i1 %.not, label %.thread419, label %18

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

.thread419:                                       ; preds = %5, %18
  %25 = phi ptr [ %23, %18 ], [ null, %5 ]
  %26 = phi ptr [ %21, %18 ], [ null, %5 ]
  %27 = phi ptr [ %24, %18 ], [ null, %5 ]
  %28 = getelementptr inbounds i8, ptr %1, i64 29
  %29 = tail call i32 @LIBXSMM_GEMM_GETENUM_AB_COMMON_PREC(ptr noundef nonnull %28) #9
  %30 = icmp ne i32 %29, 0
  call void @llvm.lifetime.start.p0(i64 480, ptr nonnull %7) #9
  %31 = select i1 %30, i32 5, i32 7
  %32 = select i1 %30, i32 4, i32 6
  %33 = select i1 %30, i32 4, i32 2
  %34 = select i1 %30, i32 4, i32 8
  %35 = getelementptr inbounds i8, ptr %1, i64 24
  %36 = load i32, ptr %35, align 1, !tbaa !13
  %37 = and i32 %36, 48
  %38 = icmp eq i32 %37, 48
  br i1 %38, label %39, label %45

39:                                               ; preds = %.thread419
  %40 = getelementptr inbounds i8, ptr %1, i64 20
  %41 = load i32, ptr %40, align 1, !tbaa !14
  %42 = add nsw i32 %33, -1
  %43 = and i32 %41, %42
  %44 = icmp eq i32 %43, 0
  br label %45

45:                                               ; preds = %39, %.thread419
  %46 = phi i1 [ false, %.thread419 ], [ %44, %39 ]
  %47 = and i32 %36, 4
  %48 = 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 132, ptr nonnull %11) #9
  %49 = insertelement <4 x ptr> poison, ptr %25, i64 0
  %50 = insertelement <4 x ptr> %49, ptr %26, i64 1
  %51 = insertelement <4 x ptr> %50, ptr %27, i64 2
  %52 = insertelement <4 x ptr> %51, ptr %48, i64 3
  %53 = icmp eq <4 x ptr> %52, zeroinitializer
  %54 = bitcast <4 x i1> %53 to i4
  %.not499 = icmp eq i4 %54, 0
  br i1 %.not499, label %60, label %55

55:                                               ; preds = %45
  %56 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %57 = icmp ugt i32 %56, 1
  %58 = load i32, ptr @libxsmm_verbosity, align 4
  %59 = select i1 %57, i32 %58, 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_neon, ptr noundef nonnull @.str, i32 noundef 841, i32 noundef %59) #9
  br label %398

60:                                               ; preds = %45
  %61 = getelementptr inbounds i8, ptr %1, i64 4
  %62 = load i32, ptr %61, align 1, !tbaa !15
  %.not399 = icmp eq i32 %62, %33
  br i1 %.not399, label %74, label %63

63:                                               ; preds = %60
  %64 = shl nuw nsw i32 %33, 1
  %65 = icmp eq i32 %62, %64
  br i1 %65, label %74, label %66

66:                                               ; preds = %63
  %67 = shl nuw nsw i32 %33, 2
  %68 = icmp eq i32 %62, %67
  br i1 %68, label %74, label %69

69:                                               ; preds = %66
  %70 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %71 = icmp ugt i32 %70, 1
  %72 = load i32, ptr @libxsmm_verbosity, align 4
  %73 = select i1 %71, i32 %72, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90016, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef nonnull @.str, i32 noundef 853, i32 noundef %73) #9
  br label %398

74:                                               ; preds = %66, %63, %60
  %75 = phi i32 [ 1, %60 ], [ 2, %63 ], [ 2, %66 ]
  %.0365 = phi i32 [ 1, %60 ], [ 2, %63 ], [ 4, %66 ]
  %76 = add nuw nsw i32 %75, %.0365
  %77 = sub nuw nsw i32 32, %76
  %78 = select i1 %30, i32 2, i32 1
  %79 = shl nuw nsw i32 %77, %78
  %.not400 = icmp eq ptr %4, null
  br i1 %.not400, label %80, label %81

80:                                               ; preds = %74
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, i32 noundef 861, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon) #11
  unreachable

81:                                               ; preds = %74
  call void @libxsmm_analyse_sparse_nnz(i32 noundef %17, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef nonnull %27)
  %82 = load i32, ptr %6, align 4, !tbaa !12
  %83 = icmp ugt i32 %82, 1280
  br i1 %83, label %84, label %89

84:                                               ; preds = %81
  %85 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %86 = icmp ugt i32 %85, 1
  %87 = load i32, ptr @libxsmm_verbosity, align 4
  %88 = select i1 %86, i32 %87, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90036, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef nonnull @.str, i32 noundef 869, i32 noundef %88) #9
  br label %398

89:                                               ; preds = %81
  %90 = icmp ne i32 %82, 0
  %or.cond466 = and i1 %30, %90
  br i1 %or.cond466, label %.lr.ph.preheader, label %.loopexit433

.lr.ph.preheader:                                 ; preds = %89
  %wide.trip.count = zext nneg i32 %82 to i64
  %min.iters.check = icmp ult i32 %82, 4
  br i1 %min.iters.check, label %.lr.ph.preheader503, 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 ]
  %91 = getelementptr inbounds double, ptr %26, i64 %index
  %92 = getelementptr inbounds i8, ptr %91, i64 16
  %wide.load = load <2 x double>, ptr %91, align 8, !tbaa !16
  %wide.load498 = load <2 x double>, ptr %92, align 8, !tbaa !16
  %93 = fptrunc <2 x double> %wide.load to <2 x float>
  %94 = fptrunc <2 x double> %wide.load498 to <2 x float>
  %95 = getelementptr inbounds float, ptr %26, i64 %index
  %96 = getelementptr inbounds i8, ptr %95, i64 8
  store <2 x float> %93, ptr %95, align 4
  store <2 x float> %94, ptr %96, align 4
  %index.next = add nuw i64 %index, 4
  %97 = icmp eq i64 %index.next, %n.vec
  br i1 %97, label %middle.block, label %vector.body, !llvm.loop !18

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

.lr.ph.preheader503:                              ; 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.preheader503, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader503 ]
  %98 = getelementptr inbounds double, ptr %26, i64 %indvars.iv
  %99 = load double, ptr %98, align 8, !tbaa !16
  %100 = fptrunc double %99 to float
  %101 = getelementptr inbounds float, ptr %26, i64 %indvars.iv
  store float %100, ptr %101, 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 %.loopexit433, label %.lr.ph, !llvm.loop !22

.loopexit433:                                     ; preds = %.lr.ph, %middle.block, %89
  %.not401 = icmp ugt i32 %82, %79
  br i1 %.not401, label %114, label %102

102:                                              ; preds = %.loopexit433
  %103 = add nsw i32 %33, -1
  %104 = add nuw nsw i32 %103, %82
  %105 = lshr i32 %104, %78
  %106 = add nuw nsw i32 %105, %75
  %107 = shl nuw nsw i32 %.0365, 2
  %108 = add nuw nsw i32 %106, %107
  %109 = icmp ult i32 %108, 33
  br i1 %109, label %119, label %110

110:                                              ; preds = %102
  %111 = shl nuw nsw i32 %.0365, 1
  %112 = add nuw nsw i32 %106, %111
  %113 = icmp ult i32 %112, 33
  %. = select i1 %113, i32 2, i32 1
  br label %119

114:                                              ; preds = %.loopexit433
  %115 = shl nuw nsw i32 %.0365, 2
  %116 = sub nuw nsw i32 32, %115
  %117 = sub nuw nsw i32 %116, %75
  %118 = shl nuw nsw i32 %117, %78
  br label %119

119:                                              ; preds = %110, %102, %114
  %.0382 = phi i32 [ %118, %114 ], [ 0, %102 ], [ 0, %110 ]
  %.0371 = phi i32 [ %117, %114 ], [ %105, %102 ], [ %105, %110 ]
  %.0367 = phi i32 [ %116, %114 ], [ %106, %102 ], [ %106, %110 ]
  %.0362 = phi i32 [ 4, %114 ], [ 4, %102 ], [ %., %110 ]
  %120 = load i32, ptr %1, align 1, !tbaa !5
  call void @libxsmm_asparse_reg_sequence(i32 noundef %120, i32 noundef %.0362, ptr noundef %2, ptr noundef %3, ptr noundef %25, ptr noundef %27, i32 noundef 65536, ptr noundef %48, ptr noundef nonnull %8)
  %121 = load i32, ptr %8, align 4, !tbaa !12
  %122 = icmp eq i32 %121, 0
  br i1 %122, label %123, label %128

123:                                              ; preds = %119
  %124 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !12
  %125 = icmp ugt i32 %124, 1
  %126 = load i32, ptr @libxsmm_verbosity, align 4
  %127 = select i1 %125, i32 %126, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90005, ptr noundef nonnull @__func__.libxsmm_generator_spgemm_csr_asparse_reg_aarch64_neon, ptr noundef nonnull @.str, i32 noundef 911, i32 noundef %127) #9
  br label %398

128:                                              ; preds = %119
  call void @libxsmm_reset_aarch64_gp_reg_mapping(ptr noundef nonnull %11) #9
  store i32 32, ptr %11, align 4, !tbaa !23
  %129 = getelementptr inbounds i8, ptr %11, i64 12
  store i32 33, ptr %129, align 4, !tbaa !25
  %130 = getelementptr inbounds i8, ptr %11, i64 20
  store i32 34, ptr %130, align 4, !tbaa !26
  %131 = getelementptr inbounds i8, ptr %11, i64 88
  store i32 56, ptr %131, align 4, !tbaa !27
  %132 = getelementptr inbounds i8, ptr %11, i64 92
  store i32 57, ptr %132, align 4, !tbaa !28
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(480) %7, i8 -1, i64 480, 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
  %133 = load i32, ptr %35, align 1, !tbaa !13
  %134 = and i32 %133, 16384
  %.not402 = icmp eq i32 %134, 0
  br i1 %.not402, label %142, label %135

135:                                              ; preds = %128
  %136 = load i32, ptr %11, align 4, !tbaa !23
  %137 = load i32, ptr %132, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_alu_compute_shifted_reg(ptr noundef %0, i32 noundef 167772167, i32 noundef %136, i32 noundef %136, i32 noundef %137, i32 noundef 0, i32 noundef 0) #9
  %138 = load i32, ptr %132, align 4, !tbaa !28
  %139 = load i32, ptr %129, align 4, !tbaa !25
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %138, i32 noundef 127, i32 noundef 80, i32 noundef %139) #9
  %140 = load i32, ptr %132, align 4, !tbaa !28
  %141 = load i32, ptr %130, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %140, i32 noundef 127, i32 noundef 128, i32 noundef %141) #9
  br label %142

142:                                              ; preds = %128, %135
  %143 = load i32, ptr %6, align 4, !tbaa !12
  %.not403 = icmp ugt i32 %143, %79
  br i1 %.not403, label %.loopexit431, label %144

144:                                              ; preds = %142
  %145 = select i1 %30, i32 2, i32 3
  %146 = shl nuw i32 %143, %145
  %147 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef nonnull %26, i32 noundef %146, i32 noundef 16, i32 noundef 1, ptr noundef nonnull %10) #9
  %148 = load i32, ptr %6, align 4, !tbaa !12
  %149 = select i1 %30, i32 3, i32 1
  %150 = and i32 %148, %149
  %.not404 = icmp eq i32 %150, 0
  br i1 %.not404, label %155, label %151

151:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 15, ptr nonnull %12) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(15) %12, i8 0, i64 15, i1 false)
  %152 = shl i32 %148, %145
  %153 = and i32 %152, 12
  %154 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef nonnull %12, i32 noundef %153, i32 noundef 1, i32 noundef 1, ptr noundef nonnull %10) #9
  call void @llvm.lifetime.end.p0(i64 15, ptr nonnull %12) #9
  br label %155

155:                                              ; preds = %151, %144
  %156 = load i32, ptr %131, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %0, i32 noundef %156, i32 noundef %147, ptr noundef nonnull %10) #9
  %157 = and i32 %.0371, 1
  %.not405 = icmp eq i32 %157, 0
  br i1 %.not405, label %160, label %158

158:                                              ; preds = %155
  %159 = load i32, ptr %131, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %159, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 1) #9
  br label %160

160:                                              ; preds = %158, %155
  %.not467 = icmp ult i32 %.0371, 2
  br i1 %.not467, label %.loopexit431, label %.lr.ph438

.lr.ph438:                                        ; preds = %160, %.lr.ph438
  %.1360437 = phi i32 [ %164, %.lr.ph438 ], [ %157, %160 ]
  %161 = load i32, ptr %131, align 4, !tbaa !27
  %162 = shl i32 %.1360437, 4
  %163 = add nuw nsw i32 %.1360437, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %0, i32 noundef 759169031, i32 noundef %161, i32 noundef %162, i32 noundef %.1360437, i32 noundef %163, i32 noundef 1) #9
  %164 = add nuw i32 %.1360437, 2
  %165 = icmp ult i32 %164, %.0371
  br i1 %165, label %.lr.ph438, label %.loopexit431, !llvm.loop !29

.loopexit431:                                     ; preds = %.lr.ph438, %160, %142
  %166 = getelementptr inbounds i8, ptr %1, i64 33
  %167 = load i64, ptr %166, align 1, !tbaa !30
  %168 = trunc i64 %167 to i32
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 55, i32 noundef %168) #9
  %169 = load i32, ptr %6, align 4, !tbaa !12
  %170 = icmp ugt i32 %169, %79
  br i1 %170, label %171, label %172

171:                                              ; preds = %.loopexit431
  call void @libxsmm_aarch64_instruction_adr_data(ptr noundef %0, i32 noundef 58, i32 noundef 0, ptr noundef nonnull %10) #9
  br label %172

172:                                              ; preds = %171, %.loopexit431
  %173 = load i32, ptr %129, align 4, !tbaa !25
  %174 = load i32, ptr %132, align 4, !tbaa !28
  call void @libxsmm_generator_mov_aarch64(ptr noundef %0, i32 noundef %173, i32 noundef %174) #9
  %175 = load i32, ptr %8, align 4, !tbaa !12
  %.not468 = icmp eq i32 %175, 0
  br i1 %.not468, label %._crit_edge459, label %.lr.ph458

.lr.ph458:                                        ; preds = %172
  %176 = getelementptr inbounds i8, ptr %1, i64 16
  %177 = select i1 %30, i32 2, i32 3
  %178 = add nuw i32 %.0371, 1
  %179 = getelementptr inbounds i8, ptr %13, i64 52
  %180 = getelementptr inbounds i8, ptr %13, i64 54
  %181 = getelementptr inbounds i8, ptr %13, i64 90
  %182 = getelementptr inbounds i8, ptr %13, i64 4
  %183 = getelementptr inbounds i8, ptr %1, i64 20
  %184 = getelementptr inbounds i8, ptr %13, i64 78
  %185 = select i1 %46, i32 738197511, i32 754974727
  %186 = getelementptr inbounds i8, ptr %13, i64 102
  %.not411 = icmp eq i32 %47, 0
  %.not469 = icmp eq i32 %.0382, 0
  %187 = add nuw nsw i32 %33, 65535
  %188 = add nuw nsw i32 %33, 255
  br label %189

189:                                              ; preds = %.lr.ph458, %.loopexit428
  %indvars.iv486 = phi i64 [ 0, %.lr.ph458 ], [ %indvars.iv.next487, %.loopexit428 ]
  %.0374456 = phi i32 [ 0, %.lr.ph458 ], [ %.1375, %.loopexit428 ]
  %.0377455 = phi i32 [ -1, %.lr.ph458 ], [ %.4381, %.loopexit428 ]
  call void @llvm.lifetime.start.p0(i64 116, ptr nonnull %13) #9
  %190 = getelementptr inbounds %struct.libxsmm_asparse_reg_op, ptr %48, i64 %indvars.iv486
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(116) %13, ptr noundef nonnull align 4 dereferenceable(116) %190, i64 116, i1 false), !tbaa.struct !31
  %191 = load i32, ptr %13, align 4, !tbaa !34
  %192 = load i32, ptr %176, align 1, !tbaa !36
  %193 = mul i32 %192, %191
  %194 = shl i32 %193, %177
  %.not408 = icmp eq i32 %194, %.0374456
  br i1 %.not408, label %203, label %195

195:                                              ; preds = %189
  %196 = icmp sgt i32 %194, %.0374456
  %197 = select i1 %196, i32 4096, i32 4097
  %198 = load i32, ptr %132, align 4, !tbaa !28
  %199 = load i32, ptr %131, align 4, !tbaa !27
  %200 = sub nsw i32 %194, %.0374456
  %201 = call i32 @llvm.abs.i32(i32 %200, i1 true)
  %202 = zext nneg i32 %201 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %197, i32 noundef %198, i32 noundef %199, i32 noundef %198, i64 noundef %202) #9
  br label %203

203:                                              ; preds = %195, %189
  %.1375 = phi i32 [ %194, %195 ], [ %.0374456, %189 ]
  br i1 %.not399, label %207, label %.preheader429

.preheader429:                                    ; preds = %203
  %204 = getelementptr inbounds i8, ptr %190, i64 116
  %205 = trunc nuw i64 %indvars.iv486 to i32
  %206 = xor i32 %205, -1
  br label %281

207:                                              ; preds = %203
  %.not414 = icmp eq i32 %.0377455, %194
  br i1 %.not414, label %210, label %208

208:                                              ; preds = %207
  %209 = load i32, ptr %132, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %209, i32 noundef 0, i32 noundef 0, i32 noundef %.0371, i32 noundef 1) #9
  br label %210

210:                                              ; preds = %208, %207
  %.1378 = phi i32 [ %194, %208 ], [ %.0377455, %207 ]
  %211 = load i16, ptr %179, align 4, !tbaa !37
  %.not472 = icmp eq i16 %211, 0
  br i1 %.not472, label %.loopexit428, label %.lr.ph452

.lr.ph452:                                        ; preds = %210
  %212 = getelementptr inbounds i8, ptr %190, i64 116
  %213 = trunc nuw i64 %indvars.iv486 to i32
  %214 = xor i32 %213, -1
  br label %215

215:                                              ; preds = %.lr.ph452, %277
  %indvars.iv483 = phi i64 [ 0, %.lr.ph452 ], [ %indvars.iv.next484, %277 ]
  %216 = getelementptr inbounds [12 x i16], ptr %180, i64 0, i64 %indvars.iv483
  %217 = load i16, ptr %216, align 2, !tbaa !33
  %218 = zext i16 %217 to i32
  %219 = getelementptr inbounds [12 x i8], ptr %181, i64 0, i64 %indvars.iv483
  %220 = load i8, ptr %219, align 1, !tbaa !32
  %221 = zext i8 %220 to i32
  %222 = add nuw nsw i32 %221, 44
  %223 = load i32, ptr %6, align 4, !tbaa !12
  %224 = icmp ugt i32 %223, %79
  %225 = select i1 %224, i32 -1, i32 %218
  %226 = add nuw i32 %.0367, %221
  %227 = getelementptr inbounds [12 x i8], ptr %184, i64 0, i64 %indvars.iv483
  %228 = load i8, ptr %227, align 1, !tbaa !32
  %229 = icmp eq i8 %228, 1
  %230 = select i1 %229, i32 260050959, i32 260067343
  %231 = getelementptr inbounds [12 x i8], ptr %186, i64 0, i64 %indvars.iv483
  %232 = load i8, ptr %231, align 1, !tbaa !32
  %233 = and i8 %232, 1
  %.not415 = icmp eq i8 %233, 0
  br i1 %.not415, label %247, label %234

234:                                              ; preds = %215
  %235 = getelementptr inbounds [12 x i32], ptr %182, i64 0, i64 %indvars.iv483
  %236 = load i32, ptr %235, align 4, !tbaa !12
  %237 = load i32, ptr %183, align 1, !tbaa !14
  %238 = mul i32 %237, %236
  %239 = shl i32 %238, %177
  %240 = load i32, ptr %130, align 4, !tbaa !26
  %241 = load i32, ptr %131, align 4, !tbaa !27
  %242 = zext i32 %239 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %240, i32 noundef %241, i32 noundef %222, i64 noundef %242) #9
  br i1 %.not411, label %246, label %243

243:                                              ; preds = %234
  %244 = icmp eq i8 %228, -1
  %245 = zext i1 %244 to i32
  br label %247

246:                                              ; preds = %234
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %222, i32 noundef 0, i32 noundef 0, i32 noundef %226, i32 noundef 1) #9
  br label %247

247:                                              ; preds = %243, %246, %215
  %.0369 = phi i32 [ %245, %243 ], [ 0, %246 ], [ 0, %215 ]
  %.0368 = phi i32 [ 260083727, %243 ], [ %230, %246 ], [ %230, %215 ]
  %248 = load i32, ptr %6, align 4, !tbaa !12
  %249 = icmp ugt i32 %248, %79
  br i1 %249, label %.preheader427, label %.thread420

.preheader427:                                    ; preds = %247
  br i1 %.not469, label %._crit_edge449, label %.lr.ph448

.lr.ph448:                                        ; preds = %.preheader427, %254
  %.0376447 = phi i32 [ %255, %254 ], [ 0, %.preheader427 ]
  %250 = zext nneg i32 %.0376447 to i64
  %251 = getelementptr inbounds [120 x i32], ptr %7, i64 0, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !12
  %253 = icmp eq i32 %252, %218
  br i1 %253, label %.thread420, label %254

254:                                              ; preds = %.lr.ph448
  %255 = add nuw nsw i32 %.0376447, 1
  %exitcond482.not = icmp eq i32 %255, %.0382
  br i1 %exitcond482.not, label %._crit_edge449, label %.lr.ph448, !llvm.loop !38

._crit_edge449:                                   ; preds = %254, %.preheader427
  br i1 %224, label %256, label %.thread420

256:                                              ; preds = %._crit_edge449
  %257 = load i32, ptr %8, align 4, !tbaa !12
  %258 = add i32 %257, %214
  %259 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef nonnull %7, i32 noundef %.0382, ptr noundef nonnull %212, i32 noundef %258)
  %260 = shl nuw nsw i32 %218, %177
  %261 = zext nneg i32 %260 to i64
  %262 = getelementptr inbounds i8, ptr %26, i64 %261
  %263 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef %262, i32 noundef %34, i32 noundef %34, i32 noundef 1, ptr noundef nonnull %10) #9
  %264 = lshr i32 %259, %78
  %265 = and i32 %259, %187
  %266 = trunc i32 %265 to i16
  call void @libxsmm_aarch64_instruction_asimd_struct_move(ptr noundef %0, i32 noundef 232751106, i32 noundef 58, i32 noundef 0, i32 noundef %34, i32 noundef %264, i16 noundef signext %266, i32 noundef %32) #9
  %267 = zext i32 %259 to i64
  %268 = getelementptr inbounds [120 x i32], ptr %7, i64 0, i64 %267
  store i32 %218, ptr %268, align 4, !tbaa !12
  br label %.thread420

.thread420:                                       ; preds = %.lr.ph448, %._crit_edge449, %256, %247
  %.1373 = phi i32 [ %259, %256 ], [ %218, %._crit_edge449 ], [ %225, %247 ], [ %.0376447, %.lr.ph448 ]
  %269 = lshr i32 %.1373, %78
  %270 = and i32 %.1373, %188
  %271 = trunc i32 %270 to i8
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0368, i32 noundef %.0371, i32 noundef %269, i8 noundef zeroext %271, i32 noundef %226, i32 noundef %31) #9
  %.not417 = icmp eq i32 %.0369, 0
  br i1 %.not417, label %273, label %272

272:                                              ; preds = %.thread420
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 782301194, i32 noundef %226, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %226, i32 noundef %31) #9
  br label %273

273:                                              ; preds = %272, %.thread420
  %274 = load i8, ptr %231, align 1, !tbaa !32
  %275 = and i8 %274, 2
  %.not418 = icmp eq i8 %275, 0
  br i1 %.not418, label %277, label %276

276:                                              ; preds = %273
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1023410182, i32 noundef %222, i32 noundef 0, i32 noundef 0, i32 noundef %226, i32 noundef 1) #9
  br label %277

277:                                              ; preds = %276, %273
  %indvars.iv.next484 = add nuw nsw i64 %indvars.iv483, 1
  %278 = load i16, ptr %179, align 4, !tbaa !37
  %279 = zext i16 %278 to i64
  %280 = icmp ult i64 %indvars.iv.next484, %279
  br i1 %280, label %215, label %.loopexit428, !llvm.loop !39

281:                                              ; preds = %.preheader429, %._crit_edge444
  %.0355446 = phi i32 [ 0, %.preheader429 ], [ %362, %._crit_edge444 ]
  %.2379445 = phi i32 [ %.0377455, %.preheader429 ], [ %.3380, %._crit_edge444 ]
  %282 = shl nuw nsw i32 %.0355446, 4
  %283 = add nsw i32 %282, %194
  %.not409 = icmp eq i32 %.2379445, %283
  br i1 %.not409, label %286, label %284

284:                                              ; preds = %281
  %285 = load i32, ptr %132, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %0, i32 noundef 759169031, i32 noundef %285, i32 noundef %282, i32 noundef %.0371, i32 noundef %178, i32 noundef 1) #9
  br label %286

286:                                              ; preds = %284, %281
  %.3380 = phi i32 [ %283, %284 ], [ %.2379445, %281 ]
  %287 = load i16, ptr %179, align 4, !tbaa !37
  %.not471 = icmp eq i16 %287, 0
  br i1 %.not471, label %._crit_edge444, label %.lr.ph443

.lr.ph443:                                        ; preds = %286
  %288 = icmp eq i32 %.0355446, 0
  br label %289

289:                                              ; preds = %.lr.ph443, %358
  %indvars.iv479 = phi i64 [ 0, %.lr.ph443 ], [ %indvars.iv.next480, %358 ]
  %290 = getelementptr inbounds [12 x i16], ptr %180, i64 0, i64 %indvars.iv479
  %291 = load i16, ptr %290, align 2, !tbaa !33
  %292 = zext i16 %291 to i32
  %293 = getelementptr inbounds [12 x i8], ptr %181, i64 0, i64 %indvars.iv479
  %294 = load i8, ptr %293, align 1, !tbaa !32
  %295 = zext i8 %294 to i32
  %296 = add nuw nsw i32 %295, 44
  %297 = load i32, ptr %6, align 4, !tbaa !12
  %298 = icmp ugt i32 %297, %79
  %299 = select i1 %298, i32 -1, i32 %292
  %300 = mul nuw nsw i32 %.0365, %295
  %301 = add nuw i32 %300, %.0367
  %302 = getelementptr inbounds [12 x i32], ptr %182, i64 0, i64 %indvars.iv479
  %303 = load i32, ptr %302, align 4, !tbaa !12
  %304 = load i32, ptr %183, align 1, !tbaa !14
  %305 = mul i32 %304, %303
  %306 = shl i32 %305, %177
  %307 = getelementptr inbounds [12 x i8], ptr %184, i64 0, i64 %indvars.iv479
  %308 = load i8, ptr %307, align 1, !tbaa !32
  %309 = icmp eq i8 %308, 1
  %310 = select i1 %309, i32 260050959, i32 260067343
  %311 = getelementptr inbounds [12 x i8], ptr %186, i64 0, i64 %indvars.iv479
  %312 = load i8, ptr %311, align 1, !tbaa !32
  %313 = and i8 %312, 1
  %.not410 = icmp eq i8 %313, 0
  br i1 %.not410, label %326, label %314

314:                                              ; preds = %289
  br i1 %288, label %315, label %319

315:                                              ; preds = %314
  %316 = load i32, ptr %130, align 4, !tbaa !26
  %317 = load i32, ptr %131, align 4, !tbaa !27
  %318 = zext i32 %306 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %316, i32 noundef %317, i32 noundef %296, i64 noundef %318) #9
  br label %319

319:                                              ; preds = %315, %314
  br i1 %.not411, label %323, label %320

320:                                              ; preds = %319
  %321 = icmp eq i8 %308, -1
  %322 = zext i1 %321 to i32
  br label %326

323:                                              ; preds = %319
  %324 = add i32 %301, %.0355446
  %325 = add i32 %324, 1
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %0, i32 noundef 759169031, i32 noundef %296, i32 noundef %282, i32 noundef %324, i32 noundef %325, i32 noundef 1) #9
  br label %326

326:                                              ; preds = %320, %323, %289
  %.0358 = phi i32 [ %322, %320 ], [ 0, %323 ], [ 0, %289 ]
  %.0357 = phi i32 [ 260083727, %320 ], [ %310, %323 ], [ %310, %289 ]
  %327 = load i32, ptr %6, align 4, !tbaa !12
  %328 = icmp ugt i32 %327, %79
  br i1 %328, label %.preheader426, label %.thread422

.preheader426:                                    ; preds = %326
  br i1 %.not469, label %._crit_edge, label %.lr.ph440

.lr.ph440:                                        ; preds = %.preheader426, %333
  %.0366439 = phi i32 [ %334, %333 ], [ 0, %.preheader426 ]
  %329 = zext nneg i32 %.0366439 to i64
  %330 = getelementptr inbounds [120 x i32], ptr %7, i64 0, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !12
  %332 = icmp eq i32 %331, %292
  br i1 %332, label %.thread422, label %333

333:                                              ; preds = %.lr.ph440
  %334 = add nuw nsw i32 %.0366439, 1
  %exitcond478.not = icmp eq i32 %334, %.0382
  br i1 %exitcond478.not, label %._crit_edge, label %.lr.ph440, !llvm.loop !40

._crit_edge:                                      ; preds = %333, %.preheader426
  br i1 %298, label %335, label %.thread422

335:                                              ; preds = %._crit_edge
  %336 = load i32, ptr %8, align 4, !tbaa !12
  %337 = add i32 %336, %206
  %338 = call i32 @libxsmm_asparse_reg_pick_bcast_reg(ptr noundef nonnull %7, i32 noundef %.0382, ptr noundef nonnull %204, i32 noundef %337)
  %339 = shl nuw nsw i32 %292, %177
  %340 = zext nneg i32 %339 to i64
  %341 = getelementptr inbounds i8, ptr %26, i64 %340
  %342 = call i32 @libxsmm_aarch64_instruction_add_data(ptr noundef %0, ptr noundef %341, i32 noundef %34, i32 noundef %34, i32 noundef 1, ptr noundef nonnull %10) #9
  %343 = lshr i32 %338, %78
  %344 = and i32 %338, %187
  %345 = trunc i32 %344 to i16
  call void @libxsmm_aarch64_instruction_asimd_struct_move(ptr noundef %0, i32 noundef 232751106, i32 noundef 58, i32 noundef 0, i32 noundef %34, i32 noundef %343, i16 noundef signext %345, i32 noundef %32) #9
  %346 = zext i32 %338 to i64
  %347 = getelementptr inbounds [120 x i32], ptr %7, i64 0, i64 %346
  store i32 %292, ptr %347, align 4, !tbaa !12
  br label %.thread422

.thread422:                                       ; preds = %.lr.ph440, %._crit_edge, %335, %326
  %.1364 = phi i32 [ %338, %335 ], [ %292, %._crit_edge ], [ %299, %326 ], [ %.0366439, %.lr.ph440 ]
  %348 = lshr i32 %.1364, %78
  %349 = and i32 %.1364, %188
  %350 = trunc i32 %349 to i8
  %351 = add i32 %301, %.0355446
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0357, i32 noundef %.0371, i32 noundef %348, i8 noundef zeroext %350, i32 noundef %351, i32 noundef %31) #9
  %352 = add i32 %351, 1
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0357, i32 noundef %178, i32 noundef %348, i8 noundef zeroext %350, i32 noundef %352, i32 noundef %31) #9
  %.not412 = icmp eq i32 %.0358, 0
  br i1 %.not412, label %354, label %353

353:                                              ; preds = %.thread422
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 782301194, i32 noundef %351, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %351, i32 noundef %31) #9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 782301194, i32 noundef %352, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %352, i32 noundef %31) #9
  br label %354

354:                                              ; preds = %353, %.thread422
  %355 = load i8, ptr %311, align 1, !tbaa !32
  %356 = and i8 %355, 2
  %.not413 = icmp eq i8 %356, 0
  br i1 %.not413, label %358, label %357

357:                                              ; preds = %354
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %0, i32 noundef %185, i32 noundef %296, i32 noundef %282, i32 noundef %351, i32 noundef %352, i32 noundef 1) #9
  br label %358

358:                                              ; preds = %357, %354
  %indvars.iv.next480 = add nuw nsw i64 %indvars.iv479, 1
  %359 = load i16, ptr %179, align 4, !tbaa !37
  %360 = zext i16 %359 to i64
  %361 = icmp ult i64 %indvars.iv.next480, %360
  br i1 %361, label %289, label %._crit_edge444, !llvm.loop !41

._crit_edge444:                                   ; preds = %358, %286
  %362 = add nuw nsw i32 %.0355446, 2
  %363 = icmp ult i32 %362, %.0365
  br i1 %363, label %281, label %.loopexit428, !llvm.loop !42

.loopexit428:                                     ; preds = %._crit_edge444, %277, %210
  %.4381 = phi i32 [ %.1378, %210 ], [ %.1378, %277 ], [ %.3380, %._crit_edge444 ]
  call void @llvm.lifetime.end.p0(i64 116, ptr nonnull %13) #9
  %indvars.iv.next487 = add nuw nsw i64 %indvars.iv486, 1
  %364 = load i32, ptr %8, align 4, !tbaa !12
  %365 = zext i32 %364 to i64
  %366 = icmp ult i64 %indvars.iv.next487, %365
  br i1 %366, label %189, label %._crit_edge459, !llvm.loop !43

._crit_edge459:                                   ; preds = %.loopexit428, %172
  %.not406 = icmp eq i32 %47, 0
  br i1 %.not406, label %.loopexit425, label %367

367:                                              ; preds = %._crit_edge459
  %368 = select i1 %46, i32 738197511, i32 754974727
  %.0 = select i1 %.not399, i32 1023410182, i32 %368
  %369 = load i32, ptr %1, align 1, !tbaa !5
  %.not473 = icmp eq i32 %369, 0
  br i1 %.not473, label %.loopexit425, label %.lr.ph464

.lr.ph464:                                        ; preds = %367
  %370 = getelementptr inbounds i8, ptr %1, i64 20
  %371 = select i1 %30, i64 2, i64 3
  br label %372

372:                                              ; preds = %.lr.ph464, %.loopexit
  %indvars.iv489 = phi i64 [ 0, %.lr.ph464 ], [ %indvars.iv.next490, %.loopexit ]
  %.0354462 = phi i32 [ 0, %.lr.ph464 ], [ %.2, %.loopexit ]
  %indvars.iv.next490 = add nuw nsw i64 %indvars.iv489, 1
  %373 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next490
  %374 = load i32, ptr %373, align 4, !tbaa !12
  %375 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv489
  %376 = load i32, ptr %375, align 4, !tbaa !12
  %377 = icmp eq i32 %374, %376
  br i1 %377, label %378, label %.loopexit

378:                                              ; preds = %372
  %.not407 = icmp eq i32 %.0354462, 0
  br i1 %.not407, label %379, label %380

379:                                              ; preds = %378
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 773856275, i32 noundef %.0367, i32 noundef %.0367, i8 noundef zeroext 0, i32 noundef %.0367, i32 noundef 1) #9
  br label %380

380:                                              ; preds = %379, %378
  %381 = load i32, ptr %130, align 4, !tbaa !26
  %382 = load i32, ptr %131, align 4, !tbaa !27
  %383 = load i32, ptr %370, align 1, !tbaa !14
  %384 = zext i32 %383 to i64
  %385 = mul nuw i64 %indvars.iv489, %384
  %386 = shl i64 %385, %371
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %381, i32 noundef %382, i32 noundef 44, i64 noundef %386) #9
  br i1 %.not399, label %387, label %.preheader

387:                                              ; preds = %380
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1023410182, i32 noundef 44, i32 noundef 0, i32 noundef 0, i32 noundef %.0367, i32 noundef 1) #9
  br label %.loopexit

.preheader:                                       ; preds = %380, %.preheader
  %.1356460 = phi i32 [ %389, %.preheader ], [ 0, %380 ]
  %388 = shl nuw nsw i32 %.1356460, 4
  call void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef %0, i32 noundef %.0, i32 noundef 44, i32 noundef %388, i32 noundef %.0367, i32 noundef %.0367, i32 noundef 1) #9
  %389 = add nuw nsw i32 %.1356460, 2
  %390 = icmp ult i32 %389, %.0365
  br i1 %390, label %.preheader, label %.loopexit, !llvm.loop !44

.loopexit:                                        ; preds = %.preheader, %372, %387
  %.2 = phi i32 [ 1, %387 ], [ %.0354462, %372 ], [ 1, %.preheader ]
  %391 = load i32, ptr %1, align 1, !tbaa !5
  %392 = zext i32 %391 to i64
  %393 = icmp ult i64 %indvars.iv.next490, %392
  br i1 %393, label %372, label %.loopexit425, !llvm.loop !45

.loopexit425:                                     ; preds = %.loopexit, %367, %._crit_edge459
  %394 = load i32, ptr %129, align 4, !tbaa !25
  %395 = shl nuw nsw i32 %.0365, 4
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %394, i32 noundef %394, i32 noundef %395, i8 noundef zeroext 0) #9
  %396 = load i32, ptr %130, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_compute_imm12(ptr noundef %0, i32 noundef 285212678, i32 noundef %396, i32 noundef %396, i32 noundef %395, i8 noundef zeroext 0) #9
  %397 = shl nuw nsw i32 %.0365, %78
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 55, i32 noundef %397) #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 %398

398:                                              ; preds = %.loopexit425, %123, %84, %69, %55
  call void @free(ptr noundef %26) #9
  call void @free(ptr noundef %25) #9
  call void @free(ptr noundef %27) #9
  call void @free(ptr noundef %48) #9
  call void @llvm.lifetime.end.p0(i64 132, 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 480, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #9
  ret void
}

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_aarch64_instruction_asimd_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

declare void @libxsmm_aarch64_instruction_asimd_pair_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 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_asimd_struct_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef signext, i32 noundef) local_unnamed_addr #6

declare void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef, i32 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: 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 = !{!6, !7, i64 20}
!15 = !{!6, !7, i64 4}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !8, i64 0}
!18 = distinct !{!18, !19, !20, !21}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !19, !21, !20}
!23 = !{!24, !7, i64 0}
!24 = !{!"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}
!25 = !{!24, !7, i64 12}
!26 = !{!24, !7, i64 20}
!27 = !{!24, !7, i64 88}
!28 = !{!24, !7, i64 92}
!29 = distinct !{!29, !19}
!30 = !{!6, !10, i64 33}
!31 = !{i64 0, i64 4, !12, i64 4, i64 48, !32, i64 52, i64 2, !33, i64 54, i64 24, !32, i64 78, i64 12, !32, i64 90, i64 12, !32, i64 102, i64 12, !32}
!32 = !{!8, !8, i64 0}
!33 = !{!11, !11, i64 0}
!34 = !{!35, !7, i64 0}
!35 = !{!"", !7, i64 0, !8, i64 4, !11, i64 52, !8, i64 54, !8, i64 78, !8, i64 90, !8, i64 102}
!36 = !{!6, !7, i64 16}
!37 = !{!35, !11, i64 52}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !19}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !19}


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