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

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

%struct.libxsmm_mateltwise_kernel_config_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, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_mateltwise_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, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [91 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@.str.2 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [271 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel = external hidden unnamed_addr constant [224 x i8], align 1
@__func__.libxsmm_generator_reduce_rows_aarch64_microkernel = external hidden unnamed_addr constant [50 x i8], align 1
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.7 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.8 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.9 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.10 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.11 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.12 = external hidden unnamed_addr constant [4 x i32], align 16

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

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) #1

declare i32 @libxsmm_meltw_getenum_precision(ptr noundef, i32 noundef) #1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext) #1

declare i32 @printf(ptr noundef, ...) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #3 {
  %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 i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i8, align 1
  %41 = alloca i8, align 1
  %42 = alloca i8, align 1
  %43 = alloca i8, align 1
  %44 = alloca i8, align 1
  %45 = alloca i32, align 4
  %46 = alloca i32, 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 [4 x i32], align 16
  %55 = alloca [4 x i32], align 16
  %56 = alloca [4 x i32], align 16
  %57 = alloca [4 x i32], align 16
  %58 = alloca [4 x i32], align 16
  %59 = alloca [4 x i32], align 16
  %60 = alloca [4 x i32], align 16
  %61 = alloca [4 x i32], align 16
  %62 = alloca i32, align 4
  %63 = 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) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 31, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  store i32 30, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %64, i32 0, i32 0
  %66 = load i32, ptr %65, align 4, !tbaa !11
  %67 = call i32 @libxsmm_cpuid_vlen32(i32 noundef %66)
  store i32 %67, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  store i32 30, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %68 = load ptr, ptr %10, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %68, i32 0, i32 10
  %70 = load i16, ptr %69, align 1, !tbaa !13
  %71 = zext i16 %70 to i32
  %72 = icmp eq i32 %71, 18
  br i1 %72, label %97, label %73

73:                                               ; preds = %5
  %74 = load ptr, ptr %10, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %74, i32 0, i32 10
  %76 = load i16, ptr %75, align 1, !tbaa !13
  %77 = zext i16 %76 to i32
  %78 = icmp eq i32 %77, 20
  br i1 %78, label %97, label %79

79:                                               ; preds = %73
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %80, i32 0, i32 10
  %82 = load i16, ptr %81, align 1, !tbaa !13
  %83 = zext i16 %82 to i32
  %84 = icmp eq i32 %83, 21
  br i1 %84, label %97, label %85

85:                                               ; preds = %79
  %86 = load ptr, ptr %10, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %86, i32 0, i32 10
  %88 = load i16, ptr %87, align 1, !tbaa !13
  %89 = zext i16 %88 to i32
  %90 = icmp eq i32 %89, 70
  br i1 %90, label %97, label %91

91:                                               ; preds = %85
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %92, i32 0, i32 10
  %94 = load i16, ptr %93, align 1, !tbaa !13
  %95 = zext i16 %94 to i32
  %96 = icmp eq i32 %95, 69
  br label %97

97:                                               ; preds = %91, %85, %79, %73, %5
  %98 = phi i1 [ true, %85 ], [ true, %79 ], [ true, %73 ], [ true, %5 ], [ %96, %91 ]
  %99 = zext i1 %98 to i64
  %100 = select i1 %98, i32 1, i32 0
  store i32 %100, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %101 = load ptr, ptr %10, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %101, i32 0, i32 10
  %103 = load i16, ptr %102, align 1, !tbaa !13
  %104 = zext i16 %103 to i32
  %105 = icmp eq i32 %104, 19
  br i1 %105, label %112, label %106

106:                                              ; preds = %97
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %107, i32 0, i32 10
  %109 = load i16, ptr %108, align 1, !tbaa !13
  %110 = zext i16 %109 to i32
  %111 = icmp eq i32 %110, 20
  br label %112

112:                                              ; preds = %106, %97
  %113 = phi i1 [ true, %97 ], [ %111, %106 ]
  %114 = zext i1 %113 to i64
  %115 = select i1 %113, i32 1, i32 0
  store i32 %115, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %116 = load ptr, ptr %10, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %116, i32 0, i32 10
  %118 = load i16, ptr %117, align 1, !tbaa !13
  %119 = zext i16 %118 to i32
  %120 = icmp eq i32 %119, 18
  br i1 %120, label %133, label %121

121:                                              ; preds = %112
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %122, i32 0, i32 10
  %124 = load i16, ptr %123, align 1, !tbaa !13
  %125 = zext i16 %124 to i32
  %126 = icmp eq i32 %125, 20
  br i1 %126, label %133, label %127

127:                                              ; preds = %121
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %128, i32 0, i32 10
  %130 = load i16, ptr %129, align 1, !tbaa !13
  %131 = zext i16 %130 to i32
  %132 = icmp eq i32 %131, 19
  br label %133

133:                                              ; preds = %127, %121, %112
  %134 = phi i1 [ true, %121 ], [ true, %112 ], [ %132, %127 ]
  %135 = zext i1 %134 to i64
  %136 = select i1 %134, i32 1, i32 0
  store i32 %136, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %137 = load ptr, ptr %10, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %137, i32 0, i32 10
  %139 = load i16, ptr %138, align 1, !tbaa !13
  %140 = zext i16 %139 to i32
  %141 = icmp eq i32 %140, 21
  %142 = zext i1 %141 to i64
  %143 = select i1 %141, i32 1, i32 0
  store i32 %143, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %144, i32 0, i32 10
  %146 = load i16, ptr %145, align 1, !tbaa !13
  %147 = zext i16 %146 to i32
  %148 = icmp eq i32 %147, 70
  %149 = zext i1 %148 to i64
  %150 = select i1 %148, i32 1, i32 0
  store i32 %150, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  %151 = load ptr, ptr %10, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %151, i32 0, i32 10
  %153 = load i16, ptr %152, align 1, !tbaa !13
  %154 = zext i16 %153 to i32
  %155 = icmp eq i32 %154, 69
  %156 = zext i1 %155 to i64
  %157 = select i1 %155, i32 1, i32 0
  store i32 %157, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %158, i32 0, i32 9
  %160 = load i16, ptr %159, align 1, !tbaa !16
  %161 = zext i16 %160 to i32
  %162 = and i32 %161, 64
  %163 = icmp sgt i32 %162, 0
  %164 = zext i1 %163 to i64
  %165 = select i1 %163, i32 1, i32 0
  store i32 %165, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #5
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %166, i32 0, i32 6
  %168 = load i32, ptr %167, align 4, !tbaa !17
  %169 = icmp uge i32 %168, 2201
  br i1 %169, label %170, label %175

170:                                              ; preds = %133
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %171, i32 0, i32 6
  %173 = load i32, ptr %172, align 4, !tbaa !17
  %174 = icmp ule i32 %173, 2999
  br label %175

175:                                              ; preds = %170, %133
  %176 = phi i1 [ false, %133 ], [ %174, %170 ]
  %177 = zext i1 %176 to i32
  %178 = trunc i32 %177 to i8
  store i8 %178, ptr %36, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #5
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %179, i32 0, i32 6
  %181 = load i32, ptr %180, align 4, !tbaa !17
  %182 = icmp uge i32 %181, 2501
  br i1 %182, label %183, label %188

183:                                              ; preds = %175
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %184, i32 0, i32 6
  %186 = load i32, ptr %185, align 4, !tbaa !17
  %187 = icmp ule i32 %186, 2999
  br label %188

188:                                              ; preds = %183, %175
  %189 = phi i1 [ false, %175 ], [ %187, %183 ]
  %190 = zext i1 %189 to i32
  %191 = trunc i32 %190 to i8
  store i8 %191, ptr %37, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %192 = load ptr, ptr %10, align 8, !tbaa !5
  %193 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %192, i32 noundef 4)
  %194 = icmp eq i32 0, %193
  br i1 %194, label %195, label %196

195:                                              ; preds = %188
  br label %289

196:                                              ; preds = %188
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %197, i32 noundef 4)
  %199 = icmp eq i32 1, %198
  br i1 %199, label %200, label %201

200:                                              ; preds = %196
  br label %287

201:                                              ; preds = %196
  %202 = load ptr, ptr %10, align 8, !tbaa !5
  %203 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %202, i32 noundef 4)
  %204 = icmp eq i32 2, %203
  br i1 %204, label %205, label %206

205:                                              ; preds = %201
  br label %285

206:                                              ; preds = %201
  %207 = load ptr, ptr %10, align 8, !tbaa !5
  %208 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %207, i32 noundef 4)
  %209 = icmp eq i32 3, %208
  br i1 %209, label %210, label %211

210:                                              ; preds = %206
  br label %283

211:                                              ; preds = %206
  %212 = load ptr, ptr %10, align 8, !tbaa !5
  %213 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %212, i32 noundef 4)
  %214 = icmp eq i32 4, %213
  br i1 %214, label %215, label %216

215:                                              ; preds = %211
  br label %281

216:                                              ; preds = %211
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %217, i32 noundef 4)
  %219 = icmp eq i32 5, %218
  br i1 %219, label %220, label %221

220:                                              ; preds = %216
  br label %279

221:                                              ; preds = %216
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %222, i32 noundef 4)
  %224 = icmp eq i32 6, %223
  br i1 %224, label %225, label %226

225:                                              ; preds = %221
  br label %277

226:                                              ; preds = %221
  %227 = load ptr, ptr %10, align 8, !tbaa !5
  %228 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %227, i32 noundef 4)
  %229 = icmp eq i32 7, %228
  br i1 %229, label %230, label %231

230:                                              ; preds = %226
  br label %275

231:                                              ; preds = %226
  %232 = load ptr, ptr %10, align 8, !tbaa !5
  %233 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %232, i32 noundef 4)
  %234 = icmp eq i32 8, %233
  br i1 %234, label %235, label %236

235:                                              ; preds = %231
  br label %273

236:                                              ; preds = %231
  %237 = load ptr, ptr %10, align 8, !tbaa !5
  %238 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %237, i32 noundef 4)
  %239 = icmp eq i32 9, %238
  br i1 %239, label %240, label %241

240:                                              ; preds = %236
  br label %271

241:                                              ; preds = %236
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %242, i32 noundef 4)
  %244 = icmp eq i32 10, %243
  br i1 %244, label %245, label %246

245:                                              ; preds = %241
  br label %269

246:                                              ; preds = %241
  %247 = load ptr, ptr %10, align 8, !tbaa !5
  %248 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %247, i32 noundef 4)
  %249 = icmp eq i32 11, %248
  br i1 %249, label %250, label %251

250:                                              ; preds = %246
  br label %267

251:                                              ; preds = %246
  %252 = load ptr, ptr %10, align 8, !tbaa !5
  %253 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %252, i32 noundef 4)
  %254 = icmp eq i32 12, %253
  br i1 %254, label %255, label %256

255:                                              ; preds = %251
  br label %265

256:                                              ; preds = %251
  %257 = load ptr, ptr %10, align 8, !tbaa !5
  %258 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %257, i32 noundef 4)
  %259 = icmp eq i32 13, %258
  br i1 %259, label %260, label %261

260:                                              ; preds = %256
  br label %263

261:                                              ; preds = %256
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str, i32 noundef 969, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

262:                                              ; No predecessors!
  br label %263

263:                                              ; preds = %262, %260
  %264 = phi i32 [ 1, %260 ], [ 0, %262 ]
  br label %265

265:                                              ; preds = %263, %255
  %266 = phi i32 [ 1, %255 ], [ %264, %263 ]
  br label %267

267:                                              ; preds = %265, %250
  %268 = phi i32 [ 2, %250 ], [ %266, %265 ]
  br label %269

269:                                              ; preds = %267, %245
  %270 = phi i32 [ 2, %245 ], [ %268, %267 ]
  br label %271

271:                                              ; preds = %269, %240
  %272 = phi i32 [ 4, %240 ], [ %270, %269 ]
  br label %273

273:                                              ; preds = %271, %235
  %274 = phi i32 [ 4, %235 ], [ %272, %271 ]
  br label %275

275:                                              ; preds = %273, %230
  %276 = phi i32 [ 8, %230 ], [ %274, %273 ]
  br label %277

277:                                              ; preds = %275, %225
  %278 = phi i32 [ 8, %225 ], [ %276, %275 ]
  br label %279

279:                                              ; preds = %277, %220
  %280 = phi i32 [ 1, %220 ], [ %278, %277 ]
  br label %281

281:                                              ; preds = %279, %215
  %282 = phi i32 [ 1, %215 ], [ %280, %279 ]
  br label %283

283:                                              ; preds = %281, %210
  %284 = phi i32 [ 2, %210 ], [ %282, %281 ]
  br label %285

285:                                              ; preds = %283, %205
  %286 = phi i32 [ 2, %205 ], [ %284, %283 ]
  br label %287

287:                                              ; preds = %285, %200
  %288 = phi i32 [ 4, %200 ], [ %286, %285 ]
  br label %289

289:                                              ; preds = %287, %195
  %290 = phi i32 [ 8, %195 ], [ %288, %287 ]
  %291 = trunc i32 %290 to i8
  %292 = call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext %291)
  store i32 %292, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %293, i32 0, i32 2
  %295 = load i32, ptr %294, align 4, !tbaa !20
  %296 = icmp eq i32 %295, 8
  %297 = zext i1 %296 to i64
  %298 = select i1 %296, i32 7, i32 5
  store i32 %298, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #5
  store i8 0, ptr %40, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #5
  store i8 1, ptr %41, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %42) #5
  store i8 2, ptr %42, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #5
  store i8 3, ptr %43, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #5
  store i8 0, ptr %44, align 1, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  store i32 0, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  %299 = load ptr, ptr %10, align 8, !tbaa !5
  %300 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %299, i32 noundef 0)
  %301 = icmp eq i32 2, %300
  %302 = zext i1 %301 to i64
  %303 = select i1 %301, i32 1, i32 0
  store i32 %303, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %304 = load ptr, ptr %10, align 8, !tbaa !5
  %305 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %304, i32 noundef 3)
  %306 = icmp eq i32 2, %305
  %307 = zext i1 %306 to i64
  %308 = select i1 %306, i32 1, i32 0
  store i32 %308, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  store i32 0, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  store i32 0, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  store i32 32, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  store i32 80, ptr %51, align 4, !tbaa !9
  %309 = load ptr, ptr %10, align 8, !tbaa !5
  %310 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %309, i32 noundef 3)
  %311 = icmp eq i32 0, %310
  br i1 %311, label %312, label %315

312:                                              ; preds = %289
  %313 = load i32, ptr %25, align 4, !tbaa !9
  %314 = udiv i32 %313, 2
  store i32 %314, ptr %25, align 4, !tbaa !9
  br label %315

315:                                              ; preds = %312, %289
  %316 = load ptr, ptr %10, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %316, i32 0, i32 0
  %318 = load i32, ptr %317, align 1, !tbaa !21
  %319 = load ptr, ptr %10, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %319, i32 0, i32 2
  %321 = load i32, ptr %320, align 1, !tbaa !22
  %322 = icmp ugt i32 %318, %321
  br i1 %322, label %323, label %332

323:                                              ; preds = %315
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %326 = icmp ult i32 1, %325
  br i1 %326, label %327, label %329

327:                                              ; preds = %323
  %328 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %330

329:                                              ; preds = %323
  br label %330

330:                                              ; preds = %329, %327
  %331 = phi i32 [ %328, %327 ], [ 1, %329 ]
  call void @libxsmm_handle_error(ptr noundef %324, i32 noundef 90007, ptr noundef @__func__.libxsmm_generator_reduce_rows_aarch64_microkernel, ptr noundef @.str, i32 noundef 990, i32 noundef %331)
  store i32 1, ptr %52, align 4
  br label %1649

332:                                              ; preds = %315
  %333 = load i32, ptr %29, align 4, !tbaa !9
  %334 = icmp ugt i32 %333, 0
  br i1 %334, label %335, label %336

335:                                              ; preds = %332
  store i32 1, ptr %17, align 4, !tbaa !9
  br label %337

336:                                              ; preds = %332
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %336, %335
  %338 = load i32, ptr %30, align 4, !tbaa !9
  %339 = icmp ugt i32 %338, 0
  br i1 %339, label %340, label %341

340:                                              ; preds = %337
  store i32 1, ptr %16, align 4, !tbaa !9
  br label %342

341:                                              ; preds = %337
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %342

342:                                              ; preds = %341, %340
  %343 = load i32, ptr %31, align 4, !tbaa !9
  %344 = icmp ugt i32 %343, 0
  br i1 %344, label %345, label %356

345:                                              ; preds = %342
  %346 = load i8, ptr %36, align 1, !tbaa !19
  %347 = zext i8 %346 to i32
  %348 = icmp ne i32 %347, 0
  %349 = zext i1 %348 to i64
  %350 = select i1 %348, i32 1694498819, i32 237032459
  store i32 %350, ptr %18, align 4, !tbaa !9
  %351 = load i8, ptr %36, align 1, !tbaa !19
  %352 = zext i8 %351 to i32
  %353 = icmp ne i32 %352, 0
  %354 = zext i1 %353 to i64
  %355 = select i1 %353, i32 1694507138, i32 773903371
  store i32 %355, ptr %19, align 4, !tbaa !9
  br label %416

356:                                              ; preds = %342
  %357 = load i32, ptr %32, align 4, !tbaa !9
  %358 = icmp ugt i32 %357, 0
  br i1 %358, label %359, label %370

359:                                              ; preds = %356
  %360 = load i8, ptr %36, align 1, !tbaa !19
  %361 = zext i8 %360 to i32
  %362 = icmp ne i32 %361, 0
  %363 = zext i1 %362 to i64
  %364 = select i1 %362, i32 1694924962, i32 237040651
  store i32 %364, ptr %18, align 4, !tbaa !9
  %365 = load i8, ptr %36, align 1, !tbaa !19
  %366 = zext i8 %365 to i32
  %367 = icmp ne i32 %366, 0
  %368 = zext i1 %367 to i64
  %369 = select i1 %367, i32 1694900354, i32 773911563
  store i32 %369, ptr %19, align 4, !tbaa !9
  br label %415

370:                                              ; preds = %356
  %371 = load i32, ptr %34, align 4, !tbaa !9
  %372 = icmp ugt i32 %371, 0
  br i1 %372, label %373, label %384

373:                                              ; preds = %370
  %374 = load i8, ptr %36, align 1, !tbaa !19
  %375 = zext i8 %374 to i32
  %376 = icmp ne i32 %375, 0
  %377 = zext i1 %376 to i64
  %378 = select i1 %376, i32 1694990498, i32 245429259
  store i32 %378, ptr %18, align 4, !tbaa !9
  %379 = load i8, ptr %36, align 1, !tbaa !19
  %380 = zext i8 %379 to i32
  %381 = icmp ne i32 %380, 0
  %382 = zext i1 %381 to i64
  %383 = select i1 %381, i32 1694965890, i32 782300171
  store i32 %383, ptr %19, align 4, !tbaa !9
  br label %414

384:                                              ; preds = %370
  %385 = load i32, ptr %33, align 4, !tbaa !9
  %386 = icmp ugt i32 %385, 0
  br i1 %386, label %387, label %403

387:                                              ; preds = %384
  %388 = load i8, ptr %36, align 1, !tbaa !19
  %389 = zext i8 %388 to i32
  %390 = icmp ne i32 %389, 0
  %391 = zext i1 %390 to i64
  %392 = select i1 %390, i32 1694924962, i32 237040651
  store i32 %392, ptr %18, align 4, !tbaa !9
  %393 = load i8, ptr %36, align 1, !tbaa !19
  %394 = zext i8 %393 to i32
  %395 = icmp ne i32 %394, 0
  %396 = zext i1 %395 to i64
  %397 = select i1 %395, i32 1694900354, i32 773911563
  store i32 %397, ptr %19, align 4, !tbaa !9
  %398 = load i8, ptr %36, align 1, !tbaa !19
  %399 = zext i8 %398 to i32
  %400 = icmp ne i32 %399, 0
  %401 = zext i1 %400 to i64
  %402 = select i1 %400, i32 69218307, i32 236985363
  store i32 %402, ptr %20, align 4, !tbaa !9
  store i32 236985363, ptr %49, align 4, !tbaa !9
  br label %413

403:                                              ; preds = %384
  %404 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %407 = icmp ult i32 1, %406
  br i1 %407, label %408, label %410

408:                                              ; preds = %403
  %409 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %411

410:                                              ; preds = %403
  br label %411

411:                                              ; preds = %410, %408
  %412 = phi i32 [ %409, %408 ], [ 1, %410 ]
  call void @libxsmm_handle_error(ptr noundef %405, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_reduce_rows_aarch64_microkernel, ptr noundef @.str, i32 noundef 1023, i32 noundef %412)
  store i32 1, ptr %52, align 4
  br label %1649

413:                                              ; preds = %387
  br label %414

414:                                              ; preds = %413, %373
  br label %415

415:                                              ; preds = %414, %359
  br label %416

416:                                              ; preds = %415, %345
  %417 = load i32, ptr %31, align 4, !tbaa !9
  %418 = icmp ugt i32 %417, 0
  br i1 %418, label %419, label %420

419:                                              ; preds = %416
  store i32 237032459, ptr %48, align 4, !tbaa !9
  br label %421

420:                                              ; preds = %416
  store i32 237040651, ptr %48, align 4, !tbaa !9
  br label %421

421:                                              ; preds = %420, %419
  %422 = load i32, ptr %16, align 4, !tbaa !9
  %423 = icmp ugt i32 %422, 0
  br i1 %423, label %424, label %437

424:                                              ; preds = %421
  %425 = load i32, ptr %31, align 4, !tbaa !9
  %426 = icmp eq i32 %425, 0
  br i1 %426, label %427, label %437

427:                                              ; preds = %424
  %428 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %431 = icmp ult i32 1, %430
  br i1 %431, label %432, label %434

432:                                              ; preds = %427
  %433 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %435

434:                                              ; preds = %427
  br label %435

435:                                              ; preds = %434, %432
  %436 = phi i32 [ %433, %432 ], [ 1, %434 ]
  call void @libxsmm_handle_error(ptr noundef %429, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_reduce_rows_aarch64_microkernel, ptr noundef @.str, i32 noundef 1036, i32 noundef %436)
  store i32 1, ptr %52, align 4
  br label %1649

437:                                              ; preds = %424, %421
  %438 = load ptr, ptr %8, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %438, i32 0, i32 1
  store i32 41, ptr %439, align 4, !tbaa !23
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %440, i32 0, i32 16
  store i32 42, ptr %441, align 4, !tbaa !25
  %442 = load ptr, ptr %8, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %442, i32 0, i32 17
  store i32 43, ptr %443, align 4, !tbaa !26
  %444 = load ptr, ptr %8, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %444, i32 0, i32 24
  store i32 44, ptr %445, align 4, !tbaa !27
  %446 = load ptr, ptr %8, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %446, i32 0, i32 25
  store i32 45, ptr %447, align 4, !tbaa !28
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %448, i32 0, i32 35
  store i32 46, ptr %449, align 4, !tbaa !29
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = load ptr, ptr %8, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %451, i32 0, i32 0
  %453 = load i32, ptr %452, align 4, !tbaa !30
  %454 = load i32, ptr %50, align 4, !tbaa !9
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %455, i32 0, i32 1
  %457 = load i32, ptr %456, align 4, !tbaa !23
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %450, i32 noundef -1186988026, i32 noundef %453, i32 noundef 127, i32 noundef %454, i32 noundef %457)
  %458 = load i32, ptr %17, align 4, !tbaa !9
  %459 = icmp ugt i32 %458, 0
  br i1 %459, label %460, label %492

460:                                              ; preds = %437
  %461 = load ptr, ptr %6, align 8, !tbaa !5
  %462 = load ptr, ptr %8, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %462, i32 0, i32 0
  %464 = load i32, ptr %463, align 4, !tbaa !30
  %465 = load i32, ptr %51, align 4, !tbaa !9
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %466, i32 0, i32 16
  %468 = load i32, ptr %467, align 4, !tbaa !25
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %461, i32 noundef -1186988026, i32 noundef %464, i32 noundef 127, i32 noundef %465, i32 noundef %468)
  %469 = load i32, ptr %16, align 4, !tbaa !9
  %470 = icmp ugt i32 %469, 0
  br i1 %470, label %471, label %491

471:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %472 = load ptr, ptr %10, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %472, i32 0, i32 1
  %474 = load i32, ptr %473, align 1, !tbaa !31
  %475 = load ptr, ptr %9, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %475, i32 0, i32 5
  %477 = load i32, ptr %476, align 4, !tbaa !32
  %478 = mul i32 %474, %477
  store i32 %478, ptr %53, align 4, !tbaa !9
  %479 = load ptr, ptr %6, align 8, !tbaa !5
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %480, i32 0, i32 16
  %482 = load i32, ptr %481, align 4, !tbaa !25
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %483, i32 0, i32 35
  %485 = load i32, ptr %484, align 4, !tbaa !29
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %486, i32 0, i32 17
  %488 = load i32, ptr %487, align 4, !tbaa !26
  %489 = load i32, ptr %53, align 4, !tbaa !9
  %490 = zext i32 %489 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %479, i32 noundef 4096, i32 noundef %482, i32 noundef %485, i32 noundef %488, i64 noundef %490)
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %491

491:                                              ; preds = %471, %460
  br label %501

492:                                              ; preds = %437
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = load ptr, ptr %8, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %494, i32 0, i32 0
  %496 = load i32, ptr %495, align 4, !tbaa !30
  %497 = load i32, ptr %51, align 4, !tbaa !9
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %498, i32 0, i32 17
  %500 = load i32, ptr %499, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %493, i32 noundef -1186988026, i32 noundef %496, i32 noundef 127, i32 noundef %497, i32 noundef %500)
  br label %501

501:                                              ; preds = %492, %491
  %502 = load ptr, ptr %10, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %502, i32 0, i32 0
  %504 = load i32, ptr %503, align 1, !tbaa !21
  store i32 %504, ptr %12, align 4, !tbaa !9
  %505 = load ptr, ptr %10, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %505, i32 0, i32 1
  %507 = load i32, ptr %506, align 1, !tbaa !31
  store i32 %507, ptr %13, align 4, !tbaa !9
  %508 = load i32, ptr %25, align 4, !tbaa !9
  %509 = icmp ne i32 0, %508
  br i1 %509, label %510, label %511

510:                                              ; preds = %501
  br label %512

511:                                              ; preds = %501
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str, i32 noundef 1068, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

512:                                              ; preds = %510
  %513 = load i32, ptr %12, align 4, !tbaa !9
  %514 = load i32, ptr %25, align 4, !tbaa !9
  %515 = urem i32 %513, %514
  %516 = icmp eq i32 %515, 0
  %517 = zext i1 %516 to i64
  %518 = select i1 %516, i32 0, i32 1
  store i32 %518, ptr %15, align 4, !tbaa !9
  %519 = load i32, ptr %12, align 4, !tbaa !9
  %520 = load i32, ptr %25, align 4, !tbaa !9
  %521 = add i32 %519, %520
  %522 = sub i32 %521, 1
  %523 = load i32, ptr %25, align 4, !tbaa !9
  %524 = udiv i32 %522, %523
  store i32 %524, ptr %14, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  %525 = load i8, ptr %37, align 1, !tbaa !19
  %526 = icmp ne i8 %525, 0
  br i1 %526, label %527, label %529

527:                                              ; preds = %512
  %528 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_sm(ptr noundef %528, i32 noundef -721205377)
  br label %529

529:                                              ; preds = %527, %512
  %530 = load i8, ptr %36, align 1, !tbaa !19
  %531 = icmp ne i8 %530, 0
  br i1 %531, label %532, label %539

532:                                              ; preds = %529
  %533 = load ptr, ptr %6, align 8, !tbaa !5
  %534 = load i8, ptr %40, align 1, !tbaa !19
  %535 = zext i8 %534 to i32
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %536, i32 0, i32 35
  %538 = load i32, ptr %537, align 4, !tbaa !29
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %533, i32 noundef %535, i32 noundef -1, i32 noundef %538)
  br label %539

539:                                              ; preds = %532, %529
  %540 = load i32, ptr %15, align 4, !tbaa !9
  %541 = icmp eq i32 %540, 1
  br i1 %541, label %542, label %578

542:                                              ; preds = %539
  %543 = load i32, ptr %12, align 4, !tbaa !9
  %544 = load i32, ptr %25, align 4, !tbaa !9
  %545 = urem i32 %543, %544
  store i32 %545, ptr %27, align 4, !tbaa !9
  %546 = load i8, ptr %36, align 1, !tbaa !19
  %547 = icmp ne i8 %546, 0
  br i1 %547, label %548, label %577

548:                                              ; preds = %542
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = load i8, ptr %41, align 1, !tbaa !19
  %551 = zext i8 %550 to i32
  %552 = load ptr, ptr %9, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %552, i32 0, i32 2
  %554 = load i32, ptr %553, align 4, !tbaa !20
  %555 = load i32, ptr %27, align 4, !tbaa !9
  %556 = mul i32 %554, %555
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %557, i32 0, i32 35
  %559 = load i32, ptr %558, align 4, !tbaa !29
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %549, i32 noundef %551, i32 noundef %556, i32 noundef %559)
  %560 = load i32, ptr %46, align 4, !tbaa !9
  %561 = icmp ugt i32 %560, 0
  br i1 %561, label %565, label %562

562:                                              ; preds = %548
  %563 = load i32, ptr %47, align 4, !tbaa !9
  %564 = icmp ugt i32 %563, 0
  br i1 %564, label %565, label %574

565:                                              ; preds = %562, %548
  %566 = load ptr, ptr %6, align 8, !tbaa !5
  %567 = load i8, ptr %43, align 1, !tbaa !19
  %568 = zext i8 %567 to i32
  %569 = load i32, ptr %27, align 4, !tbaa !9
  %570 = mul i32 4, %569
  %571 = load ptr, ptr %8, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %571, i32 0, i32 35
  %573 = load i32, ptr %572, align 4, !tbaa !29
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %566, i32 noundef %568, i32 noundef %570, i32 noundef %573)
  br label %576

574:                                              ; preds = %562
  %575 = load i8, ptr %41, align 1, !tbaa !19
  store i8 %575, ptr %43, align 1, !tbaa !19
  br label %576

576:                                              ; preds = %574, %565
  br label %577

577:                                              ; preds = %576, %542
  br label %578

578:                                              ; preds = %577, %539
  %579 = load i8, ptr %36, align 1, !tbaa !19
  %580 = zext i8 %579 to i32
  %581 = icmp sgt i32 %580, 0
  br i1 %581, label %582, label %611

582:                                              ; preds = %578
  %583 = load i32, ptr %46, align 4, !tbaa !9
  %584 = icmp ugt i32 %583, 0
  br i1 %584, label %588, label %585

585:                                              ; preds = %582
  %586 = load i32, ptr %47, align 4, !tbaa !9
  %587 = icmp ugt i32 %586, 0
  br i1 %587, label %588, label %611

588:                                              ; preds = %585, %582
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = load i8, ptr %42, align 1, !tbaa !19
  %591 = zext i8 %590 to i32
  %592 = load i32, ptr %46, align 4, !tbaa !9
  %593 = icmp ugt i32 %592, 0
  br i1 %593, label %594, label %600

594:                                              ; preds = %588
  %595 = load ptr, ptr %9, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %595, i32 0, i32 2
  %597 = load i32, ptr %596, align 4, !tbaa !20
  %598 = load i32, ptr %25, align 4, !tbaa !9
  %599 = mul i32 %597, %598
  br label %606

600:                                              ; preds = %588
  %601 = load ptr, ptr %9, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %601, i32 0, i32 5
  %603 = load i32, ptr %602, align 4, !tbaa !32
  %604 = load i32, ptr %25, align 4, !tbaa !9
  %605 = mul i32 %603, %604
  br label %606

606:                                              ; preds = %600, %594
  %607 = phi i32 [ %599, %594 ], [ %605, %600 ]
  %608 = load ptr, ptr %8, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %608, i32 0, i32 35
  %610 = load i32, ptr %609, align 4, !tbaa !29
  call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef %589, i32 noundef %591, i32 noundef %607, i32 noundef %610)
  br label %611

611:                                              ; preds = %606, %585, %578
  %612 = load i32, ptr %15, align 4, !tbaa !9
  %613 = icmp ugt i32 %612, 0
  br i1 %613, label %614, label %825

614:                                              ; preds = %611
  %615 = load i32, ptr %32, align 4, !tbaa !9
  %616 = icmp ugt i32 %615, 0
  br i1 %616, label %620, label %617

617:                                              ; preds = %614
  %618 = load i32, ptr %34, align 4, !tbaa !9
  %619 = icmp ugt i32 %618, 0
  br i1 %619, label %620, label %825

620:                                              ; preds = %617, %614
  %621 = load i32, ptr %26, align 4, !tbaa !9
  %622 = sub i32 %621, 1
  store i32 %622, ptr %23, align 4, !tbaa !9
  %623 = load i32, ptr %26, align 4, !tbaa !9
  %624 = add i32 %623, -1
  store i32 %624, ptr %26, align 4, !tbaa !9
  %625 = load i8, ptr %36, align 1, !tbaa !19
  %626 = icmp ne i8 %625, 0
  br i1 %626, label %824, label %627

627:                                              ; preds = %620
  %628 = load ptr, ptr %10, align 8, !tbaa !5
  %629 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %628, i32 noundef 3)
  %630 = icmp eq i32 0, %629
  br i1 %630, label %631, label %679

631:                                              ; preds = %627
  %632 = load i32, ptr %27, align 4, !tbaa !9
  %633 = icmp eq i32 %632, 1
  br i1 %633, label %634, label %678

634:                                              ; preds = %631
  call void @llvm.lifetime.start.p0(i64 16, ptr %54) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %55) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %55, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf, i64 16, i1 false)
  %635 = load ptr, ptr %6, align 8, !tbaa !5
  %636 = load i32, ptr %23, align 4, !tbaa !9
  %637 = trunc i32 %636 to i8
  %638 = zext i8 %637 to i32
  %639 = icmp eq i32 0, %638
  br i1 %639, label %645, label %640

640:                                              ; preds = %634
  %641 = load i32, ptr %23, align 4, !tbaa !9
  %642 = trunc i32 %641 to i8
  %643 = zext i8 %642 to i32
  %644 = icmp slt i32 0, %643
  br i1 %644, label %645, label %663

645:                                              ; preds = %640, %634
  %646 = load i32, ptr %23, align 4, !tbaa !9
  %647 = zext i32 %646 to i64
  %648 = mul i64 1, %647
  %649 = icmp ult i64 %648, 255
  br i1 %649, label %650, label %654

650:                                              ; preds = %645
  %651 = load i32, ptr %23, align 4, !tbaa !9
  %652 = zext i32 %651 to i64
  %653 = mul i64 1, %652
  br label %655

654:                                              ; preds = %645
  br label %655

655:                                              ; preds = %654, %650
  %656 = phi i64 [ %653, %650 ], [ 255, %654 ]
  %657 = icmp ule i64 %656, 255
  br i1 %657, label %658, label %663

658:                                              ; preds = %655
  %659 = load i32, ptr %23, align 4, !tbaa !9
  %660 = uitofp i32 %659 to double
  %661 = fcmp ole double 0.000000e+00, %660
  br i1 %661, label %662, label %663

662:                                              ; preds = %658
  br label %664

663:                                              ; preds = %658, %655, %640
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1107, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

664:                                              ; preds = %662
  %665 = load i32, ptr %23, align 4, !tbaa !9
  %666 = trunc i32 %665 to i8
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %667, i32 0, i32 35
  %669 = load i32, ptr %668, align 4, !tbaa !29
  %670 = load i32, ptr %32, align 4, !tbaa !9
  %671 = icmp ugt i32 %670, 0
  br i1 %671, label %672, label %674

672:                                              ; preds = %664
  %673 = getelementptr inbounds [4 x i32], ptr %54, i64 0, i64 0
  br label %676

674:                                              ; preds = %664
  %675 = getelementptr inbounds [4 x i32], ptr %55, i64 0, i64 0
  br label %676

676:                                              ; preds = %674, %672
  %677 = phi ptr [ %673, %672 ], [ %675, %674 ]
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef %635, i8 noundef zeroext %666, i32 noundef %669, i32 noundef 44, ptr noundef %677, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 16, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %54) #5
  br label %678

678:                                              ; preds = %676, %631
  br label %823

679:                                              ; preds = %627
  %680 = load i32, ptr %27, align 4, !tbaa !9
  %681 = icmp eq i32 %680, 1
  br i1 %681, label %682, label %726

682:                                              ; preds = %679
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.7, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %57) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %57, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.8, i64 16, i1 false)
  %683 = load ptr, ptr %6, align 8, !tbaa !5
  %684 = load i32, ptr %23, align 4, !tbaa !9
  %685 = trunc i32 %684 to i8
  %686 = zext i8 %685 to i32
  %687 = icmp eq i32 0, %686
  br i1 %687, label %693, label %688

688:                                              ; preds = %682
  %689 = load i32, ptr %23, align 4, !tbaa !9
  %690 = trunc i32 %689 to i8
  %691 = zext i8 %690 to i32
  %692 = icmp slt i32 0, %691
  br i1 %692, label %693, label %711

693:                                              ; preds = %688, %682
  %694 = load i32, ptr %23, align 4, !tbaa !9
  %695 = zext i32 %694 to i64
  %696 = mul i64 1, %695
  %697 = icmp ult i64 %696, 255
  br i1 %697, label %698, label %702

698:                                              ; preds = %693
  %699 = load i32, ptr %23, align 4, !tbaa !9
  %700 = zext i32 %699 to i64
  %701 = mul i64 1, %700
  br label %703

702:                                              ; preds = %693
  br label %703

703:                                              ; preds = %702, %698
  %704 = phi i64 [ %701, %698 ], [ 255, %702 ]
  %705 = icmp ule i64 %704, 255
  br i1 %705, label %706, label %711

706:                                              ; preds = %703
  %707 = load i32, ptr %23, align 4, !tbaa !9
  %708 = uitofp i32 %707 to double
  %709 = fcmp ole double 0.000000e+00, %708
  br i1 %709, label %710, label %711

710:                                              ; preds = %706
  br label %712

711:                                              ; preds = %706, %703, %688
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1113, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

712:                                              ; preds = %710
  %713 = load i32, ptr %23, align 4, !tbaa !9
  %714 = trunc i32 %713 to i8
  %715 = load ptr, ptr %8, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %715, i32 0, i32 35
  %717 = load i32, ptr %716, align 4, !tbaa !29
  %718 = load i32, ptr %32, align 4, !tbaa !9
  %719 = icmp ugt i32 %718, 0
  br i1 %719, label %720, label %722

720:                                              ; preds = %712
  %721 = getelementptr inbounds [4 x i32], ptr %56, i64 0, i64 0
  br label %724

722:                                              ; preds = %712
  %723 = getelementptr inbounds [4 x i32], ptr %57, i64 0, i64 0
  br label %724

724:                                              ; preds = %722, %720
  %725 = phi ptr [ %721, %720 ], [ %723, %722 ]
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef %683, i8 noundef zeroext %714, i32 noundef %717, i32 noundef 44, ptr noundef %725, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 16, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #5
  br label %822

726:                                              ; preds = %679
  %727 = load i32, ptr %27, align 4, !tbaa !9
  %728 = icmp eq i32 %727, 2
  br i1 %728, label %729, label %773

729:                                              ; preds = %726
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %58, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.9, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %59) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.10, i64 16, i1 false)
  %730 = load ptr, ptr %6, align 8, !tbaa !5
  %731 = load i32, ptr %23, align 4, !tbaa !9
  %732 = trunc i32 %731 to i8
  %733 = zext i8 %732 to i32
  %734 = icmp eq i32 0, %733
  br i1 %734, label %740, label %735

735:                                              ; preds = %729
  %736 = load i32, ptr %23, align 4, !tbaa !9
  %737 = trunc i32 %736 to i8
  %738 = zext i8 %737 to i32
  %739 = icmp slt i32 0, %738
  br i1 %739, label %740, label %758

740:                                              ; preds = %735, %729
  %741 = load i32, ptr %23, align 4, !tbaa !9
  %742 = zext i32 %741 to i64
  %743 = mul i64 1, %742
  %744 = icmp ult i64 %743, 255
  br i1 %744, label %745, label %749

745:                                              ; preds = %740
  %746 = load i32, ptr %23, align 4, !tbaa !9
  %747 = zext i32 %746 to i64
  %748 = mul i64 1, %747
  br label %750

749:                                              ; preds = %740
  br label %750

750:                                              ; preds = %749, %745
  %751 = phi i64 [ %748, %745 ], [ 255, %749 ]
  %752 = icmp ule i64 %751, 255
  br i1 %752, label %753, label %758

753:                                              ; preds = %750
  %754 = load i32, ptr %23, align 4, !tbaa !9
  %755 = uitofp i32 %754 to double
  %756 = fcmp ole double 0.000000e+00, %755
  br i1 %756, label %757, label %758

757:                                              ; preds = %753
  br label %759

758:                                              ; preds = %753, %750, %735
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1117, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

759:                                              ; preds = %757
  %760 = load i32, ptr %23, align 4, !tbaa !9
  %761 = trunc i32 %760 to i8
  %762 = load ptr, ptr %8, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %762, i32 0, i32 35
  %764 = load i32, ptr %763, align 4, !tbaa !29
  %765 = load i32, ptr %32, align 4, !tbaa !9
  %766 = icmp ugt i32 %765, 0
  br i1 %766, label %767, label %769

767:                                              ; preds = %759
  %768 = getelementptr inbounds [4 x i32], ptr %58, i64 0, i64 0
  br label %771

769:                                              ; preds = %759
  %770 = getelementptr inbounds [4 x i32], ptr %59, i64 0, i64 0
  br label %771

771:                                              ; preds = %769, %767
  %772 = phi ptr [ %768, %767 ], [ %770, %769 ]
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef %730, i8 noundef zeroext %761, i32 noundef %764, i32 noundef 44, ptr noundef %772, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 16, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #5
  br label %821

773:                                              ; preds = %726
  %774 = load i32, ptr %27, align 4, !tbaa !9
  %775 = icmp eq i32 %774, 3
  br i1 %775, label %776, label %820

776:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 16, ptr %60) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.11, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr %61) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %61, ptr align 16 @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.12, i64 16, i1 false)
  %777 = load ptr, ptr %6, align 8, !tbaa !5
  %778 = load i32, ptr %23, align 4, !tbaa !9
  %779 = trunc i32 %778 to i8
  %780 = zext i8 %779 to i32
  %781 = icmp eq i32 0, %780
  br i1 %781, label %787, label %782

782:                                              ; preds = %776
  %783 = load i32, ptr %23, align 4, !tbaa !9
  %784 = trunc i32 %783 to i8
  %785 = zext i8 %784 to i32
  %786 = icmp slt i32 0, %785
  br i1 %786, label %787, label %805

787:                                              ; preds = %782, %776
  %788 = load i32, ptr %23, align 4, !tbaa !9
  %789 = zext i32 %788 to i64
  %790 = mul i64 1, %789
  %791 = icmp ult i64 %790, 255
  br i1 %791, label %792, label %796

792:                                              ; preds = %787
  %793 = load i32, ptr %23, align 4, !tbaa !9
  %794 = zext i32 %793 to i64
  %795 = mul i64 1, %794
  br label %797

796:                                              ; preds = %787
  br label %797

797:                                              ; preds = %796, %792
  %798 = phi i64 [ %795, %792 ], [ 255, %796 ]
  %799 = icmp ule i64 %798, 255
  br i1 %799, label %800, label %805

800:                                              ; preds = %797
  %801 = load i32, ptr %23, align 4, !tbaa !9
  %802 = uitofp i32 %801 to double
  %803 = fcmp ole double 0.000000e+00, %802
  br i1 %803, label %804, label %805

804:                                              ; preds = %800
  br label %806

805:                                              ; preds = %800, %797, %782
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1121, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

806:                                              ; preds = %804
  %807 = load i32, ptr %23, align 4, !tbaa !9
  %808 = trunc i32 %807 to i8
  %809 = load ptr, ptr %8, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %809, i32 0, i32 35
  %811 = load i32, ptr %810, align 4, !tbaa !29
  %812 = load i32, ptr %32, align 4, !tbaa !9
  %813 = icmp ugt i32 %812, 0
  br i1 %813, label %814, label %816

814:                                              ; preds = %806
  %815 = getelementptr inbounds [4 x i32], ptr %60, i64 0, i64 0
  br label %818

816:                                              ; preds = %806
  %817 = getelementptr inbounds [4 x i32], ptr %61, i64 0, i64 0
  br label %818

818:                                              ; preds = %816, %814
  %819 = phi ptr [ %815, %814 ], [ %817, %816 ]
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef %777, i8 noundef zeroext %808, i32 noundef %811, i32 noundef 44, ptr noundef %819, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 16, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %60) #5
  br label %820

820:                                              ; preds = %818, %773
  br label %821

821:                                              ; preds = %820, %771
  br label %822

822:                                              ; preds = %821, %724
  br label %823

823:                                              ; preds = %822, %678
  br label %824

824:                                              ; preds = %823, %620
  br label %924

825:                                              ; preds = %617, %611
  %826 = load i32, ptr %33, align 4, !tbaa !9
  %827 = icmp ugt i32 %826, 0
  br i1 %827, label %828, label %923

828:                                              ; preds = %825
  %829 = load i32, ptr %26, align 4, !tbaa !9
  %830 = sub i32 %829, 1
  store i32 %830, ptr %23, align 4, !tbaa !9
  %831 = load i32, ptr %26, align 4, !tbaa !9
  %832 = add i32 %831, -1
  store i32 %832, ptr %26, align 4, !tbaa !9
  %833 = load i8, ptr %36, align 1, !tbaa !19
  %834 = icmp ne i8 %833, 0
  br i1 %834, label %835, label %879

835:                                              ; preds = %828
  %836 = load ptr, ptr %6, align 8, !tbaa !5
  %837 = load i32, ptr %23, align 4, !tbaa !9
  %838 = trunc i32 %837 to i8
  %839 = zext i8 %838 to i32
  %840 = icmp eq i32 0, %839
  br i1 %840, label %846, label %841

841:                                              ; preds = %835
  %842 = load i32, ptr %23, align 4, !tbaa !9
  %843 = trunc i32 %842 to i8
  %844 = zext i8 %843 to i32
  %845 = icmp slt i32 0, %844
  br i1 %845, label %846, label %864

846:                                              ; preds = %841, %835
  %847 = load i32, ptr %23, align 4, !tbaa !9
  %848 = zext i32 %847 to i64
  %849 = mul i64 1, %848
  %850 = icmp ult i64 %849, 255
  br i1 %850, label %851, label %855

851:                                              ; preds = %846
  %852 = load i32, ptr %23, align 4, !tbaa !9
  %853 = zext i32 %852 to i64
  %854 = mul i64 1, %853
  br label %856

855:                                              ; preds = %846
  br label %856

856:                                              ; preds = %855, %851
  %857 = phi i64 [ %854, %851 ], [ 255, %855 ]
  %858 = icmp ule i64 %857, 255
  br i1 %858, label %859, label %864

859:                                              ; preds = %856
  %860 = load i32, ptr %23, align 4, !tbaa !9
  %861 = uitofp i32 %860 to double
  %862 = fcmp ole double 0.000000e+00, %861
  br i1 %862, label %863, label %864

863:                                              ; preds = %859
  br label %865

864:                                              ; preds = %859, %856, %841
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1130, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

865:                                              ; preds = %863
  %866 = load i32, ptr %23, align 4, !tbaa !9
  %867 = trunc i32 %866 to i8
  %868 = load ptr, ptr %8, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %868, i32 0, i32 35
  %870 = load i32, ptr %869, align 4, !tbaa !29
  %871 = load i32, ptr %38, align 4, !tbaa !9
  %872 = load i8, ptr %40, align 1, !tbaa !19
  %873 = load ptr, ptr %9, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %873, i32 0, i32 2
  %875 = load i32, ptr %874, align 4, !tbaa !20
  %876 = icmp eq i32 %875, 8
  %877 = zext i1 %876 to i64
  %878 = select i1 %876, i64 9223372036854775807, i64 2147483647
  call void @libxsmm_aarch64_instruction_broadcast_scalar_to_vec_sve(ptr noundef %836, i8 noundef zeroext %867, i32 noundef %870, i32 noundef %871, i8 noundef zeroext %872, i64 noundef %878)
  br label %922

879:                                              ; preds = %828
  %880 = load ptr, ptr %6, align 8, !tbaa !5
  %881 = load i32, ptr %23, align 4, !tbaa !9
  %882 = trunc i32 %881 to i8
  %883 = zext i8 %882 to i32
  %884 = icmp eq i32 0, %883
  br i1 %884, label %890, label %885

885:                                              ; preds = %879
  %886 = load i32, ptr %23, align 4, !tbaa !9
  %887 = trunc i32 %886 to i8
  %888 = zext i8 %887 to i32
  %889 = icmp slt i32 0, %888
  br i1 %889, label %890, label %908

890:                                              ; preds = %885, %879
  %891 = load i32, ptr %23, align 4, !tbaa !9
  %892 = zext i32 %891 to i64
  %893 = mul i64 1, %892
  %894 = icmp ult i64 %893, 255
  br i1 %894, label %895, label %899

895:                                              ; preds = %890
  %896 = load i32, ptr %23, align 4, !tbaa !9
  %897 = zext i32 %896 to i64
  %898 = mul i64 1, %897
  br label %900

899:                                              ; preds = %890
  br label %900

900:                                              ; preds = %899, %895
  %901 = phi i64 [ %898, %895 ], [ 255, %899 ]
  %902 = icmp ule i64 %901, 255
  br i1 %902, label %903, label %908

903:                                              ; preds = %900
  %904 = load i32, ptr %23, align 4, !tbaa !9
  %905 = uitofp i32 %904 to double
  %906 = fcmp ole double 0.000000e+00, %905
  br i1 %906, label %907, label %908

907:                                              ; preds = %903
  br label %909

908:                                              ; preds = %903, %900, %885
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str, i32 noundef 1133, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #6
  unreachable

909:                                              ; preds = %907
  %910 = load i32, ptr %23, align 4, !tbaa !9
  %911 = trunc i32 %910 to i8
  %912 = load ptr, ptr %8, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %912, i32 0, i32 35
  %914 = load i32, ptr %913, align 4, !tbaa !29
  %915 = load i32, ptr %39, align 4, !tbaa !9
  %916 = load ptr, ptr %9, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %916, i32 0, i32 2
  %918 = load i32, ptr %917, align 4, !tbaa !20
  %919 = icmp eq i32 %918, 8
  %920 = zext i1 %919 to i64
  %921 = select i1 %919, i64 9223372036854775807, i64 2147483647
  call void @libxsmm_aarch64_instruction_broadcast_scalar_to_vec_asimd(ptr noundef %880, i8 noundef zeroext %911, i32 noundef %914, i32 noundef %915, i64 noundef %921)
  br label %922

922:                                              ; preds = %909, %865
  br label %923

923:                                              ; preds = %922, %825
  br label %924

924:                                              ; preds = %923, %824
  %925 = load i32, ptr %13, align 4, !tbaa !9
  %926 = icmp ugt i32 %925, 1
  br i1 %926, label %927, label %934

927:                                              ; preds = %924
  %928 = load ptr, ptr %6, align 8, !tbaa !5
  %929 = load ptr, ptr %7, align 8, !tbaa !5
  %930 = load ptr, ptr %8, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %930, i32 0, i32 25
  %932 = load i32, ptr %931, align 4, !tbaa !28
  %933 = load i32, ptr %13, align 4, !tbaa !9
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %928, ptr noundef %929, i32 noundef %932, i32 noundef %933)
  br label %934

934:                                              ; preds = %927, %924
  %935 = load i32, ptr %17, align 4, !tbaa !9
  %936 = icmp ugt i32 %935, 0
  br i1 %936, label %937, label %1059

937:                                              ; preds = %934
  %938 = load i32, ptr %31, align 4, !tbaa !9
  %939 = icmp ugt i32 %938, 0
  br i1 %939, label %943, label %940

940:                                              ; preds = %937
  %941 = load i32, ptr %33, align 4, !tbaa !9
  %942 = icmp ugt i32 %941, 0
  br i1 %942, label %943, label %958

943:                                              ; preds = %940, %937
  %944 = load i8, ptr %36, align 1, !tbaa !19
  %945 = icmp ne i8 %944, 0
  br i1 %945, label %946, label %952

946:                                              ; preds = %943
  %947 = load ptr, ptr %6, align 8, !tbaa !5
  %948 = load i32, ptr %21, align 4, !tbaa !9
  %949 = load i32, ptr %21, align 4, !tbaa !9
  %950 = load i32, ptr %21, align 4, !tbaa !9
  %951 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %947, i32 noundef 77606915, i32 noundef %948, i32 noundef %949, i8 noundef zeroext 0, i32 noundef %950, i32 noundef 0, i32 noundef %951)
  br label %957

952:                                              ; preds = %943
  %953 = load ptr, ptr %6, align 8, !tbaa !5
  %954 = load i32, ptr %21, align 4, !tbaa !9
  %955 = load i32, ptr %21, align 4, !tbaa !9
  %956 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %953, i32 noundef 773856275, i32 noundef %954, i32 noundef %955, i8 noundef zeroext 0, i32 noundef %956, i32 noundef 1)
  br label %957

957:                                              ; preds = %952, %946
  br label %1058

958:                                              ; preds = %940
  %959 = load i32, ptr %32, align 4, !tbaa !9
  %960 = icmp ugt i32 %959, 0
  br i1 %960, label %964, label %961

961:                                              ; preds = %958
  %962 = load i32, ptr %34, align 4, !tbaa !9
  %963 = icmp ugt i32 %962, 0
  br i1 %963, label %964, label %1057

964:                                              ; preds = %961, %958
  %965 = load i32, ptr %11, align 4, !tbaa !9
  %966 = load i32, ptr %14, align 4, !tbaa !9
  %967 = sub i32 %966, 1
  %968 = icmp eq i32 %965, %967
  br i1 %968, label %969, label %974

969:                                              ; preds = %964
  %970 = load i32, ptr %15, align 4, !tbaa !9
  %971 = icmp ugt i32 %970, 0
  br i1 %971, label %972, label %974

972:                                              ; preds = %969
  %973 = load i32, ptr %27, align 4, !tbaa !9
  br label %975

974:                                              ; preds = %969, %964
  br label %975

975:                                              ; preds = %974, %972
  %976 = phi i32 [ %973, %972 ], [ 0, %974 ]
  store i32 %976, ptr %28, align 4, !tbaa !9
  %977 = load i32, ptr %46, align 4, !tbaa !9
  %978 = icmp eq i32 %977, 0
  br i1 %978, label %979, label %981

979:                                              ; preds = %975
  %980 = load i32, ptr %28, align 4, !tbaa !9
  br label %990

981:                                              ; preds = %975
  %982 = load i32, ptr %28, align 4, !tbaa !9
  %983 = icmp ugt i32 %982, 0
  br i1 %983, label %984, label %986

984:                                              ; preds = %981
  %985 = load i32, ptr %28, align 4, !tbaa !9
  br label %988

986:                                              ; preds = %981
  %987 = load i32, ptr %25, align 4, !tbaa !9
  br label %988

988:                                              ; preds = %986, %984
  %989 = phi i32 [ %985, %984 ], [ %987, %986 ]
  br label %990

990:                                              ; preds = %988, %979
  %991 = phi i32 [ %980, %979 ], [ %989, %988 ]
  store i32 %991, ptr %45, align 4, !tbaa !9
  %992 = load i32, ptr %46, align 4, !tbaa !9
  %993 = icmp eq i32 %992, 0
  br i1 %993, label %994, label %1005

994:                                              ; preds = %990
  %995 = load i32, ptr %28, align 4, !tbaa !9
  %996 = icmp ugt i32 %995, 0
  br i1 %996, label %997, label %1000

997:                                              ; preds = %994
  %998 = load i8, ptr %41, align 1, !tbaa !19
  %999 = zext i8 %998 to i32
  br label %1003

1000:                                             ; preds = %994
  %1001 = load i8, ptr %40, align 1, !tbaa !19
  %1002 = zext i8 %1001 to i32
  br label %1003

1003:                                             ; preds = %1000, %997
  %1004 = phi i32 [ %999, %997 ], [ %1002, %1000 ]
  br label %1016

1005:                                             ; preds = %990
  %1006 = load i32, ptr %28, align 4, !tbaa !9
  %1007 = icmp ugt i32 %1006, 0
  br i1 %1007, label %1008, label %1011

1008:                                             ; preds = %1005
  %1009 = load i8, ptr %41, align 1, !tbaa !19
  %1010 = zext i8 %1009 to i32
  br label %1014

1011:                                             ; preds = %1005
  %1012 = load i8, ptr %42, align 1, !tbaa !19
  %1013 = zext i8 %1012 to i32
  br label %1014

1014:                                             ; preds = %1011, %1008
  %1015 = phi i32 [ %1010, %1008 ], [ %1013, %1011 ]
  br label %1016

1016:                                             ; preds = %1014, %1003
  %1017 = phi i32 [ %1004, %1003 ], [ %1015, %1014 ]
  %1018 = trunc i32 %1017 to i8
  store i8 %1018, ptr %44, align 1, !tbaa !19
  %1019 = load ptr, ptr %6, align 8, !tbaa !5
  %1020 = load ptr, ptr %8, align 8, !tbaa !5
  %1021 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1020, i32 0, i32 1
  %1022 = load i32, ptr %1021, align 4, !tbaa !23
  %1023 = load ptr, ptr %8, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1023, i32 0, i32 35
  %1025 = load i32, ptr %1024, align 4, !tbaa !29
  %1026 = load i32, ptr %21, align 4, !tbaa !9
  %1027 = load ptr, ptr %9, align 8, !tbaa !5
  %1028 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1027, i32 0, i32 2
  %1029 = load i32, ptr %1028, align 4, !tbaa !20
  %1030 = load i32, ptr %45, align 4, !tbaa !9
  %1031 = load i8, ptr %44, align 1, !tbaa !19
  %1032 = load i8, ptr %36, align 1, !tbaa !19
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %1019, i32 noundef %1022, i32 noundef %1025, i32 noundef %1026, i32 noundef %1029, i32 noundef %1030, i32 noundef 0, i32 noundef 0, i8 noundef zeroext %1031, i8 noundef zeroext %1032)
  %1033 = load i32, ptr %46, align 4, !tbaa !9
  %1034 = icmp ugt i32 %1033, 0
  br i1 %1034, label %1035, label %1038

1035:                                             ; preds = %1016
  %1036 = load ptr, ptr %6, align 8, !tbaa !5
  %1037 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %1036, i32 noundef %1037, i32 noundef 0)
  br label %1038

1038:                                             ; preds = %1035, %1016
  %1039 = load i32, ptr %15, align 4, !tbaa !9
  %1040 = icmp eq i32 %1039, 1
  br i1 %1040, label %1041, label %1056

1041:                                             ; preds = %1038
  %1042 = load i32, ptr %11, align 4, !tbaa !9
  %1043 = load i32, ptr %14, align 4, !tbaa !9
  %1044 = sub i32 %1043, 1
  %1045 = icmp eq i32 %1042, %1044
  br i1 %1045, label %1046, label %1056

1046:                                             ; preds = %1041
  %1047 = load i8, ptr %36, align 1, !tbaa !19
  %1048 = icmp ne i8 %1047, 0
  br i1 %1048, label %1049, label %1050

1049:                                             ; preds = %1046
  br label %1055

1050:                                             ; preds = %1046
  %1051 = load ptr, ptr %6, align 8, !tbaa !5
  %1052 = load i32, ptr %23, align 4, !tbaa !9
  %1053 = load i32, ptr %21, align 4, !tbaa !9
  %1054 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1051, i32 noundef 245373971, i32 noundef %1052, i32 noundef %1053, i8 noundef zeroext 0, i32 noundef %1054, i32 noundef 1)
  br label %1055

1055:                                             ; preds = %1050, %1049
  br label %1056

1056:                                             ; preds = %1055, %1041, %1038
  br label %1057

1057:                                             ; preds = %1056, %961
  br label %1058

1058:                                             ; preds = %1057, %957
  br label %1059

1059:                                             ; preds = %1058, %934
  %1060 = load i32, ptr %16, align 4, !tbaa !9
  %1061 = icmp ugt i32 %1060, 0
  br i1 %1061, label %1062, label %1077

1062:                                             ; preds = %1059
  %1063 = load i8, ptr %36, align 1, !tbaa !19
  %1064 = icmp ne i8 %1063, 0
  br i1 %1064, label %1065, label %1071

1065:                                             ; preds = %1062
  %1066 = load ptr, ptr %6, align 8, !tbaa !5
  %1067 = load i32, ptr %22, align 4, !tbaa !9
  %1068 = load i32, ptr %22, align 4, !tbaa !9
  %1069 = load i32, ptr %22, align 4, !tbaa !9
  %1070 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1066, i32 noundef 77606915, i32 noundef %1067, i32 noundef %1068, i8 noundef zeroext 0, i32 noundef %1069, i32 noundef 0, i32 noundef %1070)
  br label %1076

1071:                                             ; preds = %1062
  %1072 = load ptr, ptr %6, align 8, !tbaa !5
  %1073 = load i32, ptr %22, align 4, !tbaa !9
  %1074 = load i32, ptr %22, align 4, !tbaa !9
  %1075 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1072, i32 noundef 773856275, i32 noundef %1073, i32 noundef %1074, i8 noundef zeroext 0, i32 noundef %1075, i32 noundef 1)
  br label %1076

1076:                                             ; preds = %1071, %1065
  br label %1077

1077:                                             ; preds = %1076, %1059
  %1078 = load i8, ptr %36, align 1, !tbaa !19
  %1079 = icmp ne i8 %1078, 0
  br i1 %1079, label %1080, label %1244

1080:                                             ; preds = %1077
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1081

1081:                                             ; preds = %1240, %1080
  %1082 = load i32, ptr %11, align 4, !tbaa !9
  %1083 = load i32, ptr %14, align 4, !tbaa !9
  %1084 = icmp ult i32 %1082, %1083
  br i1 %1084, label %1085, label %1243

1085:                                             ; preds = %1081
  %1086 = load i32, ptr %11, align 4, !tbaa !9
  %1087 = load i32, ptr %26, align 4, !tbaa !9
  %1088 = urem i32 %1086, %1087
  store i32 %1088, ptr %24, align 4, !tbaa !9
  %1089 = load i32, ptr %11, align 4, !tbaa !9
  %1090 = load i32, ptr %14, align 4, !tbaa !9
  %1091 = sub i32 %1090, 1
  %1092 = icmp eq i32 %1089, %1091
  br i1 %1092, label %1093, label %1098

1093:                                             ; preds = %1085
  %1094 = load i32, ptr %15, align 4, !tbaa !9
  %1095 = icmp ugt i32 %1094, 0
  br i1 %1095, label %1096, label %1098

1096:                                             ; preds = %1093
  %1097 = load i32, ptr %27, align 4, !tbaa !9
  br label %1099

1098:                                             ; preds = %1093, %1085
  br label %1099

1099:                                             ; preds = %1098, %1096
  %1100 = phi i32 [ %1097, %1096 ], [ 0, %1098 ]
  store i32 %1100, ptr %28, align 4, !tbaa !9
  %1101 = load i32, ptr %46, align 4, !tbaa !9
  %1102 = icmp eq i32 %1101, 0
  br i1 %1102, label %1103, label %1105

1103:                                             ; preds = %1099
  %1104 = load i32, ptr %28, align 4, !tbaa !9
  br label %1114

1105:                                             ; preds = %1099
  %1106 = load i32, ptr %28, align 4, !tbaa !9
  %1107 = icmp ugt i32 %1106, 0
  br i1 %1107, label %1108, label %1110

1108:                                             ; preds = %1105
  %1109 = load i32, ptr %28, align 4, !tbaa !9
  br label %1112

1110:                                             ; preds = %1105
  %1111 = load i32, ptr %25, align 4, !tbaa !9
  br label %1112

1112:                                             ; preds = %1110, %1108
  %1113 = phi i32 [ %1109, %1108 ], [ %1111, %1110 ]
  br label %1114

1114:                                             ; preds = %1112, %1103
  %1115 = phi i32 [ %1104, %1103 ], [ %1113, %1112 ]
  store i32 %1115, ptr %45, align 4, !tbaa !9
  %1116 = load i32, ptr %46, align 4, !tbaa !9
  %1117 = icmp eq i32 %1116, 0
  br i1 %1117, label %1118, label %1129

1118:                                             ; preds = %1114
  %1119 = load i32, ptr %28, align 4, !tbaa !9
  %1120 = icmp ugt i32 %1119, 0
  br i1 %1120, label %1121, label %1124

1121:                                             ; preds = %1118
  %1122 = load i8, ptr %41, align 1, !tbaa !19
  %1123 = zext i8 %1122 to i32
  br label %1127

1124:                                             ; preds = %1118
  %1125 = load i8, ptr %40, align 1, !tbaa !19
  %1126 = zext i8 %1125 to i32
  br label %1127

1127:                                             ; preds = %1124, %1121
  %1128 = phi i32 [ %1123, %1121 ], [ %1126, %1124 ]
  br label %1140

1129:                                             ; preds = %1114
  %1130 = load i32, ptr %28, align 4, !tbaa !9
  %1131 = icmp ugt i32 %1130, 0
  br i1 %1131, label %1132, label %1135

1132:                                             ; preds = %1129
  %1133 = load i8, ptr %41, align 1, !tbaa !19
  %1134 = zext i8 %1133 to i32
  br label %1138

1135:                                             ; preds = %1129
  %1136 = load i8, ptr %42, align 1, !tbaa !19
  %1137 = zext i8 %1136 to i32
  br label %1138

1138:                                             ; preds = %1135, %1132
  %1139 = phi i32 [ %1134, %1132 ], [ %1137, %1135 ]
  br label %1140

1140:                                             ; preds = %1138, %1127
  %1141 = phi i32 [ %1128, %1127 ], [ %1139, %1138 ]
  %1142 = trunc i32 %1141 to i8
  store i8 %1142, ptr %44, align 1, !tbaa !19
  %1143 = load ptr, ptr %6, align 8, !tbaa !5
  %1144 = load ptr, ptr %8, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1144, i32 0, i32 1
  %1146 = load i32, ptr %1145, align 4, !tbaa !23
  %1147 = load ptr, ptr %8, align 8, !tbaa !5
  %1148 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1147, i32 0, i32 35
  %1149 = load i32, ptr %1148, align 4, !tbaa !29
  %1150 = load i32, ptr %24, align 4, !tbaa !9
  %1151 = load ptr, ptr %9, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1151, i32 0, i32 2
  %1153 = load i32, ptr %1152, align 4, !tbaa !20
  %1154 = load i32, ptr %45, align 4, !tbaa !9
  %1155 = load i8, ptr %44, align 1, !tbaa !19
  %1156 = load i8, ptr %36, align 1, !tbaa !19
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %1143, i32 noundef %1146, i32 noundef %1149, i32 noundef %1150, i32 noundef %1153, i32 noundef %1154, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %1155, i8 noundef zeroext %1156)
  %1157 = load i32, ptr %46, align 4, !tbaa !9
  %1158 = icmp ugt i32 %1157, 0
  br i1 %1158, label %1159, label %1162

1159:                                             ; preds = %1140
  %1160 = load ptr, ptr %6, align 8, !tbaa !5
  %1161 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %1160, i32 noundef %1161, i32 noundef 0)
  br label %1162

1162:                                             ; preds = %1159, %1140
  %1163 = load i32, ptr %15, align 4, !tbaa !9
  %1164 = icmp eq i32 %1163, 1
  br i1 %1164, label %1165, label %1177

1165:                                             ; preds = %1162
  %1166 = load i32, ptr %11, align 4, !tbaa !9
  %1167 = load i32, ptr %14, align 4, !tbaa !9
  %1168 = sub i32 %1167, 1
  %1169 = icmp eq i32 %1166, %1168
  br i1 %1169, label %1170, label %1177

1170:                                             ; preds = %1165
  %1171 = load i32, ptr %32, align 4, !tbaa !9
  %1172 = icmp ugt i32 %1171, 0
  br i1 %1172, label %1176, label %1173

1173:                                             ; preds = %1170
  %1174 = load i32, ptr %34, align 4, !tbaa !9
  %1175 = icmp ugt i32 %1174, 0
  br i1 %1175, label %1176, label %1177

1176:                                             ; preds = %1173, %1170
  br label %1177

1177:                                             ; preds = %1176, %1173, %1165, %1162
  %1178 = load i32, ptr %17, align 4, !tbaa !9
  %1179 = icmp ugt i32 %1178, 0
  br i1 %1179, label %1180, label %1228

1180:                                             ; preds = %1177
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %1181 = load i8, ptr %40, align 1, !tbaa !19
  %1182 = zext i8 %1181 to i32
  store i32 %1182, ptr %62, align 4, !tbaa !9
  %1183 = load i32, ptr %32, align 4, !tbaa !9
  %1184 = icmp ugt i32 %1183, 0
  br i1 %1184, label %1188, label %1185

1185:                                             ; preds = %1180
  %1186 = load i32, ptr %34, align 4, !tbaa !9
  %1187 = icmp ugt i32 %1186, 0
  br i1 %1187, label %1188, label %1209

1188:                                             ; preds = %1185, %1180
  %1189 = load i32, ptr %11, align 4, !tbaa !9
  %1190 = load i32, ptr %14, align 4, !tbaa !9
  %1191 = sub i32 %1190, 1
  %1192 = icmp eq i32 %1189, %1191
  br i1 %1192, label %1193, label %1209

1193:                                             ; preds = %1188
  %1194 = load i32, ptr %15, align 4, !tbaa !9
  %1195 = icmp ugt i32 %1194, 0
  br i1 %1195, label %1196, label %1209

1196:                                             ; preds = %1193
  %1197 = load i32, ptr %46, align 4, !tbaa !9
  %1198 = icmp ugt i32 %1197, 0
  br i1 %1198, label %1202, label %1199

1199:                                             ; preds = %1196
  %1200 = load i32, ptr %47, align 4, !tbaa !9
  %1201 = icmp ugt i32 %1200, 0
  br i1 %1201, label %1202, label %1205

1202:                                             ; preds = %1199, %1196
  %1203 = load i8, ptr %43, align 1, !tbaa !19
  %1204 = zext i8 %1203 to i32
  store i32 %1204, ptr %62, align 4, !tbaa !9
  br label %1208

1205:                                             ; preds = %1199
  %1206 = load i8, ptr %41, align 1, !tbaa !19
  %1207 = zext i8 %1206 to i32
  store i32 %1207, ptr %62, align 4, !tbaa !9
  br label %1208

1208:                                             ; preds = %1205, %1202
  br label %1209

1209:                                             ; preds = %1208, %1193, %1188, %1185
  %1210 = load i32, ptr %33, align 4, !tbaa !9
  %1211 = icmp ugt i32 %1210, 0
  br i1 %1211, label %1212, label %1220

1212:                                             ; preds = %1209
  %1213 = load ptr, ptr %6, align 8, !tbaa !5
  %1214 = load i32, ptr %20, align 4, !tbaa !9
  %1215 = load i32, ptr %24, align 4, !tbaa !9
  %1216 = load i32, ptr %23, align 4, !tbaa !9
  %1217 = load i32, ptr %24, align 4, !tbaa !9
  %1218 = load i32, ptr %62, align 4, !tbaa !9
  %1219 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1213, i32 noundef %1214, i32 noundef %1215, i32 noundef %1216, i8 noundef zeroext 0, i32 noundef %1217, i32 noundef %1218, i32 noundef %1219)
  br label %1220

1220:                                             ; preds = %1212, %1209
  %1221 = load ptr, ptr %6, align 8, !tbaa !5
  %1222 = load i32, ptr %18, align 4, !tbaa !9
  %1223 = load i32, ptr %24, align 4, !tbaa !9
  %1224 = load i32, ptr %21, align 4, !tbaa !9
  %1225 = load i32, ptr %21, align 4, !tbaa !9
  %1226 = load i32, ptr %62, align 4, !tbaa !9
  %1227 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1221, i32 noundef %1222, i32 noundef %1223, i32 noundef %1224, i8 noundef zeroext 0, i32 noundef %1225, i32 noundef %1226, i32 noundef %1227)
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  br label %1228

1228:                                             ; preds = %1220, %1177
  %1229 = load i32, ptr %16, align 4, !tbaa !9
  %1230 = icmp ugt i32 %1229, 0
  br i1 %1230, label %1231, label %1239

1231:                                             ; preds = %1228
  %1232 = load ptr, ptr %6, align 8, !tbaa !5
  %1233 = load i32, ptr %24, align 4, !tbaa !9
  %1234 = load i32, ptr %24, align 4, !tbaa !9
  %1235 = load i32, ptr %22, align 4, !tbaa !9
  %1236 = load i8, ptr %40, align 1, !tbaa !19
  %1237 = zext i8 %1236 to i32
  %1238 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1232, i32 noundef 1696596099, i32 noundef %1233, i32 noundef %1234, i8 noundef zeroext 0, i32 noundef %1235, i32 noundef %1237, i32 noundef %1238)
  br label %1239

1239:                                             ; preds = %1231, %1228
  br label %1240

1240:                                             ; preds = %1239
  %1241 = load i32, ptr %11, align 4, !tbaa !9
  %1242 = add i32 %1241, 1
  store i32 %1242, ptr %11, align 4, !tbaa !9
  br label %1081, !llvm.loop !33

1243:                                             ; preds = %1081
  br label %1379

1244:                                             ; preds = %1077
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %1245

1245:                                             ; preds = %1375, %1244
  %1246 = load i32, ptr %11, align 4, !tbaa !9
  %1247 = load i32, ptr %14, align 4, !tbaa !9
  %1248 = icmp ult i32 %1246, %1247
  br i1 %1248, label %1249, label %1378

1249:                                             ; preds = %1245
  %1250 = load i32, ptr %11, align 4, !tbaa !9
  %1251 = load i32, ptr %26, align 4, !tbaa !9
  %1252 = urem i32 %1250, %1251
  store i32 %1252, ptr %24, align 4, !tbaa !9
  %1253 = load i32, ptr %11, align 4, !tbaa !9
  %1254 = load i32, ptr %14, align 4, !tbaa !9
  %1255 = sub i32 %1254, 1
  %1256 = icmp eq i32 %1253, %1255
  br i1 %1256, label %1257, label %1262

1257:                                             ; preds = %1249
  %1258 = load i32, ptr %15, align 4, !tbaa !9
  %1259 = icmp ugt i32 %1258, 0
  br i1 %1259, label %1260, label %1262

1260:                                             ; preds = %1257
  %1261 = load i32, ptr %27, align 4, !tbaa !9
  br label %1263

1262:                                             ; preds = %1257, %1249
  br label %1263

1263:                                             ; preds = %1262, %1260
  %1264 = phi i32 [ %1261, %1260 ], [ 0, %1262 ]
  store i32 %1264, ptr %28, align 4, !tbaa !9
  %1265 = load i32, ptr %46, align 4, !tbaa !9
  %1266 = icmp eq i32 %1265, 0
  br i1 %1266, label %1267, label %1269

1267:                                             ; preds = %1263
  %1268 = load i32, ptr %28, align 4, !tbaa !9
  br label %1278

1269:                                             ; preds = %1263
  %1270 = load i32, ptr %28, align 4, !tbaa !9
  %1271 = icmp ugt i32 %1270, 0
  br i1 %1271, label %1272, label %1274

1272:                                             ; preds = %1269
  %1273 = load i32, ptr %28, align 4, !tbaa !9
  br label %1276

1274:                                             ; preds = %1269
  %1275 = load i32, ptr %25, align 4, !tbaa !9
  br label %1276

1276:                                             ; preds = %1274, %1272
  %1277 = phi i32 [ %1273, %1272 ], [ %1275, %1274 ]
  br label %1278

1278:                                             ; preds = %1276, %1267
  %1279 = phi i32 [ %1268, %1267 ], [ %1277, %1276 ]
  store i32 %1279, ptr %45, align 4, !tbaa !9
  %1280 = load i32, ptr %46, align 4, !tbaa !9
  %1281 = icmp eq i32 %1280, 0
  br i1 %1281, label %1282, label %1293

1282:                                             ; preds = %1278
  %1283 = load i32, ptr %28, align 4, !tbaa !9
  %1284 = icmp ugt i32 %1283, 0
  br i1 %1284, label %1285, label %1288

1285:                                             ; preds = %1282
  %1286 = load i8, ptr %41, align 1, !tbaa !19
  %1287 = zext i8 %1286 to i32
  br label %1291

1288:                                             ; preds = %1282
  %1289 = load i8, ptr %40, align 1, !tbaa !19
  %1290 = zext i8 %1289 to i32
  br label %1291

1291:                                             ; preds = %1288, %1285
  %1292 = phi i32 [ %1287, %1285 ], [ %1290, %1288 ]
  br label %1304

1293:                                             ; preds = %1278
  %1294 = load i32, ptr %28, align 4, !tbaa !9
  %1295 = icmp ugt i32 %1294, 0
  br i1 %1295, label %1296, label %1299

1296:                                             ; preds = %1293
  %1297 = load i8, ptr %41, align 1, !tbaa !19
  %1298 = zext i8 %1297 to i32
  br label %1302

1299:                                             ; preds = %1293
  %1300 = load i8, ptr %42, align 1, !tbaa !19
  %1301 = zext i8 %1300 to i32
  br label %1302

1302:                                             ; preds = %1299, %1296
  %1303 = phi i32 [ %1298, %1296 ], [ %1301, %1299 ]
  br label %1304

1304:                                             ; preds = %1302, %1291
  %1305 = phi i32 [ %1292, %1291 ], [ %1303, %1302 ]
  %1306 = trunc i32 %1305 to i8
  store i8 %1306, ptr %44, align 1, !tbaa !19
  %1307 = load ptr, ptr %6, align 8, !tbaa !5
  %1308 = load ptr, ptr %8, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1308, i32 0, i32 1
  %1310 = load i32, ptr %1309, align 4, !tbaa !23
  %1311 = load ptr, ptr %8, align 8, !tbaa !5
  %1312 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1311, i32 0, i32 35
  %1313 = load i32, ptr %1312, align 4, !tbaa !29
  %1314 = load i32, ptr %24, align 4, !tbaa !9
  %1315 = load ptr, ptr %9, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1315, i32 0, i32 2
  %1317 = load i32, ptr %1316, align 4, !tbaa !20
  %1318 = load i32, ptr %45, align 4, !tbaa !9
  %1319 = load i8, ptr %44, align 1, !tbaa !19
  %1320 = load i8, ptr %36, align 1, !tbaa !19
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %1307, i32 noundef %1310, i32 noundef %1313, i32 noundef %1314, i32 noundef %1317, i32 noundef %1318, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %1319, i8 noundef zeroext %1320)
  %1321 = load i32, ptr %46, align 4, !tbaa !9
  %1322 = icmp ugt i32 %1321, 0
  br i1 %1322, label %1323, label %1326

1323:                                             ; preds = %1304
  %1324 = load ptr, ptr %6, align 8, !tbaa !5
  %1325 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %1324, i32 noundef %1325, i32 noundef 0)
  br label %1326

1326:                                             ; preds = %1323, %1304
  %1327 = load i32, ptr %15, align 4, !tbaa !9
  %1328 = icmp eq i32 %1327, 1
  br i1 %1328, label %1329, label %1345

1329:                                             ; preds = %1326
  %1330 = load i32, ptr %11, align 4, !tbaa !9
  %1331 = load i32, ptr %14, align 4, !tbaa !9
  %1332 = sub i32 %1331, 1
  %1333 = icmp eq i32 %1330, %1332
  br i1 %1333, label %1334, label %1345

1334:                                             ; preds = %1329
  %1335 = load i32, ptr %32, align 4, !tbaa !9
  %1336 = icmp ugt i32 %1335, 0
  br i1 %1336, label %1340, label %1337

1337:                                             ; preds = %1334
  %1338 = load i32, ptr %34, align 4, !tbaa !9
  %1339 = icmp ugt i32 %1338, 0
  br i1 %1339, label %1340, label %1345

1340:                                             ; preds = %1337, %1334
  %1341 = load ptr, ptr %6, align 8, !tbaa !5
  %1342 = load i32, ptr %23, align 4, !tbaa !9
  %1343 = load i32, ptr %24, align 4, !tbaa !9
  %1344 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1341, i32 noundef 245373971, i32 noundef %1342, i32 noundef %1343, i8 noundef zeroext 0, i32 noundef %1344, i32 noundef 1)
  br label %1345

1345:                                             ; preds = %1340, %1337, %1329, %1326
  %1346 = load i32, ptr %17, align 4, !tbaa !9
  %1347 = icmp ugt i32 %1346, 0
  br i1 %1347, label %1348, label %1365

1348:                                             ; preds = %1345
  %1349 = load i32, ptr %33, align 4, !tbaa !9
  %1350 = icmp ugt i32 %1349, 0
  br i1 %1350, label %1351, label %1358

1351:                                             ; preds = %1348
  %1352 = load ptr, ptr %6, align 8, !tbaa !5
  %1353 = load i32, ptr %20, align 4, !tbaa !9
  %1354 = load i32, ptr %24, align 4, !tbaa !9
  %1355 = load i32, ptr %23, align 4, !tbaa !9
  %1356 = load i32, ptr %24, align 4, !tbaa !9
  %1357 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1352, i32 noundef %1353, i32 noundef %1354, i32 noundef %1355, i8 noundef zeroext 0, i32 noundef %1356, i32 noundef %1357)
  br label %1358

1358:                                             ; preds = %1351, %1348
  %1359 = load ptr, ptr %6, align 8, !tbaa !5
  %1360 = load i32, ptr %18, align 4, !tbaa !9
  %1361 = load i32, ptr %24, align 4, !tbaa !9
  %1362 = load i32, ptr %21, align 4, !tbaa !9
  %1363 = load i32, ptr %21, align 4, !tbaa !9
  %1364 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1359, i32 noundef %1360, i32 noundef %1361, i32 noundef %1362, i8 noundef zeroext 0, i32 noundef %1363, i32 noundef %1364)
  br label %1365

1365:                                             ; preds = %1358, %1345
  %1366 = load i32, ptr %16, align 4, !tbaa !9
  %1367 = icmp ugt i32 %1366, 0
  br i1 %1367, label %1368, label %1374

1368:                                             ; preds = %1365
  %1369 = load ptr, ptr %6, align 8, !tbaa !5
  %1370 = load i32, ptr %24, align 4, !tbaa !9
  %1371 = load i32, ptr %24, align 4, !tbaa !9
  %1372 = load i32, ptr %22, align 4, !tbaa !9
  %1373 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1369, i32 noundef 237030411, i32 noundef %1370, i32 noundef %1371, i8 noundef zeroext 0, i32 noundef %1372, i32 noundef %1373)
  br label %1374

1374:                                             ; preds = %1368, %1365
  br label %1375

1375:                                             ; preds = %1374
  %1376 = load i32, ptr %11, align 4, !tbaa !9
  %1377 = add i32 %1376, 1
  store i32 %1377, ptr %11, align 4, !tbaa !9
  br label %1245, !llvm.loop !35

1378:                                             ; preds = %1245
  br label %1379

1379:                                             ; preds = %1378, %1243
  %1380 = load i32, ptr %17, align 4, !tbaa !9
  %1381 = icmp ugt i32 %1380, 0
  br i1 %1381, label %1382, label %1491

1382:                                             ; preds = %1379
  %1383 = load i8, ptr %36, align 1, !tbaa !19
  %1384 = icmp ne i8 %1383, 0
  br i1 %1384, label %1385, label %1405

1385:                                             ; preds = %1382
  %1386 = load ptr, ptr %6, align 8, !tbaa !5
  %1387 = load i32, ptr %19, align 4, !tbaa !9
  %1388 = load i32, ptr %21, align 4, !tbaa !9
  %1389 = load i32, ptr %21, align 4, !tbaa !9
  %1390 = load i32, ptr %21, align 4, !tbaa !9
  %1391 = load i32, ptr %14, align 4, !tbaa !9
  %1392 = icmp eq i32 %1391, 1
  br i1 %1392, label %1393, label %1399

1393:                                             ; preds = %1385
  %1394 = load i32, ptr %15, align 4, !tbaa !9
  %1395 = icmp ugt i32 %1394, 0
  br i1 %1395, label %1396, label %1399

1396:                                             ; preds = %1393
  %1397 = load i8, ptr %43, align 1, !tbaa !19
  %1398 = zext i8 %1397 to i32
  br label %1402

1399:                                             ; preds = %1393, %1385
  %1400 = load i8, ptr %40, align 1, !tbaa !19
  %1401 = zext i8 %1400 to i32
  br label %1402

1402:                                             ; preds = %1399, %1396
  %1403 = phi i32 [ %1398, %1396 ], [ %1401, %1399 ]
  %1404 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1386, i32 noundef %1387, i32 noundef %1388, i32 noundef %1389, i8 noundef zeroext 0, i32 noundef %1390, i32 noundef %1403, i32 noundef %1404)
  br label %1410

1405:                                             ; preds = %1382
  %1406 = load ptr, ptr %6, align 8, !tbaa !5
  %1407 = load i32, ptr %19, align 4, !tbaa !9
  %1408 = load i32, ptr %21, align 4, !tbaa !9
  %1409 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_generator_hinstrps_aarch64(ptr noundef %1406, i32 noundef %1407, i32 noundef %1408, i32 noundef %1409)
  br label %1410

1410:                                             ; preds = %1405, %1402
  %1411 = load i32, ptr %35, align 4, !tbaa !9
  %1412 = icmp ugt i32 %1411, 0
  br i1 %1412, label %1413, label %1462

1413:                                             ; preds = %1410
  store i32 0, ptr %24, align 4, !tbaa !9
  %1414 = load i32, ptr %47, align 4, !tbaa !9
  %1415 = icmp eq i32 %1414, 0
  br i1 %1415, label %1416, label %1427

1416:                                             ; preds = %1413
  %1417 = load ptr, ptr %6, align 8, !tbaa !5
  %1418 = load ptr, ptr %8, align 8, !tbaa !5
  %1419 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1418, i32 0, i32 16
  %1420 = load i32, ptr %1419, align 4, !tbaa !25
  %1421 = load i32, ptr %24, align 4, !tbaa !9
  %1422 = load ptr, ptr %10, align 8, !tbaa !5
  %1423 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1422, i32 noundef 3)
  %1424 = icmp eq i32 0, %1423
  %1425 = zext i1 %1424 to i64
  %1426 = select i1 %1424, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1417, i32 noundef 1027604486, i32 noundef %1420, i32 noundef 127, i32 noundef 0, i32 noundef %1421, i32 noundef %1426)
  br label %1435

1427:                                             ; preds = %1413
  %1428 = load ptr, ptr %6, align 8, !tbaa !5
  %1429 = load ptr, ptr %8, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1429, i32 0, i32 16
  %1431 = load i32, ptr %1430, align 4, !tbaa !25
  %1432 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1428, i32 noundef 1027604486, i32 noundef %1431, i32 noundef 127, i32 noundef 0, i32 noundef %1432, i32 noundef 2)
  %1433 = load ptr, ptr %6, align 8, !tbaa !5
  %1434 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %1433, i32 noundef %1434, i32 noundef 0)
  br label %1435

1435:                                             ; preds = %1427, %1416
  %1436 = load i32, ptr %33, align 4, !tbaa !9
  %1437 = icmp ugt i32 %1436, 0
  br i1 %1437, label %1438, label %1445

1438:                                             ; preds = %1435
  %1439 = load ptr, ptr %6, align 8, !tbaa !5
  %1440 = load i32, ptr %49, align 4, !tbaa !9
  %1441 = load i32, ptr %24, align 4, !tbaa !9
  %1442 = load i32, ptr %23, align 4, !tbaa !9
  %1443 = load i32, ptr %24, align 4, !tbaa !9
  %1444 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1439, i32 noundef %1440, i32 noundef %1441, i32 noundef %1442, i8 noundef zeroext 0, i32 noundef %1443, i32 noundef %1444)
  br label %1445

1445:                                             ; preds = %1438, %1435
  %1446 = load i8, ptr %37, align 1, !tbaa !19
  %1447 = icmp ne i8 %1446, 0
  br i1 %1447, label %1448, label %1454

1448:                                             ; preds = %1445
  %1449 = load ptr, ptr %6, align 8, !tbaa !5
  %1450 = load i32, ptr %24, align 4, !tbaa !9
  %1451 = load i32, ptr %21, align 4, !tbaa !9
  %1452 = load i32, ptr %21, align 4, !tbaa !9
  %1453 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1449, i32 noundef 1694498819, i32 noundef %1450, i32 noundef %1451, i8 noundef zeroext 0, i32 noundef %1452, i32 noundef 0, i32 noundef %1453)
  br label %1461

1454:                                             ; preds = %1445
  %1455 = load ptr, ptr %6, align 8, !tbaa !5
  %1456 = load i32, ptr %48, align 4, !tbaa !9
  %1457 = load i32, ptr %24, align 4, !tbaa !9
  %1458 = load i32, ptr %21, align 4, !tbaa !9
  %1459 = load i32, ptr %21, align 4, !tbaa !9
  %1460 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1455, i32 noundef %1456, i32 noundef %1457, i32 noundef %1458, i8 noundef zeroext 0, i32 noundef %1459, i32 noundef %1460)
  br label %1461

1461:                                             ; preds = %1454, %1448
  br label %1462

1462:                                             ; preds = %1461, %1410
  %1463 = load i32, ptr %47, align 4, !tbaa !9
  %1464 = icmp eq i32 %1463, 0
  br i1 %1464, label %1465, label %1479

1465:                                             ; preds = %1462
  %1466 = load ptr, ptr %6, align 8, !tbaa !5
  %1467 = load ptr, ptr %8, align 8, !tbaa !5
  %1468 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1467, i32 0, i32 16
  %1469 = load i32, ptr %1468, align 4, !tbaa !25
  %1470 = load ptr, ptr %9, align 8, !tbaa !5
  %1471 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1470, i32 0, i32 5
  %1472 = load i32, ptr %1471, align 4, !tbaa !32
  %1473 = load i32, ptr %21, align 4, !tbaa !9
  %1474 = load ptr, ptr %10, align 8, !tbaa !5
  %1475 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1474, i32 noundef 3)
  %1476 = icmp eq i32 0, %1475
  %1477 = zext i1 %1476 to i64
  %1478 = select i1 %1476, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1466, i32 noundef 1006633990, i32 noundef %1469, i32 noundef 127, i32 noundef %1472, i32 noundef %1473, i32 noundef %1478)
  br label %1490

1479:                                             ; preds = %1462
  %1480 = load ptr, ptr %6, align 8, !tbaa !5
  %1481 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_f32bf16_aarch64(ptr noundef %1480, i32 noundef %1481, i32 noundef 0)
  %1482 = load ptr, ptr %6, align 8, !tbaa !5
  %1483 = load ptr, ptr %8, align 8, !tbaa !5
  %1484 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1483, i32 0, i32 16
  %1485 = load i32, ptr %1484, align 4, !tbaa !25
  %1486 = load ptr, ptr %9, align 8, !tbaa !5
  %1487 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1486, i32 0, i32 5
  %1488 = load i32, ptr %1487, align 4, !tbaa !32
  %1489 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1482, i32 noundef 1006633990, i32 noundef %1485, i32 noundef 127, i32 noundef %1488, i32 noundef %1489, i32 noundef 2)
  br label %1490

1490:                                             ; preds = %1479, %1465
  br label %1491

1491:                                             ; preds = %1490, %1379
  %1492 = load i32, ptr %16, align 4, !tbaa !9
  %1493 = icmp ugt i32 %1492, 0
  br i1 %1493, label %1494, label %1593

1494:                                             ; preds = %1491
  %1495 = load i8, ptr %36, align 1, !tbaa !19
  %1496 = icmp ne i8 %1495, 0
  br i1 %1496, label %1497, label %1517

1497:                                             ; preds = %1494
  %1498 = load ptr, ptr %6, align 8, !tbaa !5
  %1499 = load i32, ptr %19, align 4, !tbaa !9
  %1500 = load i32, ptr %22, align 4, !tbaa !9
  %1501 = load i32, ptr %22, align 4, !tbaa !9
  %1502 = load i32, ptr %22, align 4, !tbaa !9
  %1503 = load i32, ptr %14, align 4, !tbaa !9
  %1504 = icmp eq i32 %1503, 1
  br i1 %1504, label %1505, label %1511

1505:                                             ; preds = %1497
  %1506 = load i32, ptr %15, align 4, !tbaa !9
  %1507 = icmp ugt i32 %1506, 0
  br i1 %1507, label %1508, label %1511

1508:                                             ; preds = %1505
  %1509 = load i8, ptr %43, align 1, !tbaa !19
  %1510 = zext i8 %1509 to i32
  br label %1514

1511:                                             ; preds = %1505, %1497
  %1512 = load i8, ptr %40, align 1, !tbaa !19
  %1513 = zext i8 %1512 to i32
  br label %1514

1514:                                             ; preds = %1511, %1508
  %1515 = phi i32 [ %1510, %1508 ], [ %1513, %1511 ]
  %1516 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1498, i32 noundef %1499, i32 noundef %1500, i32 noundef %1501, i8 noundef zeroext 0, i32 noundef %1502, i32 noundef %1515, i32 noundef %1516)
  br label %1522

1517:                                             ; preds = %1494
  %1518 = load ptr, ptr %6, align 8, !tbaa !5
  %1519 = load i32, ptr %19, align 4, !tbaa !9
  %1520 = load i32, ptr %22, align 4, !tbaa !9
  %1521 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_generator_hinstrps_aarch64(ptr noundef %1518, i32 noundef %1519, i32 noundef %1520, i32 noundef %1521)
  br label %1522

1522:                                             ; preds = %1517, %1514
  %1523 = load i32, ptr %35, align 4, !tbaa !9
  %1524 = icmp ugt i32 %1523, 0
  br i1 %1524, label %1525, label %1564

1525:                                             ; preds = %1522
  store i32 0, ptr %24, align 4, !tbaa !9
  %1526 = load i32, ptr %47, align 4, !tbaa !9
  %1527 = icmp eq i32 %1526, 0
  br i1 %1527, label %1528, label %1539

1528:                                             ; preds = %1525
  %1529 = load ptr, ptr %6, align 8, !tbaa !5
  %1530 = load ptr, ptr %8, align 8, !tbaa !5
  %1531 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1530, i32 0, i32 17
  %1532 = load i32, ptr %1531, align 4, !tbaa !26
  %1533 = load i32, ptr %24, align 4, !tbaa !9
  %1534 = load ptr, ptr %10, align 8, !tbaa !5
  %1535 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1534, i32 noundef 3)
  %1536 = icmp eq i32 0, %1535
  %1537 = zext i1 %1536 to i64
  %1538 = select i1 %1536, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1529, i32 noundef 1027604486, i32 noundef %1532, i32 noundef 127, i32 noundef 0, i32 noundef %1533, i32 noundef %1538)
  br label %1547

1539:                                             ; preds = %1525
  %1540 = load ptr, ptr %6, align 8, !tbaa !5
  %1541 = load ptr, ptr %8, align 8, !tbaa !5
  %1542 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1541, i32 0, i32 17
  %1543 = load i32, ptr %1542, align 4, !tbaa !26
  %1544 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1540, i32 noundef 1027604486, i32 noundef %1543, i32 noundef 127, i32 noundef 0, i32 noundef %1544, i32 noundef 2)
  %1545 = load ptr, ptr %6, align 8, !tbaa !5
  %1546 = load i32, ptr %24, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %1545, i32 noundef %1546, i32 noundef 0)
  br label %1547

1547:                                             ; preds = %1539, %1528
  %1548 = load i8, ptr %37, align 1, !tbaa !19
  %1549 = icmp ne i8 %1548, 0
  br i1 %1549, label %1550, label %1556

1550:                                             ; preds = %1547
  %1551 = load ptr, ptr %6, align 8, !tbaa !5
  %1552 = load i32, ptr %24, align 4, !tbaa !9
  %1553 = load i32, ptr %21, align 4, !tbaa !9
  %1554 = load i32, ptr %21, align 4, !tbaa !9
  %1555 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %1551, i32 noundef 1694498819, i32 noundef %1552, i32 noundef %1553, i8 noundef zeroext 0, i32 noundef %1554, i32 noundef 0, i32 noundef %1555)
  br label %1563

1556:                                             ; preds = %1547
  %1557 = load ptr, ptr %6, align 8, !tbaa !5
  %1558 = load i32, ptr %48, align 4, !tbaa !9
  %1559 = load i32, ptr %24, align 4, !tbaa !9
  %1560 = load i32, ptr %21, align 4, !tbaa !9
  %1561 = load i32, ptr %21, align 4, !tbaa !9
  %1562 = load i32, ptr %39, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1557, i32 noundef %1558, i32 noundef %1559, i32 noundef %1560, i8 noundef zeroext 0, i32 noundef %1561, i32 noundef %1562)
  br label %1563

1563:                                             ; preds = %1556, %1550
  br label %1564

1564:                                             ; preds = %1563, %1522
  %1565 = load i32, ptr %47, align 4, !tbaa !9
  %1566 = icmp eq i32 %1565, 0
  br i1 %1566, label %1567, label %1581

1567:                                             ; preds = %1564
  %1568 = load ptr, ptr %6, align 8, !tbaa !5
  %1569 = load ptr, ptr %8, align 8, !tbaa !5
  %1570 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1569, i32 0, i32 17
  %1571 = load i32, ptr %1570, align 4, !tbaa !26
  %1572 = load ptr, ptr %9, align 8, !tbaa !5
  %1573 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1572, i32 0, i32 5
  %1574 = load i32, ptr %1573, align 4, !tbaa !32
  %1575 = load i32, ptr %22, align 4, !tbaa !9
  %1576 = load ptr, ptr %10, align 8, !tbaa !5
  %1577 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1576, i32 noundef 3)
  %1578 = icmp eq i32 0, %1577
  %1579 = zext i1 %1578 to i64
  %1580 = select i1 %1578, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1568, i32 noundef 1006633990, i32 noundef %1571, i32 noundef 127, i32 noundef %1574, i32 noundef %1575, i32 noundef %1580)
  br label %1592

1581:                                             ; preds = %1564
  %1582 = load ptr, ptr %6, align 8, !tbaa !5
  %1583 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_generator_vcvt_f32bf16_aarch64(ptr noundef %1582, i32 noundef %1583, i32 noundef 0)
  %1584 = load ptr, ptr %6, align 8, !tbaa !5
  %1585 = load ptr, ptr %8, align 8, !tbaa !5
  %1586 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1585, i32 0, i32 17
  %1587 = load i32, ptr %1586, align 4, !tbaa !26
  %1588 = load ptr, ptr %9, align 8, !tbaa !5
  %1589 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1588, i32 0, i32 5
  %1590 = load i32, ptr %1589, align 4, !tbaa !32
  %1591 = load i32, ptr %22, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %1584, i32 noundef 1006633990, i32 noundef %1587, i32 noundef 127, i32 noundef %1590, i32 noundef %1591, i32 noundef 2)
  br label %1592

1592:                                             ; preds = %1581, %1567
  br label %1593

1593:                                             ; preds = %1592, %1491
  %1594 = load i32, ptr %13, align 4, !tbaa !9
  %1595 = icmp ugt i32 %1594, 1
  br i1 %1595, label %1596, label %1643

1596:                                             ; preds = %1593
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  %1597 = load ptr, ptr %10, align 8, !tbaa !5
  %1598 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1597, i32 0, i32 2
  %1599 = load i32, ptr %1598, align 1, !tbaa !22
  %1600 = load ptr, ptr %9, align 8, !tbaa !5
  %1601 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1600, i32 0, i32 2
  %1602 = load i32, ptr %1601, align 4, !tbaa !20
  %1603 = mul i32 %1599, %1602
  %1604 = load i32, ptr %14, align 4, !tbaa !9
  %1605 = load i32, ptr %25, align 4, !tbaa !9
  %1606 = mul i32 %1604, %1605
  %1607 = load ptr, ptr %9, align 8, !tbaa !5
  %1608 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1607, i32 0, i32 2
  %1609 = load i32, ptr %1608, align 4, !tbaa !20
  %1610 = mul i32 %1606, %1609
  %1611 = load i32, ptr %15, align 4, !tbaa !9
  %1612 = load i32, ptr %25, align 4, !tbaa !9
  %1613 = load i32, ptr %27, align 4, !tbaa !9
  %1614 = sub i32 %1612, %1613
  %1615 = mul i32 %1611, %1614
  %1616 = load ptr, ptr %9, align 8, !tbaa !5
  %1617 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1616, i32 0, i32 2
  %1618 = load i32, ptr %1617, align 4, !tbaa !20
  %1619 = mul i32 %1615, %1618
  %1620 = sub i32 %1610, %1619
  %1621 = sub i32 %1603, %1620
  store i32 %1621, ptr %63, align 4, !tbaa !9
  %1622 = load i32, ptr %63, align 4, !tbaa !9
  %1623 = icmp sgt i32 %1622, 0
  br i1 %1623, label %1624, label %1637

1624:                                             ; preds = %1596
  %1625 = load ptr, ptr %6, align 8, !tbaa !5
  %1626 = load ptr, ptr %8, align 8, !tbaa !5
  %1627 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1626, i32 0, i32 1
  %1628 = load i32, ptr %1627, align 4, !tbaa !23
  %1629 = load ptr, ptr %8, align 8, !tbaa !5
  %1630 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1629, i32 0, i32 35
  %1631 = load i32, ptr %1630, align 4, !tbaa !29
  %1632 = load ptr, ptr %8, align 8, !tbaa !5
  %1633 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1632, i32 0, i32 1
  %1634 = load i32, ptr %1633, align 4, !tbaa !23
  %1635 = load i32, ptr %63, align 4, !tbaa !9
  %1636 = sext i32 %1635 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1625, i32 noundef 4096, i32 noundef %1628, i32 noundef %1631, i32 noundef %1634, i64 noundef %1636)
  br label %1637

1637:                                             ; preds = %1624, %1596
  %1638 = load ptr, ptr %6, align 8, !tbaa !5
  %1639 = load ptr, ptr %7, align 8, !tbaa !5
  %1640 = load ptr, ptr %8, align 8, !tbaa !5
  %1641 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1640, i32 0, i32 25
  %1642 = load i32, ptr %1641, align 4, !tbaa !28
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %1638, ptr noundef %1639, i32 noundef %1642, i32 noundef 1)
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  br label %1643

1643:                                             ; preds = %1637, %1593
  %1644 = load i8, ptr %37, align 1, !tbaa !19
  %1645 = icmp ne i8 %1644, 0
  br i1 %1645, label %1646, label %1648

1646:                                             ; preds = %1643
  %1647 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_sm(ptr noundef %1647, i32 noundef -721205633)
  br label %1648

1648:                                             ; preds = %1646, %1643
  store i32 1, ptr %52, align 4
  br label %1649

1649:                                             ; preds = %1648, %435, %411, %330
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  ret void
}

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"libxsmm_mateltwise_kernel_config_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !10, i64 392, !10, i64 396, !10, i64 400, !10, i64 404, !10, i64 408, !10, i64 412, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !10, i64 460, !10, i64 464, !10, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !7, i64 512}
!13 = !{!14, !15, i64 29}
!14 = !{!"libxsmm_meltw_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !15, i64 27, !15, i64 29, !7, i64 31}
!15 = !{!"short", !7, i64 0}
!16 = !{!14, !15, i64 27}
!17 = !{!18, !10, i64 28}
!18 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!19 = !{!7, !7, i64 0}
!20 = !{!12, !10, i64 8}
!21 = !{!14, !10, i64 0}
!22 = !{!14, !10, i64 8}
!23 = !{!24, !10, i64 4}
!24 = !{!"libxsmm_mateltwise_gp_reg_mapping_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144}
!25 = !{!24, !10, i64 64}
!26 = !{!24, !10, i64 68}
!27 = !{!24, !10, i64 96}
!28 = !{!24, !10, i64 100}
!29 = !{!24, !10, i64 140}
!30 = !{!24, !10, i64 0}
!31 = !{!14, !10, i64 4}
!32 = !{!12, !10, i64 20}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}


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

@.str = external hidden unnamed_addr constant [91 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.2 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel = external hidden unnamed_addr constant [224 x i8], align 1
@__func__.libxsmm_generator_reduce_rows_aarch64_microkernel = external hidden unnamed_addr constant [50 x i8], align 1
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.7 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.8 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.9 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.10 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.11 = external hidden unnamed_addr constant [4 x i32], align 16
@__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.12 = external hidden unnamed_addr constant [4 x i32], align 16

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

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #3

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr nocapture noundef readonly %3, ptr noundef %4) local_unnamed_addr #4 {
switch.edge:
  %5 = alloca [4 x i32], align 16
  %6 = alloca [4 x i32], align 16
  %7 = alloca [4 x i32], align 16
  %8 = alloca [4 x i32], align 16
  %9 = alloca [4 x i32], align 16
  %10 = alloca [4 x i32], align 16
  %11 = alloca [4 x i32], align 16
  %12 = alloca [4 x i32], align 16
  %13 = load i32, ptr %3, align 4, !tbaa !5
  %14 = tail call i32 @libxsmm_cpuid_vlen32(i32 noundef %13) #6
  %15 = getelementptr inbounds i8, ptr %4, i64 29
  %16 = load i16, ptr %15, align 1, !tbaa !10
  %switch.tableidx = add i16 %16, -18
  %17 = icmp ult i16 %switch.tableidx, 53
  %switch.cast = zext nneg i16 %switch.tableidx to i53
  %switch.downshift = lshr i53 -2251799813685235, %switch.cast
  %switch.masked = trunc i53 %switch.downshift to i1
  %18 = select i1 %17, i1 %switch.masked, i1 false
  %19 = add i16 %16, -21
  %switch613 = icmp ult i16 %19, -3
  %20 = icmp eq i16 %16, 21
  %21 = icmp eq i16 %16, 70
  %22 = icmp eq i16 %16, 69
  %23 = getelementptr inbounds i8, ptr %4, i64 27
  %24 = load i16, ptr %23, align 1, !tbaa !13
  %25 = and i16 %24, 64
  %.not = icmp eq i16 %25, 0
  %26 = getelementptr inbounds i8, ptr %0, i64 28
  %27 = load i32, ptr %26, align 4, !tbaa !14
  %28 = icmp ult i32 %27, 3000
  %29 = add i32 %27, -2201
  %spec.select595 = icmp ult i32 %29, 799
  %30 = zext i1 %spec.select595 to i8
  %31 = add i32 %27, -2501
  %32 = icmp ult i32 %31, 499
  %33 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %34 = icmp eq i32 %33, 0
  br i1 %34, label %75, label %35

35:                                               ; preds = %switch.edge
  %36 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %37 = icmp eq i32 %36, 1
  br i1 %37, label %75, label %38

38:                                               ; preds = %35
  %39 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %40 = icmp eq i32 %39, 2
  br i1 %40, label %75, label %41

41:                                               ; preds = %38
  %42 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %43 = icmp eq i32 %42, 3
  br i1 %43, label %75, label %44

44:                                               ; preds = %41
  %45 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %46 = icmp eq i32 %45, 4
  br i1 %46, label %75, label %47

47:                                               ; preds = %44
  %48 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %49 = icmp eq i32 %48, 5
  br i1 %49, label %75, label %50

50:                                               ; preds = %47
  %51 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %52 = icmp eq i32 %51, 6
  br i1 %52, label %75, label %53

53:                                               ; preds = %50
  %54 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %55 = icmp eq i32 %54, 7
  br i1 %55, label %75, label %56

56:                                               ; preds = %53
  %57 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %58 = icmp eq i32 %57, 8
  br i1 %58, label %75, label %59

59:                                               ; preds = %56
  %60 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %61 = icmp eq i32 %60, 9
  br i1 %61, label %75, label %62

62:                                               ; preds = %59
  %63 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %64 = icmp eq i32 %63, 10
  br i1 %64, label %75, label %65

65:                                               ; preds = %62
  %66 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %67 = icmp eq i32 %66, 11
  br i1 %67, label %75, label %68

68:                                               ; preds = %65
  %69 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %70 = icmp eq i32 %69, 12
  br i1 %70, label %75, label %71

71:                                               ; preds = %68
  %72 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 4) #6
  %73 = icmp eq i32 %72, 13
  br i1 %73, label %75, label %74

74:                                               ; preds = %71
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str, i32 noundef 969, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #7
  unreachable

75:                                               ; preds = %35, %41, %47, %53, %59, %65, %71, %68, %62, %56, %50, %44, %38, %switch.edge
  %76 = phi i8 [ 8, %switch.edge ], [ 4, %35 ], [ 2, %38 ], [ 2, %41 ], [ 1, %44 ], [ 1, %47 ], [ 8, %50 ], [ 8, %53 ], [ 4, %56 ], [ 4, %59 ], [ 2, %62 ], [ 2, %65 ], [ 1, %68 ], [ 1, %71 ]
  %77 = tail call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext %76) #6
  %78 = getelementptr inbounds i8, ptr %3, i64 8
  %79 = load i32, ptr %78, align 4, !tbaa !17
  %80 = icmp eq i32 %79, 8
  %81 = select i1 %80, i32 7, i32 5
  %82 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #6
  %83 = icmp eq i32 %82, 2
  %84 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %85 = icmp eq i32 %84, 2
  %86 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %87 = icmp eq i32 %86, 0
  %88 = zext i1 %87 to i32
  %spec.select596 = lshr i32 %14, %88
  %89 = load i32, ptr %4, align 1, !tbaa !18
  %90 = getelementptr inbounds i8, ptr %4, i64 8
  %91 = load i32, ptr %90, align 1, !tbaa !19
  %92 = icmp ugt i32 %89, %91
  br i1 %92, label %93, label %98

93:                                               ; preds = %75
  %94 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !20
  %95 = icmp ugt i32 %94, 1
  %96 = load i32, ptr @libxsmm_verbosity, align 4
  %97 = select i1 %95, i32 %96, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90007, ptr noundef nonnull @__func__.libxsmm_generator_reduce_rows_aarch64_microkernel, ptr noundef nonnull @.str, i32 noundef 990, i32 noundef %97) #6
  br label %376

98:                                               ; preds = %75
  br i1 %switch613, label %101, label %.thread

.thread:                                          ; preds = %98
  %99 = select i1 %spec.select595, i32 1694498819, i32 237032459
  %100 = select i1 %spec.select595, i32 1694507138, i32 773903371
  br label %120

101:                                              ; preds = %98
  br i1 %20, label %102, label %105

102:                                              ; preds = %101
  %103 = select i1 %spec.select595, i32 1694924962, i32 237040651
  %104 = select i1 %spec.select595, i32 1694900354, i32 773911563
  br label %120

105:                                              ; preds = %101
  br i1 %22, label %106, label %109

106:                                              ; preds = %105
  %107 = select i1 %spec.select595, i32 1694990498, i32 245429259
  %108 = select i1 %spec.select595, i32 1694965890, i32 782300171
  br label %120

109:                                              ; preds = %105
  br i1 %21, label %110, label %114

110:                                              ; preds = %109
  %111 = select i1 %spec.select595, i32 1694924962, i32 237040651
  %112 = select i1 %spec.select595, i32 1694900354, i32 773911563
  %113 = select i1 %spec.select595, i32 69218307, i32 236985363
  br label %120

114:                                              ; preds = %109
  %115 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  %116 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !20
  %117 = icmp ugt i32 %116, 1
  %118 = load i32, ptr @libxsmm_verbosity, align 4
  %119 = select i1 %117, i32 %118, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_reduce_rows_aarch64_microkernel, ptr noundef nonnull @.str, i32 noundef 1023, i32 noundef %119) #6
  br label %376

120:                                              ; preds = %106, %110, %102, %.thread
  %.626 = phi i32 [ 237032459, %.thread ], [ 237040651, %102 ], [ 237040651, %110 ], [ 237040651, %106 ]
  %.0560625 = phi i32 [ %99, %.thread ], [ %103, %102 ], [ %111, %110 ], [ %107, %106 ]
  %.0561624 = phi i32 [ 0, %.thread ], [ 0, %102 ], [ 236985363, %110 ], [ 0, %106 ]
  %.0563622 = phi i32 [ %100, %.thread ], [ %104, %102 ], [ %112, %110 ], [ %108, %106 ]
  %.0564621 = phi i32 [ 0, %.thread ], [ 0, %102 ], [ %113, %110 ], [ 0, %106 ]
  %121 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 41, ptr %121, align 4, !tbaa !21
  %122 = getelementptr inbounds i8, ptr %2, i64 64
  store i32 42, ptr %122, align 4, !tbaa !23
  %123 = getelementptr inbounds i8, ptr %2, i64 68
  store i32 43, ptr %123, align 4, !tbaa !24
  %124 = getelementptr inbounds i8, ptr %2, i64 96
  store i32 44, ptr %124, align 4, !tbaa !25
  %125 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 45, ptr %125, align 4, !tbaa !26
  %126 = getelementptr inbounds i8, ptr %2, i64 140
  store i32 46, ptr %126, align 4, !tbaa !27
  %127 = load i32, ptr %2, align 4, !tbaa !28
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %127, i32 noundef 127, i32 noundef 32, i32 noundef 41) #6
  %128 = load i32, ptr %2, align 4, !tbaa !28
  br i1 %18, label %129, label %141

129:                                              ; preds = %120
  %130 = load i32, ptr %122, align 4, !tbaa !23
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %128, i32 noundef 127, i32 noundef 80, i32 noundef %130) #6
  %.off = add nsw i16 %16, -19
  %switch = icmp ult i16 %.off, 2
  br i1 %switch, label %131, label %143

131:                                              ; preds = %129
  %132 = getelementptr inbounds i8, ptr %4, i64 4
  %133 = load i32, ptr %132, align 1, !tbaa !29
  %134 = getelementptr inbounds i8, ptr %3, i64 20
  %135 = load i32, ptr %134, align 4, !tbaa !30
  %136 = mul i32 %135, %133
  %137 = load i32, ptr %122, align 4, !tbaa !23
  %138 = load i32, ptr %126, align 4, !tbaa !27
  %139 = load i32, ptr %123, align 4, !tbaa !24
  %140 = zext i32 %136 to i64
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef nonnull %0, i32 noundef 4096, i32 noundef %137, i32 noundef %138, i32 noundef %139, i64 noundef %140) #6
  br label %143

141:                                              ; preds = %120
  %142 = load i32, ptr %123, align 4, !tbaa !24
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef nonnull %0, i32 noundef -1186988026, i32 noundef %128, i32 noundef 127, i32 noundef 80, i32 noundef %142) #6
  br label %143

143:                                              ; preds = %129, %131, %141
  %144 = getelementptr inbounds i8, ptr %4, i64 4
  %145 = load i32, ptr %144, align 1, !tbaa !29
  %.not581 = icmp eq i32 %spec.select596, 0
  br i1 %.not581, label %146, label %147

146:                                              ; preds = %143
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str, i32 noundef 1068, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_reduce_rows_aarch64_microkernel) #7
  unreachable

147:                                              ; preds = %143
  %148 = load i32, ptr %4, align 1, !tbaa !18
  %149 = urem i32 %148, %spec.select596
  %150 = icmp ne i32 %149, 0
  %151 = add i32 %spec.select596, -1
  %152 = add i32 %151, %148
  %153 = udiv i32 %152, %spec.select596
  br i1 %32, label %154, label %155

154:                                              ; preds = %147
  tail call void @libxsmm_aarch64_instruction_sm(ptr noundef nonnull %0, i32 noundef -721205377) #6
  br label %155

155:                                              ; preds = %154, %147
  br i1 %spec.select595, label %156, label %.thread634

.thread634:                                       ; preds = %155
  %or.cond5638 = select i1 %83, i1 true, i1 %85
  br label %169

156:                                              ; preds = %155
  %157 = load i32, ptr %126, align 4, !tbaa !27
  tail call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 0, i32 noundef -1, i32 noundef %157) #6
  %brmerge.not = select i1 %150, i1 %28, i1 false
  br i1 %brmerge.not, label %158, label %164

158:                                              ; preds = %156
  %159 = load i32, ptr %78, align 4, !tbaa !17
  %160 = mul i32 %159, %149
  %161 = load i32, ptr %126, align 4, !tbaa !27
  tail call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 1, i32 noundef %160, i32 noundef %161) #6
  %or.cond3 = select i1 %83, i1 true, i1 %85
  br i1 %or.cond3, label %.thread682, label %.thread689

.thread689:                                       ; preds = %158
  %.not597633640692 = xor i1 %150, true
  br label %170

.thread682:                                       ; preds = %158
  %162 = shl i32 %149, 2
  %163 = load i32, ptr %126, align 4, !tbaa !27
  tail call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 3, i32 noundef %162, i32 noundef %163) #6
  br label %165

164:                                              ; preds = %156
  %.pre = select i1 %83, i1 true, i1 %85
  br i1 %.pre, label %165, label %169

165:                                              ; preds = %.thread682, %164
  %166 = getelementptr inbounds i8, ptr %3, i64 20
  %.pn.in = select i1 %83, ptr %78, ptr %166
  %.pn = load i32, ptr %.pn.in, align 4, !tbaa !20
  %167 = mul i32 %.pn, %spec.select596
  %168 = load i32, ptr %126, align 4, !tbaa !27
  tail call void @libxsmm_generator_set_p_register_aarch64_sve(ptr noundef nonnull %0, i32 noundef 2, i32 noundef %167, i32 noundef %168) #6
  br label %169

169:                                              ; preds = %.thread634, %165, %164
  %or.cond5643 = phi i1 [ %or.cond5638, %.thread634 ], [ true, %165 ], [ false, %164 ]
  br i1 %150, label %170, label %190

170:                                              ; preds = %.thread689, %169
  %.not597633640701 = phi i1 [ %.not597633640692, %.thread689 ], [ false, %169 ]
  %.0565642698 = phi i32 [ 1, %.thread689 ], [ 3, %169 ]
  %or.cond5643695 = phi i1 [ false, %.thread689 ], [ %or.cond5643, %169 ]
  switch i16 %16, label %190 [
    i16 69, label %171
    i16 21, label %171
  ]

171:                                              ; preds = %170, %170
  br i1 %spec.select595, label %198, label %172

172:                                              ; preds = %171
  %173 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %174 = icmp eq i32 %173, 0
  br i1 %174, label %175, label %180

175:                                              ; preds = %172
  %176 = icmp eq i32 %149, 1
  br i1 %176, label %177, label %198

177:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %5, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %6, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf, i64 16, i1 false)
  %178 = load i32, ptr %126, align 4, !tbaa !27
  %179 = select i1 %20, ptr %5, ptr %6
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %178, i32 noundef 44, ptr noundef nonnull %179, i32 noundef 0) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  br label %198

180:                                              ; preds = %172
  switch i32 %149, label %198 [
    i32 1, label %181
    i32 2, label %184
    i32 3, label %187
  ]

181:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %7, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.7, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %8, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.8, i64 16, i1 false)
  %182 = load i32, ptr %126, align 4, !tbaa !27
  %183 = select i1 %20, ptr %7, ptr %8
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %182, i32 noundef 44, ptr noundef nonnull %183, i32 noundef 0) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #6
  br label %198

184:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %9, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.9, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %10, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.10, i64 16, i1 false)
  %185 = load i32, ptr %126, align 4, !tbaa !27
  %186 = select i1 %20, ptr %9, ptr %10
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %185, i32 noundef 44, ptr noundef nonnull %186, i32 noundef 0) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  br label %198

187:                                              ; preds = %180
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %11, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_neg_inf.11, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %12, ptr noundef nonnull align 16 dereferenceable(16) @__const.libxsmm_generator_reduce_rows_aarch64_microkernel.mask_array_pos_inf.12, i64 16, i1 false)
  %188 = load i32, ptr %126, align 4, !tbaa !27
  %189 = select i1 %20, ptr %11, ptr %12
  call void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %188, i32 noundef 44, ptr noundef nonnull %189, i32 noundef 0) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #6
  br label %198

190:                                              ; preds = %170, %169
  %.not597633640700 = phi i1 [ %.not597633640701, %170 ], [ true, %169 ]
  %.0565642697 = phi i32 [ %.0565642698, %170 ], [ 3, %169 ]
  %or.cond5643694 = phi i1 [ %or.cond5643695, %170 ], [ %or.cond5643, %169 ]
  br i1 %21, label %191, label %198

191:                                              ; preds = %190
  %192 = load i32, ptr %126, align 4, !tbaa !27
  %193 = load i32, ptr %78, align 4, !tbaa !17
  %194 = icmp eq i32 %193, 8
  %195 = select i1 %194, i64 9223372036854775807, i64 2147483647
  br i1 %spec.select595, label %196, label %197

196:                                              ; preds = %191
  tail call void @libxsmm_aarch64_instruction_broadcast_scalar_to_vec_sve(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %192, i32 noundef %77, i8 noundef zeroext 0, i64 noundef %195) #6
  br label %198

197:                                              ; preds = %191
  tail call void @libxsmm_aarch64_instruction_broadcast_scalar_to_vec_asimd(ptr noundef nonnull %0, i8 noundef zeroext 29, i32 noundef %192, i32 noundef %81, i64 noundef %195) #6
  br label %198

198:                                              ; preds = %180, %190, %197, %196, %171, %181, %187, %184, %175, %177
  %.not597633640699 = phi i1 [ %.not597633640701, %171 ], [ %.not597633640701, %177 ], [ %.not597633640701, %175 ], [ %.not597633640701, %181 ], [ %.not597633640701, %184 ], [ %.not597633640701, %187 ], [ %.not597633640700, %196 ], [ %.not597633640700, %197 ], [ %.not597633640700, %190 ], [ %.not597633640701, %180 ]
  %.0565642696 = phi i32 [ %.0565642698, %171 ], [ %.0565642698, %177 ], [ %.0565642698, %175 ], [ %.0565642698, %181 ], [ %.0565642698, %184 ], [ %.0565642698, %187 ], [ %.0565642697, %196 ], [ %.0565642697, %197 ], [ %.0565642697, %190 ], [ %.0565642698, %180 ]
  %or.cond5643693 = phi i1 [ %or.cond5643695, %171 ], [ %or.cond5643695, %177 ], [ %or.cond5643695, %175 ], [ %or.cond5643695, %181 ], [ %or.cond5643695, %184 ], [ %or.cond5643695, %187 ], [ %or.cond5643694, %196 ], [ %or.cond5643694, %197 ], [ %or.cond5643694, %190 ], [ %or.cond5643695, %180 ]
  %.0568 = phi i32 [ 29, %171 ], [ 29, %177 ], [ 29, %175 ], [ 29, %181 ], [ 29, %184 ], [ 29, %187 ], [ 29, %196 ], [ 29, %197 ], [ 30, %190 ], [ 29, %180 ]
  %.0566 = phi i32 [ 29, %171 ], [ 29, %177 ], [ 29, %175 ], [ 29, %181 ], [ 29, %184 ], [ 29, %187 ], [ 29, %196 ], [ 29, %197 ], [ 0, %190 ], [ 29, %180 ]
  %199 = icmp ugt i32 %145, 1
  br i1 %199, label %200, label %202

200:                                              ; preds = %198
  %201 = load i32, ptr %125, align 4, !tbaa !26
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef nonnull %0, ptr noundef %1, i32 noundef %201, i32 noundef %145) #6
  br label %202

202:                                              ; preds = %200, %198
  br i1 %18, label %203, label %221

203:                                              ; preds = %202
  switch i16 %16, label %.thread644 [
    i16 70, label %204
    i16 20, label %204
    i16 19, label %204
    i16 18, label %204
    i16 69, label %205
    i16 21, label %205
  ]

204:                                              ; preds = %203, %203, %203, %203
  %.off604656 = add nsw i16 %16, -19
  %switch605657 = icmp ult i16 %.off604656, 2
  br i1 %spec.select595, label %.thread655, label %.thread648

205:                                              ; preds = %203, %203
  %206 = add i32 %153, -1
  %207 = icmp eq i32 %206, 0
  %208 = select i1 %207, i32 %149, i32 0
  %.not582 = icmp eq i32 %208, 0
  %209 = and i1 %83, %.not582
  %210 = select i1 %209, i32 %spec.select596, i32 %208
  %.not584 = icmp ne i32 %208, 0
  %211 = zext i1 %.not584 to i8
  %212 = select i1 %.not582, i8 2, i8 1
  %213 = select i1 %83, i8 %212, i8 %211
  %214 = load i32, ptr %121, align 4, !tbaa !21
  %215 = load i32, ptr %126, align 4, !tbaa !27
  %216 = load i32, ptr %78, align 4, !tbaa !17
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef nonnull %0, i32 noundef %214, i32 noundef %215, i32 noundef 31, i32 noundef %216, i32 noundef %210, i32 noundef 0, i32 noundef 0, i8 noundef zeroext %213, i8 noundef zeroext %30) #6
  br i1 %83, label %217, label %218

217:                                              ; preds = %205
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef nonnull %0, i32 noundef 31, i32 noundef 0) #6
  br label %218

218:                                              ; preds = %217, %205
  %219 = icmp ne i32 %206, 0
  %or.cond33 = or i1 %spec.select595, %219
  %or.cond600 = select i1 %.not597633640699, i1 true, i1 %or.cond33
  br i1 %or.cond600, label %.thread644, label %220

220:                                              ; preds = %218
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef nonnull %0, i32 noundef 245373971, i32 noundef %.0566, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef 1) #6
  br label %.preheader668

221:                                              ; preds = %202
  %.off604 = add nsw i16 %16, -19
  %switch605 = icmp ult i16 %.off604, 2
  br i1 %switch605, label %222, label %.thread644

.thread655:                                       ; preds = %204
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef nonnull %0, i32 noundef 77606915, i32 noundef 31, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef 0, i32 noundef %77) #6
  br i1 %switch605657, label %.thread658, label %.preheader.thread

.thread648:                                       ; preds = %204
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef nonnull %0, i32 noundef 773856275, i32 noundef 31, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef 1) #6
  br i1 %switch605657, label %.thread652, label %.preheader668

222:                                              ; preds = %221
  br i1 %spec.select595, label %.thread658, label %.thread652

.thread658:                                       ; preds = %.thread655, %222
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef nonnull %0, i32 noundef 77606915, i32 noundef 30, i32 noundef 30, i8 noundef zeroext 0, i32 noundef 30, i32 noundef 0, i32 noundef %77) #6
  br label %.preheader

.thread652:                                       ; preds = %.thread648, %222
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef nonnull %0, i32 noundef 773856275, i32 noundef 30, i32 noundef 30, i8 noundef zeroext 0, i32 noundef 30, i32 noundef 1) #6
  br label %.preheader668

.thread644:                                       ; preds = %218, %203, %221
  br i1 %spec.select595, label %.preheader, label %.preheader668

.preheader668:                                    ; preds = %.thread652, %.thread648, %220, %.thread644
  %switch605647704 = phi i1 [ false, %.thread644 ], [ false, %220 ], [ false, %.thread648 ], [ true, %.thread652 ]
  %.not676 = icmp ugt i32 %spec.select596, %152
  br i1 %.not676, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader668
  %223 = add i32 %153, -1
  br label %277

.preheader:                                       ; preds = %.thread658, %.thread644
  %switch605647709 = phi i1 [ false, %.thread644 ], [ true, %.thread658 ]
  %.not677 = icmp ugt i32 %spec.select596, %152
  br i1 %.not677, label %.loopexit.thread, label %.lr.ph672

.preheader.thread:                                ; preds = %.thread655
  %.not677718 = icmp ugt i32 %spec.select596, %152
  br i1 %.not677718, label %.thread713, label %.lr.ph672.thread

.lr.ph672.thread:                                 ; preds = %.preheader.thread
  %224 = add i32 %153, -1
  %.0565.722 = select i1 %or.cond5643693, i32 %.0565642696, i32 1
  br label %.lr.ph672.split.us.preheader

.lr.ph672:                                        ; preds = %.preheader
  %225 = add i32 %153, -1
  %.0565. = select i1 %or.cond5643693, i32 %.0565642696, i32 1
  br i1 %18, label %.lr.ph672.split.us.preheader, label %.lr.ph672.split

.lr.ph672.split.us.preheader:                     ; preds = %.lr.ph672.thread, %.lr.ph672
  %.0565.724 = phi i32 [ %.0565.722, %.lr.ph672.thread ], [ %.0565., %.lr.ph672 ]
  %226 = phi i32 [ %224, %.lr.ph672.thread ], [ %225, %.lr.ph672 ]
  %switch605647709719723 = phi i1 [ false, %.lr.ph672.thread ], [ %switch605647709, %.lr.ph672 ]
  br label %.lr.ph672.split.us

.lr.ph672.split.us:                               ; preds = %.lr.ph672.split.us.preheader, %244
  %.0671.us = phi i32 [ %245, %244 ], [ 0, %.lr.ph672.split.us.preheader ]
  %227 = urem i32 %.0671.us, %.0568
  %228 = icmp eq i32 %.0671.us, %226
  %or.cond15.us = select i1 %228, i1 %150, i1 false
  %229 = select i1 %228, i32 %149, i32 0
  %.not591.us = icmp eq i32 %229, 0
  %230 = and i1 %83, %.not591.us
  %231 = select i1 %230, i32 %spec.select596, i32 %229
  %.not593.us = icmp ne i32 %229, 0
  %232 = zext i1 %.not593.us to i8
  %233 = select i1 %.not591.us, i8 2, i8 1
  %234 = select i1 %83, i8 %233, i8 %232
  %235 = load i32, ptr %121, align 4, !tbaa !21
  %236 = load i32, ptr %126, align 4, !tbaa !27
  %237 = load i32, ptr %78, align 4, !tbaa !17
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %235, i32 noundef %236, i32 noundef %227, i32 noundef %237, i32 noundef %231, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %234, i8 noundef zeroext 1) #6
  br i1 %83, label %238, label %239

238:                                              ; preds = %.lr.ph672.split.us
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %227, i32 noundef 0) #6
  br label %239

239:                                              ; preds = %238, %.lr.ph672.split.us
  switch i16 %16, label %241 [
    i16 69, label %240
    i16 21, label %240
  ]

240:                                              ; preds = %239, %239
  %spec.select.us = select i1 %or.cond15.us, i32 %.0565.724, i32 0
  br label %.thread662.us

241:                                              ; preds = %239
  br i1 %21, label %242, label %.thread662.us

242:                                              ; preds = %241
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.0564621, i32 noundef %227, i32 noundef %.0566, i8 noundef zeroext 0, i32 noundef %227, i32 noundef 0, i32 noundef %77) #6
  br label %.thread662.us

.thread662.us:                                    ; preds = %242, %241, %240
  %.0557664.us = phi i32 [ 0, %242 ], [ 0, %241 ], [ %spec.select.us, %240 ]
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.0560625, i32 noundef %227, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef %.0557664.us, i32 noundef %77) #6
  br i1 %switch605647709719723, label %243, label %244

243:                                              ; preds = %.thread662.us
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1696596099, i32 noundef %227, i32 noundef %227, i8 noundef zeroext 0, i32 noundef 30, i32 noundef 0, i32 noundef %77) #6
  br label %244

244:                                              ; preds = %243, %.thread662.us
  %245 = add nuw i32 %.0671.us, 1
  %246 = icmp ult i32 %245, %153
  br i1 %246, label %.lr.ph672.split.us, label %.loopexit, !llvm.loop !31

.lr.ph672.split:                                  ; preds = %.lr.ph672
  br i1 %switch605647709, label %.lr.ph672.split.split.us, label %.lr.ph672.split.split

.lr.ph672.split.split.us:                         ; preds = %.lr.ph672.split, %259
  %.0671.us673 = phi i32 [ %260, %259 ], [ 0, %.lr.ph672.split ]
  %247 = urem i32 %.0671.us673, %.0568
  %248 = icmp eq i32 %.0671.us673, %225
  %249 = select i1 %248, i32 %149, i32 0
  %.not591.us674 = icmp eq i32 %249, 0
  %250 = and i1 %83, %.not591.us674
  %251 = select i1 %250, i32 %spec.select596, i32 %249
  %.not593.us675 = icmp ne i32 %249, 0
  %252 = zext i1 %.not593.us675 to i8
  %253 = select i1 %.not591.us674, i8 2, i8 1
  %254 = select i1 %83, i8 %253, i8 %252
  %255 = load i32, ptr %121, align 4, !tbaa !21
  %256 = load i32, ptr %126, align 4, !tbaa !27
  %257 = load i32, ptr %78, align 4, !tbaa !17
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %255, i32 noundef %256, i32 noundef %247, i32 noundef %257, i32 noundef %251, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %254, i8 noundef zeroext 1) #6
  br i1 %83, label %258, label %259

258:                                              ; preds = %.lr.ph672.split.split.us
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %247, i32 noundef 0) #6
  br label %259

259:                                              ; preds = %258, %.lr.ph672.split.split.us
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1696596099, i32 noundef %247, i32 noundef %247, i8 noundef zeroext 0, i32 noundef 30, i32 noundef 0, i32 noundef %77) #6
  %260 = add nuw i32 %.0671.us673, 1
  %261 = icmp ult i32 %260, %153
  br i1 %261, label %.lr.ph672.split.split.us, label %.loopexit, !llvm.loop !31

.lr.ph672.split.split:                            ; preds = %.lr.ph672.split, %274
  %.0671 = phi i32 [ %275, %274 ], [ 0, %.lr.ph672.split ]
  %262 = urem i32 %.0671, %.0568
  %263 = icmp eq i32 %.0671, %225
  %264 = select i1 %263, i32 %149, i32 0
  %.not591 = icmp eq i32 %264, 0
  %265 = and i1 %83, %.not591
  %266 = select i1 %265, i32 %spec.select596, i32 %264
  %.not593 = icmp ne i32 %264, 0
  %267 = zext i1 %.not593 to i8
  %268 = select i1 %.not591, i8 2, i8 1
  %269 = select i1 %83, i8 %268, i8 %267
  %270 = load i32, ptr %121, align 4, !tbaa !21
  %271 = load i32, ptr %126, align 4, !tbaa !27
  %272 = load i32, ptr %78, align 4, !tbaa !17
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %270, i32 noundef %271, i32 noundef %262, i32 noundef %272, i32 noundef %266, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %269, i8 noundef zeroext 1) #6
  br i1 %83, label %273, label %274

273:                                              ; preds = %.lr.ph672.split.split
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %262, i32 noundef 0) #6
  br label %274

274:                                              ; preds = %273, %.lr.ph672.split.split
  %275 = add nuw i32 %.0671, 1
  %276 = icmp ult i32 %275, %153
  br i1 %276, label %.lr.ph672.split.split, label %.loopexit, !llvm.loop !31

277:                                              ; preds = %.lr.ph, %299
  %.1670 = phi i32 [ 0, %.lr.ph ], [ %300, %299 ]
  %278 = urem i32 %.1670, %.0568
  %279 = icmp eq i32 %.1670, %223
  %280 = select i1 %279, i32 %149, i32 0
  %.not585 = icmp eq i32 %280, 0
  %281 = and i1 %83, %.not585
  %282 = select i1 %281, i32 %spec.select596, i32 %280
  %.not587 = icmp ne i32 %280, 0
  %283 = zext i1 %.not587 to i8
  %284 = select i1 %.not585, i8 2, i8 1
  %285 = select i1 %83, i8 %284, i8 %283
  %286 = load i32, ptr %121, align 4, !tbaa !21
  %287 = load i32, ptr %126, align 4, !tbaa !27
  %288 = load i32, ptr %78, align 4, !tbaa !17
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %286, i32 noundef %287, i32 noundef %278, i32 noundef %288, i32 noundef %282, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %285, i8 noundef zeroext 0) #6
  br i1 %83, label %289, label %290

289:                                              ; preds = %277
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %278, i32 noundef 0) #6
  br label %290

290:                                              ; preds = %289, %277
  %brmerge603.not = and i1 %150, %279
  br i1 %brmerge603.not, label %291, label %293

291:                                              ; preds = %290
  switch i16 %16, label %293 [
    i16 69, label %292
    i16 21, label %292
  ]

292:                                              ; preds = %291, %291
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245373971, i32 noundef %.0566, i32 noundef %278, i8 noundef zeroext 0, i32 noundef %278, i32 noundef 1) #6
  br label %293

293:                                              ; preds = %291, %290, %292
  br i1 %18, label %294, label %297

294:                                              ; preds = %293
  br i1 %21, label %295, label %296

295:                                              ; preds = %294
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0564621, i32 noundef %278, i32 noundef %.0566, i8 noundef zeroext 0, i32 noundef %278, i32 noundef %81) #6
  br label %296

296:                                              ; preds = %295, %294
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0560625, i32 noundef %278, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef %81) #6
  br label %297

297:                                              ; preds = %296, %293
  br i1 %switch605647704, label %298, label %299

298:                                              ; preds = %297
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 237030411, i32 noundef %278, i32 noundef %278, i8 noundef zeroext 0, i32 noundef 30, i32 noundef %81) #6
  br label %299

299:                                              ; preds = %297, %298
  %300 = add nuw i32 %.1670, 1
  %301 = icmp ult i32 %300, %153
  br i1 %301, label %277, label %.loopexit, !llvm.loop !33

.loopexit:                                        ; preds = %299, %274, %259, %244, %.preheader668
  %switch605647703 = phi i1 [ %switch605647704, %.preheader668 ], [ %switch605647709719723, %244 ], [ %switch605647709, %259 ], [ %switch605647709, %274 ], [ %switch605647704, %299 ]
  br i1 %18, label %302, label %331

.loopexit.thread:                                 ; preds = %.preheader
  br i1 %18, label %.thread713, label %331

302:                                              ; preds = %.loopexit
  br i1 %spec.select595, label %.thread713, label %305

.thread713:                                       ; preds = %.preheader.thread, %.loopexit.thread, %302
  %switch605647703712716 = phi i1 [ %switch605647703, %302 ], [ %switch605647709, %.loopexit.thread ], [ false, %.preheader.thread ]
  %303 = icmp eq i32 %153, 1
  %or.cond29 = select i1 %303, i1 %150, i1 false
  %304 = select i1 %or.cond29, i32 %.0565642696, i32 0
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.0563622, i32 noundef 31, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef %304, i32 noundef %77) #6
  br label %306

305:                                              ; preds = %302
  call void @libxsmm_generator_hinstrps_aarch64(ptr noundef %0, i32 noundef %.0563622, i32 noundef 31, i32 noundef %81) #6
  br label %306

306:                                              ; preds = %305, %.thread713
  %switch605647703712715 = phi i1 [ %switch605647703, %305 ], [ %switch605647703712716, %.thread713 ]
  br i1 %.not, label %319, label %307

307:                                              ; preds = %306
  %308 = load i32, ptr %122, align 4, !tbaa !23
  br i1 %85, label %313, label %309

309:                                              ; preds = %307
  %310 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %311 = icmp eq i32 %310, 0
  %312 = select i1 %311, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %308, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %312) #6
  br label %314

313:                                              ; preds = %307
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %308, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef 2) #6
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef 0, i32 noundef 0) #6
  br label %314

314:                                              ; preds = %313, %309
  br i1 %21, label %315, label %316

315:                                              ; preds = %314
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.0561624, i32 noundef 0, i32 noundef %.0566, i8 noundef zeroext 0, i32 noundef 0, i32 noundef %81) #6
  br label %316

316:                                              ; preds = %315, %314
  br i1 %32, label %317, label %318

317:                                              ; preds = %316
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef 0, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef 0, i32 noundef %77) #6
  br label %319

318:                                              ; preds = %316
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.626, i32 noundef 0, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef %81) #6
  br label %319

319:                                              ; preds = %317, %318, %306
  br i1 %85, label %327, label %320

320:                                              ; preds = %319
  %321 = load i32, ptr %122, align 4, !tbaa !23
  %322 = getelementptr inbounds i8, ptr %3, i64 20
  %323 = load i32, ptr %322, align 4, !tbaa !30
  %324 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %325 = icmp eq i32 %324, 0
  %326 = select i1 %325, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1006633990, i32 noundef %321, i32 noundef 127, i32 noundef %323, i32 noundef 31, i32 noundef %326) #6
  br i1 %switch605647703712715, label %332, label %360

327:                                              ; preds = %319
  call void @libxsmm_generator_vcvt_f32bf16_aarch64(ptr noundef %0, i32 noundef 31, i32 noundef 0) #6
  %328 = load i32, ptr %122, align 4, !tbaa !23
  %329 = getelementptr inbounds i8, ptr %3, i64 20
  %330 = load i32, ptr %329, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1006633990, i32 noundef %328, i32 noundef 127, i32 noundef %330, i32 noundef 31, i32 noundef 2) #6
  br i1 %switch605647703712715, label %332, label %360

331:                                              ; preds = %.loopexit.thread, %.loopexit
  %switch605647703711 = phi i1 [ %switch605647709, %.loopexit.thread ], [ %switch605647703, %.loopexit ]
  br i1 %switch605647703711, label %332, label %360

332:                                              ; preds = %327, %320, %331
  br i1 %spec.select595, label %333, label %336

333:                                              ; preds = %332
  %334 = icmp eq i32 %153, 1
  %or.cond31 = select i1 %334, i1 %150, i1 false
  %335 = select i1 %or.cond31, i32 %.0565642696, i32 0
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef %.0563622, i32 noundef 30, i32 noundef 30, i8 noundef zeroext 0, i32 noundef 30, i32 noundef %335, i32 noundef %77) #6
  br label %337

336:                                              ; preds = %332
  call void @libxsmm_generator_hinstrps_aarch64(ptr noundef %0, i32 noundef %.0563622, i32 noundef 30, i32 noundef %81) #6
  br label %337

337:                                              ; preds = %336, %333
  br i1 %.not, label %348, label %338

338:                                              ; preds = %337
  %339 = load i32, ptr %123, align 4, !tbaa !24
  br i1 %85, label %344, label %340

340:                                              ; preds = %338
  %341 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %342 = icmp eq i32 %341, 0
  %343 = select i1 %342, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %339, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %343) #6
  br label %345

344:                                              ; preds = %338
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1027604486, i32 noundef %339, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef 2) #6
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef 0, i32 noundef 0) #6
  br label %345

345:                                              ; preds = %344, %340
  br i1 %32, label %346, label %347

346:                                              ; preds = %345
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef 0, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef 0, i32 noundef %77) #6
  br label %348

347:                                              ; preds = %345
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef %.626, i32 noundef 0, i32 noundef 31, i8 noundef zeroext 0, i32 noundef 31, i32 noundef %81) #6
  br label %348

348:                                              ; preds = %346, %347, %337
  br i1 %85, label %356, label %349

349:                                              ; preds = %348
  %350 = load i32, ptr %123, align 4, !tbaa !24
  %351 = getelementptr inbounds i8, ptr %3, i64 20
  %352 = load i32, ptr %351, align 4, !tbaa !30
  %353 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #6
  %354 = icmp eq i32 %353, 0
  %355 = select i1 %354, i32 6, i32 4
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1006633990, i32 noundef %350, i32 noundef 127, i32 noundef %352, i32 noundef 30, i32 noundef %355) #6
  br label %360

356:                                              ; preds = %348
  call void @libxsmm_generator_vcvt_f32bf16_aarch64(ptr noundef %0, i32 noundef 30, i32 noundef 0) #6
  %357 = load i32, ptr %123, align 4, !tbaa !24
  %358 = getelementptr inbounds i8, ptr %3, i64 20
  %359 = load i32, ptr %358, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1006633990, i32 noundef %357, i32 noundef 127, i32 noundef %359, i32 noundef 30, i32 noundef 2) #6
  br label %360

360:                                              ; preds = %327, %320, %331, %349, %356
  br i1 %199, label %361, label %374

361:                                              ; preds = %360
  %362 = load i32, ptr %90, align 1, !tbaa !19
  %363 = load i32, ptr %78, align 4, !tbaa !17
  %364 = mul i32 %153, %spec.select596
  %.neg.neg = sub i32 %spec.select596, %149
  %.neg588.neg678 = select i1 %150, i32 %.neg.neg, i32 0
  %.neg589590.neg = sub i32 %.neg588.neg678, %364
  %365 = add i32 %.neg589590.neg, %362
  %366 = mul i32 %365, %363
  %367 = icmp sgt i32 %366, 0
  br i1 %367, label %368, label %372

368:                                              ; preds = %361
  %369 = load i32, ptr %121, align 4, !tbaa !21
  %370 = load i32, ptr %126, align 4, !tbaa !27
  %371 = zext nneg i32 %366 to i64
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %369, i32 noundef %370, i32 noundef %369, i64 noundef %371) #6
  br label %372

372:                                              ; preds = %368, %361
  %373 = load i32, ptr %125, align 4, !tbaa !26
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %0, ptr noundef %1, i32 noundef %373, i32 noundef 1) #6
  br label %374

374:                                              ; preds = %372, %360
  br i1 %32, label %375, label %376

375:                                              ; preds = %374
  call void @libxsmm_aarch64_instruction_sm(ptr noundef %0, i32 noundef -721205633) #6
  br label %376

376:                                              ; preds = %374, %375, %114, %93
  ret void
}

; 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 void @libxsmm_aarch64_instruction_load16bytes_const_to_vec(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"libxsmm_mateltwise_kernel_config_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, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !7, i64 288, !7, i64 292, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352, !7, i64 356, !7, i64 360, !7, i64 364, !7, i64 368, !7, i64 372, !7, i64 376, !7, i64 380, !7, i64 384, !7, i64 388, !7, i64 392, !7, i64 396, !7, i64 400, !7, i64 404, !7, i64 408, !7, i64 412, !7, i64 416, !7, i64 420, !7, i64 424, !7, i64 428, !7, i64 432, !7, i64 436, !7, i64 440, !7, i64 444, !7, i64 448, !7, i64 452, !7, i64 456, !7, i64 460, !7, i64 464, !7, i64 468, !7, i64 472, !7, i64 476, !7, i64 480, !7, i64 484, !7, i64 488, !7, i64 492, !7, i64 496, !7, i64 500, !7, i64 504, !7, i64 508, !8, i64 512}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !12, i64 29}
!11 = !{!"libxsmm_meltw_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !12, i64 27, !12, i64 29, !8, i64 31}
!12 = !{!"short", !8, i64 0}
!13 = !{!11, !12, i64 27}
!14 = !{!15, !7, i64 28}
!15 = !{!"libxsmm_generated_code", !16, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!16 = !{!"any pointer", !8, i64 0}
!17 = !{!6, !7, i64 8}
!18 = !{!11, !7, i64 0}
!19 = !{!11, !7, i64 8}
!20 = !{!7, !7, i64 0}
!21 = !{!22, !7, i64 4}
!22 = !{!"libxsmm_mateltwise_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, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144}
!23 = !{!22, !7, i64 64}
!24 = !{!22, !7, i64 68}
!25 = !{!22, !7, i64 96}
!26 = !{!22, !7, i64 100}
!27 = !{!22, !7, i64 140}
!28 = !{!22, !7, i64 0}
!29 = !{!11, !7, i64 4}
!30 = !{!6, !7, i64 20}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}


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