; LLVM IR from libxsmm/libxsmm :: src (generator_mateltwise_unary_binary_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_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 }
%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 }

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

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

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

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

declare i32 @libxsmm_meltw_getenum_precision(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_vec_compute_2reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef) #1

declare void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef, i8 noundef signext, 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_x86_instruction_vec_compute_3reg(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef) #1

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

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

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

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

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

67:                                               ; preds = %10
  %68 = load i32, ptr %25, align 4, !tbaa !9
  %69 = icmp eq i32 %68, 1
  br i1 %69, label %73, label %70

70:                                               ; preds = %67
  %71 = load i32, ptr %26, align 4, !tbaa !9
  %72 = icmp eq i32 %71, 1
  br label %73

73:                                               ; preds = %70, %67, %10
  %74 = phi i1 [ true, %67 ], [ true, %10 ], [ %72, %70 ]
  %75 = zext i1 %74 to i64
  %76 = select i1 %74, i32 1, i32 0
  store i32 %76, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  %77 = load ptr, ptr %13, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %77, i32 0, i32 3
  %79 = load i32, ptr %78, align 4, !tbaa !14
  %80 = icmp eq i32 %79, 4
  br i1 %80, label %81, label %88

81:                                               ; preds = %73
  %82 = load ptr, ptr %11, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %82, i32 0, i32 6
  %84 = load i32, ptr %83, align 4, !tbaa !16
  %85 = icmp ult i32 %84, 1101
  %86 = zext i1 %85 to i64
  %87 = select i1 %85, i32 537209368, i32 537209432
  br label %95

88:                                               ; preds = %73
  %89 = load ptr, ptr %13, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %89, i32 0, i32 3
  %91 = load i32, ptr %90, align 4, !tbaa !14
  %92 = icmp eq i32 %91, 2
  %93 = zext i1 %92 to i64
  %94 = select i1 %92, i32 537209209, i32 537208952
  br label %95

95:                                               ; preds = %88, %81
  %96 = phi i32 [ %87, %81 ], [ %94, %88 ]
  store i32 %96, ptr %28, align 4, !tbaa !9
  %97 = load ptr, ptr %13, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %97, i32 0, i32 3
  %99 = load i32, ptr %98, align 4, !tbaa !14
  %100 = icmp eq i32 %99, 8
  br i1 %100, label %101, label %109

101:                                              ; preds = %95
  %102 = load ptr, ptr %11, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %102, i32 0, i32 6
  %104 = load i32, ptr %103, align 4, !tbaa !16
  %105 = icmp ult i32 %104, 1051
  br i1 %105, label %106, label %107

106:                                              ; preds = %101
  store i32 1610948697, ptr %28, align 4, !tbaa !9
  br label %108

107:                                              ; preds = %101
  store i32 -528143527, ptr %28, align 4, !tbaa !9
  br label %108

108:                                              ; preds = %107, %106
  br label %109

109:                                              ; preds = %108, %95
  %110 = load ptr, ptr %14, align 8, !tbaa !5
  %111 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %110, i32 noundef 1)
  %112 = icmp eq i32 10, %111
  br i1 %112, label %121, label %113

113:                                              ; preds = %109
  %114 = load ptr, ptr %14, align 8, !tbaa !5
  %115 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %114, i32 noundef 1)
  %116 = icmp eq i32 3, %115
  br i1 %116, label %121, label %117

117:                                              ; preds = %113
  %118 = load ptr, ptr %14, align 8, !tbaa !5
  %119 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %118, i32 noundef 1)
  %120 = icmp eq i32 2, %119
  br i1 %120, label %121, label %137

121:                                              ; preds = %117, %113, %109
  %122 = load ptr, ptr %11, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %122, i32 0, i32 6
  %124 = load i32, ptr %123, align 4, !tbaa !16
  %125 = icmp ult i32 %124, 1051
  br i1 %125, label %126, label %136

126:                                              ; preds = %121
  %127 = load i32, ptr %19, align 4, !tbaa !9
  %128 = icmp ugt i32 %127, 0
  br i1 %128, label %129, label %135

129:                                              ; preds = %126
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %130, i32 0, i32 0
  %132 = load i32, ptr %131, align 1, !tbaa !18
  %133 = load i32, ptr %15, align 4, !tbaa !9
  %134 = urem i32 %132, %133
  store i32 %134, ptr %20, align 4, !tbaa !9
  br label %135

135:                                              ; preds = %129, %126
  br label %136

136:                                              ; preds = %135, %121
  br label %137

137:                                              ; preds = %136, %117
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %138

138:                                              ; preds = %765, %137
  %139 = load i32, ptr %22, align 4, !tbaa !9
  %140 = load i32, ptr %18, align 4, !tbaa !9
  %141 = icmp ult i32 %139, %140
  br i1 %141, label %142, label %768

142:                                              ; preds = %138
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %143

143:                                              ; preds = %761, %142
  %144 = load i32, ptr %21, align 4, !tbaa !9
  %145 = load i32, ptr %17, align 4, !tbaa !9
  %146 = icmp ult i32 %144, %145
  br i1 %146, label %147, label %764

147:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  %148 = load ptr, ptr %14, align 8, !tbaa !5
  %149 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %148, i32 noundef 4)
  %150 = icmp eq i32 2, %149
  %151 = zext i1 %150 to i64
  %152 = select i1 %150, i32 1, i32 0
  store i32 %152, ptr %29, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %153 = load i32, ptr %29, align 4, !tbaa !9
  %154 = icmp ugt i32 %153, 0
  br i1 %154, label %155, label %156

155:                                              ; preds = %147
  br label %162

156:                                              ; preds = %147
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %157, i32 noundef 4)
  %159 = icmp eq i32 1, %158
  %160 = zext i1 %159 to i64
  %161 = select i1 %159, i32 16, i32 8
  br label %162

162:                                              ; preds = %156, %155
  %163 = phi i32 [ 32, %155 ], [ %161, %156 ]
  store i32 %163, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  %164 = load i32, ptr %27, align 4, !tbaa !9
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %169, label %166

166:                                              ; preds = %162
  %167 = load i32, ptr %25, align 4, !tbaa !9
  %168 = icmp eq i32 %167, 1
  br i1 %168, label %169, label %173

169:                                              ; preds = %166, %162
  %170 = load ptr, ptr %13, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %170, i32 0, i32 7
  %172 = load i32, ptr %171, align 4, !tbaa !19
  br label %175

173:                                              ; preds = %166
  %174 = load i32, ptr %28, align 4, !tbaa !9
  br label %175

175:                                              ; preds = %173, %169
  %176 = phi i32 [ %172, %169 ], [ %174, %173 ]
  store i32 %176, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  %177 = load i32, ptr %24, align 4, !tbaa !9
  %178 = icmp eq i32 %177, 1
  br i1 %178, label %179, label %180

179:                                              ; preds = %175
  br label %182

180:                                              ; preds = %175
  %181 = load i32, ptr %21, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %180, %179
  %183 = phi i32 [ 0, %179 ], [ %181, %180 ]
  store i32 %183, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  %184 = load i32, ptr %25, align 4, !tbaa !9
  %185 = icmp eq i32 %184, 1
  br i1 %185, label %186, label %187

186:                                              ; preds = %182
  br label %189

187:                                              ; preds = %182
  %188 = load i32, ptr %22, align 4, !tbaa !9
  br label %189

189:                                              ; preds = %187, %186
  %190 = phi i32 [ 0, %186 ], [ %188, %187 ]
  store i32 %190, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  %191 = load i32, ptr %24, align 4, !tbaa !9
  %192 = icmp eq i32 %191, 1
  br i1 %192, label %193, label %194

193:                                              ; preds = %189
  br label %196

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

196:                                              ; preds = %194, %193
  %197 = phi i32 [ 0, %193 ], [ %195, %194 ]
  store i32 %197, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %198 = load ptr, ptr %11, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %198, i32 0, i32 6
  %200 = load i32, ptr %199, align 4, !tbaa !16
  %201 = icmp ult i32 %200, 1051
  br i1 %201, label %202, label %205

202:                                              ; preds = %196
  %203 = load i32, ptr %30, align 4, !tbaa !9
  %204 = udiv i32 %203, 2
  store i32 %204, ptr %30, align 4, !tbaa !9
  br label %214

205:                                              ; preds = %196
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %206, i32 0, i32 6
  %208 = load i32, ptr %207, align 4, !tbaa !16
  %209 = icmp ule i32 %208, 1053
  br i1 %209, label %210, label %213

210:                                              ; preds = %205
  %211 = load i32, ptr %30, align 4, !tbaa !9
  %212 = udiv i32 %211, 2
  store i32 %212, ptr %30, align 4, !tbaa !9
  br label %213

213:                                              ; preds = %210, %205
  br label %214

214:                                              ; preds = %213, %202
  %215 = load i32, ptr %26, align 4, !tbaa !9
  %216 = icmp eq i32 %215, 1
  br i1 %216, label %217, label %218

217:                                              ; preds = %214
  store i32 0, ptr %32, align 4, !tbaa !9
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %218

218:                                              ; preds = %217, %214
  %219 = load i32, ptr %16, align 4, !tbaa !9
  %220 = load i32, ptr %22, align 4, !tbaa !9
  %221 = load i32, ptr %17, align 4, !tbaa !9
  %222 = mul i32 %220, %221
  %223 = add i32 %219, %222
  %224 = load i32, ptr %21, align 4, !tbaa !9
  %225 = add i32 %223, %224
  store i32 %225, ptr %23, align 4, !tbaa !9
  %226 = load i32, ptr %33, align 4, !tbaa !9
  %227 = load ptr, ptr %14, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %227, i32 0, i32 4
  %229 = load i32, ptr %228, align 1, !tbaa !20
  %230 = mul i32 %226, %229
  store i32 %230, ptr %35, align 4, !tbaa !9
  %231 = load i32, ptr %27, align 4, !tbaa !9
  %232 = icmp eq i32 %231, 0
  br i1 %232, label %251, label %233

233:                                              ; preds = %218
  %234 = load i32, ptr %25, align 4, !tbaa !9
  %235 = icmp eq i32 %234, 1
  br i1 %235, label %251, label %236

236:                                              ; preds = %233
  %237 = load i32, ptr %24, align 4, !tbaa !9
  %238 = icmp eq i32 %237, 1
  br i1 %238, label %239, label %242

239:                                              ; preds = %236
  %240 = load i32, ptr %21, align 4, !tbaa !9
  %241 = icmp eq i32 %240, 0
  br i1 %241, label %251, label %242

242:                                              ; preds = %239, %236
  %243 = load i32, ptr %26, align 4, !tbaa !9
  %244 = icmp eq i32 %243, 1
  br i1 %244, label %245, label %625

245:                                              ; preds = %242
  %246 = load i32, ptr %21, align 4, !tbaa !9
  %247 = icmp eq i32 %246, 0
  br i1 %247, label %248, label %625

248:                                              ; preds = %245
  %249 = load i32, ptr %22, align 4, !tbaa !9
  %250 = icmp eq i32 %249, 0
  br i1 %250, label %251, label %625

251:                                              ; preds = %248, %239, %233, %218
  %252 = load ptr, ptr %14, align 8, !tbaa !5
  %253 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %252, i32 noundef 1)
  %254 = icmp eq i32 2, %253
  br i1 %254, label %255, label %321

255:                                              ; preds = %251
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = load i32, ptr %31, align 4, !tbaa !9
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %258, i32 0, i32 2
  %260 = load i32, ptr %259, align 4, !tbaa !21
  %261 = load i32, ptr %32, align 4, !tbaa !9
  %262 = load i32, ptr %30, align 4, !tbaa !9
  %263 = mul i32 %261, %262
  %264 = load i32, ptr %35, align 4, !tbaa !9
  %265 = add i32 %263, %264
  %266 = load ptr, ptr %13, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %266, i32 0, i32 3
  %268 = load i32, ptr %267, align 4, !tbaa !14
  %269 = mul i32 %265, %268
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %270, i32 0, i32 6
  %272 = load i32, ptr %271, align 4, !tbaa !16
  %273 = icmp uge i32 %272, 1101
  %274 = zext i1 %273 to i64
  %275 = select i1 %273, i32 121, i32 120
  %276 = trunc i32 %275 to i8
  %277 = load ptr, ptr %13, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %277, i32 0, i32 29
  %279 = load i32, ptr %278, align 4, !tbaa !23
  %280 = load i32, ptr %19, align 4, !tbaa !9
  %281 = icmp eq i32 %280, 1
  br i1 %281, label %282, label %291

282:                                              ; preds = %255
  %283 = load i32, ptr %32, align 4, !tbaa !9
  %284 = load i32, ptr %17, align 4, !tbaa !9
  %285 = sub i32 %284, 1
  %286 = icmp eq i32 %283, %285
  br i1 %286, label %287, label %291

287:                                              ; preds = %282
  %288 = load i32, ptr %31, align 4, !tbaa !9
  %289 = load i32, ptr %28, align 4, !tbaa !9
  %290 = icmp ne i32 %288, %289
  br label %291

291:                                              ; preds = %287, %282, %255
  %292 = phi i1 [ false, %282 ], [ false, %255 ], [ %290, %287 ]
  %293 = zext i1 %292 to i64
  %294 = select i1 %292, i32 1, i32 0
  %295 = load i32, ptr %19, align 4, !tbaa !9
  %296 = icmp eq i32 %295, 1
  br i1 %296, label %297, label %308

297:                                              ; preds = %291
  %298 = load i32, ptr %32, align 4, !tbaa !9
  %299 = load i32, ptr %17, align 4, !tbaa !9
  %300 = sub i32 %299, 1
  %301 = icmp eq i32 %298, %300
  br i1 %301, label %302, label %308

302:                                              ; preds = %297
  %303 = load i32, ptr %31, align 4, !tbaa !9
  %304 = load i32, ptr %28, align 4, !tbaa !9
  %305 = icmp ne i32 %303, %304
  br i1 %305, label %306, label %308

306:                                              ; preds = %302
  %307 = load i32, ptr %34, align 4, !tbaa !9
  br label %309

308:                                              ; preds = %302, %297, %291
  br label %309

309:                                              ; preds = %308, %306
  %310 = phi i32 [ %307, %306 ], [ 0, %308 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %256, i32 noundef %257, i32 noundef %260, i32 noundef 127, i32 noundef 0, i32 noundef %269, i8 noundef signext %276, i32 noundef %279, i32 noundef %294, i32 noundef %310, i32 noundef 0)
  %311 = load ptr, ptr %11, align 8, !tbaa !5
  %312 = load ptr, ptr %13, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %312, i32 0, i32 128
  %314 = load i8, ptr %313, align 4, !tbaa !24
  %315 = load ptr, ptr %13, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %315, i32 0, i32 29
  %317 = load i32, ptr %316, align 4, !tbaa !23
  %318 = load ptr, ptr %13, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %318, i32 0, i32 29
  %320 = load i32, ptr %319, align 4, !tbaa !23
  call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef %311, i8 noundef signext %314, i32 noundef %317, i32 noundef %320)
  br label %624

321:                                              ; preds = %251
  %322 = load ptr, ptr %14, align 8, !tbaa !5
  %323 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %322, i32 noundef 1)
  %324 = icmp eq i32 3, %323
  br i1 %324, label %325, label %391

325:                                              ; preds = %321
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = load i32, ptr %31, align 4, !tbaa !9
  %328 = load ptr, ptr %12, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %328, i32 0, i32 2
  %330 = load i32, ptr %329, align 4, !tbaa !21
  %331 = load i32, ptr %32, align 4, !tbaa !9
  %332 = load i32, ptr %30, align 4, !tbaa !9
  %333 = mul i32 %331, %332
  %334 = load i32, ptr %35, align 4, !tbaa !9
  %335 = add i32 %333, %334
  %336 = load ptr, ptr %13, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %336, i32 0, i32 3
  %338 = load i32, ptr %337, align 4, !tbaa !14
  %339 = mul i32 %335, %338
  %340 = load ptr, ptr %11, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %340, i32 0, i32 6
  %342 = load i32, ptr %341, align 4, !tbaa !16
  %343 = icmp uge i32 %342, 1101
  %344 = zext i1 %343 to i64
  %345 = select i1 %343, i32 121, i32 120
  %346 = trunc i32 %345 to i8
  %347 = load ptr, ptr %13, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %347, i32 0, i32 29
  %349 = load i32, ptr %348, align 4, !tbaa !23
  %350 = load i32, ptr %19, align 4, !tbaa !9
  %351 = icmp eq i32 %350, 1
  br i1 %351, label %352, label %361

352:                                              ; preds = %325
  %353 = load i32, ptr %32, align 4, !tbaa !9
  %354 = load i32, ptr %17, align 4, !tbaa !9
  %355 = sub i32 %354, 1
  %356 = icmp eq i32 %353, %355
  br i1 %356, label %357, label %361

357:                                              ; preds = %352
  %358 = load i32, ptr %31, align 4, !tbaa !9
  %359 = load i32, ptr %28, align 4, !tbaa !9
  %360 = icmp ne i32 %358, %359
  br label %361

361:                                              ; preds = %357, %352, %325
  %362 = phi i1 [ false, %352 ], [ false, %325 ], [ %360, %357 ]
  %363 = zext i1 %362 to i64
  %364 = select i1 %362, i32 1, i32 0
  %365 = load i32, ptr %19, align 4, !tbaa !9
  %366 = icmp eq i32 %365, 1
  br i1 %366, label %367, label %378

367:                                              ; preds = %361
  %368 = load i32, ptr %32, align 4, !tbaa !9
  %369 = load i32, ptr %17, align 4, !tbaa !9
  %370 = sub i32 %369, 1
  %371 = icmp eq i32 %368, %370
  br i1 %371, label %372, label %378

372:                                              ; preds = %367
  %373 = load i32, ptr %31, align 4, !tbaa !9
  %374 = load i32, ptr %28, align 4, !tbaa !9
  %375 = icmp ne i32 %373, %374
  br i1 %375, label %376, label %378

376:                                              ; preds = %372
  %377 = load i32, ptr %34, align 4, !tbaa !9
  br label %379

378:                                              ; preds = %372, %367, %361
  br label %379

379:                                              ; preds = %378, %376
  %380 = phi i32 [ %377, %376 ], [ 0, %378 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %326, i32 noundef %327, i32 noundef %330, i32 noundef 127, i32 noundef 0, i32 noundef %339, i8 noundef signext %346, i32 noundef %349, i32 noundef %364, i32 noundef %380, i32 noundef 0)
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = load ptr, ptr %13, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %382, i32 0, i32 128
  %384 = load i8, ptr %383, align 4, !tbaa !24
  %385 = load ptr, ptr %13, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %385, i32 0, i32 29
  %387 = load i32, ptr %386, align 4, !tbaa !23
  %388 = load ptr, ptr %13, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %388, i32 0, i32 29
  %390 = load i32, ptr %389, align 4, !tbaa !23
  call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef %381, i32 noundef 537208083, i8 noundef signext %384, i32 noundef %387, i32 noundef %390)
  br label %623

391:                                              ; preds = %321
  %392 = load ptr, ptr %14, align 8, !tbaa !5
  %393 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %392, i32 noundef 1)
  %394 = icmp eq i32 4, %393
  br i1 %394, label %395, label %474

395:                                              ; preds = %391
  %396 = load ptr, ptr %11, align 8, !tbaa !5
  %397 = load ptr, ptr %11, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %397, i32 0, i32 6
  %399 = load i32, ptr %398, align 4, !tbaa !16
  %400 = icmp ult i32 %399, 1101
  br i1 %400, label %401, label %414

401:                                              ; preds = %395
  %402 = load i32, ptr %19, align 4, !tbaa !9
  %403 = icmp eq i32 %402, 1
  br i1 %403, label %404, label %413

404:                                              ; preds = %401
  %405 = load i32, ptr %32, align 4, !tbaa !9
  %406 = load i32, ptr %17, align 4, !tbaa !9
  %407 = sub i32 %406, 1
  %408 = icmp eq i32 %405, %407
  br i1 %408, label %409, label %413

409:                                              ; preds = %404
  %410 = load i32, ptr %31, align 4, !tbaa !9
  %411 = load i32, ptr %28, align 4, !tbaa !9
  %412 = icmp ne i32 %410, %411
  br i1 %412, label %414, label %413

413:                                              ; preds = %409, %404, %401
  br label %416

414:                                              ; preds = %409, %395
  %415 = load i32, ptr %31, align 4, !tbaa !9
  br label %416

416:                                              ; preds = %414, %413
  %417 = phi i32 [ 545725200, %413 ], [ %415, %414 ]
  %418 = load ptr, ptr %12, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %418, i32 0, i32 2
  %420 = load i32, ptr %419, align 4, !tbaa !21
  %421 = load i32, ptr %32, align 4, !tbaa !9
  %422 = load i32, ptr %30, align 4, !tbaa !9
  %423 = mul i32 %421, %422
  %424 = load i32, ptr %35, align 4, !tbaa !9
  %425 = add i32 %423, %424
  %426 = load ptr, ptr %13, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %426, i32 0, i32 3
  %428 = load i32, ptr %427, align 4, !tbaa !14
  %429 = mul i32 %425, %428
  %430 = load ptr, ptr %13, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %430, i32 0, i32 29
  %432 = load i32, ptr %431, align 4, !tbaa !23
  %433 = load i32, ptr %19, align 4, !tbaa !9
  %434 = icmp eq i32 %433, 1
  br i1 %434, label %435, label %444

435:                                              ; preds = %416
  %436 = load i32, ptr %32, align 4, !tbaa !9
  %437 = load i32, ptr %17, align 4, !tbaa !9
  %438 = sub i32 %437, 1
  %439 = icmp eq i32 %436, %438
  br i1 %439, label %440, label %444

440:                                              ; preds = %435
  %441 = load i32, ptr %31, align 4, !tbaa !9
  %442 = load i32, ptr %28, align 4, !tbaa !9
  %443 = icmp ne i32 %441, %442
  br label %444

444:                                              ; preds = %440, %435, %416
  %445 = phi i1 [ false, %435 ], [ false, %416 ], [ %443, %440 ]
  %446 = zext i1 %445 to i64
  %447 = select i1 %445, i32 1, i32 0
  %448 = load i32, ptr %19, align 4, !tbaa !9
  %449 = icmp eq i32 %448, 1
  br i1 %449, label %450, label %461

450:                                              ; preds = %444
  %451 = load i32, ptr %32, align 4, !tbaa !9
  %452 = load i32, ptr %17, align 4, !tbaa !9
  %453 = sub i32 %452, 1
  %454 = icmp eq i32 %451, %453
  br i1 %454, label %455, label %461

455:                                              ; preds = %450
  %456 = load i32, ptr %31, align 4, !tbaa !9
  %457 = load i32, ptr %28, align 4, !tbaa !9
  %458 = icmp ne i32 %456, %457
  br i1 %458, label %459, label %461

459:                                              ; preds = %455
  %460 = load i32, ptr %34, align 4, !tbaa !9
  br label %462

461:                                              ; preds = %455, %450, %444
  br label %462

462:                                              ; preds = %461, %459
  %463 = phi i32 [ %460, %459 ], [ 0, %461 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %396, i32 noundef %417, i32 noundef %420, i32 noundef 127, i32 noundef 0, i32 noundef %429, i8 noundef signext 120, i32 noundef %432, i32 noundef %447, i32 noundef %463, i32 noundef 0)
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  %465 = load ptr, ptr %13, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %465, i32 0, i32 128
  %467 = load i8, ptr %466, align 4, !tbaa !24
  %468 = load ptr, ptr %13, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %468, i32 0, i32 29
  %470 = load i32, ptr %469, align 4, !tbaa !23
  %471 = load ptr, ptr %13, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %471, i32 0, i32 29
  %473 = load i32, ptr %472, align 4, !tbaa !23
  call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef %464, i8 noundef signext %467, i32 noundef %470, i32 noundef %473)
  br label %622

474:                                              ; preds = %391
  %475 = load ptr, ptr %14, align 8, !tbaa !5
  %476 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %475, i32 noundef 1)
  %477 = icmp eq i32 5, %476
  br i1 %477, label %478, label %569

478:                                              ; preds = %474
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = load ptr, ptr %11, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %480, i32 0, i32 6
  %482 = load i32, ptr %481, align 4, !tbaa !16
  %483 = icmp ult i32 %482, 1101
  br i1 %483, label %484, label %497

484:                                              ; preds = %478
  %485 = load i32, ptr %19, align 4, !tbaa !9
  %486 = icmp eq i32 %485, 1
  br i1 %486, label %487, label %496

487:                                              ; preds = %484
  %488 = load i32, ptr %32, align 4, !tbaa !9
  %489 = load i32, ptr %17, align 4, !tbaa !9
  %490 = sub i32 %489, 1
  %491 = icmp eq i32 %488, %490
  br i1 %491, label %492, label %496

492:                                              ; preds = %487
  %493 = load i32, ptr %31, align 4, !tbaa !9
  %494 = load i32, ptr %28, align 4, !tbaa !9
  %495 = icmp ne i32 %493, %494
  br i1 %495, label %497, label %496

496:                                              ; preds = %492, %487, %484
  br label %499

497:                                              ; preds = %492, %478
  %498 = load i32, ptr %31, align 4, !tbaa !9
  br label %499

499:                                              ; preds = %497, %496
  %500 = phi i32 [ 545725200, %496 ], [ %498, %497 ]
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %501, i32 0, i32 2
  %503 = load i32, ptr %502, align 4, !tbaa !21
  %504 = load i32, ptr %32, align 4, !tbaa !9
  %505 = load i32, ptr %30, align 4, !tbaa !9
  %506 = mul i32 %504, %505
  %507 = load i32, ptr %35, align 4, !tbaa !9
  %508 = add i32 %506, %507
  %509 = load ptr, ptr %13, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %509, i32 0, i32 3
  %511 = load i32, ptr %510, align 4, !tbaa !14
  %512 = mul i32 %508, %511
  %513 = load ptr, ptr %13, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %513, i32 0, i32 29
  %515 = load i32, ptr %514, align 4, !tbaa !23
  %516 = load i32, ptr %19, align 4, !tbaa !9
  %517 = icmp eq i32 %516, 1
  br i1 %517, label %518, label %527

518:                                              ; preds = %499
  %519 = load i32, ptr %32, align 4, !tbaa !9
  %520 = load i32, ptr %17, align 4, !tbaa !9
  %521 = sub i32 %520, 1
  %522 = icmp eq i32 %519, %521
  br i1 %522, label %523, label %527

523:                                              ; preds = %518
  %524 = load i32, ptr %31, align 4, !tbaa !9
  %525 = load i32, ptr %28, align 4, !tbaa !9
  %526 = icmp ne i32 %524, %525
  br label %527

527:                                              ; preds = %523, %518, %499
  %528 = phi i1 [ false, %518 ], [ false, %499 ], [ %526, %523 ]
  %529 = zext i1 %528 to i64
  %530 = select i1 %528, i32 1, i32 0
  %531 = load i32, ptr %19, align 4, !tbaa !9
  %532 = icmp eq i32 %531, 1
  br i1 %532, label %533, label %544

533:                                              ; preds = %527
  %534 = load i32, ptr %32, align 4, !tbaa !9
  %535 = load i32, ptr %17, align 4, !tbaa !9
  %536 = sub i32 %535, 1
  %537 = icmp eq i32 %534, %536
  br i1 %537, label %538, label %544

538:                                              ; preds = %533
  %539 = load i32, ptr %31, align 4, !tbaa !9
  %540 = load i32, ptr %28, align 4, !tbaa !9
  %541 = icmp ne i32 %539, %540
  br i1 %541, label %542, label %544

542:                                              ; preds = %538
  %543 = load i32, ptr %34, align 4, !tbaa !9
  br label %545

544:                                              ; preds = %538, %533, %527
  br label %545

545:                                              ; preds = %544, %542
  %546 = phi i32 [ %543, %542 ], [ 0, %544 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %479, i32 noundef %500, i32 noundef %503, i32 noundef 127, i32 noundef 0, i32 noundef %512, i8 noundef signext 120, i32 noundef %515, i32 noundef %530, i32 noundef %546, i32 noundef 0)
  %547 = load ptr, ptr %11, align 8, !tbaa !5
  %548 = load ptr, ptr %13, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %548, i32 0, i32 128
  %550 = load i8, ptr %549, align 4, !tbaa !24
  %551 = load ptr, ptr %13, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %551, i32 0, i32 29
  %553 = load i32, ptr %552, align 4, !tbaa !23
  %554 = load ptr, ptr %13, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %554, i32 0, i32 29
  %556 = load i32, ptr %555, align 4, !tbaa !23
  %557 = load ptr, ptr %13, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %557, i32 0, i32 24
  %559 = load i32, ptr %558, align 4, !tbaa !25
  %560 = load ptr, ptr %13, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %560, i32 0, i32 25
  %562 = load i32, ptr %561, align 4, !tbaa !26
  %563 = load ptr, ptr %13, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %563, i32 0, i32 21
  %565 = load i32, ptr %564, align 4, !tbaa !27
  %566 = load ptr, ptr %13, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %566, i32 0, i32 22
  %568 = load i32, ptr %567, align 4, !tbaa !28
  call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef %547, i8 noundef signext %550, i32 noundef %553, i32 noundef %556, i32 noundef %559, i32 noundef %562, i32 noundef %565, i32 noundef %568)
  br label %621

569:                                              ; preds = %474
  %570 = load ptr, ptr %11, align 8, !tbaa !5
  %571 = load i32, ptr %31, align 4, !tbaa !9
  %572 = load ptr, ptr %12, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %572, i32 0, i32 2
  %574 = load i32, ptr %573, align 4, !tbaa !21
  %575 = load i32, ptr %32, align 4, !tbaa !9
  %576 = load i32, ptr %30, align 4, !tbaa !9
  %577 = mul i32 %575, %576
  %578 = load i32, ptr %35, align 4, !tbaa !9
  %579 = add i32 %577, %578
  %580 = load ptr, ptr %13, align 8, !tbaa !5
  %581 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %580, i32 0, i32 3
  %582 = load i32, ptr %581, align 4, !tbaa !14
  %583 = mul i32 %579, %582
  %584 = load ptr, ptr %13, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %584, i32 0, i32 128
  %586 = load i8, ptr %585, align 4, !tbaa !24
  %587 = load ptr, ptr %13, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %587, i32 0, i32 29
  %589 = load i32, ptr %588, align 4, !tbaa !23
  %590 = load i32, ptr %19, align 4, !tbaa !9
  %591 = icmp eq i32 %590, 1
  br i1 %591, label %592, label %601

592:                                              ; preds = %569
  %593 = load i32, ptr %32, align 4, !tbaa !9
  %594 = load i32, ptr %17, align 4, !tbaa !9
  %595 = sub i32 %594, 1
  %596 = icmp eq i32 %593, %595
  br i1 %596, label %597, label %601

597:                                              ; preds = %592
  %598 = load i32, ptr %31, align 4, !tbaa !9
  %599 = load i32, ptr %28, align 4, !tbaa !9
  %600 = icmp ne i32 %598, %599
  br label %601

601:                                              ; preds = %597, %592, %569
  %602 = phi i1 [ false, %592 ], [ false, %569 ], [ %600, %597 ]
  %603 = zext i1 %602 to i64
  %604 = select i1 %602, i32 1, i32 0
  %605 = load i32, ptr %19, align 4, !tbaa !9
  %606 = icmp eq i32 %605, 1
  br i1 %606, label %607, label %618

607:                                              ; preds = %601
  %608 = load i32, ptr %32, align 4, !tbaa !9
  %609 = load i32, ptr %17, align 4, !tbaa !9
  %610 = sub i32 %609, 1
  %611 = icmp eq i32 %608, %610
  br i1 %611, label %612, label %618

612:                                              ; preds = %607
  %613 = load i32, ptr %31, align 4, !tbaa !9
  %614 = load i32, ptr %28, align 4, !tbaa !9
  %615 = icmp ne i32 %613, %614
  br i1 %615, label %616, label %618

616:                                              ; preds = %612
  %617 = load i32, ptr %34, align 4, !tbaa !9
  br label %619

618:                                              ; preds = %612, %607, %601
  br label %619

619:                                              ; preds = %618, %616
  %620 = phi i32 [ %617, %616 ], [ 0, %618 ]
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %570, i32 noundef %571, i32 noundef %574, i32 noundef 127, i32 noundef 0, i32 noundef %583, i8 noundef signext %586, i32 noundef %589, i32 noundef %604, i32 noundef %620, i32 noundef 0)
  br label %621

621:                                              ; preds = %619, %545
  br label %622

622:                                              ; preds = %621, %462
  br label %623

623:                                              ; preds = %622, %379
  br label %624

624:                                              ; preds = %623, %309
  br label %625

625:                                              ; preds = %624, %248, %245, %242
  %626 = load ptr, ptr %14, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %626, i32 0, i32 10
  %628 = load i16, ptr %627, align 1, !tbaa !29
  %629 = zext i16 %628 to i32
  %630 = icmp eq i32 %629, 3
  br i1 %630, label %631, label %757

631:                                              ; preds = %625
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  %632 = load i32, ptr %29, align 4, !tbaa !9
  %633 = icmp ugt i32 %632, 0
  %634 = zext i1 %633 to i64
  %635 = select i1 %633, i32 -259709338, i32 -268097948
  store i32 %635, ptr %36, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %636 = load i32, ptr %29, align 4, !tbaa !9
  %637 = icmp ugt i32 %636, 0
  %638 = zext i1 %637 to i64
  %639 = select i1 %637, i32 -1601891952, i32 -1610346096
  store i32 %639, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %640 = load ptr, ptr %13, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %640, i32 0, i32 59
  %642 = load i32, ptr %641, align 4, !tbaa !30
  store i32 %642, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %643 = load ptr, ptr %14, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %643, i32 0, i32 5
  %645 = load i32, ptr %644, align 1, !tbaa !31
  store i32 %645, ptr %39, align 4, !tbaa !9
  %646 = load ptr, ptr %14, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %646, i32 0, i32 9
  %648 = load i16, ptr %647, align 1, !tbaa !11
  %649 = zext i16 %648 to i32
  %650 = and i32 %649, 1024
  %651 = icmp sgt i32 %650, 0
  br i1 %651, label %652, label %657

652:                                              ; preds = %631
  %653 = load i32, ptr %39, align 4, !tbaa !9
  %654 = add i32 %653, 15
  %655 = udiv i32 %654, 16
  %656 = mul i32 %655, 16
  store i32 %656, ptr %39, align 4, !tbaa !9
  br label %657

657:                                              ; preds = %652, %631
  %658 = load ptr, ptr %11, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %658, i32 0, i32 6
  %660 = load i32, ptr %659, align 4, !tbaa !16
  %661 = icmp ult i32 %660, 1051
  br i1 %661, label %662, label %717

662:                                              ; preds = %657
  %663 = load i32, ptr %29, align 4, !tbaa !9
  %664 = icmp ne i32 %663, 0
  br i1 %664, label %665, label %674

665:                                              ; preds = %662
  %666 = load ptr, ptr %11, align 8, !tbaa !5
  %667 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %668 = icmp ult i32 1, %667
  br i1 %668, label %669, label %671

669:                                              ; preds = %665
  %670 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %672

671:                                              ; preds = %665
  br label %672

672:                                              ; preds = %671, %669
  %673 = phi i32 [ %670, %669 ], [ 1, %671 ]
  call void @libxsmm_handle_error(ptr noundef %666, i32 noundef 90006, ptr noundef @__func__.libxsmm_compute_ternary_2d_reg_block, ptr noundef @.str, i32 noundef 2242, i32 noundef %673)
  store i32 1, ptr %40, align 4
  br label %754

674:                                              ; preds = %662
  %675 = load ptr, ptr %11, align 8, !tbaa !5
  %676 = load ptr, ptr %12, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %676, i32 0, i32 3
  %678 = load i32, ptr %677, align 4, !tbaa !32
  %679 = load i32, ptr %21, align 4, !tbaa !9
  %680 = load i32, ptr %30, align 4, !tbaa !9
  %681 = mul i32 %679, %680
  %682 = load i32, ptr %22, align 4, !tbaa !9
  %683 = load i32, ptr %39, align 4, !tbaa !9
  %684 = mul i32 %682, %683
  %685 = add i32 %681, %684
  %686 = udiv i32 %685, 8
  %687 = load ptr, ptr %13, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %687, i32 0, i32 128
  %689 = load i8, ptr %688, align 4, !tbaa !24
  %690 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef %675, i32 noundef 537208952, i32 noundef %678, i32 noundef 127, i32 noundef 0, i32 noundef %686, i8 noundef signext %689, i32 noundef %690, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  %691 = load ptr, ptr %11, align 8, !tbaa !5
  %692 = load ptr, ptr %13, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %692, i32 0, i32 128
  %694 = load i8, ptr %693, align 4, !tbaa !24
  %695 = load i32, ptr %38, align 4, !tbaa !9
  %696 = load ptr, ptr %13, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %696, i32 0, i32 86
  %698 = load i32, ptr %697, align 4, !tbaa !33
  %699 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef %691, i32 noundef 805639899, i8 noundef signext %694, i32 noundef %695, i32 noundef %698, i32 noundef %699)
  %700 = load ptr, ptr %11, align 8, !tbaa !5
  %701 = load ptr, ptr %13, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %701, i32 0, i32 128
  %703 = load i8, ptr %702, align 4, !tbaa !24
  %704 = load i32, ptr %38, align 4, !tbaa !9
  %705 = load ptr, ptr %13, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %705, i32 0, i32 86
  %707 = load i32, ptr %706, align 4, !tbaa !33
  %708 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg_imm8(ptr noundef %700, i32 noundef 805639798, i8 noundef signext %703, i32 noundef %704, i32 noundef %707, i32 noundef %708, i32 noundef 0)
  %709 = load ptr, ptr %11, align 8, !tbaa !5
  %710 = load ptr, ptr %13, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %710, i32 0, i32 29
  %712 = load i32, ptr %711, align 4, !tbaa !23
  %713 = load i32, ptr %23, align 4, !tbaa !9
  %714 = load i32, ptr %23, align 4, !tbaa !9
  %715 = load i32, ptr %38, align 4, !tbaa !9
  %716 = shl i32 %715, 4
  call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef %709, i32 noundef 1879912522, i8 noundef signext 121, i32 noundef %712, i32 noundef %713, i32 noundef %714, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef %716)
  br label %753

717:                                              ; preds = %657
  %718 = load ptr, ptr %11, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %718, i32 0, i32 6
  %720 = load i32, ptr %719, align 4, !tbaa !16
  %721 = icmp ule i32 %720, 1053
  br i1 %721, label %722, label %727

722:                                              ; preds = %717
  %723 = load i32, ptr %29, align 4, !tbaa !9
  %724 = icmp ugt i32 %723, 0
  %725 = zext i1 %724 to i64
  %726 = select i1 %724, i32 -1610346096, i32 -1610280560
  store i32 %726, ptr %37, align 4, !tbaa !9
  br label %727

727:                                              ; preds = %722, %717
  %728 = load ptr, ptr %11, align 8, !tbaa !5
  %729 = load i32, ptr %37, align 4, !tbaa !9
  %730 = load ptr, ptr %12, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %730, i32 0, i32 3
  %732 = load i32, ptr %731, align 4, !tbaa !32
  %733 = load i32, ptr %21, align 4, !tbaa !9
  %734 = load i32, ptr %30, align 4, !tbaa !9
  %735 = mul i32 %733, %734
  %736 = load i32, ptr %22, align 4, !tbaa !9
  %737 = load i32, ptr %39, align 4, !tbaa !9
  %738 = mul i32 %736, %737
  %739 = add i32 %735, %738
  %740 = udiv i32 %739, 8
  %741 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_mask_move_mem(ptr noundef %728, i32 noundef %729, i32 noundef %732, i32 noundef 127, i32 noundef 0, i32 noundef %740, i32 noundef %741)
  %742 = load ptr, ptr %11, align 8, !tbaa !5
  %743 = load i32, ptr %36, align 4, !tbaa !9
  %744 = load ptr, ptr %13, align 8, !tbaa !5
  %745 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %744, i32 0, i32 128
  %746 = load i8, ptr %745, align 4, !tbaa !24
  %747 = load ptr, ptr %13, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %747, i32 0, i32 29
  %749 = load i32, ptr %748, align 4, !tbaa !23
  %750 = load i32, ptr %23, align 4, !tbaa !9
  %751 = load i32, ptr %23, align 4, !tbaa !9
  %752 = load i32, ptr %38, align 4, !tbaa !9
  call void @libxsmm_x86_instruction_vec_compute_3reg_mask(ptr noundef %742, i32 noundef %743, i8 noundef signext %746, i32 noundef %749, i32 noundef %750, i32 noundef %751, i32 noundef %752, i32 noundef 0)
  br label %753

753:                                              ; preds = %727, %674
  store i32 0, ptr %40, align 4
  br label %754

754:                                              ; preds = %753, %672
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  %755 = load i32, ptr %40, align 4
  switch i32 %755, label %758 [
    i32 0, label %756
  ]

756:                                              ; preds = %754
  br label %757

757:                                              ; preds = %756, %625
  store i32 0, ptr %40, align 4
  br label %758

758:                                              ; preds = %757, %754
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  %759 = load i32, ptr %40, align 4
  switch i32 %759, label %769 [
    i32 0, label %760
  ]

760:                                              ; preds = %758
  br label %761

761:                                              ; preds = %760
  %762 = load i32, ptr %21, align 4, !tbaa !9
  %763 = add i32 %762, 1
  store i32 %763, ptr %21, align 4, !tbaa !9
  br label %143, !llvm.loop !34

764:                                              ; preds = %143
  br label %765

765:                                              ; preds = %764
  %766 = load i32, ptr %22, align 4, !tbaa !9
  %767 = add i32 %766, 1
  store i32 %767, ptr %22, align 4, !tbaa !9
  br label %138, !llvm.loop !36

768:                                              ; preds = %138
  store i32 0, ptr %40, align 4
  br label %769

769:                                              ; preds = %768, %758
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  %770 = load i32, ptr %40, align 4
  switch i32 %770, label %772 [
    i32 0, label %771
    i32 1, label %771
  ]

771:                                              ; preds = %769, %769
  ret void

772:                                              ; preds = %769
  unreachable
}

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

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

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


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

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

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

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

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

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

declare void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef, i8 noundef signext, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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

declare void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_3reg_imm8(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_mask_move_mem(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_vec_compute_3reg_mask(ptr noundef, i32 noundef, i8 noundef signext, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_compute_ternary_2d_reg_block(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) local_unnamed_addr #1 {
  %11 = getelementptr inbounds i8, ptr %3, i64 27
  %12 = load i16, ptr %11, align 1, !tbaa !5
  %13 = zext i16 %12 to i32
  %14 = and i32 %13, 2
  %15 = icmp ne i32 %14, 0
  %16 = and i32 %13, 16
  %17 = icmp ne i32 %16, 0
  %18 = and i32 %13, 128
  %19 = icmp ne i32 %18, 0
  %20 = and i32 %13, 146
  %spec.select278 = icmp eq i32 %20, 0
  %21 = getelementptr inbounds i8, ptr %2, i64 12
  %22 = load i32, ptr %21, align 4, !tbaa !11
  %23 = icmp eq i32 %22, 4
  br i1 %23, label %.thread, label %28

.thread:                                          ; preds = %10
  %24 = getelementptr inbounds i8, ptr %0, i64 28
  %25 = load i32, ptr %24, align 4, !tbaa !13
  %26 = icmp ult i32 %25, 1101
  %27 = select i1 %26, i32 537209368, i32 537209432
  br label %36

28:                                               ; preds = %10
  %29 = icmp eq i32 %22, 2
  %30 = select i1 %29, i32 537209209, i32 537208952
  %31 = icmp eq i32 %22, 8
  br i1 %31, label %32, label %36

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %0, i64 28
  %34 = load i32, ptr %33, align 4, !tbaa !13
  %35 = icmp ult i32 %34, 1051
  %. = select i1 %35, i32 1610948697, i32 -528143527
  br label %36

36:                                               ; preds = %.thread, %32, %28
  %.0263 = phi i32 [ %30, %28 ], [ %., %32 ], [ %27, %.thread ]
  %37 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 1) #2
  %38 = icmp eq i32 %37, 10
  br i1 %38, label %45, label %39

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

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

45:                                               ; preds = %42, %39, %36
  %46 = getelementptr inbounds i8, ptr %0, i64 28
  %47 = load i32, ptr %46, align 4, !tbaa !13
  %48 = icmp ult i32 %47, 1051
  %49 = icmp ne i32 %8, 0
  %or.cond14 = and i1 %49, %48
  br i1 %or.cond14, label %50, label %53

50:                                               ; preds = %45
  %51 = load i32, ptr %3, align 1, !tbaa !16
  %52 = urem i32 %51, %4
  br label %53

53:                                               ; preds = %45, %50, %42
  %.0259 = phi i32 [ %52, %50 ], [ %9, %45 ], [ %9, %42 ]
  %.not = icmp eq i32 %7, 0
  br i1 %.not, label %.loopexit, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %53
  %.not328 = icmp eq i32 %6, 0
  %or.cond4.not.not318 = or i1 %17, %spec.select278
  %54 = getelementptr inbounds i8, ptr %2, i64 28
  %55 = select i1 %15, i32 0, i32 %.0259
  %56 = getelementptr inbounds i8, ptr %0, i64 28
  %57 = and i32 %13, 130
  %.not316 = icmp eq i32 %57, 0
  %58 = getelementptr inbounds i8, ptr %3, i64 16
  %59 = getelementptr inbounds i8, ptr %1, i64 8
  %60 = getelementptr inbounds i8, ptr %2, i64 512
  %61 = getelementptr inbounds i8, ptr %2, i64 116
  %62 = icmp eq i32 %8, 1
  %63 = add i32 %6, -1
  %64 = icmp ne i32 %8, 1
  %65 = getelementptr inbounds i8, ptr %2, i64 96
  %66 = getelementptr inbounds i8, ptr %2, i64 100
  %67 = getelementptr inbounds i8, ptr %2, i64 84
  %68 = getelementptr inbounds i8, ptr %2, i64 88
  %69 = getelementptr inbounds i8, ptr %3, i64 29
  %70 = getelementptr inbounds i8, ptr %2, i64 236
  %71 = getelementptr inbounds i8, ptr %3, i64 20
  %72 = getelementptr inbounds i8, ptr %1, i64 12
  %73 = getelementptr inbounds i8, ptr %2, i64 344
  br i1 %.not328, label %.loopexit, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %74 = and i32 %13, 144
  %.not329 = icmp eq i32 %74, 0
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us
  %.0262327.us = phi i32 [ %240, %._crit_edge.us ], [ 0, %.preheader.us.preheader ]
  %spec.select281.us = select i1 %.not329, i32 %.0262327.us, i32 0
  %75 = mul i32 %.0262327.us, %6
  %76 = add i32 %75, %5
  br label %77

77:                                               ; preds = %.preheader.us, %238
  %.0261325.us = phi i32 [ 0, %.preheader.us ], [ %239, %238 ]
  %78 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #2
  %79 = icmp eq i32 %78, 2
  br i1 %79, label %84, label %80

80:                                               ; preds = %77
  %81 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %3, i32 noundef 4) #2
  %82 = icmp eq i32 %81, 1
  %83 = select i1 %82, i32 16, i32 8
  br label %84

84:                                               ; preds = %80, %77
  %85 = phi i32 [ %83, %80 ], [ 32, %77 ]
  br i1 %or.cond4.not.not318, label %86, label %88

86:                                               ; preds = %84
  %87 = load i32, ptr %54, align 4, !tbaa !17
  br label %88

88:                                               ; preds = %86, %84
  %89 = phi i32 [ %87, %86 ], [ %.0263, %84 ]
  %90 = load i32, ptr %56, align 4, !tbaa !13
  %91 = icmp ult i32 %90, 1054
  %92 = zext i1 %91 to i32
  %.0266.us = lshr exact i32 %85, %92
  %spec.select280.us = select i1 %.not316, i32 %.0261325.us, i32 0
  %93 = add i32 %76, %.0261325.us
  %94 = load i32, ptr %58, align 1, !tbaa !18
  %95 = mul i32 %94, %spec.select281.us
  %96 = icmp eq i32 %.0261325.us, 0
  %or.cond8.us = and i1 %15, %96
  %or.cond.us = select i1 %or.cond4.not.not318, i1 true, i1 %or.cond8.us
  br i1 %or.cond.us, label %100, label %97

97:                                               ; preds = %88
  %98 = or i32 %.0261325.us, %.0262327.us
  %99 = icmp eq i32 %98, 0
  %or.cond12.us = and i1 %19, %99
  br i1 %or.cond12.us, label %100, label %200

100:                                              ; preds = %97, %88
  %101 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 1) #2
  %102 = icmp eq i32 %101, 2
  br i1 %102, label %184, label %103

103:                                              ; preds = %100
  %104 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 1) #2
  %105 = icmp eq i32 %104, 3
  br i1 %105, label %168, label %106

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

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

112:                                              ; preds = %109
  %113 = load i32, ptr %59, align 4, !tbaa !19
  %114 = mul i32 %.0266.us, %spec.select280.us
  %115 = add i32 %114, %95
  %116 = load i32, ptr %21, align 4, !tbaa !11
  %117 = mul i32 %116, %115
  %118 = load i8, ptr %60, align 4, !tbaa !21
  %119 = load i32, ptr %61, align 4, !tbaa !22
  %120 = icmp eq i32 %spec.select280.us, %63
  %or.cond305.us = select i1 %62, i1 %120, i1 false
  %121 = icmp ne i32 %89, %.0263
  %spec.select315.us = select i1 %or.cond305.us, i1 %121, i1 false
  %122 = zext i1 %spec.select315.us to i32
  %.not.us = icmp eq i32 %89, %.0263
  %spec.select18.us = select i1 %.not.us, i32 0, i32 %55
  %123 = select i1 %or.cond305.us, i32 %spec.select18.us, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef %89, i32 noundef %113, i32 noundef 127, i32 noundef 0, i32 noundef %117, i8 noundef signext %118, i32 noundef %119, i32 noundef %122, i32 noundef %123, i32 noundef 0) #2
  br label %200

124:                                              ; preds = %109
  %125 = load i32, ptr %56, align 4, !tbaa !13
  %126 = icmp ult i32 %125, 1101
  br i1 %126, label %127, label %129

127:                                              ; preds = %124
  %128 = icmp ne i32 %spec.select280.us, %63
  %or.cond298.not321.us = select i1 %64, i1 true, i1 %128
  %.not271.us = icmp eq i32 %89, %.0263
  %or.cond299.us = select i1 %or.cond298.not321.us, i1 true, i1 %.not271.us
  br i1 %or.cond299.us, label %130, label %129

129:                                              ; preds = %127, %124
  br label %130

130:                                              ; preds = %129, %127
  %131 = phi i32 [ %89, %129 ], [ 545725200, %127 ]
  %132 = load i32, ptr %59, align 4, !tbaa !19
  %133 = mul i32 %.0266.us, %spec.select280.us
  %134 = add i32 %133, %95
  %135 = load i32, ptr %21, align 4, !tbaa !11
  %136 = mul i32 %135, %134
  %137 = load i32, ptr %61, align 4, !tbaa !22
  %138 = icmp eq i32 %spec.select280.us, %63
  %or.cond301.us = select i1 %62, i1 %138, i1 false
  %139 = icmp ne i32 %89, %.0263
  %spec.select314.us = select i1 %or.cond301.us, i1 %139, i1 false
  %140 = zext i1 %spec.select314.us to i32
  %.not272.us = icmp eq i32 %89, %.0263
  %spec.select17.us = select i1 %.not272.us, i32 0, i32 %55
  %141 = select i1 %or.cond301.us, i32 %spec.select17.us, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef %131, i32 noundef %132, i32 noundef 127, i32 noundef 0, i32 noundef %136, i8 noundef signext 120, i32 noundef %137, i32 noundef %140, i32 noundef %141, i32 noundef 0) #2
  %142 = load i8, ptr %60, align 4, !tbaa !21
  %143 = load i32, ptr %61, align 4, !tbaa !22
  %144 = load i32, ptr %65, align 4, !tbaa !23
  %145 = load i32, ptr %66, align 4, !tbaa !24
  %146 = load i32, ptr %67, align 4, !tbaa !25
  %147 = load i32, ptr %68, align 4, !tbaa !26
  tail call void @libxsmm_generator_vcvthf8_to_f32_avx512_preppedstack(ptr noundef nonnull %0, i8 noundef signext %142, i32 noundef %143, i32 noundef %143, i32 noundef %144, i32 noundef %145, i32 noundef %146, i32 noundef %147) #2
  br label %200

148:                                              ; preds = %106
  %149 = load i32, ptr %56, align 4, !tbaa !13
  %150 = icmp ult i32 %149, 1101
  br i1 %150, label %151, label %153

151:                                              ; preds = %148
  %152 = icmp ne i32 %spec.select280.us, %63
  %or.cond291.not324.us = select i1 %64, i1 true, i1 %152
  %.not273.us = icmp eq i32 %89, %.0263
  %or.cond292.us = select i1 %or.cond291.not324.us, i1 true, i1 %.not273.us
  br i1 %or.cond292.us, label %154, label %153

153:                                              ; preds = %151, %148
  br label %154

154:                                              ; preds = %153, %151
  %155 = phi i32 [ %89, %153 ], [ 545725200, %151 ]
  %156 = load i32, ptr %59, align 4, !tbaa !19
  %157 = mul i32 %.0266.us, %spec.select280.us
  %158 = add i32 %157, %95
  %159 = load i32, ptr %21, align 4, !tbaa !11
  %160 = mul i32 %159, %158
  %161 = load i32, ptr %61, align 4, !tbaa !22
  %162 = icmp eq i32 %spec.select280.us, %63
  %or.cond294.us = select i1 %62, i1 %162, i1 false
  %163 = icmp ne i32 %89, %.0263
  %spec.select313.us = select i1 %or.cond294.us, i1 %163, i1 false
  %164 = zext i1 %spec.select313.us to i32
  %.not274.us = icmp eq i32 %89, %.0263
  %spec.select16.us = select i1 %.not274.us, i32 0, i32 %55
  %165 = select i1 %or.cond294.us, i32 %spec.select16.us, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef %155, i32 noundef %156, i32 noundef 127, i32 noundef 0, i32 noundef %160, i8 noundef signext 120, i32 noundef %161, i32 noundef %164, i32 noundef %165, i32 noundef 0) #2
  %166 = load i8, ptr %60, align 4, !tbaa !21
  %167 = load i32, ptr %61, align 4, !tbaa !22
  tail call void @libxsmm_generator_cvtbf8ps_avx512(ptr noundef nonnull %0, i8 noundef signext %166, i32 noundef %167, i32 noundef %167) #2
  br label %200

168:                                              ; preds = %103
  %169 = load i32, ptr %59, align 4, !tbaa !19
  %170 = mul i32 %.0266.us, %spec.select280.us
  %171 = add i32 %170, %95
  %172 = load i32, ptr %21, align 4, !tbaa !11
  %173 = mul i32 %172, %171
  %174 = load i32, ptr %56, align 4, !tbaa !13
  %175 = icmp ugt i32 %174, 1100
  %176 = select i1 %175, i8 121, i8 120
  %177 = load i32, ptr %61, align 4, !tbaa !22
  %178 = icmp eq i32 %spec.select280.us, %63
  %or.cond287.us = select i1 %62, i1 %178, i1 false
  %179 = icmp ne i32 %89, %.0263
  %spec.select312.us = select i1 %or.cond287.us, i1 %179, i1 false
  %180 = zext i1 %spec.select312.us to i32
  %.not275.us = icmp eq i32 %89, %.0263
  %spec.select15.us = select i1 %.not275.us, i32 0, i32 %55
  %181 = select i1 %or.cond287.us, i32 %spec.select15.us, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef %89, i32 noundef %169, i32 noundef 127, i32 noundef 0, i32 noundef %173, i8 noundef signext %176, i32 noundef %177, i32 noundef %180, i32 noundef %181, i32 noundef 0) #2
  %182 = load i8, ptr %60, align 4, !tbaa !21
  %183 = load i32, ptr %61, align 4, !tbaa !22
  tail call void @libxsmm_x86_instruction_vec_compute_2reg(ptr noundef nonnull %0, i32 noundef 537208083, i8 noundef signext %182, i32 noundef %183, i32 noundef %183) #2
  br label %200

184:                                              ; preds = %100
  %185 = load i32, ptr %59, align 4, !tbaa !19
  %186 = mul i32 %.0266.us, %spec.select280.us
  %187 = add i32 %186, %95
  %188 = load i32, ptr %21, align 4, !tbaa !11
  %189 = mul i32 %188, %187
  %190 = load i32, ptr %56, align 4, !tbaa !13
  %191 = icmp ugt i32 %190, 1100
  %192 = select i1 %191, i8 121, i8 120
  %193 = load i32, ptr %61, align 4, !tbaa !22
  %194 = icmp eq i32 %spec.select280.us, %63
  %or.cond283.us = select i1 %62, i1 %194, i1 false
  %195 = icmp ne i32 %89, %.0263
  %spec.select311.us = select i1 %or.cond283.us, i1 %195, i1 false
  %196 = zext i1 %spec.select311.us to i32
  %.not276.us = icmp eq i32 %89, %.0263
  %spec.select.us = select i1 %.not276.us, i32 0, i32 %55
  %197 = select i1 %or.cond283.us, i32 %spec.select.us, i32 0
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef %89, i32 noundef %185, i32 noundef 127, i32 noundef 0, i32 noundef %189, i8 noundef signext %192, i32 noundef %193, i32 noundef %196, i32 noundef %197, i32 noundef 0) #2
  %198 = load i8, ptr %60, align 4, !tbaa !21
  %199 = load i32, ptr %61, align 4, !tbaa !22
  tail call void @libxsmm_generator_cvtbf16ps_sse_avx2_avx512(ptr noundef nonnull %0, i8 noundef signext %198, i32 noundef %199, i32 noundef %199) #2
  br label %200

200:                                              ; preds = %184, %168, %154, %130, %112, %97
  %201 = load i16, ptr %69, align 1, !tbaa !27
  %202 = icmp eq i16 %201, 3
  br i1 %202, label %203, label %238

203:                                              ; preds = %200
  %204 = load i32, ptr %70, align 4, !tbaa !28
  %205 = load i32, ptr %71, align 1, !tbaa !29
  %206 = load i16, ptr %11, align 1, !tbaa !5
  %207 = and i16 %206, 1024
  %.not277.us = icmp eq i16 %207, 0
  %208 = add i32 %205, 15
  %209 = and i32 %208, -16
  %.0258.us = select i1 %.not277.us, i32 %205, i32 %209
  %210 = load i32, ptr %56, align 4, !tbaa !13
  %211 = icmp ult i32 %210, 1051
  br i1 %211, label %224, label %212

212:                                              ; preds = %203
  %213 = select i1 %79, i32 -1601891952, i32 -1610346096
  %214 = select i1 %79, i32 -259709338, i32 -268097948
  %215 = icmp ult i32 %210, 1054
  %216 = select i1 %79, i32 -1610346096, i32 -1610280560
  %spec.select308.us = select i1 %215, i32 %216, i32 %213
  %217 = load i32, ptr %72, align 4, !tbaa !30
  %218 = mul i32 %.0266.us, %.0261325.us
  %219 = mul i32 %.0258.us, %.0262327.us
  %220 = add i32 %219, %218
  %221 = lshr i32 %220, 3
  tail call void @libxsmm_x86_instruction_mask_move_mem(ptr noundef nonnull %0, i32 noundef %spec.select308.us, i32 noundef %217, i32 noundef 127, i32 noundef 0, i32 noundef %221, i32 noundef %204) #2
  %222 = load i8, ptr %60, align 4, !tbaa !21
  %223 = load i32, ptr %61, align 4, !tbaa !22
  tail call void @libxsmm_x86_instruction_vec_compute_3reg_mask(ptr noundef nonnull %0, i32 noundef %214, i8 noundef signext %222, i32 noundef %223, i32 noundef %93, i32 noundef %93, i32 noundef %204, i32 noundef 0) #2
  br label %238

224:                                              ; preds = %203
  br i1 %79, label %.critedge, label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %72, align 4, !tbaa !30
  %227 = mul i32 %.0266.us, %.0261325.us
  %228 = mul i32 %.0258.us, %.0262327.us
  %229 = add i32 %228, %227
  %230 = lshr i32 %229, 3
  %231 = load i8, ptr %60, align 4, !tbaa !21
  tail call void @libxsmm_x86_instruction_unified_vec_move(ptr noundef nonnull %0, i32 noundef 537208952, i32 noundef %226, i32 noundef 127, i32 noundef 0, i32 noundef %230, i8 noundef signext %231, i32 noundef %204, i32 noundef 0, i32 noundef 0, i32 noundef 0) #2
  %232 = load i8, ptr %60, align 4, !tbaa !21
  %233 = load i32, ptr %73, align 4, !tbaa !31
  tail call void @libxsmm_x86_instruction_vec_compute_3reg(ptr noundef nonnull %0, i32 noundef 805639899, i8 noundef signext %232, i32 noundef %204, i32 noundef %233, i32 noundef %204) #2
  %234 = load i8, ptr %60, align 4, !tbaa !21
  %235 = load i32, ptr %73, align 4, !tbaa !31
  tail call void @libxsmm_x86_instruction_vec_compute_3reg_imm8(ptr noundef nonnull %0, i32 noundef 805639798, i8 noundef signext %234, i32 noundef %204, i32 noundef %235, i32 noundef %204, i32 noundef 0) #2
  %236 = load i32, ptr %61, align 4, !tbaa !22
  %237 = shl i32 %204, 4
  tail call void @libxsmm_x86_instruction_vec_compute_3reg_mask_sae_imm8(ptr noundef nonnull %0, i32 noundef 1879912522, i8 noundef signext 121, i32 noundef %236, i32 noundef %93, i32 noundef %93, i32 noundef 0, i32 noundef 0, i8 noundef zeroext 0, i32 noundef %237) #2
  br label %238

238:                                              ; preds = %225, %212, %200
  %239 = add nuw i32 %.0261325.us, 1
  %exitcond.not = icmp eq i32 %239, %6
  br i1 %exitcond.not, label %._crit_edge.us, label %77, !llvm.loop !32

._crit_edge.us:                                   ; preds = %238
  %240 = add nuw i32 %.0262327.us, 1
  %exitcond331.not = icmp eq i32 %240, %7
  br i1 %exitcond331.not, label %.loopexit, label %.preheader.us, !llvm.loop !34

.critedge:                                        ; preds = %224
  %241 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !35
  %242 = icmp ugt i32 %241, 1
  %243 = load i32, ptr @libxsmm_verbosity, align 4
  %244 = select i1 %242, i32 %243, i32 1
  tail call void @libxsmm_handle_error(ptr noundef nonnull %0, i32 noundef 90006, ptr noundef nonnull @__func__.libxsmm_compute_ternary_2d_reg_block, ptr noundef nonnull @.str, i32 noundef 2242, i32 noundef %244) #2
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge.us, %.preheader.lr.ph, %53, %.critedge
  ret void
}

attributes #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 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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, !10, i64 27}
!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 = !{!12, !7, i64 12}
!12 = !{!"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}
!13 = !{!14, !7, i64 28}
!14 = !{!"libxsmm_generated_code", !15, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!6, !7, i64 0}
!17 = !{!12, !7, i64 28}
!18 = !{!6, !7, i64 16}
!19 = !{!20, !7, i64 8}
!20 = !{!"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}
!21 = !{!12, !8, i64 512}
!22 = !{!12, !7, i64 116}
!23 = !{!12, !7, i64 96}
!24 = !{!12, !7, i64 100}
!25 = !{!12, !7, i64 84}
!26 = !{!12, !7, i64 88}
!27 = !{!6, !10, i64 29}
!28 = !{!12, !7, i64 236}
!29 = !{!6, !7, i64 20}
!30 = !{!20, !7, i64 12}
!31 = !{!12, !7, i64 344}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = !{!7, !7, i64 0}


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