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

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

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

@__func__.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel = external hidden unnamed_addr constant [54 x i8], align 1
@.str = external hidden unnamed_addr constant [94 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array = external hidden unnamed_addr constant [32 x i8], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array = external hidden unnamed_addr constant [32 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.2 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.4 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.5 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.6 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.8 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.9 = external hidden unnamed_addr constant [16 x i16], align 16

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_reduce_cols_ncnc_avx512_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca 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 i8, align 1
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca [32 x i8], align 16
  %48 = alloca [32 x i8], align 16
  %49 = alloca i32, align 4
  %50 = alloca [32 x i16], align 16
  %51 = alloca [32 x i16], align 16
  %52 = alloca i32, align 4
  %53 = alloca [16 x i16], align 16
  %54 = alloca [16 x i16], align 16
  %55 = alloca i32, align 4
  %56 = alloca [32 x i16], align 16
  %57 = alloca [32 x i16], align 16
  %58 = alloca i32, align 4
  %59 = alloca [16 x i16], align 16
  %60 = alloca [16 x i16], align 16
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 16, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 4, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 1, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  store i32 30, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #4
  store i32 31, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  store i32 27, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  store i32 28, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  store i32 7, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  store i32 6, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #4
  store i32 5, ptr %42, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  store i32 32, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  store i32 80, ptr %44, align 4, !tbaa !9
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %63, i32 0, i32 0
  %65 = load i32, ptr %64, align 1, !tbaa !11
  store i32 %65, ptr %12, align 4, !tbaa !9
  %66 = load ptr, ptr %10, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %66, i32 0, i32 1
  %68 = load i32, ptr %67, align 1, !tbaa !14
  store i32 %68, ptr %11, align 4, !tbaa !9
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %69, i32 0, i32 2
  %71 = load i32, ptr %70, align 1, !tbaa !15
  store i32 %71, ptr %14, align 4, !tbaa !9
  %72 = load ptr, ptr %10, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %72, i32 0, i32 3
  %74 = load i32, ptr %73, align 1, !tbaa !16
  store i32 %74, ptr %13, align 4, !tbaa !9
  %75 = load i32, ptr %13, align 4, !tbaa !9
  %76 = load i32, ptr %11, align 4, !tbaa !9
  %77 = udiv i32 %75, %76
  store i32 %77, ptr %15, align 4, !tbaa !9
  %78 = load i32, ptr %13, align 4, !tbaa !9
  %79 = load i32, ptr %11, align 4, !tbaa !9
  %80 = urem i32 %78, %79
  %81 = icmp ne i32 %80, 0
  br i1 %81, label %87, label %82

82:                                               ; preds = %5
  %83 = load i32, ptr %14, align 4, !tbaa !9
  %84 = load i32, ptr %12, align 4, !tbaa !9
  %85 = urem i32 %83, %84
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %87, label %96

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

91:                                               ; preds = %87
  %92 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %94

93:                                               ; preds = %87
  br label %94

94:                                               ; preds = %93, %91
  %95 = phi i32 [ %92, %91 ], [ 1, %93 ]
  call void @libxsmm_handle_error(ptr noundef %88, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel, ptr noundef @.str, i32 noundef 135, i32 noundef %95)
  store i32 1, ptr %45, align 4
  br label %1629

96:                                               ; preds = %82
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %97, i32 0, i32 1
  store i32 8, ptr %98, align 4, !tbaa !17
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %99, i32 0, i32 6
  store i32 9, ptr %100, align 4, !tbaa !19
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %101, i32 0, i32 25
  store i32 10, ptr %102, align 4, !tbaa !20
  %103 = load ptr, ptr %6, align 8, !tbaa !5
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %104, i32 0, i32 14
  %106 = load i32, ptr %105, align 4, !tbaa !21
  %107 = load ptr, ptr %8, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %107, i32 0, i32 0
  %109 = load i32, ptr %108, align 4, !tbaa !23
  %110 = load i32, ptr %43, align 4, !tbaa !9
  %111 = load ptr, ptr %8, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %111, i32 0, i32 1
  %113 = load i32, ptr %112, align 4, !tbaa !17
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %103, i32 noundef %106, i32 noundef %109, i32 noundef 127, i32 noundef 0, i32 noundef %110, i32 noundef %113, i32 noundef 0)
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %115, i32 0, i32 14
  %117 = load i32, ptr %116, align 4, !tbaa !21
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %118, i32 0, i32 0
  %120 = load i32, ptr %119, align 4, !tbaa !23
  %121 = load i32, ptr %44, align 4, !tbaa !9
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %122, i32 0, i32 6
  %124 = load i32, ptr %123, align 4, !tbaa !19
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %114, i32 noundef %117, i32 noundef %120, i32 noundef 127, i32 noundef 0, i32 noundef %121, i32 noundef %124, i32 noundef 0)
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %125, i32 0, i32 6
  %127 = load i32, ptr %126, align 4, !tbaa !24
  %128 = icmp ult i32 %127, 1051
  br i1 %128, label %129, label %415

129:                                              ; preds = %96
  store i32 8, ptr %32, align 4, !tbaa !9
  store i8 121, ptr %35, align 1, !tbaa !26
  store i32 15, ptr %34, align 4, !tbaa !9
  %130 = load i32, ptr %12, align 4, !tbaa !9
  %131 = load i32, ptr %32, align 4, !tbaa !9
  %132 = urem i32 %130, %131
  %133 = icmp eq i32 %132, 0
  %134 = zext i1 %133 to i64
  %135 = select i1 %133, i32 0, i32 1
  store i32 %135, ptr %21, align 4, !tbaa !9
  %136 = load i32, ptr %21, align 4, !tbaa !9
  %137 = icmp eq i32 %136, 0
  %138 = zext i1 %137 to i64
  %139 = select i1 %137, i32 8, i32 4
  store i32 %139, ptr %33, align 4, !tbaa !9
  %140 = load i32, ptr %12, align 4, !tbaa !9
  %141 = load i32, ptr %32, align 4, !tbaa !9
  %142 = add i32 %140, %141
  %143 = sub i32 %142, 1
  %144 = load i32, ptr %32, align 4, !tbaa !9
  %145 = udiv i32 %143, %144
  store i32 %145, ptr %22, align 4, !tbaa !9
  %146 = load i32, ptr %22, align 4, !tbaa !9
  %147 = load i32, ptr %33, align 4, !tbaa !9
  %148 = add i32 %146, %147
  %149 = sub i32 %148, 1
  %150 = load i32, ptr %33, align 4, !tbaa !9
  %151 = udiv i32 %149, %150
  store i32 %151, ptr %23, align 4, !tbaa !9
  %152 = load i32, ptr %21, align 4, !tbaa !9
  %153 = icmp ugt i32 %152, 0
  br i1 %153, label %154, label %162

154:                                              ; preds = %129
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = load i32, ptr %34, align 4, !tbaa !9
  %157 = load i32, ptr %12, align 4, !tbaa !9
  %158 = load i32, ptr %32, align 4, !tbaa !9
  %159 = urem i32 %157, %158
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %160, i32 noundef 0)
  call void @libxsmm_generator_initialize_avx_mask(ptr noundef %155, i32 noundef %156, i32 noundef %159, i32 noundef %161)
  br label %162

162:                                              ; preds = %154, %129
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %163

163:                                              ; preds = %411, %162
  %164 = load i32, ptr %16, align 4, !tbaa !9
  %165 = load i32, ptr %23, align 4, !tbaa !9
  %166 = icmp ult i32 %164, %165
  br i1 %166, label %167, label %414

167:                                              ; preds = %163
  %168 = load i32, ptr %16, align 4, !tbaa !9
  %169 = load i32, ptr %23, align 4, !tbaa !9
  %170 = sub i32 %169, 1
  %171 = icmp eq i32 %168, %170
  br i1 %171, label %172, label %178

172:                                              ; preds = %167
  %173 = load i32, ptr %22, align 4, !tbaa !9
  %174 = load i32, ptr %16, align 4, !tbaa !9
  %175 = load i32, ptr %33, align 4, !tbaa !9
  %176 = mul i32 %174, %175
  %177 = sub i32 %173, %176
  br label %180

178:                                              ; preds = %167
  %179 = load i32, ptr %33, align 4, !tbaa !9
  br label %180

180:                                              ; preds = %178, %172
  %181 = phi i32 [ %177, %172 ], [ %179, %178 ]
  store i32 %181, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %197, %180
  %183 = load i32, ptr %17, align 4, !tbaa !9
  %184 = load i32, ptr %24, align 4, !tbaa !9
  %185 = icmp ult i32 %183, %184
  br i1 %185, label %186, label %200

186:                                              ; preds = %182
  %187 = load i32, ptr %33, align 4, !tbaa !9
  %188 = load i32, ptr %17, align 4, !tbaa !9
  %189 = add i32 %187, %188
  store i32 %189, ptr %27, align 4, !tbaa !9
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = load ptr, ptr %9, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %191, i32 0, i32 128
  %193 = load i8, ptr %192, align 4, !tbaa !27
  %194 = load i32, ptr %27, align 4, !tbaa !9
  %195 = load i32, ptr %27, align 4, !tbaa !9
  %196 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %190, i32 noundef 805574231, i8 noundef signext %193, i32 noundef %194, i32 noundef %195, i32 noundef %196)
  br label %197

197:                                              ; preds = %186
  %198 = load i32, ptr %17, align 4, !tbaa !9
  %199 = add i32 %198, 1
  store i32 %199, ptr %17, align 4, !tbaa !9
  br label %182, !llvm.loop !28

200:                                              ; preds = %182
  %201 = load i32, ptr %15, align 4, !tbaa !9
  %202 = icmp ugt i32 %201, 1
  br i1 %202, label %203, label %210

203:                                              ; preds = %200
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = load ptr, ptr %7, align 8, !tbaa !5
  %206 = load ptr, ptr %9, align 8, !tbaa !5
  %207 = load ptr, ptr %8, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %207, i32 0, i32 25
  %209 = load i32, ptr %208, align 4, !tbaa !20
  call void @libxsmm_generator_mateltwise_header_n_loop(ptr noundef %204, ptr noundef %205, ptr noundef %206, i32 noundef %209)
  br label %210

210:                                              ; preds = %203, %200
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %211

211:                                              ; preds = %295, %210
  %212 = load i32, ptr %18, align 4, !tbaa !9
  %213 = load i32, ptr %11, align 4, !tbaa !9
  %214 = icmp ult i32 %212, %213
  br i1 %214, label %215, label %298

215:                                              ; preds = %211
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %216

216:                                              ; preds = %291, %215
  %217 = load i32, ptr %17, align 4, !tbaa !9
  %218 = load i32, ptr %24, align 4, !tbaa !9
  %219 = icmp ult i32 %217, %218
  br i1 %219, label %220, label %294

220:                                              ; preds = %216
  %221 = load i32, ptr %33, align 4, !tbaa !9
  %222 = load i32, ptr %17, align 4, !tbaa !9
  %223 = add i32 %221, %222
  store i32 %223, ptr %27, align 4, !tbaa !9
  %224 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %224, ptr %19, align 4, !tbaa !9
  %225 = load ptr, ptr %6, align 8, !tbaa !5
  %226 = load ptr, ptr %9, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %226, i32 0, i32 6
  %228 = load i32, ptr %227, align 4, !tbaa !30
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %229, i32 0, i32 1
  %231 = load i32, ptr %230, align 4, !tbaa !17
  %232 = load i32, ptr %18, align 4, !tbaa !9
  %233 = load i32, ptr %12, align 4, !tbaa !9
  %234 = mul i32 %232, %233
  %235 = load i32, ptr %17, align 4, !tbaa !9
  %236 = load i32, ptr %32, align 4, !tbaa !9
  %237 = mul i32 %235, %236
  %238 = add i32 %234, %237
  %239 = load i32, ptr %16, align 4, !tbaa !9
  %240 = load i32, ptr %32, align 4, !tbaa !9
  %241 = mul i32 %239, %240
  %242 = load i32, ptr %33, align 4, !tbaa !9
  %243 = mul i32 %241, %242
  %244 = add i32 %238, %243
  %245 = load ptr, ptr %9, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %245, i32 0, i32 2
  %247 = load i32, ptr %246, align 4, !tbaa !31
  %248 = mul i32 %244, %247
  %249 = load i8, ptr %35, align 1, !tbaa !26
  %250 = load i32, ptr %19, align 4, !tbaa !9
  %251 = load i32, ptr %21, align 4, !tbaa !9
  %252 = icmp eq i32 %251, 1
  br i1 %252, label %253, label %263

253:                                              ; preds = %220
  %254 = load i32, ptr %16, align 4, !tbaa !9
  %255 = load i32, ptr %23, align 4, !tbaa !9
  %256 = sub i32 %255, 1
  %257 = icmp eq i32 %254, %256
  br i1 %257, label %258, label %263

258:                                              ; preds = %253
  %259 = load i32, ptr %17, align 4, !tbaa !9
  %260 = load i32, ptr %24, align 4, !tbaa !9
  %261 = sub i32 %260, 1
  %262 = icmp eq i32 %259, %261
  br label %263

263:                                              ; preds = %258, %253, %220
  %264 = phi i1 [ false, %253 ], [ false, %220 ], [ %262, %258 ]
  %265 = zext i1 %264 to i64
  %266 = select i1 %264, i32 1, i32 0
  %267 = load i32, ptr %21, align 4, !tbaa !9
  %268 = icmp eq i32 %267, 1
  br i1 %268, label %269, label %281

269:                                              ; preds = %263
  %270 = load i32, ptr %16, align 4, !tbaa !9
  %271 = load i32, ptr %23, align 4, !tbaa !9
  %272 = sub i32 %271, 1
  %273 = icmp eq i32 %270, %272
  br i1 %273, label %274, label %281

274:                                              ; preds = %269
  %275 = load i32, ptr %17, align 4, !tbaa !9
  %276 = load i32, ptr %24, align 4, !tbaa !9
  %277 = sub i32 %276, 1
  %278 = icmp eq i32 %275, %277
  br i1 %278, label %279, label %281

279:                                              ; preds = %274
  %280 = load i32, ptr %34, align 4, !tbaa !9
  br label %282

281:                                              ; preds = %274, %269, %263
  br label %282

282:                                              ; preds = %281, %279
  %283 = phi i32 [ %280, %279 ], [ 0, %281 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %225, i32 noundef %228, i32 noundef %231, i32 noundef 127, i32 noundef 0, i32 noundef %248, i8 noundef signext %249, i32 noundef %250, i32 noundef %266, i32 noundef %283, i32 noundef 0)
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = load ptr, ptr %9, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %285, i32 0, i32 128
  %287 = load i8, ptr %286, align 4, !tbaa !27
  %288 = load i32, ptr %19, align 4, !tbaa !9
  %289 = load i32, ptr %27, align 4, !tbaa !9
  %290 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %284, i32 noundef 805574232, i8 noundef signext %287, i32 noundef %288, i32 noundef %289, i32 noundef %290)
  br label %291

291:                                              ; preds = %282
  %292 = load i32, ptr %17, align 4, !tbaa !9
  %293 = add i32 %292, 1
  store i32 %293, ptr %17, align 4, !tbaa !9
  br label %216, !llvm.loop !32

294:                                              ; preds = %216
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %18, align 4, !tbaa !9
  %297 = add i32 %296, 1
  store i32 %297, ptr %18, align 4, !tbaa !9
  br label %211, !llvm.loop !33

298:                                              ; preds = %211
  %299 = load i32, ptr %15, align 4, !tbaa !9
  %300 = icmp ugt i32 %299, 1
  br i1 %300, label %301, label %344

301:                                              ; preds = %298
  %302 = load ptr, ptr %6, align 8, !tbaa !5
  %303 = load ptr, ptr %9, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %303, i32 0, i32 10
  %305 = load i32, ptr %304, align 4, !tbaa !34
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %306, i32 0, i32 1
  %308 = load i32, ptr %307, align 4, !tbaa !17
  %309 = load i32, ptr %14, align 4, !tbaa !9
  %310 = zext i32 %309 to i64
  %311 = load i32, ptr %11, align 4, !tbaa !9
  %312 = zext i32 %311 to i64
  %313 = mul nsw i64 %310, %312
  %314 = load ptr, ptr %9, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %314, i32 0, i32 2
  %316 = load i32, ptr %315, align 4, !tbaa !31
  %317 = zext i32 %316 to i64
  %318 = mul nsw i64 %313, %317
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %302, i32 noundef %305, i32 noundef %308, i64 noundef %318)
  %319 = load ptr, ptr %6, align 8, !tbaa !5
  %320 = load ptr, ptr %7, align 8, !tbaa !5
  %321 = load ptr, ptr %9, align 8, !tbaa !5
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %322, i32 0, i32 25
  %324 = load i32, ptr %323, align 4, !tbaa !20
  %325 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_footer_n_loop(ptr noundef %319, ptr noundef %320, ptr noundef %321, i32 noundef %324, i32 noundef %325)
  %326 = load i32, ptr %23, align 4, !tbaa !9
  %327 = icmp ugt i32 %326, 1
  br i1 %327, label %328, label %343

328:                                              ; preds = %301
  %329 = load ptr, ptr %6, align 8, !tbaa !5
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %330, i32 0, i32 1
  %332 = load i32, ptr %331, align 4, !tbaa !17
  %333 = load i32, ptr %14, align 4, !tbaa !9
  %334 = zext i32 %333 to i64
  %335 = load i32, ptr %13, align 4, !tbaa !9
  %336 = zext i32 %335 to i64
  %337 = mul nsw i64 %334, %336
  %338 = load ptr, ptr %9, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %338, i32 0, i32 2
  %340 = load i32, ptr %339, align 4, !tbaa !31
  %341 = zext i32 %340 to i64
  %342 = mul nsw i64 %337, %341
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %329, i32 noundef 30008, i32 noundef %332, i64 noundef %342)
  br label %343

343:                                              ; preds = %328, %301
  br label %344

344:                                              ; preds = %343, %298
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %407, %344
  %346 = load i32, ptr %17, align 4, !tbaa !9
  %347 = load i32, ptr %24, align 4, !tbaa !9
  %348 = icmp ult i32 %346, %347
  br i1 %348, label %349, label %410

349:                                              ; preds = %345
  %350 = load i32, ptr %33, align 4, !tbaa !9
  %351 = load i32, ptr %17, align 4, !tbaa !9
  %352 = add i32 %350, %351
  store i32 %352, ptr %27, align 4, !tbaa !9
  %353 = load ptr, ptr %6, align 8, !tbaa !5
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %354, i32 0, i32 6
  %356 = load i32, ptr %355, align 4, !tbaa !19
  %357 = load i32, ptr %17, align 4, !tbaa !9
  %358 = load i32, ptr %32, align 4, !tbaa !9
  %359 = mul i32 %357, %358
  %360 = load i32, ptr %16, align 4, !tbaa !9
  %361 = load i32, ptr %32, align 4, !tbaa !9
  %362 = mul i32 %360, %361
  %363 = load i32, ptr %33, align 4, !tbaa !9
  %364 = mul i32 %362, %363
  %365 = add i32 %359, %364
  %366 = load ptr, ptr %9, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %366, i32 0, i32 5
  %368 = load i32, ptr %367, align 4, !tbaa !35
  %369 = mul i32 %365, %368
  %370 = load ptr, ptr %9, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %370, i32 0, i32 128
  %372 = load i8, ptr %371, align 4, !tbaa !27
  %373 = load i32, ptr %27, align 4, !tbaa !9
  %374 = load i32, ptr %21, align 4, !tbaa !9
  %375 = icmp eq i32 %374, 1
  br i1 %375, label %376, label %386

376:                                              ; preds = %349
  %377 = load i32, ptr %16, align 4, !tbaa !9
  %378 = load i32, ptr %23, align 4, !tbaa !9
  %379 = sub i32 %378, 1
  %380 = icmp eq i32 %377, %379
  br i1 %380, label %381, label %386

381:                                              ; preds = %376
  %382 = load i32, ptr %17, align 4, !tbaa !9
  %383 = load i32, ptr %24, align 4, !tbaa !9
  %384 = sub i32 %383, 1
  %385 = icmp eq i32 %382, %384
  br label %386

386:                                              ; preds = %381, %376, %349
  %387 = phi i1 [ false, %376 ], [ false, %349 ], [ %385, %381 ]
  %388 = zext i1 %387 to i64
  %389 = select i1 %387, i32 1, i32 0
  %390 = load i32, ptr %21, align 4, !tbaa !9
  %391 = icmp eq i32 %390, 1
  br i1 %391, label %392, label %404

392:                                              ; preds = %386
  %393 = load i32, ptr %16, align 4, !tbaa !9
  %394 = load i32, ptr %23, align 4, !tbaa !9
  %395 = sub i32 %394, 1
  %396 = icmp eq i32 %393, %395
  br i1 %396, label %397, label %404

397:                                              ; preds = %392
  %398 = load i32, ptr %17, align 4, !tbaa !9
  %399 = load i32, ptr %24, align 4, !tbaa !9
  %400 = sub i32 %399, 1
  %401 = icmp eq i32 %398, %400
  br i1 %401, label %402, label %404

402:                                              ; preds = %397
  %403 = load i32, ptr %34, align 4, !tbaa !9
  br label %405

404:                                              ; preds = %397, %392, %386
  br label %405

405:                                              ; preds = %404, %402
  %406 = phi i32 [ %403, %402 ], [ 0, %404 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %353, i32 noundef 537138704, i32 noundef %356, i32 noundef 127, i32 noundef 0, i32 noundef %369, i8 noundef signext %372, i32 noundef %373, i32 noundef %389, i32 noundef %406, i32 noundef 1)
  br label %407

407:                                              ; preds = %405
  %408 = load i32, ptr %17, align 4, !tbaa !9
  %409 = add i32 %408, 1
  store i32 %409, ptr %17, align 4, !tbaa !9
  br label %345, !llvm.loop !36

410:                                              ; preds = %345
  br label %411

411:                                              ; preds = %410
  %412 = load i32, ptr %16, align 4, !tbaa !9
  %413 = add i32 %412, 1
  store i32 %413, ptr %16, align 4, !tbaa !9
  br label %163, !llvm.loop !37

414:                                              ; preds = %163
  store i32 1, ptr %45, align 4
  br label %1629

415:                                              ; preds = %96
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %416, i32 0, i32 6
  %418 = load i32, ptr %417, align 4, !tbaa !24
  %419 = icmp ult i32 %418, 1101
  br i1 %419, label %420, label %431

420:                                              ; preds = %415
  %421 = load ptr, ptr %10, align 8, !tbaa !5
  %422 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %421, i32 noundef 0)
  %423 = icmp eq i32 2, %422
  br i1 %423, label %428, label %424

424:                                              ; preds = %420
  %425 = load ptr, ptr %10, align 8, !tbaa !5
  %426 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %425, i32 noundef 0)
  %427 = icmp eq i32 3, %426
  br i1 %427, label %428, label %429

428:                                              ; preds = %424, %420
  store i8 120, ptr %35, align 1, !tbaa !26
  br label %430

429:                                              ; preds = %424
  store i8 121, ptr %35, align 1, !tbaa !26
  br label %430

430:                                              ; preds = %429, %428
  br label %452

431:                                              ; preds = %415
  %432 = load ptr, ptr %10, align 8, !tbaa !5
  %433 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %432, i32 noundef 0)
  %434 = icmp eq i32 4, %433
  br i1 %434, label %439, label %435

435:                                              ; preds = %431
  %436 = load ptr, ptr %10, align 8, !tbaa !5
  %437 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %436, i32 noundef 0)
  %438 = icmp eq i32 5, %437
  br i1 %438, label %439, label %440

439:                                              ; preds = %435, %431
  store i8 120, ptr %35, align 1, !tbaa !26
  br label %451

440:                                              ; preds = %435
  %441 = load ptr, ptr %10, align 8, !tbaa !5
  %442 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %441, i32 noundef 0)
  %443 = icmp eq i32 2, %442
  br i1 %443, label %448, label %444

444:                                              ; preds = %440
  %445 = load ptr, ptr %10, align 8, !tbaa !5
  %446 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %445, i32 noundef 0)
  %447 = icmp eq i32 3, %446
  br i1 %447, label %448, label %449

448:                                              ; preds = %444, %440
  store i8 121, ptr %35, align 1, !tbaa !26
  br label %450

449:                                              ; preds = %444
  store i8 122, ptr %35, align 1, !tbaa !26
  br label %450

450:                                              ; preds = %449, %448
  br label %451

451:                                              ; preds = %450, %439
  store i32 32, ptr %32, align 4, !tbaa !9
  br label %452

452:                                              ; preds = %451, %430
  %453 = load i32, ptr %12, align 4, !tbaa !9
  %454 = load i32, ptr %32, align 4, !tbaa !9
  %455 = urem i32 %453, %454
  %456 = icmp eq i32 %455, 0
  %457 = zext i1 %456 to i64
  %458 = select i1 %456, i32 0, i32 1
  store i32 %458, ptr %21, align 4, !tbaa !9
  %459 = load i32, ptr %12, align 4, !tbaa !9
  %460 = load i32, ptr %32, align 4, !tbaa !9
  %461 = add i32 %459, %460
  %462 = sub i32 %461, 1
  %463 = load i32, ptr %32, align 4, !tbaa !9
  %464 = udiv i32 %462, %463
  store i32 %464, ptr %22, align 4, !tbaa !9
  %465 = load i32, ptr %22, align 4, !tbaa !9
  %466 = load i32, ptr %33, align 4, !tbaa !9
  %467 = add i32 %465, %466
  %468 = sub i32 %467, 1
  %469 = load i32, ptr %33, align 4, !tbaa !9
  %470 = udiv i32 %468, %469
  store i32 %470, ptr %23, align 4, !tbaa !9
  %471 = load ptr, ptr %10, align 8, !tbaa !5
  %472 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %471, i32 noundef 0)
  %473 = icmp eq i32 5, %472
  br i1 %473, label %478, label %474

474:                                              ; preds = %452
  %475 = load ptr, ptr %10, align 8, !tbaa !5
  %476 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %475, i32 noundef 3)
  %477 = icmp eq i32 5, %476
  br i1 %477, label %478, label %480

478:                                              ; preds = %474, %452
  %479 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %479, i32 noundef 0)
  br label %480

480:                                              ; preds = %478, %474
  %481 = load i32, ptr %21, align 4, !tbaa !9
  %482 = icmp eq i32 %481, 1
  br i1 %482, label %483, label %568

483:                                              ; preds = %480
  %484 = load i32, ptr %12, align 4, !tbaa !9
  %485 = load i32, ptr %32, align 4, !tbaa !9
  %486 = urem i32 %484, %485
  %487 = load i32, ptr %32, align 4, !tbaa !9
  %488 = lshr i32 %487, 1
  %489 = icmp ugt i32 %486, %488
  br i1 %489, label %490, label %496

490:                                              ; preds = %483
  %491 = load i32, ptr %32, align 4, !tbaa !9
  %492 = load i32, ptr %12, align 4, !tbaa !9
  %493 = load i32, ptr %32, align 4, !tbaa !9
  %494 = urem i32 %492, %493
  %495 = sub i32 %491, %494
  br label %503

496:                                              ; preds = %483
  %497 = load i32, ptr %32, align 4, !tbaa !9
  %498 = lshr i32 %497, 1
  %499 = load i32, ptr %12, align 4, !tbaa !9
  %500 = load i32, ptr %32, align 4, !tbaa !9
  %501 = urem i32 %499, %500
  %502 = sub i32 %498, %501
  br label %503

503:                                              ; preds = %496, %490
  %504 = phi i32 [ %495, %490 ], [ %502, %496 ]
  store i32 %504, ptr %25, align 4, !tbaa !9
  %505 = load ptr, ptr %6, align 8, !tbaa !5
  %506 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %505, i32 noundef 0, i32 noundef 1, i32 noundef %506, i32 noundef 1)
  %507 = load ptr, ptr %10, align 8, !tbaa !5
  %508 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %507, i32 noundef 3)
  %509 = icmp eq i32 4, %508
  br i1 %509, label %510, label %518

510:                                              ; preds = %503
  %511 = load i32, ptr %32, align 4, !tbaa !9
  %512 = load i32, ptr %12, align 4, !tbaa !9
  %513 = load i32, ptr %32, align 4, !tbaa !9
  %514 = urem i32 %512, %513
  %515 = sub i32 %511, %514
  store i32 %515, ptr %26, align 4, !tbaa !9
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %516, i32 noundef 0, i32 noundef 2, i32 noundef %517, i32 noundef 4)
  br label %567

518:                                              ; preds = %503
  %519 = load ptr, ptr %10, align 8, !tbaa !5
  %520 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %519, i32 noundef 3)
  %521 = icmp eq i32 5, %520
  br i1 %521, label %522, label %530

522:                                              ; preds = %518
  %523 = load i32, ptr %32, align 4, !tbaa !9
  %524 = load i32, ptr %12, align 4, !tbaa !9
  %525 = load i32, ptr %32, align 4, !tbaa !9
  %526 = urem i32 %524, %525
  %527 = sub i32 %523, %526
  store i32 %527, ptr %26, align 4, !tbaa !9
  %528 = load ptr, ptr %6, align 8, !tbaa !5
  %529 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %528, i32 noundef 0, i32 noundef 2, i32 noundef %529, i32 noundef 5)
  br label %566

530:                                              ; preds = %518
  %531 = load ptr, ptr %10, align 8, !tbaa !5
  %532 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %531, i32 noundef 3)
  %533 = icmp eq i32 2, %532
  br i1 %533, label %534, label %542

534:                                              ; preds = %530
  %535 = load i32, ptr %32, align 4, !tbaa !9
  %536 = load i32, ptr %12, align 4, !tbaa !9
  %537 = load i32, ptr %32, align 4, !tbaa !9
  %538 = urem i32 %536, %537
  %539 = sub i32 %535, %538
  store i32 %539, ptr %26, align 4, !tbaa !9
  %540 = load ptr, ptr %6, align 8, !tbaa !5
  %541 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %540, i32 noundef 0, i32 noundef 2, i32 noundef %541, i32 noundef 2)
  br label %565

542:                                              ; preds = %530
  %543 = load ptr, ptr %10, align 8, !tbaa !5
  %544 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %543, i32 noundef 3)
  %545 = icmp eq i32 3, %544
  br i1 %545, label %546, label %554

546:                                              ; preds = %542
  %547 = load i32, ptr %32, align 4, !tbaa !9
  %548 = load i32, ptr %12, align 4, !tbaa !9
  %549 = load i32, ptr %32, align 4, !tbaa !9
  %550 = urem i32 %548, %549
  %551 = sub i32 %547, %550
  store i32 %551, ptr %26, align 4, !tbaa !9
  %552 = load ptr, ptr %6, align 8, !tbaa !5
  %553 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %552, i32 noundef 0, i32 noundef 2, i32 noundef %553, i32 noundef 3)
  br label %564

554:                                              ; preds = %542
  %555 = load i32, ptr %32, align 4, !tbaa !9
  %556 = lshr i32 %555, 1
  %557 = load i32, ptr %12, align 4, !tbaa !9
  %558 = load i32, ptr %32, align 4, !tbaa !9
  %559 = lshr i32 %558, 1
  %560 = urem i32 %557, %559
  %561 = sub i32 %556, %560
  store i32 %561, ptr %26, align 4, !tbaa !9
  %562 = load ptr, ptr %6, align 8, !tbaa !5
  %563 = load i32, ptr %26, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %562, i32 noundef 0, i32 noundef 2, i32 noundef %563, i32 noundef 1)
  br label %564

564:                                              ; preds = %554, %546
  br label %565

565:                                              ; preds = %564, %534
  br label %566

566:                                              ; preds = %565, %522
  br label %567

567:                                              ; preds = %566, %510
  br label %568

568:                                              ; preds = %567, %480
  %569 = load ptr, ptr %10, align 8, !tbaa !5
  %570 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %569, i32 noundef 3)
  %571 = icmp eq i32 4, %570
  br i1 %571, label %576, label %572

572:                                              ; preds = %568
  %573 = load ptr, ptr %10, align 8, !tbaa !5
  %574 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %573, i32 noundef 3)
  %575 = icmp eq i32 5, %574
  br i1 %575, label %576, label %617

576:                                              ; preds = %572, %568
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %577, i32 0, i32 6
  %579 = load i32, ptr %578, align 4, !tbaa !24
  %580 = icmp uge i32 %579, 1101
  br i1 %580, label %581, label %616

581:                                              ; preds = %576
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  store i32 0, ptr %46, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %47, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %48, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array, i64 32, i1 false)
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %582

582:                                              ; preds = %601, %581
  %583 = load i32, ptr %46, align 4, !tbaa !9
  %584 = icmp ult i32 %583, 32
  br i1 %584, label %585, label %604

585:                                              ; preds = %582
  %586 = load i32, ptr %46, align 4, !tbaa !9
  %587 = zext i32 %586 to i64
  %588 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 %587
  %589 = load i8, ptr %588, align 1, !tbaa !26
  %590 = sext i8 %589 to i32
  %591 = load i32, ptr %46, align 4, !tbaa !9
  %592 = zext i32 %591 to i64
  %593 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 %592
  %594 = load i8, ptr %593, align 1, !tbaa !26
  %595 = sext i8 %594 to i32
  %596 = or i32 %590, %595
  %597 = trunc i32 %596 to i8
  %598 = load i32, ptr %46, align 4, !tbaa !9
  %599 = zext i32 %598 to i64
  %600 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 %599
  store i8 %597, ptr %600, align 1, !tbaa !26
  br label %601

601:                                              ; preds = %585
  %602 = load i32, ptr %46, align 4, !tbaa !9
  %603 = add i32 %602, 1
  store i32 %603, ptr %46, align 4, !tbaa !9
  br label %582, !llvm.loop !38

604:                                              ; preds = %582
  %605 = load ptr, ptr %6, align 8, !tbaa !5
  %606 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %607 = load ptr, ptr %9, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %607, i32 0, i32 128
  %609 = load i8, ptr %608, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %605, ptr noundef %606, ptr noundef @.str.1, i8 noundef signext %609, i32 noundef 29)
  %610 = load ptr, ptr %10, align 8, !tbaa !5
  %611 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %610, i32 noundef 3)
  %612 = icmp eq i32 4, %611
  br i1 %612, label %613, label %615

613:                                              ; preds = %604
  %614 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef %614, i32 noundef 0)
  br label %615

615:                                              ; preds = %613, %604
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %616

616:                                              ; preds = %615, %576
  br label %772

617:                                              ; preds = %572
  %618 = load ptr, ptr %10, align 8, !tbaa !5
  %619 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %618, i32 noundef 3)
  %620 = icmp eq i32 2, %619
  br i1 %620, label %621, label %702

621:                                              ; preds = %617
  %622 = load ptr, ptr %6, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %622, i32 0, i32 6
  %624 = load i32, ptr %623, align 4, !tbaa !24
  %625 = icmp ult i32 %624, 1103
  br i1 %625, label %626, label %702

626:                                              ; preds = %621
  %627 = load ptr, ptr %6, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %627, i32 0, i32 6
  %629 = load i32, ptr %628, align 4, !tbaa !24
  %630 = icmp ne i32 %629, 1053
  br i1 %630, label %631, label %702

631:                                              ; preds = %626
  %632 = load ptr, ptr %6, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %632, i32 0, i32 6
  %634 = load i32, ptr %633, align 4, !tbaa !24
  %635 = icmp ne i32 %634, 1008
  br i1 %635, label %636, label %702

636:                                              ; preds = %631
  %637 = load ptr, ptr %6, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %637, i32 0, i32 6
  %639 = load i32, ptr %638, align 4, !tbaa !24
  %640 = icmp uge i32 %639, 1101
  br i1 %640, label %641, label %671

641:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #4
  store i32 0, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %50, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.2, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr %51) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %51, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3, i64 64, i1 false)
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %642

642:                                              ; preds = %661, %641
  %643 = load i32, ptr %49, align 4, !tbaa !9
  %644 = icmp ult i32 %643, 32
  br i1 %644, label %645, label %664

645:                                              ; preds = %642
  %646 = load i32, ptr %49, align 4, !tbaa !9
  %647 = zext i32 %646 to i64
  %648 = getelementptr inbounds [32 x i16], ptr %50, i64 0, i64 %647
  %649 = load i16, ptr %648, align 2, !tbaa !39
  %650 = sext i16 %649 to i32
  %651 = load i32, ptr %49, align 4, !tbaa !9
  %652 = zext i32 %651 to i64
  %653 = getelementptr inbounds [32 x i16], ptr %51, i64 0, i64 %652
  %654 = load i16, ptr %653, align 2, !tbaa !39
  %655 = sext i16 %654 to i32
  %656 = or i32 %650, %655
  %657 = trunc i32 %656 to i16
  %658 = load i32, ptr %49, align 4, !tbaa !9
  %659 = zext i32 %658 to i64
  %660 = getelementptr inbounds [32 x i16], ptr %50, i64 0, i64 %659
  store i16 %657, ptr %660, align 2, !tbaa !39
  br label %661

661:                                              ; preds = %645
  %662 = load i32, ptr %49, align 4, !tbaa !9
  %663 = add i32 %662, 1
  store i32 %663, ptr %49, align 4, !tbaa !9
  br label %642, !llvm.loop !40

664:                                              ; preds = %642
  %665 = load ptr, ptr %6, align 8, !tbaa !5
  %666 = getelementptr inbounds [32 x i16], ptr %50, i64 0, i64 0
  %667 = load ptr, ptr %9, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %667, i32 0, i32 128
  %669 = load i8, ptr %668, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %665, ptr noundef %666, ptr noundef @.str.1, i8 noundef signext %669, i32 noundef 29)
  %670 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %670, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  br label %701

671:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #4
  store i32 0, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %53, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.4, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %54, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.5, i64 32, i1 false)
  store i32 0, ptr %52, align 4, !tbaa !9
  br label %672

672:                                              ; preds = %691, %671
  %673 = load i32, ptr %52, align 4, !tbaa !9
  %674 = icmp ult i32 %673, 16
  br i1 %674, label %675, label %694

675:                                              ; preds = %672
  %676 = load i32, ptr %52, align 4, !tbaa !9
  %677 = zext i32 %676 to i64
  %678 = getelementptr inbounds [16 x i16], ptr %53, i64 0, i64 %677
  %679 = load i16, ptr %678, align 2, !tbaa !39
  %680 = sext i16 %679 to i32
  %681 = load i32, ptr %52, align 4, !tbaa !9
  %682 = zext i32 %681 to i64
  %683 = getelementptr inbounds [16 x i16], ptr %54, i64 0, i64 %682
  %684 = load i16, ptr %683, align 2, !tbaa !39
  %685 = sext i16 %684 to i32
  %686 = or i32 %680, %685
  %687 = trunc i32 %686 to i16
  %688 = load i32, ptr %52, align 4, !tbaa !9
  %689 = zext i32 %688 to i64
  %690 = getelementptr inbounds [16 x i16], ptr %53, i64 0, i64 %689
  store i16 %687, ptr %690, align 2, !tbaa !39
  br label %691

691:                                              ; preds = %675
  %692 = load i32, ptr %52, align 4, !tbaa !9
  %693 = add i32 %692, 1
  store i32 %693, ptr %52, align 4, !tbaa !9
  br label %672, !llvm.loop !41

694:                                              ; preds = %672
  %695 = load ptr, ptr %6, align 8, !tbaa !5
  %696 = getelementptr inbounds [16 x i16], ptr %53, i64 0, i64 0
  %697 = load ptr, ptr %9, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %697, i32 0, i32 128
  %699 = load i8, ptr %698, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %695, ptr noundef %696, ptr noundef @.str.1, i8 noundef signext %699, i32 noundef 29)
  %700 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %700, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 32, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  br label %701

701:                                              ; preds = %694, %664
  br label %771

702:                                              ; preds = %631, %626, %621, %617
  %703 = load ptr, ptr %10, align 8, !tbaa !5
  %704 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %703, i32 noundef 3)
  %705 = icmp eq i32 3, %704
  br i1 %705, label %706, label %770

706:                                              ; preds = %702
  %707 = load ptr, ptr %6, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %707, i32 0, i32 6
  %709 = load i32, ptr %708, align 4, !tbaa !24
  %710 = icmp uge i32 %709, 1101
  br i1 %710, label %711, label %740

711:                                              ; preds = %706
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #4
  store i32 0, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 64, ptr %56) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %56, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.6, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr %57) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %57, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7, i64 64, i1 false)
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %712

712:                                              ; preds = %731, %711
  %713 = load i32, ptr %55, align 4, !tbaa !9
  %714 = icmp ult i32 %713, 32
  br i1 %714, label %715, label %734

715:                                              ; preds = %712
  %716 = load i32, ptr %55, align 4, !tbaa !9
  %717 = zext i32 %716 to i64
  %718 = getelementptr inbounds [32 x i16], ptr %56, i64 0, i64 %717
  %719 = load i16, ptr %718, align 2, !tbaa !39
  %720 = sext i16 %719 to i32
  %721 = load i32, ptr %55, align 4, !tbaa !9
  %722 = zext i32 %721 to i64
  %723 = getelementptr inbounds [32 x i16], ptr %57, i64 0, i64 %722
  %724 = load i16, ptr %723, align 2, !tbaa !39
  %725 = sext i16 %724 to i32
  %726 = or i32 %720, %725
  %727 = trunc i32 %726 to i16
  %728 = load i32, ptr %55, align 4, !tbaa !9
  %729 = zext i32 %728 to i64
  %730 = getelementptr inbounds [32 x i16], ptr %56, i64 0, i64 %729
  store i16 %727, ptr %730, align 2, !tbaa !39
  br label %731

731:                                              ; preds = %715
  %732 = load i32, ptr %55, align 4, !tbaa !9
  %733 = add i32 %732, 1
  store i32 %733, ptr %55, align 4, !tbaa !9
  br label %712, !llvm.loop !42

734:                                              ; preds = %712
  %735 = load ptr, ptr %6, align 8, !tbaa !5
  %736 = getelementptr inbounds [32 x i16], ptr %56, i64 0, i64 0
  %737 = load ptr, ptr %9, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %737, i32 0, i32 128
  %739 = load i8, ptr %738, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %735, ptr noundef %736, ptr noundef @.str.1, i8 noundef signext %739, i32 noundef 29)
  call void @llvm.lifetime.end.p0(i64 64, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  br label %769

740:                                              ; preds = %706
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #4
  store i32 0, ptr %58, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %59, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.8, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #4
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 16 @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.9, i64 32, i1 false)
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %741

741:                                              ; preds = %760, %740
  %742 = load i32, ptr %58, align 4, !tbaa !9
  %743 = icmp ult i32 %742, 16
  br i1 %743, label %744, label %763

744:                                              ; preds = %741
  %745 = load i32, ptr %58, align 4, !tbaa !9
  %746 = zext i32 %745 to i64
  %747 = getelementptr inbounds [16 x i16], ptr %59, i64 0, i64 %746
  %748 = load i16, ptr %747, align 2, !tbaa !39
  %749 = sext i16 %748 to i32
  %750 = load i32, ptr %58, align 4, !tbaa !9
  %751 = zext i32 %750 to i64
  %752 = getelementptr inbounds [16 x i16], ptr %60, i64 0, i64 %751
  %753 = load i16, ptr %752, align 2, !tbaa !39
  %754 = sext i16 %753 to i32
  %755 = or i32 %749, %754
  %756 = trunc i32 %755 to i16
  %757 = load i32, ptr %58, align 4, !tbaa !9
  %758 = zext i32 %757 to i64
  %759 = getelementptr inbounds [16 x i16], ptr %59, i64 0, i64 %758
  store i16 %756, ptr %759, align 2, !tbaa !39
  br label %760

760:                                              ; preds = %744
  %761 = load i32, ptr %58, align 4, !tbaa !9
  %762 = add i32 %761, 1
  store i32 %762, ptr %58, align 4, !tbaa !9
  br label %741, !llvm.loop !43

763:                                              ; preds = %741
  %764 = load ptr, ptr %6, align 8, !tbaa !5
  %765 = getelementptr inbounds [16 x i16], ptr %59, i64 0, i64 0
  %766 = load ptr, ptr %9, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %766, i32 0, i32 128
  %768 = load i8, ptr %767, align 4, !tbaa !27
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef %764, ptr noundef %765, ptr noundef @.str.1, i8 noundef signext %768, i32 noundef 29)
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  br label %769

769:                                              ; preds = %763, %734
  br label %770

770:                                              ; preds = %769, %702
  br label %771

771:                                              ; preds = %770, %701
  br label %772

772:                                              ; preds = %771, %616
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %773

773:                                              ; preds = %1581, %772
  %774 = load i32, ptr %16, align 4, !tbaa !9
  %775 = load i32, ptr %23, align 4, !tbaa !9
  %776 = icmp ult i32 %774, %775
  br i1 %776, label %777, label %1584

777:                                              ; preds = %773
  %778 = load i32, ptr %16, align 4, !tbaa !9
  %779 = load i32, ptr %23, align 4, !tbaa !9
  %780 = sub i32 %779, 1
  %781 = icmp eq i32 %778, %780
  br i1 %781, label %782, label %787

782:                                              ; preds = %777
  %783 = load i32, ptr %22, align 4, !tbaa !9
  %784 = load i32, ptr %16, align 4, !tbaa !9
  %785 = mul i32 %784, 4
  %786 = sub i32 %783, %785
  br label %788

787:                                              ; preds = %777
  br label %788

788:                                              ; preds = %787, %782
  %789 = phi i32 [ %786, %782 ], [ 4, %787 ]
  store i32 %789, ptr %24, align 4, !tbaa !9
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %790

790:                                              ; preds = %816, %788
  %791 = load i32, ptr %17, align 4, !tbaa !9
  %792 = load i32, ptr %24, align 4, !tbaa !9
  %793 = icmp ult i32 %791, %792
  br i1 %793, label %794, label %819

794:                                              ; preds = %790
  %795 = load i32, ptr %17, align 4, !tbaa !9
  %796 = mul i32 %795, 2
  %797 = add i32 8, %796
  store i32 %797, ptr %27, align 4, !tbaa !9
  %798 = load i32, ptr %17, align 4, !tbaa !9
  %799 = mul i32 %798, 2
  %800 = add i32 8, %799
  %801 = add i32 %800, 1
  store i32 %801, ptr %28, align 4, !tbaa !9
  %802 = load ptr, ptr %6, align 8, !tbaa !5
  %803 = load ptr, ptr %9, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %803, i32 0, i32 128
  %805 = load i8, ptr %804, align 4, !tbaa !27
  %806 = load i32, ptr %27, align 4, !tbaa !9
  %807 = load i32, ptr %27, align 4, !tbaa !9
  %808 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %802, i32 noundef 805574231, i8 noundef signext %805, i32 noundef %806, i32 noundef %807, i32 noundef %808)
  %809 = load ptr, ptr %6, align 8, !tbaa !5
  %810 = load ptr, ptr %9, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %810, i32 0, i32 128
  %812 = load i8, ptr %811, align 4, !tbaa !27
  %813 = load i32, ptr %28, align 4, !tbaa !9
  %814 = load i32, ptr %28, align 4, !tbaa !9
  %815 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %809, i32 noundef 805574231, i8 noundef signext %812, i32 noundef %813, i32 noundef %814, i32 noundef %815)
  br label %816

816:                                              ; preds = %794
  %817 = load i32, ptr %17, align 4, !tbaa !9
  %818 = add i32 %817, 1
  store i32 %818, ptr %17, align 4, !tbaa !9
  br label %790, !llvm.loop !44

819:                                              ; preds = %790
  %820 = load i32, ptr %15, align 4, !tbaa !9
  %821 = icmp ugt i32 %820, 1
  br i1 %821, label %822, label %829

822:                                              ; preds = %819
  %823 = load ptr, ptr %6, align 8, !tbaa !5
  %824 = load ptr, ptr %7, align 8, !tbaa !5
  %825 = load ptr, ptr %9, align 8, !tbaa !5
  %826 = load ptr, ptr %8, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %826, i32 0, i32 25
  %828 = load i32, ptr %827, align 4, !tbaa !20
  call void @libxsmm_generator_mateltwise_header_n_loop(ptr noundef %823, ptr noundef %824, ptr noundef %825, i32 noundef %828)
  br label %829

829:                                              ; preds = %822, %819
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %830

830:                                              ; preds = %1106, %829
  %831 = load i32, ptr %18, align 4, !tbaa !9
  %832 = load i32, ptr %11, align 4, !tbaa !9
  %833 = icmp ult i32 %831, %832
  br i1 %833, label %834, label %1109

834:                                              ; preds = %830
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %835

835:                                              ; preds = %1102, %834
  %836 = load i32, ptr %17, align 4, !tbaa !9
  %837 = load i32, ptr %24, align 4, !tbaa !9
  %838 = icmp ult i32 %836, %837
  br i1 %838, label %839, label %1105

839:                                              ; preds = %835
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #4
  store i32 0, ptr %61, align 4, !tbaa !9
  %840 = load i32, ptr %17, align 4, !tbaa !9
  %841 = mul i32 %840, 2
  %842 = add i32 8, %841
  store i32 %842, ptr %27, align 4, !tbaa !9
  %843 = load i32, ptr %17, align 4, !tbaa !9
  %844 = mul i32 %843, 2
  %845 = add i32 8, %844
  %846 = add i32 %845, 1
  store i32 %846, ptr %28, align 4, !tbaa !9
  %847 = load i32, ptr %17, align 4, !tbaa !9
  %848 = mul i32 %847, 2
  store i32 %848, ptr %19, align 4, !tbaa !9
  %849 = load i32, ptr %17, align 4, !tbaa !9
  %850 = mul i32 %849, 2
  %851 = add i32 %850, 1
  store i32 %851, ptr %20, align 4, !tbaa !9
  %852 = load i32, ptr %21, align 4, !tbaa !9
  %853 = icmp eq i32 %852, 1
  br i1 %853, label %854, label %871

854:                                              ; preds = %839
  %855 = load i32, ptr %12, align 4, !tbaa !9
  %856 = load i32, ptr %32, align 4, !tbaa !9
  %857 = urem i32 %855, %856
  %858 = load i32, ptr %32, align 4, !tbaa !9
  %859 = lshr i32 %858, 1
  %860 = icmp ult i32 %857, %859
  br i1 %860, label %861, label %871

861:                                              ; preds = %854
  %862 = load i32, ptr %16, align 4, !tbaa !9
  %863 = load i32, ptr %23, align 4, !tbaa !9
  %864 = sub i32 %863, 1
  %865 = icmp eq i32 %862, %864
  br i1 %865, label %866, label %871

866:                                              ; preds = %861
  %867 = load i32, ptr %17, align 4, !tbaa !9
  %868 = load i32, ptr %24, align 4, !tbaa !9
  %869 = sub i32 %868, 1
  %870 = icmp eq i32 %867, %869
  br label %871

871:                                              ; preds = %866, %861, %854, %839
  %872 = phi i1 [ false, %861 ], [ false, %854 ], [ false, %839 ], [ %870, %866 ]
  %873 = zext i1 %872 to i64
  %874 = select i1 %872, i32 1, i32 0
  store i32 %874, ptr %29, align 4, !tbaa !9
  %875 = load i32, ptr %29, align 4, !tbaa !9
  %876 = icmp eq i32 %875, 0
  br i1 %876, label %877, label %890

877:                                              ; preds = %871
  %878 = load i32, ptr %21, align 4, !tbaa !9
  %879 = icmp eq i32 %878, 1
  br i1 %879, label %880, label %890

880:                                              ; preds = %877
  %881 = load i32, ptr %16, align 4, !tbaa !9
  %882 = load i32, ptr %23, align 4, !tbaa !9
  %883 = sub i32 %882, 1
  %884 = icmp eq i32 %881, %883
  br i1 %884, label %885, label %890

885:                                              ; preds = %880
  %886 = load i32, ptr %17, align 4, !tbaa !9
  %887 = load i32, ptr %24, align 4, !tbaa !9
  %888 = sub i32 %887, 1
  %889 = icmp eq i32 %886, %888
  br label %890

890:                                              ; preds = %885, %880, %877, %871
  %891 = phi i1 [ false, %880 ], [ false, %877 ], [ false, %871 ], [ %889, %885 ]
  %892 = zext i1 %891 to i64
  %893 = select i1 %891, i32 1, i32 0
  store i32 %893, ptr %30, align 4, !tbaa !9
  %894 = load ptr, ptr %6, align 8, !tbaa !5
  %895 = load ptr, ptr %9, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %895, i32 0, i32 0
  %897 = load i32, ptr %896, align 4, !tbaa !45
  %898 = load ptr, ptr %9, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %898, i32 0, i32 6
  %900 = load i32, ptr %899, align 4, !tbaa !30
  %901 = load ptr, ptr %8, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %901, i32 0, i32 1
  %903 = load i32, ptr %902, align 4, !tbaa !17
  %904 = load i32, ptr %18, align 4, !tbaa !9
  %905 = load i32, ptr %12, align 4, !tbaa !9
  %906 = mul i32 %904, %905
  %907 = load i32, ptr %17, align 4, !tbaa !9
  %908 = load i32, ptr %32, align 4, !tbaa !9
  %909 = mul i32 %907, %908
  %910 = add i32 %906, %909
  %911 = load i32, ptr %16, align 4, !tbaa !9
  %912 = load i32, ptr %32, align 4, !tbaa !9
  %913 = mul i32 %911, %912
  %914 = mul i32 %913, 4
  %915 = add i32 %910, %914
  %916 = load ptr, ptr %9, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %916, i32 0, i32 2
  %918 = load i32, ptr %917, align 4, !tbaa !31
  %919 = mul i32 %915, %918
  %920 = load i8, ptr %35, align 1, !tbaa !26
  %921 = load i32, ptr %19, align 4, !tbaa !9
  %922 = load i32, ptr %29, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %894, i32 noundef %897, i32 noundef %900, i32 noundef %903, i32 noundef 127, i32 noundef 0, i32 noundef %919, i8 noundef signext %920, i32 noundef %921, i32 noundef %922, i32 noundef 1, i32 noundef 0)
  %923 = load ptr, ptr %10, align 8, !tbaa !5
  %924 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %923, i32 noundef 0)
  %925 = icmp eq i32 2, %924
  br i1 %925, label %926, label %939

926:                                              ; preds = %890
  %927 = load ptr, ptr %6, align 8, !tbaa !5
  %928 = load ptr, ptr %9, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %928, i32 0, i32 128
  %930 = load i8, ptr %929, align 4, !tbaa !27
  %931 = load i32, ptr %19, align 4, !tbaa !9
  %932 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %927, i32 noundef 537208099, i8 noundef signext %930, i32 noundef %931, i32 noundef %932)
  %933 = load ptr, ptr %6, align 8, !tbaa !5
  %934 = load ptr, ptr %9, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %934, i32 0, i32 128
  %936 = load i8, ptr %935, align 4, !tbaa !27
  %937 = load i32, ptr %19, align 4, !tbaa !9
  %938 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %933, i32 noundef 611128946, i8 noundef signext %936, i32 noundef %937, i32 noundef %938, i32 noundef 16)
  br label %979

939:                                              ; preds = %890
  %940 = load ptr, ptr %10, align 8, !tbaa !5
  %941 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %940, i32 noundef 0)
  %942 = icmp eq i32 3, %941
  br i1 %942, label %943, label %950

943:                                              ; preds = %939
  %944 = load ptr, ptr %6, align 8, !tbaa !5
  %945 = load ptr, ptr %9, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %945, i32 0, i32 128
  %947 = load i8, ptr %946, align 4, !tbaa !27
  %948 = load i32, ptr %19, align 4, !tbaa !9
  %949 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %944, i32 noundef 537208083, i8 noundef signext %947, i32 noundef %948, i32 noundef %949)
  br label %978

950:                                              ; preds = %939
  %951 = load ptr, ptr %10, align 8, !tbaa !5
  %952 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %951, i32 noundef 0)
  %953 = icmp eq i32 4, %952
  br i1 %953, label %954, label %961

954:                                              ; preds = %950
  %955 = load ptr, ptr %6, align 8, !tbaa !5
  %956 = load ptr, ptr %9, align 8, !tbaa !5
  %957 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %956, i32 0, i32 128
  %958 = load i8, ptr %957, align 4, !tbaa !27
  %959 = load i32, ptr %19, align 4, !tbaa !9
  %960 = load i32, ptr %19, align 4, !tbaa !9
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %955, i8 noundef signext %958, i32 noundef %959, i32 noundef %960)
  br label %977

961:                                              ; preds = %950
  %962 = load ptr, ptr %10, align 8, !tbaa !5
  %963 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %962, i32 noundef 0)
  %964 = icmp eq i32 5, %963
  br i1 %964, label %965, label %976

965:                                              ; preds = %961
  %966 = load ptr, ptr %6, align 8, !tbaa !5
  %967 = load ptr, ptr %9, align 8, !tbaa !5
  %968 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %967, i32 0, i32 128
  %969 = load i8, ptr %968, align 4, !tbaa !27
  %970 = load i32, ptr %19, align 4, !tbaa !9
  %971 = load i32, ptr %19, align 4, !tbaa !9
  %972 = load i32, ptr %36, align 4, !tbaa !9
  %973 = load i32, ptr %37, align 4, !tbaa !9
  %974 = load i32, ptr %40, align 4, !tbaa !9
  %975 = load i32, ptr %41, align 4, !tbaa !9
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %966, i8 noundef signext %969, i32 noundef %970, i32 noundef %971, i32 noundef %972, i32 noundef %973, i32 noundef %974, i32 noundef %975)
  br label %976

976:                                              ; preds = %965, %961
  br label %977

977:                                              ; preds = %976, %954
  br label %978

978:                                              ; preds = %977, %943
  br label %979

979:                                              ; preds = %978, %926
  %980 = load ptr, ptr %6, align 8, !tbaa !5
  %981 = load ptr, ptr %9, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %981, i32 0, i32 128
  %983 = load i8, ptr %982, align 4, !tbaa !27
  %984 = load i32, ptr %19, align 4, !tbaa !9
  %985 = load i32, ptr %27, align 4, !tbaa !9
  %986 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %980, i32 noundef 805574232, i8 noundef signext %983, i32 noundef %984, i32 noundef %985, i32 noundef %986)
  %987 = load i32, ptr %16, align 4, !tbaa !9
  %988 = load i32, ptr %32, align 4, !tbaa !9
  %989 = mul i32 %987, %988
  %990 = mul i32 %989, 4
  %991 = load i32, ptr %17, align 4, !tbaa !9
  %992 = load i32, ptr %32, align 4, !tbaa !9
  %993 = mul i32 %991, %992
  %994 = add i32 %990, %993
  %995 = load i32, ptr %32, align 4, !tbaa !9
  %996 = lshr i32 %995, 1
  %997 = add i32 %994, %996
  store i32 %997, ptr %61, align 4, !tbaa !9
  %998 = load i32, ptr %29, align 4, !tbaa !9
  %999 = icmp eq i32 %998, 0
  br i1 %999, label %1000, label %1101

1000:                                             ; preds = %979
  %1001 = load i32, ptr %61, align 4, !tbaa !9
  %1002 = load i32, ptr %12, align 4, !tbaa !9
  %1003 = icmp ult i32 %1001, %1002
  br i1 %1003, label %1004, label %1101

1004:                                             ; preds = %1000
  %1005 = load ptr, ptr %6, align 8, !tbaa !5
  %1006 = load ptr, ptr %9, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1006, i32 0, i32 0
  %1008 = load i32, ptr %1007, align 4, !tbaa !45
  %1009 = load ptr, ptr %9, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1009, i32 0, i32 6
  %1011 = load i32, ptr %1010, align 4, !tbaa !30
  %1012 = load ptr, ptr %8, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1012, i32 0, i32 1
  %1014 = load i32, ptr %1013, align 4, !tbaa !17
  %1015 = load i32, ptr %18, align 4, !tbaa !9
  %1016 = load i32, ptr %12, align 4, !tbaa !9
  %1017 = mul i32 %1015, %1016
  %1018 = load i32, ptr %17, align 4, !tbaa !9
  %1019 = load i32, ptr %32, align 4, !tbaa !9
  %1020 = mul i32 %1018, %1019
  %1021 = add i32 %1017, %1020
  %1022 = load i32, ptr %32, align 4, !tbaa !9
  %1023 = lshr i32 %1022, 1
  %1024 = add i32 %1021, %1023
  %1025 = load i32, ptr %16, align 4, !tbaa !9
  %1026 = load i32, ptr %32, align 4, !tbaa !9
  %1027 = mul i32 %1025, %1026
  %1028 = mul i32 %1027, 4
  %1029 = add i32 %1024, %1028
  %1030 = load ptr, ptr %9, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1030, i32 0, i32 2
  %1032 = load i32, ptr %1031, align 4, !tbaa !31
  %1033 = mul i32 %1029, %1032
  %1034 = load i8, ptr %35, align 1, !tbaa !26
  %1035 = load i32, ptr %20, align 4, !tbaa !9
  %1036 = load i32, ptr %30, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1005, i32 noundef %1008, i32 noundef %1011, i32 noundef %1014, i32 noundef 127, i32 noundef 0, i32 noundef %1033, i8 noundef signext %1034, i32 noundef %1035, i32 noundef %1036, i32 noundef 1, i32 noundef 0)
  %1037 = load ptr, ptr %10, align 8, !tbaa !5
  %1038 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1037, i32 noundef 0)
  %1039 = icmp eq i32 2, %1038
  br i1 %1039, label %1040, label %1053

1040:                                             ; preds = %1004
  %1041 = load ptr, ptr %6, align 8, !tbaa !5
  %1042 = load ptr, ptr %9, align 8, !tbaa !5
  %1043 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1042, i32 0, i32 128
  %1044 = load i8, ptr %1043, align 4, !tbaa !27
  %1045 = load i32, ptr %20, align 4, !tbaa !9
  %1046 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1041, i32 noundef 537208099, i8 noundef signext %1044, i32 noundef %1045, i32 noundef %1046)
  %1047 = load ptr, ptr %6, align 8, !tbaa !5
  %1048 = load ptr, ptr %9, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1048, i32 0, i32 128
  %1050 = load i8, ptr %1049, align 4, !tbaa !27
  %1051 = load i32, ptr %20, align 4, !tbaa !9
  %1052 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %1047, i32 noundef 611128946, i8 noundef signext %1050, i32 noundef %1051, i32 noundef %1052, i32 noundef 16)
  br label %1093

1053:                                             ; preds = %1004
  %1054 = load ptr, ptr %10, align 8, !tbaa !5
  %1055 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1054, i32 noundef 0)
  %1056 = icmp eq i32 3, %1055
  br i1 %1056, label %1057, label %1064

1057:                                             ; preds = %1053
  %1058 = load ptr, ptr %6, align 8, !tbaa !5
  %1059 = load ptr, ptr %9, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1059, i32 0, i32 128
  %1061 = load i8, ptr %1060, align 4, !tbaa !27
  %1062 = load i32, ptr %20, align 4, !tbaa !9
  %1063 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %1058, i32 noundef 537208083, i8 noundef signext %1061, i32 noundef %1062, i32 noundef %1063)
  br label %1092

1064:                                             ; preds = %1053
  %1065 = load ptr, ptr %10, align 8, !tbaa !5
  %1066 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1065, i32 noundef 0)
  %1067 = icmp eq i32 4, %1066
  br i1 %1067, label %1068, label %1075

1068:                                             ; preds = %1064
  %1069 = load ptr, ptr %6, align 8, !tbaa !5
  %1070 = load ptr, ptr %9, align 8, !tbaa !5
  %1071 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1070, i32 0, i32 128
  %1072 = load i8, ptr %1071, align 4, !tbaa !27
  %1073 = load i32, ptr %20, align 4, !tbaa !9
  %1074 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %1069, i8 noundef signext %1072, i32 noundef %1073, i32 noundef %1074)
  br label %1091

1075:                                             ; preds = %1064
  %1076 = load ptr, ptr %10, align 8, !tbaa !5
  %1077 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1076, i32 noundef 0)
  %1078 = icmp eq i32 5, %1077
  br i1 %1078, label %1079, label %1090

1079:                                             ; preds = %1075
  %1080 = load ptr, ptr %6, align 8, !tbaa !5
  %1081 = load ptr, ptr %9, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1081, i32 0, i32 128
  %1083 = load i8, ptr %1082, align 4, !tbaa !27
  %1084 = load i32, ptr %20, align 4, !tbaa !9
  %1085 = load i32, ptr %20, align 4, !tbaa !9
  %1086 = load i32, ptr %36, align 4, !tbaa !9
  %1087 = load i32, ptr %37, align 4, !tbaa !9
  %1088 = load i32, ptr %40, align 4, !tbaa !9
  %1089 = load i32, ptr %41, align 4, !tbaa !9
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %1080, i8 noundef signext %1083, i32 noundef %1084, i32 noundef %1085, i32 noundef %1086, i32 noundef %1087, i32 noundef %1088, i32 noundef %1089)
  br label %1090

1090:                                             ; preds = %1079, %1075
  br label %1091

1091:                                             ; preds = %1090, %1068
  br label %1092

1092:                                             ; preds = %1091, %1057
  br label %1093

1093:                                             ; preds = %1092, %1040
  %1094 = load ptr, ptr %6, align 8, !tbaa !5
  %1095 = load ptr, ptr %9, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1095, i32 0, i32 128
  %1097 = load i8, ptr %1096, align 4, !tbaa !27
  %1098 = load i32, ptr %20, align 4, !tbaa !9
  %1099 = load i32, ptr %28, align 4, !tbaa !9
  %1100 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1094, i32 noundef 805574232, i8 noundef signext %1097, i32 noundef %1098, i32 noundef %1099, i32 noundef %1100)
  br label %1101

1101:                                             ; preds = %1093, %1000, %979
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  br label %1102

1102:                                             ; preds = %1101
  %1103 = load i32, ptr %17, align 4, !tbaa !9
  %1104 = add i32 %1103, 1
  store i32 %1104, ptr %17, align 4, !tbaa !9
  br label %835, !llvm.loop !46

1105:                                             ; preds = %835
  br label %1106

1106:                                             ; preds = %1105
  %1107 = load i32, ptr %18, align 4, !tbaa !9
  %1108 = add i32 %1107, 1
  store i32 %1108, ptr %18, align 4, !tbaa !9
  br label %830, !llvm.loop !47

1109:                                             ; preds = %830
  %1110 = load i32, ptr %15, align 4, !tbaa !9
  %1111 = icmp ugt i32 %1110, 1
  br i1 %1111, label %1112, label %1155

1112:                                             ; preds = %1109
  %1113 = load ptr, ptr %6, align 8, !tbaa !5
  %1114 = load ptr, ptr %9, align 8, !tbaa !5
  %1115 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1114, i32 0, i32 10
  %1116 = load i32, ptr %1115, align 4, !tbaa !34
  %1117 = load ptr, ptr %8, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1117, i32 0, i32 1
  %1119 = load i32, ptr %1118, align 4, !tbaa !17
  %1120 = load i32, ptr %14, align 4, !tbaa !9
  %1121 = zext i32 %1120 to i64
  %1122 = load i32, ptr %11, align 4, !tbaa !9
  %1123 = zext i32 %1122 to i64
  %1124 = mul nsw i64 %1121, %1123
  %1125 = load ptr, ptr %9, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1125, i32 0, i32 2
  %1127 = load i32, ptr %1126, align 4, !tbaa !31
  %1128 = zext i32 %1127 to i64
  %1129 = mul nsw i64 %1124, %1128
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1113, i32 noundef %1116, i32 noundef %1119, i64 noundef %1129)
  %1130 = load ptr, ptr %6, align 8, !tbaa !5
  %1131 = load ptr, ptr %7, align 8, !tbaa !5
  %1132 = load ptr, ptr %9, align 8, !tbaa !5
  %1133 = load ptr, ptr %8, align 8, !tbaa !5
  %1134 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1133, i32 0, i32 25
  %1135 = load i32, ptr %1134, align 4, !tbaa !20
  %1136 = load i32, ptr %15, align 4, !tbaa !9
  call void @libxsmm_generator_mateltwise_footer_n_loop(ptr noundef %1130, ptr noundef %1131, ptr noundef %1132, i32 noundef %1135, i32 noundef %1136)
  %1137 = load i32, ptr %23, align 4, !tbaa !9
  %1138 = icmp ugt i32 %1137, 1
  br i1 %1138, label %1139, label %1154

1139:                                             ; preds = %1112
  %1140 = load ptr, ptr %6, align 8, !tbaa !5
  %1141 = load ptr, ptr %8, align 8, !tbaa !5
  %1142 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1141, i32 0, i32 1
  %1143 = load i32, ptr %1142, align 4, !tbaa !17
  %1144 = load i32, ptr %14, align 4, !tbaa !9
  %1145 = zext i32 %1144 to i64
  %1146 = load i32, ptr %13, align 4, !tbaa !9
  %1147 = zext i32 %1146 to i64
  %1148 = mul nsw i64 %1145, %1147
  %1149 = load ptr, ptr %9, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1149, i32 0, i32 2
  %1151 = load i32, ptr %1150, align 4, !tbaa !31
  %1152 = zext i32 %1151 to i64
  %1153 = mul nsw i64 %1148, %1152
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %1140, i32 noundef 30008, i32 noundef %1143, i64 noundef %1153)
  br label %1154

1154:                                             ; preds = %1139, %1112
  br label %1155

1155:                                             ; preds = %1154, %1109
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %1156

1156:                                             ; preds = %1577, %1155
  %1157 = load i32, ptr %17, align 4, !tbaa !9
  %1158 = load i32, ptr %24, align 4, !tbaa !9
  %1159 = icmp ult i32 %1157, %1158
  br i1 %1159, label %1160, label %1580

1160:                                             ; preds = %1156
  %1161 = load i32, ptr %17, align 4, !tbaa !9
  %1162 = mul i32 %1161, 2
  %1163 = add i32 8, %1162
  store i32 %1163, ptr %27, align 4, !tbaa !9
  %1164 = load i32, ptr %17, align 4, !tbaa !9
  %1165 = mul i32 %1164, 2
  %1166 = add i32 8, %1165
  %1167 = add i32 %1166, 1
  store i32 %1167, ptr %28, align 4, !tbaa !9
  %1168 = load i32, ptr %21, align 4, !tbaa !9
  %1169 = icmp eq i32 %1168, 1
  br i1 %1169, label %1170, label %1180

1170:                                             ; preds = %1160
  %1171 = load i32, ptr %16, align 4, !tbaa !9
  %1172 = load i32, ptr %23, align 4, !tbaa !9
  %1173 = sub i32 %1172, 1
  %1174 = icmp eq i32 %1171, %1173
  br i1 %1174, label %1175, label %1180

1175:                                             ; preds = %1170
  %1176 = load i32, ptr %17, align 4, !tbaa !9
  %1177 = load i32, ptr %24, align 4, !tbaa !9
  %1178 = sub i32 %1177, 1
  %1179 = icmp eq i32 %1176, %1178
  br label %1180

1180:                                             ; preds = %1175, %1170, %1160
  %1181 = phi i1 [ false, %1170 ], [ false, %1160 ], [ %1179, %1175 ]
  %1182 = zext i1 %1181 to i64
  %1183 = select i1 %1181, i32 1, i32 0
  store i32 %1183, ptr %31, align 4, !tbaa !9
  %1184 = load ptr, ptr %10, align 8, !tbaa !5
  %1185 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1184, i32 noundef 3)
  %1186 = icmp eq i32 4, %1185
  br i1 %1186, label %1187, label %1240

1187:                                             ; preds = %1180
  %1188 = load ptr, ptr %6, align 8, !tbaa !5
  %1189 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1188, i32 0, i32 6
  %1190 = load i32, ptr %1189, align 4, !tbaa !24
  %1191 = icmp uge i32 %1190, 1101
  br i1 %1191, label %1192, label %1211

1192:                                             ; preds = %1187
  %1193 = load ptr, ptr %6, align 8, !tbaa !5
  %1194 = load ptr, ptr %9, align 8, !tbaa !5
  %1195 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1194, i32 0, i32 128
  %1196 = load i8, ptr %1195, align 4, !tbaa !27
  %1197 = load i32, ptr %27, align 4, !tbaa !9
  %1198 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef %1193, i8 noundef signext %1196, i32 noundef %1197, i32 noundef %1198, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0)
  %1199 = load ptr, ptr %6, align 8, !tbaa !5
  %1200 = load ptr, ptr %9, align 8, !tbaa !5
  %1201 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1200, i32 0, i32 128
  %1202 = load i8, ptr %1201, align 4, !tbaa !27
  %1203 = load i32, ptr %28, align 4, !tbaa !9
  %1204 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef %1199, i8 noundef signext %1202, i32 noundef %1203, i32 noundef %1204, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0)
  %1205 = load ptr, ptr %6, align 8, !tbaa !5
  %1206 = load ptr, ptr %9, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1206, i32 0, i32 128
  %1208 = load i8, ptr %1207, align 4, !tbaa !27
  %1209 = load i32, ptr %28, align 4, !tbaa !9
  %1210 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1205, i32 noundef -268097923, i8 noundef signext %1208, i32 noundef %1209, i32 noundef 29, i32 noundef %1210)
  br label %1211

1211:                                             ; preds = %1192, %1187
  %1212 = load ptr, ptr %6, align 8, !tbaa !5
  %1213 = load ptr, ptr %9, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1213, i32 0, i32 0
  %1215 = load i32, ptr %1214, align 4, !tbaa !45
  %1216 = load ptr, ptr %9, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1216, i32 0, i32 9
  %1218 = load i32, ptr %1217, align 4, !tbaa !48
  %1219 = load ptr, ptr %8, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1219, i32 0, i32 6
  %1221 = load i32, ptr %1220, align 4, !tbaa !19
  %1222 = load i32, ptr %17, align 4, !tbaa !9
  %1223 = load i32, ptr %32, align 4, !tbaa !9
  %1224 = mul i32 %1222, %1223
  %1225 = load i32, ptr %16, align 4, !tbaa !9
  %1226 = load i32, ptr %32, align 4, !tbaa !9
  %1227 = mul i32 %1225, %1226
  %1228 = mul i32 %1227, 4
  %1229 = add i32 %1224, %1228
  %1230 = load ptr, ptr %9, align 8, !tbaa !5
  %1231 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1230, i32 0, i32 5
  %1232 = load i32, ptr %1231, align 4, !tbaa !35
  %1233 = mul i32 %1229, %1232
  %1234 = load ptr, ptr %9, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1234, i32 0, i32 128
  %1236 = load i8, ptr %1235, align 4, !tbaa !27
  %1237 = load i32, ptr %27, align 4, !tbaa !9
  %1238 = load i32, ptr %31, align 4, !tbaa !9
  %1239 = mul i32 %1238, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1212, i32 noundef %1215, i32 noundef %1218, i32 noundef %1221, i32 noundef 127, i32 noundef 0, i32 noundef %1233, i8 noundef signext %1236, i32 noundef %1237, i32 noundef %1239, i32 noundef 0, i32 noundef 1)
  br label %1576

1240:                                             ; preds = %1180
  %1241 = load ptr, ptr %10, align 8, !tbaa !5
  %1242 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1241, i32 noundef 3)
  %1243 = icmp eq i32 5, %1242
  br i1 %1243, label %1244, label %1311

1244:                                             ; preds = %1240
  %1245 = load ptr, ptr %6, align 8, !tbaa !5
  %1246 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1245, i32 0, i32 6
  %1247 = load i32, ptr %1246, align 4, !tbaa !24
  %1248 = icmp uge i32 %1247, 1101
  br i1 %1248, label %1249, label %1282

1249:                                             ; preds = %1244
  %1250 = load ptr, ptr %6, align 8, !tbaa !5
  %1251 = load ptr, ptr %9, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1251, i32 0, i32 128
  %1253 = load i8, ptr %1252, align 4, !tbaa !27
  %1254 = load i32, ptr %27, align 4, !tbaa !9
  %1255 = load i32, ptr %27, align 4, !tbaa !9
  %1256 = load i32, ptr %36, align 4, !tbaa !9
  %1257 = load i32, ptr %37, align 4, !tbaa !9
  %1258 = load i32, ptr %38, align 4, !tbaa !9
  %1259 = load i32, ptr %39, align 4, !tbaa !9
  %1260 = load i32, ptr %40, align 4, !tbaa !9
  %1261 = load i32, ptr %41, align 4, !tbaa !9
  %1262 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef %1250, i8 noundef signext %1253, i32 noundef %1254, i32 noundef %1255, i32 noundef %1256, i32 noundef %1257, i32 noundef %1258, i32 noundef %1259, i32 noundef %1260, i32 noundef %1261, i32 noundef %1262)
  %1263 = load ptr, ptr %6, align 8, !tbaa !5
  %1264 = load ptr, ptr %9, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1264, i32 0, i32 128
  %1266 = load i8, ptr %1265, align 4, !tbaa !27
  %1267 = load i32, ptr %28, align 4, !tbaa !9
  %1268 = load i32, ptr %28, align 4, !tbaa !9
  %1269 = load i32, ptr %36, align 4, !tbaa !9
  %1270 = load i32, ptr %37, align 4, !tbaa !9
  %1271 = load i32, ptr %38, align 4, !tbaa !9
  %1272 = load i32, ptr %39, align 4, !tbaa !9
  %1273 = load i32, ptr %40, align 4, !tbaa !9
  %1274 = load i32, ptr %41, align 4, !tbaa !9
  %1275 = load i32, ptr %42, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef %1263, i8 noundef signext %1266, i32 noundef %1267, i32 noundef %1268, i32 noundef %1269, i32 noundef %1270, i32 noundef %1271, i32 noundef %1272, i32 noundef %1273, i32 noundef %1274, i32 noundef %1275)
  %1276 = load ptr, ptr %6, align 8, !tbaa !5
  %1277 = load ptr, ptr %9, align 8, !tbaa !5
  %1278 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1277, i32 0, i32 128
  %1279 = load i8, ptr %1278, align 4, !tbaa !27
  %1280 = load i32, ptr %28, align 4, !tbaa !9
  %1281 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1276, i32 noundef -268097923, i8 noundef signext %1279, i32 noundef %1280, i32 noundef 29, i32 noundef %1281)
  br label %1282

1282:                                             ; preds = %1249, %1244
  %1283 = load ptr, ptr %6, align 8, !tbaa !5
  %1284 = load ptr, ptr %9, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1284, i32 0, i32 0
  %1286 = load i32, ptr %1285, align 4, !tbaa !45
  %1287 = load ptr, ptr %9, align 8, !tbaa !5
  %1288 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1287, i32 0, i32 9
  %1289 = load i32, ptr %1288, align 4, !tbaa !48
  %1290 = load ptr, ptr %8, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1290, i32 0, i32 6
  %1292 = load i32, ptr %1291, align 4, !tbaa !19
  %1293 = load i32, ptr %17, align 4, !tbaa !9
  %1294 = load i32, ptr %32, align 4, !tbaa !9
  %1295 = mul i32 %1293, %1294
  %1296 = load i32, ptr %16, align 4, !tbaa !9
  %1297 = load i32, ptr %32, align 4, !tbaa !9
  %1298 = mul i32 %1296, %1297
  %1299 = mul i32 %1298, 4
  %1300 = add i32 %1295, %1299
  %1301 = load ptr, ptr %9, align 8, !tbaa !5
  %1302 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1301, i32 0, i32 5
  %1303 = load i32, ptr %1302, align 4, !tbaa !35
  %1304 = mul i32 %1300, %1303
  %1305 = load ptr, ptr %9, align 8, !tbaa !5
  %1306 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1305, i32 0, i32 128
  %1307 = load i8, ptr %1306, align 4, !tbaa !27
  %1308 = load i32, ptr %27, align 4, !tbaa !9
  %1309 = load i32, ptr %31, align 4, !tbaa !9
  %1310 = mul i32 %1309, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1283, i32 noundef %1286, i32 noundef %1289, i32 noundef %1292, i32 noundef 127, i32 noundef 0, i32 noundef %1304, i8 noundef signext %1307, i32 noundef %1308, i32 noundef %1310, i32 noundef 0, i32 noundef 1)
  br label %1575

1311:                                             ; preds = %1240
  %1312 = load ptr, ptr %10, align 8, !tbaa !5
  %1313 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1312, i32 noundef 3)
  %1314 = icmp eq i32 2, %1313
  br i1 %1314, label %1315, label %1381

1315:                                             ; preds = %1311
  %1316 = load ptr, ptr %6, align 8, !tbaa !5
  %1317 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1316, i32 0, i32 6
  %1318 = load i32, ptr %1317, align 4, !tbaa !24
  %1319 = icmp uge i32 %1318, 1103
  br i1 %1319, label %1320, label %1333

1320:                                             ; preds = %1315
  %1321 = load ptr, ptr %6, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1321, i32 0, i32 6
  %1323 = load i32, ptr %1322, align 4, !tbaa !24
  %1324 = icmp ne i32 %1323, 1053
  br i1 %1324, label %1325, label %1333

1325:                                             ; preds = %1320
  %1326 = load ptr, ptr %6, align 8, !tbaa !5
  %1327 = load ptr, ptr %9, align 8, !tbaa !5
  %1328 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1327, i32 0, i32 128
  %1329 = load i8, ptr %1328, align 4, !tbaa !27
  %1330 = load i32, ptr %27, align 4, !tbaa !9
  %1331 = load i32, ptr %28, align 4, !tbaa !9
  %1332 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1326, i32 noundef -267966862, i8 noundef signext %1329, i32 noundef %1330, i32 noundef %1331, i32 noundef %1332)
  br label %1352

1333:                                             ; preds = %1320, %1315
  %1334 = load ptr, ptr %6, align 8, !tbaa !5
  %1335 = load ptr, ptr %9, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1335, i32 0, i32 128
  %1337 = load i8, ptr %1336, align 4, !tbaa !27
  %1338 = load i32, ptr %27, align 4, !tbaa !9
  %1339 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %1334, i8 noundef signext %1337, i32 noundef %1338, i32 noundef %1339, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 1)
  %1340 = load ptr, ptr %6, align 8, !tbaa !5
  %1341 = load ptr, ptr %9, align 8, !tbaa !5
  %1342 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1341, i32 0, i32 128
  %1343 = load i8, ptr %1342, align 4, !tbaa !27
  %1344 = load i32, ptr %28, align 4, !tbaa !9
  %1345 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef %1340, i8 noundef signext %1343, i32 noundef %1344, i32 noundef %1345, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 1)
  %1346 = load ptr, ptr %6, align 8, !tbaa !5
  %1347 = load ptr, ptr %9, align 8, !tbaa !5
  %1348 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1347, i32 0, i32 128
  %1349 = load i8, ptr %1348, align 4, !tbaa !27
  %1350 = load i32, ptr %28, align 4, !tbaa !9
  %1351 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1346, i32 noundef -259709315, i8 noundef signext %1349, i32 noundef %1350, i32 noundef 29, i32 noundef %1351)
  br label %1352

1352:                                             ; preds = %1333, %1325
  %1353 = load ptr, ptr %6, align 8, !tbaa !5
  %1354 = load ptr, ptr %9, align 8, !tbaa !5
  %1355 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1354, i32 0, i32 0
  %1356 = load i32, ptr %1355, align 4, !tbaa !45
  %1357 = load ptr, ptr %9, align 8, !tbaa !5
  %1358 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1357, i32 0, i32 9
  %1359 = load i32, ptr %1358, align 4, !tbaa !48
  %1360 = load ptr, ptr %8, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1360, i32 0, i32 6
  %1362 = load i32, ptr %1361, align 4, !tbaa !19
  %1363 = load i32, ptr %17, align 4, !tbaa !9
  %1364 = load i32, ptr %32, align 4, !tbaa !9
  %1365 = mul i32 %1363, %1364
  %1366 = load i32, ptr %16, align 4, !tbaa !9
  %1367 = load i32, ptr %32, align 4, !tbaa !9
  %1368 = mul i32 %1366, %1367
  %1369 = mul i32 %1368, 4
  %1370 = add i32 %1365, %1369
  %1371 = load ptr, ptr %9, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1371, i32 0, i32 5
  %1373 = load i32, ptr %1372, align 4, !tbaa !35
  %1374 = mul i32 %1370, %1373
  %1375 = load ptr, ptr %9, align 8, !tbaa !5
  %1376 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1375, i32 0, i32 128
  %1377 = load i8, ptr %1376, align 4, !tbaa !27
  %1378 = load i32, ptr %27, align 4, !tbaa !9
  %1379 = load i32, ptr %31, align 4, !tbaa !9
  %1380 = mul i32 %1379, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1353, i32 noundef %1356, i32 noundef %1359, i32 noundef %1362, i32 noundef 127, i32 noundef 0, i32 noundef %1374, i8 noundef signext %1377, i32 noundef %1378, i32 noundef %1380, i32 noundef 0, i32 noundef 1)
  br label %1574

1381:                                             ; preds = %1311
  %1382 = load ptr, ptr %10, align 8, !tbaa !5
  %1383 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1382, i32 noundef 3)
  %1384 = icmp eq i32 3, %1383
  br i1 %1384, label %1385, label %1458

1385:                                             ; preds = %1381
  %1386 = load ptr, ptr %6, align 8, !tbaa !5
  %1387 = load ptr, ptr %9, align 8, !tbaa !5
  %1388 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1387, i32 0, i32 128
  %1389 = load i8, ptr %1388, align 4, !tbaa !27
  %1390 = load i32, ptr %27, align 4, !tbaa !9
  %1391 = load i32, ptr %27, align 4, !tbaa !9
  %1392 = load ptr, ptr %6, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1392, i32 0, i32 6
  %1394 = load i32, ptr %1393, align 4, !tbaa !24
  %1395 = icmp ult i32 %1394, 1101
  %1396 = zext i1 %1395 to i64
  %1397 = select i1 %1395, i32 0, i32 1
  %1398 = load ptr, ptr %6, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1398, i32 0, i32 6
  %1400 = load i32, ptr %1399, align 4, !tbaa !24
  %1401 = icmp ult i32 %1400, 1101
  %1402 = zext i1 %1401 to i64
  %1403 = select i1 %1401, i32 0, i32 1
  %1404 = trunc i32 %1403 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %1386, i32 noundef 671954205, i8 noundef signext %1389, i32 noundef %1390, i32 noundef %1391, i32 noundef 0, i32 noundef %1397, i8 noundef zeroext %1404, i32 noundef 0)
  %1405 = load ptr, ptr %6, align 8, !tbaa !5
  %1406 = load ptr, ptr %9, align 8, !tbaa !5
  %1407 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1406, i32 0, i32 128
  %1408 = load i8, ptr %1407, align 4, !tbaa !27
  %1409 = load i32, ptr %28, align 4, !tbaa !9
  %1410 = load i32, ptr %28, align 4, !tbaa !9
  %1411 = load ptr, ptr %6, align 8, !tbaa !5
  %1412 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1411, i32 0, i32 6
  %1413 = load i32, ptr %1412, align 4, !tbaa !24
  %1414 = icmp ult i32 %1413, 1101
  %1415 = zext i1 %1414 to i64
  %1416 = select i1 %1414, i32 0, i32 1
  %1417 = load ptr, ptr %6, align 8, !tbaa !5
  %1418 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1417, i32 0, i32 6
  %1419 = load i32, ptr %1418, align 4, !tbaa !24
  %1420 = icmp ult i32 %1419, 1101
  %1421 = zext i1 %1420 to i64
  %1422 = select i1 %1420, i32 0, i32 1
  %1423 = trunc i32 %1422 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %1405, i32 noundef 671954205, i8 noundef signext %1408, i32 noundef %1409, i32 noundef %1410, i32 noundef 0, i32 noundef %1416, i8 noundef zeroext %1423, i32 noundef 0)
  %1424 = load ptr, ptr %6, align 8, !tbaa !5
  %1425 = load ptr, ptr %9, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1425, i32 0, i32 128
  %1427 = load i8, ptr %1426, align 4, !tbaa !27
  %1428 = load i32, ptr %28, align 4, !tbaa !9
  %1429 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %1424, i32 noundef -259709315, i8 noundef signext %1427, i32 noundef %1428, i32 noundef 29, i32 noundef %1429)
  %1430 = load ptr, ptr %6, align 8, !tbaa !5
  %1431 = load ptr, ptr %9, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1431, i32 0, i32 0
  %1433 = load i32, ptr %1432, align 4, !tbaa !45
  %1434 = load ptr, ptr %9, align 8, !tbaa !5
  %1435 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1434, i32 0, i32 9
  %1436 = load i32, ptr %1435, align 4, !tbaa !48
  %1437 = load ptr, ptr %8, align 8, !tbaa !5
  %1438 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1437, i32 0, i32 6
  %1439 = load i32, ptr %1438, align 4, !tbaa !19
  %1440 = load i32, ptr %17, align 4, !tbaa !9
  %1441 = load i32, ptr %32, align 4, !tbaa !9
  %1442 = mul i32 %1440, %1441
  %1443 = load i32, ptr %16, align 4, !tbaa !9
  %1444 = load i32, ptr %32, align 4, !tbaa !9
  %1445 = mul i32 %1443, %1444
  %1446 = mul i32 %1445, 4
  %1447 = add i32 %1442, %1446
  %1448 = load ptr, ptr %9, align 8, !tbaa !5
  %1449 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1448, i32 0, i32 5
  %1450 = load i32, ptr %1449, align 4, !tbaa !35
  %1451 = mul i32 %1447, %1450
  %1452 = load ptr, ptr %9, align 8, !tbaa !5
  %1453 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1452, i32 0, i32 128
  %1454 = load i8, ptr %1453, align 4, !tbaa !27
  %1455 = load i32, ptr %27, align 4, !tbaa !9
  %1456 = load i32, ptr %31, align 4, !tbaa !9
  %1457 = mul i32 %1456, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1430, i32 noundef %1433, i32 noundef %1436, i32 noundef %1439, i32 noundef 127, i32 noundef 0, i32 noundef %1451, i8 noundef signext %1454, i32 noundef %1455, i32 noundef %1457, i32 noundef 0, i32 noundef 1)
  br label %1573

1458:                                             ; preds = %1381
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #4
  store i32 0, ptr %62, align 4, !tbaa !9
  %1459 = load i32, ptr %21, align 4, !tbaa !9
  %1460 = icmp eq i32 %1459, 1
  br i1 %1460, label %1461, label %1478

1461:                                             ; preds = %1458
  %1462 = load i32, ptr %12, align 4, !tbaa !9
  %1463 = load i32, ptr %32, align 4, !tbaa !9
  %1464 = urem i32 %1462, %1463
  %1465 = load i32, ptr %32, align 4, !tbaa !9
  %1466 = lshr i32 %1465, 1
  %1467 = icmp ult i32 %1464, %1466
  br i1 %1467, label %1468, label %1478

1468:                                             ; preds = %1461
  %1469 = load i32, ptr %16, align 4, !tbaa !9
  %1470 = load i32, ptr %23, align 4, !tbaa !9
  %1471 = sub i32 %1470, 1
  %1472 = icmp eq i32 %1469, %1471
  br i1 %1472, label %1473, label %1478

1473:                                             ; preds = %1468
  %1474 = load i32, ptr %17, align 4, !tbaa !9
  %1475 = load i32, ptr %24, align 4, !tbaa !9
  %1476 = sub i32 %1475, 1
  %1477 = icmp eq i32 %1474, %1476
  br label %1478

1478:                                             ; preds = %1473, %1468, %1461, %1458
  %1479 = phi i1 [ false, %1468 ], [ false, %1461 ], [ false, %1458 ], [ %1477, %1473 ]
  %1480 = zext i1 %1479 to i64
  %1481 = select i1 %1479, i32 1, i32 0
  store i32 %1481, ptr %29, align 4, !tbaa !9
  %1482 = load i32, ptr %29, align 4, !tbaa !9
  %1483 = icmp eq i32 %1482, 0
  br i1 %1483, label %1484, label %1497

1484:                                             ; preds = %1478
  %1485 = load i32, ptr %21, align 4, !tbaa !9
  %1486 = icmp eq i32 %1485, 1
  br i1 %1486, label %1487, label %1497

1487:                                             ; preds = %1484
  %1488 = load i32, ptr %16, align 4, !tbaa !9
  %1489 = load i32, ptr %23, align 4, !tbaa !9
  %1490 = sub i32 %1489, 1
  %1491 = icmp eq i32 %1488, %1490
  br i1 %1491, label %1492, label %1497

1492:                                             ; preds = %1487
  %1493 = load i32, ptr %17, align 4, !tbaa !9
  %1494 = load i32, ptr %24, align 4, !tbaa !9
  %1495 = sub i32 %1494, 1
  %1496 = icmp eq i32 %1493, %1495
  br label %1497

1497:                                             ; preds = %1492, %1487, %1484, %1478
  %1498 = phi i1 [ false, %1487 ], [ false, %1484 ], [ false, %1478 ], [ %1496, %1492 ]
  %1499 = zext i1 %1498 to i64
  %1500 = select i1 %1498, i32 1, i32 0
  store i32 %1500, ptr %30, align 4, !tbaa !9
  %1501 = load ptr, ptr %6, align 8, !tbaa !5
  %1502 = load ptr, ptr %9, align 8, !tbaa !5
  %1503 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1502, i32 0, i32 0
  %1504 = load i32, ptr %1503, align 4, !tbaa !45
  %1505 = load ptr, ptr %8, align 8, !tbaa !5
  %1506 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1505, i32 0, i32 6
  %1507 = load i32, ptr %1506, align 4, !tbaa !19
  %1508 = load i32, ptr %17, align 4, !tbaa !9
  %1509 = load i32, ptr %32, align 4, !tbaa !9
  %1510 = mul i32 %1508, %1509
  %1511 = load i32, ptr %16, align 4, !tbaa !9
  %1512 = load i32, ptr %32, align 4, !tbaa !9
  %1513 = mul i32 %1511, %1512
  %1514 = mul i32 %1513, 4
  %1515 = add i32 %1510, %1514
  %1516 = load ptr, ptr %9, align 8, !tbaa !5
  %1517 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1516, i32 0, i32 5
  %1518 = load i32, ptr %1517, align 4, !tbaa !35
  %1519 = mul i32 %1515, %1518
  %1520 = load ptr, ptr %9, align 8, !tbaa !5
  %1521 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1520, i32 0, i32 128
  %1522 = load i8, ptr %1521, align 4, !tbaa !27
  %1523 = load i32, ptr %27, align 4, !tbaa !9
  %1524 = load i32, ptr %29, align 4, !tbaa !9
  %1525 = mul i32 %1524, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1501, i32 noundef %1504, i32 noundef 537138704, i32 noundef %1507, i32 noundef 127, i32 noundef 0, i32 noundef %1519, i8 noundef signext %1522, i32 noundef %1523, i32 noundef %1525, i32 noundef 0, i32 noundef 1)
  %1526 = load i32, ptr %16, align 4, !tbaa !9
  %1527 = load i32, ptr %32, align 4, !tbaa !9
  %1528 = mul i32 %1526, %1527
  %1529 = mul i32 %1528, 4
  %1530 = load i32, ptr %17, align 4, !tbaa !9
  %1531 = load i32, ptr %32, align 4, !tbaa !9
  %1532 = mul i32 %1530, %1531
  %1533 = add i32 %1529, %1532
  %1534 = load i32, ptr %32, align 4, !tbaa !9
  %1535 = lshr i32 %1534, 1
  %1536 = add i32 %1533, %1535
  store i32 %1536, ptr %62, align 4, !tbaa !9
  %1537 = load i32, ptr %29, align 4, !tbaa !9
  %1538 = icmp eq i32 %1537, 0
  br i1 %1538, label %1539, label %1572

1539:                                             ; preds = %1497
  %1540 = load i32, ptr %62, align 4, !tbaa !9
  %1541 = load i32, ptr %12, align 4, !tbaa !9
  %1542 = icmp ult i32 %1540, %1541
  br i1 %1542, label %1543, label %1572

1543:                                             ; preds = %1539
  %1544 = load ptr, ptr %6, align 8, !tbaa !5
  %1545 = load ptr, ptr %9, align 8, !tbaa !5
  %1546 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1545, i32 0, i32 0
  %1547 = load i32, ptr %1546, align 4, !tbaa !45
  %1548 = load ptr, ptr %8, align 8, !tbaa !5
  %1549 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1548, i32 0, i32 6
  %1550 = load i32, ptr %1549, align 4, !tbaa !19
  %1551 = load i32, ptr %17, align 4, !tbaa !9
  %1552 = load i32, ptr %32, align 4, !tbaa !9
  %1553 = mul i32 %1551, %1552
  %1554 = load i32, ptr %16, align 4, !tbaa !9
  %1555 = load i32, ptr %32, align 4, !tbaa !9
  %1556 = mul i32 %1554, %1555
  %1557 = mul i32 %1556, 4
  %1558 = add i32 %1553, %1557
  %1559 = load i32, ptr %32, align 4, !tbaa !9
  %1560 = lshr i32 %1559, 1
  %1561 = add i32 %1558, %1560
  %1562 = load ptr, ptr %9, align 8, !tbaa !5
  %1563 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1562, i32 0, i32 5
  %1564 = load i32, ptr %1563, align 4, !tbaa !35
  %1565 = mul i32 %1561, %1564
  %1566 = load ptr, ptr %9, align 8, !tbaa !5
  %1567 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1566, i32 0, i32 128
  %1568 = load i8, ptr %1567, align 4, !tbaa !27
  %1569 = load i32, ptr %28, align 4, !tbaa !9
  %1570 = load i32, ptr %30, align 4, !tbaa !9
  %1571 = mul i32 %1570, 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %1544, i32 noundef %1547, i32 noundef 537138704, i32 noundef %1550, i32 noundef 127, i32 noundef 0, i32 noundef %1565, i8 noundef signext %1568, i32 noundef %1569, i32 noundef %1571, i32 noundef 0, i32 noundef 1)
  br label %1572

1572:                                             ; preds = %1543, %1539, %1497
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #4
  br label %1573

1573:                                             ; preds = %1572, %1385
  br label %1574

1574:                                             ; preds = %1573, %1352
  br label %1575

1575:                                             ; preds = %1574, %1282
  br label %1576

1576:                                             ; preds = %1575, %1211
  br label %1577

1577:                                             ; preds = %1576
  %1578 = load i32, ptr %17, align 4, !tbaa !9
  %1579 = add i32 %1578, 1
  store i32 %1579, ptr %17, align 4, !tbaa !9
  br label %1156, !llvm.loop !49

1580:                                             ; preds = %1156
  br label %1581

1581:                                             ; preds = %1580
  %1582 = load i32, ptr %16, align 4, !tbaa !9
  %1583 = add i32 %1582, 1
  store i32 %1583, ptr %16, align 4, !tbaa !9
  br label %773, !llvm.loop !50

1584:                                             ; preds = %773
  %1585 = load ptr, ptr %10, align 8, !tbaa !5
  %1586 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1585, i32 noundef 3)
  %1587 = icmp eq i32 4, %1586
  br i1 %1587, label %1588, label %1595

1588:                                             ; preds = %1584
  %1589 = load ptr, ptr %6, align 8, !tbaa !5
  %1590 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1589, i32 0, i32 6
  %1591 = load i32, ptr %1590, align 4, !tbaa !24
  %1592 = icmp uge i32 %1591, 1101
  br i1 %1592, label %1593, label %1595

1593:                                             ; preds = %1588
  %1594 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef %1594, i32 noundef 0)
  br label %1628

1595:                                             ; preds = %1588, %1584
  %1596 = load ptr, ptr %10, align 8, !tbaa !5
  %1597 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1596, i32 noundef 3)
  %1598 = icmp eq i32 2, %1597
  br i1 %1598, label %1599, label %1616

1599:                                             ; preds = %1595
  %1600 = load ptr, ptr %6, align 8, !tbaa !5
  %1601 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1600, i32 0, i32 6
  %1602 = load i32, ptr %1601, align 4, !tbaa !24
  %1603 = icmp ult i32 %1602, 1103
  br i1 %1603, label %1604, label %1616

1604:                                             ; preds = %1599
  %1605 = load ptr, ptr %6, align 8, !tbaa !5
  %1606 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1605, i32 0, i32 6
  %1607 = load i32, ptr %1606, align 4, !tbaa !24
  %1608 = icmp ne i32 %1607, 1053
  br i1 %1608, label %1609, label %1616

1609:                                             ; preds = %1604
  %1610 = load ptr, ptr %6, align 8, !tbaa !5
  %1611 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %1610, i32 0, i32 6
  %1612 = load i32, ptr %1611, align 4, !tbaa !24
  %1613 = icmp ne i32 %1612, 1008
  br i1 %1613, label %1614, label %1616

1614:                                             ; preds = %1609
  %1615 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %1615, i32 noundef 0)
  br label %1627

1616:                                             ; preds = %1609, %1604, %1599, %1595
  %1617 = load ptr, ptr %10, align 8, !tbaa !5
  %1618 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1617, i32 noundef 0)
  %1619 = icmp eq i32 5, %1618
  br i1 %1619, label %1624, label %1620

1620:                                             ; preds = %1616
  %1621 = load ptr, ptr %10, align 8, !tbaa !5
  %1622 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %1621, i32 noundef 3)
  %1623 = icmp eq i32 5, %1622
  br i1 %1623, label %1624, label %1626

1624:                                             ; preds = %1620, %1616
  %1625 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %1625, i32 noundef 0)
  br label %1626

1626:                                             ; preds = %1624, %1620
  br label %1627

1627:                                             ; preds = %1626, %1614
  br label %1628

1628:                                             ; preds = %1627, %1593
  store i32 0, ptr %45, align 4
  br label %1629

1629:                                             ; preds = %1628, %414, %94
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  %1630 = load i32, ptr %45, align 4
  switch i32 %1630, label %1632 [
    i32 0, label %1631
    i32 1, label %1631
  ]

1631:                                             ; preds = %1629, %1629
  ret void

1632:                                             ; preds = %1629
  unreachable
}

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

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

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

declare void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #1

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

declare void @libxsmm_x86_instruction_unified_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef, ptr noundef, ptr noundef, i8 noundef signext, i32 noundef) #1

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

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

declare void @libxsmm_x86_instruction_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef) #1

declare void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"libxsmm_meltw_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !13, i64 27, !13, i64 29, !7, i64 31}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !10, i64 4}
!15 = !{!12, !10, i64 8}
!16 = !{!12, !10, i64 12}
!17 = !{!18, !10, i64 4}
!18 = !{!"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}
!19 = !{!18, !10, i64 24}
!20 = !{!18, !10, i64 100}
!21 = !{!22, !10, i64 56}
!22 = !{!"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}
!23 = !{!18, !10, i64 0}
!24 = !{!25, !10, i64 28}
!25 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!26 = !{!7, !7, i64 0}
!27 = !{!22, !7, i64 512}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!22, !10, i64 24}
!31 = !{!22, !10, i64 8}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !29}
!34 = !{!22, !10, i64 40}
!35 = !{!22, !10, i64 20}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !29}
!39 = !{!13, !13, i64 0}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !29}
!44 = distinct !{!44, !29}
!45 = !{!22, !10, i64 0}
!46 = distinct !{!46, !29}
!47 = distinct !{!47, !29}
!48 = !{!22, !10, i64 36}
!49 = distinct !{!49, !29}
!50 = distinct !{!50, !29}


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

@__func__.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel = external hidden unnamed_addr constant [54 x i8], align 1
@.str = external hidden unnamed_addr constant [94 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array = external hidden unnamed_addr constant [32 x i8], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array = external hidden unnamed_addr constant [32 x i8], align 16
@.str.1 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.2 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.4 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.5 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.6 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7 = external hidden unnamed_addr constant [32 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.8 = external hidden unnamed_addr constant [16 x i16], align 16
@__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.9 = external hidden unnamed_addr constant [16 x i16], align 16

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_reduce_cols_ncnc_avx512_microkernel(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #2 {
  %6 = alloca [32 x i8], align 16
  %7 = alloca [32 x i16], align 16
  %8 = alloca [16 x i16], align 16
  %9 = alloca [32 x i16], align 16
  %10 = alloca [16 x i16], align 16
  %11 = load i32, ptr %4, align 1, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %4, i64 4
  %13 = load i32, ptr %12, align 1, !tbaa !11
  %14 = getelementptr inbounds i8, ptr %4, i64 8
  %15 = load i32, ptr %14, align 1, !tbaa !12
  %16 = getelementptr inbounds i8, ptr %4, i64 12
  %17 = load i32, ptr %16, align 1, !tbaa !13
  %18 = udiv i32 %17, %13
  %19 = urem i32 %17, %13
  %.not = icmp eq i32 %19, 0
  br i1 %.not, label %20, label %22

20:                                               ; preds = %5
  %21 = urem i32 %15, %11
  %.not649 = icmp eq i32 %21, 0
  br i1 %.not649, label %27, label %22

22:                                               ; preds = %20, %5
  %23 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !14
  %24 = icmp ugt i32 %23, 1
  %25 = load i32, ptr @libxsmm_verbosity, align 4
  %26 = select i1 %24, i32 %25, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel, ptr noundef nonnull @.str, i32 noundef 135, i32 noundef %26) #5
  br label %.loopexit

27:                                               ; preds = %20
  %28 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 8, ptr %28, align 4, !tbaa !15
  %29 = getelementptr inbounds i8, ptr %2, i64 24
  store i32 9, ptr %29, align 4, !tbaa !17
  %30 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 10, ptr %30, align 4, !tbaa !18
  %31 = getelementptr inbounds i8, ptr %3, i64 56
  %32 = load i32, ptr %31, align 4, !tbaa !19
  %33 = load i32, ptr %2, align 4, !tbaa !21
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %32, i32 noundef %33, i32 noundef 127, i32 noundef 0, i32 noundef 32, i32 noundef 8, i32 noundef 0) #5
  %34 = load i32, ptr %31, align 4, !tbaa !19
  %35 = load i32, ptr %2, align 4, !tbaa !21
  %36 = load i32, ptr %29, align 4, !tbaa !17
  tail call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %34, i32 noundef %35, i32 noundef 127, i32 noundef 0, i32 noundef 80, i32 noundef %36, i32 noundef 0) #5
  %37 = getelementptr inbounds i8, ptr %0, i64 28
  %38 = load i32, ptr %37, align 4, !tbaa !22
  %39 = icmp ult i32 %38, 1051
  br i1 %39, label %40, label %132

40:                                               ; preds = %27
  %41 = and i32 %11, 7
  %.not654 = icmp eq i32 %41, 0
  %42 = select i1 %.not654, i32 8, i32 4
  %43 = add i32 %11, 7
  %44 = lshr i32 %43, 3
  %45 = add nsw i32 %44, -1
  %46 = add nsw i32 %45, %42
  %47 = select i1 %.not654, i32 3, i32 2
  %48 = lshr i32 %46, %47
  br i1 %.not654, label %51, label %49

49:                                               ; preds = %40
  %50 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  tail call void @libxsmm_generator_initialize_avx_mask(ptr noundef nonnull %0, i32 noundef 15, i32 noundef %41, i32 noundef %50) #5
  br label %51

51:                                               ; preds = %49, %40
  %.not756 = icmp eq i32 %48, 0
  br i1 %.not756, label %.loopexit, label %.lr.ph742

.lr.ph742:                                        ; preds = %51
  %52 = add nsw i32 %48, -1
  %53 = getelementptr inbounds i8, ptr %3, i64 512
  %54 = icmp ugt i32 %18, 1
  %55 = getelementptr inbounds i8, ptr %3, i64 24
  %56 = getelementptr inbounds i8, ptr %3, i64 8
  %57 = getelementptr inbounds i8, ptr %3, i64 40
  %58 = zext i32 %15 to i64
  %59 = zext i32 %13 to i64
  %60 = mul nuw nsw i64 %58, %59
  %.not757 = icmp eq i32 %48, 1
  %61 = zext i32 %17 to i64
  %62 = mul nuw nsw i64 %61, %58
  %63 = getelementptr inbounds i8, ptr %3, i64 20
  %umax776 = tail call i32 @llvm.umax.i32(i32 %13, i32 1)
  br label %64

64:                                               ; preds = %.lr.ph742, %._crit_edge739
  %.0626740 = phi i32 [ 0, %.lr.ph742 ], [ %131, %._crit_edge739 ]
  %65 = icmp ne i32 %.0626740, %52
  %66 = shl nuw i32 %.0626740, %47
  %67 = sub nsw i32 %44, %66
  %68 = select i1 %65, i32 %42, i32 %67
  %.not758 = icmp eq i32 %68, 0
  br i1 %.not758, label %._crit_edge725, label %.lr.ph724

.lr.ph724:                                        ; preds = %64, %.lr.ph724
  %.0627722 = phi i32 [ %71, %.lr.ph724 ], [ 0, %64 ]
  %69 = add i32 %.0627722, %42
  %70 = load i8, ptr %53, align 4, !tbaa !25
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574231, i8 noundef signext %70, i32 noundef %69, i32 noundef %69, i32 noundef %69) #5
  %71 = add nuw i32 %.0627722, 1
  %exitcond774.not = icmp eq i32 %71, %68
  br i1 %exitcond774.not, label %._crit_edge725, label %.lr.ph724, !llvm.loop !26

._crit_edge725:                                   ; preds = %.lr.ph724, %64
  br i1 %54, label %72, label %74

72:                                               ; preds = %._crit_edge725
  %73 = load i32, ptr %30, align 4, !tbaa !18
  tail call void @libxsmm_generator_mateltwise_header_n_loop(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %73) #5
  br label %74

74:                                               ; preds = %72, %._crit_edge725
  %75 = shl nuw nsw i32 %.0626740, 3
  %76 = shl i32 %75, %47
  %77 = add nsw i32 %68, -1
  br i1 %.not758, label %.split735.us, label %.split730.us

.split730.us:                                     ; preds = %74
  %brmerge = or i1 %.not654, %65
  br i1 %brmerge, label %.preheader.us.us, label %.preheader.us

.preheader.us.us:                                 ; preds = %.split730.us, %._crit_edge728.split.us.us.us
  %.0629729.us.us = phi i32 [ %90, %._crit_edge728.split.us.us.us ], [ 0, %.split730.us ]
  %78 = mul i32 %.0629729.us.us, %11
  %79 = add i32 %78, %76
  br label %80

80:                                               ; preds = %80, %.preheader.us.us
  %.1628726.us.us.us = phi i32 [ 0, %.preheader.us.us ], [ %89, %80 ]
  %81 = add i32 %.1628726.us.us.us, %42
  %82 = load i32, ptr %55, align 4, !tbaa !28
  %83 = load i32, ptr %28, align 4, !tbaa !15
  %84 = shl i32 %.1628726.us.us.us, 3
  %85 = add i32 %79, %84
  %86 = load i32, ptr %56, align 4, !tbaa !29
  %87 = mul i32 %86, %85
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %82, i32 noundef %83, i32 noundef 127, i32 noundef 0, i32 noundef %87, i8 noundef signext 121, i32 noundef %.1628726.us.us.us, i32 noundef 0, i32 noundef 0, i32 noundef 0) #5
  %88 = load i8, ptr %53, align 4, !tbaa !25
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %88, i32 noundef %.1628726.us.us.us, i32 noundef %81, i32 noundef %81) #5
  %89 = add nuw i32 %.1628726.us.us.us, 1
  %exitcond778.not = icmp eq i32 %89, %68
  br i1 %exitcond778.not, label %._crit_edge728.split.us.us.us, label %80, !llvm.loop !30

._crit_edge728.split.us.us.us:                    ; preds = %80
  %90 = add nuw i32 %.0629729.us.us, 1
  %exitcond780.not = icmp eq i32 %90, %umax776
  br i1 %exitcond780.not, label %.split735.us, label %.preheader.us.us, !llvm.loop !31

.preheader.us:                                    ; preds = %.split730.us, %._crit_edge728.split.us732
  %.0629729.us = phi i32 [ %105, %._crit_edge728.split.us732 ], [ 0, %.split730.us ]
  %91 = mul i32 %.0629729.us, %11
  %92 = add i32 %91, %76
  br label %93

93:                                               ; preds = %.preheader.us, %93
  %.1628726.us731 = phi i32 [ 0, %.preheader.us ], [ %104, %93 ]
  %94 = add i32 %.1628726.us731, %42
  %95 = load i32, ptr %55, align 4, !tbaa !28
  %96 = load i32, ptr %28, align 4, !tbaa !15
  %97 = shl i32 %.1628726.us731, 3
  %98 = add i32 %92, %97
  %99 = load i32, ptr %56, align 4, !tbaa !29
  %100 = mul i32 %99, %98
  %101 = icmp eq i32 %.1628726.us731, %77
  %102 = zext i1 %101 to i32
  %spec.select.us = select i1 %101, i32 15, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef %95, i32 noundef %96, i32 noundef 127, i32 noundef 0, i32 noundef %100, i8 noundef signext 121, i32 noundef %.1628726.us731, i32 noundef %102, i32 noundef %spec.select.us, i32 noundef 0) #5
  %103 = load i8, ptr %53, align 4, !tbaa !25
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %103, i32 noundef %.1628726.us731, i32 noundef %94, i32 noundef %94) #5
  %104 = add nuw i32 %.1628726.us731, 1
  %exitcond775.not = icmp eq i32 %104, %68
  br i1 %exitcond775.not, label %._crit_edge728.split.us732, label %93, !llvm.loop !30

._crit_edge728.split.us732:                       ; preds = %93
  %105 = add nuw i32 %.0629729.us, 1
  %exitcond777.not = icmp eq i32 %105, %umax776
  br i1 %exitcond777.not, label %.split735.us, label %.preheader.us, !llvm.loop !31

.split735.us:                                     ; preds = %._crit_edge728.split.us732, %._crit_edge728.split.us.us.us, %74
  br i1 %54, label %106, label %118

106:                                              ; preds = %.split735.us
  %107 = load i32, ptr %57, align 4, !tbaa !32
  %108 = load i32, ptr %28, align 4, !tbaa !15
  %109 = load i32, ptr %56, align 4, !tbaa !29
  %110 = zext i32 %109 to i64
  %111 = mul nuw nsw i64 %60, %110
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %107, i32 noundef %108, i64 noundef %111) #5
  %112 = load i32, ptr %30, align 4, !tbaa !18
  tail call void @libxsmm_generator_mateltwise_footer_n_loop(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %112, i32 noundef %18) #5
  br i1 %.not757, label %118, label %113

113:                                              ; preds = %106
  %114 = load i32, ptr %28, align 4, !tbaa !15
  %115 = load i32, ptr %56, align 4, !tbaa !29
  %116 = zext i32 %115 to i64
  %117 = mul nuw nsw i64 %62, %116
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef 30008, i32 noundef %114, i64 noundef %117) #5
  br label %118

118:                                              ; preds = %106, %113, %.split735.us
  br i1 %.not758, label %._crit_edge739, label %.lr.ph738

.lr.ph738:                                        ; preds = %118
  %brmerge659 = or i1 %.not654, %65
  %not.brmerge659 = xor i1 %brmerge659, true
  br label %119

119:                                              ; preds = %.lr.ph738, %119
  %.2736 = phi i32 [ 0, %.lr.ph738 ], [ %130, %119 ]
  %120 = add i32 %.2736, %42
  %121 = load i32, ptr %29, align 4, !tbaa !17
  %122 = shl i32 %.2736, 3
  %123 = add i32 %122, %76
  %124 = load i32, ptr %63, align 4, !tbaa !33
  %125 = mul i32 %124, %123
  %126 = load i8, ptr %53, align 4, !tbaa !25
  %127 = icmp eq i32 %.2736, %77
  %spec.select = and i1 %127, %not.brmerge659
  %128 = zext i1 %spec.select to i32
  %spec.select4 = select i1 %127, i32 15, i32 0
  %129 = select i1 %brmerge659, i32 0, i32 %spec.select4
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %0, i32 noundef 537138704, i32 noundef %121, i32 noundef 127, i32 noundef 0, i32 noundef %125, i8 noundef signext %126, i32 noundef %120, i32 noundef %128, i32 noundef %129, i32 noundef 1) #5
  %130 = add nuw i32 %.2736, 1
  %exitcond781.not = icmp eq i32 %130, %68
  br i1 %exitcond781.not, label %._crit_edge739, label %119, !llvm.loop !34

._crit_edge739:                                   ; preds = %119, %118
  %131 = add nuw nsw i32 %.0626740, 1
  %exitcond782.not = icmp eq i32 %131, %48
  br i1 %exitcond782.not, label %.loopexit, label %64, !llvm.loop !35

132:                                              ; preds = %27
  %133 = icmp ult i32 %38, 1101
  %134 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  br i1 %133, label %135, label %140

135:                                              ; preds = %132
  %136 = icmp eq i32 %134, 2
  br i1 %136, label %151, label %137

137:                                              ; preds = %135
  %138 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %139 = icmp eq i32 %138, 3
  %spec.select683 = select i1 %139, i8 120, i8 121
  br label %151

140:                                              ; preds = %132
  %141 = icmp eq i32 %134, 4
  br i1 %141, label %151, label %142

142:                                              ; preds = %140
  %143 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %144 = icmp eq i32 %143, 5
  br i1 %144, label %151, label %145

145:                                              ; preds = %142
  %146 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %147 = icmp eq i32 %146, 2
  br i1 %147, label %151, label %148

148:                                              ; preds = %145
  %149 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %150 = icmp eq i32 %149, 3
  %spec.select684 = select i1 %150, i8 121, i8 122
  br label %151

151:                                              ; preds = %148, %137, %142, %140, %145, %135
  %.0633 = phi i32 [ 16, %135 ], [ 32, %145 ], [ 32, %140 ], [ 32, %142 ], [ 16, %137 ], [ 32, %148 ]
  %.1632 = phi i8 [ 120, %135 ], [ 121, %145 ], [ 120, %140 ], [ 120, %142 ], [ %spec.select683, %137 ], [ %spec.select684, %148 ]
  %152 = add nsw i32 %.0633, -1
  %153 = and i32 %152, %11
  %154 = icmp eq i32 %153, 0
  %155 = add i32 %11, -1
  %156 = add i32 %155, %.0633
  %157 = udiv i32 %156, %.0633
  %158 = add nuw nsw i32 %157, 3
  %159 = lshr i32 %158, 2
  %160 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %161 = icmp eq i32 %160, 5
  br i1 %161, label %165, label %162

162:                                              ; preds = %151
  %163 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %164 = icmp eq i32 %163, 5
  br i1 %164, label %165, label %166

165:                                              ; preds = %162, %151
  tail call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  br label %166

166:                                              ; preds = %165, %162
  br i1 %154, label %194, label %167

167:                                              ; preds = %166
  %168 = lshr exact i32 %.0633, 1
  %169 = icmp ugt i32 %153, %168
  %.0633. = select i1 %169, i32 %.0633, i32 %168
  %170 = sub nsw i32 %.0633., %153
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 1, i32 noundef %170, i32 noundef 1) #5
  %171 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %172 = icmp eq i32 %171, 4
  br i1 %172, label %173, label %175

173:                                              ; preds = %167
  %174 = sub nsw i32 %.0633, %153
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 2, i32 noundef %174, i32 noundef 4) #5
  br label %194

175:                                              ; preds = %167
  %176 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %177 = icmp eq i32 %176, 5
  br i1 %177, label %178, label %180

178:                                              ; preds = %175
  %179 = sub nsw i32 %.0633, %153
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 2, i32 noundef %179, i32 noundef 5) #5
  br label %194

180:                                              ; preds = %175
  %181 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %182 = icmp eq i32 %181, 2
  br i1 %182, label %183, label %185

183:                                              ; preds = %180
  %184 = sub nsw i32 %.0633, %153
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 2, i32 noundef %184, i32 noundef 2) #5
  br label %194

185:                                              ; preds = %180
  %186 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %187 = icmp eq i32 %186, 3
  br i1 %187, label %188, label %190

188:                                              ; preds = %185
  %189 = sub nsw i32 %.0633, %153
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 2, i32 noundef %189, i32 noundef 3) #5
  br label %194

190:                                              ; preds = %185
  %191 = add nsw i32 %168, -1
  %192 = and i32 %191, %11
  %193 = sub nsw i32 %168, %192
  tail call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 2, i32 noundef %193, i32 noundef 1) #5
  br label %194

194:                                              ; preds = %173, %183, %190, %188, %178, %166
  %195 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %196 = icmp eq i32 %195, 4
  br i1 %196, label %200, label %197

197:                                              ; preds = %194
  %198 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %199 = icmp eq i32 %198, 5
  br i1 %199, label %200, label %217

200:                                              ; preds = %197, %194
  %201 = load i32, ptr %37, align 4, !tbaa !22
  %202 = icmp ugt i32 %201, 1100
  br i1 %202, label %203, label %287

203:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %6, ptr noundef nonnull align 16 dereferenceable(32) @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array, i64 32, i1 false)
  %204 = load <16 x i8>, ptr %6, align 16, !tbaa !36
  %205 = load <16 x i8>, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array, align 16, !tbaa !36
  %206 = or <16 x i8> %205, %204
  store <16 x i8> %206, ptr %6, align 16, !tbaa !36
  %207 = getelementptr inbounds i8, ptr %6, i64 16
  %208 = load <16 x i8>, ptr %207, align 16, !tbaa !36
  %209 = load <16 x i8>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array, i64 16), align 16, !tbaa !36
  %210 = or <16 x i8> %209, %208
  store <16 x i8> %210, ptr %207, align 16, !tbaa !36
  %211 = getelementptr inbounds i8, ptr %3, i64 512
  %212 = load i8, ptr %211, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %6, ptr noundef nonnull @.str.1, i8 noundef signext %212, i32 noundef 29) #5
  %213 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %214 = icmp eq i32 %213, 4
  br i1 %214, label %215, label %216

215:                                              ; preds = %203
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  br label %216

216:                                              ; preds = %215, %203
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  br label %287

217:                                              ; preds = %197
  %218 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %219 = icmp eq i32 %218, 2
  br i1 %219, label %220, label %253

220:                                              ; preds = %217
  %221 = load i32, ptr %37, align 4, !tbaa !22
  %.fr = freeze i32 %221
  %222 = icmp ugt i32 %.fr, 1102
  br i1 %222, label %253, label %switch.early.test

switch.early.test:                                ; preds = %220
  switch i32 %.fr, label %223 [
    i32 1053, label %253
    i32 1008, label %253
  ]

223:                                              ; preds = %switch.early.test
  %224 = icmp ugt i32 %.fr, 1100
  br i1 %224, label %225, label %243

225:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %7, ptr noundef nonnull align 16 dereferenceable(64) @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.2, i64 64, i1 false)
  %226 = load <8 x i16>, ptr %7, align 16, !tbaa !37
  %227 = load <8 x i16>, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3, align 16, !tbaa !37
  %228 = or <8 x i16> %227, %226
  store <8 x i16> %228, ptr %7, align 16, !tbaa !37
  %229 = getelementptr inbounds i8, ptr %7, i64 16
  %230 = load <8 x i16>, ptr %229, align 16, !tbaa !37
  %231 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3, i64 16), align 16, !tbaa !37
  %232 = or <8 x i16> %231, %230
  store <8 x i16> %232, ptr %229, align 16, !tbaa !37
  %233 = getelementptr inbounds i8, ptr %7, i64 32
  %234 = load <8 x i16>, ptr %233, align 16, !tbaa !37
  %235 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3, i64 32), align 16, !tbaa !37
  %236 = or <8 x i16> %235, %234
  store <8 x i16> %236, ptr %233, align 16, !tbaa !37
  %237 = getelementptr inbounds i8, ptr %7, i64 48
  %238 = load <8 x i16>, ptr %237, align 16, !tbaa !37
  %239 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.3, i64 48), align 16, !tbaa !37
  %240 = or <8 x i16> %239, %238
  store <8 x i16> %240, ptr %237, align 16, !tbaa !37
  %241 = getelementptr inbounds i8, ptr %3, i64 512
  %242 = load i8, ptr %241, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %7, ptr noundef nonnull @.str.1, i8 noundef signext %242, i32 noundef 29) #5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #5
  br label %287

243:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %8, ptr noundef nonnull align 16 dereferenceable(32) @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.4, i64 32, i1 false)
  %244 = load <8 x i16>, ptr %8, align 16, !tbaa !37
  %245 = load <8 x i16>, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.5, align 16, !tbaa !37
  %246 = or <8 x i16> %245, %244
  store <8 x i16> %246, ptr %8, align 16, !tbaa !37
  %247 = getelementptr inbounds i8, ptr %8, i64 16
  %248 = load <8 x i16>, ptr %247, align 16, !tbaa !37
  %249 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.5, i64 16), align 16, !tbaa !37
  %250 = or <8 x i16> %249, %248
  store <8 x i16> %250, ptr %247, align 16, !tbaa !37
  %251 = getelementptr inbounds i8, ptr %3, i64 512
  %252 = load i8, ptr %251, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %8, ptr noundef nonnull @.str.1, i8 noundef signext %252, i32 noundef 29) #5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  br label %287

253:                                              ; preds = %switch.early.test, %switch.early.test, %220, %217
  %254 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %255 = icmp eq i32 %254, 3
  br i1 %255, label %256, label %287

256:                                              ; preds = %253
  %257 = load i32, ptr %37, align 4, !tbaa !22
  %258 = icmp ugt i32 %257, 1100
  br i1 %258, label %259, label %277

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %9, ptr noundef nonnull align 16 dereferenceable(64) @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.6, i64 64, i1 false)
  %260 = load <8 x i16>, ptr %9, align 16, !tbaa !37
  %261 = load <8 x i16>, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7, align 16, !tbaa !37
  %262 = or <8 x i16> %261, %260
  store <8 x i16> %262, ptr %9, align 16, !tbaa !37
  %263 = getelementptr inbounds i8, ptr %9, i64 16
  %264 = load <8 x i16>, ptr %263, align 16, !tbaa !37
  %265 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7, i64 16), align 16, !tbaa !37
  %266 = or <8 x i16> %265, %264
  store <8 x i16> %266, ptr %263, align 16, !tbaa !37
  %267 = getelementptr inbounds i8, ptr %9, i64 32
  %268 = load <8 x i16>, ptr %267, align 16, !tbaa !37
  %269 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7, i64 32), align 16, !tbaa !37
  %270 = or <8 x i16> %269, %268
  store <8 x i16> %270, ptr %267, align 16, !tbaa !37
  %271 = getelementptr inbounds i8, ptr %9, i64 48
  %272 = load <8 x i16>, ptr %271, align 16, !tbaa !37
  %273 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.7, i64 48), align 16, !tbaa !37
  %274 = or <8 x i16> %273, %272
  store <8 x i16> %274, ptr %271, align 16, !tbaa !37
  %275 = getelementptr inbounds i8, ptr %3, i64 512
  %276 = load i8, ptr %275, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %9, ptr noundef nonnull @.str.1, i8 noundef signext %276, i32 noundef 29) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #5
  br label %287

277:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %10, ptr noundef nonnull align 16 dereferenceable(32) @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.perm_array.8, i64 32, i1 false)
  %278 = load <8 x i16>, ptr %10, align 16, !tbaa !37
  %279 = load <8 x i16>, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.9, align 16, !tbaa !37
  %280 = or <8 x i16> %279, %278
  store <8 x i16> %280, ptr %10, align 16, !tbaa !37
  %281 = getelementptr inbounds i8, ptr %10, i64 16
  %282 = load <8 x i16>, ptr %281, align 16, !tbaa !37
  %283 = load <8 x i16>, ptr getelementptr inbounds (i8, ptr @__const.libxsmm_generator_reduce_cols_ncnc_avx512_microkernel.selector_array.9, i64 16), align 16, !tbaa !37
  %284 = or <8 x i16> %283, %282
  store <8 x i16> %284, ptr %281, align 16, !tbaa !37
  %285 = getelementptr inbounds i8, ptr %3, i64 512
  %286 = load i8, ptr %285, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef nonnull %0, ptr noundef nonnull %10, ptr noundef nonnull @.str.1, i8 noundef signext %286, i32 noundef 29) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  br label %287

287:                                              ; preds = %243, %225, %259, %277, %253, %200, %216
  %factor.op.mul717 = shl nuw nsw i32 %.0633, 2
  %.not749 = icmp ugt i32 %.0633, %156
  br i1 %.not749, label %._crit_edge721, label %.lr.ph720

.lr.ph720:                                        ; preds = %287
  %288 = add nsw i32 %159, -1
  %289 = getelementptr inbounds i8, ptr %3, i64 512
  %290 = icmp ugt i32 %18, 1
  %291 = lshr exact i32 %.0633, 1
  %292 = icmp uge i32 %153, %291
  %or.cond665 = select i1 %154, i1 true, i1 %292
  %293 = getelementptr inbounds i8, ptr %3, i64 24
  %294 = getelementptr inbounds i8, ptr %3, i64 8
  %295 = getelementptr inbounds i8, ptr %3, i64 40
  %296 = zext i32 %15 to i64
  %297 = zext i32 %13 to i64
  %298 = mul nuw nsw i64 %296, %297
  %299 = icmp ugt i32 %157, 4
  %300 = zext i32 %17 to i64
  %301 = mul nuw nsw i64 %300, %296
  %302 = getelementptr inbounds i8, ptr %3, i64 20
  %303 = getelementptr inbounds i8, ptr %3, i64 36
  %umax = call i32 @llvm.umax.i32(i32 %13, i32 1)
  %umax772 = call i32 @llvm.umax.i32(i32 %159, i32 1)
  br label %304

304:                                              ; preds = %.lr.ph720, %._crit_edge716
  %.1718 = phi i32 [ 0, %.lr.ph720 ], [ %506, %._crit_edge716 ]
  %305 = icmp ne i32 %.1718, %288
  %306 = shl i32 %.1718, 2
  %307 = sub nsw i32 %157, %306
  %308 = select i1 %305, i32 4, i32 %307
  %.not750 = icmp eq i32 %308, 0
  br i1 %.not750, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %304, %.lr.ph
  %.3706 = phi i32 [ %314, %.lr.ph ], [ 0, %304 ]
  %309 = shl i32 %.3706, 1
  %310 = add i32 %309, 8
  %311 = add i32 %309, 9
  %312 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574231, i8 noundef signext %312, i32 noundef %310, i32 noundef %310, i32 noundef %310) #5
  %313 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574231, i8 noundef signext %313, i32 noundef %311, i32 noundef %311, i32 noundef %311) #5
  %314 = add nuw i32 %.3706, 1
  %exitcond.not = icmp eq i32 %314, %308
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !38

._crit_edge:                                      ; preds = %.lr.ph, %304
  br i1 %290, label %315, label %317

315:                                              ; preds = %._crit_edge
  %316 = load i32, ptr %30, align 4, !tbaa !18
  call void @libxsmm_generator_mateltwise_header_n_loop(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %316) #5
  br label %317

317:                                              ; preds = %315, %._crit_edge
  %factor.op.mul.reass = mul i32 %factor.op.mul717, %.1718
  %brmerge667 = or i1 %or.cond665, %305
  %318 = add nsw i32 %308, -1
  %319 = or disjoint i32 %factor.op.mul.reass, %291
  br i1 %.not750, label %.split712.us, label %.preheader700.us.preheader

.preheader700.us.preheader:                       ; preds = %317
  %not.brmerge667 = xor i1 %brmerge667, true
  br label %.preheader700.us

.preheader700.us:                                 ; preds = %.preheader700.us.preheader, %._crit_edge709.us
  %.1630710.us = phi i32 [ %392, %._crit_edge709.us ], [ 0, %.preheader700.us.preheader ]
  %320 = mul i32 %.1630710.us, %11
  br label %321

321:                                              ; preds = %.preheader700.us, %390
  %.4707.us = phi i32 [ 0, %.preheader700.us ], [ %391, %390 ]
  %322 = shl i32 %.4707.us, 1
  %323 = add i32 %322, 8
  %324 = add i32 %322, 9
  %325 = or disjoint i32 %322, 1
  %326 = icmp eq i32 %.4707.us, %318
  %spec.select743 = select i1 %not.brmerge667, i1 %326, i1 false
  %327 = zext i1 %spec.select743 to i32
  %or.cond.not691.us = select i1 %spec.select743, i1 true, i1 %154
  %brmerge669.us = or i1 %305, %or.cond.not691.us
  %not.brmerge669.us = xor i1 %brmerge669.us, true
  %spec.select747 = select i1 %not.brmerge669.us, i1 %326, i1 false
  %328 = zext i1 %spec.select747 to i32
  %329 = load i32, ptr %3, align 4, !tbaa !39
  %330 = load i32, ptr %293, align 4, !tbaa !28
  %331 = load i32, ptr %28, align 4, !tbaa !15
  %332 = mul i32 %.4707.us, %.0633
  %333 = add i32 %332, %320
  %334 = add i32 %333, %factor.op.mul.reass
  %335 = load i32, ptr %294, align 4, !tbaa !29
  %336 = mul i32 %335, %334
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %329, i32 noundef %330, i32 noundef %331, i32 noundef 127, i32 noundef 0, i32 noundef %336, i8 noundef signext %.1632, i32 noundef %322, i32 noundef %327, i32 noundef 1, i32 noundef 0) #5
  %337 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %338 = icmp eq i32 %337, 2
  br i1 %338, label %354, label %339

339:                                              ; preds = %321
  %340 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %341 = icmp eq i32 %340, 3
  br i1 %341, label %352, label %342

342:                                              ; preds = %339
  %343 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %344 = icmp eq i32 %343, 4
  br i1 %344, label %350, label %345

345:                                              ; preds = %342
  %346 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %347 = icmp eq i32 %346, 5
  br i1 %347, label %348, label %357

348:                                              ; preds = %345
  %349 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %0, i8 noundef signext %349, i32 noundef %322, i32 noundef %322, i32 noundef 30, i32 noundef 31, i32 noundef 7, i32 noundef 6) #5
  br label %357

350:                                              ; preds = %342
  %351 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %0, i8 noundef signext %351, i32 noundef %322, i32 noundef %322) #5
  br label %357

352:                                              ; preds = %339
  %353 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %353, i32 noundef %322, i32 noundef %322) #5
  br label %357

354:                                              ; preds = %321
  %355 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208099, i8 noundef signext %355, i32 noundef %322, i32 noundef %322) #5
  %356 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %356, i32 noundef %322, i32 noundef %322, i32 noundef 16) #5
  br label %357

357:                                              ; preds = %354, %352, %350, %348, %345
  %358 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %358, i32 noundef %322, i32 noundef %323, i32 noundef %323) #5
  %359 = add i32 %319, %332
  %360 = icmp uge i32 %359, %11
  %or.cond.not = select i1 %spec.select743, i1 true, i1 %360
  br i1 %or.cond.not, label %390, label %361

361:                                              ; preds = %357
  %362 = load i32, ptr %3, align 4, !tbaa !39
  %363 = load i32, ptr %293, align 4, !tbaa !28
  %364 = load i32, ptr %28, align 4, !tbaa !15
  %365 = add i32 %319, %333
  %366 = load i32, ptr %294, align 4, !tbaa !29
  %367 = mul i32 %366, %365
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %362, i32 noundef %363, i32 noundef %364, i32 noundef 127, i32 noundef 0, i32 noundef %367, i8 noundef signext %.1632, i32 noundef %325, i32 noundef %328, i32 noundef 1, i32 noundef 0) #5
  %368 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %369 = icmp eq i32 %368, 2
  br i1 %369, label %385, label %370

370:                                              ; preds = %361
  %371 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %372 = icmp eq i32 %371, 3
  br i1 %372, label %383, label %373

373:                                              ; preds = %370
  %374 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %375 = icmp eq i32 %374, 4
  br i1 %375, label %381, label %376

376:                                              ; preds = %373
  %377 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %378 = icmp eq i32 %377, 5
  br i1 %378, label %379, label %388

379:                                              ; preds = %376
  %380 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %0, i8 noundef signext %380, i32 noundef %325, i32 noundef %325, i32 noundef 30, i32 noundef 31, i32 noundef 7, i32 noundef 6) #5
  br label %388

381:                                              ; preds = %373
  %382 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %0, i8 noundef signext %382, i32 noundef %325, i32 noundef %325) #5
  br label %388

383:                                              ; preds = %370
  %384 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208083, i8 noundef signext %384, i32 noundef %325, i32 noundef %325) #5
  br label %388

385:                                              ; preds = %361
  %386 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %0, i32 noundef 537208099, i8 noundef signext %386, i32 noundef %325, i32 noundef %325) #5
  %387 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef %0, i32 noundef 611128946, i8 noundef signext %387, i32 noundef %325, i32 noundef %325, i32 noundef 16) #5
  br label %388

388:                                              ; preds = %385, %383, %381, %379, %376
  %389 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef 805574232, i8 noundef signext %389, i32 noundef %325, i32 noundef %324, i32 noundef %324) #5
  br label %390

390:                                              ; preds = %388, %357
  %391 = add nuw i32 %.4707.us, 1
  %exitcond769.not = icmp eq i32 %391, %308
  br i1 %exitcond769.not, label %._crit_edge709.us, label %321, !llvm.loop !40

._crit_edge709.us:                                ; preds = %390
  %392 = add nuw i32 %.1630710.us, 1
  %exitcond770.not = icmp eq i32 %392, %umax
  br i1 %exitcond770.not, label %.split712.us, label %.preheader700.us, !llvm.loop !41

.split712.us:                                     ; preds = %._crit_edge709.us, %317
  br i1 %290, label %393, label %405

393:                                              ; preds = %.split712.us
  %394 = load i32, ptr %295, align 4, !tbaa !32
  %395 = load i32, ptr %28, align 4, !tbaa !15
  %396 = load i32, ptr %294, align 4, !tbaa !29
  %397 = zext i32 %396 to i64
  %398 = mul nuw nsw i64 %298, %397
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %394, i32 noundef %395, i64 noundef %398) #5
  %399 = load i32, ptr %30, align 4, !tbaa !18
  call void @libxsmm_generator_mateltwise_footer_n_loop(ptr noundef %0, ptr noundef %1, ptr noundef %3, i32 noundef %399, i32 noundef %18) #5
  br i1 %299, label %400, label %405

400:                                              ; preds = %393
  %401 = load i32, ptr %28, align 4, !tbaa !15
  %402 = load i32, ptr %294, align 4, !tbaa !29
  %403 = zext i32 %402 to i64
  %404 = mul nuw nsw i64 %301, %403
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef 30008, i32 noundef %401, i64 noundef %404) #5
  br label %405

405:                                              ; preds = %393, %400, %.split712.us
  br i1 %.not750, label %._crit_edge716, label %.lr.ph715

.lr.ph715:                                        ; preds = %405
  %brmerge672 = or i1 %154, %305
  %not.brmerge676 = xor i1 %brmerge667, true
  br label %406

406:                                              ; preds = %.lr.ph715, %504
  %.5713 = phi i32 [ 0, %.lr.ph715 ], [ %505, %504 ]
  %407 = shl i32 %.5713, 1
  %408 = add i32 %407, 8
  %409 = add i32 %407, 9
  %410 = icmp ne i32 %.5713, %318
  %spec.select745.not = select i1 %brmerge672, i1 true, i1 %410
  %411 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %412 = icmp eq i32 %411, 4
  br i1 %412, label %413, label %428

413:                                              ; preds = %406
  %414 = load i32, ptr %37, align 4, !tbaa !22
  %415 = icmp ugt i32 %414, 1100
  br i1 %415, label %416, label %420

416:                                              ; preds = %413
  %417 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %417, i32 noundef %408, i32 noundef %408, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0) #5
  %418 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %418, i32 noundef %409, i32 noundef %409, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 0, i32 noundef 0) #5
  %419 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef -268097923, i8 noundef signext %419, i32 noundef %409, i32 noundef 29, i32 noundef %408) #5
  br label %420

420:                                              ; preds = %416, %413
  %421 = load i32, ptr %3, align 4, !tbaa !39
  %422 = load i32, ptr %303, align 4, !tbaa !42
  %423 = load i32, ptr %29, align 4, !tbaa !17
  %reass.add698 = add i32 %.5713, %306
  %reass.mul699 = mul i32 %reass.add698, %.0633
  %424 = load i32, ptr %302, align 4, !tbaa !33
  %425 = mul i32 %reass.mul699, %424
  %426 = load i8, ptr %289, align 4, !tbaa !25
  %427 = select i1 %spec.select745.not, i32 0, i32 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %421, i32 noundef %422, i32 noundef %423, i32 noundef 127, i32 noundef 0, i32 noundef %425, i8 noundef signext %426, i32 noundef %408, i32 noundef %427, i32 noundef 0, i32 noundef 1) #5
  br label %504

428:                                              ; preds = %406
  %429 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %430 = icmp eq i32 %429, 5
  br i1 %430, label %431, label %446

431:                                              ; preds = %428
  %432 = load i32, ptr %37, align 4, !tbaa !22
  %433 = icmp ugt i32 %432, 1100
  br i1 %433, label %434, label %438

434:                                              ; preds = %431
  %435 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %435, i32 noundef %408, i32 noundef %408, i32 noundef 30, i32 noundef 31, i32 noundef 27, i32 noundef 28, i32 noundef 7, i32 noundef 6, i32 noundef 5) #5
  %436 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %436, i32 noundef %409, i32 noundef %409, i32 noundef 30, i32 noundef 31, i32 noundef 27, i32 noundef 28, i32 noundef 7, i32 noundef 6, i32 noundef 5) #5
  %437 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef -268097923, i8 noundef signext %437, i32 noundef %409, i32 noundef 29, i32 noundef %408) #5
  br label %438

438:                                              ; preds = %434, %431
  %439 = load i32, ptr %3, align 4, !tbaa !39
  %440 = load i32, ptr %303, align 4, !tbaa !42
  %441 = load i32, ptr %29, align 4, !tbaa !17
  %reass.add696 = add i32 %.5713, %306
  %reass.mul697 = mul i32 %reass.add696, %.0633
  %442 = load i32, ptr %302, align 4, !tbaa !33
  %443 = mul i32 %reass.mul697, %442
  %444 = load i8, ptr %289, align 4, !tbaa !25
  %445 = select i1 %spec.select745.not, i32 0, i32 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %439, i32 noundef %440, i32 noundef %441, i32 noundef 127, i32 noundef 0, i32 noundef %443, i8 noundef signext %444, i32 noundef %408, i32 noundef %445, i32 noundef 0, i32 noundef 1) #5
  br label %504

446:                                              ; preds = %428
  %447 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %448 = icmp eq i32 %447, 2
  br i1 %448, label %449, label %465

449:                                              ; preds = %446
  %450 = load i32, ptr %37, align 4, !tbaa !22
  %451 = icmp ugt i32 %450, 1102
  %452 = load i8, ptr %289, align 4, !tbaa !25
  br i1 %451, label %453, label %454

453:                                              ; preds = %449
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef -267966862, i8 noundef signext %452, i32 noundef %408, i32 noundef %409, i32 noundef %408) #5
  br label %457

454:                                              ; preds = %449
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %452, i32 noundef %408, i32 noundef %408, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 1) #5
  %455 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %455, i32 noundef %409, i32 noundef %409, i32 noundef 30, i32 noundef 31, i32 noundef 6, i32 noundef 7, i32 noundef 1) #5
  %456 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef -259709315, i8 noundef signext %456, i32 noundef %409, i32 noundef 29, i32 noundef %408) #5
  br label %457

457:                                              ; preds = %454, %453
  %458 = load i32, ptr %3, align 4, !tbaa !39
  %459 = load i32, ptr %303, align 4, !tbaa !42
  %460 = load i32, ptr %29, align 4, !tbaa !17
  %reass.add694 = add i32 %.5713, %306
  %reass.mul695 = mul i32 %reass.add694, %.0633
  %461 = load i32, ptr %302, align 4, !tbaa !33
  %462 = mul i32 %reass.mul695, %461
  %463 = load i8, ptr %289, align 4, !tbaa !25
  %464 = select i1 %spec.select745.not, i32 0, i32 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef nonnull %0, i32 noundef %458, i32 noundef %459, i32 noundef %460, i32 noundef 127, i32 noundef 0, i32 noundef %462, i8 noundef signext %463, i32 noundef %408, i32 noundef %464, i32 noundef 0, i32 noundef 1) #5
  br label %504

465:                                              ; preds = %446
  %466 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %467 = icmp eq i32 %466, 3
  br i1 %467, label %468, label %487

468:                                              ; preds = %465
  %469 = load i8, ptr %289, align 4, !tbaa !25
  %470 = load i32, ptr %37, align 4, !tbaa !22
  %471 = icmp ugt i32 %470, 1100
  %472 = zext i1 %471 to i32
  %473 = zext i1 %471 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %0, i32 noundef 671954205, i8 noundef signext %469, i32 noundef %408, i32 noundef %408, i32 noundef 0, i32 noundef %472, i8 noundef zeroext %473, i32 noundef 0) #5
  %474 = load i8, ptr %289, align 4, !tbaa !25
  %475 = load i32, ptr %37, align 4, !tbaa !22
  %476 = icmp ugt i32 %475, 1100
  %477 = zext i1 %476 to i32
  %478 = zext i1 %476 to i8
  call void @libxsmm_x86_instruction_vec_compute_2reg_mask_sae_imm8(ptr noundef %0, i32 noundef 671954205, i8 noundef signext %474, i32 noundef %409, i32 noundef %409, i32 noundef 0, i32 noundef %477, i8 noundef zeroext %478, i32 noundef 0) #5
  %479 = load i8, ptr %289, align 4, !tbaa !25
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %0, i32 noundef -259709315, i8 noundef signext %479, i32 noundef %409, i32 noundef 29, i32 noundef %408) #5
  %480 = load i32, ptr %3, align 4, !tbaa !39
  %481 = load i32, ptr %303, align 4, !tbaa !42
  %482 = load i32, ptr %29, align 4, !tbaa !17
  %reass.add692 = add i32 %.5713, %306
  %reass.mul693 = mul i32 %reass.add692, %.0633
  %483 = load i32, ptr %302, align 4, !tbaa !33
  %484 = mul i32 %reass.mul693, %483
  %485 = load i8, ptr %289, align 4, !tbaa !25
  %486 = select i1 %spec.select745.not, i32 0, i32 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %480, i32 noundef %481, i32 noundef %482, i32 noundef 127, i32 noundef 0, i32 noundef %484, i8 noundef signext %485, i32 noundef %408, i32 noundef %486, i32 noundef 0, i32 noundef 1) #5
  br label %504

487:                                              ; preds = %465
  %488 = icmp eq i32 %.5713, %318
  %spec.select746 = select i1 %not.brmerge676, i1 %488, i1 false
  %489 = load i32, ptr %3, align 4, !tbaa !39
  %490 = load i32, ptr %29, align 4, !tbaa !17
  %reass.add = add i32 %.5713, %306
  %reass.mul = mul i32 %reass.add, %.0633
  %491 = load i32, ptr %302, align 4, !tbaa !33
  %492 = mul i32 %491, %reass.mul
  %493 = load i8, ptr %289, align 4, !tbaa !25
  %494 = select i1 %spec.select746, i32 2, i32 0
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %489, i32 noundef 537138704, i32 noundef %490, i32 noundef 127, i32 noundef 0, i32 noundef %492, i8 noundef signext %493, i32 noundef %408, i32 noundef %494, i32 noundef 0, i32 noundef 1) #5
  %495 = add i32 %reass.mul, %291
  %496 = icmp uge i32 %495, %11
  %or.cond680.not = select i1 %spec.select746, i1 true, i1 %496
  br i1 %or.cond680.not, label %504, label %497

497:                                              ; preds = %487
  %498 = load i32, ptr %3, align 4, !tbaa !39
  %499 = load i32, ptr %29, align 4, !tbaa !17
  %500 = load i32, ptr %302, align 4, !tbaa !33
  %501 = mul i32 %500, %495
  %502 = load i8, ptr %289, align 4, !tbaa !25
  %503 = select i1 %spec.select745.not, i32 0, i32 2
  call void @libxsmm_x86_instruction_vec_move(ptr noundef %0, i32 noundef %498, i32 noundef 537138704, i32 noundef %499, i32 noundef 127, i32 noundef 0, i32 noundef %501, i8 noundef signext %502, i32 noundef %409, i32 noundef %503, i32 noundef 0, i32 noundef 1) #5
  br label %504

504:                                              ; preds = %487, %497, %420, %457, %468, %438
  %505 = add nuw i32 %.5713, 1
  %exitcond771.not = icmp eq i32 %505, %308
  br i1 %exitcond771.not, label %._crit_edge716, label %406, !llvm.loop !43

._crit_edge716:                                   ; preds = %504, %405
  %506 = add nuw nsw i32 %.1718, 1
  %exitcond773.not = icmp eq i32 %506, %umax772
  br i1 %exitcond773.not, label %._crit_edge721, label %304, !llvm.loop !44

._crit_edge721:                                   ; preds = %._crit_edge716, %287
  %507 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %508 = icmp eq i32 %507, 4
  br i1 %508, label %509, label %513

509:                                              ; preds = %._crit_edge721
  %510 = load i32, ptr %37, align 4, !tbaa !22
  %511 = icmp ugt i32 %510, 1100
  br i1 %511, label %512, label %513

512:                                              ; preds = %509
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  br label %.loopexit

513:                                              ; preds = %509, %._crit_edge721
  %514 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %515 = icmp eq i32 %514, 2
  br i1 %515, label %516, label %520

516:                                              ; preds = %513
  %517 = load i32, ptr %37, align 4, !tbaa !22
  %.fr686 = freeze i32 %517
  %518 = icmp ugt i32 %.fr686, 1102
  br i1 %518, label %520, label %switch.early.test685

switch.early.test685:                             ; preds = %516
  switch i32 %.fr686, label %519 [
    i32 1053, label %520
    i32 1008, label %520
  ]

519:                                              ; preds = %switch.early.test685
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef nonnull %0, i32 noundef 0) #5
  br label %.loopexit

520:                                              ; preds = %switch.early.test685, %switch.early.test685, %516, %513
  %521 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #5
  %522 = icmp eq i32 %521, 5
  br i1 %522, label %526, label %523

523:                                              ; preds = %520
  %524 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #5
  %525 = icmp eq i32 %524, 5
  br i1 %525, label %526, label %.loopexit

526:                                              ; preds = %523, %520
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %0, i32 noundef 0) #5
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge739, %51, %512, %523, %526, %519, %22
  ret void
}

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

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

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

declare void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

declare void @libxsmm_x86_instruction_unified_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

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

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare void @libxsmm_x86_instruction_full_vec_load_of_constants(ptr noundef, ptr noundef, ptr noundef, i8 noundef signext, i32 noundef) local_unnamed_addr #1

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

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

declare void @libxsmm_x86_instruction_vec_move(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_x86_instruction_vec_compute_2reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_vcvtneps2bf8_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_vcvtf32_to_hf8_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_vcvtneps2bf16_avx512_preppedstack(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"libxsmm_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, !10, i64 27, !10, i64 29, !8, i64 31}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!6, !7, i64 8}
!13 = !{!6, !7, i64 12}
!14 = !{!7, !7, i64 0}
!15 = !{!16, !7, i64 4}
!16 = !{!"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}
!17 = !{!16, !7, i64 24}
!18 = !{!16, !7, i64 100}
!19 = !{!20, !7, i64 56}
!20 = !{!"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}
!21 = !{!16, !7, i64 0}
!22 = !{!23, !7, i64 28}
!23 = !{!"libxsmm_generated_code", !24, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!24 = !{!"any pointer", !8, i64 0}
!25 = !{!20, !8, i64 512}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!20, !7, i64 24}
!29 = !{!20, !7, i64 8}
!30 = distinct !{!30, !27}
!31 = distinct !{!31, !27}
!32 = !{!20, !7, i64 40}
!33 = !{!20, !7, i64 20}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = !{!8, !8, i64 0}
!37 = !{!10, !10, i64 0}
!38 = distinct !{!38, !27}
!39 = !{!20, !7, i64 0}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = !{!20, !7, i64 36}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}


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