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

; 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_descriptor_blob = type { [96 x i8] }
%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_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 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>

@.str = external hidden unnamed_addr constant [100 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_transform_aarch64_asimd_microkernel = external hidden unnamed_addr constant [54 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_transform_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #2 {
  %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 %struct.libxsmm_descriptor_blob, align 1
  %15 = alloca ptr, align 8
  %16 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %17 = alloca %struct.libxsmm_descriptor_blob, align 1
  %18 = alloca ptr, align 8
  %19 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %20 = alloca %struct.libxsmm_descriptor_blob, align 1
  %21 = alloca ptr, align 8
  %22 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %23 = alloca %struct.libxsmm_descriptor_blob, align 1
  %24 = alloca ptr, align 8
  %25 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, 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) #3
  store i32 32, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 80, ptr %12, align 4, !tbaa !9
  %26 = load ptr, ptr %8, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %26, i32 0, i32 1
  store i32 40, ptr %27, align 4, !tbaa !11
  %28 = load ptr, ptr %8, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %28, i32 0, i32 6
  store i32 41, ptr %29, align 4, !tbaa !13
  %30 = load ptr, ptr %8, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %30, i32 0, i32 24
  store i32 42, ptr %31, align 4, !tbaa !14
  %32 = load ptr, ptr %8, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %32, i32 0, i32 25
  store i32 43, ptr %33, align 4, !tbaa !15
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %34, i32 0, i32 35
  store i32 38, ptr %35, align 4, !tbaa !16
  %36 = load ptr, ptr %8, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %36, i32 0, i32 36
  store i32 39, ptr %37, align 4, !tbaa !17
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %39, i32 0, i32 0
  %41 = load i32, ptr %40, align 4, !tbaa !18
  %42 = load i32, ptr %11, align 4, !tbaa !9
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %43, i32 0, i32 1
  %45 = load i32, ptr %44, align 4, !tbaa !11
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %38, i32 noundef -1186988026, i32 noundef %41, i32 noundef 127, i32 noundef %42, i32 noundef %45)
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %47, i32 0, i32 0
  %49 = load i32, ptr %48, align 4, !tbaa !18
  %50 = load i32, ptr %12, align 4, !tbaa !9
  %51 = load ptr, ptr %8, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %51, i32 0, i32 6
  %53 = load i32, ptr %52, align 4, !tbaa !13
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %46, i32 noundef -1186988026, i32 noundef %49, i32 noundef 127, i32 noundef %50, i32 noundef %53)
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %54, i32 0, i32 10
  %56 = load i16, ptr %55, align 1, !tbaa !19
  %57 = zext i16 %56 to i32
  %58 = icmp eq i32 %57, 29
  br i1 %58, label %65, label %59

59:                                               ; preds = %5
  %60 = load ptr, ptr %10, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %60, i32 0, i32 10
  %62 = load i16, ptr %61, align 1, !tbaa !19
  %63 = zext i16 %62 to i32
  %64 = icmp eq i32 %63, 30
  br i1 %64, label %65, label %100

65:                                               ; preds = %59, %5
  %66 = load ptr, ptr %10, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %66, i32 0, i32 0
  %68 = load i32, ptr %67, align 1, !tbaa !22
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %69, i32 0, i32 2
  %71 = load i32, ptr %70, align 1, !tbaa !23
  %72 = icmp ugt i32 %68, %71
  br i1 %72, label %73, label %82

73:                                               ; preds = %65
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %76 = icmp ult i32 1, %75
  br i1 %76, label %77, label %79

77:                                               ; preds = %73
  %78 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %80

79:                                               ; preds = %73
  br label %80

80:                                               ; preds = %79, %77
  %81 = phi i32 [ %78, %77 ], [ 1, %79 ]
  call void @libxsmm_handle_error(ptr noundef %74, i32 noundef 90007, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1228, i32 noundef %81)
  store i32 1, ptr %13, align 4
  br label %859

82:                                               ; preds = %65
  %83 = load ptr, ptr %10, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %83, i32 0, i32 1
  %85 = load i32, ptr %84, align 1, !tbaa !24
  %86 = load ptr, ptr %10, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %86, i32 0, i32 3
  %88 = load i32, ptr %87, align 1, !tbaa !25
  %89 = icmp ugt i32 %85, %88
  br i1 %89, label %90, label %99

90:                                               ; preds = %82
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %93 = icmp ult i32 1, %92
  br i1 %93, label %94, label %96

94:                                               ; preds = %90
  %95 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %97

96:                                               ; preds = %90
  br label %97

97:                                               ; preds = %96, %94
  %98 = phi i32 [ %95, %94 ], [ 1, %96 ]
  call void @libxsmm_handle_error(ptr noundef %91, i32 noundef 90008, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1232, i32 noundef %98)
  store i32 1, ptr %13, align 4
  br label %859

99:                                               ; preds = %82
  br label %203

100:                                              ; preds = %59
  %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 !19
  %104 = zext i16 %103 to i32
  %105 = icmp eq i32 %104, 28
  br i1 %105, label %130, label %106

106:                                              ; preds = %100
  %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 !19
  %110 = zext i16 %109 to i32
  %111 = icmp eq i32 %110, 32
  br i1 %111, label %130, label %112

112:                                              ; preds = %106
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %113, i32 0, i32 10
  %115 = load i16, ptr %114, align 1, !tbaa !19
  %116 = zext i16 %115 to i32
  %117 = icmp eq i32 %116, 40
  br i1 %117, label %130, label %118

118:                                              ; preds = %112
  %119 = load ptr, ptr %10, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %119, i32 0, i32 10
  %121 = load i16, ptr %120, align 1, !tbaa !19
  %122 = zext i16 %121 to i32
  %123 = icmp eq i32 %122, 39
  br i1 %123, label %130, label %124

124:                                              ; preds = %118
  %125 = load ptr, ptr %10, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %125, i32 0, i32 10
  %127 = load i16, ptr %126, align 1, !tbaa !19
  %128 = zext i16 %127 to i32
  %129 = icmp eq i32 %128, 41
  br i1 %129, label %130, label %201

130:                                              ; preds = %124, %118, %112, %106, %100
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %131, i32 0, i32 0
  %133 = load i32, ptr %132, align 1, !tbaa !22
  %134 = load ptr, ptr %10, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %134, i32 0, i32 2
  %136 = load i32, ptr %135, align 1, !tbaa !23
  %137 = icmp ugt i32 %133, %136
  br i1 %137, label %138, label %147

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

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

144:                                              ; preds = %138
  br label %145

145:                                              ; preds = %144, %142
  %146 = phi i32 [ %143, %142 ], [ 1, %144 ]
  call void @libxsmm_handle_error(ptr noundef %139, i32 noundef 90007, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1241, i32 noundef %146)
  store i32 1, ptr %13, align 4
  br label %859

147:                                              ; preds = %130
  %148 = load ptr, ptr %10, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %148, i32 0, i32 10
  %150 = load i16, ptr %149, align 1, !tbaa !19
  %151 = zext i16 %150 to i32
  %152 = icmp eq i32 %151, 39
  br i1 %152, label %159, label %153

153:                                              ; preds = %147
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %154, i32 0, i32 10
  %156 = load i16, ptr %155, align 1, !tbaa !19
  %157 = zext i16 %156 to i32
  %158 = icmp eq i32 %157, 41
  br i1 %158, label %159, label %182

159:                                              ; preds = %153, %147
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %160, i32 0, i32 0
  %162 = load i32, ptr %161, align 1, !tbaa !22
  %163 = load ptr, ptr %10, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %163, i32 0, i32 0
  %165 = load i32, ptr %164, align 1, !tbaa !22
  %166 = urem i32 %165, 2
  %167 = add i32 %162, %166
  %168 = load ptr, ptr %10, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %168, i32 0, i32 3
  %170 = load i32, ptr %169, align 1, !tbaa !25
  %171 = icmp ugt i32 %167, %170
  br i1 %171, label %172, label %181

172:                                              ; preds = %159
  %173 = load ptr, ptr %6, align 8, !tbaa !5
  %174 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %175 = icmp ult i32 1, %174
  br i1 %175, label %176, label %178

176:                                              ; preds = %172
  %177 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %179

178:                                              ; preds = %172
  br label %179

179:                                              ; preds = %178, %176
  %180 = phi i32 [ %177, %176 ], [ 1, %178 ]
  call void @libxsmm_handle_error(ptr noundef %173, i32 noundef 90008, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1247, i32 noundef %180)
  store i32 1, ptr %13, align 4
  br label %859

181:                                              ; preds = %159
  br label %200

182:                                              ; preds = %153
  %183 = load ptr, ptr %10, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %183, i32 0, i32 0
  %185 = load i32, ptr %184, align 1, !tbaa !22
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %186, i32 0, i32 3
  %188 = load i32, ptr %187, align 1, !tbaa !25
  %189 = icmp ugt i32 %185, %188
  br i1 %189, label %190, label %199

190:                                              ; preds = %182
  %191 = load ptr, ptr %6, align 8, !tbaa !5
  %192 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %193 = icmp ult i32 1, %192
  br i1 %193, label %194, label %196

194:                                              ; preds = %190
  %195 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %197

196:                                              ; preds = %190
  br label %197

197:                                              ; preds = %196, %194
  %198 = phi i32 [ %195, %194 ], [ 1, %196 ]
  call void @libxsmm_handle_error(ptr noundef %191, i32 noundef 90008, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1252, i32 noundef %198)
  store i32 1, ptr %13, align 4
  br label %859

199:                                              ; preds = %182
  br label %200

200:                                              ; preds = %199, %181
  br label %202

201:                                              ; preds = %124
  br label %202

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

203:                                              ; preds = %202, %99
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %204, i32 noundef 0)
  %206 = icmp eq i32 6, %205
  br i1 %206, label %207, label %211

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

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

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

219:                                              ; preds = %215, %207
  %220 = load ptr, ptr %10, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %220, i32 0, i32 10
  %222 = load i16, ptr %221, align 1, !tbaa !19
  %223 = zext i16 %222 to i32
  %224 = icmp eq i32 %223, 29
  br i1 %224, label %225, label %245

225:                                              ; preds = %219
  %226 = load ptr, ptr %6, align 8, !tbaa !5
  %227 = load ptr, ptr %7, align 8, !tbaa !5
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %228, i32 0, i32 1
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = load ptr, ptr %8, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %231, i32 0, i32 6
  %233 = load i32, ptr %232, align 4, !tbaa !13
  %234 = load ptr, ptr %8, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %234, i32 0, i32 24
  %236 = load i32, ptr %235, align 4, !tbaa !14
  %237 = load ptr, ptr %8, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %237, i32 0, i32 25
  %239 = load i32, ptr %238, align 4, !tbaa !15
  %240 = load ptr, ptr %8, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %240, i32 0, i32 35
  %242 = load i32, ptr %241, align 4, !tbaa !16
  %243 = load ptr, ptr %9, align 8, !tbaa !5
  %244 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %226, ptr noundef %227, i32 noundef %230, i32 noundef %233, i32 noundef %236, i32 noundef %239, i32 noundef %242, ptr noundef %243, ptr noundef %244)
  br label %254

245:                                              ; preds = %219
  %246 = load ptr, ptr %6, align 8, !tbaa !5
  %247 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %248 = icmp ult i32 1, %247
  br i1 %248, label %249, label %251

249:                                              ; preds = %245
  %250 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %252

251:                                              ; preds = %245
  br label %252

252:                                              ; preds = %251, %249
  %253 = phi i32 [ %250, %249 ], [ 1, %251 ]
  call void @libxsmm_handle_error(ptr noundef %246, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1270, i32 noundef %253)
  store i32 1, ptr %13, align 4
  br label %859

254:                                              ; preds = %225
  br label %858

255:                                              ; preds = %215, %211
  %256 = load ptr, ptr %10, align 8, !tbaa !5
  %257 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %256, i32 noundef 0)
  %258 = icmp eq i32 8, %257
  br i1 %258, label %259, label %263

259:                                              ; preds = %255
  %260 = load ptr, ptr %10, align 8, !tbaa !5
  %261 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %260, i32 noundef 3)
  %262 = icmp eq i32 8, %261
  br i1 %262, label %271, label %263

263:                                              ; preds = %259, %255
  %264 = load ptr, ptr %10, align 8, !tbaa !5
  %265 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %264, i32 noundef 0)
  %266 = icmp eq i32 1, %265
  br i1 %266, label %267, label %307

267:                                              ; preds = %263
  %268 = load ptr, ptr %10, align 8, !tbaa !5
  %269 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %268, i32 noundef 3)
  %270 = icmp eq i32 1, %269
  br i1 %270, label %271, label %307

271:                                              ; preds = %267, %259
  %272 = load ptr, ptr %10, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %272, i32 0, i32 10
  %274 = load i16, ptr %273, align 1, !tbaa !19
  %275 = zext i16 %274 to i32
  %276 = icmp eq i32 %275, 29
  br i1 %276, label %277, label %297

277:                                              ; preds = %271
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %280, i32 0, i32 1
  %282 = load i32, ptr %281, align 4, !tbaa !11
  %283 = load ptr, ptr %8, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %283, i32 0, i32 6
  %285 = load i32, ptr %284, align 4, !tbaa !13
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %286, i32 0, i32 24
  %288 = load i32, ptr %287, align 4, !tbaa !14
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %289, i32 0, i32 25
  %291 = load i32, ptr %290, align 4, !tbaa !15
  %292 = load ptr, ptr %8, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %292, i32 0, i32 35
  %294 = load i32, ptr %293, align 4, !tbaa !16
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %278, ptr noundef %279, i32 noundef %282, i32 noundef %285, i32 noundef %288, i32 noundef %291, i32 noundef %294, ptr noundef %295, ptr noundef %296)
  br label %306

297:                                              ; preds = %271
  %298 = load ptr, ptr %6, align 8, !tbaa !5
  %299 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %300 = icmp ult i32 1, %299
  br i1 %300, label %301, label %303

301:                                              ; preds = %297
  %302 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %304

303:                                              ; preds = %297
  br label %304

304:                                              ; preds = %303, %301
  %305 = phi i32 [ %302, %301 ], [ 1, %303 ]
  call void @libxsmm_handle_error(ptr noundef %298, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1283, i32 noundef %305)
  store i32 1, ptr %13, align 4
  br label %859

306:                                              ; preds = %277
  br label %857

307:                                              ; preds = %267, %263
  %308 = load ptr, ptr %10, align 8, !tbaa !5
  %309 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %308, i32 noundef 0)
  %310 = icmp eq i32 10, %309
  br i1 %310, label %311, label %315

311:                                              ; preds = %307
  %312 = load ptr, ptr %10, align 8, !tbaa !5
  %313 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %312, i32 noundef 3)
  %314 = icmp eq i32 10, %313
  br i1 %314, label %331, label %315

315:                                              ; preds = %311, %307
  %316 = load ptr, ptr %10, align 8, !tbaa !5
  %317 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %316, i32 noundef 0)
  %318 = icmp eq i32 3, %317
  br i1 %318, label %319, label %323

319:                                              ; preds = %315
  %320 = load ptr, ptr %10, align 8, !tbaa !5
  %321 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %320, i32 noundef 3)
  %322 = icmp eq i32 3, %321
  br i1 %322, label %331, label %323

323:                                              ; preds = %319, %315
  %324 = load ptr, ptr %10, align 8, !tbaa !5
  %325 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %324, i32 noundef 0)
  %326 = icmp eq i32 2, %325
  br i1 %326, label %327, label %740

327:                                              ; preds = %323
  %328 = load ptr, ptr %10, align 8, !tbaa !5
  %329 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %328, i32 noundef 3)
  %330 = icmp eq i32 2, %329
  br i1 %330, label %331, label %740

331:                                              ; preds = %327, %319, %311
  %332 = load ptr, ptr %10, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %332, i32 0, i32 10
  %334 = load i16, ptr %333, align 1, !tbaa !19
  %335 = zext i16 %334 to i32
  %336 = icmp eq i32 %335, 29
  br i1 %336, label %337, label %357

337:                                              ; preds = %331
  %338 = load ptr, ptr %6, align 8, !tbaa !5
  %339 = load ptr, ptr %7, align 8, !tbaa !5
  %340 = load ptr, ptr %8, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %340, i32 0, i32 1
  %342 = load i32, ptr %341, align 4, !tbaa !11
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %343, i32 0, i32 6
  %345 = load i32, ptr %344, align 4, !tbaa !13
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %346, i32 0, i32 24
  %348 = load i32, ptr %347, align 4, !tbaa !14
  %349 = load ptr, ptr %8, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %349, i32 0, i32 25
  %351 = load i32, ptr %350, align 4, !tbaa !15
  %352 = load ptr, ptr %8, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %352, i32 0, i32 35
  %354 = load i32, ptr %353, align 4, !tbaa !16
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_16bit_aarch64_asimd_microkernel(ptr noundef %338, ptr noundef %339, i32 noundef %342, i32 noundef %345, i32 noundef %348, i32 noundef %351, i32 noundef %354, ptr noundef %355, ptr noundef %356)
  br label %739

357:                                              ; preds = %331
  %358 = load ptr, ptr %10, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %358, i32 0, i32 10
  %360 = load i16, ptr %359, align 1, !tbaa !19
  %361 = zext i16 %360 to i32
  %362 = icmp eq i32 %361, 56
  br i1 %362, label %363, label %399

363:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 96, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  %364 = load ptr, ptr %10, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %364, i32 0, i32 0
  %366 = load i32, ptr %365, align 1, !tbaa !22
  %367 = udiv i32 %366, 4
  %368 = load ptr, ptr %10, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %368, i32 0, i32 1
  %370 = load i32, ptr %369, align 1, !tbaa !24
  %371 = load ptr, ptr %10, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %371, i32 0, i32 2
  %373 = load i32, ptr %372, align 1, !tbaa !23
  %374 = udiv i32 %373, 4
  %375 = load ptr, ptr %10, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %375, i32 0, i32 3
  %377 = load i32, ptr %376, align 1, !tbaa !25
  %378 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %14, i32 noundef 0, i32 noundef 15, i32 noundef 15, i32 noundef 0, i32 noundef 0, i32 noundef %367, i32 noundef %370, i32 noundef %374, i32 noundef %377, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1)
  store ptr %378, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 516, ptr %16) #3
  %379 = load ptr, ptr %6, align 8, !tbaa !5
  %380 = load ptr, ptr %15, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %379, ptr noundef %16, ptr noundef %380)
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = load ptr, ptr %7, align 8, !tbaa !5
  %383 = load ptr, ptr %8, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %383, i32 0, i32 1
  %385 = load i32, ptr %384, align 4, !tbaa !11
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %386, i32 0, i32 6
  %388 = load i32, ptr %387, align 4, !tbaa !13
  %389 = load ptr, ptr %8, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %389, i32 0, i32 24
  %391 = load i32, ptr %390, align 4, !tbaa !14
  %392 = load ptr, ptr %8, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %392, i32 0, i32 25
  %394 = load i32, ptr %393, align 4, !tbaa !15
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %395, i32 0, i32 35
  %397 = load i32, ptr %396, align 4, !tbaa !16
  %398 = load ptr, ptr %15, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %381, ptr noundef %382, i32 noundef %385, i32 noundef %388, i32 noundef %391, i32 noundef %394, i32 noundef %397, ptr noundef %16, ptr noundef %398)
  call void @llvm.lifetime.end.p0(i64 516, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %14) #3
  br label %738

399:                                              ; preds = %357
  %400 = load ptr, ptr %10, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %400, i32 0, i32 10
  %402 = load i16, ptr %401, align 1, !tbaa !19
  %403 = zext i16 %402 to i32
  %404 = icmp eq i32 %403, 31
  br i1 %404, label %405, label %441

405:                                              ; preds = %399
  call void @llvm.lifetime.start.p0(i64 96, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %406 = load ptr, ptr %10, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %406, i32 0, i32 0
  %408 = load i32, ptr %407, align 1, !tbaa !22
  %409 = udiv i32 %408, 2
  %410 = load ptr, ptr %10, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %410, i32 0, i32 1
  %412 = load i32, ptr %411, align 1, !tbaa !24
  %413 = load ptr, ptr %10, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %413, i32 0, i32 2
  %415 = load i32, ptr %414, align 1, !tbaa !23
  %416 = udiv i32 %415, 2
  %417 = load ptr, ptr %10, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %417, i32 0, i32 3
  %419 = load i32, ptr %418, align 1, !tbaa !25
  %420 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %17, i32 noundef 1, i32 noundef 15, i32 noundef 15, i32 noundef 1, i32 noundef 1, i32 noundef %409, i32 noundef %412, i32 noundef %416, i32 noundef %419, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1)
  store ptr %420, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 516, ptr %19) #3
  %421 = load ptr, ptr %6, align 8, !tbaa !5
  %422 = load ptr, ptr %18, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %421, ptr noundef %19, ptr noundef %422)
  %423 = load ptr, ptr %6, align 8, !tbaa !5
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  %425 = load ptr, ptr %8, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %425, i32 0, i32 1
  %427 = load i32, ptr %426, align 4, !tbaa !11
  %428 = load ptr, ptr %8, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %428, i32 0, i32 6
  %430 = load i32, ptr %429, align 4, !tbaa !13
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %431, i32 0, i32 24
  %433 = load i32, ptr %432, align 4, !tbaa !14
  %434 = load ptr, ptr %8, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %434, i32 0, i32 25
  %436 = load i32, ptr %435, align 4, !tbaa !15
  %437 = load ptr, ptr %8, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %437, i32 0, i32 35
  %439 = load i32, ptr %438, align 4, !tbaa !16
  %440 = load ptr, ptr %18, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %423, ptr noundef %424, i32 noundef %427, i32 noundef %430, i32 noundef %433, i32 noundef %436, i32 noundef %439, ptr noundef %19, ptr noundef %440)
  call void @llvm.lifetime.end.p0(i64 516, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %17) #3
  br label %737

441:                                              ; preds = %399
  %442 = load ptr, ptr %10, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %442, i32 0, i32 10
  %444 = load i16, ptr %443, align 1, !tbaa !19
  %445 = zext i16 %444 to i32
  %446 = icmp eq i32 %445, 66
  br i1 %446, label %447, label %483

447:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 96, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %448 = load ptr, ptr %10, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %448, i32 0, i32 0
  %450 = load i32, ptr %449, align 1, !tbaa !22
  %451 = load ptr, ptr %10, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %451, i32 0, i32 1
  %453 = load i32, ptr %452, align 1, !tbaa !24
  %454 = udiv i32 %453, 4
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %455, i32 0, i32 2
  %457 = load i32, ptr %456, align 1, !tbaa !23
  %458 = load ptr, ptr %10, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %458, i32 0, i32 3
  %460 = load i32, ptr %459, align 1, !tbaa !25
  %461 = udiv i32 %460, 4
  %462 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %20, i32 noundef 0, i32 noundef 15, i32 noundef 15, i32 noundef 0, i32 noundef 0, i32 noundef %450, i32 noundef %454, i32 noundef %457, i32 noundef %461, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1)
  store ptr %462, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 516, ptr %22) #3
  %463 = load ptr, ptr %6, align 8, !tbaa !5
  %464 = load ptr, ptr %21, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %463, ptr noundef %22, ptr noundef %464)
  %465 = load ptr, ptr %6, align 8, !tbaa !5
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %467, i32 0, i32 1
  %469 = load i32, ptr %468, align 4, !tbaa !11
  %470 = load ptr, ptr %8, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %470, i32 0, i32 6
  %472 = load i32, ptr %471, align 4, !tbaa !13
  %473 = load ptr, ptr %8, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %473, i32 0, i32 24
  %475 = load i32, ptr %474, align 4, !tbaa !14
  %476 = load ptr, ptr %8, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %476, i32 0, i32 25
  %478 = load i32, ptr %477, align 4, !tbaa !15
  %479 = load ptr, ptr %8, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %479, i32 0, i32 35
  %481 = load i32, ptr %480, align 4, !tbaa !16
  %482 = load ptr, ptr %21, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %465, ptr noundef %466, i32 noundef %469, i32 noundef %472, i32 noundef %475, i32 noundef %478, i32 noundef %481, ptr noundef %22, ptr noundef %482)
  call void @llvm.lifetime.end.p0(i64 516, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %20) #3
  br label %736

483:                                              ; preds = %441
  %484 = load ptr, ptr %10, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %484, i32 0, i32 10
  %486 = load i16, ptr %485, align 1, !tbaa !19
  %487 = zext i16 %486 to i32
  %488 = icmp eq i32 %487, 67
  br i1 %488, label %489, label %525

489:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 96, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %490, i32 0, i32 0
  %492 = load i32, ptr %491, align 1, !tbaa !22
  %493 = load ptr, ptr %10, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %493, i32 0, i32 1
  %495 = load i32, ptr %494, align 1, !tbaa !24
  %496 = udiv i32 %495, 2
  %497 = load ptr, ptr %10, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %497, i32 0, i32 2
  %499 = load i32, ptr %498, align 1, !tbaa !23
  %500 = load ptr, ptr %10, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %500, i32 0, i32 3
  %502 = load i32, ptr %501, align 1, !tbaa !25
  %503 = udiv i32 %502, 2
  %504 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %23, i32 noundef 1, i32 noundef 15, i32 noundef 15, i32 noundef 1, i32 noundef 1, i32 noundef %492, i32 noundef %496, i32 noundef %499, i32 noundef %503, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1)
  store ptr %504, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 516, ptr %25) #3
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  %506 = load ptr, ptr %24, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %505, ptr noundef %25, ptr noundef %506)
  %507 = load ptr, ptr %6, align 8, !tbaa !5
  %508 = load ptr, ptr %7, align 8, !tbaa !5
  %509 = load ptr, ptr %8, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %509, i32 0, i32 1
  %511 = load i32, ptr %510, align 4, !tbaa !11
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %512, i32 0, i32 6
  %514 = load i32, ptr %513, align 4, !tbaa !13
  %515 = load ptr, ptr %8, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %515, i32 0, i32 24
  %517 = load i32, ptr %516, align 4, !tbaa !14
  %518 = load ptr, ptr %8, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %518, i32 0, i32 25
  %520 = load i32, ptr %519, align 4, !tbaa !15
  %521 = load ptr, ptr %8, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %521, i32 0, i32 35
  %523 = load i32, ptr %522, align 4, !tbaa !16
  %524 = load ptr, ptr %24, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %507, ptr noundef %508, i32 noundef %511, i32 noundef %514, i32 noundef %517, i32 noundef %520, i32 noundef %523, ptr noundef %25, ptr noundef %524)
  call void @llvm.lifetime.end.p0(i64 516, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr %23) #3
  br label %735

525:                                              ; preds = %483
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %526, i32 0, i32 10
  %528 = load i16, ptr %527, align 1, !tbaa !19
  %529 = zext i16 %528 to i32
  %530 = icmp eq i32 %529, 30
  br i1 %530, label %531, label %551

531:                                              ; preds = %525
  %532 = load ptr, ptr %6, align 8, !tbaa !5
  %533 = load ptr, ptr %7, align 8, !tbaa !5
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %534, i32 0, i32 1
  %536 = load i32, ptr %535, align 4, !tbaa !11
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %537, i32 0, i32 6
  %539 = load i32, ptr %538, align 4, !tbaa !13
  %540 = load ptr, ptr %8, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %540, i32 0, i32 24
  %542 = load i32, ptr %541, align 4, !tbaa !14
  %543 = load ptr, ptr %8, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %543, i32 0, i32 25
  %545 = load i32, ptr %544, align 4, !tbaa !15
  %546 = load ptr, ptr %8, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %546, i32 0, i32 35
  %548 = load i32, ptr %547, align 4, !tbaa !16
  %549 = load ptr, ptr %9, align 8, !tbaa !5
  %550 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_vnni2_to_vnni2t_16bit_aarch64_asimd_microkernel(ptr noundef %532, ptr noundef %533, i32 noundef %536, i32 noundef %539, i32 noundef %542, i32 noundef %545, i32 noundef %548, ptr noundef %549, ptr noundef %550)
  br label %734

551:                                              ; preds = %525
  %552 = load ptr, ptr %10, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %552, i32 0, i32 10
  %554 = load i16, ptr %553, align 1, !tbaa !19
  %555 = zext i16 %554 to i32
  %556 = icmp eq i32 %555, 55
  br i1 %556, label %557, label %577

557:                                              ; preds = %551
  %558 = load ptr, ptr %6, align 8, !tbaa !5
  %559 = load ptr, ptr %7, align 8, !tbaa !5
  %560 = load ptr, ptr %8, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %560, i32 0, i32 1
  %562 = load i32, ptr %561, align 4, !tbaa !11
  %563 = load ptr, ptr %8, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %563, i32 0, i32 6
  %565 = load i32, ptr %564, align 4, !tbaa !13
  %566 = load ptr, ptr %8, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %566, i32 0, i32 24
  %568 = load i32, ptr %567, align 4, !tbaa !14
  %569 = load ptr, ptr %8, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %569, i32 0, i32 25
  %571 = load i32, ptr %570, align 4, !tbaa !15
  %572 = load ptr, ptr %8, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %572, i32 0, i32 35
  %574 = load i32, ptr %573, align 4, !tbaa !16
  %575 = load ptr, ptr %9, align 8, !tbaa !5
  %576 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_vnni4_to_vnni4t_16bit_aarch64_asimd_microkernel(ptr noundef %558, ptr noundef %559, i32 noundef %562, i32 noundef %565, i32 noundef %568, i32 noundef %571, i32 noundef %574, ptr noundef %575, ptr noundef %576)
  br label %733

577:                                              ; preds = %551
  %578 = load ptr, ptr %10, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %578, i32 0, i32 10
  %580 = load i16, ptr %579, align 1, !tbaa !19
  %581 = zext i16 %580 to i32
  %582 = icmp eq i32 %581, 28
  br i1 %582, label %583, label %603

583:                                              ; preds = %577
  %584 = load ptr, ptr %6, align 8, !tbaa !5
  %585 = load ptr, ptr %7, align 8, !tbaa !5
  %586 = load ptr, ptr %8, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %586, i32 0, i32 1
  %588 = load i32, ptr %587, align 4, !tbaa !11
  %589 = load ptr, ptr %8, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %589, i32 0, i32 6
  %591 = load i32, ptr %590, align 4, !tbaa !13
  %592 = load ptr, ptr %8, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %592, i32 0, i32 24
  %594 = load i32, ptr %593, align 4, !tbaa !14
  %595 = load ptr, ptr %8, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %595, i32 0, i32 25
  %597 = load i32, ptr %596, align 4, !tbaa !15
  %598 = load ptr, ptr %8, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %598, i32 0, i32 35
  %600 = load i32, ptr %599, align 4, !tbaa !16
  %601 = load ptr, ptr %9, align 8, !tbaa !5
  %602 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni2_16bit_aarch64_asimd_microkernel(ptr noundef %584, ptr noundef %585, i32 noundef %588, i32 noundef %591, i32 noundef %594, i32 noundef %597, i32 noundef %600, ptr noundef %601, ptr noundef %602, i32 noundef 0)
  br label %732

603:                                              ; preds = %577
  %604 = load ptr, ptr %10, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %604, i32 0, i32 10
  %606 = load i16, ptr %605, align 1, !tbaa !19
  %607 = zext i16 %606 to i32
  %608 = icmp eq i32 %607, 32
  br i1 %608, label %609, label %629

609:                                              ; preds = %603
  %610 = load ptr, ptr %6, align 8, !tbaa !5
  %611 = load ptr, ptr %7, align 8, !tbaa !5
  %612 = load ptr, ptr %8, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %612, i32 0, i32 1
  %614 = load i32, ptr %613, align 4, !tbaa !11
  %615 = load ptr, ptr %8, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %615, i32 0, i32 6
  %617 = load i32, ptr %616, align 4, !tbaa !13
  %618 = load ptr, ptr %8, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %618, i32 0, i32 24
  %620 = load i32, ptr %619, align 4, !tbaa !14
  %621 = load ptr, ptr %8, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %621, i32 0, i32 25
  %623 = load i32, ptr %622, align 4, !tbaa !15
  %624 = load ptr, ptr %8, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %624, i32 0, i32 35
  %626 = load i32, ptr %625, align 4, !tbaa !16
  %627 = load ptr, ptr %9, align 8, !tbaa !5
  %628 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni2_16bit_aarch64_asimd_microkernel(ptr noundef %610, ptr noundef %611, i32 noundef %614, i32 noundef %617, i32 noundef %620, i32 noundef %623, i32 noundef %626, ptr noundef %627, ptr noundef %628, i32 noundef 1)
  br label %731

629:                                              ; preds = %603
  %630 = load ptr, ptr %10, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %630, i32 0, i32 10
  %632 = load i16, ptr %631, align 1, !tbaa !19
  %633 = zext i16 %632 to i32
  %634 = icmp eq i32 %633, 54
  br i1 %634, label %635, label %655

635:                                              ; preds = %629
  %636 = load ptr, ptr %6, align 8, !tbaa !5
  %637 = load ptr, ptr %7, align 8, !tbaa !5
  %638 = load ptr, ptr %8, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %638, i32 0, i32 1
  %640 = load i32, ptr %639, align 4, !tbaa !11
  %641 = load ptr, ptr %8, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %641, i32 0, i32 6
  %643 = load i32, ptr %642, align 4, !tbaa !13
  %644 = load ptr, ptr %8, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %644, i32 0, i32 24
  %646 = load i32, ptr %645, align 4, !tbaa !14
  %647 = load ptr, ptr %8, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %647, i32 0, i32 25
  %649 = load i32, ptr %648, align 4, !tbaa !15
  %650 = load ptr, ptr %8, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %650, i32 0, i32 35
  %652 = load i32, ptr %651, align 4, !tbaa !16
  %653 = load ptr, ptr %9, align 8, !tbaa !5
  %654 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni4_16bit_aarch64_asimd_microkernel(ptr noundef %636, ptr noundef %637, i32 noundef %640, i32 noundef %643, i32 noundef %646, i32 noundef %649, i32 noundef %652, ptr noundef %653, ptr noundef %654, i32 noundef 0)
  br label %730

655:                                              ; preds = %629
  %656 = load ptr, ptr %10, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %656, i32 0, i32 10
  %658 = load i16, ptr %657, align 1, !tbaa !19
  %659 = zext i16 %658 to i32
  %660 = icmp eq i32 %659, 57
  br i1 %660, label %661, label %681

661:                                              ; preds = %655
  %662 = load ptr, ptr %6, align 8, !tbaa !5
  %663 = load ptr, ptr %7, align 8, !tbaa !5
  %664 = load ptr, ptr %8, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %664, i32 0, i32 1
  %666 = load i32, ptr %665, align 4, !tbaa !11
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %667, i32 0, i32 6
  %669 = load i32, ptr %668, align 4, !tbaa !13
  %670 = load ptr, ptr %8, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %670, i32 0, i32 24
  %672 = load i32, ptr %671, align 4, !tbaa !14
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %673, i32 0, i32 25
  %675 = load i32, ptr %674, align 4, !tbaa !15
  %676 = load ptr, ptr %8, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %676, i32 0, i32 35
  %678 = load i32, ptr %677, align 4, !tbaa !16
  %679 = load ptr, ptr %9, align 8, !tbaa !5
  %680 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni4_16bit_aarch64_asimd_microkernel(ptr noundef %662, ptr noundef %663, i32 noundef %666, i32 noundef %669, i32 noundef %672, i32 noundef %675, i32 noundef %678, ptr noundef %679, ptr noundef %680, i32 noundef 1)
  br label %729

681:                                              ; preds = %655
  %682 = load ptr, ptr %10, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %682, i32 0, i32 10
  %684 = load i16, ptr %683, align 1, !tbaa !19
  %685 = zext i16 %684 to i32
  %686 = icmp eq i32 %685, 40
  br i1 %686, label %699, label %687

687:                                              ; preds = %681
  %688 = load ptr, ptr %10, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %688, i32 0, i32 10
  %690 = load i16, ptr %689, align 1, !tbaa !19
  %691 = zext i16 %690 to i32
  %692 = icmp eq i32 %691, 39
  br i1 %692, label %699, label %693

693:                                              ; preds = %687
  %694 = load ptr, ptr %10, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %694, i32 0, i32 10
  %696 = load i16, ptr %695, align 1, !tbaa !19
  %697 = zext i16 %696 to i32
  %698 = icmp eq i32 %697, 41
  br i1 %698, label %699, label %719

699:                                              ; preds = %693, %687, %681
  %700 = load ptr, ptr %6, align 8, !tbaa !5
  %701 = load ptr, ptr %7, align 8, !tbaa !5
  %702 = load ptr, ptr %8, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %702, i32 0, i32 1
  %704 = load i32, ptr %703, align 4, !tbaa !11
  %705 = load ptr, ptr %8, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %705, i32 0, i32 6
  %707 = load i32, ptr %706, align 4, !tbaa !13
  %708 = load ptr, ptr %8, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %708, i32 0, i32 24
  %710 = load i32, ptr %709, align 4, !tbaa !14
  %711 = load ptr, ptr %8, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %711, i32 0, i32 25
  %713 = load i32, ptr %712, align 4, !tbaa !15
  %714 = load ptr, ptr %8, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %714, i32 0, i32 35
  %716 = load i32, ptr %715, align 4, !tbaa !16
  %717 = load ptr, ptr %9, align 8, !tbaa !5
  %718 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_padnm_mod2_16bit_aarch64_asimd_microkernel(ptr noundef %700, ptr noundef %701, i32 noundef %704, i32 noundef %707, i32 noundef %710, i32 noundef %713, i32 noundef %716, ptr noundef %717, ptr noundef %718)
  br label %728

719:                                              ; preds = %693
  %720 = load ptr, ptr %6, align 8, !tbaa !5
  %721 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %722 = icmp ult i32 1, %721
  br i1 %722, label %723, label %725

723:                                              ; preds = %719
  %724 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %726

725:                                              ; preds = %719
  br label %726

726:                                              ; preds = %725, %723
  %727 = phi i32 [ %724, %723 ], [ 1, %725 ]
  call void @libxsmm_handle_error(ptr noundef %720, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1387, i32 noundef %727)
  store i32 1, ptr %13, align 4
  br label %859

728:                                              ; preds = %699
  br label %729

729:                                              ; preds = %728, %661
  br label %730

730:                                              ; preds = %729, %635
  br label %731

731:                                              ; preds = %730, %609
  br label %732

732:                                              ; preds = %731, %583
  br label %733

733:                                              ; preds = %732, %557
  br label %734

734:                                              ; preds = %733, %531
  br label %735

735:                                              ; preds = %734, %489
  br label %736

736:                                              ; preds = %735, %447
  br label %737

737:                                              ; preds = %736, %405
  br label %738

738:                                              ; preds = %737, %363
  br label %739

739:                                              ; preds = %738, %337
  br label %856

740:                                              ; preds = %327, %323
  %741 = load ptr, ptr %10, align 8, !tbaa !5
  %742 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %741, i32 noundef 0)
  %743 = icmp eq i32 12, %742
  br i1 %743, label %744, label %748

744:                                              ; preds = %740
  %745 = load ptr, ptr %10, align 8, !tbaa !5
  %746 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %745, i32 noundef 3)
  %747 = icmp eq i32 12, %746
  br i1 %747, label %756, label %748

748:                                              ; preds = %744, %740
  %749 = load ptr, ptr %10, align 8, !tbaa !5
  %750 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %749, i32 noundef 0)
  %751 = icmp eq i32 4, %750
  br i1 %751, label %752, label %846

752:                                              ; preds = %748
  %753 = load ptr, ptr %10, align 8, !tbaa !5
  %754 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %753, i32 noundef 3)
  %755 = icmp eq i32 4, %754
  br i1 %755, label %756, label %846

756:                                              ; preds = %752, %744
  %757 = load ptr, ptr %10, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %757, i32 0, i32 10
  %759 = load i16, ptr %758, align 1, !tbaa !19
  %760 = zext i16 %759 to i32
  %761 = icmp eq i32 %760, 29
  br i1 %761, label %762, label %782

762:                                              ; preds = %756
  %763 = load ptr, ptr %6, align 8, !tbaa !5
  %764 = load ptr, ptr %7, align 8, !tbaa !5
  %765 = load ptr, ptr %8, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %765, i32 0, i32 1
  %767 = load i32, ptr %766, align 4, !tbaa !11
  %768 = load ptr, ptr %8, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %768, i32 0, i32 6
  %770 = load i32, ptr %769, align 4, !tbaa !13
  %771 = load ptr, ptr %8, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %771, i32 0, i32 24
  %773 = load i32, ptr %772, align 4, !tbaa !14
  %774 = load ptr, ptr %8, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %774, i32 0, i32 25
  %776 = load i32, ptr %775, align 4, !tbaa !15
  %777 = load ptr, ptr %8, align 8, !tbaa !5
  %778 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %777, i32 0, i32 35
  %779 = load i32, ptr %778, align 4, !tbaa !16
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_normt_08bit_aarch64_asimd_microkernel(ptr noundef %763, ptr noundef %764, i32 noundef %767, i32 noundef %770, i32 noundef %773, i32 noundef %776, i32 noundef %779, ptr noundef %780, ptr noundef %781)
  br label %845

782:                                              ; preds = %756
  %783 = load ptr, ptr %10, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %783, i32 0, i32 10
  %785 = load i16, ptr %784, align 1, !tbaa !19
  %786 = zext i16 %785 to i32
  %787 = icmp eq i32 %786, 54
  br i1 %787, label %788, label %808

788:                                              ; preds = %782
  %789 = load ptr, ptr %6, align 8, !tbaa !5
  %790 = load ptr, ptr %7, align 8, !tbaa !5
  %791 = load ptr, ptr %8, align 8, !tbaa !5
  %792 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %791, i32 0, i32 1
  %793 = load i32, ptr %792, align 4, !tbaa !11
  %794 = load ptr, ptr %8, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %794, i32 0, i32 6
  %796 = load i32, ptr %795, align 4, !tbaa !13
  %797 = load ptr, ptr %8, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %797, i32 0, i32 24
  %799 = load i32, ptr %798, align 4, !tbaa !14
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %800, i32 0, i32 25
  %802 = load i32, ptr %801, align 4, !tbaa !15
  %803 = load ptr, ptr %8, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %803, i32 0, i32 35
  %805 = load i32, ptr %804, align 4, !tbaa !16
  %806 = load ptr, ptr %9, align 8, !tbaa !5
  %807 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni4_08bit_aarch64_asimd_microkernel(ptr noundef %789, ptr noundef %790, i32 noundef %793, i32 noundef %796, i32 noundef %799, i32 noundef %802, i32 noundef %805, ptr noundef %806, ptr noundef %807, i32 noundef 0)
  br label %844

808:                                              ; preds = %782
  %809 = load ptr, ptr %10, align 8, !tbaa !5
  %810 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %809, i32 0, i32 10
  %811 = load i16, ptr %810, align 1, !tbaa !19
  %812 = zext i16 %811 to i32
  %813 = icmp eq i32 %812, 57
  br i1 %813, label %814, label %834

814:                                              ; preds = %808
  %815 = load ptr, ptr %6, align 8, !tbaa !5
  %816 = load ptr, ptr %7, align 8, !tbaa !5
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %817, i32 0, i32 1
  %819 = load i32, ptr %818, align 4, !tbaa !11
  %820 = load ptr, ptr %8, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %820, i32 0, i32 6
  %822 = load i32, ptr %821, align 4, !tbaa !13
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %823, i32 0, i32 24
  %825 = load i32, ptr %824, align 4, !tbaa !14
  %826 = load ptr, ptr %8, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %826, i32 0, i32 25
  %828 = load i32, ptr %827, align 4, !tbaa !15
  %829 = load ptr, ptr %8, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %829, i32 0, i32 35
  %831 = load i32, ptr %830, align 4, !tbaa !16
  %832 = load ptr, ptr %9, align 8, !tbaa !5
  %833 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_transform_norm_to_vnni4_08bit_aarch64_asimd_microkernel(ptr noundef %815, ptr noundef %816, i32 noundef %819, i32 noundef %822, i32 noundef %825, i32 noundef %828, i32 noundef %831, ptr noundef %832, ptr noundef %833, i32 noundef 1)
  br label %843

834:                                              ; preds = %808
  %835 = load ptr, ptr %6, align 8, !tbaa !5
  %836 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %837 = icmp ult i32 1, %836
  br i1 %837, label %838, label %840

838:                                              ; preds = %834
  %839 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %841

840:                                              ; preds = %834
  br label %841

841:                                              ; preds = %840, %838
  %842 = phi i32 [ %839, %838 ], [ 1, %840 ]
  call void @libxsmm_handle_error(ptr noundef %835, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1410, i32 noundef %842)
  store i32 1, ptr %13, align 4
  br label %859

843:                                              ; preds = %814
  br label %844

844:                                              ; preds = %843, %788
  br label %845

845:                                              ; preds = %844, %762
  br label %855

846:                                              ; preds = %752, %748
  %847 = load ptr, ptr %6, align 8, !tbaa !5
  %848 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %849 = icmp ult i32 1, %848
  br i1 %849, label %850, label %852

850:                                              ; preds = %846
  %851 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %853

852:                                              ; preds = %846
  br label %853

853:                                              ; preds = %852, %850
  %854 = phi i32 [ %851, %850 ], [ 1, %852 ]
  call void @libxsmm_handle_error(ptr noundef %847, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef @.str, i32 noundef 1414, i32 noundef %854)
  store i32 1, ptr %13, align 4
  br label %859

855:                                              ; preds = %845
  br label %856

856:                                              ; preds = %855, %739
  br label %857

857:                                              ; preds = %856, %306
  br label %858

858:                                              ; preds = %857, %254
  store i32 0, ptr %13, align 4
  br label %859

859:                                              ; preds = %858, %853, %841, %726, %304, %252, %197, %179, %145, %97, %80
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  %860 = load i32, ptr %13, align 4
  switch i32 %860, label %862 [
    i32 0, label %861
    i32 1, label %861
  ]

861:                                              ; preds = %859, %859
  ret void

862:                                              ; preds = %859
  unreachable
}

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

declare ptr @libxsmm_meltw_descriptor_init2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) #1

declare void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef, ptr noundef, ptr 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 = { 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 #3 = { 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 4}
!12 = !{!"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}
!13 = !{!12, !10, i64 24}
!14 = !{!12, !10, i64 96}
!15 = !{!12, !10, i64 100}
!16 = !{!12, !10, i64 140}
!17 = !{!12, !10, i64 144}
!18 = !{!12, !10, i64 0}
!19 = !{!20, !21, i64 29}
!20 = !{!"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, !21, i64 27, !21, i64 29, !7, i64 31}
!21 = !{!"short", !7, i64 0}
!22 = !{!20, !10, i64 0}
!23 = !{!20, !10, i64 8}
!24 = !{!20, !10, i64 4}
!25 = !{!20, !10, i64 12}


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

%struct.libxsmm_descriptor_blob = type { [96 x i8] }
%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 }

@.str = external hidden unnamed_addr constant [100 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_transform_aarch64_asimd_microkernel = external hidden unnamed_addr constant [54 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_transform_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #2 {
  %6 = alloca %struct.libxsmm_descriptor_blob, align 1
  %7 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %8 = alloca %struct.libxsmm_descriptor_blob, align 1
  %9 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %10 = alloca %struct.libxsmm_descriptor_blob, align 1
  %11 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %12 = alloca %struct.libxsmm_descriptor_blob, align 1
  %13 = alloca %struct.libxsmm_mateltwise_kernel_config_struct, align 4
  %14 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 40, ptr %14, align 4, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %2, i64 24
  store i32 41, ptr %15, align 4, !tbaa !10
  %16 = getelementptr inbounds i8, ptr %2, i64 96
  store i32 42, ptr %16, align 4, !tbaa !11
  %17 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 43, ptr %17, align 4, !tbaa !12
  %18 = getelementptr inbounds i8, ptr %2, i64 140
  store i32 38, ptr %18, align 4, !tbaa !13
  %19 = getelementptr inbounds i8, ptr %2, i64 144
  store i32 39, ptr %19, align 4, !tbaa !14
  %20 = load i32, ptr %2, align 4, !tbaa !15
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %20, i32 noundef 127, i32 noundef 32, i32 noundef 40) #3
  %21 = load i32, ptr %2, align 4, !tbaa !15
  %22 = load i32, ptr %15, align 4, !tbaa !10
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %21, i32 noundef 127, i32 noundef 80, i32 noundef %22) #3
  %23 = getelementptr inbounds i8, ptr %4, i64 29
  %24 = load i16, ptr %23, align 1, !tbaa !16
  switch i16 %24, label %77 [
    i16 29, label %25
    i16 30, label %25
    i16 28, label %46
    i16 32, label %46
    i16 40, label %46
    i16 39, label %46
    i16 41, label %46
  ]

25:                                               ; preds = %5, %5
  %26 = load i32, ptr %4, align 1, !tbaa !19
  %27 = getelementptr inbounds i8, ptr %4, i64 8
  %28 = load i32, ptr %27, align 1, !tbaa !20
  %29 = icmp ugt i32 %26, %28
  br i1 %29, label %30, label %35

30:                                               ; preds = %25
  %31 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %32 = icmp ugt i32 %31, 1
  %33 = load i32, ptr @libxsmm_verbosity, align 4
  %34 = select i1 %32, i32 %33, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90007, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1228, i32 noundef %34) #3
  br label %308

35:                                               ; preds = %25
  %36 = getelementptr inbounds i8, ptr %4, i64 4
  %37 = load i32, ptr %36, align 1, !tbaa !22
  %38 = getelementptr inbounds i8, ptr %4, i64 12
  %39 = load i32, ptr %38, align 1, !tbaa !23
  %40 = icmp ugt i32 %37, %39
  br i1 %40, label %41, label %77

41:                                               ; preds = %35
  %42 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %43 = icmp ugt i32 %42, 1
  %44 = load i32, ptr @libxsmm_verbosity, align 4
  %45 = select i1 %43, i32 %44, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90008, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1232, i32 noundef %45) #3
  br label %308

46:                                               ; preds = %5, %5, %5, %5, %5
  %47 = load i32, ptr %4, align 1, !tbaa !19
  %48 = getelementptr inbounds i8, ptr %4, i64 8
  %49 = load i32, ptr %48, align 1, !tbaa !20
  %50 = icmp ugt i32 %47, %49
  br i1 %50, label %51, label %56

51:                                               ; preds = %46
  %52 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %53 = icmp ugt i32 %52, 1
  %54 = load i32, ptr @libxsmm_verbosity, align 4
  %55 = select i1 %53, i32 %54, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90007, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1241, i32 noundef %55) #3
  br label %308

56:                                               ; preds = %46
  switch i16 %24, label %68 [
    i16 39, label %57
    i16 41, label %57
  ]

57:                                               ; preds = %56, %56
  %58 = and i32 %47, 1
  %59 = add i32 %58, %47
  %60 = getelementptr inbounds i8, ptr %4, i64 12
  %61 = load i32, ptr %60, align 1, !tbaa !23
  %62 = icmp ugt i32 %59, %61
  br i1 %62, label %63, label %77

63:                                               ; preds = %57
  %64 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %65 = icmp ugt i32 %64, 1
  %66 = load i32, ptr @libxsmm_verbosity, align 4
  %67 = select i1 %65, i32 %66, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90008, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1247, i32 noundef %67) #3
  br label %308

68:                                               ; preds = %56
  %69 = getelementptr inbounds i8, ptr %4, i64 12
  %70 = load i32, ptr %69, align 1, !tbaa !23
  %71 = icmp ugt i32 %47, %70
  br i1 %71, label %72, label %77

72:                                               ; preds = %68
  %73 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %74 = icmp ugt i32 %73, 1
  %75 = load i32, ptr @libxsmm_verbosity, align 4
  %76 = select i1 %74, i32 %75, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90008, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1252, i32 noundef %76) #3
  br label %308

77:                                               ; preds = %5, %68, %57, %35
  %78 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %79 = icmp eq i32 %78, 6
  br i1 %79, label %80, label %83

80:                                               ; preds = %77
  %81 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %82 = icmp eq i32 %81, 6
  br i1 %82, label %89, label %83

83:                                               ; preds = %80, %77
  %84 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %85 = icmp eq i32 %84, 0
  br i1 %85, label %86, label %103

86:                                               ; preds = %83
  %87 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %88 = icmp eq i32 %87, 0
  br i1 %88, label %89, label %103

89:                                               ; preds = %86, %80
  %90 = load i16, ptr %23, align 1, !tbaa !16
  %91 = icmp eq i16 %90, 29
  br i1 %91, label %92, label %98

92:                                               ; preds = %89
  %93 = load i32, ptr %14, align 4, !tbaa !5
  %94 = load i32, ptr %15, align 4, !tbaa !10
  %95 = load i32, ptr %16, align 4, !tbaa !11
  %96 = load i32, ptr %17, align 4, !tbaa !12
  %97 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %93, i32 noundef %94, i32 noundef %95, i32 noundef %96, i32 noundef %97, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

98:                                               ; preds = %89
  %99 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %100 = icmp ugt i32 %99, 1
  %101 = load i32, ptr @libxsmm_verbosity, align 4
  %102 = select i1 %100, i32 %101, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1270, i32 noundef %102) #3
  br label %308

103:                                              ; preds = %86, %83
  %104 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %105 = icmp eq i32 %104, 8
  br i1 %105, label %106, label %109

106:                                              ; preds = %103
  %107 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %108 = icmp eq i32 %107, 8
  br i1 %108, label %115, label %109

109:                                              ; preds = %106, %103
  %110 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %111 = icmp eq i32 %110, 1
  br i1 %111, label %112, label %129

112:                                              ; preds = %109
  %113 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %114 = icmp eq i32 %113, 1
  br i1 %114, label %115, label %129

115:                                              ; preds = %112, %106
  %116 = load i16, ptr %23, align 1, !tbaa !16
  %117 = icmp eq i16 %116, 29
  br i1 %117, label %118, label %124

118:                                              ; preds = %115
  %119 = load i32, ptr %14, align 4, !tbaa !5
  %120 = load i32, ptr %15, align 4, !tbaa !10
  %121 = load i32, ptr %16, align 4, !tbaa !11
  %122 = load i32, ptr %17, align 4, !tbaa !12
  %123 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %119, i32 noundef %120, i32 noundef %121, i32 noundef %122, i32 noundef %123, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

124:                                              ; preds = %115
  %125 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %126 = icmp ugt i32 %125, 1
  %127 = load i32, ptr @libxsmm_verbosity, align 4
  %128 = select i1 %126, i32 %127, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1283, i32 noundef %128) #3
  br label %308

129:                                              ; preds = %112, %109
  %130 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %131 = icmp eq i32 %130, 10
  br i1 %131, label %132, label %135

132:                                              ; preds = %129
  %133 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %134 = icmp eq i32 %133, 10
  br i1 %134, label %147, label %135

135:                                              ; preds = %132, %129
  %136 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %137 = icmp eq i32 %136, 3
  br i1 %137, label %138, label %141

138:                                              ; preds = %135
  %139 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %140 = icmp eq i32 %139, 3
  br i1 %140, label %147, label %141

141:                                              ; preds = %138, %135
  %142 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %143 = icmp eq i32 %142, 2
  br i1 %143, label %144, label %266

144:                                              ; preds = %141
  %145 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %146 = icmp eq i32 %145, 2
  br i1 %146, label %147, label %266

147:                                              ; preds = %144, %138, %132
  %148 = load i16, ptr %23, align 1, !tbaa !16
  switch i16 %148, label %261 [
    i16 29, label %149
    i16 56, label %155
    i16 31, label %171
    i16 66, label %187
    i16 67, label %203
    i16 30, label %219
    i16 55, label %225
    i16 28, label %231
    i16 32, label %237
    i16 54, label %243
    i16 57, label %249
    i16 40, label %255
    i16 39, label %255
    i16 41, label %255
  ]

149:                                              ; preds = %147
  %150 = load i32, ptr %14, align 4, !tbaa !5
  %151 = load i32, ptr %15, align 4, !tbaa !10
  %152 = load i32, ptr %16, align 4, !tbaa !11
  %153 = load i32, ptr %17, align 4, !tbaa !12
  %154 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_normt_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %150, i32 noundef %151, i32 noundef %152, i32 noundef %153, i32 noundef %154, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

155:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %6) #3
  %156 = load i32, ptr %4, align 1, !tbaa !19
  %157 = lshr i32 %156, 2
  %158 = getelementptr inbounds i8, ptr %4, i64 4
  %159 = load i32, ptr %158, align 1, !tbaa !22
  %160 = getelementptr inbounds i8, ptr %4, i64 8
  %161 = load i32, ptr %160, align 1, !tbaa !20
  %162 = lshr i32 %161, 2
  %163 = getelementptr inbounds i8, ptr %4, i64 12
  %164 = load i32, ptr %163, align 1, !tbaa !23
  %165 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %6, i32 noundef 0, i32 noundef 15, i32 noundef 15, i32 noundef 0, i32 noundef 0, i32 noundef %157, i32 noundef %159, i32 noundef %162, i32 noundef %164, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1) #3
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %7) #3
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %7, ptr noundef %165) #3
  %166 = load i32, ptr %14, align 4, !tbaa !5
  %167 = load i32, ptr %15, align 4, !tbaa !10
  %168 = load i32, ptr %16, align 4, !tbaa !11
  %169 = load i32, ptr %17, align 4, !tbaa !12
  %170 = load i32, ptr %18, align 4, !tbaa !13
  call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %166, i32 noundef %167, i32 noundef %168, i32 noundef %169, i32 noundef %170, ptr noundef nonnull %7, ptr noundef %165)
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %6) #3
  br label %308

171:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %8) #3
  %172 = load i32, ptr %4, align 1, !tbaa !19
  %173 = lshr i32 %172, 1
  %174 = getelementptr inbounds i8, ptr %4, i64 4
  %175 = load i32, ptr %174, align 1, !tbaa !22
  %176 = getelementptr inbounds i8, ptr %4, i64 8
  %177 = load i32, ptr %176, align 1, !tbaa !20
  %178 = lshr i32 %177, 1
  %179 = getelementptr inbounds i8, ptr %4, i64 12
  %180 = load i32, ptr %179, align 1, !tbaa !23
  %181 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %8, i32 noundef 1, i32 noundef 15, i32 noundef 15, i32 noundef 1, i32 noundef 1, i32 noundef %173, i32 noundef %175, i32 noundef %178, i32 noundef %180, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1) #3
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %9) #3
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %9, ptr noundef %181) #3
  %182 = load i32, ptr %14, align 4, !tbaa !5
  %183 = load i32, ptr %15, align 4, !tbaa !10
  %184 = load i32, ptr %16, align 4, !tbaa !11
  %185 = load i32, ptr %17, align 4, !tbaa !12
  %186 = load i32, ptr %18, align 4, !tbaa !13
  call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %182, i32 noundef %183, i32 noundef %184, i32 noundef %185, i32 noundef %186, ptr noundef nonnull %9, ptr noundef %181)
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %8) #3
  br label %308

187:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %10) #3
  %188 = load i32, ptr %4, align 1, !tbaa !19
  %189 = getelementptr inbounds i8, ptr %4, i64 4
  %190 = load i32, ptr %189, align 1, !tbaa !22
  %191 = lshr i32 %190, 2
  %192 = getelementptr inbounds i8, ptr %4, i64 8
  %193 = load i32, ptr %192, align 1, !tbaa !20
  %194 = getelementptr inbounds i8, ptr %4, i64 12
  %195 = load i32, ptr %194, align 1, !tbaa !23
  %196 = lshr i32 %195, 2
  %197 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %10, i32 noundef 0, i32 noundef 15, i32 noundef 15, i32 noundef 0, i32 noundef 0, i32 noundef %188, i32 noundef %191, i32 noundef %193, i32 noundef %196, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1) #3
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %11) #3
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %11, ptr noundef %197) #3
  %198 = load i32, ptr %14, align 4, !tbaa !5
  %199 = load i32, ptr %15, align 4, !tbaa !10
  %200 = load i32, ptr %16, align 4, !tbaa !11
  %201 = load i32, ptr %17, align 4, !tbaa !12
  %202 = load i32, ptr %18, align 4, !tbaa !13
  call void @libxsmm_generator_transform_norm_to_normt_64bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %198, i32 noundef %199, i32 noundef %200, i32 noundef %201, i32 noundef %202, ptr noundef nonnull %11, ptr noundef %197)
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #3
  br label %308

203:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %12) #3
  %204 = load i32, ptr %4, align 1, !tbaa !19
  %205 = getelementptr inbounds i8, ptr %4, i64 4
  %206 = load i32, ptr %205, align 1, !tbaa !22
  %207 = lshr i32 %206, 1
  %208 = getelementptr inbounds i8, ptr %4, i64 8
  %209 = load i32, ptr %208, align 1, !tbaa !20
  %210 = getelementptr inbounds i8, ptr %4, i64 12
  %211 = load i32, ptr %210, align 1, !tbaa !23
  %212 = lshr i32 %211, 1
  %213 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %12, i32 noundef 1, i32 noundef 15, i32 noundef 15, i32 noundef 1, i32 noundef 1, i32 noundef %204, i32 noundef %207, i32 noundef %209, i32 noundef %212, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 0, i16 noundef zeroext 29, i8 noundef zeroext 1) #3
  call void @llvm.lifetime.start.p0(i64 516, ptr nonnull %13) #3
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %13, ptr noundef %213) #3
  %214 = load i32, ptr %14, align 4, !tbaa !5
  %215 = load i32, ptr %15, align 4, !tbaa !10
  %216 = load i32, ptr %16, align 4, !tbaa !11
  %217 = load i32, ptr %17, align 4, !tbaa !12
  %218 = load i32, ptr %18, align 4, !tbaa !13
  call void @libxsmm_generator_transform_norm_to_normt_32bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %214, i32 noundef %215, i32 noundef %216, i32 noundef %217, i32 noundef %218, ptr noundef nonnull %13, ptr noundef %213)
  call void @llvm.lifetime.end.p0(i64 516, ptr nonnull %13) #3
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %12) #3
  br label %308

219:                                              ; preds = %147
  %220 = load i32, ptr %14, align 4, !tbaa !5
  %221 = load i32, ptr %15, align 4, !tbaa !10
  %222 = load i32, ptr %16, align 4, !tbaa !11
  %223 = load i32, ptr %17, align 4, !tbaa !12
  %224 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_vnni2_to_vnni2t_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %220, i32 noundef %221, i32 noundef %222, i32 noundef %223, i32 noundef %224, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

225:                                              ; preds = %147
  %226 = load i32, ptr %14, align 4, !tbaa !5
  %227 = load i32, ptr %15, align 4, !tbaa !10
  %228 = load i32, ptr %16, align 4, !tbaa !11
  %229 = load i32, ptr %17, align 4, !tbaa !12
  %230 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_vnni4_to_vnni4t_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %226, i32 noundef %227, i32 noundef %228, i32 noundef %229, i32 noundef %230, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

231:                                              ; preds = %147
  %232 = load i32, ptr %14, align 4, !tbaa !5
  %233 = load i32, ptr %15, align 4, !tbaa !10
  %234 = load i32, ptr %16, align 4, !tbaa !11
  %235 = load i32, ptr %17, align 4, !tbaa !12
  %236 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni2_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %232, i32 noundef %233, i32 noundef %234, i32 noundef %235, i32 noundef %236, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 0)
  br label %308

237:                                              ; preds = %147
  %238 = load i32, ptr %14, align 4, !tbaa !5
  %239 = load i32, ptr %15, align 4, !tbaa !10
  %240 = load i32, ptr %16, align 4, !tbaa !11
  %241 = load i32, ptr %17, align 4, !tbaa !12
  %242 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni2_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %238, i32 noundef %239, i32 noundef %240, i32 noundef %241, i32 noundef %242, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 1)
  br label %308

243:                                              ; preds = %147
  %244 = load i32, ptr %14, align 4, !tbaa !5
  %245 = load i32, ptr %15, align 4, !tbaa !10
  %246 = load i32, ptr %16, align 4, !tbaa !11
  %247 = load i32, ptr %17, align 4, !tbaa !12
  %248 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni4_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %244, i32 noundef %245, i32 noundef %246, i32 noundef %247, i32 noundef %248, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 0)
  br label %308

249:                                              ; preds = %147
  %250 = load i32, ptr %14, align 4, !tbaa !5
  %251 = load i32, ptr %15, align 4, !tbaa !10
  %252 = load i32, ptr %16, align 4, !tbaa !11
  %253 = load i32, ptr %17, align 4, !tbaa !12
  %254 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni4_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %250, i32 noundef %251, i32 noundef %252, i32 noundef %253, i32 noundef %254, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 1)
  br label %308

255:                                              ; preds = %147, %147, %147
  %256 = load i32, ptr %14, align 4, !tbaa !5
  %257 = load i32, ptr %15, align 4, !tbaa !10
  %258 = load i32, ptr %16, align 4, !tbaa !11
  %259 = load i32, ptr %17, align 4, !tbaa !12
  %260 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_padnm_mod2_16bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %256, i32 noundef %257, i32 noundef %258, i32 noundef %259, i32 noundef %260, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

261:                                              ; preds = %147
  %262 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %263 = icmp ugt i32 %262, 1
  %264 = load i32, ptr @libxsmm_verbosity, align 4
  %265 = select i1 %263, i32 %264, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1387, i32 noundef %265) #3
  br label %308

266:                                              ; preds = %144, %141
  %267 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %268 = icmp eq i32 %267, 12
  br i1 %268, label %269, label %272

269:                                              ; preds = %266
  %270 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %271 = icmp eq i32 %270, 12
  br i1 %271, label %278, label %272

272:                                              ; preds = %269, %266
  %273 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #3
  %274 = icmp eq i32 %273, 4
  br i1 %274, label %275, label %303

275:                                              ; preds = %272
  %276 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #3
  %277 = icmp eq i32 %276, 4
  br i1 %277, label %278, label %303

278:                                              ; preds = %275, %269
  %279 = load i16, ptr %23, align 1, !tbaa !16
  switch i16 %279, label %298 [
    i16 29, label %280
    i16 54, label %286
    i16 57, label %292
  ]

280:                                              ; preds = %278
  %281 = load i32, ptr %14, align 4, !tbaa !5
  %282 = load i32, ptr %15, align 4, !tbaa !10
  %283 = load i32, ptr %16, align 4, !tbaa !11
  %284 = load i32, ptr %17, align 4, !tbaa !12
  %285 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_normt_08bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %281, i32 noundef %282, i32 noundef %283, i32 noundef %284, i32 noundef %285, ptr noundef %3, ptr noundef nonnull %4)
  br label %308

286:                                              ; preds = %278
  %287 = load i32, ptr %14, align 4, !tbaa !5
  %288 = load i32, ptr %15, align 4, !tbaa !10
  %289 = load i32, ptr %16, align 4, !tbaa !11
  %290 = load i32, ptr %17, align 4, !tbaa !12
  %291 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni4_08bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %287, i32 noundef %288, i32 noundef %289, i32 noundef %290, i32 noundef %291, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 0)
  br label %308

292:                                              ; preds = %278
  %293 = load i32, ptr %14, align 4, !tbaa !5
  %294 = load i32, ptr %15, align 4, !tbaa !10
  %295 = load i32, ptr %16, align 4, !tbaa !11
  %296 = load i32, ptr %17, align 4, !tbaa !12
  %297 = load i32, ptr %18, align 4, !tbaa !13
  tail call void @libxsmm_generator_transform_norm_to_vnni4_08bit_aarch64_asimd_microkernel(ptr noundef %0, ptr noundef %1, i32 noundef %293, i32 noundef %294, i32 noundef %295, i32 noundef %296, i32 noundef %297, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 1)
  br label %308

298:                                              ; preds = %278
  %299 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %300 = icmp ugt i32 %299, 1
  %301 = load i32, ptr @libxsmm_verbosity, align 4
  %302 = select i1 %300, i32 %301, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1410, i32 noundef %302) #3
  br label %308

303:                                              ; preds = %275, %272
  %304 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !21
  %305 = icmp ugt i32 %304, 1
  %306 = load i32, ptr @libxsmm_verbosity, align 4
  %307 = select i1 %305, i32 %306, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_transform_aarch64_asimd_microkernel, ptr noundef nonnull @.str, i32 noundef 1414, i32 noundef %307) #3
  br label %308

308:                                              ; preds = %92, %155, %187, %219, %231, %243, %255, %249, %237, %225, %203, %171, %149, %280, %292, %286, %118, %303, %298, %261, %124, %98, %72, %63, %51, %41, %30
  ret void
}

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

declare ptr @libxsmm_meltw_descriptor_init2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { 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 4}
!6 = !{!"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}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 24}
!11 = !{!6, !7, i64 96}
!12 = !{!6, !7, i64 100}
!13 = !{!6, !7, i64 140}
!14 = !{!6, !7, i64 144}
!15 = !{!6, !7, i64 0}
!16 = !{!17, !18, i64 29}
!17 = !{!"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, !18, i64 27, !18, i64 29, !8, i64 31}
!18 = !{!"short", !8, i64 0}
!19 = !{!17, !7, i64 0}
!20 = !{!17, !7, i64 8}
!21 = !{!7, !7, i64 0}
!22 = !{!17, !7, i64 4}
!23 = !{!17, !7, i64 12}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass