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

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

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

@.str = external hidden unnamed_addr constant [97 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_unary_binary_aarch64_microkernel = external hidden unnamed_addr constant [51 x i8], align 1

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

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  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
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  store i32 0, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  store i32 0, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  store i32 0, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  store i32 0, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  store i32 0, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 32, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 48, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  store i32 127, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  store i32 127, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  store i32 32, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  store i32 80, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  store i32 128, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  store i32 176, ptr %33, align 4, !tbaa !9
  %35 = load ptr, ptr %10, align 8, !tbaa !5
  %36 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %35, i32 noundef 0)
  %37 = icmp eq i32 1, %36
  br i1 %37, label %58, label %38

38:                                               ; preds = %5
  %39 = load ptr, ptr %10, align 8, !tbaa !5
  %40 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %39, i32 noundef 0)
  %41 = icmp eq i32 9, %40
  br i1 %41, label %58, label %42

42:                                               ; preds = %38
  %43 = load ptr, ptr %10, align 8, !tbaa !5
  %44 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %43, i32 noundef 0)
  %45 = icmp eq i32 8, %44
  br i1 %45, label %58, label %46

46:                                               ; preds = %42
  %47 = load ptr, ptr %10, align 8, !tbaa !5
  %48 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %47, i32 noundef 0)
  %49 = icmp eq i32 2, %48
  br i1 %49, label %58, label %50

50:                                               ; preds = %46
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %51, i32 noundef 0)
  %53 = icmp eq i32 11, %52
  br i1 %53, label %58, label %54

54:                                               ; preds = %50
  %55 = load ptr, ptr %10, align 8, !tbaa !5
  %56 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %55, i32 noundef 0)
  %57 = icmp eq i32 10, %56
  br i1 %57, label %58, label %70

58:                                               ; preds = %54, %50, %46, %42, %38, %5
  %59 = load ptr, ptr %10, align 8, !tbaa !5
  %60 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %59, i32 noundef 3)
  %61 = icmp eq i32 1, %60
  br i1 %61, label %142, label %62

62:                                               ; preds = %58
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %63, i32 noundef 3)
  %65 = icmp eq i32 2, %64
  br i1 %65, label %142, label %66

66:                                               ; preds = %62
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %67, i32 noundef 3)
  %69 = icmp eq i32 11, %68
  br i1 %69, label %142, label %70

70:                                               ; preds = %66, %54
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %71, i32 noundef 0)
  %73 = icmp eq i32 10, %72
  br i1 %73, label %74, label %78

74:                                               ; preds = %70
  %75 = load ptr, ptr %10, align 8, !tbaa !5
  %76 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %75, i32 noundef 3)
  %77 = icmp eq i32 1, %76
  br i1 %77, label %142, label %78

78:                                               ; preds = %74, %70
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %79, i32 noundef 0)
  %81 = icmp eq i32 11, %80
  br i1 %81, label %82, label %86

82:                                               ; preds = %78
  %83 = load ptr, ptr %10, align 8, !tbaa !5
  %84 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %83, i32 noundef 3)
  %85 = icmp eq i32 1, %84
  br i1 %85, label %142, label %86

86:                                               ; preds = %82, %78
  %87 = load ptr, ptr %10, align 8, !tbaa !5
  %88 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %87, i32 noundef 0)
  %89 = icmp eq i32 11, %88
  br i1 %89, label %90, label %94

90:                                               ; preds = %86
  %91 = load ptr, ptr %10, align 8, !tbaa !5
  %92 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %91, i32 noundef 3)
  %93 = icmp eq i32 8, %92
  br i1 %93, label %142, label %94

94:                                               ; preds = %90, %86
  %95 = load ptr, ptr %10, align 8, !tbaa !5
  %96 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %95, i32 noundef 0)
  %97 = icmp eq i32 11, %96
  br i1 %97, label %98, label %102

98:                                               ; preds = %94
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %99, i32 noundef 3)
  %101 = icmp eq i32 9, %100
  br i1 %101, label %142, label %102

102:                                              ; preds = %98, %94
  %103 = load ptr, ptr %10, align 8, !tbaa !5
  %104 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %103, i32 noundef 0)
  %105 = icmp eq i32 1, %104
  br i1 %105, label %106, label %110

106:                                              ; preds = %102
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %107, i32 noundef 3)
  %109 = icmp eq i32 10, %108
  br i1 %109, label %142, label %110

110:                                              ; preds = %106, %102
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %111, i32 noundef 0)
  %113 = icmp eq i32 12, %112
  br i1 %113, label %114, label %118

114:                                              ; preds = %110
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %115, i32 noundef 3)
  %117 = icmp eq i32 1, %116
  br i1 %117, label %142, label %118

118:                                              ; preds = %114, %110
  %119 = load ptr, ptr %10, align 8, !tbaa !5
  %120 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %119, i32 noundef 0)
  %121 = icmp eq i32 1, %120
  br i1 %121, label %122, label %126

122:                                              ; preds = %118
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %123, i32 noundef 3)
  %125 = icmp eq i32 12, %124
  br i1 %125, label %142, label %126

126:                                              ; preds = %122, %118
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %127)
  %129 = icmp ugt i32 %128, 0
  br i1 %129, label %130, label %134

130:                                              ; preds = %126
  %131 = load ptr, ptr %10, align 8, !tbaa !5
  %132 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %131, i32 noundef 3)
  %133 = icmp eq i32 14, %132
  br i1 %133, label %142, label %134

134:                                              ; preds = %130, %126
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %135, i32 noundef 0)
  %137 = icmp eq i32 0, %136
  br i1 %137, label %138, label %143

138:                                              ; preds = %134
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %139, i32 noundef 3)
  %141 = icmp eq i32 0, %140
  br i1 %141, label %142, label %143

142:                                              ; preds = %138, %130, %122, %114, %106, %98, %90, %82, %74, %66, %62, %58
  br label %152

143:                                              ; preds = %138, %134
  %144 = load ptr, ptr %6, align 8, !tbaa !5
  %145 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %146 = icmp ult i32 1, %145
  br i1 %146, label %147, label %149

147:                                              ; preds = %143
  %148 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %150

149:                                              ; preds = %143
  br label %150

150:                                              ; preds = %149, %147
  %151 = phi i32 [ %148, %147 ], [ 1, %149 ]
  call void @libxsmm_handle_error(ptr noundef %144, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef @.str, i32 noundef 3988, i32 noundef %151)
  store i32 1, ptr %34, align 4
  br label %1512

152:                                              ; preds = %142
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  call void @libxsmm_generator_configure_aarch64_vlens(ptr noundef %153, ptr noundef %154)
  %155 = load ptr, ptr %10, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %155, i32 0, i32 11
  %157 = load i8, ptr %156, align 1, !tbaa !11
  %158 = zext i8 %157 to i32
  %159 = icmp eq i32 %158, 1
  br i1 %159, label %160, label %192

160:                                              ; preds = %152
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %161, i32 0, i32 9
  %163 = load i16, ptr %162, align 1, !tbaa !14
  %164 = zext i16 %163 to i32
  %165 = and i32 %164, 1
  %166 = icmp sgt i32 %165, 0
  br i1 %166, label %167, label %192

167:                                              ; preds = %160
  %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 !15
  %171 = add i32 %170, 15
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %172, i32 0, i32 3
  %174 = load i32, ptr %173, align 1, !tbaa !15
  %175 = add i32 %174, 15
  %176 = urem i32 %175, 16
  %177 = sub i32 %171, %176
  %178 = load ptr, ptr %9, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %178, i32 0, i32 17
  store i32 %177, ptr %179, align 4, !tbaa !16
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 1, !tbaa !18
  %183 = add i32 %182, 15
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %184, i32 0, i32 2
  %186 = load i32, ptr %185, align 1, !tbaa !18
  %187 = add i32 %186, 15
  %188 = urem i32 %187, 16
  %189 = sub i32 %183, %188
  %190 = load ptr, ptr %9, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %190, i32 0, i32 16
  store i32 %189, ptr %191, align 4, !tbaa !19
  br label %192

192:                                              ; preds = %167, %160, %152
  %193 = load ptr, ptr %10, align 8, !tbaa !5
  %194 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %193)
  %195 = icmp ugt i32 %194, 0
  br i1 %195, label %196, label %216

196:                                              ; preds = %192
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %197, i32 0, i32 9
  %199 = load i16, ptr %198, align 1, !tbaa !14
  %200 = zext i16 %199 to i32
  %201 = and i32 %200, 128
  %202 = icmp sgt i32 %201, 0
  br i1 %202, label %203, label %216

203:                                              ; preds = %196
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %204, i32 0, i32 3
  %206 = load i32, ptr %205, align 1, !tbaa !15
  %207 = add i32 %206, 15
  %208 = load ptr, ptr %10, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %208, i32 0, i32 3
  %210 = load i32, ptr %209, align 1, !tbaa !15
  %211 = add i32 %210, 15
  %212 = urem i32 %211, 16
  %213 = sub i32 %207, %212
  %214 = load ptr, ptr %9, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %214, i32 0, i32 17
  store i32 %213, ptr %215, align 4, !tbaa !16
  br label %216

216:                                              ; preds = %203, %196, %192
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %217, i32 0, i32 10
  %219 = load i16, ptr %218, align 1, !tbaa !20
  %220 = zext i16 %219 to i32
  %221 = icmp eq i32 %220, 6
  br i1 %221, label %234, label %222

222:                                              ; preds = %216
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %223, i32 0, i32 10
  %225 = load i16, ptr %224, align 1, !tbaa !20
  %226 = zext i16 %225 to i32
  %227 = icmp eq i32 %226, 35
  br i1 %227, label %234, label %228

228:                                              ; preds = %222
  %229 = load ptr, ptr %10, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %229, i32 0, i32 10
  %231 = load i16, ptr %230, align 1, !tbaa !20
  %232 = zext i16 %231 to i32
  %233 = icmp eq i32 %232, 26
  br i1 %233, label %234, label %256

234:                                              ; preds = %228, %222, %216
  %235 = load ptr, ptr %10, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %235, i32 0, i32 11
  %237 = load i8, ptr %236, align 1, !tbaa !11
  %238 = zext i8 %237 to i32
  %239 = icmp eq i32 %238, 1
  br i1 %239, label %240, label %256

240:                                              ; preds = %234
  %241 = load ptr, ptr %10, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %241, i32 0, i32 9
  %243 = load i16, ptr %242, align 1, !tbaa !14
  %244 = zext i16 %243 to i32
  %245 = and i32 %244, 1
  %246 = icmp eq i32 %245, 0
  br i1 %246, label %247, label %256

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

251:                                              ; preds = %247
  %252 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %254

253:                                              ; preds = %247
  br label %254

254:                                              ; preds = %253, %251
  %255 = phi i32 [ %252, %251 ], [ 1, %253 ]
  call void @libxsmm_handle_error(ptr noundef %248, i32 noundef 90045, ptr noundef @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef @.str, i32 noundef 4008, i32 noundef %255)
  store i32 1, ptr %34, align 4
  br label %1512

256:                                              ; preds = %240, %234, %228
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %257, i32 0, i32 1
  store i32 40, ptr %258, align 4, !tbaa !21
  %259 = load ptr, ptr %8, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %259, i32 0, i32 6
  store i32 41, ptr %260, align 4, !tbaa !23
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %261, i32 0, i32 24
  store i32 42, ptr %262, align 4, !tbaa !24
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %263, i32 0, i32 25
  store i32 43, ptr %264, align 4, !tbaa !25
  %265 = load ptr, ptr %8, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %265, i32 0, i32 35
  store i32 48, ptr %266, align 4, !tbaa !26
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %267, i32 0, i32 36
  store i32 49, ptr %268, align 4, !tbaa !27
  %269 = load ptr, ptr %10, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %269, i32 0, i32 11
  %271 = load i8, ptr %270, align 1, !tbaa !11
  %272 = zext i8 %271 to i32
  %273 = icmp eq i32 %272, 2
  br i1 %273, label %274, label %277

274:                                              ; preds = %256
  %275 = load ptr, ptr %8, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %275, i32 0, i32 2
  store i32 44, ptr %276, align 4, !tbaa !28
  br label %447

277:                                              ; preds = %256
  %278 = load ptr, ptr %10, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %278, i32 0, i32 11
  %280 = load i8, ptr %279, align 1, !tbaa !11
  %281 = zext i8 %280 to i32
  %282 = icmp eq i32 %281, 3
  br i1 %282, label %283, label %288

283:                                              ; preds = %277
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %284, i32 0, i32 2
  store i32 44, ptr %285, align 4, !tbaa !28
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %286, i32 0, i32 3
  store i32 45, ptr %287, align 4, !tbaa !29
  br label %446

288:                                              ; preds = %277
  %289 = load ptr, ptr %10, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %289, i32 0, i32 10
  %291 = load i16, ptr %290, align 1, !tbaa !20
  %292 = zext i16 %291 to i32
  %293 = icmp eq i32 %292, 63
  br i1 %293, label %294, label %297

294:                                              ; preds = %288
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %295, i32 0, i32 7
  store i32 44, ptr %296, align 4, !tbaa !30
  br label %297

297:                                              ; preds = %294, %288
  %298 = load ptr, ptr %10, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %298, i32 0, i32 10
  %300 = load i16, ptr %299, align 1, !tbaa !20
  %301 = zext i16 %300 to i32
  %302 = icmp eq i32 %301, 5
  br i1 %302, label %321, label %303

303:                                              ; preds = %297
  %304 = load ptr, ptr %10, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %304, i32 0, i32 10
  %306 = load i16, ptr %305, align 1, !tbaa !20
  %307 = zext i16 %306 to i32
  %308 = icmp eq i32 %307, 6
  br i1 %308, label %321, label %309

309:                                              ; preds = %303
  %310 = load ptr, ptr %10, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %310, i32 0, i32 10
  %312 = load i16, ptr %311, align 1, !tbaa !20
  %313 = zext i16 %312 to i32
  %314 = icmp eq i32 %313, 34
  br i1 %314, label %321, label %315

315:                                              ; preds = %309
  %316 = load ptr, ptr %10, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %316, i32 0, i32 10
  %318 = load i16, ptr %317, align 1, !tbaa !20
  %319 = zext i16 %318 to i32
  %320 = icmp eq i32 %319, 35
  br i1 %320, label %321, label %324

321:                                              ; preds = %315, %309, %303, %297
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %322, i32 0, i32 9
  store i32 44, ptr %323, align 4, !tbaa !31
  br label %324

324:                                              ; preds = %321, %315
  %325 = load ptr, ptr %10, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %325, i32 0, i32 10
  %327 = load i16, ptr %326, align 1, !tbaa !20
  %328 = zext i16 %327 to i32
  %329 = icmp eq i32 %328, 36
  br i1 %329, label %336, label %330

330:                                              ; preds = %324
  %331 = load ptr, ptr %10, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %331, i32 0, i32 10
  %333 = load i16, ptr %332, align 1, !tbaa !20
  %334 = zext i16 %333 to i32
  %335 = icmp eq i32 %334, 37
  br i1 %335, label %336, label %341

336:                                              ; preds = %330, %324
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %337, i32 0, i32 9
  store i32 44, ptr %338, align 4, !tbaa !31
  %339 = load ptr, ptr %8, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %339, i32 0, i32 10
  store i32 45, ptr %340, align 4, !tbaa !32
  br label %341

341:                                              ; preds = %336, %330
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %342, i32 0, i32 10
  %344 = load i16, ptr %343, align 1, !tbaa !20
  %345 = zext i16 %344 to i32
  %346 = icmp eq i32 %345, 34
  br i1 %346, label %353, label %347

347:                                              ; preds = %341
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %348, i32 0, i32 10
  %350 = load i16, ptr %349, align 1, !tbaa !20
  %351 = zext i16 %350 to i32
  %352 = icmp eq i32 %351, 35
  br i1 %352, label %353, label %356

353:                                              ; preds = %347, %341
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %354, i32 0, i32 10
  store i32 45, ptr %355, align 4, !tbaa !32
  br label %356

356:                                              ; preds = %353, %347
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %357, i32 0, i32 10
  %359 = load i16, ptr %358, align 1, !tbaa !20
  %360 = zext i16 %359 to i32
  %361 = icmp eq i32 %360, 33
  br i1 %361, label %362, label %365

362:                                              ; preds = %356
  %363 = load ptr, ptr %8, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %363, i32 0, i32 11
  store i32 44, ptr %364, align 4, !tbaa !33
  br label %365

365:                                              ; preds = %362, %356
  %366 = load ptr, ptr %10, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %366, i32 0, i32 10
  %368 = load i16, ptr %367, align 1, !tbaa !20
  %369 = zext i16 %368 to i32
  %370 = icmp eq i32 %369, 64
  br i1 %370, label %371, label %376

371:                                              ; preds = %365
  %372 = load ptr, ptr %8, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %372, i32 0, i32 11
  store i32 44, ptr %373, align 4, !tbaa !33
  %374 = load ptr, ptr %8, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %374, i32 0, i32 19
  store i32 46, ptr %375, align 4, !tbaa !34
  br label %376

376:                                              ; preds = %371, %365
  %377 = load ptr, ptr %10, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %377, i32 0, i32 10
  %379 = load i16, ptr %378, align 1, !tbaa !20
  %380 = zext i16 %379 to i32
  %381 = icmp eq i32 %380, 65
  br i1 %381, label %382, label %391

382:                                              ; preds = %376
  %383 = load ptr, ptr %8, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %383, i32 0, i32 11
  store i32 44, ptr %384, align 4, !tbaa !33
  %385 = load ptr, ptr %8, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %385, i32 0, i32 12
  store i32 45, ptr %386, align 4, !tbaa !35
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %387, i32 0, i32 19
  store i32 46, ptr %388, align 4, !tbaa !34
  %389 = load ptr, ptr %8, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %389, i32 0, i32 22
  store i32 47, ptr %390, align 4, !tbaa !36
  br label %391

391:                                              ; preds = %382, %376
  %392 = load ptr, ptr %10, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %392, i32 0, i32 10
  %394 = load i16, ptr %393, align 1, !tbaa !20
  %395 = zext i16 %394 to i32
  %396 = icmp eq i32 %395, 25
  br i1 %396, label %403, label %397

397:                                              ; preds = %391
  %398 = load ptr, ptr %10, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %398, i32 0, i32 10
  %400 = load i16, ptr %399, align 1, !tbaa !20
  %401 = zext i16 %400 to i32
  %402 = icmp eq i32 %401, 26
  br i1 %402, label %403, label %420

403:                                              ; preds = %397, %391
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %404, i32 0, i32 13
  store i32 44, ptr %405, align 4, !tbaa !37
  %406 = load ptr, ptr %8, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %406, i32 0, i32 14
  store i32 45, ptr %407, align 4, !tbaa !38
  %408 = load ptr, ptr %10, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %408, i32 0, i32 10
  %410 = load i16, ptr %409, align 1, !tbaa !20
  %411 = zext i16 %410 to i32
  %412 = icmp eq i32 %411, 25
  br i1 %412, label %413, label %416

413:                                              ; preds = %403
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %414, i32 0, i32 15
  store i32 46, ptr %415, align 4, !tbaa !39
  br label %419

416:                                              ; preds = %403
  %417 = load ptr, ptr %8, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %417, i32 0, i32 15
  store i32 127, ptr %418, align 4, !tbaa !39
  br label %419

419:                                              ; preds = %416, %413
  br label %427

420:                                              ; preds = %397
  %421 = load ptr, ptr %8, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %421, i32 0, i32 13
  store i32 127, ptr %422, align 4, !tbaa !37
  %423 = load ptr, ptr %8, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %423, i32 0, i32 14
  store i32 127, ptr %424, align 4, !tbaa !38
  %425 = load ptr, ptr %8, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %425, i32 0, i32 15
  store i32 127, ptr %426, align 4, !tbaa !39
  br label %427

427:                                              ; preds = %420, %419
  %428 = load ptr, ptr %10, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %428, i32 0, i32 10
  %430 = load i16, ptr %429, align 1, !tbaa !20
  %431 = zext i16 %430 to i32
  %432 = icmp eq i32 %431, 42
  br i1 %432, label %439, label %433

433:                                              ; preds = %427
  %434 = load ptr, ptr %10, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %434, i32 0, i32 10
  %436 = load i16, ptr %435, align 1, !tbaa !20
  %437 = zext i16 %436 to i32
  %438 = icmp eq i32 %437, 43
  br i1 %438, label %439, label %442

439:                                              ; preds = %433, %427
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %440, i32 0, i32 34
  store i32 44, ptr %441, align 4, !tbaa !40
  br label %445

442:                                              ; preds = %433
  %443 = load ptr, ptr %8, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %443, i32 0, i32 34
  store i32 127, ptr %444, align 4, !tbaa !40
  br label %445

445:                                              ; preds = %442, %439
  br label %446

446:                                              ; preds = %445, %283
  br label %447

447:                                              ; preds = %446, %274
  %448 = load ptr, ptr %10, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %448, i32 0, i32 11
  %450 = load i8, ptr %449, align 1, !tbaa !11
  %451 = zext i8 %450 to i32
  %452 = icmp eq i32 %451, 1
  br i1 %452, label %453, label %806

453:                                              ; preds = %447
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = load ptr, ptr %8, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %455, i32 0, i32 0
  %457 = load i32, ptr %456, align 4, !tbaa !41
  %458 = load i32, ptr %30, align 4, !tbaa !9
  %459 = load ptr, ptr %8, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %459, i32 0, i32 1
  %461 = load i32, ptr %460, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %454, i32 noundef -1186988026, i32 noundef %457, i32 noundef 127, i32 noundef %458, i32 noundef %461)
  %462 = load ptr, ptr %6, align 8, !tbaa !5
  %463 = load ptr, ptr %8, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %463, i32 0, i32 0
  %465 = load i32, ptr %464, align 4, !tbaa !41
  %466 = load i32, ptr %31, align 4, !tbaa !9
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %467, i32 0, i32 6
  %469 = load i32, ptr %468, align 4, !tbaa !23
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %462, i32 noundef -1186988026, i32 noundef %465, i32 noundef 127, i32 noundef %466, i32 noundef %469)
  %470 = load ptr, ptr %10, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %470, i32 0, i32 10
  %472 = load i16, ptr %471, align 1, !tbaa !20
  %473 = zext i16 %472 to i32
  %474 = icmp eq i32 %473, 63
  br i1 %474, label %475, label %485

475:                                              ; preds = %453
  %476 = load ptr, ptr %6, align 8, !tbaa !5
  %477 = load ptr, ptr %8, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %477, i32 0, i32 0
  %479 = load i32, ptr %478, align 4, !tbaa !41
  %480 = load i32, ptr %31, align 4, !tbaa !9
  %481 = add nsw i32 %480, 8
  %482 = load ptr, ptr %8, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %482, i32 0, i32 7
  %484 = load i32, ptr %483, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %476, i32 noundef -1186988026, i32 noundef %479, i32 noundef 127, i32 noundef %481, i32 noundef %484)
  br label %805

485:                                              ; preds = %453
  %486 = load ptr, ptr %10, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %486, i32 0, i32 10
  %488 = load i16, ptr %487, align 1, !tbaa !20
  %489 = zext i16 %488 to i32
  %490 = icmp eq i32 %489, 5
  br i1 %490, label %491, label %501

491:                                              ; preds = %485
  %492 = load ptr, ptr %6, align 8, !tbaa !5
  %493 = load ptr, ptr %8, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %493, i32 0, i32 0
  %495 = load i32, ptr %494, align 4, !tbaa !41
  %496 = load i32, ptr %31, align 4, !tbaa !9
  %497 = add nsw i32 %496, 8
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %498, i32 0, i32 9
  %500 = load i32, ptr %499, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %492, i32 noundef -1186988026, i32 noundef %495, i32 noundef 127, i32 noundef %497, i32 noundef %500)
  br label %804

501:                                              ; preds = %485
  %502 = load ptr, ptr %10, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %502, i32 0, i32 10
  %504 = load i16, ptr %503, align 1, !tbaa !20
  %505 = zext i16 %504 to i32
  %506 = icmp eq i32 %505, 6
  br i1 %506, label %507, label %517

507:                                              ; preds = %501
  %508 = load ptr, ptr %6, 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 0
  %511 = load i32, ptr %510, align 4, !tbaa !41
  %512 = load i32, ptr %30, align 4, !tbaa !9
  %513 = add nsw i32 %512, 8
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %514, i32 0, i32 9
  %516 = load i32, ptr %515, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %508, i32 noundef -1186988026, i32 noundef %511, i32 noundef 127, i32 noundef %513, i32 noundef %516)
  br label %803

517:                                              ; preds = %501
  %518 = load ptr, ptr %10, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %518, i32 0, i32 10
  %520 = load i16, ptr %519, align 1, !tbaa !20
  %521 = zext i16 %520 to i32
  %522 = icmp eq i32 %521, 36
  br i1 %522, label %523, label %534

523:                                              ; preds = %517
  %524 = load ptr, ptr %6, align 8, !tbaa !5
  %525 = load ptr, ptr %8, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %525, i32 0, i32 0
  %527 = load i32, ptr %526, align 4, !tbaa !41
  %528 = load ptr, ptr %8, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %528, i32 0, i32 10
  %530 = load i32, ptr %529, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %524, i32 noundef -1186988026, i32 noundef %527, i32 noundef 127, i32 noundef 0, i32 noundef %530)
  %531 = load ptr, ptr %8, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %531, i32 0, i32 10
  %533 = load i32, ptr %532, align 4, !tbaa !32
  store i32 %533, ptr %29, align 4, !tbaa !9
  br label %802

534:                                              ; preds = %517
  %535 = load ptr, ptr %10, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %535, i32 0, i32 10
  %537 = load i16, ptr %536, align 1, !tbaa !20
  %538 = zext i16 %537 to i32
  %539 = icmp eq i32 %538, 37
  br i1 %539, label %540, label %560

540:                                              ; preds = %534
  %541 = load ptr, ptr %6, align 8, !tbaa !5
  %542 = load ptr, ptr %8, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %542, i32 0, i32 0
  %544 = load i32, ptr %543, align 4, !tbaa !41
  %545 = load i32, ptr %30, align 4, !tbaa !9
  %546 = add nsw i32 %545, 8
  %547 = load ptr, ptr %8, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %547, i32 0, i32 9
  %549 = load i32, ptr %548, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %541, i32 noundef -1186988026, i32 noundef %544, i32 noundef 127, i32 noundef %546, i32 noundef %549)
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  %551 = load ptr, ptr %8, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %551, i32 0, i32 0
  %553 = load i32, ptr %552, align 4, !tbaa !41
  %554 = load ptr, ptr %8, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %554, i32 0, i32 10
  %556 = load i32, ptr %555, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %550, i32 noundef -1186988026, i32 noundef %553, i32 noundef 127, i32 noundef 0, i32 noundef %556)
  %557 = load ptr, ptr %8, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %557, i32 0, i32 10
  %559 = load i32, ptr %558, align 4, !tbaa !32
  store i32 %559, ptr %29, align 4, !tbaa !9
  br label %801

560:                                              ; preds = %534
  %561 = load ptr, ptr %10, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %561, i32 0, i32 10
  %563 = load i16, ptr %562, align 1, !tbaa !20
  %564 = zext i16 %563 to i32
  %565 = icmp eq i32 %564, 34
  br i1 %565, label %566, label %586

566:                                              ; preds = %560
  %567 = load ptr, ptr %6, align 8, !tbaa !5
  %568 = load ptr, ptr %8, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %568, i32 0, i32 0
  %570 = load i32, ptr %569, align 4, !tbaa !41
  %571 = load ptr, ptr %8, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %571, i32 0, i32 10
  %573 = load i32, ptr %572, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %567, i32 noundef -1186988026, i32 noundef %570, i32 noundef 127, i32 noundef 0, i32 noundef %573)
  %574 = load ptr, ptr %6, align 8, !tbaa !5
  %575 = load ptr, ptr %8, align 8, !tbaa !5
  %576 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %575, i32 0, i32 0
  %577 = load i32, ptr %576, align 4, !tbaa !41
  %578 = load i32, ptr %31, align 4, !tbaa !9
  %579 = add nsw i32 %578, 8
  %580 = load ptr, ptr %8, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %580, i32 0, i32 9
  %582 = load i32, ptr %581, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %574, i32 noundef -1186988026, i32 noundef %577, i32 noundef 127, i32 noundef %579, i32 noundef %582)
  %583 = load ptr, ptr %8, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %583, i32 0, i32 10
  %585 = load i32, ptr %584, align 4, !tbaa !32
  store i32 %585, ptr %29, align 4, !tbaa !9
  br label %800

586:                                              ; preds = %560
  %587 = load ptr, ptr %10, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %587, i32 0, i32 10
  %589 = load i16, ptr %588, align 1, !tbaa !20
  %590 = zext i16 %589 to i32
  %591 = icmp eq i32 %590, 35
  br i1 %591, label %592, label %612

592:                                              ; preds = %586
  %593 = load ptr, ptr %6, align 8, !tbaa !5
  %594 = load ptr, ptr %8, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %594, i32 0, i32 0
  %596 = load i32, ptr %595, align 4, !tbaa !41
  %597 = load i32, ptr %30, align 4, !tbaa !9
  %598 = add nsw i32 %597, 8
  %599 = load ptr, ptr %8, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %599, i32 0, i32 9
  %601 = load i32, ptr %600, align 4, !tbaa !31
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %593, i32 noundef -1186988026, i32 noundef %596, i32 noundef 127, i32 noundef %598, i32 noundef %601)
  %602 = load ptr, ptr %6, align 8, !tbaa !5
  %603 = load ptr, ptr %8, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %603, i32 0, i32 0
  %605 = load i32, ptr %604, align 4, !tbaa !41
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %606, i32 0, i32 10
  %608 = load i32, ptr %607, align 4, !tbaa !32
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %602, i32 noundef -1186988026, i32 noundef %605, i32 noundef 127, i32 noundef 0, i32 noundef %608)
  %609 = load ptr, ptr %8, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %609, i32 0, i32 10
  %611 = load i32, ptr %610, align 4, !tbaa !32
  store i32 %611, ptr %29, align 4, !tbaa !9
  br label %799

612:                                              ; preds = %586
  %613 = load ptr, ptr %10, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %613, i32 0, i32 10
  %615 = load i16, ptr %614, align 1, !tbaa !20
  %616 = zext i16 %615 to i32
  %617 = icmp eq i32 %616, 33
  br i1 %617, label %618, label %635

618:                                              ; preds = %612
  %619 = load ptr, ptr %6, align 8, !tbaa !5
  %620 = load ptr, ptr %8, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %620, i32 0, i32 0
  %622 = load i32, ptr %621, align 4, !tbaa !41
  %623 = load i32, ptr %31, align 4, !tbaa !9
  %624 = add nsw i32 %623, 8
  %625 = load ptr, ptr %8, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %625, i32 0, i32 11
  %627 = load i32, ptr %626, align 4, !tbaa !33
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %619, i32 noundef -1186988026, i32 noundef %622, i32 noundef 127, i32 noundef %624, i32 noundef %627)
  %628 = load ptr, ptr %6, align 8, !tbaa !5
  %629 = load ptr, ptr %8, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %629, i32 0, i32 11
  %631 = load i32, ptr %630, align 4, !tbaa !33
  %632 = load ptr, ptr %8, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %632, i32 0, i32 11
  %634 = load i32, ptr %633, align 4, !tbaa !33
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %628, i32 noundef -1186988026, i32 noundef %631, i32 noundef 127, i32 noundef 0, i32 noundef %634)
  br label %798

635:                                              ; preds = %612
  %636 = load ptr, ptr %10, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %636, i32 0, i32 10
  %638 = load i16, ptr %637, align 1, !tbaa !20
  %639 = zext i16 %638 to i32
  %640 = icmp eq i32 %639, 64
  br i1 %640, label %641, label %654

641:                                              ; preds = %635
  %642 = load ptr, ptr %6, align 8, !tbaa !5
  %643 = load ptr, ptr %8, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %643, i32 0, i32 0
  %645 = load i32, ptr %644, align 4, !tbaa !41
  %646 = load i32, ptr %31, align 4, !tbaa !9
  %647 = add nsw i32 %646, 8
  %648 = load ptr, ptr %8, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %648, i32 0, i32 11
  %650 = load i32, ptr %649, align 4, !tbaa !33
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %642, i32 noundef -1186988026, i32 noundef %645, i32 noundef 127, i32 noundef %647, i32 noundef %650)
  %651 = load ptr, ptr %8, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %651, i32 0, i32 11
  %653 = load i32, ptr %652, align 4, !tbaa !33
  store i32 %653, ptr %28, align 4, !tbaa !9
  br label %797

654:                                              ; preds = %635
  %655 = load ptr, ptr %10, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %655, i32 0, i32 10
  %657 = load i16, ptr %656, align 1, !tbaa !20
  %658 = zext i16 %657 to i32
  %659 = icmp eq i32 %658, 65
  br i1 %659, label %660, label %676

660:                                              ; preds = %654
  %661 = load ptr, ptr %6, align 8, !tbaa !5
  %662 = load ptr, ptr %8, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %662, i32 0, i32 0
  %664 = load i32, ptr %663, align 4, !tbaa !41
  %665 = load i32, ptr %31, align 4, !tbaa !9
  %666 = add nsw i32 %665, 8
  %667 = load ptr, ptr %8, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %667, i32 0, i32 11
  %669 = load i32, ptr %668, align 4, !tbaa !33
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %661, i32 noundef -1186988026, i32 noundef %664, i32 noundef 127, i32 noundef %666, i32 noundef %669)
  %670 = load ptr, ptr %8, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %670, i32 0, i32 11
  %672 = load i32, ptr %671, align 4, !tbaa !33
  store i32 %672, ptr %28, align 4, !tbaa !9
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %673, i32 0, i32 12
  %675 = load i32, ptr %674, align 4, !tbaa !35
  store i32 %675, ptr %29, align 4, !tbaa !9
  br label %796

676:                                              ; preds = %654
  %677 = load ptr, ptr %10, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %677, i32 0, i32 10
  %679 = load i16, ptr %678, align 1, !tbaa !20
  %680 = zext i16 %679 to i32
  %681 = icmp eq i32 %680, 25
  br i1 %681, label %682, label %712

682:                                              ; preds = %676
  %683 = load ptr, ptr %6, align 8, !tbaa !5
  %684 = load ptr, ptr %8, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %684, i32 0, i32 0
  %686 = load i32, ptr %685, align 4, !tbaa !41
  %687 = load ptr, ptr %8, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %687, i32 0, i32 15
  %689 = load i32, ptr %688, align 4, !tbaa !39
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %683, i32 noundef -1186988026, i32 noundef %686, i32 noundef 127, i32 noundef 8, i32 noundef %689)
  %690 = load ptr, ptr %6, align 8, !tbaa !5
  %691 = load ptr, ptr %8, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %691, i32 0, i32 0
  %693 = load i32, ptr %692, align 4, !tbaa !41
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %694, i32 0, i32 14
  %696 = load i32, ptr %695, align 4, !tbaa !38
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %690, i32 noundef -1186988026, i32 noundef %693, i32 noundef 127, i32 noundef 0, i32 noundef %696)
  %697 = load ptr, ptr %6, align 8, !tbaa !5
  %698 = load ptr, ptr %8, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %698, i32 0, i32 0
  %700 = load i32, ptr %699, align 4, !tbaa !41
  %701 = load i32, ptr %31, align 4, !tbaa !9
  %702 = add nsw i32 %701, 8
  %703 = load ptr, ptr %8, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %703, i32 0, i32 13
  %705 = load i32, ptr %704, align 4, !tbaa !37
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %697, i32 noundef -1186988026, i32 noundef %700, i32 noundef 127, i32 noundef %702, i32 noundef %705)
  %706 = load ptr, ptr %8, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %706, i32 0, i32 15
  %708 = load i32, ptr %707, align 4, !tbaa !39
  store i32 %708, ptr %28, align 4, !tbaa !9
  %709 = load ptr, ptr %8, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %709, i32 0, i32 14
  %711 = load i32, ptr %710, align 4, !tbaa !38
  store i32 %711, ptr %29, align 4, !tbaa !9
  br label %795

712:                                              ; preds = %676
  %713 = load ptr, ptr %10, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %713, i32 0, i32 10
  %715 = load i16, ptr %714, align 1, !tbaa !20
  %716 = zext i16 %715 to i32
  %717 = icmp eq i32 %716, 26
  br i1 %717, label %718, label %738

718:                                              ; preds = %712
  %719 = load ptr, ptr %6, align 8, !tbaa !5
  %720 = load ptr, ptr %8, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %720, i32 0, i32 0
  %722 = load i32, ptr %721, align 4, !tbaa !41
  %723 = load i32, ptr %30, align 4, !tbaa !9
  %724 = add nsw i32 %723, 8
  %725 = load ptr, ptr %8, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %725, i32 0, i32 13
  %727 = load i32, ptr %726, align 4, !tbaa !37
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %719, i32 noundef -1186988026, i32 noundef %722, i32 noundef 127, i32 noundef %724, i32 noundef %727)
  %728 = load ptr, ptr %6, align 8, !tbaa !5
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %729, i32 0, i32 0
  %731 = load i32, ptr %730, align 4, !tbaa !41
  %732 = load ptr, ptr %8, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %732, i32 0, i32 14
  %734 = load i32, ptr %733, align 4, !tbaa !38
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %728, i32 noundef -1186988026, i32 noundef %731, i32 noundef 127, i32 noundef 0, i32 noundef %734)
  %735 = load ptr, ptr %8, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %735, i32 0, i32 14
  %737 = load i32, ptr %736, align 4, !tbaa !38
  store i32 %737, ptr %29, align 4, !tbaa !9
  br label %794

738:                                              ; preds = %712
  %739 = load ptr, ptr %10, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %739, i32 0, i32 10
  %741 = load i16, ptr %740, align 1, !tbaa !20
  %742 = zext i16 %741 to i32
  %743 = icmp eq i32 %742, 42
  br i1 %743, label %744, label %765

744:                                              ; preds = %738
  %745 = load ptr, ptr %10, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %745, i32 0, i32 9
  %747 = load i16, ptr %746, align 1, !tbaa !14
  %748 = zext i16 %747 to i32
  %749 = and i32 %748, 1024
  %750 = icmp eq i32 %749, 0
  br i1 %750, label %751, label %761

751:                                              ; preds = %744
  %752 = load ptr, ptr %6, align 8, !tbaa !5
  %753 = load ptr, ptr %8, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %753, i32 0, i32 0
  %755 = load i32, ptr %754, align 4, !tbaa !41
  %756 = load i32, ptr %30, align 4, !tbaa !9
  %757 = add nsw i32 %756, 8
  %758 = load ptr, ptr %8, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %758, i32 0, i32 34
  %760 = load i32, ptr %759, align 4, !tbaa !40
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %752, i32 noundef -1186988026, i32 noundef %755, i32 noundef 127, i32 noundef %757, i32 noundef %760)
  br label %761

761:                                              ; preds = %751, %744
  %762 = load ptr, ptr %8, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %762, i32 0, i32 34
  %764 = load i32, ptr %763, align 4, !tbaa !40
  store i32 %764, ptr %28, align 4, !tbaa !9
  br label %793

765:                                              ; preds = %738
  %766 = load ptr, ptr %10, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %766, i32 0, i32 10
  %768 = load i16, ptr %767, align 1, !tbaa !20
  %769 = zext i16 %768 to i32
  %770 = icmp eq i32 %769, 43
  br i1 %770, label %771, label %792

771:                                              ; preds = %765
  %772 = load ptr, ptr %10, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %772, i32 0, i32 9
  %774 = load i16, ptr %773, align 1, !tbaa !14
  %775 = zext i16 %774 to i32
  %776 = and i32 %775, 1024
  %777 = icmp eq i32 %776, 0
  br i1 %777, label %778, label %788

778:                                              ; preds = %771
  %779 = load ptr, ptr %6, align 8, !tbaa !5
  %780 = load ptr, ptr %8, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %780, i32 0, i32 0
  %782 = load i32, ptr %781, align 4, !tbaa !41
  %783 = load i32, ptr %30, align 4, !tbaa !9
  %784 = add nsw i32 %783, 8
  %785 = load ptr, ptr %8, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %785, i32 0, i32 34
  %787 = load i32, ptr %786, align 4, !tbaa !40
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %779, i32 noundef -1186988026, i32 noundef %782, i32 noundef 127, i32 noundef %784, i32 noundef %787)
  br label %788

788:                                              ; preds = %778, %771
  %789 = load ptr, ptr %8, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %789, i32 0, i32 34
  %791 = load i32, ptr %790, align 4, !tbaa !40
  store i32 %791, ptr %28, align 4, !tbaa !9
  br label %792

792:                                              ; preds = %788, %765
  br label %793

793:                                              ; preds = %792, %761
  br label %794

794:                                              ; preds = %793, %718
  br label %795

795:                                              ; preds = %794, %682
  br label %796

796:                                              ; preds = %795, %660
  br label %797

797:                                              ; preds = %796, %641
  br label %798

798:                                              ; preds = %797, %618
  br label %799

799:                                              ; preds = %798, %592
  br label %800

800:                                              ; preds = %799, %566
  br label %801

801:                                              ; preds = %800, %540
  br label %802

802:                                              ; preds = %801, %523
  br label %803

803:                                              ; preds = %802, %507
  br label %804

804:                                              ; preds = %803, %491
  br label %805

805:                                              ; preds = %804, %475
  br label %887

806:                                              ; preds = %447
  %807 = load ptr, ptr %10, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %807, i32 0, i32 11
  %809 = load i8, ptr %808, align 1, !tbaa !11
  %810 = zext i8 %809 to i32
  %811 = icmp eq i32 %810, 2
  br i1 %811, label %812, label %837

812:                                              ; preds = %806
  %813 = load ptr, ptr %6, align 8, !tbaa !5
  %814 = load ptr, ptr %8, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %814, i32 0, i32 0
  %816 = load i32, ptr %815, align 4, !tbaa !41
  %817 = load i32, ptr %30, align 4, !tbaa !9
  %818 = load ptr, ptr %8, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %818, i32 0, i32 1
  %820 = load i32, ptr %819, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %813, i32 noundef -1186988026, i32 noundef %816, i32 noundef 127, i32 noundef %817, i32 noundef %820)
  %821 = load ptr, ptr %6, align 8, !tbaa !5
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %822, i32 0, i32 0
  %824 = load i32, ptr %823, align 4, !tbaa !41
  %825 = load i32, ptr %31, align 4, !tbaa !9
  %826 = load ptr, ptr %8, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %826, i32 0, i32 2
  %828 = load i32, ptr %827, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %821, i32 noundef -1186988026, i32 noundef %824, i32 noundef 127, i32 noundef %825, i32 noundef %828)
  %829 = load ptr, ptr %6, align 8, !tbaa !5
  %830 = load ptr, ptr %8, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %830, i32 0, i32 0
  %832 = load i32, ptr %831, align 4, !tbaa !41
  %833 = load i32, ptr %32, align 4, !tbaa !9
  %834 = load ptr, ptr %8, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %834, i32 0, i32 6
  %836 = load i32, ptr %835, align 4, !tbaa !23
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %829, i32 noundef -1186988026, i32 noundef %832, i32 noundef 127, i32 noundef %833, i32 noundef %836)
  br label %886

837:                                              ; preds = %806
  %838 = load ptr, ptr %10, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %838, i32 0, i32 11
  %840 = load i8, ptr %839, align 1, !tbaa !11
  %841 = zext i8 %840 to i32
  %842 = icmp eq i32 %841, 3
  br i1 %842, label %843, label %876

843:                                              ; preds = %837
  %844 = load ptr, ptr %6, align 8, !tbaa !5
  %845 = load ptr, ptr %8, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %845, i32 0, i32 0
  %847 = load i32, ptr %846, align 4, !tbaa !41
  %848 = load i32, ptr %30, align 4, !tbaa !9
  %849 = load ptr, ptr %8, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %849, i32 0, i32 1
  %851 = load i32, ptr %850, align 4, !tbaa !21
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %844, i32 noundef -1186988026, i32 noundef %847, i32 noundef 127, i32 noundef %848, i32 noundef %851)
  %852 = load ptr, ptr %6, align 8, !tbaa !5
  %853 = load ptr, ptr %8, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %853, i32 0, i32 0
  %855 = load i32, ptr %854, align 4, !tbaa !41
  %856 = load i32, ptr %31, align 4, !tbaa !9
  %857 = load ptr, ptr %8, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %857, i32 0, i32 2
  %859 = load i32, ptr %858, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %852, i32 noundef -1186988026, i32 noundef %855, i32 noundef 127, i32 noundef %856, i32 noundef %859)
  %860 = load ptr, ptr %6, align 8, !tbaa !5
  %861 = load ptr, ptr %8, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %861, i32 0, i32 0
  %863 = load i32, ptr %862, align 4, !tbaa !41
  %864 = load i32, ptr %32, align 4, !tbaa !9
  %865 = load ptr, ptr %8, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %865, i32 0, i32 3
  %867 = load i32, ptr %866, align 4, !tbaa !29
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %860, i32 noundef -1186988026, i32 noundef %863, i32 noundef 127, i32 noundef %864, i32 noundef %867)
  %868 = load ptr, ptr %6, align 8, !tbaa !5
  %869 = load ptr, ptr %8, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %869, i32 0, i32 0
  %871 = load i32, ptr %870, align 4, !tbaa !41
  %872 = load i32, ptr %33, align 4, !tbaa !9
  %873 = load ptr, ptr %8, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %873, i32 0, i32 6
  %875 = load i32, ptr %874, align 4, !tbaa !23
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %868, i32 noundef -1186988026, i32 noundef %871, i32 noundef 127, i32 noundef %872, i32 noundef %875)
  br label %885

876:                                              ; preds = %837
  %877 = load ptr, ptr %6, align 8, !tbaa !5
  %878 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %879 = icmp ult i32 1, %878
  br i1 %879, label %880, label %882

880:                                              ; preds = %876
  %881 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %883

882:                                              ; preds = %876
  br label %883

883:                                              ; preds = %882, %880
  %884 = phi i32 [ %881, %880 ], [ 1, %882 ]
  call void @libxsmm_handle_error(ptr noundef %877, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef @.str, i32 noundef 4169, i32 noundef %884)
  br label %885

885:                                              ; preds = %883, %843
  br label %886

886:                                              ; preds = %885, %812
  br label %887

887:                                              ; preds = %886, %805
  %888 = load ptr, ptr %6, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %888, i32 0, i32 6
  %890 = load i32, ptr %889, align 4, !tbaa !42
  %891 = icmp eq i32 %890, 2501
  br i1 %891, label %892, label %894

892:                                              ; preds = %887
  %893 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_sm(ptr noundef %893, i32 noundef -721205377)
  br label %894

894:                                              ; preds = %892, %887
  %895 = load ptr, ptr %6, align 8, !tbaa !5
  %896 = load ptr, ptr %9, align 8, !tbaa !5
  %897 = load ptr, ptr %10, align 8, !tbaa !5
  %898 = load ptr, ptr %8, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %898, i32 0, i32 35
  %900 = load i32, ptr %899, align 4, !tbaa !26
  %901 = load ptr, ptr %8, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %901, i32 0, i32 36
  %903 = load i32, ptr %902, align 4, !tbaa !27
  %904 = load i32, ptr %28, align 4, !tbaa !9
  %905 = load i32, ptr %29, align 4, !tbaa !9
  call void @libxsmm_configure_aarch64_kernel_vregs_masks(ptr noundef %895, ptr noundef %896, ptr noundef %897, i32 noundef %900, i32 noundef %903, i32 noundef %904, i32 noundef %905)
  %906 = load i32, ptr %26, align 4, !tbaa !9
  %907 = load ptr, ptr %9, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %907, i32 0, i32 18
  %909 = load i32, ptr %908, align 4, !tbaa !44
  %910 = sub i32 %906, %909
  store i32 %910, ptr %26, align 4, !tbaa !9
  %911 = load ptr, ptr %6, align 8, !tbaa !5
  %912 = load ptr, ptr %10, align 8, !tbaa !5
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %913, i32 0, i32 0
  %915 = load i32, ptr %914, align 1, !tbaa !45
  %916 = load ptr, ptr %10, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %916, i32 0, i32 1
  %918 = load i32, ptr %917, align 1, !tbaa !46
  %919 = load ptr, ptr %9, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %919, i32 0, i32 120
  %921 = load i32, ptr %920, align 4, !tbaa !47
  %922 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_configure_aarch64_M_N_blocking(ptr noundef %911, ptr noundef %912, i32 noundef %915, i32 noundef %918, i32 noundef %921, ptr noundef %12, ptr noundef %16, i32 noundef %922)
  %923 = load ptr, ptr %10, align 8, !tbaa !5
  call void @libxsmm_generator_configure_aarch64_loop_order(ptr noundef %923, ptr noundef %11, ptr noundef %12, ptr noundef %16, ptr noundef %13, ptr noundef %17, ptr noundef %14, ptr noundef %19)
  %924 = load i32, ptr %11, align 4, !tbaa !9
  %925 = load ptr, ptr %9, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %925, i32 0, i32 125
  store i32 %924, ptr %926, align 4, !tbaa !48
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %927

927:                                              ; preds = %1497, %894
  %928 = load i32, ptr %22, align 4, !tbaa !9
  %929 = load i32, ptr %14, align 4, !tbaa !9
  %930 = icmp ne i32 %928, %929
  br i1 %930, label %931, label %1498

931:                                              ; preds = %927
  store i32 0, ptr %23, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %932

932:                                              ; preds = %1154, %931
  %933 = load i32, ptr %23, align 4, !tbaa !9
  %934 = load i32, ptr %19, align 4, !tbaa !9
  %935 = icmp ne i32 %933, %934
  br i1 %935, label %936, label %1155

936:                                              ; preds = %932
  %937 = load i32, ptr %22, align 4, !tbaa !9
  %938 = load i32, ptr %13, align 4, !tbaa !9
  %939 = icmp ult i32 %937, %938
  br i1 %939, label %940, label %942

940:                                              ; preds = %936
  %941 = load i32, ptr %13, align 4, !tbaa !9
  br label %946

942:                                              ; preds = %936
  %943 = load i32, ptr %14, align 4, !tbaa !9
  %944 = load i32, ptr %22, align 4, !tbaa !9
  %945 = sub i32 %943, %944
  br label %946

946:                                              ; preds = %942, %940
  %947 = phi i32 [ %941, %940 ], [ %945, %942 ]
  store i32 %947, ptr %15, align 4, !tbaa !9
  %948 = load i32, ptr %23, align 4, !tbaa !9
  %949 = load i32, ptr %17, align 4, !tbaa !9
  %950 = icmp ult i32 %948, %949
  br i1 %950, label %951, label %953

951:                                              ; preds = %946
  %952 = load i32, ptr %17, align 4, !tbaa !9
  br label %957

953:                                              ; preds = %946
  %954 = load i32, ptr %19, align 4, !tbaa !9
  %955 = load i32, ptr %23, align 4, !tbaa !9
  %956 = sub i32 %954, %955
  br label %957

957:                                              ; preds = %953, %951
  %958 = phi i32 [ %952, %951 ], [ %956, %953 ]
  store i32 %958, ptr %18, align 4, !tbaa !9
  %959 = load i32, ptr %11, align 4, !tbaa !9
  %960 = icmp eq i32 %959, 1
  br i1 %960, label %961, label %963

961:                                              ; preds = %957
  %962 = load i32, ptr %15, align 4, !tbaa !9
  br label %965

963:                                              ; preds = %957
  %964 = load i32, ptr %18, align 4, !tbaa !9
  br label %965

965:                                              ; preds = %963, %961
  %966 = phi i32 [ %962, %961 ], [ %964, %963 ]
  store i32 %966, ptr %20, align 4, !tbaa !9
  %967 = load i32, ptr %11, align 4, !tbaa !9
  %968 = icmp eq i32 %967, 0
  br i1 %968, label %969, label %971

969:                                              ; preds = %965
  %970 = load i32, ptr %15, align 4, !tbaa !9
  br label %973

971:                                              ; preds = %965
  %972 = load i32, ptr %18, align 4, !tbaa !9
  br label %973

973:                                              ; preds = %971, %969
  %974 = phi i32 [ %970, %969 ], [ %972, %971 ]
  store i32 %974, ptr %21, align 4, !tbaa !9
  %975 = load ptr, ptr %6, align 8, !tbaa !5
  %976 = load ptr, ptr %7, align 8, !tbaa !5
  %977 = load ptr, ptr %8, align 8, !tbaa !5
  %978 = load ptr, ptr %9, align 8, !tbaa !5
  %979 = load ptr, ptr %10, align 8, !tbaa !5
  %980 = load i32, ptr %21, align 4, !tbaa !9
  %981 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_unary_aarch64_binary_2d_microkernel(ptr noundef %975, ptr noundef %976, ptr noundef %977, ptr noundef %978, ptr noundef %979, i32 noundef %980, i32 noundef %981)
  %982 = load i32, ptr %18, align 4, !tbaa !9
  %983 = load i32, ptr %23, align 4, !tbaa !9
  %984 = add i32 %983, %982
  store i32 %984, ptr %23, align 4, !tbaa !9
  %985 = load i32, ptr %23, align 4, !tbaa !9
  %986 = load i32, ptr %19, align 4, !tbaa !9
  %987 = icmp ne i32 %985, %986
  br i1 %987, label %988, label %1154

988:                                              ; preds = %973
  store i32 1, ptr %24, align 4, !tbaa !9
  %989 = load i32, ptr %11, align 4, !tbaa !9
  %990 = icmp eq i32 %989, 1
  %991 = zext i1 %990 to i64
  %992 = select i1 %990, i32 0, i32 1
  store i32 %992, ptr %25, align 4, !tbaa !9
  %993 = load ptr, ptr %6, align 8, !tbaa !5
  %994 = load ptr, ptr %8, align 8, !tbaa !5
  %995 = load ptr, ptr %9, align 8, !tbaa !5
  %996 = load ptr, ptr %10, align 8, !tbaa !5
  %997 = load ptr, ptr %8, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %997, i32 0, i32 1
  %999 = load i32, ptr %998, align 4, !tbaa !21
  %1000 = load i32, ptr %21, align 4, !tbaa !9
  %1001 = load i32, ptr %20, align 4, !tbaa !9
  %1002 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %993, ptr noundef %994, ptr noundef %995, ptr noundef %996, i32 noundef %999, i32 noundef 4096, i32 noundef %1000, i32 noundef %1001, i32 noundef %1002)
  %1003 = load ptr, ptr %6, align 8, !tbaa !5
  %1004 = load ptr, ptr %8, align 8, !tbaa !5
  %1005 = load ptr, ptr %9, align 8, !tbaa !5
  %1006 = load ptr, ptr %10, align 8, !tbaa !5
  %1007 = load ptr, ptr %8, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1007, i32 0, i32 6
  %1009 = load i32, ptr %1008, align 4, !tbaa !23
  %1010 = load i32, ptr %21, align 4, !tbaa !9
  %1011 = load i32, ptr %20, align 4, !tbaa !9
  %1012 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1003, ptr noundef %1004, ptr noundef %1005, ptr noundef %1006, i32 noundef %1009, i32 noundef 4096, i32 noundef %1010, i32 noundef %1011, i32 noundef %1012)
  %1013 = load ptr, ptr %10, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1013, i32 0, i32 11
  %1015 = load i8, ptr %1014, align 1, !tbaa !11
  %1016 = zext i8 %1015 to i32
  %1017 = icmp eq i32 %1016, 1
  br i1 %1017, label %1018, label %1035

1018:                                             ; preds = %988
  %1019 = load ptr, ptr %10, align 8, !tbaa !5
  %1020 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1019, i32 0, i32 10
  %1021 = load i16, ptr %1020, align 1, !tbaa !20
  %1022 = zext i16 %1021 to i32
  %1023 = icmp eq i32 %1022, 63
  br i1 %1023, label %1024, label %1035

1024:                                             ; preds = %1018
  %1025 = load ptr, ptr %6, align 8, !tbaa !5
  %1026 = load ptr, ptr %8, align 8, !tbaa !5
  %1027 = load ptr, ptr %9, align 8, !tbaa !5
  %1028 = load ptr, ptr %10, align 8, !tbaa !5
  %1029 = load ptr, ptr %8, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1029, i32 0, i32 7
  %1031 = load i32, ptr %1030, align 4, !tbaa !30
  %1032 = load i32, ptr %21, align 4, !tbaa !9
  %1033 = load i32, ptr %20, align 4, !tbaa !9
  %1034 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1025, ptr noundef %1026, ptr noundef %1027, ptr noundef %1028, i32 noundef %1031, i32 noundef 4096, i32 noundef %1032, i32 noundef %1033, i32 noundef %1034)
  br label %1035

1035:                                             ; preds = %1024, %1018, %988
  %1036 = load ptr, ptr %10, align 8, !tbaa !5
  %1037 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1036, i32 0, i32 11
  %1038 = load i8, ptr %1037, align 1, !tbaa !11
  %1039 = zext i8 %1038 to i32
  %1040 = icmp eq i32 %1039, 2
  br i1 %1040, label %1047, label %1041

1041:                                             ; preds = %1035
  %1042 = load ptr, ptr %10, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1042, i32 0, i32 11
  %1044 = load i8, ptr %1043, align 1, !tbaa !11
  %1045 = zext i8 %1044 to i32
  %1046 = icmp eq i32 %1045, 3
  br i1 %1046, label %1047, label %1058

1047:                                             ; preds = %1041, %1035
  %1048 = load ptr, ptr %6, align 8, !tbaa !5
  %1049 = load ptr, ptr %8, align 8, !tbaa !5
  %1050 = load ptr, ptr %9, align 8, !tbaa !5
  %1051 = load ptr, ptr %10, align 8, !tbaa !5
  %1052 = load ptr, ptr %8, align 8, !tbaa !5
  %1053 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1052, i32 0, i32 2
  %1054 = load i32, ptr %1053, align 4, !tbaa !28
  %1055 = load i32, ptr %21, align 4, !tbaa !9
  %1056 = load i32, ptr %20, align 4, !tbaa !9
  %1057 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1048, ptr noundef %1049, ptr noundef %1050, ptr noundef %1051, i32 noundef %1054, i32 noundef 4096, i32 noundef %1055, i32 noundef %1056, i32 noundef %1057)
  br label %1058

1058:                                             ; preds = %1047, %1041
  %1059 = load ptr, ptr %10, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1059, i32 0, i32 11
  %1061 = load i8, ptr %1060, align 1, !tbaa !11
  %1062 = zext i8 %1061 to i32
  %1063 = icmp eq i32 %1062, 3
  br i1 %1063, label %1064, label %1075

1064:                                             ; preds = %1058
  %1065 = load ptr, ptr %6, align 8, !tbaa !5
  %1066 = load ptr, ptr %8, align 8, !tbaa !5
  %1067 = load ptr, ptr %9, align 8, !tbaa !5
  %1068 = load ptr, ptr %10, align 8, !tbaa !5
  %1069 = load ptr, ptr %8, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1069, i32 0, i32 3
  %1071 = load i32, ptr %1070, align 4, !tbaa !29
  %1072 = load i32, ptr %21, align 4, !tbaa !9
  %1073 = load i32, ptr %20, align 4, !tbaa !9
  %1074 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1065, ptr noundef %1066, ptr noundef %1067, ptr noundef %1068, i32 noundef %1071, i32 noundef 4096, i32 noundef %1072, i32 noundef %1073, i32 noundef %1074)
  br label %1075

1075:                                             ; preds = %1064, %1058
  %1076 = load ptr, ptr %10, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1076, i32 0, i32 11
  %1078 = load i8, ptr %1077, align 1, !tbaa !11
  %1079 = zext i8 %1078 to i32
  %1080 = icmp eq i32 %1079, 1
  br i1 %1080, label %1081, label %1153

1081:                                             ; preds = %1075
  %1082 = load ptr, ptr %10, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1082, i32 0, i32 10
  %1084 = load i16, ptr %1083, align 1, !tbaa !20
  %1085 = zext i16 %1084 to i32
  %1086 = icmp eq i32 %1085, 5
  br i1 %1086, label %1117, label %1087

1087:                                             ; preds = %1081
  %1088 = load ptr, ptr %10, align 8, !tbaa !5
  %1089 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1088, i32 0, i32 10
  %1090 = load i16, ptr %1089, align 1, !tbaa !20
  %1091 = zext i16 %1090 to i32
  %1092 = icmp eq i32 %1091, 6
  br i1 %1092, label %1117, label %1093

1093:                                             ; preds = %1087
  %1094 = load ptr, ptr %10, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1094, i32 0, i32 10
  %1096 = load i16, ptr %1095, align 1, !tbaa !20
  %1097 = zext i16 %1096 to i32
  %1098 = icmp eq i32 %1097, 34
  br i1 %1098, label %1117, label %1099

1099:                                             ; preds = %1093
  %1100 = load ptr, ptr %10, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1100, i32 0, i32 10
  %1102 = load i16, ptr %1101, align 1, !tbaa !20
  %1103 = zext i16 %1102 to i32
  %1104 = icmp eq i32 %1103, 35
  br i1 %1104, label %1117, label %1105

1105:                                             ; preds = %1099
  %1106 = load ptr, ptr %10, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1106, i32 0, i32 10
  %1108 = load i16, ptr %1107, align 1, !tbaa !20
  %1109 = zext i16 %1108 to i32
  %1110 = icmp eq i32 %1109, 36
  br i1 %1110, label %1117, label %1111

1111:                                             ; preds = %1105
  %1112 = load ptr, ptr %10, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1112, i32 0, i32 10
  %1114 = load i16, ptr %1113, align 1, !tbaa !20
  %1115 = zext i16 %1114 to i32
  %1116 = icmp eq i32 %1115, 37
  br i1 %1116, label %1117, label %1128

1117:                                             ; preds = %1111, %1105, %1099, %1093, %1087, %1081
  %1118 = load ptr, ptr %6, align 8, !tbaa !5
  %1119 = load ptr, ptr %8, align 8, !tbaa !5
  %1120 = load ptr, ptr %9, align 8, !tbaa !5
  %1121 = load ptr, ptr %10, align 8, !tbaa !5
  %1122 = load ptr, ptr %8, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1122, i32 0, i32 9
  %1124 = load i32, ptr %1123, align 4, !tbaa !31
  %1125 = load i32, ptr %21, align 4, !tbaa !9
  %1126 = load i32, ptr %20, align 4, !tbaa !9
  %1127 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1118, ptr noundef %1119, ptr noundef %1120, ptr noundef %1121, i32 noundef %1124, i32 noundef 4096, i32 noundef %1125, i32 noundef %1126, i32 noundef %1127)
  br label %1152

1128:                                             ; preds = %1111
  %1129 = load ptr, ptr %10, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1129, i32 0, i32 10
  %1131 = load i16, ptr %1130, align 1, !tbaa !20
  %1132 = zext i16 %1131 to i32
  %1133 = icmp eq i32 %1132, 25
  br i1 %1133, label %1140, label %1134

1134:                                             ; preds = %1128
  %1135 = load ptr, ptr %10, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1135, i32 0, i32 10
  %1137 = load i16, ptr %1136, align 1, !tbaa !20
  %1138 = zext i16 %1137 to i32
  %1139 = icmp eq i32 %1138, 26
  br i1 %1139, label %1140, label %1151

1140:                                             ; preds = %1134, %1128
  %1141 = load ptr, ptr %6, align 8, !tbaa !5
  %1142 = load ptr, ptr %8, align 8, !tbaa !5
  %1143 = load ptr, ptr %9, align 8, !tbaa !5
  %1144 = load ptr, ptr %10, align 8, !tbaa !5
  %1145 = load ptr, ptr %8, align 8, !tbaa !5
  %1146 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1145, i32 0, i32 13
  %1147 = load i32, ptr %1146, align 4, !tbaa !37
  %1148 = load i32, ptr %21, align 4, !tbaa !9
  %1149 = load i32, ptr %20, align 4, !tbaa !9
  %1150 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1141, ptr noundef %1142, ptr noundef %1143, ptr noundef %1144, i32 noundef %1147, i32 noundef 4096, i32 noundef %1148, i32 noundef %1149, i32 noundef %1150)
  br label %1151

1151:                                             ; preds = %1140, %1134
  br label %1152

1152:                                             ; preds = %1151, %1117
  br label %1153

1153:                                             ; preds = %1152, %1075
  br label %1154

1154:                                             ; preds = %1153, %973
  br label %932, !llvm.loop !49

1155:                                             ; preds = %932
  %1156 = load i32, ptr %24, align 4, !tbaa !9
  %1157 = icmp eq i32 %1156, 1
  br i1 %1157, label %1158, label %1324

1158:                                             ; preds = %1155
  %1159 = load i32, ptr %11, align 4, !tbaa !9
  %1160 = icmp eq i32 %1159, 1
  %1161 = zext i1 %1160 to i64
  %1162 = select i1 %1160, i32 0, i32 1
  store i32 %1162, ptr %25, align 4, !tbaa !9
  %1163 = load ptr, ptr %6, align 8, !tbaa !5
  %1164 = load ptr, ptr %8, align 8, !tbaa !5
  %1165 = load ptr, ptr %9, align 8, !tbaa !5
  %1166 = load ptr, ptr %10, align 8, !tbaa !5
  %1167 = load ptr, ptr %8, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1167, i32 0, i32 1
  %1169 = load i32, ptr %1168, align 4, !tbaa !21
  %1170 = load i32, ptr %21, align 4, !tbaa !9
  %1171 = load i32, ptr %20, align 4, !tbaa !9
  %1172 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1163, ptr noundef %1164, ptr noundef %1165, ptr noundef %1166, i32 noundef %1169, i32 noundef 4097, i32 noundef %1170, i32 noundef %1171, i32 noundef %1172)
  %1173 = load ptr, ptr %6, align 8, !tbaa !5
  %1174 = load ptr, ptr %8, align 8, !tbaa !5
  %1175 = load ptr, ptr %9, align 8, !tbaa !5
  %1176 = load ptr, ptr %10, align 8, !tbaa !5
  %1177 = load ptr, ptr %8, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1177, i32 0, i32 6
  %1179 = load i32, ptr %1178, align 4, !tbaa !23
  %1180 = load i32, ptr %21, align 4, !tbaa !9
  %1181 = load i32, ptr %20, align 4, !tbaa !9
  %1182 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1173, ptr noundef %1174, ptr noundef %1175, ptr noundef %1176, i32 noundef %1179, i32 noundef 4097, i32 noundef %1180, i32 noundef %1181, i32 noundef %1182)
  %1183 = load ptr, ptr %10, align 8, !tbaa !5
  %1184 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1183, i32 0, i32 11
  %1185 = load i8, ptr %1184, align 1, !tbaa !11
  %1186 = zext i8 %1185 to i32
  %1187 = icmp eq i32 %1186, 1
  br i1 %1187, label %1188, label %1205

1188:                                             ; preds = %1158
  %1189 = load ptr, ptr %10, align 8, !tbaa !5
  %1190 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1189, i32 0, i32 10
  %1191 = load i16, ptr %1190, align 1, !tbaa !20
  %1192 = zext i16 %1191 to i32
  %1193 = icmp eq i32 %1192, 63
  br i1 %1193, label %1194, label %1205

1194:                                             ; preds = %1188
  %1195 = load ptr, ptr %6, align 8, !tbaa !5
  %1196 = load ptr, ptr %8, align 8, !tbaa !5
  %1197 = load ptr, ptr %9, align 8, !tbaa !5
  %1198 = load ptr, ptr %10, align 8, !tbaa !5
  %1199 = load ptr, ptr %8, align 8, !tbaa !5
  %1200 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1199, i32 0, i32 7
  %1201 = load i32, ptr %1200, align 4, !tbaa !30
  %1202 = load i32, ptr %21, align 4, !tbaa !9
  %1203 = load i32, ptr %20, align 4, !tbaa !9
  %1204 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1195, ptr noundef %1196, ptr noundef %1197, ptr noundef %1198, i32 noundef %1201, i32 noundef 4097, i32 noundef %1202, i32 noundef %1203, i32 noundef %1204)
  br label %1205

1205:                                             ; preds = %1194, %1188, %1158
  %1206 = load ptr, ptr %10, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1206, i32 0, i32 11
  %1208 = load i8, ptr %1207, align 1, !tbaa !11
  %1209 = zext i8 %1208 to i32
  %1210 = icmp eq i32 %1209, 2
  br i1 %1210, label %1217, label %1211

1211:                                             ; preds = %1205
  %1212 = load ptr, ptr %10, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1212, i32 0, i32 11
  %1214 = load i8, ptr %1213, align 1, !tbaa !11
  %1215 = zext i8 %1214 to i32
  %1216 = icmp eq i32 %1215, 3
  br i1 %1216, label %1217, label %1228

1217:                                             ; preds = %1211, %1205
  %1218 = load ptr, ptr %6, align 8, !tbaa !5
  %1219 = load ptr, ptr %8, align 8, !tbaa !5
  %1220 = load ptr, ptr %9, align 8, !tbaa !5
  %1221 = load ptr, ptr %10, align 8, !tbaa !5
  %1222 = load ptr, ptr %8, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1222, i32 0, i32 2
  %1224 = load i32, ptr %1223, align 4, !tbaa !28
  %1225 = load i32, ptr %21, align 4, !tbaa !9
  %1226 = load i32, ptr %20, align 4, !tbaa !9
  %1227 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1218, ptr noundef %1219, ptr noundef %1220, ptr noundef %1221, i32 noundef %1224, i32 noundef 4097, i32 noundef %1225, i32 noundef %1226, i32 noundef %1227)
  br label %1228

1228:                                             ; preds = %1217, %1211
  %1229 = load ptr, ptr %10, align 8, !tbaa !5
  %1230 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1229, i32 0, i32 11
  %1231 = load i8, ptr %1230, align 1, !tbaa !11
  %1232 = zext i8 %1231 to i32
  %1233 = icmp eq i32 %1232, 3
  br i1 %1233, label %1234, label %1245

1234:                                             ; preds = %1228
  %1235 = load ptr, ptr %6, align 8, !tbaa !5
  %1236 = load ptr, ptr %8, align 8, !tbaa !5
  %1237 = load ptr, ptr %9, align 8, !tbaa !5
  %1238 = load ptr, ptr %10, align 8, !tbaa !5
  %1239 = load ptr, ptr %8, align 8, !tbaa !5
  %1240 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1239, i32 0, i32 3
  %1241 = load i32, ptr %1240, align 4, !tbaa !29
  %1242 = load i32, ptr %21, align 4, !tbaa !9
  %1243 = load i32, ptr %20, align 4, !tbaa !9
  %1244 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1235, ptr noundef %1236, ptr noundef %1237, ptr noundef %1238, i32 noundef %1241, i32 noundef 4097, i32 noundef %1242, i32 noundef %1243, i32 noundef %1244)
  br label %1245

1245:                                             ; preds = %1234, %1228
  %1246 = load ptr, ptr %10, align 8, !tbaa !5
  %1247 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1246, i32 0, i32 11
  %1248 = load i8, ptr %1247, align 1, !tbaa !11
  %1249 = zext i8 %1248 to i32
  %1250 = icmp eq i32 %1249, 1
  br i1 %1250, label %1251, label %1323

1251:                                             ; preds = %1245
  %1252 = load ptr, ptr %10, align 8, !tbaa !5
  %1253 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1252, i32 0, i32 10
  %1254 = load i16, ptr %1253, align 1, !tbaa !20
  %1255 = zext i16 %1254 to i32
  %1256 = icmp eq i32 %1255, 5
  br i1 %1256, label %1287, label %1257

1257:                                             ; preds = %1251
  %1258 = load ptr, ptr %10, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1258, i32 0, i32 10
  %1260 = load i16, ptr %1259, align 1, !tbaa !20
  %1261 = zext i16 %1260 to i32
  %1262 = icmp eq i32 %1261, 6
  br i1 %1262, label %1287, label %1263

1263:                                             ; preds = %1257
  %1264 = load ptr, ptr %10, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1264, i32 0, i32 10
  %1266 = load i16, ptr %1265, align 1, !tbaa !20
  %1267 = zext i16 %1266 to i32
  %1268 = icmp eq i32 %1267, 34
  br i1 %1268, label %1287, label %1269

1269:                                             ; preds = %1263
  %1270 = load ptr, ptr %10, align 8, !tbaa !5
  %1271 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1270, i32 0, i32 10
  %1272 = load i16, ptr %1271, align 1, !tbaa !20
  %1273 = zext i16 %1272 to i32
  %1274 = icmp eq i32 %1273, 35
  br i1 %1274, label %1287, label %1275

1275:                                             ; preds = %1269
  %1276 = load ptr, ptr %10, align 8, !tbaa !5
  %1277 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1276, i32 0, i32 10
  %1278 = load i16, ptr %1277, align 1, !tbaa !20
  %1279 = zext i16 %1278 to i32
  %1280 = icmp eq i32 %1279, 36
  br i1 %1280, label %1287, label %1281

1281:                                             ; preds = %1275
  %1282 = load ptr, ptr %10, align 8, !tbaa !5
  %1283 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1282, i32 0, i32 10
  %1284 = load i16, ptr %1283, align 1, !tbaa !20
  %1285 = zext i16 %1284 to i32
  %1286 = icmp eq i32 %1285, 37
  br i1 %1286, label %1287, label %1298

1287:                                             ; preds = %1281, %1275, %1269, %1263, %1257, %1251
  %1288 = load ptr, ptr %6, align 8, !tbaa !5
  %1289 = load ptr, ptr %8, align 8, !tbaa !5
  %1290 = load ptr, ptr %9, align 8, !tbaa !5
  %1291 = load ptr, ptr %10, align 8, !tbaa !5
  %1292 = load ptr, ptr %8, align 8, !tbaa !5
  %1293 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1292, i32 0, i32 9
  %1294 = load i32, ptr %1293, align 4, !tbaa !31
  %1295 = load i32, ptr %21, align 4, !tbaa !9
  %1296 = load i32, ptr %20, align 4, !tbaa !9
  %1297 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1288, ptr noundef %1289, ptr noundef %1290, ptr noundef %1291, i32 noundef %1294, i32 noundef 4097, i32 noundef %1295, i32 noundef %1296, i32 noundef %1297)
  br label %1322

1298:                                             ; preds = %1281
  %1299 = load ptr, ptr %10, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1299, i32 0, i32 10
  %1301 = load i16, ptr %1300, align 1, !tbaa !20
  %1302 = zext i16 %1301 to i32
  %1303 = icmp eq i32 %1302, 25
  br i1 %1303, label %1310, label %1304

1304:                                             ; preds = %1298
  %1305 = load ptr, ptr %10, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1305, i32 0, i32 10
  %1307 = load i16, ptr %1306, align 1, !tbaa !20
  %1308 = zext i16 %1307 to i32
  %1309 = icmp eq i32 %1308, 26
  br i1 %1309, label %1310, label %1321

1310:                                             ; preds = %1304, %1298
  %1311 = load ptr, ptr %6, align 8, !tbaa !5
  %1312 = load ptr, ptr %8, align 8, !tbaa !5
  %1313 = load ptr, ptr %9, align 8, !tbaa !5
  %1314 = load ptr, ptr %10, align 8, !tbaa !5
  %1315 = load ptr, ptr %8, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1315, i32 0, i32 13
  %1317 = load i32, ptr %1316, align 4, !tbaa !37
  %1318 = load i32, ptr %21, align 4, !tbaa !9
  %1319 = load i32, ptr %20, align 4, !tbaa !9
  %1320 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1311, ptr noundef %1312, ptr noundef %1313, ptr noundef %1314, i32 noundef %1317, i32 noundef 4097, i32 noundef %1318, i32 noundef %1319, i32 noundef %1320)
  br label %1321

1321:                                             ; preds = %1310, %1304
  br label %1322

1322:                                             ; preds = %1321, %1287
  br label %1323

1323:                                             ; preds = %1322, %1245
  br label %1324

1324:                                             ; preds = %1323, %1155
  %1325 = load i32, ptr %15, align 4, !tbaa !9
  %1326 = load i32, ptr %22, align 4, !tbaa !9
  %1327 = add i32 %1326, %1325
  store i32 %1327, ptr %22, align 4, !tbaa !9
  %1328 = load i32, ptr %22, align 4, !tbaa !9
  %1329 = load i32, ptr %14, align 4, !tbaa !9
  %1330 = icmp ne i32 %1328, %1329
  br i1 %1330, label %1331, label %1497

1331:                                             ; preds = %1324
  %1332 = load i32, ptr %11, align 4, !tbaa !9
  %1333 = icmp eq i32 %1332, 0
  %1334 = zext i1 %1333 to i64
  %1335 = select i1 %1333, i32 0, i32 1
  store i32 %1335, ptr %25, align 4, !tbaa !9
  %1336 = load ptr, ptr %6, align 8, !tbaa !5
  %1337 = load ptr, ptr %8, align 8, !tbaa !5
  %1338 = load ptr, ptr %9, align 8, !tbaa !5
  %1339 = load ptr, ptr %10, align 8, !tbaa !5
  %1340 = load ptr, ptr %8, align 8, !tbaa !5
  %1341 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1340, i32 0, i32 1
  %1342 = load i32, ptr %1341, align 4, !tbaa !21
  %1343 = load i32, ptr %21, align 4, !tbaa !9
  %1344 = load i32, ptr %20, align 4, !tbaa !9
  %1345 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1336, ptr noundef %1337, ptr noundef %1338, ptr noundef %1339, i32 noundef %1342, i32 noundef 4096, i32 noundef %1343, i32 noundef %1344, i32 noundef %1345)
  %1346 = load ptr, ptr %6, align 8, !tbaa !5
  %1347 = load ptr, ptr %8, align 8, !tbaa !5
  %1348 = load ptr, ptr %9, align 8, !tbaa !5
  %1349 = load ptr, ptr %10, align 8, !tbaa !5
  %1350 = load ptr, ptr %8, align 8, !tbaa !5
  %1351 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1350, i32 0, i32 6
  %1352 = load i32, ptr %1351, align 4, !tbaa !23
  %1353 = load i32, ptr %21, align 4, !tbaa !9
  %1354 = load i32, ptr %20, align 4, !tbaa !9
  %1355 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1346, ptr noundef %1347, ptr noundef %1348, ptr noundef %1349, i32 noundef %1352, i32 noundef 4096, i32 noundef %1353, i32 noundef %1354, i32 noundef %1355)
  %1356 = load ptr, ptr %10, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1356, i32 0, i32 11
  %1358 = load i8, ptr %1357, align 1, !tbaa !11
  %1359 = zext i8 %1358 to i32
  %1360 = icmp eq i32 %1359, 1
  br i1 %1360, label %1361, label %1378

1361:                                             ; preds = %1331
  %1362 = load ptr, ptr %10, align 8, !tbaa !5
  %1363 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1362, i32 0, i32 10
  %1364 = load i16, ptr %1363, align 1, !tbaa !20
  %1365 = zext i16 %1364 to i32
  %1366 = icmp eq i32 %1365, 63
  br i1 %1366, label %1367, label %1378

1367:                                             ; preds = %1361
  %1368 = load ptr, ptr %6, align 8, !tbaa !5
  %1369 = load ptr, ptr %8, align 8, !tbaa !5
  %1370 = load ptr, ptr %9, align 8, !tbaa !5
  %1371 = load ptr, ptr %10, align 8, !tbaa !5
  %1372 = load ptr, ptr %8, align 8, !tbaa !5
  %1373 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1372, i32 0, i32 7
  %1374 = load i32, ptr %1373, align 4, !tbaa !30
  %1375 = load i32, ptr %21, align 4, !tbaa !9
  %1376 = load i32, ptr %20, align 4, !tbaa !9
  %1377 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1368, ptr noundef %1369, ptr noundef %1370, ptr noundef %1371, i32 noundef %1374, i32 noundef 4096, i32 noundef %1375, i32 noundef %1376, i32 noundef %1377)
  br label %1378

1378:                                             ; preds = %1367, %1361, %1331
  %1379 = load ptr, ptr %10, align 8, !tbaa !5
  %1380 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1379, i32 0, i32 11
  %1381 = load i8, ptr %1380, align 1, !tbaa !11
  %1382 = zext i8 %1381 to i32
  %1383 = icmp eq i32 %1382, 2
  br i1 %1383, label %1390, label %1384

1384:                                             ; preds = %1378
  %1385 = load ptr, ptr %10, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1385, i32 0, i32 11
  %1387 = load i8, ptr %1386, align 1, !tbaa !11
  %1388 = zext i8 %1387 to i32
  %1389 = icmp eq i32 %1388, 3
  br i1 %1389, label %1390, label %1401

1390:                                             ; preds = %1384, %1378
  %1391 = load ptr, ptr %6, align 8, !tbaa !5
  %1392 = load ptr, ptr %8, align 8, !tbaa !5
  %1393 = load ptr, ptr %9, align 8, !tbaa !5
  %1394 = load ptr, ptr %10, align 8, !tbaa !5
  %1395 = load ptr, ptr %8, align 8, !tbaa !5
  %1396 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1395, i32 0, i32 2
  %1397 = load i32, ptr %1396, align 4, !tbaa !28
  %1398 = load i32, ptr %21, align 4, !tbaa !9
  %1399 = load i32, ptr %20, align 4, !tbaa !9
  %1400 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1391, ptr noundef %1392, ptr noundef %1393, ptr noundef %1394, i32 noundef %1397, i32 noundef 4096, i32 noundef %1398, i32 noundef %1399, i32 noundef %1400)
  br label %1401

1401:                                             ; preds = %1390, %1384
  %1402 = load ptr, ptr %10, align 8, !tbaa !5
  %1403 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1402, i32 0, i32 11
  %1404 = load i8, ptr %1403, align 1, !tbaa !11
  %1405 = zext i8 %1404 to i32
  %1406 = icmp eq i32 %1405, 3
  br i1 %1406, label %1407, label %1418

1407:                                             ; preds = %1401
  %1408 = load ptr, ptr %6, align 8, !tbaa !5
  %1409 = load ptr, ptr %8, align 8, !tbaa !5
  %1410 = load ptr, ptr %9, align 8, !tbaa !5
  %1411 = load ptr, ptr %10, align 8, !tbaa !5
  %1412 = load ptr, ptr %8, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1412, i32 0, i32 3
  %1414 = load i32, ptr %1413, align 4, !tbaa !29
  %1415 = load i32, ptr %21, align 4, !tbaa !9
  %1416 = load i32, ptr %20, align 4, !tbaa !9
  %1417 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1408, ptr noundef %1409, ptr noundef %1410, ptr noundef %1411, i32 noundef %1414, i32 noundef 4096, i32 noundef %1415, i32 noundef %1416, i32 noundef %1417)
  br label %1418

1418:                                             ; preds = %1407, %1401
  %1419 = load ptr, ptr %10, align 8, !tbaa !5
  %1420 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1419, i32 0, i32 11
  %1421 = load i8, ptr %1420, align 1, !tbaa !11
  %1422 = zext i8 %1421 to i32
  %1423 = icmp eq i32 %1422, 1
  br i1 %1423, label %1424, label %1496

1424:                                             ; preds = %1418
  %1425 = load ptr, ptr %10, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1425, i32 0, i32 10
  %1427 = load i16, ptr %1426, align 1, !tbaa !20
  %1428 = zext i16 %1427 to i32
  %1429 = icmp eq i32 %1428, 5
  br i1 %1429, label %1460, label %1430

1430:                                             ; preds = %1424
  %1431 = load ptr, ptr %10, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1431, i32 0, i32 10
  %1433 = load i16, ptr %1432, align 1, !tbaa !20
  %1434 = zext i16 %1433 to i32
  %1435 = icmp eq i32 %1434, 6
  br i1 %1435, label %1460, label %1436

1436:                                             ; preds = %1430
  %1437 = load ptr, ptr %10, align 8, !tbaa !5
  %1438 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1437, i32 0, i32 10
  %1439 = load i16, ptr %1438, align 1, !tbaa !20
  %1440 = zext i16 %1439 to i32
  %1441 = icmp eq i32 %1440, 34
  br i1 %1441, label %1460, label %1442

1442:                                             ; preds = %1436
  %1443 = load ptr, ptr %10, align 8, !tbaa !5
  %1444 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1443, i32 0, i32 10
  %1445 = load i16, ptr %1444, align 1, !tbaa !20
  %1446 = zext i16 %1445 to i32
  %1447 = icmp eq i32 %1446, 35
  br i1 %1447, label %1460, label %1448

1448:                                             ; preds = %1442
  %1449 = load ptr, ptr %10, align 8, !tbaa !5
  %1450 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1449, i32 0, i32 10
  %1451 = load i16, ptr %1450, align 1, !tbaa !20
  %1452 = zext i16 %1451 to i32
  %1453 = icmp eq i32 %1452, 36
  br i1 %1453, label %1460, label %1454

1454:                                             ; preds = %1448
  %1455 = load ptr, ptr %10, align 8, !tbaa !5
  %1456 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1455, i32 0, i32 10
  %1457 = load i16, ptr %1456, align 1, !tbaa !20
  %1458 = zext i16 %1457 to i32
  %1459 = icmp eq i32 %1458, 37
  br i1 %1459, label %1460, label %1471

1460:                                             ; preds = %1454, %1448, %1442, %1436, %1430, %1424
  %1461 = load ptr, ptr %6, align 8, !tbaa !5
  %1462 = load ptr, ptr %8, align 8, !tbaa !5
  %1463 = load ptr, ptr %9, align 8, !tbaa !5
  %1464 = load ptr, ptr %10, align 8, !tbaa !5
  %1465 = load ptr, ptr %8, align 8, !tbaa !5
  %1466 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1465, i32 0, i32 9
  %1467 = load i32, ptr %1466, align 4, !tbaa !31
  %1468 = load i32, ptr %21, align 4, !tbaa !9
  %1469 = load i32, ptr %20, align 4, !tbaa !9
  %1470 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1461, ptr noundef %1462, ptr noundef %1463, ptr noundef %1464, i32 noundef %1467, i32 noundef 4096, i32 noundef %1468, i32 noundef %1469, i32 noundef %1470)
  br label %1495

1471:                                             ; preds = %1454
  %1472 = load ptr, ptr %10, align 8, !tbaa !5
  %1473 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1472, i32 0, i32 10
  %1474 = load i16, ptr %1473, align 1, !tbaa !20
  %1475 = zext i16 %1474 to i32
  %1476 = icmp eq i32 %1475, 25
  br i1 %1476, label %1483, label %1477

1477:                                             ; preds = %1471
  %1478 = load ptr, ptr %10, align 8, !tbaa !5
  %1479 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1478, i32 0, i32 10
  %1480 = load i16, ptr %1479, align 1, !tbaa !20
  %1481 = zext i16 %1480 to i32
  %1482 = icmp eq i32 %1481, 26
  br i1 %1482, label %1483, label %1494

1483:                                             ; preds = %1477, %1471
  %1484 = load ptr, ptr %6, align 8, !tbaa !5
  %1485 = load ptr, ptr %8, align 8, !tbaa !5
  %1486 = load ptr, ptr %9, align 8, !tbaa !5
  %1487 = load ptr, ptr %10, align 8, !tbaa !5
  %1488 = load ptr, ptr %8, align 8, !tbaa !5
  %1489 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1488, i32 0, i32 13
  %1490 = load i32, ptr %1489, align 4, !tbaa !37
  %1491 = load i32, ptr %21, align 4, !tbaa !9
  %1492 = load i32, ptr %20, align 4, !tbaa !9
  %1493 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %1484, ptr noundef %1485, ptr noundef %1486, ptr noundef %1487, i32 noundef %1490, i32 noundef 4096, i32 noundef %1491, i32 noundef %1492, i32 noundef %1493)
  br label %1494

1494:                                             ; preds = %1483, %1477
  br label %1495

1495:                                             ; preds = %1494, %1460
  br label %1496

1496:                                             ; preds = %1495, %1418
  br label %1497

1497:                                             ; preds = %1496, %1324
  br label %927, !llvm.loop !51

1498:                                             ; preds = %927
  %1499 = load ptr, ptr %6, align 8, !tbaa !5
  %1500 = load ptr, ptr %9, align 8, !tbaa !5
  %1501 = load ptr, ptr %10, align 8, !tbaa !5
  %1502 = load i32, ptr %27, align 4, !tbaa !9
  %1503 = load i32, ptr %28, align 4, !tbaa !9
  %1504 = load i32, ptr %29, align 4, !tbaa !9
  call void @libxsmm_finalize_kernel_vregs_aarch64_masks(ptr noundef %1499, ptr noundef %1500, ptr noundef %1501, i32 noundef %1502, i32 noundef %1503, i32 noundef %1504)
  %1505 = load ptr, ptr %6, align 8, !tbaa !5
  %1506 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1505, i32 0, i32 6
  %1507 = load i32, ptr %1506, align 4, !tbaa !42
  %1508 = icmp eq i32 %1507, 2501
  br i1 %1508, label %1509, label %1511

1509:                                             ; preds = %1498
  %1510 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_aarch64_instruction_sm(ptr noundef %1510, i32 noundef -721205633)
  br label %1511

1511:                                             ; preds = %1509, %1498
  store i32 0, ptr %34, align 4
  br label %1512

1512:                                             ; preds = %1511, %254, %150
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  %1513 = load i32, ptr %34, align 4
  switch i32 %1513, label %1515 [
    i32 0, label %1514
    i32 1, label %1514
  ]

1514:                                             ; preds = %1512, %1512
  ret void

1515:                                             ; preds = %1512
  unreachable
}

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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, !7, i64 31}
!12 = !{!"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, !13, i64 27, !13, i64 29, !7, i64 31}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !13, i64 27}
!15 = !{!12, !10, i64 12}
!16 = !{!17, !10, i64 68}
!17 = !{!"libxsmm_mateltwise_kernel_config_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !10, i64 392, !10, i64 396, !10, i64 400, !10, i64 404, !10, i64 408, !10, i64 412, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !10, i64 460, !10, i64 464, !10, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !7, i64 512}
!18 = !{!12, !10, i64 8}
!19 = !{!17, !10, i64 64}
!20 = !{!12, !13, i64 29}
!21 = !{!22, !10, i64 4}
!22 = !{!"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}
!23 = !{!22, !10, i64 24}
!24 = !{!22, !10, i64 96}
!25 = !{!22, !10, i64 100}
!26 = !{!22, !10, i64 140}
!27 = !{!22, !10, i64 144}
!28 = !{!22, !10, i64 8}
!29 = !{!22, !10, i64 12}
!30 = !{!22, !10, i64 28}
!31 = !{!22, !10, i64 36}
!32 = !{!22, !10, i64 40}
!33 = !{!22, !10, i64 44}
!34 = !{!22, !10, i64 76}
!35 = !{!22, !10, i64 48}
!36 = !{!22, !10, i64 88}
!37 = !{!22, !10, i64 52}
!38 = !{!22, !10, i64 56}
!39 = !{!22, !10, i64 60}
!40 = !{!22, !10, i64 136}
!41 = !{!22, !10, i64 0}
!42 = !{!43, !10, i64 28}
!43 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!44 = !{!17, !10, i64 72}
!45 = !{!12, !10, i64 0}
!46 = !{!12, !10, i64 4}
!47 = !{!17, !10, i64 480}
!48 = !{!17, !10, i64 500}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = distinct !{!51, !50}


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

@.str = external hidden unnamed_addr constant [97 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_unary_binary_aarch64_microkernel = external hidden unnamed_addr constant [51 x i8], align 1

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

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #3
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #3
  store i32 0, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #3
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #3
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  store i32 0, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #3
  store i32 0, ptr %12, align 4, !tbaa !5
  %13 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %14 = icmp eq i32 %13, 1
  br i1 %14, label %30, label %15

15:                                               ; preds = %5
  %16 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %17 = icmp eq i32 %16, 9
  br i1 %17, label %30, label %18

18:                                               ; preds = %15
  %19 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %20 = icmp eq i32 %19, 8
  br i1 %20, label %30, label %21

21:                                               ; preds = %18
  %22 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %23 = icmp eq i32 %22, 2
  br i1 %23, label %30, label %24

24:                                               ; preds = %21
  %25 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %26 = icmp eq i32 %25, 11
  br i1 %26, label %30, label %27

27:                                               ; preds = %24
  %28 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %29 = icmp eq i32 %28, 10
  br i1 %29, label %30, label %39

30:                                               ; preds = %27, %24, %21, %18, %15, %5
  %31 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %32 = icmp eq i32 %31, 1
  br i1 %32, label %97, label %33

33:                                               ; preds = %30
  %34 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %35 = icmp eq i32 %34, 2
  br i1 %35, label %97, label %36

36:                                               ; preds = %33
  %37 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %38 = icmp eq i32 %37, 11
  br i1 %38, label %97, label %39

39:                                               ; preds = %36, %27
  %40 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %41 = icmp eq i32 %40, 10
  br i1 %41, label %42, label %45

42:                                               ; preds = %39
  %43 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %97, label %45

45:                                               ; preds = %42, %39
  %46 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %47 = icmp eq i32 %46, 11
  br i1 %47, label %48, label %51

48:                                               ; preds = %45
  %49 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %50 = icmp eq i32 %49, 1
  br i1 %50, label %97, label %51

51:                                               ; preds = %48, %45
  %52 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %53 = icmp eq i32 %52, 11
  br i1 %53, label %54, label %57

54:                                               ; preds = %51
  %55 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %56 = icmp eq i32 %55, 8
  br i1 %56, label %97, label %57

57:                                               ; preds = %54, %51
  %58 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %59 = icmp eq i32 %58, 11
  br i1 %59, label %60, label %63

60:                                               ; preds = %57
  %61 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %62 = icmp eq i32 %61, 9
  br i1 %62, label %97, label %63

63:                                               ; preds = %60, %57
  %64 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %65 = icmp eq i32 %64, 1
  br i1 %65, label %66, label %69

66:                                               ; preds = %63
  %67 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %68 = icmp eq i32 %67, 10
  br i1 %68, label %97, label %69

69:                                               ; preds = %66, %63
  %70 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %71 = icmp eq i32 %70, 12
  br i1 %71, label %72, label %75

72:                                               ; preds = %69
  %73 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %74 = icmp eq i32 %73, 1
  br i1 %74, label %97, label %75

75:                                               ; preds = %72, %69
  %76 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 0) #3
  %77 = icmp eq i32 %76, 1
  br i1 %77, label %78, label %81

78:                                               ; preds = %75
  %79 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %80 = icmp eq i32 %79, 12
  br i1 %80, label %97, label %81

81:                                               ; preds = %78, %75
  %82 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %4) #3
  %.not = icmp eq i32 %82, 0
  br i1 %.not, label %86, label %83

83:                                               ; preds = %81
  %84 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %85 = icmp eq i32 %84, 14
  br i1 %85, label %97, label %86

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

89:                                               ; preds = %86
  %90 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %4, i32 noundef 3) #3
  %91 = icmp eq i32 %90, 0
  br i1 %91, label %97, label %92

92:                                               ; preds = %89, %86
  %93 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %94 = icmp ugt i32 %93, 1
  %95 = load i32, ptr @libxsmm_verbosity, align 4
  %96 = select i1 %94, i32 %95, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef nonnull @.str, i32 noundef 3988, i32 noundef %96) #3
  br label %444

97:                                               ; preds = %30, %33, %36, %42, %48, %54, %60, %66, %72, %78, %83, %89
  tail call void @libxsmm_generator_configure_aarch64_vlens(ptr noundef %4, ptr noundef %3)
  %98 = getelementptr inbounds i8, ptr %4, i64 31
  %99 = load i8, ptr %98, align 1, !tbaa !9
  %100 = icmp eq i8 %99, 1
  br i1 %100, label %101, label %111

101:                                              ; preds = %97
  %102 = getelementptr inbounds i8, ptr %4, i64 27
  %103 = load i16, ptr %102, align 1, !tbaa !12
  %104 = and i16 %103, 1
  %.not528 = icmp eq i16 %104, 0
  br i1 %.not528, label %111, label %105

105:                                              ; preds = %101
  %106 = getelementptr inbounds i8, ptr %4, i64 8
  %107 = getelementptr inbounds i8, ptr %3, i64 64
  %108 = load <2 x i32>, ptr %106, align 1, !tbaa !5
  %109 = add <2 x i32> %108, <i32 15, i32 15>
  %110 = and <2 x i32> %109, <i32 -16, i32 -16>
  store <2 x i32> %110, ptr %107, align 4, !tbaa !5
  br label %111

111:                                              ; preds = %105, %101, %97
  %112 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef nonnull %4) #3
  %.not529 = icmp eq i32 %112, 0
  br i1 %.not529, label %123, label %113

113:                                              ; preds = %111
  %114 = getelementptr inbounds i8, ptr %4, i64 27
  %115 = load i16, ptr %114, align 1, !tbaa !12
  %116 = and i16 %115, 128
  %.not530 = icmp eq i16 %116, 0
  br i1 %.not530, label %123, label %117

117:                                              ; preds = %113
  %118 = getelementptr inbounds i8, ptr %4, i64 12
  %119 = load i32, ptr %118, align 1, !tbaa !13
  %120 = add i32 %119, 15
  %121 = and i32 %120, -16
  %122 = getelementptr inbounds i8, ptr %3, i64 68
  store i32 %121, ptr %122, align 4, !tbaa !14
  br label %123

123:                                              ; preds = %117, %113, %111
  %124 = getelementptr inbounds i8, ptr %4, i64 29
  %125 = load i16, ptr %124, align 1, !tbaa !16
  switch i16 %125, label %._crit_edge601 [
    i16 6, label %126
    i16 35, label %126
    i16 26, label %126
  ]

._crit_edge601:                                   ; preds = %123
  %.pre = load i8, ptr %98, align 1, !tbaa !9
  br label %145

126:                                              ; preds = %123, %123, %123
  %127 = load i8, ptr %98, align 1, !tbaa !9
  %128 = icmp eq i8 %127, 1
  br i1 %128, label %129, label %145

129:                                              ; preds = %126
  %130 = getelementptr inbounds i8, ptr %4, i64 27
  %131 = load i16, ptr %130, align 1, !tbaa !12
  %132 = and i16 %131, 1
  %133 = icmp eq i16 %132, 0
  br i1 %133, label %140, label %.thread

.thread:                                          ; preds = %129
  %134 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 40, ptr %134, align 4, !tbaa !17
  %135 = getelementptr inbounds i8, ptr %2, i64 24
  store i32 41, ptr %135, align 4, !tbaa !19
  %136 = getelementptr inbounds i8, ptr %2, i64 96
  store i32 42, ptr %136, align 4, !tbaa !20
  %137 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 43, ptr %137, align 4, !tbaa !21
  %138 = getelementptr inbounds i8, ptr %2, i64 140
  store i32 48, ptr %138, align 4, !tbaa !22
  %139 = getelementptr inbounds i8, ptr %2, i64 144
  store i32 49, ptr %139, align 4, !tbaa !23
  br label %168

140:                                              ; preds = %129
  %141 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %142 = icmp ugt i32 %141, 1
  %143 = load i32, ptr @libxsmm_verbosity, align 4
  %144 = select i1 %142, i32 %143, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90045, ptr noundef nonnull @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef nonnull @.str, i32 noundef 4008, i32 noundef %144) #3
  br label %444

145:                                              ; preds = %._crit_edge601, %126
  %146 = phi i8 [ %.pre, %._crit_edge601 ], [ %127, %126 ]
  %147 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 40, ptr %147, align 4, !tbaa !17
  %148 = getelementptr inbounds i8, ptr %2, i64 24
  store i32 41, ptr %148, align 4, !tbaa !19
  %149 = getelementptr inbounds i8, ptr %2, i64 96
  store i32 42, ptr %149, align 4, !tbaa !20
  %150 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 43, ptr %150, align 4, !tbaa !21
  %151 = getelementptr inbounds i8, ptr %2, i64 140
  store i32 48, ptr %151, align 4, !tbaa !22
  %152 = getelementptr inbounds i8, ptr %2, i64 144
  store i32 49, ptr %152, align 4, !tbaa !23
  switch i8 %146, label %168 [
    i8 2, label %.thread567
    i8 3, label %.thread568
  ]

.thread567:                                       ; preds = %145
  %153 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 44, ptr %153, align 4, !tbaa !24
  %154 = load i32, ptr %2, align 4, !tbaa !25
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %154, i32 noundef 127, i32 noundef 32, i32 noundef 40) #3
  %155 = load i32, ptr %2, align 4, !tbaa !25
  %156 = load i32, ptr %153, align 4, !tbaa !24
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %155, i32 noundef 127, i32 noundef 80, i32 noundef %156) #3
  %157 = load i32, ptr %2, align 4, !tbaa !25
  %158 = load i32, ptr %148, align 4, !tbaa !19
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %157, i32 noundef 127, i32 noundef 128, i32 noundef %158) #3
  br label %310

.thread568:                                       ; preds = %145
  %159 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 44, ptr %159, align 4, !tbaa !24
  %160 = getelementptr inbounds i8, ptr %2, i64 12
  store i32 45, ptr %160, align 4, !tbaa !26
  %161 = load i32, ptr %2, align 4, !tbaa !25
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %161, i32 noundef 127, i32 noundef 32, i32 noundef 40) #3
  %162 = load i32, ptr %2, align 4, !tbaa !25
  %163 = load i32, ptr %159, align 4, !tbaa !24
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %162, i32 noundef 127, i32 noundef 80, i32 noundef %163) #3
  %164 = load i32, ptr %2, align 4, !tbaa !25
  %165 = load i32, ptr %160, align 4, !tbaa !26
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %164, i32 noundef 127, i32 noundef 128, i32 noundef %165) #3
  %166 = load i32, ptr %2, align 4, !tbaa !25
  %167 = load i32, ptr %148, align 4, !tbaa !19
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %166, i32 noundef 127, i32 noundef 176, i32 noundef %167) #3
  br label %310

168:                                              ; preds = %.thread, %145
  %169 = phi ptr [ %139, %.thread ], [ %152, %145 ]
  %170 = phi ptr [ %138, %.thread ], [ %151, %145 ]
  %171 = phi ptr [ %135, %.thread ], [ %148, %145 ]
  %172 = phi ptr [ %134, %.thread ], [ %147, %145 ]
  %173 = phi i8 [ 1, %.thread ], [ %146, %145 ]
  switch i16 %125, label %176 [
    i16 63, label %.thread560.thread
    i16 5, label %174
    i16 6, label %174
    i16 34, label %174
    i16 35, label %174
  ]

174:                                              ; preds = %168, %168, %168, %168
  %175 = getelementptr inbounds i8, ptr %2, i64 36
  store i32 44, ptr %175, align 4, !tbaa !27
  %.pre605 = and i16 %125, -2
  br label %.thread547

176:                                              ; preds = %168
  %177 = and i16 %125, -2
  %switch = icmp eq i16 %177, 36
  br i1 %switch, label %.thread560.thread.sink.split, label %.thread547

.thread547:                                       ; preds = %174, %176
  %.pre-phi = phi i16 [ %.pre605, %174 ], [ %177, %176 ]
  %switch536 = icmp eq i16 %.pre-phi, 34
  br i1 %switch536, label %.thread560.thread, label %178

178:                                              ; preds = %.thread547
  switch i16 %125, label %182 [
    i16 33, label %.thread560.thread
    i16 64, label %.thread560.thread.sink.split
    i16 65, label %179
  ]

179:                                              ; preds = %178
  %180 = getelementptr inbounds i8, ptr %2, i64 44
  store i32 44, ptr %180, align 4, !tbaa !28
  %181 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 45, ptr %181, align 4, !tbaa !29
  br label %.thread560.thread.sink.split

182:                                              ; preds = %178
  %.off537 = add i16 %125, -25
  %switch538 = icmp ult i16 %.off537, 2
  %183 = getelementptr inbounds i8, ptr %2, i64 52
  %184 = getelementptr inbounds i8, ptr %2, i64 56
  br i1 %switch538, label %185, label %.thread560

185:                                              ; preds = %182
  store i32 44, ptr %183, align 4, !tbaa !30
  store i32 45, ptr %184, align 4, !tbaa !31
  %186 = icmp eq i16 %125, 25
  %187 = getelementptr inbounds i8, ptr %2, i64 60
  br i1 %186, label %188, label %189

188:                                              ; preds = %185
  store i32 46, ptr %187, align 4, !tbaa !32
  br label %.thread564

189:                                              ; preds = %185
  store i32 127, ptr %187, align 4, !tbaa !32
  br label %.thread564

.thread560.thread.sink.split:                     ; preds = %178, %176, %179
  %.sink639 = phi i64 [ 76, %179 ], [ 36, %176 ], [ 44, %178 ]
  %.sink637 = phi i32 [ 46, %179 ], [ 44, %176 ], [ 44, %178 ]
  %.sink627.ph = phi i64 [ 88, %179 ], [ 40, %176 ], [ 76, %178 ]
  %.sink.ph = phi i32 [ 47, %179 ], [ 45, %176 ], [ 46, %178 ]
  %190 = getelementptr inbounds i8, ptr %2, i64 %.sink639
  store i32 %.sink637, ptr %190, align 4, !tbaa !5
  br label %.thread560.thread

.thread560.thread:                                ; preds = %.thread560.thread.sink.split, %178, %.thread547, %168
  %.sink627 = phi i64 [ 28, %168 ], [ 40, %.thread547 ], [ 44, %178 ], [ %.sink627.ph, %.thread560.thread.sink.split ]
  %.sink = phi i32 [ 44, %168 ], [ 45, %.thread547 ], [ 44, %178 ], [ %.sink.ph, %.thread560.thread.sink.split ]
  %191 = getelementptr inbounds i8, ptr %2, i64 %.sink627
  store i32 %.sink, ptr %191, align 4, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %2, i64 52
  store i32 127, ptr %192, align 4, !tbaa !30
  %193 = getelementptr inbounds i8, ptr %2, i64 56
  store i32 127, ptr %193, align 4, !tbaa !31
  %194 = getelementptr inbounds i8, ptr %2, i64 60
  store i32 127, ptr %194, align 4, !tbaa !32
  br label %.thread564

.thread560:                                       ; preds = %182
  store i32 127, ptr %183, align 4, !tbaa !30
  store i32 127, ptr %184, align 4, !tbaa !31
  %195 = getelementptr inbounds i8, ptr %2, i64 60
  store i32 127, ptr %195, align 4, !tbaa !32
  %switch540 = icmp eq i16 %.pre-phi, 42
  br i1 %switch540, label %196, label %.thread564

.thread564:                                       ; preds = %.thread560.thread, %189, %188, %.thread560
  br label %196

196:                                              ; preds = %.thread560, %.thread564
  %.sink628 = phi i32 [ 127, %.thread564 ], [ 44, %.thread560 ]
  %197 = getelementptr inbounds i8, ptr %2, i64 136
  store i32 %.sink628, ptr %197, align 4, !tbaa !33
  %cond = icmp eq i8 %173, 1
  br i1 %cond, label %198, label %305

198:                                              ; preds = %196
  %199 = load i32, ptr %2, align 4, !tbaa !25
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %199, i32 noundef 127, i32 noundef 32, i32 noundef 40) #3
  %200 = load i32, ptr %2, align 4, !tbaa !25
  %201 = load i32, ptr %171, align 4, !tbaa !19
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %200, i32 noundef 127, i32 noundef 80, i32 noundef %201) #3
  %202 = load i16, ptr %124, align 1, !tbaa !16
  switch i16 %202, label %310 [
    i16 63, label %203
    i16 5, label %207
    i16 6, label %211
    i16 36, label %215
    i16 37, label %220
    i16 34, label %228
    i16 35, label %236
    i16 33, label %244
    i16 64, label %249
    i16 65, label %254
    i16 25, label %261
    i16 26, label %273
    i16 42, label %281
    i16 43, label %293
  ]

203:                                              ; preds = %198
  %204 = load i32, ptr %2, align 4, !tbaa !25
  %205 = getelementptr inbounds i8, ptr %2, i64 28
  %206 = load i32, ptr %205, align 4, !tbaa !34
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %204, i32 noundef 127, i32 noundef 88, i32 noundef %206) #3
  br label %310

207:                                              ; preds = %198
  %208 = load i32, ptr %2, align 4, !tbaa !25
  %209 = getelementptr inbounds i8, ptr %2, i64 36
  %210 = load i32, ptr %209, align 4, !tbaa !27
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %208, i32 noundef 127, i32 noundef 88, i32 noundef %210) #3
  br label %310

211:                                              ; preds = %198
  %212 = load i32, ptr %2, align 4, !tbaa !25
  %213 = getelementptr inbounds i8, ptr %2, i64 36
  %214 = load i32, ptr %213, align 4, !tbaa !27
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %212, i32 noundef 127, i32 noundef 40, i32 noundef %214) #3
  br label %310

215:                                              ; preds = %198
  %216 = load i32, ptr %2, align 4, !tbaa !25
  %217 = getelementptr inbounds i8, ptr %2, i64 40
  %218 = load i32, ptr %217, align 4, !tbaa !35
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %216, i32 noundef 127, i32 noundef 0, i32 noundef %218) #3
  %219 = load i32, ptr %217, align 4, !tbaa !35
  br label %310

220:                                              ; preds = %198
  %221 = load i32, ptr %2, align 4, !tbaa !25
  %222 = getelementptr inbounds i8, ptr %2, i64 36
  %223 = load i32, ptr %222, align 4, !tbaa !27
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %221, i32 noundef 127, i32 noundef 40, i32 noundef %223) #3
  %224 = load i32, ptr %2, align 4, !tbaa !25
  %225 = getelementptr inbounds i8, ptr %2, i64 40
  %226 = load i32, ptr %225, align 4, !tbaa !35
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %224, i32 noundef 127, i32 noundef 0, i32 noundef %226) #3
  %227 = load i32, ptr %225, align 4, !tbaa !35
  br label %310

228:                                              ; preds = %198
  %229 = load i32, ptr %2, align 4, !tbaa !25
  %230 = getelementptr inbounds i8, ptr %2, i64 40
  %231 = load i32, ptr %230, align 4, !tbaa !35
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %229, i32 noundef 127, i32 noundef 0, i32 noundef %231) #3
  %232 = load i32, ptr %2, align 4, !tbaa !25
  %233 = getelementptr inbounds i8, ptr %2, i64 36
  %234 = load i32, ptr %233, align 4, !tbaa !27
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %232, i32 noundef 127, i32 noundef 88, i32 noundef %234) #3
  %235 = load i32, ptr %230, align 4, !tbaa !35
  br label %310

236:                                              ; preds = %198
  %237 = load i32, ptr %2, align 4, !tbaa !25
  %238 = getelementptr inbounds i8, ptr %2, i64 36
  %239 = load i32, ptr %238, align 4, !tbaa !27
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %237, i32 noundef 127, i32 noundef 40, i32 noundef %239) #3
  %240 = load i32, ptr %2, align 4, !tbaa !25
  %241 = getelementptr inbounds i8, ptr %2, i64 40
  %242 = load i32, ptr %241, align 4, !tbaa !35
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %240, i32 noundef 127, i32 noundef 0, i32 noundef %242) #3
  %243 = load i32, ptr %241, align 4, !tbaa !35
  br label %310

244:                                              ; preds = %198
  %245 = load i32, ptr %2, align 4, !tbaa !25
  %246 = getelementptr inbounds i8, ptr %2, i64 44
  %247 = load i32, ptr %246, align 4, !tbaa !28
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %245, i32 noundef 127, i32 noundef 88, i32 noundef %247) #3
  %248 = load i32, ptr %246, align 4, !tbaa !28
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %248, i32 noundef 127, i32 noundef 0, i32 noundef %248) #3
  br label %310

249:                                              ; preds = %198
  %250 = load i32, ptr %2, align 4, !tbaa !25
  %251 = getelementptr inbounds i8, ptr %2, i64 44
  %252 = load i32, ptr %251, align 4, !tbaa !28
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %250, i32 noundef 127, i32 noundef 88, i32 noundef %252) #3
  %253 = load i32, ptr %251, align 4, !tbaa !28
  br label %310

254:                                              ; preds = %198
  %255 = load i32, ptr %2, align 4, !tbaa !25
  %256 = getelementptr inbounds i8, ptr %2, i64 44
  %257 = load i32, ptr %256, align 4, !tbaa !28
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %255, i32 noundef 127, i32 noundef 88, i32 noundef %257) #3
  %258 = load i32, ptr %256, align 4, !tbaa !28
  %259 = getelementptr inbounds i8, ptr %2, i64 48
  %260 = load i32, ptr %259, align 4, !tbaa !29
  br label %310

261:                                              ; preds = %198
  %262 = load i32, ptr %2, align 4, !tbaa !25
  %263 = getelementptr inbounds i8, ptr %2, i64 60
  %264 = load i32, ptr %263, align 4, !tbaa !32
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %262, i32 noundef 127, i32 noundef 8, i32 noundef %264) #3
  %265 = load i32, ptr %2, align 4, !tbaa !25
  %266 = getelementptr inbounds i8, ptr %2, i64 56
  %267 = load i32, ptr %266, align 4, !tbaa !31
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %265, i32 noundef 127, i32 noundef 0, i32 noundef %267) #3
  %268 = load i32, ptr %2, align 4, !tbaa !25
  %269 = getelementptr inbounds i8, ptr %2, i64 52
  %270 = load i32, ptr %269, align 4, !tbaa !30
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %268, i32 noundef 127, i32 noundef 88, i32 noundef %270) #3
  %271 = load i32, ptr %263, align 4, !tbaa !32
  %272 = load i32, ptr %266, align 4, !tbaa !31
  br label %310

273:                                              ; preds = %198
  %274 = load i32, ptr %2, align 4, !tbaa !25
  %275 = getelementptr inbounds i8, ptr %2, i64 52
  %276 = load i32, ptr %275, align 4, !tbaa !30
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %274, i32 noundef 127, i32 noundef 40, i32 noundef %276) #3
  %277 = load i32, ptr %2, align 4, !tbaa !25
  %278 = getelementptr inbounds i8, ptr %2, i64 56
  %279 = load i32, ptr %278, align 4, !tbaa !31
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %277, i32 noundef 127, i32 noundef 0, i32 noundef %279) #3
  %280 = load i32, ptr %278, align 4, !tbaa !31
  br label %310

281:                                              ; preds = %198
  %282 = getelementptr inbounds i8, ptr %4, i64 27
  %283 = load i16, ptr %282, align 1, !tbaa !12
  %284 = and i16 %283, 1024
  %285 = icmp eq i16 %284, 0
  br i1 %285, label %286, label %290

286:                                              ; preds = %281
  %287 = load i32, ptr %2, align 4, !tbaa !25
  %288 = getelementptr inbounds i8, ptr %2, i64 136
  %289 = load i32, ptr %288, align 4, !tbaa !33
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %287, i32 noundef 127, i32 noundef 40, i32 noundef %289) #3
  br label %290

290:                                              ; preds = %286, %281
  %291 = getelementptr inbounds i8, ptr %2, i64 136
  %292 = load i32, ptr %291, align 4, !tbaa !33
  br label %310

293:                                              ; preds = %198
  %294 = getelementptr inbounds i8, ptr %4, i64 27
  %295 = load i16, ptr %294, align 1, !tbaa !12
  %296 = and i16 %295, 1024
  %297 = icmp eq i16 %296, 0
  br i1 %297, label %298, label %302

298:                                              ; preds = %293
  %299 = load i32, ptr %2, align 4, !tbaa !25
  %300 = getelementptr inbounds i8, ptr %2, i64 136
  %301 = load i32, ptr %300, align 4, !tbaa !33
  tail call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %299, i32 noundef 127, i32 noundef 40, i32 noundef %301) #3
  br label %302

302:                                              ; preds = %298, %293
  %303 = getelementptr inbounds i8, ptr %2, i64 136
  %304 = load i32, ptr %303, align 4, !tbaa !33
  br label %310

305:                                              ; preds = %196
  %306 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !5
  %307 = icmp ugt i32 %306, 1
  %308 = load i32, ptr @libxsmm_verbosity, align 4
  %309 = select i1 %307, i32 %308, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_unary_binary_aarch64_microkernel, ptr noundef nonnull @.str, i32 noundef 4169, i32 noundef %309) #3
  br label %310

310:                                              ; preds = %198, %.thread567, %305, %.thread568, %203, %211, %220, %236, %249, %261, %290, %302, %273, %254, %244, %228, %215, %207
  %311 = phi ptr [ %169, %203 ], [ %169, %207 ], [ %169, %211 ], [ %169, %215 ], [ %169, %220 ], [ %169, %228 ], [ %169, %236 ], [ %169, %244 ], [ %169, %249 ], [ %169, %254 ], [ %169, %261 ], [ %169, %273 ], [ %169, %290 ], [ %169, %302 ], [ %152, %.thread567 ], [ %152, %.thread568 ], [ %169, %305 ], [ %169, %198 ]
  %312 = phi ptr [ %170, %203 ], [ %170, %207 ], [ %170, %211 ], [ %170, %215 ], [ %170, %220 ], [ %170, %228 ], [ %170, %236 ], [ %170, %244 ], [ %170, %249 ], [ %170, %254 ], [ %170, %261 ], [ %170, %273 ], [ %170, %290 ], [ %170, %302 ], [ %151, %.thread567 ], [ %151, %.thread568 ], [ %170, %305 ], [ %170, %198 ]
  %313 = phi ptr [ %171, %203 ], [ %171, %207 ], [ %171, %211 ], [ %171, %215 ], [ %171, %220 ], [ %171, %228 ], [ %171, %236 ], [ %171, %244 ], [ %171, %249 ], [ %171, %254 ], [ %171, %261 ], [ %171, %273 ], [ %171, %290 ], [ %171, %302 ], [ %148, %.thread567 ], [ %148, %.thread568 ], [ %171, %305 ], [ %171, %198 ]
  %314 = phi ptr [ %172, %203 ], [ %172, %207 ], [ %172, %211 ], [ %172, %215 ], [ %172, %220 ], [ %172, %228 ], [ %172, %236 ], [ %172, %244 ], [ %172, %249 ], [ %172, %254 ], [ %172, %261 ], [ %172, %273 ], [ %172, %290 ], [ %172, %302 ], [ %147, %.thread567 ], [ %147, %.thread568 ], [ %172, %305 ], [ %172, %198 ]
  %.0507 = phi i32 [ 127, %203 ], [ 127, %207 ], [ 127, %211 ], [ 127, %215 ], [ 127, %220 ], [ 127, %228 ], [ 127, %236 ], [ 127, %244 ], [ %253, %249 ], [ %258, %254 ], [ %271, %261 ], [ 127, %273 ], [ %292, %290 ], [ %304, %302 ], [ 127, %.thread567 ], [ 127, %.thread568 ], [ 127, %305 ], [ 127, %198 ]
  %.0506 = phi i32 [ 127, %203 ], [ 127, %207 ], [ 127, %211 ], [ %219, %215 ], [ %227, %220 ], [ %235, %228 ], [ %243, %236 ], [ 127, %244 ], [ 127, %249 ], [ %260, %254 ], [ %272, %261 ], [ %280, %273 ], [ 127, %290 ], [ 127, %302 ], [ 127, %.thread567 ], [ 127, %.thread568 ], [ 127, %305 ], [ 127, %198 ]
  %315 = getelementptr inbounds i8, ptr %0, i64 28
  %316 = load i32, ptr %315, align 4, !tbaa !36
  %317 = icmp eq i32 %316, 2501
  br i1 %317, label %318, label %319

318:                                              ; preds = %310
  tail call void @libxsmm_aarch64_instruction_sm(ptr noundef nonnull %0, i32 noundef -721205377) #3
  br label %319

319:                                              ; preds = %318, %310
  %320 = load i32, ptr %312, align 4, !tbaa !22
  %321 = load i32, ptr %311, align 4, !tbaa !23
  tail call void @libxsmm_configure_aarch64_kernel_vregs_masks(ptr noundef nonnull %0, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %320, i32 noundef %321, i32 noundef %.0507, i32 noundef %.0506)
  %322 = getelementptr inbounds i8, ptr %3, i64 72
  %323 = load i32, ptr %322, align 4, !tbaa !39
  %324 = sub i32 32, %323
  %325 = load i32, ptr %4, align 1, !tbaa !40
  %326 = getelementptr inbounds i8, ptr %4, i64 4
  %327 = load i32, ptr %326, align 1, !tbaa !41
  %328 = getelementptr inbounds i8, ptr %3, i64 480
  %329 = load i32, ptr %328, align 4, !tbaa !42
  call void @libxsmm_generator_configure_aarch64_M_N_blocking(ptr noundef nonnull %0, ptr noundef nonnull %4, i32 noundef %325, i32 noundef %327, i32 noundef %329, ptr noundef nonnull %7, ptr noundef nonnull %10, i32 noundef %324)
  call void @libxsmm_generator_configure_aarch64_loop_order(ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef nonnull %8, ptr noundef nonnull %11, ptr noundef nonnull %9, ptr noundef nonnull %12)
  %330 = load i32, ptr %6, align 4, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %3, i64 500
  store i32 %330, ptr %331, align 4, !tbaa !43
  %332 = load i32, ptr %9, align 4, !tbaa !5
  %.not531593 = icmp eq i32 %332, 0
  br i1 %.not531593, label %._crit_edge598, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %319
  %333 = getelementptr inbounds i8, ptr %2, i64 28
  %334 = getelementptr inbounds i8, ptr %2, i64 8
  %335 = getelementptr inbounds i8, ptr %2, i64 12
  %336 = getelementptr inbounds i8, ptr %2, i64 52
  %337 = getelementptr inbounds i8, ptr %2, i64 36
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %439
  %.0597 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1.lcssa615, %439 ]
  %.0502596 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1503.lcssa614, %439 ]
  %.0504595 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1505.lcssa613, %439 ]
  %.0508594 = phi i32 [ 0, %.preheader.lr.ph ], [ %411, %439 ]
  %338 = load i32, ptr %12, align 4
  %.not532587 = icmp eq i32 %338, 0
  br i1 %.not532587, label %._crit_edge.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader, %382
  %339 = phi i32 [ %383, %382 ], [ %338, %.preheader ]
  %.0509589 = phi i32 [ %.1510, %382 ], [ 0, %.preheader ]
  %.0511588 = phi i32 [ %354, %382 ], [ 0, %.preheader ]
  %340 = load i32, ptr %8, align 4
  %341 = icmp ult i32 %.0508594, %340
  %342 = load i32, ptr %9, align 4
  %343 = sub i32 %342, %.0508594
  %344 = select i1 %341, i32 %340, i32 %343
  %345 = load i32, ptr %11, align 4
  %346 = icmp ult i32 %.0511588, %345
  %347 = sub i32 %339, %.0511588
  %348 = select i1 %346, i32 %345, i32 %347
  %349 = load i32, ptr %6, align 4, !tbaa !5
  %350 = icmp eq i32 %349, 1
  %351 = select i1 %350, i32 %344, i32 %348
  %352 = icmp eq i32 %349, 0
  %353 = select i1 %352, i32 %344, i32 %348
  call void @libxsmm_generator_unary_aarch64_binary_2d_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %353, i32 noundef %351)
  %354 = add i32 %348, %.0511588
  %355 = load i32, ptr %12, align 4, !tbaa !5
  %.not534 = icmp eq i32 %354, %355
  br i1 %.not534, label %382, label %356

356:                                              ; preds = %.lr.ph
  %357 = load i32, ptr %6, align 4, !tbaa !5
  %358 = icmp ne i32 %357, 1
  %359 = zext i1 %358 to i32
  %360 = load i32, ptr %314, align 4, !tbaa !17
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %360, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  %361 = load i32, ptr %313, align 4, !tbaa !19
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %361, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  %362 = load i8, ptr %98, align 1, !tbaa !9
  %363 = icmp eq i8 %362, 1
  br i1 %363, label %364, label %369

364:                                              ; preds = %356
  %365 = load i16, ptr %124, align 1, !tbaa !16
  %366 = icmp eq i16 %365, 63
  br i1 %366, label %367, label %.thread569.thread

367:                                              ; preds = %364
  %368 = load i32, ptr %333, align 4, !tbaa !34
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %368, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  %.pre602 = load i8, ptr %98, align 1, !tbaa !9
  br label %369

369:                                              ; preds = %367, %356
  %370 = phi i8 [ %.pre602, %367 ], [ %362, %356 ]
  %371 = and i8 %370, -2
  %switch542 = icmp eq i8 %371, 2
  br i1 %switch542, label %372, label %.thread569

372:                                              ; preds = %369
  %373 = load i32, ptr %334, align 4, !tbaa !24
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %373, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  %.pr = load i8, ptr %98, align 1, !tbaa !9
  %374 = icmp eq i8 %.pr, 3
  br i1 %374, label %375, label %.thread569

375:                                              ; preds = %372
  %376 = load i32, ptr %335, align 4, !tbaa !26
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %376, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  %.pr570 = load i8, ptr %98, align 1, !tbaa !9
  br label %.thread569

.thread569:                                       ; preds = %369, %375, %372
  %377 = phi i8 [ %.pr570, %375 ], [ %.pr, %372 ], [ %370, %369 ]
  %378 = icmp eq i8 %377, 1
  br i1 %378, label %thread-pre-split, label %382

thread-pre-split:                                 ; preds = %.thread569
  %.pr608 = load i16, ptr %124, align 1, !tbaa !16
  br label %.thread569.thread

.thread569.thread:                                ; preds = %364, %thread-pre-split
  %379 = phi i16 [ %.pr608, %thread-pre-split ], [ %365, %364 ]
  switch i16 %379, label %382 [
    i16 5, label %.sink.split
    i16 6, label %.sink.split
    i16 34, label %.sink.split
    i16 35, label %.sink.split
    i16 36, label %.sink.split
    i16 37, label %.sink.split
    i16 25, label %380
    i16 26, label %380
  ]

380:                                              ; preds = %.thread569.thread, %.thread569.thread
  br label %.sink.split

.sink.split:                                      ; preds = %.thread569.thread, %.thread569.thread, %.thread569.thread, %.thread569.thread, %.thread569.thread, %.thread569.thread, %380
  %.sink631 = phi ptr [ %336, %380 ], [ %337, %.thread569.thread ], [ %337, %.thread569.thread ], [ %337, %.thread569.thread ], [ %337, %.thread569.thread ], [ %337, %.thread569.thread ], [ %337, %.thread569.thread ]
  %381 = load i32, ptr %.sink631, align 4, !tbaa !5
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %381, i32 noundef 4096, i32 noundef %353, i32 noundef %351, i32 noundef %359)
  br label %382

382:                                              ; preds = %.sink.split, %.thread569.thread, %.thread569, %.lr.ph
  %.1510 = phi i32 [ 1, %.thread569 ], [ %.0509589, %.lr.ph ], [ 1, %.thread569.thread ], [ 1, %.sink.split ]
  %383 = load i32, ptr %12, align 4
  %.not532 = icmp eq i32 %354, %383
  br i1 %.not532, label %._crit_edge, label %.lr.ph, !llvm.loop !44

._crit_edge:                                      ; preds = %382
  %384 = icmp eq i32 %.1510, 1
  br i1 %384, label %385, label %._crit_edge.thread

385:                                              ; preds = %._crit_edge
  %386 = load i32, ptr %6, align 4, !tbaa !5
  %387 = icmp ne i32 %386, 1
  %388 = zext i1 %387 to i32
  %389 = load i32, ptr %314, align 4, !tbaa !17
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %389, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  %390 = load i32, ptr %313, align 4, !tbaa !19
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %390, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  %391 = load i8, ptr %98, align 1, !tbaa !9
  %392 = icmp eq i8 %391, 1
  br i1 %392, label %393, label %398

393:                                              ; preds = %385
  %394 = load i16, ptr %124, align 1, !tbaa !16
  %395 = icmp eq i16 %394, 63
  br i1 %395, label %396, label %.thread572.thread

396:                                              ; preds = %393
  %397 = load i32, ptr %333, align 4, !tbaa !34
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %397, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  %.pre603 = load i8, ptr %98, align 1, !tbaa !9
  br label %398

398:                                              ; preds = %396, %385
  %399 = phi i8 [ %.pre603, %396 ], [ %391, %385 ]
  %400 = and i8 %399, -2
  %switch544 = icmp eq i8 %400, 2
  br i1 %switch544, label %401, label %.thread572

401:                                              ; preds = %398
  %402 = load i32, ptr %334, align 4, !tbaa !24
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %402, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  %.pr571 = load i8, ptr %98, align 1, !tbaa !9
  %403 = icmp eq i8 %.pr571, 3
  br i1 %403, label %404, label %.thread572

404:                                              ; preds = %401
  %405 = load i32, ptr %335, align 4, !tbaa !26
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %405, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  %.pr573 = load i8, ptr %98, align 1, !tbaa !9
  br label %.thread572

.thread572:                                       ; preds = %398, %404, %401
  %406 = phi i8 [ %.pr573, %404 ], [ %.pr571, %401 ], [ %399, %398 ]
  %407 = icmp eq i8 %406, 1
  br i1 %407, label %thread-pre-split618, label %._crit_edge.thread

thread-pre-split618:                              ; preds = %.thread572
  %.pr619 = load i16, ptr %124, align 1, !tbaa !16
  br label %.thread572.thread

.thread572.thread:                                ; preds = %393, %thread-pre-split618
  %408 = phi i16 [ %.pr619, %thread-pre-split618 ], [ %394, %393 ]
  switch i16 %408, label %._crit_edge.thread [
    i16 5, label %._crit_edge.thread.sink.split
    i16 6, label %._crit_edge.thread.sink.split
    i16 34, label %._crit_edge.thread.sink.split
    i16 35, label %._crit_edge.thread.sink.split
    i16 36, label %._crit_edge.thread.sink.split
    i16 37, label %._crit_edge.thread.sink.split
    i16 25, label %409
    i16 26, label %409
  ]

409:                                              ; preds = %.thread572.thread, %.thread572.thread
  br label %._crit_edge.thread.sink.split

._crit_edge.thread.sink.split:                    ; preds = %.thread572.thread, %.thread572.thread, %.thread572.thread, %.thread572.thread, %.thread572.thread, %.thread572.thread, %409
  %.sink633 = phi ptr [ %336, %409 ], [ %337, %.thread572.thread ], [ %337, %.thread572.thread ], [ %337, %.thread572.thread ], [ %337, %.thread572.thread ], [ %337, %.thread572.thread ], [ %337, %.thread572.thread ]
  %410 = load i32, ptr %.sink633, align 4, !tbaa !5
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %410, i32 noundef 4097, i32 noundef %353, i32 noundef %351, i32 noundef %388)
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %._crit_edge.thread.sink.split, %.preheader, %.thread572.thread, %.thread572, %._crit_edge
  %.1.lcssa615 = phi i32 [ %344, %.thread572.thread ], [ %344, %.thread572 ], [ %344, %._crit_edge ], [ %.0597, %.preheader ], [ %344, %._crit_edge.thread.sink.split ]
  %.1503.lcssa614 = phi i32 [ %351, %.thread572.thread ], [ %351, %.thread572 ], [ %351, %._crit_edge ], [ %.0502596, %.preheader ], [ %351, %._crit_edge.thread.sink.split ]
  %.1505.lcssa613 = phi i32 [ %353, %.thread572.thread ], [ %353, %.thread572 ], [ %353, %._crit_edge ], [ %.0504595, %.preheader ], [ %353, %._crit_edge.thread.sink.split ]
  %411 = add i32 %.1.lcssa615, %.0508594
  %412 = load i32, ptr %9, align 4, !tbaa !5
  %.not533 = icmp eq i32 %411, %412
  br i1 %.not533, label %439, label %413

413:                                              ; preds = %._crit_edge.thread
  %414 = load i32, ptr %6, align 4, !tbaa !5
  %415 = icmp ne i32 %414, 0
  %416 = zext i1 %415 to i32
  %417 = load i32, ptr %314, align 4, !tbaa !17
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %417, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  %418 = load i32, ptr %313, align 4, !tbaa !19
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %418, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  %419 = load i8, ptr %98, align 1, !tbaa !9
  %420 = icmp eq i8 %419, 1
  br i1 %420, label %421, label %426

421:                                              ; preds = %413
  %422 = load i16, ptr %124, align 1, !tbaa !16
  %423 = icmp eq i16 %422, 63
  br i1 %423, label %424, label %.thread575.thread

424:                                              ; preds = %421
  %425 = load i32, ptr %333, align 4, !tbaa !34
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %425, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  %.pre604 = load i8, ptr %98, align 1, !tbaa !9
  br label %426

426:                                              ; preds = %424, %413
  %427 = phi i8 [ %.pre604, %424 ], [ %419, %413 ]
  %428 = and i8 %427, -2
  %switch546 = icmp eq i8 %428, 2
  br i1 %switch546, label %429, label %.thread575

429:                                              ; preds = %426
  %430 = load i32, ptr %334, align 4, !tbaa !24
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %430, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  %.pr574 = load i8, ptr %98, align 1, !tbaa !9
  %431 = icmp eq i8 %.pr574, 3
  br i1 %431, label %432, label %.thread575

432:                                              ; preds = %429
  %433 = load i32, ptr %335, align 4, !tbaa !26
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %433, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  %.pr576 = load i8, ptr %98, align 1, !tbaa !9
  br label %.thread575

.thread575:                                       ; preds = %426, %432, %429
  %434 = phi i8 [ %.pr576, %432 ], [ %.pr574, %429 ], [ %427, %426 ]
  %435 = icmp eq i8 %434, 1
  br i1 %435, label %thread-pre-split622, label %439

thread-pre-split622:                              ; preds = %.thread575
  %.pr623 = load i16, ptr %124, align 1, !tbaa !16
  br label %.thread575.thread

.thread575.thread:                                ; preds = %421, %thread-pre-split622
  %436 = phi i16 [ %.pr623, %thread-pre-split622 ], [ %422, %421 ]
  switch i16 %436, label %439 [
    i16 5, label %.sink.split634
    i16 6, label %.sink.split634
    i16 34, label %.sink.split634
    i16 35, label %.sink.split634
    i16 36, label %.sink.split634
    i16 37, label %.sink.split634
    i16 25, label %437
    i16 26, label %437
  ]

437:                                              ; preds = %.thread575.thread, %.thread575.thread
  br label %.sink.split634

.sink.split634:                                   ; preds = %.thread575.thread, %.thread575.thread, %.thread575.thread, %.thread575.thread, %.thread575.thread, %.thread575.thread, %437
  %.sink636 = phi ptr [ %336, %437 ], [ %337, %.thread575.thread ], [ %337, %.thread575.thread ], [ %337, %.thread575.thread ], [ %337, %.thread575.thread ], [ %337, %.thread575.thread ], [ %337, %.thread575.thread ]
  %438 = load i32, ptr %.sink636, align 4, !tbaa !5
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef %3, ptr noundef nonnull %4, i32 noundef %438, i32 noundef 4096, i32 noundef %.1505.lcssa613, i32 noundef %.1503.lcssa614, i32 noundef %416)
  br label %439

439:                                              ; preds = %.sink.split634, %.thread575.thread, %.thread575, %._crit_edge.thread
  %440 = load i32, ptr %9, align 4, !tbaa !5
  %.not531 = icmp eq i32 %411, %440
  br i1 %.not531, label %._crit_edge598, label %.preheader, !llvm.loop !46

._crit_edge598:                                   ; preds = %439, %319
  call void @libxsmm_finalize_kernel_vregs_aarch64_masks(ptr noundef %0, ptr noundef %3, ptr noundef nonnull %4, i32 noundef 48, i32 noundef %.0507, i32 noundef %.0506)
  %441 = load i32, ptr %315, align 4, !tbaa !36
  %442 = icmp eq i32 %441, 2501
  br i1 %442, label %443, label %444

443:                                              ; preds = %._crit_edge598
  call void @libxsmm_aarch64_instruction_sm(ptr noundef nonnull %0, i32 noundef -721205633) #3
  br label %444

444:                                              ; preds = %._crit_edge598, %443, %140, %92
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #3
  ret void
}

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !7, i64 31}
!10 = !{!"libxsmm_meltw_descriptor", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !11, i64 27, !11, i64 29, !7, i64 31}
!11 = !{!"short", !7, i64 0}
!12 = !{!10, !11, i64 27}
!13 = !{!10, !6, i64 12}
!14 = !{!15, !6, i64 68}
!15 = !{!"libxsmm_mateltwise_kernel_config_struct", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144, !6, i64 148, !6, i64 152, !6, i64 156, !6, i64 160, !6, i64 164, !6, i64 168, !6, i64 172, !6, i64 176, !6, i64 180, !6, i64 184, !6, i64 188, !6, i64 192, !6, i64 196, !6, i64 200, !6, i64 204, !6, i64 208, !6, i64 212, !6, i64 216, !6, i64 220, !6, i64 224, !6, i64 228, !6, i64 232, !6, i64 236, !6, i64 240, !6, i64 244, !6, i64 248, !6, i64 252, !6, i64 256, !6, i64 260, !6, i64 264, !6, i64 268, !6, i64 272, !6, i64 276, !6, i64 280, !6, i64 284, !6, i64 288, !6, i64 292, !6, i64 296, !6, i64 300, !6, i64 304, !6, i64 308, !6, i64 312, !6, i64 316, !6, i64 320, !6, i64 324, !6, i64 328, !6, i64 332, !6, i64 336, !6, i64 340, !6, i64 344, !6, i64 348, !6, i64 352, !6, i64 356, !6, i64 360, !6, i64 364, !6, i64 368, !6, i64 372, !6, i64 376, !6, i64 380, !6, i64 384, !6, i64 388, !6, i64 392, !6, i64 396, !6, i64 400, !6, i64 404, !6, i64 408, !6, i64 412, !6, i64 416, !6, i64 420, !6, i64 424, !6, i64 428, !6, i64 432, !6, i64 436, !6, i64 440, !6, i64 444, !6, i64 448, !6, i64 452, !6, i64 456, !6, i64 460, !6, i64 464, !6, i64 468, !6, i64 472, !6, i64 476, !6, i64 480, !6, i64 484, !6, i64 488, !6, i64 492, !6, i64 496, !6, i64 500, !6, i64 504, !6, i64 508, !7, i64 512}
!16 = !{!10, !11, i64 29}
!17 = !{!18, !6, i64 4}
!18 = !{!"libxsmm_mateltwise_gp_reg_mapping_struct", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !6, i64 52, !6, i64 56, !6, i64 60, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !6, i64 92, !6, i64 96, !6, i64 100, !6, i64 104, !6, i64 108, !6, i64 112, !6, i64 116, !6, i64 120, !6, i64 124, !6, i64 128, !6, i64 132, !6, i64 136, !6, i64 140, !6, i64 144}
!19 = !{!18, !6, i64 24}
!20 = !{!18, !6, i64 96}
!21 = !{!18, !6, i64 100}
!22 = !{!18, !6, i64 140}
!23 = !{!18, !6, i64 144}
!24 = !{!18, !6, i64 8}
!25 = !{!18, !6, i64 0}
!26 = !{!18, !6, i64 12}
!27 = !{!18, !6, i64 36}
!28 = !{!18, !6, i64 44}
!29 = !{!18, !6, i64 48}
!30 = !{!18, !6, i64 52}
!31 = !{!18, !6, i64 56}
!32 = !{!18, !6, i64 60}
!33 = !{!18, !6, i64 136}
!34 = !{!18, !6, i64 28}
!35 = !{!18, !6, i64 40}
!36 = !{!37, !6, i64 28}
!37 = !{!"libxsmm_generated_code", !38, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28}
!38 = !{!"any pointer", !7, i64 0}
!39 = !{!15, !6, i64 72}
!40 = !{!10, !6, i64 0}
!41 = !{!10, !6, i64 4}
!42 = !{!15, !6, i64 480}
!43 = !{!15, !6, i64 500}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = distinct !{!46, !45}


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