; LLVM IR from libxsmm/libxsmm :: src (generator_mateltwise_misc_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_jump_label_tracker_struct = type { [512 x i32], [512 x %struct.libxsmm_jump_source_struct] }
%struct.libxsmm_jump_source_struct = type { [512 x i32], [512 x i32], i32 }
%struct.libxsmm_mateltwise_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_mateltwise_kernel_config_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

@__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel = external hidden unnamed_addr constant [59 x i8], align 1
@.str = external hidden unnamed_addr constant [92 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_replicate_col_var_avx_avx512_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %struct.libxsmm_jump_label_tracker_struct, align 4
  %29 = alloca i32, align 4
  %30 = alloca i8, align 1
  %31 = alloca i32, align 4
  %32 = alloca i8, align 1
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  store i32 1, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 1, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  store i32 1, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 32, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  store i32 80, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2101248, ptr %28) #3
  call void @libxsmm_reset_jump_label_tracker(ptr noundef %28)
  %33 = load ptr, ptr %8, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %33, i32 0, i32 1
  store i32 8, ptr %34, align 4, !tbaa !11
  %35 = load ptr, ptr %8, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %35, i32 0, i32 6
  store i32 9, ptr %36, align 4, !tbaa !13
  %37 = load ptr, ptr %8, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %37, i32 0, i32 25
  store i32 10, ptr %38, align 4, !tbaa !14
  %39 = load ptr, ptr %8, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %39, i32 0, i32 24
  store i32 0, ptr %40, align 4, !tbaa !15
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %41, i32 0, i32 26
  store i32 11, ptr %42, align 4, !tbaa !16
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %43, i32 0, i32 15
  store i32 2, ptr %44, align 4, !tbaa !17
  %45 = load ptr, ptr %6, align 8, !tbaa !5
  %46 = load ptr, ptr %9, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %46, i32 0, i32 14
  %48 = load i32, ptr %47, align 4, !tbaa !18
  %49 = load ptr, ptr %8, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %49, i32 0, i32 0
  %51 = load i32, ptr %50, align 4, !tbaa !20
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %52, i32 0, i32 26
  %54 = load i32, ptr %53, align 4, !tbaa !16
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %45, i32 noundef %48, i32 noundef %51, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %54, i32 noundef 0)
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = load ptr, ptr %9, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %56, i32 0, i32 14
  %58 = load i32, ptr %57, align 4, !tbaa !18
  %59 = load ptr, ptr %8, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %59, i32 0, i32 26
  %61 = load i32, ptr %60, align 4, !tbaa !16
  %62 = load ptr, ptr %8, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %62, i32 0, i32 26
  %64 = load i32, ptr %63, align 4, !tbaa !16
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %55, i32 noundef %58, i32 noundef %61, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %64, i32 noundef 0)
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %65, i32 0, i32 9
  %67 = load i16, ptr %66, align 1, !tbaa !21
  %68 = zext i16 %67 to i32
  %69 = and i32 %68, 4096
  %70 = icmp sgt i32 %69, 0
  br i1 %70, label %71, label %82

71:                                               ; preds = %5
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %73, i32 0, i32 14
  %75 = load i32, ptr %74, align 4, !tbaa !18
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %76, i32 0, i32 0
  %78 = load i32, ptr %77, align 4, !tbaa !20
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %79, i32 0, i32 15
  %81 = load i32, ptr %80, align 4, !tbaa !17
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %72, i32 noundef %75, i32 noundef %78, i32 noundef 127, i32 noundef 0, i32 noundef 8, i32 noundef %81, i32 noundef 0)
  br label %82

82:                                               ; preds = %71, %5
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = load ptr, ptr %9, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %84, i32 0, i32 12
  %86 = load i32, ptr %85, align 4, !tbaa !24
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %87, i32 0, i32 26
  %89 = load i32, ptr %88, align 4, !tbaa !16
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %83, i32 noundef %86, i32 noundef %89, i64 noundef 0)
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef %90, i32 noundef 30107, i32 noundef %91, ptr noundef %28)
  %92 = load ptr, ptr %6, align 8, !tbaa !5
  %93 = load ptr, ptr %9, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %93, i32 0, i32 14
  %95 = load i32, ptr %94, align 4, !tbaa !18
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %96, i32 0, i32 0
  %98 = load i32, ptr %97, align 4, !tbaa !20
  %99 = load i32, ptr %26, align 4, !tbaa !9
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %100, i32 0, i32 1
  %102 = load i32, ptr %101, align 4, !tbaa !11
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %92, i32 noundef %95, i32 noundef %98, i32 noundef 127, i32 noundef 0, i32 noundef %99, i32 noundef %102, i32 noundef 0)
  %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 !18
  %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 !20
  %110 = load i32, ptr %27, 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 6
  %113 = load i32, ptr %112, align 4, !tbaa !13
  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 %10, align 8, !tbaa !5
  %115 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %114, i32 noundef 0)
  %116 = icmp eq i32 2, %115
  br i1 %116, label %117, label %118

117:                                              ; preds = %82
  store i32 2, ptr %19, align 4, !tbaa !9
  br label %151

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

122:                                              ; preds = %118
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %150

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

127:                                              ; preds = %123
  store i32 1, ptr %19, align 4, !tbaa !9
  br label %149

128:                                              ; preds = %123
  %129 = load ptr, ptr %10, align 8, !tbaa !5
  %130 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %129, i32 noundef 0)
  %131 = icmp eq i32 3, %130
  br i1 %131, label %132, label %133

132:                                              ; preds = %128
  store i32 2, ptr %19, align 4, !tbaa !9
  br label %148

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

137:                                              ; preds = %133
  store i32 4, ptr %19, align 4, !tbaa !9
  br label %147

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

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

144:                                              ; preds = %138
  br label %145

145:                                              ; preds = %144, %142
  %146 = phi i32 [ %143, %142 ], [ 1, %144 ]
  call void @libxsmm_handle_error(ptr noundef %139, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel, ptr noundef @.str, i32 noundef 315, i32 noundef %146)
  store i32 1, ptr %29, align 4
  br label %632

147:                                              ; preds = %137
  br label %148

148:                                              ; preds = %147, %132
  br label %149

149:                                              ; preds = %148, %127
  br label %150

150:                                              ; preds = %149, %122
  br label %151

151:                                              ; preds = %150, %117
  %152 = load ptr, ptr %10, align 8, !tbaa !5
  %153 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %152, i32 noundef 3)
  %154 = icmp eq i32 2, %153
  br i1 %154, label %155, label %156

155:                                              ; preds = %151
  store i32 2, ptr %20, align 4, !tbaa !9
  br label %189

156:                                              ; preds = %151
  %157 = load ptr, ptr %10, align 8, !tbaa !5
  %158 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %157, i32 noundef 3)
  %159 = icmp eq i32 4, %158
  br i1 %159, label %160, label %161

160:                                              ; preds = %156
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %188

161:                                              ; preds = %156
  %162 = load ptr, ptr %10, align 8, !tbaa !5
  %163 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %162, i32 noundef 3)
  %164 = icmp eq i32 5, %163
  br i1 %164, label %165, label %166

165:                                              ; preds = %161
  store i32 1, ptr %20, align 4, !tbaa !9
  br label %187

166:                                              ; preds = %161
  %167 = load ptr, ptr %10, align 8, !tbaa !5
  %168 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %167, i32 noundef 3)
  %169 = icmp eq i32 3, %168
  br i1 %169, label %170, label %171

170:                                              ; preds = %166
  store i32 2, ptr %20, align 4, !tbaa !9
  br label %186

171:                                              ; preds = %166
  %172 = load ptr, ptr %10, align 8, !tbaa !5
  %173 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %172, i32 noundef 3)
  %174 = icmp eq i32 1, %173
  br i1 %174, label %175, label %176

175:                                              ; preds = %171
  store i32 4, ptr %20, align 4, !tbaa !9
  br label %185

176:                                              ; preds = %171
  %177 = load ptr, ptr %6, align 8, !tbaa !5
  %178 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %179 = icmp ult i32 1, %178
  br i1 %179, label %180, label %182

180:                                              ; preds = %176
  %181 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %183

182:                                              ; preds = %176
  br label %183

183:                                              ; preds = %182, %180
  %184 = phi i32 [ %181, %180 ], [ 1, %182 ]
  call void @libxsmm_handle_error(ptr noundef %177, i32 noundef 90033, ptr noundef @__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel, ptr noundef @.str, i32 noundef 330, i32 noundef %184)
  store i32 1, ptr %29, align 4
  br label %632

185:                                              ; preds = %175
  br label %186

186:                                              ; preds = %185, %170
  br label %187

187:                                              ; preds = %186, %165
  br label %188

188:                                              ; preds = %187, %160
  br label %189

189:                                              ; preds = %188, %155
  %190 = load i32, ptr %19, align 4, !tbaa !9
  %191 = load i32, ptr %20, align 4, !tbaa !9
  %192 = icmp ult i32 %190, %191
  br i1 %192, label %193, label %195

193:                                              ; preds = %189
  %194 = load i32, ptr %20, align 4, !tbaa !9
  br label %197

195:                                              ; preds = %189
  %196 = load i32, ptr %19, align 4, !tbaa !9
  br label %197

197:                                              ; preds = %195, %193
  %198 = phi i32 [ %194, %193 ], [ %196, %195 ]
  store i32 %198, ptr %21, align 4, !tbaa !9
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %199, i32 0, i32 6
  %201 = load i32, ptr %200, align 4, !tbaa !25
  %202 = icmp ult i32 %201, 1101
  br i1 %202, label %203, label %206

203:                                              ; preds = %197
  %204 = load i32, ptr %21, align 4, !tbaa !9
  %205 = udiv i32 32, %204
  br label %209

206:                                              ; preds = %197
  %207 = load i32, ptr %21, align 4, !tbaa !9
  %208 = udiv i32 64, %207
  br label %209

209:                                              ; preds = %206, %203
  %210 = phi i32 [ %205, %203 ], [ %208, %206 ]
  store i32 %210, ptr %17, align 4, !tbaa !9
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %211, i32 0, i32 6
  %213 = load i32, ptr %212, align 4, !tbaa !25
  %214 = icmp ult i32 %213, 1101
  %215 = zext i1 %214 to i64
  %216 = select i1 %214, i32 16, i32 32
  store i32 %216, ptr %18, align 4, !tbaa !9
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %217, i32 0, i32 0
  %219 = load i32, ptr %218, align 1, !tbaa !27
  store i32 %219, ptr %11, align 4, !tbaa !9
  %220 = load i32, ptr %11, align 4, !tbaa !9
  %221 = load i32, ptr %17, align 4, !tbaa !9
  %222 = urem i32 %220, %221
  %223 = icmp eq i32 %222, 0
  %224 = zext i1 %223 to i64
  %225 = select i1 %223, i32 0, i32 1
  store i32 %225, ptr %12, align 4, !tbaa !9
  %226 = load i32, ptr %11, align 4, !tbaa !9
  %227 = load i32, ptr %17, align 4, !tbaa !9
  %228 = add i32 %226, %227
  %229 = sub i32 %228, 1
  %230 = load i32, ptr %17, align 4, !tbaa !9
  %231 = udiv i32 %229, %230
  store i32 %231, ptr %13, align 4, !tbaa !9
  %232 = load i32, ptr %13, align 4, !tbaa !9
  store i32 %232, ptr %14, align 4, !tbaa !9
  store i32 1, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  %233 = load ptr, ptr %6, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %233, i32 0, i32 6
  %235 = load i32, ptr %234, align 4, !tbaa !25
  %236 = icmp ult i32 %235, 1103
  br i1 %236, label %237, label %279

237:                                              ; preds = %209
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %238, i32 0, i32 6
  %240 = load i32, ptr %239, align 4, !tbaa !25
  %241 = icmp ne i32 %240, 1053
  br i1 %241, label %242, label %279

242:                                              ; preds = %237
  %243 = load ptr, ptr %6, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %243, i32 0, i32 6
  %245 = load i32, ptr %244, align 4, !tbaa !25
  %246 = icmp ne i32 %245, 1008
  br i1 %246, label %247, label %279

247:                                              ; preds = %242
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %248, i32 noundef 0)
  %250 = icmp eq i32 1, %249
  br i1 %250, label %251, label %279

251:                                              ; preds = %247
  %252 = load ptr, ptr %10, align 8, !tbaa !5
  %253 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %252, i32 noundef 3)
  %254 = icmp eq i32 2, %253
  br i1 %254, label %255, label %279

255:                                              ; preds = %251
  %256 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef %256, i32 noundef 0)
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %257, i32 0, i32 24
  store i32 31, ptr %258, align 4, !tbaa !28
  %259 = load ptr, ptr %9, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %259, i32 0, i32 25
  store i32 30, ptr %260, align 4, !tbaa !29
  %261 = load ptr, ptr %6, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %261, i32 0, i32 6
  %263 = load i32, ptr %262, align 4, !tbaa !25
  %264 = icmp ult i32 %263, 1051
  br i1 %264, label %265, label %274

265:                                              ; preds = %255
  %266 = load i32, ptr %18, align 4, !tbaa !9
  %267 = sub i32 %266, 1
  %268 = load ptr, ptr %9, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %268, i32 0, i32 24
  store i32 %267, ptr %269, align 4, !tbaa !28
  %270 = load i32, ptr %18, align 4, !tbaa !9
  %271 = sub i32 %270, 2
  %272 = load ptr, ptr %9, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %272, i32 0, i32 25
  store i32 %271, ptr %273, align 4, !tbaa !29
  br label %274

274:                                              ; preds = %265, %255
  %275 = load ptr, ptr %9, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %275, i32 0, i32 21
  store i32 3, ptr %276, align 4, !tbaa !30
  %277 = load i32, ptr %18, align 4, !tbaa !9
  %278 = sub i32 %277, 2
  store i32 %278, ptr %18, align 4, !tbaa !9
  br label %390

279:                                              ; preds = %251, %247, %242, %237, %209
  %280 = load ptr, ptr %10, align 8, !tbaa !5
  %281 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %280, i32 noundef 0)
  %282 = icmp eq i32 1, %281
  br i1 %282, label %283, label %355

283:                                              ; preds = %279
  %284 = load ptr, ptr %10, align 8, !tbaa !5
  %285 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %284, i32 noundef 3)
  %286 = icmp eq i32 4, %285
  br i1 %286, label %287, label %355

287:                                              ; preds = %283
  %288 = load ptr, ptr %10, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %288, i32 0, i32 9
  %290 = load i16, ptr %289, align 1, !tbaa !21
  %291 = zext i16 %290 to i32
  %292 = and i32 %291, 4096
  %293 = icmp sgt i32 %292, 0
  br i1 %293, label %294, label %344

294:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #3
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %295, i32 0, i32 6
  %297 = load i32, ptr %296, align 4, !tbaa !25
  %298 = icmp ult i32 %297, 1101
  %299 = zext i1 %298 to i64
  %300 = select i1 %298, i32 121, i32 122
  %301 = trunc i32 %300 to i8
  store i8 %301, ptr %30, align 1, !tbaa !31
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %302, i32 0, i32 103
  store i32 31, ptr %303, align 4, !tbaa !32
  %304 = load ptr, ptr %9, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %304, i32 0, i32 104
  store i32 30, ptr %305, align 4, !tbaa !33
  %306 = load ptr, ptr %9, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %306, i32 0, i32 105
  store i32 29, ptr %307, align 4, !tbaa !34
  %308 = load ptr, ptr %9, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %308, i32 0, i32 106
  store i32 28, ptr %309, align 4, !tbaa !35
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %310, i32 0, i32 115
  store i32 27, ptr %311, align 4, !tbaa !36
  %312 = load ptr, ptr %9, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %312, i32 0, i32 116
  store i32 26, ptr %313, align 4, !tbaa !37
  %314 = load ptr, ptr %9, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %314, i32 0, i32 117
  store i32 25, ptr %315, align 4, !tbaa !38
  %316 = load ptr, ptr %9, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %316, i32 0, i32 24
  store i32 24, ptr %317, align 4, !tbaa !28
  %318 = load ptr, ptr %9, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %318, i32 0, i32 25
  store i32 23, ptr %319, align 4, !tbaa !29
  %320 = load ptr, ptr %9, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %320, i32 0, i32 21
  store i32 3, ptr %321, align 4, !tbaa !30
  %322 = load ptr, ptr %9, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %322, i32 0, i32 22
  store i32 4, ptr %323, align 4, !tbaa !39
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = load i8, ptr %30, align 1, !tbaa !31
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %326, i32 0, i32 15
  %328 = load i32, ptr %327, align 4, !tbaa !17
  %329 = load ptr, ptr %9, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %329, i32 0, i32 103
  %331 = load i32, ptr %330, align 4, !tbaa !32
  %332 = load ptr, ptr %9, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %332, i32 0, i32 104
  %334 = load i32, ptr %333, align 4, !tbaa !33
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %335, i32 0, i32 105
  %337 = load i32, ptr %336, align 4, !tbaa !34
  %338 = load ptr, ptr %9, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %338, i32 0, i32 106
  %340 = load i32, ptr %339, align 4, !tbaa !35
  call void @libxsmm_generator_load_prng_state_avx_avx512(ptr noundef %324, i8 noundef zeroext %325, i32 noundef %328, i32 noundef %331, i32 noundef %334, i32 noundef %337, i32 noundef %340)
  %341 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef %341, i32 noundef 0)
  %342 = load i32, ptr %18, align 4, !tbaa !9
  %343 = sub i32 %342, 9
  store i32 %343, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #3
  br label %354

344:                                              ; preds = %287
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef %345, i32 noundef 0)
  %346 = load ptr, ptr %9, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %346, i32 0, i32 24
  store i32 31, ptr %347, align 4, !tbaa !28
  %348 = load ptr, ptr %9, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %348, i32 0, i32 25
  store i32 30, ptr %349, align 4, !tbaa !29
  %350 = load ptr, ptr %9, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %350, i32 0, i32 21
  store i32 3, ptr %351, align 4, !tbaa !30
  %352 = load i32, ptr %18, align 4, !tbaa !9
  %353 = sub i32 %352, 2
  store i32 %353, ptr %18, align 4, !tbaa !9
  br label %354

354:                                              ; preds = %344, %294
  br label %389

355:                                              ; preds = %283, %279
  %356 = load ptr, ptr %10, align 8, !tbaa !5
  %357 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %356, i32 noundef 0)
  %358 = icmp eq i32 5, %357
  br i1 %358, label %363, label %359

359:                                              ; preds = %355
  %360 = load ptr, ptr %10, align 8, !tbaa !5
  %361 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %360, i32 noundef 3)
  %362 = icmp eq i32 5, %361
  br i1 %362, label %363, label %388

363:                                              ; preds = %359, %355
  %364 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef %364, i32 noundef 0)
  %365 = load ptr, ptr %9, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %365, i32 0, i32 24
  store i32 31, ptr %366, align 4, !tbaa !28
  %367 = load ptr, ptr %9, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %367, i32 0, i32 25
  store i32 30, ptr %368, align 4, !tbaa !29
  %369 = load ptr, ptr %9, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %369, i32 0, i32 21
  store i32 3, ptr %370, align 4, !tbaa !30
  %371 = load ptr, ptr %9, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %371, i32 0, i32 22
  store i32 4, ptr %372, align 4, !tbaa !39
  %373 = load i32, ptr %18, align 4, !tbaa !9
  %374 = sub i32 %373, 2
  store i32 %374, ptr %18, align 4, !tbaa !9
  %375 = load ptr, ptr %10, align 8, !tbaa !5
  %376 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %375, i32 noundef 3)
  %377 = icmp eq i32 5, %376
  br i1 %377, label %378, label %387

378:                                              ; preds = %363
  %379 = load ptr, ptr %9, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %379, i32 0, i32 26
  store i32 29, ptr %380, align 4, !tbaa !40
  %381 = load ptr, ptr %9, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %381, i32 0, i32 27
  store i32 28, ptr %382, align 4, !tbaa !41
  %383 = load ptr, ptr %9, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %383, i32 0, i32 23
  store i32 5, ptr %384, align 4, !tbaa !42
  %385 = load i32, ptr %18, align 4, !tbaa !9
  %386 = sub i32 %385, 2
  store i32 %386, ptr %18, align 4, !tbaa !9
  br label %387

387:                                              ; preds = %378, %363
  br label %388

388:                                              ; preds = %387, %359
  br label %389

389:                                              ; preds = %388, %354
  br label %390

390:                                              ; preds = %389, %274
  %391 = load i32, ptr %12, align 4, !tbaa !9
  %392 = icmp eq i32 %391, 1
  br i1 %392, label %393, label %477

393:                                              ; preds = %390
  %394 = load ptr, ptr %6, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %394, i32 0, i32 6
  %396 = load i32, ptr %395, align 4, !tbaa !25
  %397 = icmp uge i32 %396, 1051
  br i1 %397, label %398, label %419

398:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %399 = load ptr, ptr %10, align 8, !tbaa !5
  %400 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %399, i32 noundef 0)
  %401 = load ptr, ptr %10, align 8, !tbaa !5
  %402 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %401, i32 noundef 3)
  %403 = icmp eq i32 %400, %402
  br i1 %403, label %404, label %407

404:                                              ; preds = %398
  %405 = load ptr, ptr %10, align 8, !tbaa !5
  %406 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %405, i32 noundef 0)
  br label %408

407:                                              ; preds = %398
  br label %408

408:                                              ; preds = %407, %404
  %409 = phi i32 [ %406, %404 ], [ 1, %407 ]
  store i32 %409, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  %410 = load i32, ptr %17, align 4, !tbaa !9
  %411 = load i32, ptr %11, align 4, !tbaa !9
  %412 = load i32, ptr %17, align 4, !tbaa !9
  %413 = urem i32 %411, %412
  %414 = sub i32 %410, %413
  store i32 %414, ptr %24, align 4, !tbaa !9
  %415 = load ptr, ptr %6, align 8, !tbaa !5
  %416 = load i32, ptr %23, align 4, !tbaa !9
  %417 = load i32, ptr %24, align 4, !tbaa !9
  %418 = load i32, ptr %31, align 4, !tbaa !9
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef %415, i32 noundef 0, i32 noundef %416, i32 noundef %417, i32 noundef %418)
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  br label %476

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

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

427:                                              ; preds = %423, %419
  %428 = load i32, ptr %11, align 4, !tbaa !9
  %429 = load i32, ptr %17, align 4, !tbaa !9
  %430 = urem i32 %428, %429
  store i32 %430, ptr %22, align 4, !tbaa !9
  %431 = load ptr, ptr %10, align 8, !tbaa !5
  %432 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %431, i32 noundef 3)
  %433 = icmp eq i32 2, %432
  br i1 %433, label %438, label %434

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

438:                                              ; preds = %434, %427
  %439 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %439, ptr %23, align 4, !tbaa !9
  br label %450

440:                                              ; preds = %434
  %441 = load i32, ptr %18, align 4, !tbaa !9
  %442 = sub i32 %441, 1
  store i32 %442, ptr %23, align 4, !tbaa !9
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = load i32, ptr %23, align 4, !tbaa !9
  %445 = load i32, ptr %11, align 4, !tbaa !9
  %446 = load i32, ptr %17, align 4, !tbaa !9
  %447 = urem i32 %445, %446
  call void @libxsmm_generator_initialize_avx_mask(ptr noundef %443, i32 noundef %444, i32 noundef %447, i32 noundef 1)
  %448 = load i32, ptr %18, align 4, !tbaa !9
  %449 = add i32 %448, -1
  store i32 %449, ptr %18, align 4, !tbaa !9
  br label %450

450:                                              ; preds = %440, %438
  br label %475

451:                                              ; preds = %423
  %452 = load i32, ptr %18, align 4, !tbaa !9
  %453 = sub i32 %452, 1
  store i32 %453, ptr %22, align 4, !tbaa !9
  %454 = load ptr, ptr %6, align 8, !tbaa !5
  %455 = load i32, ptr %22, align 4, !tbaa !9
  %456 = load i32, ptr %11, align 4, !tbaa !9
  %457 = load i32, ptr %17, align 4, !tbaa !9
  %458 = urem i32 %456, %457
  call void @libxsmm_generator_initialize_avx_mask(ptr noundef %454, i32 noundef %455, i32 noundef %458, i32 noundef 1)
  %459 = load i32, ptr %18, align 4, !tbaa !9
  %460 = add i32 %459, -1
  store i32 %460, ptr %18, align 4, !tbaa !9
  %461 = load ptr, ptr %10, align 8, !tbaa !5
  %462 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %461, i32 noundef 3)
  %463 = icmp eq i32 2, %462
  br i1 %463, label %468, label %464

464:                                              ; preds = %451
  %465 = load ptr, ptr %10, align 8, !tbaa !5
  %466 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %465, i32 noundef 3)
  %467 = icmp eq i32 3, %466
  br i1 %467, label %468, label %472

468:                                              ; preds = %464, %451
  %469 = load i32, ptr %11, align 4, !tbaa !9
  %470 = load i32, ptr %17, align 4, !tbaa !9
  %471 = urem i32 %469, %470
  store i32 %471, ptr %23, align 4, !tbaa !9
  br label %474

472:                                              ; preds = %464
  %473 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %473, ptr %23, align 4, !tbaa !9
  br label %474

474:                                              ; preds = %472, %468
  br label %475

475:                                              ; preds = %474, %450
  br label %476

476:                                              ; preds = %475, %408
  br label %477

477:                                              ; preds = %476, %390
  %478 = load i32, ptr %14, align 4, !tbaa !9
  %479 = load i32, ptr %18, align 4, !tbaa !9
  %480 = icmp ugt i32 %478, %479
  br i1 %480, label %481, label %505

481:                                              ; preds = %477
  %482 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %482, ptr %14, align 4, !tbaa !9
  %483 = load i32, ptr %13, align 4, !tbaa !9
  %484 = load i32, ptr %14, align 4, !tbaa !9
  %485 = udiv i32 %483, %484
  store i32 %485, ptr %15, align 4, !tbaa !9
  %486 = load i32, ptr %13, align 4, !tbaa !9
  %487 = load i32, ptr %14, align 4, !tbaa !9
  %488 = load i32, ptr %15, align 4, !tbaa !9
  %489 = mul i32 %487, %488
  %490 = sub i32 %486, %489
  store i32 %490, ptr %16, align 4, !tbaa !9
  %491 = load i32, ptr %12, align 4, !tbaa !9
  %492 = icmp ugt i32 %491, 0
  br i1 %492, label %493, label %504

493:                                              ; preds = %481
  %494 = load i32, ptr %16, align 4, !tbaa !9
  %495 = icmp eq i32 %494, 0
  br i1 %495, label %496, label %504

496:                                              ; preds = %493
  %497 = load i32, ptr %15, align 4, !tbaa !9
  %498 = add i32 %497, -1
  store i32 %498, ptr %15, align 4, !tbaa !9
  %499 = load i32, ptr %13, align 4, !tbaa !9
  %500 = load i32, ptr %14, align 4, !tbaa !9
  %501 = load i32, ptr %15, align 4, !tbaa !9
  %502 = mul i32 %500, %501
  %503 = sub i32 %499, %502
  store i32 %503, ptr %16, align 4, !tbaa !9
  br label %504

504:                                              ; preds = %496, %493, %481
  br label %520

505:                                              ; preds = %477
  %506 = load i32, ptr %12, align 4, !tbaa !9
  %507 = icmp ugt i32 %506, 0
  br i1 %507, label %508, label %519

508:                                              ; preds = %505
  %509 = load i32, ptr %16, align 4, !tbaa !9
  %510 = icmp eq i32 %509, 0
  br i1 %510, label %511, label %519

511:                                              ; preds = %508
  %512 = load i32, ptr %15, align 4, !tbaa !9
  %513 = add i32 %512, -1
  store i32 %513, ptr %15, align 4, !tbaa !9
  %514 = load i32, ptr %13, align 4, !tbaa !9
  %515 = load i32, ptr %14, align 4, !tbaa !9
  %516 = load i32, ptr %15, align 4, !tbaa !9
  %517 = mul i32 %515, %516
  %518 = sub i32 %514, %517
  store i32 %518, ptr %16, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %511, %508, %505
  br label %520

520:                                              ; preds = %519, %504
  %521 = load i32, ptr %15, align 4, !tbaa !9
  %522 = icmp uge i32 %521, 1
  br i1 %522, label %523, label %535

523:                                              ; preds = %520
  %524 = load ptr, ptr %6, align 8, !tbaa !5
  %525 = load ptr, ptr %7, align 8, !tbaa !5
  %526 = load ptr, ptr %8, align 8, !tbaa !5
  %527 = load ptr, ptr %9, align 8, !tbaa !5
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = load i32, ptr %17, align 4, !tbaa !9
  %530 = load i32, ptr %15, align 4, !tbaa !9
  %531 = load i32, ptr %14, align 4, !tbaa !9
  %532 = load i32, ptr %16, align 4, !tbaa !9
  %533 = load i32, ptr %22, align 4, !tbaa !9
  %534 = load i32, ptr %23, align 4, !tbaa !9
  call void @libxsmm_generator_mn_code_block_replicate_col_var_avx_avx512(ptr noundef %524, ptr noundef %525, ptr noundef %526, ptr noundef %527, ptr noundef %528, i32 noundef %529, i32 noundef %530, i32 noundef %531, i32 noundef %532, i32 noundef 0, i32 noundef %533, i32 noundef %534)
  br label %535

535:                                              ; preds = %523, %520
  %536 = load i32, ptr %16, align 4, !tbaa !9
  %537 = icmp ugt i32 %536, 0
  br i1 %537, label %538, label %550

538:                                              ; preds = %535
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  %540 = load ptr, ptr %7, align 8, !tbaa !5
  %541 = load ptr, ptr %8, align 8, !tbaa !5
  %542 = load ptr, ptr %9, align 8, !tbaa !5
  %543 = load ptr, ptr %10, align 8, !tbaa !5
  %544 = load i32, ptr %17, align 4, !tbaa !9
  %545 = load i32, ptr %16, align 4, !tbaa !9
  %546 = load i32, ptr %16, align 4, !tbaa !9
  %547 = load i32, ptr %12, align 4, !tbaa !9
  %548 = load i32, ptr %22, align 4, !tbaa !9
  %549 = load i32, ptr %23, align 4, !tbaa !9
  call void @libxsmm_generator_mn_code_block_replicate_col_var_avx_avx512(ptr noundef %539, ptr noundef %540, ptr noundef %541, ptr noundef %542, ptr noundef %543, i32 noundef %544, i32 noundef 0, i32 noundef %545, i32 noundef %546, i32 noundef %547, i32 noundef %548, i32 noundef %549)
  br label %550

550:                                              ; preds = %538, %535
  %551 = load ptr, ptr %6, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %551, i32 0, i32 6
  %553 = load i32, ptr %552, align 4, !tbaa !25
  %554 = icmp ult i32 %553, 1103
  br i1 %554, label %555, label %575

555:                                              ; preds = %550
  %556 = load ptr, ptr %6, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %556, i32 0, i32 6
  %558 = load i32, ptr %557, align 4, !tbaa !25
  %559 = icmp ne i32 %558, 1053
  br i1 %559, label %560, label %575

560:                                              ; preds = %555
  %561 = load ptr, ptr %6, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %561, i32 0, i32 6
  %563 = load i32, ptr %562, align 4, !tbaa !25
  %564 = icmp ne i32 %563, 1008
  br i1 %564, label %565, label %575

565:                                              ; preds = %560
  %566 = load ptr, ptr %10, align 8, !tbaa !5
  %567 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %566, i32 noundef 0)
  %568 = icmp ne i32 2, %567
  br i1 %568, label %569, label %575

569:                                              ; preds = %565
  %570 = load ptr, ptr %10, align 8, !tbaa !5
  %571 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %570, i32 noundef 3)
  %572 = icmp eq i32 2, %571
  br i1 %572, label %573, label %575

573:                                              ; preds = %569
  %574 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef %574, i32 noundef 0)
  br label %629

575:                                              ; preds = %569, %565, %560, %555, %550
  %576 = load ptr, ptr %10, align 8, !tbaa !5
  %577 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %576, i32 noundef 0)
  %578 = icmp ne i32 4, %577
  br i1 %578, label %579, label %617

579:                                              ; preds = %575
  %580 = load ptr, ptr %10, align 8, !tbaa !5
  %581 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %580, i32 noundef 3)
  %582 = icmp eq i32 4, %581
  br i1 %582, label %583, label %617

583:                                              ; preds = %579
  %584 = load ptr, ptr %10, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %584, i32 0, i32 9
  %586 = load i16, ptr %585, align 1, !tbaa !21
  %587 = zext i16 %586 to i32
  %588 = and i32 %587, 4096
  %589 = icmp sgt i32 %588, 0
  br i1 %589, label %590, label %615

590:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #3
  %591 = load ptr, ptr %6, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %591, i32 0, i32 6
  %593 = load i32, ptr %592, align 4, !tbaa !25
  %594 = icmp ult i32 %593, 1101
  %595 = zext i1 %594 to i64
  %596 = select i1 %594, i32 121, i32 122
  %597 = trunc i32 %596 to i8
  store i8 %597, ptr %32, align 1, !tbaa !31
  %598 = load ptr, ptr %6, align 8, !tbaa !5
  %599 = load i8, ptr %32, align 1, !tbaa !31
  %600 = load ptr, ptr %8, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %600, i32 0, i32 15
  %602 = load i32, ptr %601, align 4, !tbaa !17
  %603 = load ptr, ptr %9, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %603, i32 0, i32 103
  %605 = load i32, ptr %604, align 4, !tbaa !32
  %606 = load ptr, ptr %9, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %606, i32 0, i32 104
  %608 = load i32, ptr %607, align 4, !tbaa !33
  %609 = load ptr, ptr %9, align 8, !tbaa !5
  %610 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %609, i32 0, i32 105
  %611 = load i32, ptr %610, align 4, !tbaa !34
  %612 = load ptr, ptr %9, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %612, i32 0, i32 106
  %614 = load i32, ptr %613, align 4, !tbaa !35
  call void @libxsmm_generator_store_prng_state_avx_avx512(ptr noundef %598, i8 noundef zeroext %599, i32 noundef %602, i32 noundef %605, i32 noundef %608, i32 noundef %611, i32 noundef %614)
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #3
  br label %615

615:                                              ; preds = %590, %583
  %616 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef %616, i32 noundef 0)
  br label %628

617:                                              ; preds = %579, %575
  %618 = load ptr, ptr %10, align 8, !tbaa !5
  %619 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %618, i32 noundef 0)
  %620 = icmp eq i32 5, %619
  br i1 %620, label %625, label %621

621:                                              ; preds = %617
  %622 = load ptr, ptr %10, align 8, !tbaa !5
  %623 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %622, i32 noundef 3)
  %624 = icmp eq i32 5, %623
  br i1 %624, label %625, label %627

625:                                              ; preds = %621, %617
  %626 = load ptr, ptr %6, align 8, !tbaa !5
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef %626, i32 noundef 0)
  br label %627

627:                                              ; preds = %625, %621
  br label %628

628:                                              ; preds = %627, %615
  br label %629

629:                                              ; preds = %628, %573
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  %631 = load i32, ptr %25, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef %630, i32 noundef %631, ptr noundef %28)
  store i32 0, ptr %29, align 4
  br label %632

632:                                              ; preds = %629, %183, %145
  call void @llvm.lifetime.end.p0(i64 2101248, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  %633 = load i32, ptr %29, align 4
  switch i32 %633, label %635 [
    i32 0, label %634
    i32 1, label %634
  ]

634:                                              ; preds = %632, %632
  ret void

635:                                              ; preds = %632
  unreachable
}

declare void @libxsmm_reset_jump_label_tracker(ptr noundef) #2

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

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

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

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

declare void @libxsmm_generator_load_prng_state_avx_avx512(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

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

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

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

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

declare void @libxsmm_generator_store_prng_state_avx_avx512(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 4}
!12 = !{!"libxsmm_mateltwise_gp_reg_mapping_struct", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144}
!13 = !{!12, !10, i64 24}
!14 = !{!12, !10, i64 100}
!15 = !{!12, !10, i64 96}
!16 = !{!12, !10, i64 104}
!17 = !{!12, !10, i64 60}
!18 = !{!19, !10, i64 56}
!19 = !{!"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}
!20 = !{!12, !10, i64 0}
!21 = !{!22, !23, i64 27}
!22 = !{!"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, !23, i64 27, !23, i64 29, !7, i64 31}
!23 = !{!"short", !7, i64 0}
!24 = !{!19, !10, i64 48}
!25 = !{!26, !10, i64 28}
!26 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!27 = !{!22, !10, i64 0}
!28 = !{!19, !10, i64 96}
!29 = !{!19, !10, i64 100}
!30 = !{!19, !10, i64 84}
!31 = !{!7, !7, i64 0}
!32 = !{!19, !10, i64 412}
!33 = !{!19, !10, i64 416}
!34 = !{!19, !10, i64 420}
!35 = !{!19, !10, i64 424}
!36 = !{!19, !10, i64 460}
!37 = !{!19, !10, i64 464}
!38 = !{!19, !10, i64 468}
!39 = !{!19, !10, i64 88}
!40 = !{!19, !10, i64 104}
!41 = !{!19, !10, i64 108}
!42 = !{!19, !10, i64 92}


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

%struct.libxsmm_jump_label_tracker_struct = type { [512 x i32], [512 x %struct.libxsmm_jump_source_struct] }
%struct.libxsmm_jump_source_struct = type { [512 x i32], [512 x i32], i32 }

@__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel = external hidden unnamed_addr constant [59 x i8], align 1
@.str = external hidden unnamed_addr constant [92 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_replicate_col_var_avx_avx512_microkernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca %struct.libxsmm_jump_label_tracker_struct, align 4
  call void @llvm.lifetime.start.p0(i64 2101248, ptr nonnull %6) #4
  call void @libxsmm_reset_jump_label_tracker(ptr noundef nonnull %6) #4
  %7 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 8, ptr %7, align 4, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %2, i64 24
  store i32 9, ptr %8, align 4, !tbaa !10
  %9 = getelementptr inbounds i8, ptr %2, i64 100
  store i32 10, ptr %9, align 4, !tbaa !11
  %10 = getelementptr inbounds i8, ptr %2, i64 96
  store i32 0, ptr %10, align 4, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %2, i64 104
  store i32 11, ptr %11, align 4, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %2, i64 60
  store i32 2, ptr %12, align 4, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %3, i64 56
  %14 = load i32, ptr %13, align 4, !tbaa !15
  %15 = load i32, ptr %2, align 4, !tbaa !17
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %14, i32 noundef %15, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef 11, i32 noundef 0) #4
  %16 = load i32, ptr %13, align 4, !tbaa !15
  %17 = load i32, ptr %11, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %16, i32 noundef %17, i32 noundef 127, i32 noundef 0, i32 noundef 0, i32 noundef %17, i32 noundef 0) #4
  %18 = getelementptr inbounds i8, ptr %4, i64 27
  %19 = load i16, ptr %18, align 1, !tbaa !18
  %20 = and i16 %19, 4096
  %.not = icmp eq i16 %20, 0
  br i1 %.not, label %25, label %21

21:                                               ; preds = %5
  %22 = load i32, ptr %13, align 4, !tbaa !15
  %23 = load i32, ptr %2, align 4, !tbaa !17
  %24 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %22, i32 noundef %23, i32 noundef 127, i32 noundef 0, i32 noundef 8, i32 noundef %24, i32 noundef 0) #4
  br label %25

25:                                               ; preds = %21, %5
  %26 = getelementptr inbounds i8, ptr %3, i64 48
  %27 = load i32, ptr %26, align 4, !tbaa !21
  %28 = load i32, ptr %11, align 4, !tbaa !13
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %27, i32 noundef %28, i64 noundef 0) #4
  call void @libxsmm_x86_instruction_jump_to_label(ptr noundef %0, i32 noundef 30107, i32 noundef 1, ptr noundef nonnull %6) #4
  %29 = load i32, ptr %13, align 4, !tbaa !15
  %30 = load i32, ptr %2, align 4, !tbaa !17
  %31 = load i32, ptr %7, align 4, !tbaa !5
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %29, i32 noundef %30, i32 noundef 127, i32 noundef 0, i32 noundef 32, i32 noundef %31, i32 noundef 0) #4
  %32 = load i32, ptr %13, align 4, !tbaa !15
  %33 = load i32, ptr %2, align 4, !tbaa !17
  %34 = load i32, ptr %8, align 4, !tbaa !10
  call void @libxsmm_x86_instruction_alu_mem(ptr noundef %0, i32 noundef %32, i32 noundef %33, i32 noundef 127, i32 noundef 0, i32 noundef 80, i32 noundef %34, i32 noundef 0) #4
  %35 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %36 = icmp eq i32 %35, 2
  br i1 %36, label %54, label %37

37:                                               ; preds = %25
  %38 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %39 = icmp eq i32 %38, 4
  br i1 %39, label %54, label %40

40:                                               ; preds = %37
  %41 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %42 = icmp eq i32 %41, 5
  br i1 %42, label %54, label %43

43:                                               ; preds = %40
  %44 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %45 = icmp eq i32 %44, 3
  br i1 %45, label %54, label %46

46:                                               ; preds = %43
  %47 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %48 = icmp eq i32 %47, 1
  br i1 %48, label %54, label %49

49:                                               ; preds = %46
  %50 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !22
  %51 = icmp ugt i32 %50, 1
  %52 = load i32, ptr @libxsmm_verbosity, align 4
  %53 = select i1 %51, i32 %52, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel, ptr noundef nonnull @.str, i32 noundef 315, i32 noundef %53) #4
  br label %239

54:                                               ; preds = %46, %43, %40, %37, %25
  %.0226 = phi i32 [ 2, %25 ], [ 1, %37 ], [ 1, %40 ], [ 2, %43 ], [ 4, %46 ]
  %55 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %56 = icmp eq i32 %55, 2
  br i1 %56, label %74, label %57

57:                                               ; preds = %54
  %58 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %59 = icmp eq i32 %58, 4
  br i1 %59, label %74, label %60

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

63:                                               ; preds = %60
  %64 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %65 = icmp eq i32 %64, 3
  br i1 %65, label %74, label %66

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

69:                                               ; preds = %66
  %70 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !22
  %71 = icmp ugt i32 %70, 1
  %72 = load i32, ptr @libxsmm_verbosity, align 4
  %73 = select i1 %71, i32 %72, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90033, ptr noundef nonnull @__func__.libxsmm_generator_replicate_col_var_avx_avx512_microkernel, ptr noundef nonnull @.str, i32 noundef 330, i32 noundef %73) #4
  br label %239

74:                                               ; preds = %66, %63, %60, %57, %54
  %.0227 = phi i32 [ 2, %54 ], [ 1, %57 ], [ 1, %60 ], [ 2, %63 ], [ 4, %66 ]
  %75 = call i32 @llvm.umax.i32(i32 %.0226, i32 %.0227)
  %76 = getelementptr inbounds i8, ptr %0, i64 28
  %77 = load i32, ptr %76, align 4, !tbaa !23
  %.fr = freeze i32 %77
  %78 = icmp ult i32 %.fr, 1101
  %.lhs.trunc = select i1 %78, i8 32, i8 64
  %.rhs.trunc = trunc nuw nsw i32 %75 to i8
  %79 = udiv i8 %.lhs.trunc, %.rhs.trunc
  %.zext = zext nneg i8 %79 to i32
  %80 = select i1 %78, i32 16, i32 32
  %81 = load i32, ptr %4, align 1, !tbaa !26
  %82 = urem i32 %81, %.zext
  %83 = icmp ne i32 %82, 0
  %84 = zext i1 %83 to i32
  %85 = add nsw i32 %.zext, -1
  %86 = add i32 %85, %81
  %87 = udiv i32 %86, %.zext
  %88 = icmp ugt i32 %.fr, 1102
  br i1 %88, label %105, label %switch.early.test

switch.early.test:                                ; preds = %74
  switch i32 %.fr, label %89 [
    i32 1053, label %105
    i32 1008, label %105
  ]

89:                                               ; preds = %switch.early.test
  %90 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %91 = icmp eq i32 %90, 1
  br i1 %91, label %92, label %105

92:                                               ; preds = %89
  %93 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %94 = icmp eq i32 %93, 2
  br i1 %94, label %95, label %105

95:                                               ; preds = %92
  call void @libxsmm_generator_vcvtneps2bf16_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  %96 = getelementptr inbounds i8, ptr %3, i64 96
  store i32 31, ptr %96, align 4, !tbaa !27
  %97 = getelementptr inbounds i8, ptr %3, i64 100
  store i32 30, ptr %97, align 4, !tbaa !28
  %98 = load i32, ptr %76, align 4, !tbaa !23
  %99 = icmp ult i32 %98, 1051
  br i1 %99, label %100, label %._crit_edge

._crit_edge:                                      ; preds = %95
  %.pre = add nsw i32 %80, -2
  br label %103

100:                                              ; preds = %95
  %101 = add nsw i32 %80, -1
  store i32 %101, ptr %96, align 4, !tbaa !27
  %102 = add nsw i32 %80, -2
  store i32 %102, ptr %97, align 4, !tbaa !28
  br label %103

103:                                              ; preds = %._crit_edge, %100
  %.pre-phi = phi i32 [ %.pre, %._crit_edge ], [ %102, %100 ]
  %104 = getelementptr inbounds i8, ptr %3, i64 84
  store i32 3, ptr %104, align 4, !tbaa !29
  br label %152

105:                                              ; preds = %switch.early.test, %switch.early.test, %74, %92, %89
  %106 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %107 = icmp eq i32 %106, 1
  br i1 %107, label %108, label %133

108:                                              ; preds = %105
  %109 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %110 = icmp eq i32 %109, 4
  br i1 %110, label %111, label %133

111:                                              ; preds = %108
  %112 = load i16, ptr %18, align 1, !tbaa !18
  %113 = and i16 %112, 4096
  %.not236 = icmp eq i16 %113, 0
  br i1 %.not236, label %128, label %114

114:                                              ; preds = %111
  %115 = load i32, ptr %76, align 4, !tbaa !23
  %116 = icmp ult i32 %115, 1101
  %117 = select i1 %116, i8 121, i8 122
  %118 = getelementptr inbounds i8, ptr %3, i64 412
  store <4 x i32> <i32 31, i32 30, i32 29, i32 28>, ptr %118, align 4, !tbaa !22
  %119 = getelementptr inbounds i8, ptr %3, i64 460
  store i32 27, ptr %119, align 4, !tbaa !30
  %120 = getelementptr inbounds i8, ptr %3, i64 464
  store i32 26, ptr %120, align 4, !tbaa !31
  %121 = getelementptr inbounds i8, ptr %3, i64 468
  store i32 25, ptr %121, align 4, !tbaa !32
  %122 = getelementptr inbounds i8, ptr %3, i64 96
  store i32 24, ptr %122, align 4, !tbaa !27
  %123 = getelementptr inbounds i8, ptr %3, i64 100
  store i32 23, ptr %123, align 4, !tbaa !28
  %124 = getelementptr inbounds i8, ptr %3, i64 84
  store i32 3, ptr %124, align 4, !tbaa !29
  %125 = getelementptr inbounds i8, ptr %3, i64 88
  store i32 4, ptr %125, align 4, !tbaa !33
  %126 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_generator_load_prng_state_avx_avx512(ptr noundef nonnull %0, i8 noundef zeroext %117, i32 noundef %126, i32 noundef 31, i32 noundef 30, i32 noundef 29, i32 noundef 28) #4
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  %127 = add nsw i32 %80, -9
  br label %152

128:                                              ; preds = %111
  call void @libxsmm_generator_vcvtneps2bf8_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  %129 = getelementptr inbounds i8, ptr %3, i64 96
  store i32 31, ptr %129, align 4, !tbaa !27
  %130 = getelementptr inbounds i8, ptr %3, i64 100
  store i32 30, ptr %130, align 4, !tbaa !28
  %131 = getelementptr inbounds i8, ptr %3, i64 84
  store i32 3, ptr %131, align 4, !tbaa !29
  %132 = add nsw i32 %80, -2
  br label %152

133:                                              ; preds = %108, %105
  %134 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %135 = icmp eq i32 %134, 5
  br i1 %135, label %139, label %136

136:                                              ; preds = %133
  %137 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %138 = icmp eq i32 %137, 5
  br i1 %138, label %139, label %152

139:                                              ; preds = %136, %133
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_prep_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  %140 = getelementptr inbounds i8, ptr %3, i64 96
  store i32 31, ptr %140, align 4, !tbaa !27
  %141 = getelementptr inbounds i8, ptr %3, i64 100
  store i32 30, ptr %141, align 4, !tbaa !28
  %142 = getelementptr inbounds i8, ptr %3, i64 84
  store i32 3, ptr %142, align 4, !tbaa !29
  %143 = getelementptr inbounds i8, ptr %3, i64 88
  store i32 4, ptr %143, align 4, !tbaa !33
  %144 = add nsw i32 %80, -2
  %145 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %146 = icmp eq i32 %145, 5
  br i1 %146, label %147, label %152

147:                                              ; preds = %139
  %148 = getelementptr inbounds i8, ptr %3, i64 104
  store i32 29, ptr %148, align 4, !tbaa !34
  %149 = getelementptr inbounds i8, ptr %3, i64 108
  store i32 28, ptr %149, align 4, !tbaa !35
  %150 = getelementptr inbounds i8, ptr %3, i64 92
  store i32 5, ptr %150, align 4, !tbaa !36
  %151 = add nsw i32 %80, -4
  br label %152

152:                                              ; preds = %128, %114, %139, %147, %136, %103
  %.0225 = phi i32 [ %.pre-phi, %103 ], [ %127, %114 ], [ %132, %128 ], [ %151, %147 ], [ %144, %139 ], [ %80, %136 ]
  br i1 %83, label %153, label %.thread264

153:                                              ; preds = %152
  %154 = load i32, ptr %76, align 4, !tbaa !23
  %155 = icmp ugt i32 %154, 1050
  %156 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  br i1 %155, label %157, label %165

157:                                              ; preds = %153
  %158 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %159 = icmp eq i32 %156, %158
  br i1 %159, label %160, label %162

160:                                              ; preds = %157
  %161 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  br label %162

162:                                              ; preds = %157, %160
  %163 = phi i32 [ %161, %160 ], [ 1, %157 ]
  %164 = sub nsw i32 %.zext, %82
  call void @libxsmm_generator_initialize_avx512_mask(ptr noundef nonnull %0, i32 noundef 0, i32 noundef 1, i32 noundef %164, i32 noundef %163) #4
  br label %185

165:                                              ; preds = %153
  %166 = icmp eq i32 %156, 2
  br i1 %166, label %170, label %167

167:                                              ; preds = %165
  %168 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %169 = icmp eq i32 %168, 3
  br i1 %169, label %170, label %178

170:                                              ; preds = %167, %165
  %171 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %172 = icmp eq i32 %171, 2
  br i1 %172, label %185, label %173

173:                                              ; preds = %170
  %174 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %175 = icmp eq i32 %174, 3
  br i1 %175, label %185, label %176

176:                                              ; preds = %173
  %177 = add nsw i32 %.0225, -1
  call void @libxsmm_generator_initialize_avx_mask(ptr noundef nonnull %0, i32 noundef %177, i32 noundef %82, i32 noundef 1) #4
  br label %185

178:                                              ; preds = %167
  %179 = add nsw i32 %.0225, -1
  call void @libxsmm_generator_initialize_avx_mask(ptr noundef nonnull %0, i32 noundef %179, i32 noundef %82, i32 noundef 1) #4
  %180 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %181 = icmp eq i32 %180, 2
  br i1 %181, label %185, label %182

182:                                              ; preds = %178
  %183 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %184 = icmp eq i32 %183, 3
  %spec.select249 = select i1 %184, i32 %82, i32 %179
  br label %185

185:                                              ; preds = %182, %178, %170, %173, %162, %176
  %.0229 = phi i32 [ 1, %162 ], [ %177, %176 ], [ %82, %173 ], [ %82, %170 ], [ %82, %178 ], [ %spec.select249, %182 ]
  %.0228 = phi i32 [ 1, %162 ], [ %82, %176 ], [ %82, %173 ], [ %82, %170 ], [ %179, %178 ], [ %179, %182 ]
  %.1 = phi i32 [ %.0225, %162 ], [ %177, %176 ], [ %.0225, %173 ], [ %.0225, %170 ], [ %179, %178 ], [ %179, %182 ]
  %186 = icmp ugt i32 %87, %.1
  br i1 %186, label %190, label %.thread

.thread264:                                       ; preds = %152
  %187 = icmp ugt i32 %87, %.0225
  br i1 %187, label %.thread284, label %.thread256

.thread284:                                       ; preds = %.thread264
  %188 = udiv i32 %87, %.0225
  %189 = mul nuw i32 %188, %.0225
  %.recomposed = urem i32 %87, %.0225
  br label %198

190:                                              ; preds = %185
  %191 = udiv i32 %87, %.1
  %192 = mul nuw i32 %191, %.1
  %.recomposed292 = urem i32 %87, %.1
  %193 = icmp eq i32 %.recomposed292, 0
  br i1 %193, label %194, label %198

194:                                              ; preds = %190
  %195 = add nsw i32 %191, -1
  %196 = mul i32 %195, %.1
  %197 = sub i32 %87, %196
  br label %198

198:                                              ; preds = %.thread284, %190, %194
  %.0229270290 = phi i32 [ %.0229, %194 ], [ %.0229, %190 ], [ 1, %.thread284 ]
  %.0228274289 = phi i32 [ %.0228, %194 ], [ %.0228, %190 ], [ 1, %.thread284 ]
  %.0224 = phi i32 [ %197, %194 ], [ %.recomposed292, %190 ], [ %.recomposed, %.thread284 ]
  %.0223 = phi i32 [ %195, %194 ], [ %191, %190 ], [ %188, %.thread284 ]
  %.0 = phi i32 [ %.1, %194 ], [ %.1, %190 ], [ %.0225, %.thread284 ]
  %.not237 = icmp eq i32 %.0223, 0
  br i1 %.not237, label %.thread, label %.thread256

.thread256:                                       ; preds = %.thread264, %198
  %.0228272 = phi i32 [ %.0228274289, %198 ], [ 1, %.thread264 ]
  %.0229268 = phi i32 [ %.0229270290, %198 ], [ 1, %.thread264 ]
  %.0263 = phi i32 [ %.0, %198 ], [ %87, %.thread264 ]
  %.0223262 = phi i32 [ %.0223, %198 ], [ 1, %.thread264 ]
  %.0224261 = phi i32 [ %.0224, %198 ], [ 0, %.thread264 ]
  call void @libxsmm_generator_mn_code_block_replicate_col_var_avx_avx512(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %.zext, i32 noundef %.0223262, i32 noundef %.0263, i32 noundef %.0224261, i32 noundef 0, i32 noundef %.0228272, i32 noundef %.0229268)
  br label %.thread

.thread:                                          ; preds = %185, %.thread256, %198
  %.0228275 = phi i32 [ %.0228272, %.thread256 ], [ %.0228274289, %198 ], [ %.0228, %185 ]
  %.0229271 = phi i32 [ %.0229268, %.thread256 ], [ %.0229270290, %198 ], [ %.0229, %185 ]
  %.0224255 = phi i32 [ %.0224261, %.thread256 ], [ %.0224, %198 ], [ %87, %185 ]
  %.not238 = icmp eq i32 %.0224255, 0
  br i1 %.not238, label %200, label %199

199:                                              ; preds = %.thread
  call void @libxsmm_generator_mn_code_block_replicate_col_var_avx_avx512(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull %3, ptr noundef nonnull %4, i32 noundef %.zext, i32 noundef 0, i32 noundef %.0224255, i32 noundef %.0224255, i32 noundef %84, i32 noundef %.0228275, i32 noundef %.0229271)
  br label %200

200:                                              ; preds = %199, %.thread
  %201 = load i32, ptr %76, align 4, !tbaa !23
  %.fr291 = freeze i32 %201
  %202 = icmp ugt i32 %.fr291, 1102
  br i1 %202, label %209, label %switch.early.test250

switch.early.test250:                             ; preds = %200
  switch i32 %.fr291, label %203 [
    i32 1053, label %209
    i32 1008, label %209
  ]

203:                                              ; preds = %switch.early.test250
  %204 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %.not241 = icmp eq i32 %204, 2
  br i1 %.not241, label %209, label %205

205:                                              ; preds = %203
  %206 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %207 = icmp eq i32 %206, 2
  br i1 %207, label %208, label %209

208:                                              ; preds = %205
  call void @libxsmm_generator_vcvtneps2bf16_avx512_clean_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  br label %238

209:                                              ; preds = %switch.early.test250, %switch.early.test250, %200, %205, %203
  %210 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %.not242 = icmp eq i32 %210, 4
  br i1 %.not242, label %231, label %211

211:                                              ; preds = %209
  %212 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %213 = icmp eq i32 %212, 4
  br i1 %213, label %214, label %231

214:                                              ; preds = %211
  %215 = load i16, ptr %18, align 1, !tbaa !18
  %216 = and i16 %215, 4096
  %.not243 = icmp eq i16 %216, 0
  br i1 %.not243, label %230, label %217

217:                                              ; preds = %214
  %218 = load i32, ptr %76, align 4, !tbaa !23
  %219 = icmp ult i32 %218, 1101
  %220 = select i1 %219, i8 121, i8 122
  %221 = load i32, ptr %12, align 4, !tbaa !14
  %222 = getelementptr inbounds i8, ptr %3, i64 412
  %223 = load i32, ptr %222, align 4, !tbaa !37
  %224 = getelementptr inbounds i8, ptr %3, i64 416
  %225 = load i32, ptr %224, align 4, !tbaa !38
  %226 = getelementptr inbounds i8, ptr %3, i64 420
  %227 = load i32, ptr %226, align 4, !tbaa !39
  %228 = getelementptr inbounds i8, ptr %3, i64 424
  %229 = load i32, ptr %228, align 4, !tbaa !40
  call void @libxsmm_generator_store_prng_state_avx_avx512(ptr noundef nonnull %0, i8 noundef zeroext %220, i32 noundef %221, i32 noundef %223, i32 noundef %225, i32 noundef %227, i32 noundef %229) #4
  br label %230

230:                                              ; preds = %217, %214
  call void @libxsmm_generator_vcvtneps2bf8_avx512_clean_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  br label %238

231:                                              ; preds = %211, %209
  %232 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 0) #4
  %233 = icmp eq i32 %232, 5
  br i1 %233, label %237, label %234

234:                                              ; preds = %231
  %235 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %4, i32 noundef 3) #4
  %236 = icmp eq i32 %235, 5
  br i1 %236, label %237, label %238

237:                                              ; preds = %234, %231
  call void @libxsmm_generator_vcvt_hf8_tofrom_f32_avx512_clean_stack(ptr noundef nonnull %0, i32 noundef 0) #4
  br label %238

238:                                              ; preds = %230, %237, %234, %208
  call void @libxsmm_x86_instruction_register_jump_label(ptr noundef nonnull %0, i32 noundef 1, ptr noundef nonnull %6) #4
  br label %239

239:                                              ; preds = %238, %69, %49
  call void @llvm.lifetime.end.p0(i64 2101248, ptr nonnull %6) #4
  ret void
}

declare void @libxsmm_reset_jump_label_tracker(ptr noundef) local_unnamed_addr #2

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 #2

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

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

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

declare void @libxsmm_generator_load_prng_state_avx_avx512(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

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

declare void @libxsmm_generator_store_prng_state_avx_avx512(ptr noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !7, i64 4}
!6 = !{!"libxsmm_mateltwise_gp_reg_mapping_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 24}
!11 = !{!6, !7, i64 100}
!12 = !{!6, !7, i64 96}
!13 = !{!6, !7, i64 104}
!14 = !{!6, !7, i64 60}
!15 = !{!16, !7, i64 56}
!16 = !{!"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}
!17 = !{!6, !7, i64 0}
!18 = !{!19, !20, i64 27}
!19 = !{!"libxsmm_meltw_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !20, i64 27, !20, i64 29, !8, i64 31}
!20 = !{!"short", !8, i64 0}
!21 = !{!16, !7, i64 48}
!22 = !{!7, !7, i64 0}
!23 = !{!24, !7, i64 28}
!24 = !{!"libxsmm_generated_code", !25, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!25 = !{!"any pointer", !8, i64 0}
!26 = !{!19, !7, i64 0}
!27 = !{!16, !7, i64 96}
!28 = !{!16, !7, i64 100}
!29 = !{!16, !7, i64 84}
!30 = !{!16, !7, i64 460}
!31 = !{!16, !7, i64 464}
!32 = !{!16, !7, i64 468}
!33 = !{!16, !7, i64 88}
!34 = !{!16, !7, i64 104}
!35 = !{!16, !7, i64 108}
!36 = !{!16, !7, i64 92}
!37 = !{!16, !7, i64 412}
!38 = !{!16, !7, i64 416}
!39 = !{!16, !7, i64 420}
!40 = !{!16, !7, i64 424}


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