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

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

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

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

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

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

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

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

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

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

65:                                               ; preds = %7
  %66 = load ptr, ptr %8, align 8, !tbaa !5
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = load i32, ptr %26, align 4, !tbaa !9
  %69 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %66, ptr noundef %67, i32 noundef %68, i32 noundef %69)
  br label %70

70:                                               ; preds = %65, %7
  %71 = load i32, ptr %25, align 4, !tbaa !9
  %72 = icmp ugt i32 %71, 1
  br i1 %72, label %73, label %78

73:                                               ; preds = %70
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = load i32, ptr %27, align 4, !tbaa !9
  %77 = load i32, ptr %29, align 4, !tbaa !9
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %74, ptr noundef %75, i32 noundef %76, i32 noundef %77)
  br label %78

78:                                               ; preds = %73, %70
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = load ptr, ptr %11, align 8, !tbaa !5
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = load i32, ptr %34, align 4, !tbaa !9
  %84 = load i32, ptr %23, align 4, !tbaa !9
  %85 = load i32, ptr %18, align 4, !tbaa !9
  %86 = load i32, ptr %21, align 4, !tbaa !9
  %87 = load i32, ptr %15, align 4, !tbaa !9
  %88 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_load_aarch64_2d_reg_block(ptr noundef %79, ptr noundef %80, ptr noundef %81, ptr noundef %82, i32 noundef %83, i32 noundef %84, i32 noundef %85, i32 noundef %86, i32 noundef %87, i32 noundef %88)
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = load ptr, ptr %10, align 8, !tbaa !5
  %91 = load ptr, ptr %11, align 8, !tbaa !5
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = load i32, ptr %34, align 4, !tbaa !9
  %94 = load i32, ptr %23, align 4, !tbaa !9
  %95 = load i32, ptr %18, align 4, !tbaa !9
  %96 = load i32, ptr %21, align 4, !tbaa !9
  %97 = load i32, ptr %15, align 4, !tbaa !9
  %98 = load i32, ptr %32, align 4, !tbaa !9
  call void @libxsmm_compute_unary_binary_aarch64_2d_reg_block(ptr noundef %89, ptr noundef %90, ptr noundef %91, ptr noundef %92, i32 noundef %93, i32 noundef %94, i32 noundef %95, i32 noundef %96, i32 noundef %97, i32 noundef %98)
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  %103 = load i32, ptr %35, align 4, !tbaa !9
  %104 = load i32, ptr %23, align 4, !tbaa !9
  %105 = load i32, ptr %18, align 4, !tbaa !9
  %106 = load i32, ptr %21, align 4, !tbaa !9
  %107 = load i32, ptr %16, align 4, !tbaa !9
  %108 = load i32, ptr %33, align 4, !tbaa !9
  call void @libxsmm_store_aarch64_2d_reg_block(ptr noundef %99, ptr noundef %100, ptr noundef %101, ptr noundef %102, i32 noundef %103, i32 noundef %104, i32 noundef %105, i32 noundef %106, i32 noundef %107, i32 noundef %108)
  %109 = load i32, ptr %25, align 4, !tbaa !9
  %110 = icmp ugt i32 %109, 1
  br i1 %110, label %111, label %445

111:                                              ; preds = %78
  %112 = load i32, ptr %27, align 4, !tbaa !9
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %113, i32 0, i32 24
  %115 = load i32, ptr %114, align 4, !tbaa !17
  %116 = icmp eq i32 %112, %115
  %117 = zext i1 %116 to i64
  %118 = select i1 %116, i32 0, i32 1
  store i32 %118, ptr %36, align 4, !tbaa !9
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load ptr, ptr %11, align 8, !tbaa !5
  %122 = load ptr, ptr %12, align 8, !tbaa !5
  %123 = load ptr, ptr %10, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %123, i32 0, i32 1
  %125 = load i32, ptr %124, align 4, !tbaa !18
  %126 = load i32, ptr %31, align 4, !tbaa !9
  %127 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %119, ptr noundef %120, ptr noundef %121, ptr noundef %122, i32 noundef %125, i32 noundef 4096, i32 noundef %126, i32 noundef %127)
  %128 = load ptr, ptr %8, align 8, !tbaa !5
  %129 = load ptr, ptr %10, align 8, !tbaa !5
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = load ptr, ptr %12, align 8, !tbaa !5
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %132, i32 0, i32 6
  %134 = load i32, ptr %133, align 4, !tbaa !19
  %135 = load i32, ptr %31, align 4, !tbaa !9
  %136 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %128, ptr noundef %129, ptr noundef %130, ptr noundef %131, i32 noundef %134, i32 noundef 4096, i32 noundef %135, i32 noundef %136)
  %137 = load ptr, ptr %12, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %137, i32 0, i32 11
  %139 = load i8, ptr %138, align 1, !tbaa !20
  %140 = zext i8 %139 to i32
  %141 = icmp eq i32 %140, 1
  br i1 %141, label %142, label %158

142:                                              ; preds = %111
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %143, i32 0, i32 10
  %145 = load i16, ptr %144, align 1, !tbaa !23
  %146 = zext i16 %145 to i32
  %147 = icmp eq i32 %146, 63
  br i1 %147, label %148, label %158

148:                                              ; preds = %142
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = load ptr, ptr %11, align 8, !tbaa !5
  %152 = load ptr, ptr %12, align 8, !tbaa !5
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %153, i32 0, i32 7
  %155 = load i32, ptr %154, align 4, !tbaa !24
  %156 = load i32, ptr %31, align 4, !tbaa !9
  %157 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %149, ptr noundef %150, ptr noundef %151, ptr noundef %152, i32 noundef %155, i32 noundef 4096, i32 noundef %156, i32 noundef %157)
  br label %158

158:                                              ; preds = %148, %142, %111
  %159 = load ptr, ptr %12, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %159, i32 0, i32 11
  %161 = load i8, ptr %160, align 1, !tbaa !20
  %162 = zext i8 %161 to i32
  %163 = icmp eq i32 %162, 2
  br i1 %163, label %170, label %164

164:                                              ; preds = %158
  %165 = load ptr, ptr %12, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %165, i32 0, i32 11
  %167 = load i8, ptr %166, align 1, !tbaa !20
  %168 = zext i8 %167 to i32
  %169 = icmp eq i32 %168, 3
  br i1 %169, label %170, label %180

170:                                              ; preds = %164, %158
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = load ptr, ptr %10, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %175, i32 0, i32 2
  %177 = load i32, ptr %176, align 4, !tbaa !25
  %178 = load i32, ptr %31, align 4, !tbaa !9
  %179 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %171, ptr noundef %172, ptr noundef %173, ptr noundef %174, i32 noundef %177, i32 noundef 4096, i32 noundef %178, i32 noundef %179)
  br label %180

180:                                              ; preds = %170, %164
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %181, i32 0, i32 11
  %183 = load i8, ptr %182, align 1, !tbaa !20
  %184 = zext i8 %183 to i32
  %185 = icmp eq i32 %184, 3
  br i1 %185, label %186, label %196

186:                                              ; preds = %180
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = load ptr, ptr %10, align 8, !tbaa !5
  %189 = load ptr, ptr %11, align 8, !tbaa !5
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = load ptr, ptr %10, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %191, i32 0, i32 3
  %193 = load i32, ptr %192, align 4, !tbaa !26
  %194 = load i32, ptr %31, align 4, !tbaa !9
  %195 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %187, ptr noundef %188, ptr noundef %189, ptr noundef %190, i32 noundef %193, i32 noundef 4096, i32 noundef %194, i32 noundef %195)
  br label %196

196:                                              ; preds = %186, %180
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %197, i32 0, i32 11
  %199 = load i8, ptr %198, align 1, !tbaa !20
  %200 = zext i8 %199 to i32
  %201 = icmp eq i32 %200, 1
  br i1 %201, label %202, label %272

202:                                              ; preds = %196
  %203 = load ptr, ptr %12, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %203, i32 0, i32 10
  %205 = load i16, ptr %204, align 1, !tbaa !23
  %206 = zext i16 %205 to i32
  %207 = icmp eq i32 %206, 5
  br i1 %207, label %238, label %208

208:                                              ; preds = %202
  %209 = load ptr, ptr %12, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %209, i32 0, i32 10
  %211 = load i16, ptr %210, align 1, !tbaa !23
  %212 = zext i16 %211 to i32
  %213 = icmp eq i32 %212, 6
  br i1 %213, label %238, label %214

214:                                              ; preds = %208
  %215 = load ptr, ptr %12, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %215, i32 0, i32 10
  %217 = load i16, ptr %216, align 1, !tbaa !23
  %218 = zext i16 %217 to i32
  %219 = icmp eq i32 %218, 34
  br i1 %219, label %238, label %220

220:                                              ; preds = %214
  %221 = load ptr, ptr %12, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %221, i32 0, i32 10
  %223 = load i16, ptr %222, align 1, !tbaa !23
  %224 = zext i16 %223 to i32
  %225 = icmp eq i32 %224, 35
  br i1 %225, label %238, label %226

226:                                              ; preds = %220
  %227 = load ptr, ptr %12, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %227, i32 0, i32 10
  %229 = load i16, ptr %228, align 1, !tbaa !23
  %230 = zext i16 %229 to i32
  %231 = icmp eq i32 %230, 36
  br i1 %231, label %238, label %232

232:                                              ; preds = %226
  %233 = load ptr, ptr %12, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %233, i32 0, i32 10
  %235 = load i16, ptr %234, align 1, !tbaa !23
  %236 = zext i16 %235 to i32
  %237 = icmp eq i32 %236, 37
  br i1 %237, label %238, label %248

238:                                              ; preds = %232, %226, %220, %214, %208, %202
  %239 = load ptr, ptr %8, align 8, !tbaa !5
  %240 = load ptr, ptr %10, align 8, !tbaa !5
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  %242 = load ptr, ptr %12, align 8, !tbaa !5
  %243 = load ptr, ptr %10, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %243, i32 0, i32 9
  %245 = load i32, ptr %244, align 4, !tbaa !27
  %246 = load i32, ptr %31, align 4, !tbaa !9
  %247 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %239, ptr noundef %240, ptr noundef %241, ptr noundef %242, i32 noundef %245, i32 noundef 4096, i32 noundef %246, i32 noundef %247)
  br label %271

248:                                              ; preds = %232
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %249, i32 0, i32 10
  %251 = load i16, ptr %250, align 1, !tbaa !23
  %252 = zext i16 %251 to i32
  %253 = icmp eq i32 %252, 25
  br i1 %253, label %260, label %254

254:                                              ; preds = %248
  %255 = load ptr, ptr %12, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %255, i32 0, i32 10
  %257 = load i16, ptr %256, align 1, !tbaa !23
  %258 = zext i16 %257 to i32
  %259 = icmp eq i32 %258, 26
  br i1 %259, label %260, label %270

260:                                              ; preds = %254, %248
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  %262 = load ptr, ptr %10, align 8, !tbaa !5
  %263 = load ptr, ptr %11, align 8, !tbaa !5
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = load ptr, ptr %10, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %265, i32 0, i32 13
  %267 = load i32, ptr %266, align 4, !tbaa !28
  %268 = load i32, ptr %31, align 4, !tbaa !9
  %269 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %261, ptr noundef %262, ptr noundef %263, ptr noundef %264, i32 noundef %267, i32 noundef 4096, i32 noundef %268, i32 noundef %269)
  br label %270

270:                                              ; preds = %260, %254
  br label %271

271:                                              ; preds = %270, %238
  br label %272

272:                                              ; preds = %271, %196
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = load ptr, ptr %9, align 8, !tbaa !5
  %275 = load i32, ptr %27, align 4, !tbaa !9
  %276 = load i32, ptr %31, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %273, ptr noundef %274, i32 noundef %275, i32 noundef %276)
  %277 = load ptr, ptr %8, align 8, !tbaa !5
  %278 = load ptr, ptr %10, align 8, !tbaa !5
  %279 = load ptr, ptr %11, align 8, !tbaa !5
  %280 = load ptr, ptr %12, align 8, !tbaa !5
  %281 = load ptr, ptr %10, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %281, i32 0, i32 1
  %283 = load i32, ptr %282, align 4, !tbaa !18
  %284 = load i32, ptr %31, align 4, !tbaa !9
  %285 = load i32, ptr %25, align 4, !tbaa !9
  %286 = mul i32 %284, %285
  %287 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %277, ptr noundef %278, ptr noundef %279, ptr noundef %280, i32 noundef %283, i32 noundef 4097, i32 noundef %286, i32 noundef %287)
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = load ptr, ptr %10, align 8, !tbaa !5
  %290 = load ptr, ptr %11, align 8, !tbaa !5
  %291 = load ptr, ptr %12, align 8, !tbaa !5
  %292 = load ptr, ptr %10, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %292, i32 0, i32 6
  %294 = load i32, ptr %293, align 4, !tbaa !19
  %295 = load i32, ptr %31, align 4, !tbaa !9
  %296 = load i32, ptr %25, align 4, !tbaa !9
  %297 = mul i32 %295, %296
  %298 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %288, ptr noundef %289, ptr noundef %290, ptr noundef %291, i32 noundef %294, i32 noundef 4097, i32 noundef %297, i32 noundef %298)
  %299 = load ptr, ptr %12, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %299, i32 0, i32 11
  %301 = load i8, ptr %300, align 1, !tbaa !20
  %302 = zext i8 %301 to i32
  %303 = icmp eq i32 %302, 1
  br i1 %303, label %304, label %322

304:                                              ; preds = %272
  %305 = load ptr, ptr %12, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %305, i32 0, i32 10
  %307 = load i16, ptr %306, align 1, !tbaa !23
  %308 = zext i16 %307 to i32
  %309 = icmp eq i32 %308, 63
  br i1 %309, label %310, label %322

310:                                              ; preds = %304
  %311 = load ptr, ptr %8, align 8, !tbaa !5
  %312 = load ptr, ptr %10, align 8, !tbaa !5
  %313 = load ptr, ptr %11, align 8, !tbaa !5
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = load ptr, ptr %10, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %315, i32 0, i32 7
  %317 = load i32, ptr %316, align 4, !tbaa !24
  %318 = load i32, ptr %31, align 4, !tbaa !9
  %319 = load i32, ptr %25, align 4, !tbaa !9
  %320 = mul i32 %318, %319
  %321 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %311, ptr noundef %312, ptr noundef %313, ptr noundef %314, i32 noundef %317, i32 noundef 4097, i32 noundef %320, i32 noundef %321)
  br label %322

322:                                              ; preds = %310, %304, %272
  %323 = load ptr, ptr %12, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %323, i32 0, i32 11
  %325 = load i8, ptr %324, align 1, !tbaa !20
  %326 = zext i8 %325 to i32
  %327 = icmp eq i32 %326, 2
  br i1 %327, label %334, label %328

328:                                              ; preds = %322
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %329, i32 0, i32 11
  %331 = load i8, ptr %330, align 1, !tbaa !20
  %332 = zext i8 %331 to i32
  %333 = icmp eq i32 %332, 3
  br i1 %333, label %334, label %346

334:                                              ; preds = %328, %322
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = load ptr, ptr %10, align 8, !tbaa !5
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = load ptr, ptr %12, align 8, !tbaa !5
  %339 = load ptr, ptr %10, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %339, i32 0, i32 2
  %341 = load i32, ptr %340, align 4, !tbaa !25
  %342 = load i32, ptr %31, align 4, !tbaa !9
  %343 = load i32, ptr %25, align 4, !tbaa !9
  %344 = mul i32 %342, %343
  %345 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %335, ptr noundef %336, ptr noundef %337, ptr noundef %338, i32 noundef %341, i32 noundef 4097, i32 noundef %344, i32 noundef %345)
  br label %346

346:                                              ; preds = %334, %328
  %347 = load ptr, ptr %12, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %347, i32 0, i32 11
  %349 = load i8, ptr %348, align 1, !tbaa !20
  %350 = zext i8 %349 to i32
  %351 = icmp eq i32 %350, 3
  br i1 %351, label %352, label %364

352:                                              ; preds = %346
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = load ptr, ptr %10, align 8, !tbaa !5
  %355 = load ptr, ptr %11, align 8, !tbaa !5
  %356 = load ptr, ptr %12, align 8, !tbaa !5
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %357, i32 0, i32 3
  %359 = load i32, ptr %358, align 4, !tbaa !26
  %360 = load i32, ptr %31, align 4, !tbaa !9
  %361 = load i32, ptr %25, align 4, !tbaa !9
  %362 = mul i32 %360, %361
  %363 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %353, ptr noundef %354, ptr noundef %355, ptr noundef %356, i32 noundef %359, i32 noundef 4097, i32 noundef %362, i32 noundef %363)
  br label %364

364:                                              ; preds = %352, %346
  %365 = load ptr, ptr %12, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %365, i32 0, i32 11
  %367 = load i8, ptr %366, align 1, !tbaa !20
  %368 = zext i8 %367 to i32
  %369 = icmp eq i32 %368, 1
  br i1 %369, label %370, label %444

370:                                              ; preds = %364
  %371 = load ptr, ptr %12, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %371, i32 0, i32 10
  %373 = load i16, ptr %372, align 1, !tbaa !23
  %374 = zext i16 %373 to i32
  %375 = icmp eq i32 %374, 5
  br i1 %375, label %406, label %376

376:                                              ; preds = %370
  %377 = load ptr, ptr %12, 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 !23
  %380 = zext i16 %379 to i32
  %381 = icmp eq i32 %380, 6
  br i1 %381, label %406, label %382

382:                                              ; preds = %376
  %383 = load ptr, ptr %12, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %383, i32 0, i32 10
  %385 = load i16, ptr %384, align 1, !tbaa !23
  %386 = zext i16 %385 to i32
  %387 = icmp eq i32 %386, 34
  br i1 %387, label %406, label %388

388:                                              ; preds = %382
  %389 = load ptr, ptr %12, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %389, i32 0, i32 10
  %391 = load i16, ptr %390, align 1, !tbaa !23
  %392 = zext i16 %391 to i32
  %393 = icmp eq i32 %392, 35
  br i1 %393, label %406, label %394

394:                                              ; preds = %388
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %395, i32 0, i32 10
  %397 = load i16, ptr %396, align 1, !tbaa !23
  %398 = zext i16 %397 to i32
  %399 = icmp eq i32 %398, 36
  br i1 %399, label %406, label %400

400:                                              ; preds = %394
  %401 = load ptr, ptr %12, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %401, i32 0, i32 10
  %403 = load i16, ptr %402, align 1, !tbaa !23
  %404 = zext i16 %403 to i32
  %405 = icmp eq i32 %404, 37
  br i1 %405, label %406, label %418

406:                                              ; preds = %400, %394, %388, %382, %376, %370
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = load ptr, ptr %10, align 8, !tbaa !5
  %409 = load ptr, ptr %11, align 8, !tbaa !5
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = load ptr, ptr %10, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %411, i32 0, i32 9
  %413 = load i32, ptr %412, align 4, !tbaa !27
  %414 = load i32, ptr %31, align 4, !tbaa !9
  %415 = load i32, ptr %25, align 4, !tbaa !9
  %416 = mul i32 %414, %415
  %417 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %407, ptr noundef %408, ptr noundef %409, ptr noundef %410, i32 noundef %413, i32 noundef 4097, i32 noundef %416, i32 noundef %417)
  br label %443

418:                                              ; preds = %400
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %419, i32 0, i32 10
  %421 = load i16, ptr %420, align 1, !tbaa !23
  %422 = zext i16 %421 to i32
  %423 = icmp eq i32 %422, 25
  br i1 %423, label %430, label %424

424:                                              ; preds = %418
  %425 = load ptr, ptr %12, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %425, i32 0, i32 10
  %427 = load i16, ptr %426, align 1, !tbaa !23
  %428 = zext i16 %427 to i32
  %429 = icmp eq i32 %428, 26
  br i1 %429, label %430, label %442

430:                                              ; preds = %424, %418
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = load ptr, ptr %10, align 8, !tbaa !5
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = load ptr, ptr %12, align 8, !tbaa !5
  %435 = load ptr, ptr %10, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %435, i32 0, i32 13
  %437 = load i32, ptr %436, align 4, !tbaa !28
  %438 = load i32, ptr %31, align 4, !tbaa !9
  %439 = load i32, ptr %25, align 4, !tbaa !9
  %440 = mul i32 %438, %439
  %441 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %431, ptr noundef %432, ptr noundef %433, ptr noundef %434, i32 noundef %437, i32 noundef 4097, i32 noundef %440, i32 noundef %441)
  br label %442

442:                                              ; preds = %430, %424
  br label %443

443:                                              ; preds = %442, %406
  br label %444

444:                                              ; preds = %443, %364
  br label %445

445:                                              ; preds = %444, %78
  %446 = load i32, ptr %24, align 4, !tbaa !9
  %447 = icmp ugt i32 %446, 1
  br i1 %447, label %448, label %782

448:                                              ; preds = %445
  %449 = load i32, ptr %26, align 4, !tbaa !9
  %450 = load ptr, ptr %10, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %450, i32 0, i32 24
  %452 = load i32, ptr %451, align 4, !tbaa !17
  %453 = icmp eq i32 %449, %452
  %454 = zext i1 %453 to i64
  %455 = select i1 %453, i32 0, i32 1
  store i32 %455, ptr %36, align 4, !tbaa !9
  %456 = load ptr, ptr %8, align 8, !tbaa !5
  %457 = load ptr, ptr %10, align 8, !tbaa !5
  %458 = load ptr, ptr %11, align 8, !tbaa !5
  %459 = load ptr, ptr %12, align 8, !tbaa !5
  %460 = load ptr, ptr %10, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %460, i32 0, i32 1
  %462 = load i32, ptr %461, align 4, !tbaa !18
  %463 = load i32, ptr %30, align 4, !tbaa !9
  %464 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %456, ptr noundef %457, ptr noundef %458, ptr noundef %459, i32 noundef %462, i32 noundef 4096, i32 noundef %463, i32 noundef %464)
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = load ptr, ptr %10, align 8, !tbaa !5
  %467 = load ptr, ptr %11, align 8, !tbaa !5
  %468 = load ptr, ptr %12, align 8, !tbaa !5
  %469 = load ptr, ptr %10, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %469, i32 0, i32 6
  %471 = load i32, ptr %470, align 4, !tbaa !19
  %472 = load i32, ptr %30, align 4, !tbaa !9
  %473 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %465, ptr noundef %466, ptr noundef %467, ptr noundef %468, i32 noundef %471, i32 noundef 4096, i32 noundef %472, i32 noundef %473)
  %474 = load ptr, ptr %12, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %474, i32 0, i32 11
  %476 = load i8, ptr %475, align 1, !tbaa !20
  %477 = zext i8 %476 to i32
  %478 = icmp eq i32 %477, 1
  br i1 %478, label %479, label %495

479:                                              ; preds = %448
  %480 = load ptr, ptr %12, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %480, i32 0, i32 10
  %482 = load i16, ptr %481, align 1, !tbaa !23
  %483 = zext i16 %482 to i32
  %484 = icmp eq i32 %483, 63
  br i1 %484, label %485, label %495

485:                                              ; preds = %479
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = load ptr, ptr %10, align 8, !tbaa !5
  %488 = load ptr, ptr %11, align 8, !tbaa !5
  %489 = load ptr, ptr %12, align 8, !tbaa !5
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %490, i32 0, i32 7
  %492 = load i32, ptr %491, align 4, !tbaa !24
  %493 = load i32, ptr %30, align 4, !tbaa !9
  %494 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %486, ptr noundef %487, ptr noundef %488, ptr noundef %489, i32 noundef %492, i32 noundef 4096, i32 noundef %493, i32 noundef %494)
  br label %495

495:                                              ; preds = %485, %479, %448
  %496 = load ptr, ptr %12, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %496, i32 0, i32 11
  %498 = load i8, ptr %497, align 1, !tbaa !20
  %499 = zext i8 %498 to i32
  %500 = icmp eq i32 %499, 2
  br i1 %500, label %507, label %501

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

507:                                              ; preds = %501, %495
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = load ptr, ptr %10, align 8, !tbaa !5
  %510 = load ptr, ptr %11, align 8, !tbaa !5
  %511 = load ptr, ptr %12, align 8, !tbaa !5
  %512 = load ptr, ptr %10, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %512, i32 0, i32 2
  %514 = load i32, ptr %513, align 4, !tbaa !25
  %515 = load i32, ptr %30, align 4, !tbaa !9
  %516 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %508, ptr noundef %509, ptr noundef %510, ptr noundef %511, i32 noundef %514, i32 noundef 4096, i32 noundef %515, i32 noundef %516)
  br label %517

517:                                              ; preds = %507, %501
  %518 = load ptr, ptr %12, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %518, i32 0, i32 11
  %520 = load i8, ptr %519, align 1, !tbaa !20
  %521 = zext i8 %520 to i32
  %522 = icmp eq i32 %521, 3
  br i1 %522, label %523, label %533

523:                                              ; preds = %517
  %524 = load ptr, ptr %8, align 8, !tbaa !5
  %525 = load ptr, ptr %10, align 8, !tbaa !5
  %526 = load ptr, ptr %11, align 8, !tbaa !5
  %527 = load ptr, ptr %12, align 8, !tbaa !5
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %528, i32 0, i32 3
  %530 = load i32, ptr %529, align 4, !tbaa !26
  %531 = load i32, ptr %30, align 4, !tbaa !9
  %532 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %524, ptr noundef %525, ptr noundef %526, ptr noundef %527, i32 noundef %530, i32 noundef 4096, i32 noundef %531, i32 noundef %532)
  br label %533

533:                                              ; preds = %523, %517
  %534 = load ptr, ptr %12, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %534, i32 0, i32 11
  %536 = load i8, ptr %535, align 1, !tbaa !20
  %537 = zext i8 %536 to i32
  %538 = icmp eq i32 %537, 1
  br i1 %538, label %539, label %609

539:                                              ; preds = %533
  %540 = load ptr, ptr %12, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %540, i32 0, i32 10
  %542 = load i16, ptr %541, align 1, !tbaa !23
  %543 = zext i16 %542 to i32
  %544 = icmp eq i32 %543, 5
  br i1 %544, label %575, label %545

545:                                              ; preds = %539
  %546 = load ptr, ptr %12, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %546, i32 0, i32 10
  %548 = load i16, ptr %547, align 1, !tbaa !23
  %549 = zext i16 %548 to i32
  %550 = icmp eq i32 %549, 6
  br i1 %550, label %575, label %551

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

557:                                              ; preds = %551
  %558 = load ptr, ptr %12, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %558, i32 0, i32 10
  %560 = load i16, ptr %559, align 1, !tbaa !23
  %561 = zext i16 %560 to i32
  %562 = icmp eq i32 %561, 35
  br i1 %562, label %575, label %563

563:                                              ; preds = %557
  %564 = load ptr, ptr %12, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %564, i32 0, i32 10
  %566 = load i16, ptr %565, align 1, !tbaa !23
  %567 = zext i16 %566 to i32
  %568 = icmp eq i32 %567, 36
  br i1 %568, label %575, label %569

569:                                              ; preds = %563
  %570 = load ptr, ptr %12, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %570, i32 0, i32 10
  %572 = load i16, ptr %571, align 1, !tbaa !23
  %573 = zext i16 %572 to i32
  %574 = icmp eq i32 %573, 37
  br i1 %574, label %575, label %585

575:                                              ; preds = %569, %563, %557, %551, %545, %539
  %576 = load ptr, ptr %8, align 8, !tbaa !5
  %577 = load ptr, ptr %10, align 8, !tbaa !5
  %578 = load ptr, ptr %11, align 8, !tbaa !5
  %579 = load ptr, ptr %12, align 8, !tbaa !5
  %580 = load ptr, ptr %10, 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 !27
  %583 = load i32, ptr %30, align 4, !tbaa !9
  %584 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %576, ptr noundef %577, ptr noundef %578, ptr noundef %579, i32 noundef %582, i32 noundef 4096, i32 noundef %583, i32 noundef %584)
  br label %608

585:                                              ; preds = %569
  %586 = load ptr, ptr %12, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %586, i32 0, i32 10
  %588 = load i16, ptr %587, align 1, !tbaa !23
  %589 = zext i16 %588 to i32
  %590 = icmp eq i32 %589, 25
  br i1 %590, label %597, label %591

591:                                              ; preds = %585
  %592 = load ptr, ptr %12, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %592, i32 0, i32 10
  %594 = load i16, ptr %593, align 1, !tbaa !23
  %595 = zext i16 %594 to i32
  %596 = icmp eq i32 %595, 26
  br i1 %596, label %597, label %607

597:                                              ; preds = %591, %585
  %598 = load ptr, ptr %8, align 8, !tbaa !5
  %599 = load ptr, ptr %10, align 8, !tbaa !5
  %600 = load ptr, ptr %11, align 8, !tbaa !5
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  %602 = load ptr, ptr %10, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %602, i32 0, i32 13
  %604 = load i32, ptr %603, align 4, !tbaa !28
  %605 = load i32, ptr %30, align 4, !tbaa !9
  %606 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %598, ptr noundef %599, ptr noundef %600, ptr noundef %601, i32 noundef %604, i32 noundef 4096, i32 noundef %605, i32 noundef %606)
  br label %607

607:                                              ; preds = %597, %591
  br label %608

608:                                              ; preds = %607, %575
  br label %609

609:                                              ; preds = %608, %533
  %610 = load ptr, ptr %8, align 8, !tbaa !5
  %611 = load ptr, ptr %9, align 8, !tbaa !5
  %612 = load i32, ptr %26, align 4, !tbaa !9
  %613 = load i32, ptr %30, align 4, !tbaa !9
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %610, ptr noundef %611, i32 noundef %612, i32 noundef %613)
  %614 = load ptr, ptr %8, align 8, !tbaa !5
  %615 = load ptr, ptr %10, align 8, !tbaa !5
  %616 = load ptr, ptr %11, align 8, !tbaa !5
  %617 = load ptr, ptr %12, align 8, !tbaa !5
  %618 = load ptr, ptr %10, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %618, i32 0, i32 1
  %620 = load i32, ptr %619, align 4, !tbaa !18
  %621 = load i32, ptr %30, align 4, !tbaa !9
  %622 = load i32, ptr %24, align 4, !tbaa !9
  %623 = mul i32 %621, %622
  %624 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %614, ptr noundef %615, ptr noundef %616, ptr noundef %617, i32 noundef %620, i32 noundef 4097, i32 noundef %623, i32 noundef %624)
  %625 = load ptr, ptr %8, align 8, !tbaa !5
  %626 = load ptr, ptr %10, align 8, !tbaa !5
  %627 = load ptr, ptr %11, align 8, !tbaa !5
  %628 = load ptr, ptr %12, align 8, !tbaa !5
  %629 = load ptr, ptr %10, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %629, i32 0, i32 6
  %631 = load i32, ptr %630, align 4, !tbaa !19
  %632 = load i32, ptr %30, align 4, !tbaa !9
  %633 = load i32, ptr %24, align 4, !tbaa !9
  %634 = mul i32 %632, %633
  %635 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %625, ptr noundef %626, ptr noundef %627, ptr noundef %628, i32 noundef %631, i32 noundef 4097, i32 noundef %634, i32 noundef %635)
  %636 = load ptr, ptr %12, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %636, i32 0, i32 11
  %638 = load i8, ptr %637, align 1, !tbaa !20
  %639 = zext i8 %638 to i32
  %640 = icmp eq i32 %639, 1
  br i1 %640, label %641, label %659

641:                                              ; preds = %609
  %642 = load ptr, ptr %12, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %642, i32 0, i32 10
  %644 = load i16, ptr %643, align 1, !tbaa !23
  %645 = zext i16 %644 to i32
  %646 = icmp eq i32 %645, 63
  br i1 %646, label %647, label %659

647:                                              ; preds = %641
  %648 = load ptr, ptr %8, align 8, !tbaa !5
  %649 = load ptr, ptr %10, align 8, !tbaa !5
  %650 = load ptr, ptr %11, align 8, !tbaa !5
  %651 = load ptr, ptr %12, align 8, !tbaa !5
  %652 = load ptr, ptr %10, align 8, !tbaa !5
  %653 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %652, i32 0, i32 7
  %654 = load i32, ptr %653, align 4, !tbaa !24
  %655 = load i32, ptr %30, align 4, !tbaa !9
  %656 = load i32, ptr %24, align 4, !tbaa !9
  %657 = mul i32 %655, %656
  %658 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %648, ptr noundef %649, ptr noundef %650, ptr noundef %651, i32 noundef %654, i32 noundef 4097, i32 noundef %657, i32 noundef %658)
  br label %659

659:                                              ; preds = %647, %641, %609
  %660 = load ptr, ptr %12, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %660, i32 0, i32 11
  %662 = load i8, ptr %661, align 1, !tbaa !20
  %663 = zext i8 %662 to i32
  %664 = icmp eq i32 %663, 2
  br i1 %664, label %671, label %665

665:                                              ; preds = %659
  %666 = load ptr, ptr %12, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %666, i32 0, i32 11
  %668 = load i8, ptr %667, align 1, !tbaa !20
  %669 = zext i8 %668 to i32
  %670 = icmp eq i32 %669, 3
  br i1 %670, label %671, label %683

671:                                              ; preds = %665, %659
  %672 = load ptr, ptr %8, align 8, !tbaa !5
  %673 = load ptr, ptr %10, align 8, !tbaa !5
  %674 = load ptr, ptr %11, align 8, !tbaa !5
  %675 = load ptr, ptr %12, align 8, !tbaa !5
  %676 = load ptr, ptr %10, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %676, i32 0, i32 2
  %678 = load i32, ptr %677, align 4, !tbaa !25
  %679 = load i32, ptr %30, align 4, !tbaa !9
  %680 = load i32, ptr %24, align 4, !tbaa !9
  %681 = mul i32 %679, %680
  %682 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %672, ptr noundef %673, ptr noundef %674, ptr noundef %675, i32 noundef %678, i32 noundef 4097, i32 noundef %681, i32 noundef %682)
  br label %683

683:                                              ; preds = %671, %665
  %684 = load ptr, ptr %12, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %684, i32 0, i32 11
  %686 = load i8, ptr %685, align 1, !tbaa !20
  %687 = zext i8 %686 to i32
  %688 = icmp eq i32 %687, 3
  br i1 %688, label %689, label %701

689:                                              ; preds = %683
  %690 = load ptr, ptr %8, align 8, !tbaa !5
  %691 = load ptr, ptr %10, align 8, !tbaa !5
  %692 = load ptr, ptr %11, align 8, !tbaa !5
  %693 = load ptr, ptr %12, align 8, !tbaa !5
  %694 = load ptr, ptr %10, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %694, i32 0, i32 3
  %696 = load i32, ptr %695, align 4, !tbaa !26
  %697 = load i32, ptr %30, align 4, !tbaa !9
  %698 = load i32, ptr %24, align 4, !tbaa !9
  %699 = mul i32 %697, %698
  %700 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %690, ptr noundef %691, ptr noundef %692, ptr noundef %693, i32 noundef %696, i32 noundef 4097, i32 noundef %699, i32 noundef %700)
  br label %701

701:                                              ; preds = %689, %683
  %702 = load ptr, ptr %12, align 8, !tbaa !5
  %703 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %702, i32 0, i32 11
  %704 = load i8, ptr %703, align 1, !tbaa !20
  %705 = zext i8 %704 to i32
  %706 = icmp eq i32 %705, 1
  br i1 %706, label %707, label %781

707:                                              ; preds = %701
  %708 = load ptr, ptr %12, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %708, i32 0, i32 10
  %710 = load i16, ptr %709, align 1, !tbaa !23
  %711 = zext i16 %710 to i32
  %712 = icmp eq i32 %711, 5
  br i1 %712, label %743, label %713

713:                                              ; preds = %707
  %714 = load ptr, ptr %12, align 8, !tbaa !5
  %715 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %714, i32 0, i32 10
  %716 = load i16, ptr %715, align 1, !tbaa !23
  %717 = zext i16 %716 to i32
  %718 = icmp eq i32 %717, 6
  br i1 %718, label %743, label %719

719:                                              ; preds = %713
  %720 = load ptr, ptr %12, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %720, i32 0, i32 10
  %722 = load i16, ptr %721, align 1, !tbaa !23
  %723 = zext i16 %722 to i32
  %724 = icmp eq i32 %723, 34
  br i1 %724, label %743, label %725

725:                                              ; preds = %719
  %726 = load ptr, ptr %12, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %726, i32 0, i32 10
  %728 = load i16, ptr %727, align 1, !tbaa !23
  %729 = zext i16 %728 to i32
  %730 = icmp eq i32 %729, 35
  br i1 %730, label %743, label %731

731:                                              ; preds = %725
  %732 = load ptr, ptr %12, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %732, i32 0, i32 10
  %734 = load i16, ptr %733, align 1, !tbaa !23
  %735 = zext i16 %734 to i32
  %736 = icmp eq i32 %735, 36
  br i1 %736, label %743, label %737

737:                                              ; preds = %731
  %738 = load ptr, ptr %12, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %738, i32 0, i32 10
  %740 = load i16, ptr %739, align 1, !tbaa !23
  %741 = zext i16 %740 to i32
  %742 = icmp eq i32 %741, 37
  br i1 %742, label %743, label %755

743:                                              ; preds = %737, %731, %725, %719, %713, %707
  %744 = load ptr, ptr %8, align 8, !tbaa !5
  %745 = load ptr, ptr %10, align 8, !tbaa !5
  %746 = load ptr, ptr %11, align 8, !tbaa !5
  %747 = load ptr, ptr %12, align 8, !tbaa !5
  %748 = load ptr, ptr %10, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %748, i32 0, i32 9
  %750 = load i32, ptr %749, align 4, !tbaa !27
  %751 = load i32, ptr %30, align 4, !tbaa !9
  %752 = load i32, ptr %24, align 4, !tbaa !9
  %753 = mul i32 %751, %752
  %754 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %744, ptr noundef %745, ptr noundef %746, ptr noundef %747, i32 noundef %750, i32 noundef 4097, i32 noundef %753, i32 noundef %754)
  br label %780

755:                                              ; preds = %737
  %756 = load ptr, ptr %12, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %756, i32 0, i32 10
  %758 = load i16, ptr %757, align 1, !tbaa !23
  %759 = zext i16 %758 to i32
  %760 = icmp eq i32 %759, 25
  br i1 %760, label %767, label %761

761:                                              ; preds = %755
  %762 = load ptr, ptr %12, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %762, i32 0, i32 10
  %764 = load i16, ptr %763, align 1, !tbaa !23
  %765 = zext i16 %764 to i32
  %766 = icmp eq i32 %765, 26
  br i1 %766, label %767, label %779

767:                                              ; preds = %761, %755
  %768 = load ptr, ptr %8, align 8, !tbaa !5
  %769 = load ptr, ptr %10, align 8, !tbaa !5
  %770 = load ptr, ptr %11, align 8, !tbaa !5
  %771 = load ptr, ptr %12, align 8, !tbaa !5
  %772 = load ptr, ptr %10, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %772, i32 0, i32 13
  %774 = load i32, ptr %773, align 4, !tbaa !28
  %775 = load i32, ptr %30, align 4, !tbaa !9
  %776 = load i32, ptr %24, align 4, !tbaa !9
  %777 = mul i32 %775, %776
  %778 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %768, ptr noundef %769, ptr noundef %770, ptr noundef %771, i32 noundef %774, i32 noundef 4097, i32 noundef %777, i32 noundef %778)
  br label %779

779:                                              ; preds = %767, %761
  br label %780

780:                                              ; preds = %779, %743
  br label %781

781:                                              ; preds = %780, %701
  br label %782

782:                                              ; preds = %781, %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  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
  ret void
}

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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, !10, i64 72}
!12 = !{!"libxsmm_mateltwise_kernel_config_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !10, i64 148, !10, i64 152, !10, i64 156, !10, i64 160, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !10, i64 196, !10, i64 200, !10, i64 204, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !10, i64 232, !10, i64 236, !10, i64 240, !10, i64 244, !10, i64 248, !10, i64 252, !10, i64 256, !10, i64 260, !10, i64 264, !10, i64 268, !10, i64 272, !10, i64 276, !10, i64 280, !10, i64 284, !10, i64 288, !10, i64 292, !10, i64 296, !10, i64 300, !10, i64 304, !10, i64 308, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !10, i64 344, !10, i64 348, !10, i64 352, !10, i64 356, !10, i64 360, !10, i64 364, !10, i64 368, !10, i64 372, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !10, i64 392, !10, i64 396, !10, i64 400, !10, i64 404, !10, i64 408, !10, i64 412, !10, i64 416, !10, i64 420, !10, i64 424, !10, i64 428, !10, i64 432, !10, i64 436, !10, i64 440, !10, i64 444, !10, i64 448, !10, i64 452, !10, i64 456, !10, i64 460, !10, i64 464, !10, i64 468, !10, i64 472, !10, i64 476, !10, i64 480, !10, i64 484, !10, i64 488, !10, i64 492, !10, i64 496, !10, i64 500, !10, i64 504, !10, i64 508, !7, i64 512}
!13 = !{!12, !10, i64 480}
!14 = !{!12, !10, i64 492}
!15 = !{!16, !10, i64 140}
!16 = !{!"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}
!17 = !{!16, !10, i64 96}
!18 = !{!16, !10, i64 4}
!19 = !{!16, !10, i64 24}
!20 = !{!21, !7, i64 31}
!21 = !{!"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, !22, i64 27, !22, i64 29, !7, i64 31}
!22 = !{!"short", !7, i64 0}
!23 = !{!21, !22, i64 29}
!24 = !{!16, !10, i64 28}
!25 = !{!16, !10, i64 8}
!26 = !{!16, !10, i64 12}
!27 = !{!16, !10, i64 36}
!28 = !{!16, !10, i64 52}


; 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"

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_unary_aarch64_binary_2d_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #1 {
  %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
  %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
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #3
  %26 = getelementptr inbounds i8, ptr %3, i64 72
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #3
  %27 = getelementptr inbounds i8, ptr %3, i64 480
  %28 = load i32, ptr %27, align 4, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %3, i64 492
  %30 = load i32, ptr %29, align 4, !tbaa !10
  store i32 0, ptr %8, align 4, !tbaa !11
  store i32 0, ptr %9, align 4, !tbaa !11
  store i32 127, ptr %24, align 4, !tbaa !11
  store i32 127, ptr %25, align 4, !tbaa !11
  %31 = getelementptr inbounds i8, ptr %2, i64 140
  %32 = load i32, ptr %31, align 4, !tbaa !12
  call void @libxsmm_setup_input_output_aarch64_masks(ptr noundef %0, ptr noundef %3, ptr noundef %4, i32 noundef %32, i32 noundef %5, ptr noundef nonnull %8, ptr noundef nonnull %24, ptr noundef nonnull %9, ptr noundef nonnull %25)
  %33 = load i32, ptr %26, align 4, !tbaa !14
  %34 = load i32, ptr %8, align 4, !tbaa !11
  call void @libxsmm_configure_microkernel_aarch64_loops(ptr noundef %0, ptr noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %34, ptr noundef nonnull %10, ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef nonnull %14, ptr noundef nonnull %12, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %22, ptr noundef nonnull %23)
  %35 = load i32, ptr %16, align 4, !tbaa !11
  %36 = icmp ugt i32 %35, 1
  br i1 %36, label %37, label %40

37:                                               ; preds = %7
  %38 = load i32, ptr %18, align 4, !tbaa !11
  %39 = load i32, ptr %20, align 4, !tbaa !11
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %0, ptr noundef %1, i32 noundef %38, i32 noundef %39) #3
  br label %40

40:                                               ; preds = %37, %7
  %41 = load i32, ptr %17, align 4, !tbaa !11
  %42 = icmp ugt i32 %41, 1
  br i1 %42, label %43, label %46

43:                                               ; preds = %40
  %44 = load i32, ptr %19, align 4, !tbaa !11
  %45 = load i32, ptr %21, align 4, !tbaa !11
  call void @libxsmm_generator_loop_header_aarch64(ptr noundef %0, ptr noundef %1, i32 noundef %44, i32 noundef %45) #3
  br label %46

46:                                               ; preds = %43, %40
  %47 = load i32, ptr %11, align 4, !tbaa !11
  %48 = load i32, ptr %14, align 4, !tbaa !11
  %49 = load i32, ptr %8, align 4, !tbaa !11
  %50 = load i32, ptr %24, align 4, !tbaa !11
  call void @libxsmm_load_aarch64_2d_reg_block(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %28, i32 noundef %33, i32 noundef %47, i32 noundef %48, i32 noundef %49, i32 noundef %50)
  %51 = load i32, ptr %11, align 4, !tbaa !11
  %52 = load i32, ptr %14, align 4, !tbaa !11
  %53 = load i32, ptr %8, align 4, !tbaa !11
  %54 = load i32, ptr %24, align 4, !tbaa !11
  call void @libxsmm_compute_unary_binary_aarch64_2d_reg_block(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %28, i32 noundef %33, i32 noundef %51, i32 noundef %52, i32 noundef %53, i32 noundef %54)
  %55 = load i32, ptr %11, align 4, !tbaa !11
  %56 = load i32, ptr %14, align 4, !tbaa !11
  %57 = load i32, ptr %9, align 4, !tbaa !11
  %58 = load i32, ptr %25, align 4, !tbaa !11
  call void @libxsmm_store_aarch64_2d_reg_block(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %30, i32 noundef %33, i32 noundef %55, i32 noundef %56, i32 noundef %57, i32 noundef %58)
  %59 = load i32, ptr %17, align 4, !tbaa !11
  %60 = icmp ugt i32 %59, 1
  br i1 %60, label %61, label %163

61:                                               ; preds = %46
  %62 = load i32, ptr %19, align 4, !tbaa !11
  %63 = getelementptr inbounds i8, ptr %2, i64 96
  %64 = load i32, ptr %63, align 4, !tbaa !15
  %65 = icmp ne i32 %62, %64
  %66 = zext i1 %65 to i32
  %67 = getelementptr inbounds i8, ptr %2, i64 4
  %68 = load i32, ptr %67, align 4, !tbaa !16
  %69 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %68, i32 noundef 4096, i32 noundef %69, i32 noundef %66)
  %70 = getelementptr inbounds i8, ptr %2, i64 24
  %71 = load i32, ptr %70, align 4, !tbaa !17
  %72 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %71, i32 noundef 4096, i32 noundef %72, i32 noundef %66)
  %73 = getelementptr inbounds i8, ptr %4, i64 31
  %74 = load i8, ptr %73, align 1, !tbaa !18
  %75 = icmp eq i8 %74, 1
  br i1 %75, label %76, label %84

76:                                               ; preds = %61
  %77 = getelementptr inbounds i8, ptr %4, i64 29
  %78 = load i16, ptr %77, align 1, !tbaa !21
  %79 = icmp eq i16 %78, 63
  br i1 %79, label %80, label %.thread.thread

80:                                               ; preds = %76
  %81 = getelementptr inbounds i8, ptr %2, i64 28
  %82 = load i32, ptr %81, align 4, !tbaa !22
  %83 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %82, i32 noundef 4096, i32 noundef %83, i32 noundef %66)
  %.pre = load i8, ptr %73, align 1, !tbaa !18
  br label %84

84:                                               ; preds = %80, %61
  %85 = phi i8 [ %.pre, %80 ], [ %74, %61 ]
  %86 = and i8 %85, -2
  %switch = icmp eq i8 %86, 2
  br i1 %switch, label %87, label %.thread

87:                                               ; preds = %84
  %88 = getelementptr inbounds i8, ptr %2, i64 8
  %89 = load i32, ptr %88, align 4, !tbaa !23
  %90 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %89, i32 noundef 4096, i32 noundef %90, i32 noundef %66)
  %.pr = load i8, ptr %73, align 1, !tbaa !18
  %91 = icmp eq i8 %.pr, 3
  br i1 %91, label %92, label %.thread

92:                                               ; preds = %87
  %93 = getelementptr inbounds i8, ptr %2, i64 12
  %94 = load i32, ptr %93, align 4, !tbaa !24
  %95 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %94, i32 noundef 4096, i32 noundef %95, i32 noundef %66)
  %.pr279 = load i8, ptr %73, align 1, !tbaa !18
  br label %.thread

.thread:                                          ; preds = %84, %92, %87
  %96 = phi i8 [ %.pr279, %92 ], [ %.pr, %87 ], [ %85, %84 ]
  %97 = icmp eq i8 %96, 1
  br i1 %97, label %.thread.thread, label %108

.thread.thread:                                   ; preds = %76, %.thread
  %98 = getelementptr inbounds i8, ptr %4, i64 29
  %99 = load i16, ptr %98, align 1, !tbaa !21
  switch i16 %99, label %108 [
    i16 5, label %100
    i16 6, label %100
    i16 34, label %100
    i16 35, label %100
    i16 36, label %100
    i16 37, label %100
    i16 25, label %104
    i16 26, label %104
  ]

100:                                              ; preds = %.thread.thread, %.thread.thread, %.thread.thread, %.thread.thread, %.thread.thread, %.thread.thread
  %101 = getelementptr inbounds i8, ptr %2, i64 36
  %102 = load i32, ptr %101, align 4, !tbaa !25
  %103 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %102, i32 noundef 4096, i32 noundef %103, i32 noundef %66)
  br label %108

104:                                              ; preds = %.thread.thread, %.thread.thread
  %105 = getelementptr inbounds i8, ptr %2, i64 52
  %106 = load i32, ptr %105, align 4, !tbaa !26
  %107 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %106, i32 noundef 4096, i32 noundef %107, i32 noundef %66)
  br label %108

108:                                              ; preds = %.thread.thread, %100, %104, %.thread
  %109 = load i32, ptr %19, align 4, !tbaa !11
  %110 = load i32, ptr %23, align 4, !tbaa !11
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %0, ptr noundef %1, i32 noundef %109, i32 noundef %110) #3
  %111 = load i32, ptr %67, align 4, !tbaa !16
  %112 = load i32, ptr %23, align 4, !tbaa !11
  %113 = load i32, ptr %17, align 4, !tbaa !11
  %114 = mul i32 %113, %112
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %111, i32 noundef 4097, i32 noundef %114, i32 noundef %66)
  %115 = load i32, ptr %70, align 4, !tbaa !17
  %116 = load i32, ptr %23, align 4, !tbaa !11
  %117 = load i32, ptr %17, align 4, !tbaa !11
  %118 = mul i32 %117, %116
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %115, i32 noundef 4097, i32 noundef %118, i32 noundef %66)
  %119 = load i8, ptr %73, align 1, !tbaa !18
  %120 = icmp eq i8 %119, 1
  br i1 %120, label %121, label %131

121:                                              ; preds = %108
  %122 = getelementptr inbounds i8, ptr %4, i64 29
  %123 = load i16, ptr %122, align 1, !tbaa !21
  %124 = icmp eq i16 %123, 63
  br i1 %124, label %125, label %.thread281.thread

125:                                              ; preds = %121
  %126 = getelementptr inbounds i8, ptr %2, i64 28
  %127 = load i32, ptr %126, align 4, !tbaa !22
  %128 = load i32, ptr %23, align 4, !tbaa !11
  %129 = load i32, ptr %17, align 4, !tbaa !11
  %130 = mul i32 %129, %128
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %127, i32 noundef 4097, i32 noundef %130, i32 noundef %66)
  %.pre289 = load i8, ptr %73, align 1, !tbaa !18
  br label %131

131:                                              ; preds = %125, %108
  %132 = phi i8 [ %.pre289, %125 ], [ %119, %108 ]
  %133 = and i8 %132, -2
  %switch274 = icmp eq i8 %133, 2
  br i1 %switch274, label %134, label %.thread281

134:                                              ; preds = %131
  %135 = getelementptr inbounds i8, ptr %2, i64 8
  %136 = load i32, ptr %135, align 4, !tbaa !23
  %137 = load i32, ptr %23, align 4, !tbaa !11
  %138 = load i32, ptr %17, align 4, !tbaa !11
  %139 = mul i32 %138, %137
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %136, i32 noundef 4097, i32 noundef %139, i32 noundef %66)
  %.pr280 = load i8, ptr %73, align 1, !tbaa !18
  %140 = icmp eq i8 %.pr280, 3
  br i1 %140, label %141, label %.thread281

141:                                              ; preds = %134
  %142 = getelementptr inbounds i8, ptr %2, i64 12
  %143 = load i32, ptr %142, align 4, !tbaa !24
  %144 = load i32, ptr %23, align 4, !tbaa !11
  %145 = load i32, ptr %17, align 4, !tbaa !11
  %146 = mul i32 %145, %144
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %143, i32 noundef 4097, i32 noundef %146, i32 noundef %66)
  %.pr282 = load i8, ptr %73, align 1, !tbaa !18
  br label %.thread281

.thread281:                                       ; preds = %131, %141, %134
  %147 = phi i8 [ %.pr282, %141 ], [ %.pr280, %134 ], [ %132, %131 ]
  %148 = icmp eq i8 %147, 1
  br i1 %148, label %.thread281.thread, label %163

.thread281.thread:                                ; preds = %121, %.thread281
  %149 = getelementptr inbounds i8, ptr %4, i64 29
  %150 = load i16, ptr %149, align 1, !tbaa !21
  switch i16 %150, label %163 [
    i16 5, label %151
    i16 6, label %151
    i16 34, label %151
    i16 35, label %151
    i16 36, label %151
    i16 37, label %151
    i16 25, label %157
    i16 26, label %157
  ]

151:                                              ; preds = %.thread281.thread, %.thread281.thread, %.thread281.thread, %.thread281.thread, %.thread281.thread, %.thread281.thread
  %152 = getelementptr inbounds i8, ptr %2, i64 36
  %153 = load i32, ptr %152, align 4, !tbaa !25
  %154 = load i32, ptr %23, align 4, !tbaa !11
  %155 = load i32, ptr %17, align 4, !tbaa !11
  %156 = mul i32 %155, %154
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %153, i32 noundef 4097, i32 noundef %156, i32 noundef %66)
  br label %163

157:                                              ; preds = %.thread281.thread, %.thread281.thread
  %158 = getelementptr inbounds i8, ptr %2, i64 52
  %159 = load i32, ptr %158, align 4, !tbaa !26
  %160 = load i32, ptr %23, align 4, !tbaa !11
  %161 = load i32, ptr %17, align 4, !tbaa !11
  %162 = mul i32 %161, %160
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %159, i32 noundef 4097, i32 noundef %162, i32 noundef %66)
  br label %163

163:                                              ; preds = %.thread281.thread, %.thread281, %157, %151, %46
  %164 = load i32, ptr %16, align 4, !tbaa !11
  %165 = icmp ugt i32 %164, 1
  br i1 %165, label %166, label %268

166:                                              ; preds = %163
  %167 = load i32, ptr %18, align 4, !tbaa !11
  %168 = getelementptr inbounds i8, ptr %2, i64 96
  %169 = load i32, ptr %168, align 4, !tbaa !15
  %170 = icmp ne i32 %167, %169
  %171 = zext i1 %170 to i32
  %172 = getelementptr inbounds i8, ptr %2, i64 4
  %173 = load i32, ptr %172, align 4, !tbaa !16
  %174 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %173, i32 noundef 4096, i32 noundef %174, i32 noundef %171)
  %175 = getelementptr inbounds i8, ptr %2, i64 24
  %176 = load i32, ptr %175, align 4, !tbaa !17
  %177 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef %4, i32 noundef %176, i32 noundef 4096, i32 noundef %177, i32 noundef %171)
  %178 = getelementptr inbounds i8, ptr %4, i64 31
  %179 = load i8, ptr %178, align 1, !tbaa !18
  %180 = icmp eq i8 %179, 1
  br i1 %180, label %181, label %189

181:                                              ; preds = %166
  %182 = getelementptr inbounds i8, ptr %4, i64 29
  %183 = load i16, ptr %182, align 1, !tbaa !21
  %184 = icmp eq i16 %183, 63
  br i1 %184, label %185, label %.thread284.thread

185:                                              ; preds = %181
  %186 = getelementptr inbounds i8, ptr %2, i64 28
  %187 = load i32, ptr %186, align 4, !tbaa !22
  %188 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %187, i32 noundef 4096, i32 noundef %188, i32 noundef %171)
  %.pre290 = load i8, ptr %178, align 1, !tbaa !18
  br label %189

189:                                              ; preds = %185, %166
  %190 = phi i8 [ %.pre290, %185 ], [ %179, %166 ]
  %191 = and i8 %190, -2
  %switch276 = icmp eq i8 %191, 2
  br i1 %switch276, label %192, label %.thread284

192:                                              ; preds = %189
  %193 = getelementptr inbounds i8, ptr %2, i64 8
  %194 = load i32, ptr %193, align 4, !tbaa !23
  %195 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %194, i32 noundef 4096, i32 noundef %195, i32 noundef %171)
  %.pr283 = load i8, ptr %178, align 1, !tbaa !18
  %196 = icmp eq i8 %.pr283, 3
  br i1 %196, label %197, label %.thread284

197:                                              ; preds = %192
  %198 = getelementptr inbounds i8, ptr %2, i64 12
  %199 = load i32, ptr %198, align 4, !tbaa !24
  %200 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %199, i32 noundef 4096, i32 noundef %200, i32 noundef %171)
  %.pr285 = load i8, ptr %178, align 1, !tbaa !18
  br label %.thread284

.thread284:                                       ; preds = %189, %197, %192
  %201 = phi i8 [ %.pr285, %197 ], [ %.pr283, %192 ], [ %190, %189 ]
  %202 = icmp eq i8 %201, 1
  br i1 %202, label %.thread284.thread, label %213

.thread284.thread:                                ; preds = %181, %.thread284
  %203 = getelementptr inbounds i8, ptr %4, i64 29
  %204 = load i16, ptr %203, align 1, !tbaa !21
  switch i16 %204, label %213 [
    i16 5, label %205
    i16 6, label %205
    i16 34, label %205
    i16 35, label %205
    i16 36, label %205
    i16 37, label %205
    i16 25, label %209
    i16 26, label %209
  ]

205:                                              ; preds = %.thread284.thread, %.thread284.thread, %.thread284.thread, %.thread284.thread, %.thread284.thread, %.thread284.thread
  %206 = getelementptr inbounds i8, ptr %2, i64 36
  %207 = load i32, ptr %206, align 4, !tbaa !25
  %208 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %207, i32 noundef 4096, i32 noundef %208, i32 noundef %171)
  br label %213

209:                                              ; preds = %.thread284.thread, %.thread284.thread
  %210 = getelementptr inbounds i8, ptr %2, i64 52
  %211 = load i32, ptr %210, align 4, !tbaa !26
  %212 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %211, i32 noundef 4096, i32 noundef %212, i32 noundef %171)
  br label %213

213:                                              ; preds = %.thread284.thread, %205, %209, %.thread284
  %214 = load i32, ptr %18, align 4, !tbaa !11
  %215 = load i32, ptr %22, align 4, !tbaa !11
  call void @libxsmm_generator_loop_footer_aarch64(ptr noundef %0, ptr noundef %1, i32 noundef %214, i32 noundef %215) #3
  %216 = load i32, ptr %172, align 4, !tbaa !16
  %217 = load i32, ptr %22, align 4, !tbaa !11
  %218 = load i32, ptr %16, align 4, !tbaa !11
  %219 = mul i32 %218, %217
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %216, i32 noundef 4097, i32 noundef %219, i32 noundef %171)
  %220 = load i32, ptr %175, align 4, !tbaa !17
  %221 = load i32, ptr %22, align 4, !tbaa !11
  %222 = load i32, ptr %16, align 4, !tbaa !11
  %223 = mul i32 %222, %221
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %220, i32 noundef 4097, i32 noundef %223, i32 noundef %171)
  %224 = load i8, ptr %178, align 1, !tbaa !18
  %225 = icmp eq i8 %224, 1
  br i1 %225, label %226, label %236

226:                                              ; preds = %213
  %227 = getelementptr inbounds i8, ptr %4, i64 29
  %228 = load i16, ptr %227, align 1, !tbaa !21
  %229 = icmp eq i16 %228, 63
  br i1 %229, label %230, label %.thread287.thread

230:                                              ; preds = %226
  %231 = getelementptr inbounds i8, ptr %2, i64 28
  %232 = load i32, ptr %231, align 4, !tbaa !22
  %233 = load i32, ptr %22, align 4, !tbaa !11
  %234 = load i32, ptr %16, align 4, !tbaa !11
  %235 = mul i32 %234, %233
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %232, i32 noundef 4097, i32 noundef %235, i32 noundef %171)
  %.pre291 = load i8, ptr %178, align 1, !tbaa !18
  br label %236

236:                                              ; preds = %230, %213
  %237 = phi i8 [ %.pre291, %230 ], [ %224, %213 ]
  %238 = and i8 %237, -2
  %switch278 = icmp eq i8 %238, 2
  br i1 %switch278, label %239, label %.thread287

239:                                              ; preds = %236
  %240 = getelementptr inbounds i8, ptr %2, i64 8
  %241 = load i32, ptr %240, align 4, !tbaa !23
  %242 = load i32, ptr %22, align 4, !tbaa !11
  %243 = load i32, ptr %16, align 4, !tbaa !11
  %244 = mul i32 %243, %242
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %241, i32 noundef 4097, i32 noundef %244, i32 noundef %171)
  %.pr286 = load i8, ptr %178, align 1, !tbaa !18
  %245 = icmp eq i8 %.pr286, 3
  br i1 %245, label %246, label %.thread287

246:                                              ; preds = %239
  %247 = getelementptr inbounds i8, ptr %2, i64 12
  %248 = load i32, ptr %247, align 4, !tbaa !24
  %249 = load i32, ptr %22, align 4, !tbaa !11
  %250 = load i32, ptr %16, align 4, !tbaa !11
  %251 = mul i32 %250, %249
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %248, i32 noundef 4097, i32 noundef %251, i32 noundef %171)
  %.pr288 = load i8, ptr %178, align 1, !tbaa !18
  br label %.thread287

.thread287:                                       ; preds = %236, %246, %239
  %252 = phi i8 [ %.pr288, %246 ], [ %.pr286, %239 ], [ %237, %236 ]
  %253 = icmp eq i8 %252, 1
  br i1 %253, label %.thread287.thread, label %268

.thread287.thread:                                ; preds = %226, %.thread287
  %254 = getelementptr inbounds i8, ptr %4, i64 29
  %255 = load i16, ptr %254, align 1, !tbaa !21
  switch i16 %255, label %268 [
    i16 5, label %256
    i16 6, label %256
    i16 34, label %256
    i16 35, label %256
    i16 36, label %256
    i16 37, label %256
    i16 25, label %262
    i16 26, label %262
  ]

256:                                              ; preds = %.thread287.thread, %.thread287.thread, %.thread287.thread, %.thread287.thread, %.thread287.thread, %.thread287.thread
  %257 = getelementptr inbounds i8, ptr %2, i64 36
  %258 = load i32, ptr %257, align 4, !tbaa !25
  %259 = load i32, ptr %22, align 4, !tbaa !11
  %260 = load i32, ptr %16, align 4, !tbaa !11
  %261 = mul i32 %260, %259
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %258, i32 noundef 4097, i32 noundef %261, i32 noundef %171)
  br label %268

262:                                              ; preds = %.thread287.thread, %.thread287.thread
  %263 = getelementptr inbounds i8, ptr %2, i64 52
  %264 = load i32, ptr %263, align 4, !tbaa !26
  %265 = load i32, ptr %22, align 4, !tbaa !11
  %266 = load i32, ptr %16, align 4, !tbaa !11
  %267 = mul i32 %266, %265
  call void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_aarch64_gp_reg(ptr noundef %0, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %264, i32 noundef 4097, i32 noundef %267, i32 noundef %171)
  br label %268

268:                                              ; preds = %.thread287.thread, %.thread287, %262, %256, %163
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #3
  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
  ret void
}

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,ReassociatePass,SROAPass,SimplifyCFGPass