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

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

%union.libxsmm_bfloat16_f32 = type { float }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%struct.libxsmm_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@libxsmm_target_archid = external global i32, align 4

; Function Attrs: nounwind
declare float @expf(float noundef) #0

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_fp32_unary_compute(float noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_fp64_unary_compute(double noundef, i32 noundef) #1

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

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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @libxsmm_extract_bit(ptr noundef, i32 noundef, i32 noundef, i32 noundef) #1

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

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

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

declare zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef) #3

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_reference_unary_elementwise(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca float, align 4
  %21 = alloca double, align 8
  %22 = alloca ptr, align 8
  %23 = alloca double, align 8
  %24 = alloca float, align 4
  %25 = alloca ptr, align 8
  %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 float, align 4
  %35 = alloca i32, align 4
  %36 = alloca float, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca float, align 4
  %40 = alloca ptr, align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca float, align 4
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca float, align 4
  %49 = alloca float, align 4
  %50 = alloca i8, align 1
  %51 = alloca i8, align 1
  %52 = alloca float, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  %56 = alloca float, align 4
  %57 = alloca ptr, align 8
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  %60 = alloca ptr, align 8
  %61 = alloca float, align 4
  %62 = alloca float, align 4
  %63 = alloca ptr, align 8
  %64 = alloca float, align 4
  %65 = alloca i32, align 4
  %66 = alloca ptr, align 8
  %67 = alloca float, align 4
  %68 = alloca ptr, align 8
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca i16, align 2
  %72 = alloca ptr, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca [16 x float], align 16
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca ptr, align 8
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  %86 = alloca float, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca float, align 4
  %90 = alloca float, align 4
  %91 = alloca float, align 4
  %92 = alloca ptr, align 8
  %93 = alloca float, align 4
  %94 = alloca i8, align 1
  %95 = alloca float, align 4
  %96 = alloca ptr, align 8
  %97 = alloca i64, align 8
  %98 = alloca ptr, align 8
  %99 = alloca ptr, align 8
  %100 = alloca %union.libxsmm_bfloat16_f32, align 4
  %101 = alloca ptr, align 8
  %102 = alloca float, align 4
  %103 = alloca i16, align 2
  %104 = alloca i16, align 2
  %105 = alloca i16, align 2
  %106 = alloca float, align 4
  %107 = alloca float, align 4
  %108 = alloca %union.libxsmm_bfloat16_f32, align 4
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca ptr, align 8
  %112 = alloca ptr, align 8
  %113 = alloca double, align 8
  %114 = alloca ptr, align 8
  %115 = alloca float, align 4
  %116 = alloca float, align 4
  %117 = alloca ptr, align 8
  %118 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %119 = load ptr, ptr %4, align 8, !tbaa !5
  %120 = call i32 @libxsmm_is_reduce_op(ptr noundef %119)
  %121 = icmp ugt i32 %120, 0
  br i1 %121, label %122, label %125

122:                                              ; preds = %2
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_elementwise_reduce_kernel(ptr noundef %123, ptr noundef %124)
  br label %1708

125:                                              ; preds = %2
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %126, i32 0, i32 10
  %128 = load i16, ptr %127, align 1, !tbaa !9
  %129 = zext i16 %128 to i32
  %130 = icmp eq i32 %129, 51
  br i1 %130, label %137, label %131

131:                                              ; preds = %125
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %132, i32 0, i32 10
  %134 = load i16, ptr %133, align 1, !tbaa !9
  %135 = zext i16 %134 to i32
  %136 = icmp eq i32 %135, 52
  br i1 %136, label %137, label %140

137:                                              ; preds = %131, %125
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_elementwise_gather_scatter_kernel(ptr noundef %138, ptr noundef %139)
  br label %1707

140:                                              ; preds = %131
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = call i32 @libxsmm_is_transform_op(ptr noundef %141)
  %143 = icmp ugt i32 %142, 0
  br i1 %143, label %144, label %147

144:                                              ; preds = %140
  %145 = load ptr, ptr %3, align 8, !tbaa !5
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libxsmm_elementwise_transform_kernel(ptr noundef %145, ptr noundef %146)
  br label %1706

147:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  %148 = load ptr, ptr %4, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %148, i32 0, i32 0
  %150 = load i32, ptr %149, align 1, !tbaa !13
  store i32 %150, ptr %7, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  %151 = load ptr, ptr %4, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %151, i32 0, i32 10
  %153 = load i16, ptr %152, align 1, !tbaa !9
  %154 = zext i16 %153 to i32
  %155 = icmp eq i32 %154, 27
  br i1 %155, label %156, label %162

156:                                              ; preds = %147
  %157 = load ptr, ptr %3, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %157, i32 0, i32 0
  %159 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %158, i32 0, i32 0
  %160 = load ptr, ptr %159, align 8, !tbaa !15
  %161 = load i64, ptr %160, align 8, !tbaa !19
  br label %167

162:                                              ; preds = %147
  %163 = load ptr, ptr %4, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %163, i32 0, i32 1
  %165 = load i32, ptr %164, align 1, !tbaa !21
  %166 = zext i32 %165 to i64
  br label %167

167:                                              ; preds = %162, %156
  %168 = phi i64 [ %161, %156 ], [ %166, %162 ]
  %169 = trunc i64 %168 to i32
  store i32 %169, ptr %8, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  %170 = load ptr, ptr %4, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %170, i32 0, i32 2
  %172 = load i32, ptr %171, align 1, !tbaa !22
  store i32 %172, ptr %9, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %173 = load ptr, ptr %4, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %173, i32 0, i32 3
  %175 = load i32, ptr %174, align 1, !tbaa !23
  store i32 %175, ptr %10, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %176 = load ptr, ptr %4, align 8, !tbaa !5
  %177 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %176, i32 noundef 0)
  store i32 %177, ptr %11, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %178 = load ptr, ptr %4, align 8, !tbaa !5
  %179 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %178, i32 noundef 3)
  store i32 %179, ptr %12, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %180, i32 noundef 4)
  store i32 %181, ptr %13, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %182 = load ptr, ptr %4, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %182, i32 0, i32 9
  %184 = load i16, ptr %183, align 1, !tbaa !24
  %185 = zext i16 %184 to i32
  store i32 %185, ptr %14, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %186, i32 0, i32 0
  %188 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %187, i32 0, i32 1
  %189 = load ptr, ptr %188, align 8, !tbaa !25
  store ptr %189, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %190 = load ptr, ptr %3, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %190, i32 0, i32 1
  %192 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %191, i32 0, i32 0
  %193 = load ptr, ptr %192, align 8, !tbaa !26
  store ptr %193, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %194 = load ptr, ptr %3, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %194, i32 0, i32 2
  %196 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %195, i32 0, i32 0
  %197 = load ptr, ptr %196, align 8, !tbaa !27
  store ptr %197, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %198, i32 0, i32 2
  %200 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %199, i32 0, i32 1
  %201 = load ptr, ptr %200, align 8, !tbaa !28
  store ptr %201, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !14
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %202, i32 0, i32 10
  %204 = load i16, ptr %203, align 1, !tbaa !9
  %205 = zext i16 %204 to i32
  %206 = icmp eq i32 %205, 24
  br i1 %206, label %207, label %278

207:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store float 0.000000e+00, ptr %20, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  store double 0.000000e+00, ptr %21, align 8, !tbaa !31
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %208

208:                                              ; preds = %256, %207
  %209 = load i32, ptr %6, align 4, !tbaa !14
  %210 = load i32, ptr %8, align 4, !tbaa !14
  %211 = icmp slt i32 %209, %210
  br i1 %211, label %212, label %259

212:                                              ; preds = %208
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %213

213:                                              ; preds = %252, %212
  %214 = load i32, ptr %5, align 4, !tbaa !14
  %215 = load i32, ptr %7, align 4, !tbaa !14
  %216 = icmp slt i32 %214, %215
  br i1 %216, label %217, label %255

217:                                              ; preds = %213
  %218 = load i32, ptr %11, align 4, !tbaa !14
  %219 = icmp eq i32 %218, 0
  br i1 %219, label %220, label %240

220:                                              ; preds = %217
  %221 = load i32, ptr %12, align 4, !tbaa !14
  %222 = icmp eq i32 %221, 0
  br i1 %222, label %223, label %240

223:                                              ; preds = %220
  %224 = load i32, ptr %13, align 4, !tbaa !14
  %225 = icmp eq i32 %224, 0
  br i1 %225, label %226, label %240

226:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %227 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %227, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %228 = load ptr, ptr %22, align 8, !tbaa !5
  %229 = load i32, ptr %5, align 4, !tbaa !14
  %230 = load i32, ptr %6, align 4, !tbaa !14
  %231 = load i32, ptr %9, align 4, !tbaa !14
  %232 = load ptr, ptr %4, align 8, !tbaa !5
  %233 = call i32 @libxsmm_elementwise_get_index(i32 noundef %229, i32 noundef %230, i32 noundef %231, ptr noundef %232, i32 noundef 0)
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %228, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !31
  store double %236, ptr %23, align 8, !tbaa !31
  %237 = load double, ptr %23, align 8, !tbaa !31
  %238 = load double, ptr %21, align 8, !tbaa !31
  %239 = fadd double %238, %237
  store double %239, ptr %21, align 8, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %251

240:                                              ; preds = %223, %220, %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %241 = load ptr, ptr %16, align 8, !tbaa !5
  %242 = load i32, ptr %5, align 4, !tbaa !14
  %243 = load i32, ptr %6, align 4, !tbaa !14
  %244 = load i32, ptr %9, align 4, !tbaa !14
  %245 = load i32, ptr %11, align 4, !tbaa !14
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = call float @libxsmm_elementwise_get_float_value(ptr noundef %241, i32 noundef %242, i32 noundef %243, i32 noundef %244, i32 noundef %245, ptr noundef %246, i32 noundef 0)
  store float %247, ptr %24, align 4, !tbaa !29
  %248 = load float, ptr %24, align 4, !tbaa !29
  %249 = load float, ptr %20, align 4, !tbaa !29
  %250 = fadd float %249, %248
  store float %250, ptr %20, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %251

251:                                              ; preds = %240, %226
  br label %252

252:                                              ; preds = %251
  %253 = load i32, ptr %5, align 4, !tbaa !14
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %5, align 4, !tbaa !14
  br label %213, !llvm.loop !33

255:                                              ; preds = %213
  br label %256

256:                                              ; preds = %255
  %257 = load i32, ptr %6, align 4, !tbaa !14
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %6, align 4, !tbaa !14
  br label %208, !llvm.loop !35

259:                                              ; preds = %208
  %260 = load i32, ptr %11, align 4, !tbaa !14
  %261 = icmp eq i32 %260, 0
  br i1 %261, label %262, label %273

262:                                              ; preds = %259
  %263 = load i32, ptr %12, align 4, !tbaa !14
  %264 = icmp eq i32 %263, 0
  br i1 %264, label %265, label %273

265:                                              ; preds = %262
  %266 = load i32, ptr %13, align 4, !tbaa !14
  %267 = icmp eq i32 %266, 0
  br i1 %267, label %268, label %273

268:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %269 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %269, ptr %25, align 8, !tbaa !5
  %270 = load double, ptr %21, align 8, !tbaa !31
  %271 = load ptr, ptr %25, align 8, !tbaa !5
  %272 = getelementptr inbounds double, ptr %271, i64 0
  store double %270, ptr %272, align 8, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %277

273:                                              ; preds = %265, %262, %259
  %274 = load ptr, ptr %17, align 8, !tbaa !5
  %275 = load i32, ptr %10, align 4, !tbaa !14
  %276 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %274, ptr noundef %20, i32 noundef 0, i32 noundef 0, i32 noundef %275, i32 noundef 0, i32 noundef %276, ptr noundef null, i32 noundef 0)
  br label %277

277:                                              ; preds = %273, %268
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %1705

278:                                              ; preds = %167
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %279, i32 0, i32 10
  %281 = load i16, ptr %280, align 1, !tbaa !9
  %282 = zext i16 %281 to i32
  %283 = icmp eq i32 %282, 23
  br i1 %283, label %284, label %372

284:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %285, i32 0, i32 0
  %287 = load i32, ptr %286, align 1, !tbaa !13
  store i32 %287, ptr %26, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %288, i32 0, i32 1
  %290 = load i32, ptr %289, align 1, !tbaa !21
  store i32 %290, ptr %27, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %291 = load ptr, ptr %4, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %291, i32 0, i32 2
  %293 = load i32, ptr %292, align 1, !tbaa !22
  store i32 %293, ptr %28, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  store i32 0, ptr %29, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  store i32 0, ptr %30, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !14
  %294 = load ptr, ptr %4, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %294, i32 0, i32 3
  %296 = load i32, ptr %295, align 1, !tbaa !23
  store i32 %296, ptr %8, align 4, !tbaa !14
  store i32 0, ptr %30, align 4, !tbaa !14
  br label %297

297:                                              ; preds = %368, %284
  %298 = load i32, ptr %30, align 4, !tbaa !14
  %299 = load i32, ptr %28, align 4, !tbaa !14
  %300 = load i32, ptr %26, align 4, !tbaa !14
  %301 = sdiv i32 %299, %300
  %302 = icmp slt i32 %298, %301
  br i1 %302, label %303, label %371

303:                                              ; preds = %297
  store i32 0, ptr %29, align 4, !tbaa !14
  br label %304

304:                                              ; preds = %364, %303
  %305 = load i32, ptr %29, align 4, !tbaa !14
  %306 = load i32, ptr %26, align 4, !tbaa !14
  %307 = icmp slt i32 %305, %306
  br i1 %307, label %308, label %367

308:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %309 = load i32, ptr %30, align 4, !tbaa !14
  %310 = load i32, ptr %26, align 4, !tbaa !14
  %311 = mul nsw i32 %309, %310
  %312 = load i32, ptr %29, align 4, !tbaa !14
  %313 = add nsw i32 %311, %312
  store i32 %313, ptr %33, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  store float 0.000000e+00, ptr %34, align 4, !tbaa !29
  store i32 0, ptr %31, align 4, !tbaa !14
  br label %314

314:                                              ; preds = %356, %308
  %315 = load i32, ptr %31, align 4, !tbaa !14
  %316 = load i32, ptr %8, align 4, !tbaa !14
  %317 = load i32, ptr %27, align 4, !tbaa !14
  %318 = sdiv i32 %316, %317
  %319 = icmp slt i32 %315, %318
  br i1 %319, label %320, label %359

320:                                              ; preds = %314
  store i32 0, ptr %32, align 4, !tbaa !14
  br label %321

321:                                              ; preds = %352, %320
  %322 = load i32, ptr %32, align 4, !tbaa !14
  %323 = load i32, ptr %27, align 4, !tbaa !14
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %325, label %355

325:                                              ; preds = %321
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %326 = load i32, ptr %31, align 4, !tbaa !14
  %327 = load i32, ptr %28, align 4, !tbaa !14
  %328 = mul nsw i32 %326, %327
  %329 = load i32, ptr %27, align 4, !tbaa !14
  %330 = mul nsw i32 %328, %329
  %331 = load i32, ptr %30, align 4, !tbaa !14
  %332 = load i32, ptr %27, align 4, !tbaa !14
  %333 = mul nsw i32 %331, %332
  %334 = load i32, ptr %26, align 4, !tbaa !14
  %335 = mul nsw i32 %333, %334
  %336 = add nsw i32 %330, %335
  %337 = load i32, ptr %32, align 4, !tbaa !14
  %338 = load i32, ptr %26, align 4, !tbaa !14
  %339 = mul nsw i32 %337, %338
  %340 = add nsw i32 %336, %339
  %341 = load i32, ptr %29, align 4, !tbaa !14
  %342 = add nsw i32 %340, %341
  store i32 %342, ptr %35, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %343 = load ptr, ptr %16, align 8, !tbaa !5
  %344 = load i32, ptr %35, align 4, !tbaa !14
  %345 = load i32, ptr %35, align 4, !tbaa !14
  %346 = load i32, ptr %11, align 4, !tbaa !14
  %347 = load ptr, ptr %4, align 8, !tbaa !5
  %348 = call float @libxsmm_elementwise_get_float_value(ptr noundef %343, i32 noundef %344, i32 noundef 0, i32 noundef %345, i32 noundef %346, ptr noundef %347, i32 noundef 0)
  store float %348, ptr %36, align 4, !tbaa !29
  %349 = load float, ptr %36, align 4, !tbaa !29
  %350 = load float, ptr %34, align 4, !tbaa !29
  %351 = fadd float %350, %349
  store float %351, ptr %34, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %352

352:                                              ; preds = %325
  %353 = load i32, ptr %32, align 4, !tbaa !14
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %32, align 4, !tbaa !14
  br label %321, !llvm.loop !36

355:                                              ; preds = %321
  br label %356

356:                                              ; preds = %355
  %357 = load i32, ptr %31, align 4, !tbaa !14
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %31, align 4, !tbaa !14
  br label %314, !llvm.loop !37

359:                                              ; preds = %314
  %360 = load ptr, ptr %17, align 8, !tbaa !5
  %361 = load i32, ptr %33, align 4, !tbaa !14
  %362 = load i32, ptr %10, align 4, !tbaa !14
  %363 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %360, ptr noundef %34, i32 noundef %361, i32 noundef 0, i32 noundef %362, i32 noundef 0, i32 noundef %363, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %364

364:                                              ; preds = %359
  %365 = load i32, ptr %29, align 4, !tbaa !14
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %29, align 4, !tbaa !14
  br label %304, !llvm.loop !38

367:                                              ; preds = %304
  br label %368

368:                                              ; preds = %367
  %369 = load i32, ptr %30, align 4, !tbaa !14
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %30, align 4, !tbaa !14
  br label %297, !llvm.loop !39

371:                                              ; preds = %297
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  br label %1704

372:                                              ; preds = %278
  %373 = load ptr, ptr %4, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %373, i32 0, i32 10
  %375 = load i16, ptr %374, align 1, !tbaa !9
  %376 = zext i16 %375 to i32
  %377 = icmp eq i32 %376, 5
  br i1 %377, label %390, label %378

378:                                              ; preds = %372
  %379 = load ptr, ptr %4, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %379, i32 0, i32 10
  %381 = load i16, ptr %380, align 1, !tbaa !9
  %382 = zext i16 %381 to i32
  %383 = icmp eq i32 %382, 34
  br i1 %383, label %390, label %384

384:                                              ; preds = %378
  %385 = load ptr, ptr %4, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %385, i32 0, i32 10
  %387 = load i16, ptr %386, align 1, !tbaa !9
  %388 = zext i16 %387 to i32
  %389 = icmp eq i32 %388, 36
  br i1 %389, label %390, label %525

390:                                              ; preds = %384, %378, %372
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %391 = load i32, ptr %14, align 4, !tbaa !14
  %392 = and i32 %391, 1
  %393 = icmp ugt i32 %392, 0
  %394 = zext i1 %393 to i64
  %395 = select i1 %393, i32 1, i32 0
  store i32 %395, ptr %37, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %396 = load i32, ptr %37, align 4, !tbaa !14
  %397 = icmp eq i32 %396, 0
  br i1 %397, label %398, label %400

398:                                              ; preds = %390
  %399 = load i32, ptr %10, align 4, !tbaa !14
  br label %405

400:                                              ; preds = %390
  %401 = load i32, ptr %10, align 4, !tbaa !14
  %402 = add nsw i32 %401, 15
  %403 = sdiv i32 %402, 16
  %404 = mul nsw i32 %403, 16
  br label %405

405:                                              ; preds = %400, %398
  %406 = phi i32 [ %399, %398 ], [ %404, %400 ]
  store i32 %406, ptr %38, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %407 = load ptr, ptr %4, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %407, i32 0, i32 10
  %409 = load i16, ptr %408, align 1, !tbaa !9
  %410 = zext i16 %409 to i32
  %411 = icmp eq i32 %410, 5
  br i1 %411, label %412, label %413

412:                                              ; preds = %405
  br label %419

413:                                              ; preds = %405
  %414 = load ptr, ptr %3, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %414, i32 0, i32 0
  %416 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %415, i32 0, i32 0
  %417 = load ptr, ptr %416, align 8, !tbaa !15
  %418 = load float, ptr %417, align 4, !tbaa !29
  br label %419

419:                                              ; preds = %413, %412
  %420 = phi float [ 1.000000e+00, %412 ], [ %418, %413 ]
  store float %420, ptr %39, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %421 = load ptr, ptr %3, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %421, i32 0, i32 2
  %423 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %422, i32 0, i32 1
  %424 = load ptr, ptr %423, align 8, !tbaa !28
  store ptr %424, ptr %40, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %425

425:                                              ; preds = %521, %419
  %426 = load i32, ptr %6, align 4, !tbaa !14
  %427 = load i32, ptr %8, align 4, !tbaa !14
  %428 = icmp slt i32 %426, %427
  br i1 %428, label %429, label %524

429:                                              ; preds = %425
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %430

430:                                              ; preds = %517, %429
  %431 = load i32, ptr %5, align 4, !tbaa !14
  %432 = load i32, ptr %7, align 4, !tbaa !14
  %433 = icmp slt i32 %431, %432
  br i1 %433, label %434, label %520

434:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %435 = load ptr, ptr %16, align 8, !tbaa !5
  %436 = load i32, ptr %5, align 4, !tbaa !14
  %437 = load i32, ptr %6, align 4, !tbaa !14
  %438 = load i32, ptr %9, align 4, !tbaa !14
  %439 = load i32, ptr %11, align 4, !tbaa !14
  %440 = load ptr, ptr %4, align 8, !tbaa !5
  %441 = call float @libxsmm_elementwise_get_float_value(ptr noundef %435, i32 noundef %436, i32 noundef %437, i32 noundef %438, i32 noundef %439, ptr noundef %440, i32 noundef 0)
  store float %441, ptr %41, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  store float 0.000000e+00, ptr %42, align 4, !tbaa !29
  %442 = load ptr, ptr %4, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %442, i32 0, i32 10
  %444 = load i16, ptr %443, align 1, !tbaa !9
  %445 = zext i16 %444 to i32
  %446 = icmp eq i32 %445, 5
  br i1 %446, label %447, label %455

447:                                              ; preds = %434
  %448 = load float, ptr %41, align 4, !tbaa !29
  %449 = fcmp ole float %448, 0.000000e+00
  br i1 %449, label %450, label %451

450:                                              ; preds = %447
  br label %453

451:                                              ; preds = %447
  %452 = load float, ptr %41, align 4, !tbaa !29
  br label %453

453:                                              ; preds = %451, %450
  %454 = phi float [ 0.000000e+00, %450 ], [ %452, %451 ]
  store float %454, ptr %42, align 4, !tbaa !29
  br label %494

455:                                              ; preds = %434
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %456, i32 0, i32 10
  %458 = load i16, ptr %457, align 1, !tbaa !9
  %459 = zext i16 %458 to i32
  %460 = icmp eq i32 %459, 34
  br i1 %460, label %461, label %472

461:                                              ; preds = %455
  %462 = load float, ptr %41, align 4, !tbaa !29
  %463 = fcmp ole float %462, 0.000000e+00
  br i1 %463, label %464, label %468

464:                                              ; preds = %461
  %465 = load float, ptr %39, align 4, !tbaa !29
  %466 = load float, ptr %41, align 4, !tbaa !29
  %467 = fmul float %465, %466
  br label %470

468:                                              ; preds = %461
  %469 = load float, ptr %41, align 4, !tbaa !29
  br label %470

470:                                              ; preds = %468, %464
  %471 = phi float [ %467, %464 ], [ %469, %468 ]
  store float %471, ptr %42, align 4, !tbaa !29
  br label %493

472:                                              ; preds = %455
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %473, i32 0, i32 10
  %475 = load i16, ptr %474, align 1, !tbaa !9
  %476 = zext i16 %475 to i32
  %477 = icmp eq i32 %476, 36
  br i1 %477, label %478, label %491

478:                                              ; preds = %472
  %479 = load float, ptr %41, align 4, !tbaa !29
  %480 = fcmp ole float %479, 0.000000e+00
  br i1 %480, label %481, label %487

481:                                              ; preds = %478
  %482 = load float, ptr %39, align 4, !tbaa !29
  %483 = load float, ptr %41, align 4, !tbaa !29
  %484 = call float @expf(float noundef %483) #5, !tbaa !14
  %485 = fsub float %484, 1.000000e+00
  %486 = fmul float %482, %485
  br label %489

487:                                              ; preds = %478
  %488 = load float, ptr %41, align 4, !tbaa !29
  br label %489

489:                                              ; preds = %487, %481
  %490 = phi float [ %486, %481 ], [ %488, %487 ]
  store float %490, ptr %42, align 4, !tbaa !29
  br label %492

491:                                              ; preds = %472
  br label %492

492:                                              ; preds = %491, %489
  br label %493

493:                                              ; preds = %492, %470
  br label %494

494:                                              ; preds = %493, %453
  %495 = load ptr, ptr %17, align 8, !tbaa !5
  %496 = load i32, ptr %5, align 4, !tbaa !14
  %497 = load i32, ptr %6, align 4, !tbaa !14
  %498 = load i32, ptr %10, align 4, !tbaa !14
  %499 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %495, ptr noundef %42, i32 noundef %496, i32 noundef %497, i32 noundef %498, i32 noundef 0, i32 noundef %499, ptr noundef null, i32 noundef 0)
  %500 = load i32, ptr %37, align 4, !tbaa !14
  %501 = icmp ugt i32 %500, 0
  br i1 %501, label %502, label %516

502:                                              ; preds = %494
  %503 = load float, ptr %41, align 4, !tbaa !29
  %504 = fcmp ole float %503, 0.000000e+00
  br i1 %504, label %505, label %510

505:                                              ; preds = %502
  %506 = load ptr, ptr %40, align 8, !tbaa !5
  %507 = load i32, ptr %5, align 4, !tbaa !14
  %508 = load i32, ptr %6, align 4, !tbaa !14
  %509 = load i32, ptr %38, align 4, !tbaa !14
  call void @libxsmm_zero_bit(ptr noundef %506, i32 noundef %507, i32 noundef %508, i32 noundef %509)
  br label %515

510:                                              ; preds = %502
  %511 = load ptr, ptr %40, align 8, !tbaa !5
  %512 = load i32, ptr %5, align 4, !tbaa !14
  %513 = load i32, ptr %6, align 4, !tbaa !14
  %514 = load i32, ptr %38, align 4, !tbaa !14
  call void @libxsmm_set_bit(ptr noundef %511, i32 noundef %512, i32 noundef %513, i32 noundef %514)
  br label %515

515:                                              ; preds = %510, %505
  br label %516

516:                                              ; preds = %515, %494
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  br label %517

517:                                              ; preds = %516
  %518 = load i32, ptr %5, align 4, !tbaa !14
  %519 = add nsw i32 %518, 1
  store i32 %519, ptr %5, align 4, !tbaa !14
  br label %430, !llvm.loop !40

520:                                              ; preds = %430
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %6, align 4, !tbaa !14
  %523 = add nsw i32 %522, 1
  store i32 %523, ptr %6, align 4, !tbaa !14
  br label %425, !llvm.loop !41

524:                                              ; preds = %425
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  br label %1703

525:                                              ; preds = %384
  %526 = load ptr, ptr %4, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %526, i32 0, i32 10
  %528 = load i16, ptr %527, align 1, !tbaa !9
  %529 = zext i16 %528 to i32
  %530 = icmp eq i32 %529, 6
  br i1 %530, label %543, label %531

531:                                              ; preds = %525
  %532 = load ptr, ptr %4, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %532, i32 0, i32 10
  %534 = load i16, ptr %533, align 1, !tbaa !9
  %535 = zext i16 %534 to i32
  %536 = icmp eq i32 %535, 35
  br i1 %536, label %543, label %537

537:                                              ; preds = %531
  %538 = load ptr, ptr %4, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %538, i32 0, i32 10
  %540 = load i16, ptr %539, align 1, !tbaa !9
  %541 = zext i16 %540 to i32
  %542 = icmp eq i32 %541, 37
  br i1 %542, label %543, label %684

543:                                              ; preds = %537, %531, %525
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %544 = load i32, ptr %14, align 4, !tbaa !14
  %545 = and i32 %544, 1
  %546 = icmp ugt i32 %545, 0
  %547 = zext i1 %546 to i64
  %548 = select i1 %546, i32 1, i32 0
  store i32 %548, ptr %43, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %549 = load i32, ptr %43, align 4, !tbaa !14
  %550 = icmp eq i32 %549, 0
  br i1 %550, label %551, label %553

551:                                              ; preds = %543
  %552 = load i32, ptr %9, align 4, !tbaa !14
  br label %558

553:                                              ; preds = %543
  %554 = load i32, ptr %9, align 4, !tbaa !14
  %555 = add nsw i32 %554, 15
  %556 = sdiv i32 %555, 16
  %557 = mul nsw i32 %556, 16
  br label %558

558:                                              ; preds = %553, %551
  %559 = phi i32 [ %552, %551 ], [ %557, %553 ]
  store i32 %559, ptr %44, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %560, i32 0, i32 10
  %562 = load i16, ptr %561, align 1, !tbaa !9
  %563 = zext i16 %562 to i32
  %564 = icmp eq i32 %563, 6
  br i1 %564, label %565, label %566

565:                                              ; preds = %558
  br label %572

566:                                              ; preds = %558
  %567 = load ptr, ptr %3, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %567, i32 0, i32 0
  %569 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %568, i32 0, i32 0
  %570 = load ptr, ptr %569, align 8, !tbaa !15
  %571 = load float, ptr %570, align 4, !tbaa !29
  br label %572

572:                                              ; preds = %566, %565
  %573 = phi float [ 1.000000e+00, %565 ], [ %571, %566 ]
  store float %573, ptr %45, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %574 = load ptr, ptr %3, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %574, i32 0, i32 1
  %576 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %575, i32 0, i32 1
  %577 = load ptr, ptr %576, align 8, !tbaa !42
  store ptr %577, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %578 = load ptr, ptr %3, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %578, i32 0, i32 1
  %580 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %579, i32 0, i32 1
  %581 = load ptr, ptr %580, align 8, !tbaa !42
  store ptr %581, ptr %47, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %582

582:                                              ; preds = %680, %572
  %583 = load i32, ptr %6, align 4, !tbaa !14
  %584 = load i32, ptr %8, align 4, !tbaa !14
  %585 = icmp slt i32 %583, %584
  br i1 %585, label %586, label %683

586:                                              ; preds = %582
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %587

587:                                              ; preds = %676, %586
  %588 = load i32, ptr %5, align 4, !tbaa !14
  %589 = load i32, ptr %7, align 4, !tbaa !14
  %590 = icmp slt i32 %588, %589
  br i1 %590, label %591, label %679

591:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %592 = load ptr, ptr %16, align 8, !tbaa !5
  %593 = load i32, ptr %5, align 4, !tbaa !14
  %594 = load i32, ptr %6, align 4, !tbaa !14
  %595 = load i32, ptr %9, align 4, !tbaa !14
  %596 = load i32, ptr %11, align 4, !tbaa !14
  %597 = load ptr, ptr %4, align 8, !tbaa !5
  %598 = call float @libxsmm_elementwise_get_float_value(ptr noundef %592, i32 noundef %593, i32 noundef %594, i32 noundef %595, i32 noundef %596, ptr noundef %597, i32 noundef 0)
  store float %598, ptr %48, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  store float 0.000000e+00, ptr %49, align 4, !tbaa !29
  %599 = load ptr, ptr %4, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %599, i32 0, i32 10
  %601 = load i16, ptr %600, align 1, !tbaa !9
  %602 = zext i16 %601 to i32
  %603 = icmp eq i32 %602, 6
  br i1 %603, label %604, label %618

604:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #5
  %605 = load ptr, ptr %46, align 8, !tbaa !5
  %606 = load i32, ptr %5, align 4, !tbaa !14
  %607 = load i32, ptr %6, align 4, !tbaa !14
  %608 = load i32, ptr %44, align 4, !tbaa !14
  %609 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %605, i32 noundef %606, i32 noundef %607, i32 noundef %608)
  store i8 %609, ptr %50, align 1, !tbaa !43
  %610 = load i8, ptr %50, align 1, !tbaa !43
  %611 = zext i8 %610 to i32
  %612 = icmp eq i32 %611, 0
  br i1 %612, label %613, label %614

613:                                              ; preds = %604
  br label %616

614:                                              ; preds = %604
  %615 = load float, ptr %48, align 4, !tbaa !29
  br label %616

616:                                              ; preds = %614, %613
  %617 = phi float [ 0.000000e+00, %613 ], [ %615, %614 ]
  store float %617, ptr %49, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #5
  br label %670

618:                                              ; preds = %591
  %619 = load ptr, ptr %4, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %619, i32 0, i32 10
  %621 = load i16, ptr %620, align 1, !tbaa !9
  %622 = zext i16 %621 to i32
  %623 = icmp eq i32 %622, 35
  br i1 %623, label %624, label %641

624:                                              ; preds = %618
  call void @llvm.lifetime.start.p0(i64 1, ptr %51) #5
  %625 = load ptr, ptr %46, align 8, !tbaa !5
  %626 = load i32, ptr %5, align 4, !tbaa !14
  %627 = load i32, ptr %6, align 4, !tbaa !14
  %628 = load i32, ptr %44, align 4, !tbaa !14
  %629 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %625, i32 noundef %626, i32 noundef %627, i32 noundef %628)
  store i8 %629, ptr %51, align 1, !tbaa !43
  %630 = load i8, ptr %51, align 1, !tbaa !43
  %631 = zext i8 %630 to i32
  %632 = icmp eq i32 %631, 0
  br i1 %632, label %633, label %637

633:                                              ; preds = %624
  %634 = load float, ptr %45, align 4, !tbaa !29
  %635 = load float, ptr %48, align 4, !tbaa !29
  %636 = fmul float %634, %635
  br label %639

637:                                              ; preds = %624
  %638 = load float, ptr %48, align 4, !tbaa !29
  br label %639

639:                                              ; preds = %637, %633
  %640 = phi float [ %636, %633 ], [ %638, %637 ]
  store float %640, ptr %49, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 1, ptr %51) #5
  br label %669

641:                                              ; preds = %618
  %642 = load ptr, ptr %4, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %642, i32 0, i32 10
  %644 = load i16, ptr %643, align 1, !tbaa !9
  %645 = zext i16 %644 to i32
  %646 = icmp eq i32 %645, 37
  br i1 %646, label %647, label %667

647:                                              ; preds = %641
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %648 = load ptr, ptr %47, align 8, !tbaa !5
  %649 = load i32, ptr %5, align 4, !tbaa !14
  %650 = load i32, ptr %6, align 4, !tbaa !14
  %651 = load i32, ptr %9, align 4, !tbaa !14
  %652 = load i32, ptr %11, align 4, !tbaa !14
  %653 = load ptr, ptr %4, align 8, !tbaa !5
  %654 = call float @libxsmm_elementwise_get_float_value(ptr noundef %648, i32 noundef %649, i32 noundef %650, i32 noundef %651, i32 noundef %652, ptr noundef %653, i32 noundef 0)
  store float %654, ptr %52, align 4, !tbaa !29
  %655 = load float, ptr %52, align 4, !tbaa !29
  %656 = fcmp ogt float %655, 0.000000e+00
  br i1 %656, label %657, label %659

657:                                              ; preds = %647
  %658 = load float, ptr %48, align 4, !tbaa !29
  br label %665

659:                                              ; preds = %647
  %660 = load float, ptr %48, align 4, !tbaa !29
  %661 = load float, ptr %52, align 4, !tbaa !29
  %662 = load float, ptr %45, align 4, !tbaa !29
  %663 = fadd float %661, %662
  %664 = fmul float %660, %663
  br label %665

665:                                              ; preds = %659, %657
  %666 = phi float [ %658, %657 ], [ %664, %659 ]
  store float %666, ptr %49, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  br label %668

667:                                              ; preds = %641
  br label %668

668:                                              ; preds = %667, %665
  br label %669

669:                                              ; preds = %668, %639
  br label %670

670:                                              ; preds = %669, %616
  %671 = load ptr, ptr %17, align 8, !tbaa !5
  %672 = load i32, ptr %5, align 4, !tbaa !14
  %673 = load i32, ptr %6, align 4, !tbaa !14
  %674 = load i32, ptr %10, align 4, !tbaa !14
  %675 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %671, ptr noundef %49, i32 noundef %672, i32 noundef %673, i32 noundef %674, i32 noundef 0, i32 noundef %675, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %676

676:                                              ; preds = %670
  %677 = load i32, ptr %5, align 4, !tbaa !14
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %5, align 4, !tbaa !14
  br label %587, !llvm.loop !44

679:                                              ; preds = %587
  br label %680

680:                                              ; preds = %679
  %681 = load i32, ptr %6, align 4, !tbaa !14
  %682 = add nsw i32 %681, 1
  store i32 %682, ptr %6, align 4, !tbaa !14
  br label %582, !llvm.loop !45

683:                                              ; preds = %582
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  br label %1702

684:                                              ; preds = %537
  %685 = load ptr, ptr %4, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %685, i32 0, i32 10
  %687 = load i16, ptr %686, align 1, !tbaa !9
  %688 = zext i16 %687 to i32
  %689 = icmp eq i32 %688, 42
  br i1 %689, label %690, label %918

690:                                              ; preds = %684
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %691 = load i32, ptr %14, align 4, !tbaa !14
  %692 = and i32 %691, 1024
  %693 = icmp ugt i32 %692, 0
  %694 = zext i1 %693 to i64
  %695 = select i1 %693, i32 1, i32 0
  store i32 %695, ptr %53, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  %696 = load i32, ptr %14, align 4, !tbaa !14
  %697 = and i32 %696, 16
  %698 = icmp ugt i32 %697, 0
  %699 = zext i1 %698 to i64
  %700 = select i1 %698, i32 1, i32 0
  store i32 %700, ptr %54, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %701 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %701, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %702 = load i32, ptr %53, align 4, !tbaa !14
  %703 = icmp ugt i32 %702, 0
  br i1 %703, label %704, label %705

704:                                              ; preds = %690
  br label %711

705:                                              ; preds = %690
  %706 = load ptr, ptr %3, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %706, i32 0, i32 1
  %708 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %707, i32 0, i32 1
  %709 = load ptr, ptr %708, align 8, !tbaa !42
  %710 = load float, ptr %709, align 4, !tbaa !29
  br label %711

711:                                              ; preds = %705, %704
  %712 = phi float [ 1.000000e+00, %704 ], [ %710, %705 ]
  store float %712, ptr %56, align 4, !tbaa !29
  %713 = load i32, ptr %11, align 4, !tbaa !14
  %714 = icmp eq i32 %713, 1
  br i1 %714, label %715, label %789

715:                                              ; preds = %711
  %716 = load i32, ptr %12, align 4, !tbaa !14
  %717 = icmp eq i32 %716, 12
  br i1 %717, label %718, label %789

718:                                              ; preds = %715
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  %719 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %719, ptr %57, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %720

720:                                              ; preds = %785, %718
  %721 = load i32, ptr %6, align 4, !tbaa !14
  %722 = load i32, ptr %8, align 4, !tbaa !14
  %723 = icmp slt i32 %721, %722
  br i1 %723, label %724, label %788

724:                                              ; preds = %720
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %725

725:                                              ; preds = %781, %724
  %726 = load i32, ptr %5, align 4, !tbaa !14
  %727 = load i32, ptr %7, align 4, !tbaa !14
  %728 = icmp slt i32 %726, %727
  br i1 %728, label %729, label %784

729:                                              ; preds = %725
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %730 = load ptr, ptr %55, align 8, !tbaa !5
  %731 = load i32, ptr %5, align 4, !tbaa !14
  %732 = load i32, ptr %6, align 4, !tbaa !14
  %733 = load i32, ptr %9, align 4, !tbaa !14
  %734 = load ptr, ptr %4, align 8, !tbaa !5
  %735 = call i32 @libxsmm_elementwise_get_index(i32 noundef %731, i32 noundef %732, i32 noundef %733, ptr noundef %734, i32 noundef 0)
  %736 = sext i32 %735 to i64
  %737 = getelementptr inbounds float, ptr %730, i64 %736
  %738 = load float, ptr %737, align 4, !tbaa !29
  store float %738, ptr %58, align 4, !tbaa !29
  %739 = load i32, ptr %54, align 4, !tbaa !14
  %740 = icmp ugt i32 %739, 0
  br i1 %740, label %741, label %764

741:                                              ; preds = %729
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  %742 = load float, ptr %58, align 4, !tbaa !29
  %743 = load float, ptr %56, align 4, !tbaa !29
  %744 = fmul float %742, %743
  %745 = call float @llvm.nearbyint.f32(float %744)
  store float %745, ptr %59, align 4, !tbaa !29
  %746 = load float, ptr %59, align 4, !tbaa !29
  %747 = fcmp olt float %746, -1.280000e+02
  br i1 %747, label %748, label %749

748:                                              ; preds = %741
  store float -1.280000e+02, ptr %59, align 4, !tbaa !29
  br label %749

749:                                              ; preds = %748, %741
  %750 = load float, ptr %59, align 4, !tbaa !29
  %751 = fcmp ogt float %750, 1.270000e+02
  br i1 %751, label %752, label %753

752:                                              ; preds = %749
  store float 1.270000e+02, ptr %59, align 4, !tbaa !29
  br label %753

753:                                              ; preds = %752, %749
  %754 = load float, ptr %59, align 4, !tbaa !29
  %755 = fptosi float %754 to i8
  %756 = load ptr, ptr %57, align 8, !tbaa !5
  %757 = load i32, ptr %6, align 4, !tbaa !14
  %758 = load i32, ptr %10, align 4, !tbaa !14
  %759 = mul nsw i32 %757, %758
  %760 = load i32, ptr %5, align 4, !tbaa !14
  %761 = add nsw i32 %759, %760
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds i8, ptr %756, i64 %762
  store i8 %755, ptr %763, align 1, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  br label %780

764:                                              ; preds = %729
  %765 = load float, ptr %58, align 4, !tbaa !29
  %766 = load float, ptr %56, align 4, !tbaa !29
  %767 = fmul float %765, %766
  %768 = call float @llvm.nearbyint.f32(float %767)
  %769 = fptosi float %768 to i32
  %770 = and i32 255, %769
  %771 = trunc i32 %770 to i8
  %772 = load ptr, ptr %57, align 8, !tbaa !5
  %773 = load i32, ptr %6, align 4, !tbaa !14
  %774 = load i32, ptr %10, align 4, !tbaa !14
  %775 = mul nsw i32 %773, %774
  %776 = load i32, ptr %5, align 4, !tbaa !14
  %777 = add nsw i32 %775, %776
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i8, ptr %772, i64 %778
  store i8 %771, ptr %779, align 1, !tbaa !43
  br label %780

780:                                              ; preds = %764, %753
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  br label %781

781:                                              ; preds = %780
  %782 = load i32, ptr %5, align 4, !tbaa !14
  %783 = add nsw i32 %782, 1
  store i32 %783, ptr %5, align 4, !tbaa !14
  br label %725, !llvm.loop !46

784:                                              ; preds = %725
  br label %785

785:                                              ; preds = %784
  %786 = load i32, ptr %6, align 4, !tbaa !14
  %787 = add nsw i32 %786, 1
  store i32 %787, ptr %6, align 4, !tbaa !14
  br label %720, !llvm.loop !47

788:                                              ; preds = %720
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  br label %917

789:                                              ; preds = %715, %711
  %790 = load i32, ptr %11, align 4, !tbaa !14
  %791 = icmp eq i32 %790, 1
  br i1 %791, label %792, label %866

792:                                              ; preds = %789
  %793 = load i32, ptr %12, align 4, !tbaa !14
  %794 = icmp eq i32 %793, 10
  br i1 %794, label %795, label %866

795:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  %796 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %796, ptr %60, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %797

797:                                              ; preds = %862, %795
  %798 = load i32, ptr %6, align 4, !tbaa !14
  %799 = load i32, ptr %8, align 4, !tbaa !14
  %800 = icmp slt i32 %798, %799
  br i1 %800, label %801, label %865

801:                                              ; preds = %797
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %802

802:                                              ; preds = %858, %801
  %803 = load i32, ptr %5, align 4, !tbaa !14
  %804 = load i32, ptr %7, align 4, !tbaa !14
  %805 = icmp slt i32 %803, %804
  br i1 %805, label %806, label %861

806:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %807 = load ptr, ptr %55, align 8, !tbaa !5
  %808 = load i32, ptr %5, align 4, !tbaa !14
  %809 = load i32, ptr %6, align 4, !tbaa !14
  %810 = load i32, ptr %9, align 4, !tbaa !14
  %811 = load ptr, ptr %4, align 8, !tbaa !5
  %812 = call i32 @libxsmm_elementwise_get_index(i32 noundef %808, i32 noundef %809, i32 noundef %810, ptr noundef %811, i32 noundef 0)
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds float, ptr %807, i64 %813
  %815 = load float, ptr %814, align 4, !tbaa !29
  store float %815, ptr %61, align 4, !tbaa !29
  %816 = load i32, ptr %54, align 4, !tbaa !14
  %817 = icmp ugt i32 %816, 0
  br i1 %817, label %818, label %841

818:                                              ; preds = %806
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %819 = load float, ptr %61, align 4, !tbaa !29
  %820 = load float, ptr %56, align 4, !tbaa !29
  %821 = fmul float %819, %820
  %822 = call float @llvm.nearbyint.f32(float %821)
  store float %822, ptr %62, align 4, !tbaa !29
  %823 = load float, ptr %62, align 4, !tbaa !29
  %824 = fcmp olt float %823, -3.276800e+04
  br i1 %824, label %825, label %826

825:                                              ; preds = %818
  store float -3.276800e+04, ptr %62, align 4, !tbaa !29
  br label %826

826:                                              ; preds = %825, %818
  %827 = load float, ptr %62, align 4, !tbaa !29
  %828 = fcmp ogt float %827, 3.276700e+04
  br i1 %828, label %829, label %830

829:                                              ; preds = %826
  store float 3.276700e+04, ptr %62, align 4, !tbaa !29
  br label %830

830:                                              ; preds = %829, %826
  %831 = load float, ptr %62, align 4, !tbaa !29
  %832 = fptosi float %831 to i16
  %833 = load ptr, ptr %60, align 8, !tbaa !5
  %834 = load i32, ptr %6, align 4, !tbaa !14
  %835 = load i32, ptr %10, align 4, !tbaa !14
  %836 = mul nsw i32 %834, %835
  %837 = load i32, ptr %5, align 4, !tbaa !14
  %838 = add nsw i32 %836, %837
  %839 = sext i32 %838 to i64
  %840 = getelementptr inbounds i16, ptr %833, i64 %839
  store i16 %832, ptr %840, align 2, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  br label %857

841:                                              ; preds = %806
  %842 = load float, ptr %61, align 4, !tbaa !29
  %843 = load float, ptr %56, align 4, !tbaa !29
  %844 = fmul float %842, %843
  %845 = call float @llvm.nearbyint.f32(float %844)
  %846 = fptosi float %845 to i32
  %847 = and i32 65535, %846
  %848 = trunc i32 %847 to i16
  %849 = load ptr, ptr %60, align 8, !tbaa !5
  %850 = load i32, ptr %6, align 4, !tbaa !14
  %851 = load i32, ptr %10, align 4, !tbaa !14
  %852 = mul nsw i32 %850, %851
  %853 = load i32, ptr %5, align 4, !tbaa !14
  %854 = add nsw i32 %852, %853
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds i16, ptr %849, i64 %855
  store i16 %848, ptr %856, align 2, !tbaa !48
  br label %857

857:                                              ; preds = %841, %830
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  br label %858

858:                                              ; preds = %857
  %859 = load i32, ptr %5, align 4, !tbaa !14
  %860 = add nsw i32 %859, 1
  store i32 %860, ptr %5, align 4, !tbaa !14
  br label %802, !llvm.loop !49

861:                                              ; preds = %802
  br label %862

862:                                              ; preds = %861
  %863 = load i32, ptr %6, align 4, !tbaa !14
  %864 = add nsw i32 %863, 1
  store i32 %864, ptr %6, align 4, !tbaa !14
  br label %797, !llvm.loop !50

865:                                              ; preds = %797
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  br label %916

866:                                              ; preds = %792, %789
  %867 = load i32, ptr %11, align 4, !tbaa !14
  %868 = icmp eq i32 %867, 1
  br i1 %868, label %869, label %914

869:                                              ; preds = %866
  %870 = load i32, ptr %12, align 4, !tbaa !14
  %871 = icmp eq i32 %870, 8
  br i1 %871, label %872, label %914

872:                                              ; preds = %869
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %873 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %873, ptr %63, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %874

874:                                              ; preds = %910, %872
  %875 = load i32, ptr %6, align 4, !tbaa !14
  %876 = load i32, ptr %8, align 4, !tbaa !14
  %877 = icmp slt i32 %875, %876
  br i1 %877, label %878, label %913

878:                                              ; preds = %874
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %879

879:                                              ; preds = %906, %878
  %880 = load i32, ptr %5, align 4, !tbaa !14
  %881 = load i32, ptr %7, align 4, !tbaa !14
  %882 = icmp slt i32 %880, %881
  br i1 %882, label %883, label %909

883:                                              ; preds = %879
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #5
  %884 = load ptr, ptr %55, align 8, !tbaa !5
  %885 = load i32, ptr %5, align 4, !tbaa !14
  %886 = load i32, ptr %6, align 4, !tbaa !14
  %887 = load i32, ptr %9, align 4, !tbaa !14
  %888 = load ptr, ptr %4, align 8, !tbaa !5
  %889 = call i32 @libxsmm_elementwise_get_index(i32 noundef %885, i32 noundef %886, i32 noundef %887, ptr noundef %888, i32 noundef 0)
  %890 = sext i32 %889 to i64
  %891 = getelementptr inbounds float, ptr %884, i64 %890
  %892 = load float, ptr %891, align 4, !tbaa !29
  store float %892, ptr %64, align 4, !tbaa !29
  %893 = load float, ptr %64, align 4, !tbaa !29
  %894 = load float, ptr %56, align 4, !tbaa !29
  %895 = fmul float %893, %894
  %896 = call float @llvm.nearbyint.f32(float %895)
  %897 = fptosi float %896 to i32
  %898 = load ptr, ptr %63, align 8, !tbaa !5
  %899 = load i32, ptr %6, align 4, !tbaa !14
  %900 = load i32, ptr %10, align 4, !tbaa !14
  %901 = mul nsw i32 %899, %900
  %902 = load i32, ptr %5, align 4, !tbaa !14
  %903 = add nsw i32 %901, %902
  %904 = sext i32 %903 to i64
  %905 = getelementptr inbounds i32, ptr %898, i64 %904
  store i32 %897, ptr %905, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  br label %906

906:                                              ; preds = %883
  %907 = load i32, ptr %5, align 4, !tbaa !14
  %908 = add nsw i32 %907, 1
  store i32 %908, ptr %5, align 4, !tbaa !14
  br label %879, !llvm.loop !51

909:                                              ; preds = %879
  br label %910

910:                                              ; preds = %909
  %911 = load i32, ptr %6, align 4, !tbaa !14
  %912 = add nsw i32 %911, 1
  store i32 %912, ptr %6, align 4, !tbaa !14
  br label %874, !llvm.loop !52

913:                                              ; preds = %874
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  br label %915

914:                                              ; preds = %869, %866
  br label %915

915:                                              ; preds = %914, %913
  br label %916

916:                                              ; preds = %915, %865
  br label %917

917:                                              ; preds = %916, %788
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %1701

918:                                              ; preds = %684
  %919 = load ptr, ptr %4, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %919, i32 0, i32 10
  %921 = load i16, ptr %920, align 1, !tbaa !9
  %922 = zext i16 %921 to i32
  %923 = icmp eq i32 %922, 43
  br i1 %923, label %924, label %1086

924:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  %925 = load i32, ptr %14, align 4, !tbaa !14
  %926 = and i32 %925, 1024
  %927 = icmp ugt i32 %926, 0
  %928 = zext i1 %927 to i64
  %929 = select i1 %927, i32 1, i32 0
  store i32 %929, ptr %65, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %930 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %930, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  %931 = load i32, ptr %65, align 4, !tbaa !14
  %932 = icmp ugt i32 %931, 0
  br i1 %932, label %933, label %934

933:                                              ; preds = %924
  br label %940

934:                                              ; preds = %924
  %935 = load ptr, ptr %3, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %935, i32 0, i32 1
  %937 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %936, i32 0, i32 1
  %938 = load ptr, ptr %937, align 8, !tbaa !42
  %939 = load float, ptr %938, align 4, !tbaa !29
  br label %940

940:                                              ; preds = %934, %933
  %941 = phi float [ 1.000000e+00, %933 ], [ %939, %934 ]
  store float %941, ptr %67, align 4, !tbaa !29
  %942 = load i32, ptr %12, align 4, !tbaa !14
  %943 = icmp eq i32 %942, 1
  br i1 %943, label %944, label %988

944:                                              ; preds = %940
  %945 = load i32, ptr %11, align 4, !tbaa !14
  %946 = icmp eq i32 %945, 12
  br i1 %946, label %947, label %988

947:                                              ; preds = %944
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %948 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %948, ptr %68, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %949

949:                                              ; preds = %984, %947
  %950 = load i32, ptr %6, align 4, !tbaa !14
  %951 = load i32, ptr %8, align 4, !tbaa !14
  %952 = icmp slt i32 %950, %951
  br i1 %952, label %953, label %987

953:                                              ; preds = %949
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %954

954:                                              ; preds = %980, %953
  %955 = load i32, ptr %5, align 4, !tbaa !14
  %956 = load i32, ptr %7, align 4, !tbaa !14
  %957 = icmp slt i32 %955, %956
  br i1 %957, label %958, label %983

958:                                              ; preds = %954
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #5
  %959 = load ptr, ptr %68, align 8, !tbaa !5
  %960 = load i32, ptr %5, align 4, !tbaa !14
  %961 = load i32, ptr %6, align 4, !tbaa !14
  %962 = load i32, ptr %9, align 4, !tbaa !14
  %963 = load ptr, ptr %4, align 8, !tbaa !5
  %964 = call i32 @libxsmm_elementwise_get_index(i32 noundef %960, i32 noundef %961, i32 noundef %962, ptr noundef %963, i32 noundef 0)
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds i8, ptr %959, i64 %965
  %967 = load i8, ptr %966, align 1, !tbaa !43
  store i8 %967, ptr %69, align 1, !tbaa !43
  %968 = load i8, ptr %69, align 1, !tbaa !43
  %969 = sitofp i8 %968 to float
  %970 = load float, ptr %67, align 4, !tbaa !29
  %971 = fmul float %969, %970
  %972 = load ptr, ptr %66, align 8, !tbaa !5
  %973 = load i32, ptr %6, align 4, !tbaa !14
  %974 = load i32, ptr %10, align 4, !tbaa !14
  %975 = mul nsw i32 %973, %974
  %976 = load i32, ptr %5, align 4, !tbaa !14
  %977 = add nsw i32 %975, %976
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds float, ptr %972, i64 %978
  store float %971, ptr %979, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #5
  br label %980

980:                                              ; preds = %958
  %981 = load i32, ptr %5, align 4, !tbaa !14
  %982 = add nsw i32 %981, 1
  store i32 %982, ptr %5, align 4, !tbaa !14
  br label %954, !llvm.loop !53

983:                                              ; preds = %954
  br label %984

984:                                              ; preds = %983
  %985 = load i32, ptr %6, align 4, !tbaa !14
  %986 = add nsw i32 %985, 1
  store i32 %986, ptr %6, align 4, !tbaa !14
  br label %949, !llvm.loop !54

987:                                              ; preds = %949
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  br label %1085

988:                                              ; preds = %944, %940
  %989 = load i32, ptr %12, align 4, !tbaa !14
  %990 = icmp eq i32 %989, 1
  br i1 %990, label %991, label %1035

991:                                              ; preds = %988
  %992 = load i32, ptr %11, align 4, !tbaa !14
  %993 = icmp eq i32 %992, 10
  br i1 %993, label %994, label %1035

994:                                              ; preds = %991
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  %995 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %995, ptr %70, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %996

996:                                              ; preds = %1031, %994
  %997 = load i32, ptr %6, align 4, !tbaa !14
  %998 = load i32, ptr %8, align 4, !tbaa !14
  %999 = icmp slt i32 %997, %998
  br i1 %999, label %1000, label %1034

1000:                                             ; preds = %996
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1001

1001:                                             ; preds = %1027, %1000
  %1002 = load i32, ptr %5, align 4, !tbaa !14
  %1003 = load i32, ptr %7, align 4, !tbaa !14
  %1004 = icmp slt i32 %1002, %1003
  br i1 %1004, label %1005, label %1030

1005:                                             ; preds = %1001
  call void @llvm.lifetime.start.p0(i64 2, ptr %71) #5
  %1006 = load ptr, ptr %70, align 8, !tbaa !5
  %1007 = load i32, ptr %5, align 4, !tbaa !14
  %1008 = load i32, ptr %6, align 4, !tbaa !14
  %1009 = load i32, ptr %9, align 4, !tbaa !14
  %1010 = load ptr, ptr %4, align 8, !tbaa !5
  %1011 = call i32 @libxsmm_elementwise_get_index(i32 noundef %1007, i32 noundef %1008, i32 noundef %1009, ptr noundef %1010, i32 noundef 0)
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds i16, ptr %1006, i64 %1012
  %1014 = load i16, ptr %1013, align 2, !tbaa !48
  store i16 %1014, ptr %71, align 2, !tbaa !48
  %1015 = load i16, ptr %71, align 2, !tbaa !48
  %1016 = sitofp i16 %1015 to float
  %1017 = load float, ptr %67, align 4, !tbaa !29
  %1018 = fmul float %1016, %1017
  %1019 = load ptr, ptr %66, align 8, !tbaa !5
  %1020 = load i32, ptr %6, align 4, !tbaa !14
  %1021 = load i32, ptr %10, align 4, !tbaa !14
  %1022 = mul nsw i32 %1020, %1021
  %1023 = load i32, ptr %5, align 4, !tbaa !14
  %1024 = add nsw i32 %1022, %1023
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds float, ptr %1019, i64 %1025
  store float %1018, ptr %1026, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 2, ptr %71) #5
  br label %1027

1027:                                             ; preds = %1005
  %1028 = load i32, ptr %5, align 4, !tbaa !14
  %1029 = add nsw i32 %1028, 1
  store i32 %1029, ptr %5, align 4, !tbaa !14
  br label %1001, !llvm.loop !55

1030:                                             ; preds = %1001
  br label %1031

1031:                                             ; preds = %1030
  %1032 = load i32, ptr %6, align 4, !tbaa !14
  %1033 = add nsw i32 %1032, 1
  store i32 %1033, ptr %6, align 4, !tbaa !14
  br label %996, !llvm.loop !56

1034:                                             ; preds = %996
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  br label %1084

1035:                                             ; preds = %991, %988
  %1036 = load i32, ptr %12, align 4, !tbaa !14
  %1037 = icmp eq i32 %1036, 1
  br i1 %1037, label %1038, label %1082

1038:                                             ; preds = %1035
  %1039 = load i32, ptr %11, align 4, !tbaa !14
  %1040 = icmp eq i32 %1039, 8
  br i1 %1040, label %1041, label %1082

1041:                                             ; preds = %1038
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  %1042 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %1042, ptr %72, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1043

1043:                                             ; preds = %1078, %1041
  %1044 = load i32, ptr %6, align 4, !tbaa !14
  %1045 = load i32, ptr %8, align 4, !tbaa !14
  %1046 = icmp slt i32 %1044, %1045
  br i1 %1046, label %1047, label %1081

1047:                                             ; preds = %1043
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1048

1048:                                             ; preds = %1074, %1047
  %1049 = load i32, ptr %5, align 4, !tbaa !14
  %1050 = load i32, ptr %7, align 4, !tbaa !14
  %1051 = icmp slt i32 %1049, %1050
  br i1 %1051, label %1052, label %1077

1052:                                             ; preds = %1048
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #5
  %1053 = load ptr, ptr %72, align 8, !tbaa !5
  %1054 = load i32, ptr %5, align 4, !tbaa !14
  %1055 = load i32, ptr %6, align 4, !tbaa !14
  %1056 = load i32, ptr %9, align 4, !tbaa !14
  %1057 = load ptr, ptr %4, align 8, !tbaa !5
  %1058 = call i32 @libxsmm_elementwise_get_index(i32 noundef %1054, i32 noundef %1055, i32 noundef %1056, ptr noundef %1057, i32 noundef 0)
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds i32, ptr %1053, i64 %1059
  %1061 = load i32, ptr %1060, align 4, !tbaa !14
  store i32 %1061, ptr %73, align 4, !tbaa !14
  %1062 = load i32, ptr %73, align 4, !tbaa !14
  %1063 = sitofp i32 %1062 to float
  %1064 = load float, ptr %67, align 4, !tbaa !29
  %1065 = fmul float %1063, %1064
  %1066 = load ptr, ptr %66, align 8, !tbaa !5
  %1067 = load i32, ptr %6, align 4, !tbaa !14
  %1068 = load i32, ptr %10, align 4, !tbaa !14
  %1069 = mul nsw i32 %1067, %1068
  %1070 = load i32, ptr %5, align 4, !tbaa !14
  %1071 = add nsw i32 %1069, %1070
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds float, ptr %1066, i64 %1072
  store float %1065, ptr %1073, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  br label %1074

1074:                                             ; preds = %1052
  %1075 = load i32, ptr %5, align 4, !tbaa !14
  %1076 = add nsw i32 %1075, 1
  store i32 %1076, ptr %5, align 4, !tbaa !14
  br label %1048, !llvm.loop !57

1077:                                             ; preds = %1048
  br label %1078

1078:                                             ; preds = %1077
  %1079 = load i32, ptr %6, align 4, !tbaa !14
  %1080 = add nsw i32 %1079, 1
  store i32 %1080, ptr %6, align 4, !tbaa !14
  br label %1043, !llvm.loop !58

1081:                                             ; preds = %1043
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  br label %1083

1082:                                             ; preds = %1038, %1035
  br label %1083

1083:                                             ; preds = %1082, %1081
  br label %1084

1084:                                             ; preds = %1083, %1034
  br label %1085

1085:                                             ; preds = %1084, %987
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  br label %1700

1086:                                             ; preds = %918
  %1087 = load ptr, ptr %4, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1087, i32 0, i32 10
  %1089 = load i16, ptr %1088, align 1, !tbaa !9
  %1090 = zext i16 %1089 to i32
  %1091 = icmp eq i32 %1090, 25
  br i1 %1091, label %1092, label %1289

1092:                                             ; preds = %1086
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #5
  %1093 = load i32, ptr %14, align 4, !tbaa !14
  %1094 = and i32 %1093, 1
  %1095 = icmp ugt i32 %1094, 0
  %1096 = zext i1 %1095 to i64
  %1097 = select i1 %1095, i32 1, i32 0
  store i32 %1097, ptr %74, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #5
  %1098 = load i32, ptr %74, align 4, !tbaa !14
  %1099 = icmp eq i32 %1098, 0
  br i1 %1099, label %1100, label %1102

1100:                                             ; preds = %1092
  %1101 = load i32, ptr %10, align 4, !tbaa !14
  br label %1107

1102:                                             ; preds = %1092
  %1103 = load i32, ptr %10, align 4, !tbaa !14
  %1104 = add nsw i32 %1103, 15
  %1105 = sdiv i32 %1104, 16
  %1106 = mul nsw i32 %1105, 16
  br label %1107

1107:                                             ; preds = %1102, %1100
  %1108 = phi i32 [ %1101, %1100 ], [ %1106, %1102 ]
  store i32 %1108, ptr %75, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 64, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  %1109 = load ptr, ptr %3, align 8, !tbaa !5
  %1110 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1109, i32 0, i32 0
  %1111 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %1110, i32 0, i32 0
  %1112 = load ptr, ptr %1111, align 8, !tbaa !15
  %1113 = load float, ptr %1112, align 4, !tbaa !29
  store float %1113, ptr %77, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #5
  %1114 = load float, ptr %77, align 4, !tbaa !29
  %1115 = fsub float 1.000000e+00, %1114
  store float %1115, ptr %78, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #5
  %1116 = load float, ptr %78, align 4, !tbaa !29
  %1117 = fdiv float 1.000000e+00, %1116
  store float %1117, ptr %79, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  %1118 = load i32, ptr @libxsmm_target_archid, align 4, !tbaa !14
  %1119 = call i32 @libxsmm_cpuid_vlen32(i32 noundef %1118)
  store i32 %1119, ptr %81, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  %1120 = load ptr, ptr %3, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1120, i32 0, i32 2
  %1122 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1121, i32 0, i32 1
  %1123 = load ptr, ptr %1122, align 8, !tbaa !28
  store ptr %1123, ptr %82, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1124

1124:                                             ; preds = %1131, %1107
  %1125 = load i32, ptr %6, align 4, !tbaa !14
  %1126 = icmp slt i32 %1125, 16
  br i1 %1126, label %1127, label %1134

1127:                                             ; preds = %1124
  %1128 = load i32, ptr %6, align 4, !tbaa !14
  %1129 = sext i32 %1128 to i64
  %1130 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 %1129
  store float 0.000000e+00, ptr %1130, align 4, !tbaa !29
  br label %1131

1131:                                             ; preds = %1127
  %1132 = load i32, ptr %6, align 4, !tbaa !14
  %1133 = add nsw i32 %1132, 1
  store i32 %1133, ptr %6, align 4, !tbaa !14
  br label %1124, !llvm.loop !59

1134:                                             ; preds = %1124
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1135

1135:                                             ; preds = %1285, %1134
  %1136 = load i32, ptr %6, align 4, !tbaa !14
  %1137 = load i32, ptr %8, align 4, !tbaa !14
  %1138 = icmp slt i32 %1136, %1137
  br i1 %1138, label %1139, label %1288

1139:                                             ; preds = %1135
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1140

1140:                                             ; preds = %1215, %1139
  %1141 = load i32, ptr %5, align 4, !tbaa !14
  %1142 = load i32, ptr %7, align 4, !tbaa !14
  %1143 = load i32, ptr %81, align 4, !tbaa !14
  %1144 = sub nsw i32 %1143, 1
  %1145 = xor i32 %1144, -1
  %1146 = and i32 %1142, %1145
  %1147 = icmp slt i32 %1141, %1146
  br i1 %1147, label %1148, label %1219

1148:                                             ; preds = %1140
  %1149 = load ptr, ptr %15, align 8, !tbaa !5
  %1150 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 0
  %1151 = load i32, ptr %81, align 4, !tbaa !14
  call void @libxsmm_lsfr_Xwide(ptr noundef %1149, ptr noundef %1150, i32 noundef %1151)
  store i32 0, ptr %80, align 4, !tbaa !14
  br label %1152

1152:                                             ; preds = %1211, %1148
  %1153 = load i32, ptr %80, align 4, !tbaa !14
  %1154 = load i32, ptr %81, align 4, !tbaa !14
  %1155 = icmp slt i32 %1153, %1154
  br i1 %1155, label %1156, label %1214

1156:                                             ; preds = %1152
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %1157 = load ptr, ptr %16, align 8, !tbaa !5
  %1158 = load i32, ptr %5, align 4, !tbaa !14
  %1159 = load i32, ptr %80, align 4, !tbaa !14
  %1160 = add nsw i32 %1158, %1159
  %1161 = load i32, ptr %6, align 4, !tbaa !14
  %1162 = load i32, ptr %9, align 4, !tbaa !14
  %1163 = load i32, ptr %11, align 4, !tbaa !14
  %1164 = load ptr, ptr %4, align 8, !tbaa !5
  %1165 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1157, i32 noundef %1160, i32 noundef %1161, i32 noundef %1162, i32 noundef %1163, ptr noundef %1164, i32 noundef 0)
  store float %1165, ptr %83, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  %1166 = load i32, ptr %80, align 4, !tbaa !14
  %1167 = sext i32 %1166 to i64
  %1168 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 %1167
  %1169 = load float, ptr %1168, align 4, !tbaa !29
  %1170 = load float, ptr %78, align 4, !tbaa !29
  %1171 = fcmp olt float %1169, %1170
  br i1 %1171, label %1172, label %1176

1172:                                             ; preds = %1156
  %1173 = load float, ptr %79, align 4, !tbaa !29
  %1174 = load float, ptr %83, align 4, !tbaa !29
  %1175 = fmul float %1173, %1174
  br label %1177

1176:                                             ; preds = %1156
  br label %1177

1177:                                             ; preds = %1176, %1172
  %1178 = phi float [ %1175, %1172 ], [ 0.000000e+00, %1176 ]
  store float %1178, ptr %84, align 4, !tbaa !29
  %1179 = load ptr, ptr %17, align 8, !tbaa !5
  %1180 = load i32, ptr %5, align 4, !tbaa !14
  %1181 = load i32, ptr %80, align 4, !tbaa !14
  %1182 = add nsw i32 %1180, %1181
  %1183 = load i32, ptr %6, align 4, !tbaa !14
  %1184 = load i32, ptr %10, align 4, !tbaa !14
  %1185 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %1179, ptr noundef %84, i32 noundef %1182, i32 noundef %1183, i32 noundef %1184, i32 noundef 0, i32 noundef %1185, ptr noundef null, i32 noundef 0)
  %1186 = load i32, ptr %74, align 4, !tbaa !14
  %1187 = icmp ugt i32 %1186, 0
  br i1 %1187, label %1188, label %1210

1188:                                             ; preds = %1177
  %1189 = load i32, ptr %80, align 4, !tbaa !14
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 %1190
  %1192 = load float, ptr %1191, align 4, !tbaa !29
  %1193 = load float, ptr %78, align 4, !tbaa !29
  %1194 = fcmp olt float %1192, %1193
  br i1 %1194, label %1195, label %1202

1195:                                             ; preds = %1188
  %1196 = load ptr, ptr %82, align 8, !tbaa !5
  %1197 = load i32, ptr %5, align 4, !tbaa !14
  %1198 = load i32, ptr %80, align 4, !tbaa !14
  %1199 = add nsw i32 %1197, %1198
  %1200 = load i32, ptr %6, align 4, !tbaa !14
  %1201 = load i32, ptr %75, align 4, !tbaa !14
  call void @libxsmm_set_bit(ptr noundef %1196, i32 noundef %1199, i32 noundef %1200, i32 noundef %1201)
  br label %1209

1202:                                             ; preds = %1188
  %1203 = load ptr, ptr %82, align 8, !tbaa !5
  %1204 = load i32, ptr %5, align 4, !tbaa !14
  %1205 = load i32, ptr %80, align 4, !tbaa !14
  %1206 = add nsw i32 %1204, %1205
  %1207 = load i32, ptr %6, align 4, !tbaa !14
  %1208 = load i32, ptr %75, align 4, !tbaa !14
  call void @libxsmm_zero_bit(ptr noundef %1203, i32 noundef %1206, i32 noundef %1207, i32 noundef %1208)
  br label %1209

1209:                                             ; preds = %1202, %1195
  br label %1210

1210:                                             ; preds = %1209, %1177
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  br label %1211

1211:                                             ; preds = %1210
  %1212 = load i32, ptr %80, align 4, !tbaa !14
  %1213 = add nsw i32 %1212, 1
  store i32 %1213, ptr %80, align 4, !tbaa !14
  br label %1152, !llvm.loop !60

1214:                                             ; preds = %1152
  br label %1215

1215:                                             ; preds = %1214
  %1216 = load i32, ptr %81, align 4, !tbaa !14
  %1217 = load i32, ptr %5, align 4, !tbaa !14
  %1218 = add nsw i32 %1217, %1216
  store i32 %1218, ptr %5, align 4, !tbaa !14
  br label %1140, !llvm.loop !61

1219:                                             ; preds = %1140
  %1220 = load i32, ptr %5, align 4, !tbaa !14
  %1221 = load i32, ptr %7, align 4, !tbaa !14
  %1222 = icmp slt i32 %1220, %1221
  br i1 %1222, label %1223, label %1284

1223:                                             ; preds = %1219
  %1224 = load ptr, ptr %15, align 8, !tbaa !5
  %1225 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 0
  %1226 = load i32, ptr %81, align 4, !tbaa !14
  call void @libxsmm_lsfr_Xwide(ptr noundef %1224, ptr noundef %1225, i32 noundef %1226)
  store i32 0, ptr %80, align 4, !tbaa !14
  br label %1227

1227:                                             ; preds = %1280, %1223
  %1228 = load i32, ptr %5, align 4, !tbaa !14
  %1229 = load i32, ptr %7, align 4, !tbaa !14
  %1230 = icmp slt i32 %1228, %1229
  br i1 %1230, label %1231, label %1283

1231:                                             ; preds = %1227
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #5
  %1232 = load ptr, ptr %16, align 8, !tbaa !5
  %1233 = load i32, ptr %5, align 4, !tbaa !14
  %1234 = load i32, ptr %6, align 4, !tbaa !14
  %1235 = load i32, ptr %9, align 4, !tbaa !14
  %1236 = load i32, ptr %11, align 4, !tbaa !14
  %1237 = load ptr, ptr %4, align 8, !tbaa !5
  %1238 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1232, i32 noundef %1233, i32 noundef %1234, i32 noundef %1235, i32 noundef %1236, ptr noundef %1237, i32 noundef 0)
  store float %1238, ptr %85, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  %1239 = load i32, ptr %80, align 4, !tbaa !14
  %1240 = sext i32 %1239 to i64
  %1241 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 %1240
  %1242 = load float, ptr %1241, align 4, !tbaa !29
  %1243 = load float, ptr %78, align 4, !tbaa !29
  %1244 = fcmp olt float %1242, %1243
  br i1 %1244, label %1245, label %1249

1245:                                             ; preds = %1231
  %1246 = load float, ptr %79, align 4, !tbaa !29
  %1247 = load float, ptr %85, align 4, !tbaa !29
  %1248 = fmul float %1246, %1247
  br label %1250

1249:                                             ; preds = %1231
  br label %1250

1250:                                             ; preds = %1249, %1245
  %1251 = phi float [ %1248, %1245 ], [ 0.000000e+00, %1249 ]
  store float %1251, ptr %86, align 4, !tbaa !29
  %1252 = load ptr, ptr %17, align 8, !tbaa !5
  %1253 = load i32, ptr %5, align 4, !tbaa !14
  %1254 = load i32, ptr %6, align 4, !tbaa !14
  %1255 = load i32, ptr %10, align 4, !tbaa !14
  %1256 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %1252, ptr noundef %86, i32 noundef %1253, i32 noundef %1254, i32 noundef %1255, i32 noundef 0, i32 noundef %1256, ptr noundef null, i32 noundef 0)
  %1257 = load i32, ptr %74, align 4, !tbaa !14
  %1258 = icmp ugt i32 %1257, 0
  br i1 %1258, label %1259, label %1277

1259:                                             ; preds = %1250
  %1260 = load i32, ptr %80, align 4, !tbaa !14
  %1261 = sext i32 %1260 to i64
  %1262 = getelementptr inbounds [16 x float], ptr %76, i64 0, i64 %1261
  %1263 = load float, ptr %1262, align 4, !tbaa !29
  %1264 = load float, ptr %78, align 4, !tbaa !29
  %1265 = fcmp olt float %1263, %1264
  br i1 %1265, label %1266, label %1271

1266:                                             ; preds = %1259
  %1267 = load ptr, ptr %82, align 8, !tbaa !5
  %1268 = load i32, ptr %5, align 4, !tbaa !14
  %1269 = load i32, ptr %6, align 4, !tbaa !14
  %1270 = load i32, ptr %75, align 4, !tbaa !14
  call void @libxsmm_set_bit(ptr noundef %1267, i32 noundef %1268, i32 noundef %1269, i32 noundef %1270)
  br label %1276

1271:                                             ; preds = %1259
  %1272 = load ptr, ptr %82, align 8, !tbaa !5
  %1273 = load i32, ptr %5, align 4, !tbaa !14
  %1274 = load i32, ptr %6, align 4, !tbaa !14
  %1275 = load i32, ptr %75, align 4, !tbaa !14
  call void @libxsmm_zero_bit(ptr noundef %1272, i32 noundef %1273, i32 noundef %1274, i32 noundef %1275)
  br label %1276

1276:                                             ; preds = %1271, %1266
  br label %1277

1277:                                             ; preds = %1276, %1250
  %1278 = load i32, ptr %80, align 4, !tbaa !14
  %1279 = add nsw i32 %1278, 1
  store i32 %1279, ptr %80, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  br label %1280

1280:                                             ; preds = %1277
  %1281 = load i32, ptr %5, align 4, !tbaa !14
  %1282 = add nsw i32 %1281, 1
  store i32 %1282, ptr %5, align 4, !tbaa !14
  br label %1227, !llvm.loop !62

1283:                                             ; preds = %1227
  br label %1284

1284:                                             ; preds = %1283, %1219
  br label %1285

1285:                                             ; preds = %1284
  %1286 = load i32, ptr %6, align 4, !tbaa !14
  %1287 = add nsw i32 %1286, 1
  store i32 %1287, ptr %6, align 4, !tbaa !14
  br label %1135, !llvm.loop !63

1288:                                             ; preds = %1135
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  br label %1699

1289:                                             ; preds = %1086
  %1290 = load ptr, ptr %4, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1290, i32 0, i32 10
  %1292 = load i16, ptr %1291, align 1, !tbaa !9
  %1293 = zext i16 %1292 to i32
  %1294 = icmp eq i32 %1293, 26
  br i1 %1294, label %1295, label %1370

1295:                                             ; preds = %1289
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  %1296 = load i32, ptr %14, align 4, !tbaa !14
  %1297 = and i32 %1296, 1
  %1298 = icmp ugt i32 %1297, 0
  %1299 = zext i1 %1298 to i64
  %1300 = select i1 %1298, i32 1, i32 0
  store i32 %1300, ptr %87, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  %1301 = load i32, ptr %87, align 4, !tbaa !14
  %1302 = icmp eq i32 %1301, 0
  br i1 %1302, label %1303, label %1305

1303:                                             ; preds = %1295
  %1304 = load i32, ptr %9, align 4, !tbaa !14
  br label %1310

1305:                                             ; preds = %1295
  %1306 = load i32, ptr %9, align 4, !tbaa !14
  %1307 = add nsw i32 %1306, 15
  %1308 = sdiv i32 %1307, 16
  %1309 = mul nsw i32 %1308, 16
  br label %1310

1310:                                             ; preds = %1305, %1303
  %1311 = phi i32 [ %1304, %1303 ], [ %1309, %1305 ]
  store i32 %1311, ptr %88, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %1312 = load ptr, ptr %3, align 8, !tbaa !5
  %1313 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1312, i32 0, i32 0
  %1314 = getelementptr inbounds %struct.libxsmm_matrix_op_arg, ptr %1313, i32 0, i32 0
  %1315 = load ptr, ptr %1314, align 8, !tbaa !15
  %1316 = load float, ptr %1315, align 4, !tbaa !29
  store float %1316, ptr %89, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #5
  %1317 = load float, ptr %89, align 4, !tbaa !29
  %1318 = fsub float 1.000000e+00, %1317
  store float %1318, ptr %90, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #5
  %1319 = load float, ptr %90, align 4, !tbaa !29
  %1320 = fdiv float 1.000000e+00, %1319
  store float %1320, ptr %91, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #5
  %1321 = load ptr, ptr %3, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1321, i32 0, i32 1
  %1323 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1322, i32 0, i32 1
  %1324 = load ptr, ptr %1323, align 8, !tbaa !42
  store ptr %1324, ptr %92, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1325

1325:                                             ; preds = %1366, %1310
  %1326 = load i32, ptr %6, align 4, !tbaa !14
  %1327 = load i32, ptr %8, align 4, !tbaa !14
  %1328 = icmp slt i32 %1326, %1327
  br i1 %1328, label %1329, label %1369

1329:                                             ; preds = %1325
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1330

1330:                                             ; preds = %1362, %1329
  %1331 = load i32, ptr %5, align 4, !tbaa !14
  %1332 = load i32, ptr %7, align 4, !tbaa !14
  %1333 = icmp slt i32 %1331, %1332
  br i1 %1333, label %1334, label %1365

1334:                                             ; preds = %1330
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #5
  %1335 = load ptr, ptr %16, align 8, !tbaa !5
  %1336 = load i32, ptr %5, align 4, !tbaa !14
  %1337 = load i32, ptr %6, align 4, !tbaa !14
  %1338 = load i32, ptr %9, align 4, !tbaa !14
  %1339 = load i32, ptr %11, align 4, !tbaa !14
  %1340 = load ptr, ptr %4, align 8, !tbaa !5
  %1341 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1335, i32 noundef %1336, i32 noundef %1337, i32 noundef %1338, i32 noundef %1339, ptr noundef %1340, i32 noundef 0)
  %1342 = load float, ptr %91, align 4, !tbaa !29
  %1343 = fmul float %1341, %1342
  store float %1343, ptr %93, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 1, ptr %94) #5
  %1344 = load ptr, ptr %92, align 8, !tbaa !5
  %1345 = load i32, ptr %5, align 4, !tbaa !14
  %1346 = load i32, ptr %6, align 4, !tbaa !14
  %1347 = load i32, ptr %88, align 4, !tbaa !14
  %1348 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %1344, i32 noundef %1345, i32 noundef %1346, i32 noundef %1347)
  store i8 %1348, ptr %94, align 1, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #5
  %1349 = load i8, ptr %94, align 1, !tbaa !43
  %1350 = zext i8 %1349 to i32
  %1351 = icmp sgt i32 %1350, 0
  br i1 %1351, label %1352, label %1354

1352:                                             ; preds = %1334
  %1353 = load float, ptr %93, align 4, !tbaa !29
  br label %1355

1354:                                             ; preds = %1334
  br label %1355

1355:                                             ; preds = %1354, %1352
  %1356 = phi float [ %1353, %1352 ], [ 0.000000e+00, %1354 ]
  store float %1356, ptr %95, align 4, !tbaa !29
  %1357 = load ptr, ptr %17, align 8, !tbaa !5
  %1358 = load i32, ptr %5, align 4, !tbaa !14
  %1359 = load i32, ptr %6, align 4, !tbaa !14
  %1360 = load i32, ptr %10, align 4, !tbaa !14
  %1361 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %1357, ptr noundef %95, i32 noundef %1358, i32 noundef %1359, i32 noundef %1360, i32 noundef 0, i32 noundef %1361, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %94) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #5
  br label %1362

1362:                                             ; preds = %1355
  %1363 = load i32, ptr %5, align 4, !tbaa !14
  %1364 = add nsw i32 %1363, 1
  store i32 %1364, ptr %5, align 4, !tbaa !14
  br label %1330, !llvm.loop !64

1365:                                             ; preds = %1330
  br label %1366

1366:                                             ; preds = %1365
  %1367 = load i32, ptr %6, align 4, !tbaa !14
  %1368 = add nsw i32 %1367, 1
  store i32 %1368, ptr %6, align 4, !tbaa !14
  br label %1325, !llvm.loop !65

1369:                                             ; preds = %1325
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  br label %1698

1370:                                             ; preds = %1289
  %1371 = load ptr, ptr %4, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1371, i32 0, i32 10
  %1373 = load i16, ptr %1372, align 1, !tbaa !9
  %1374 = zext i16 %1373 to i32
  %1375 = icmp eq i32 %1374, 33
  br i1 %1375, label %1376, label %1434

1376:                                             ; preds = %1370
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #5
  %1377 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %1377, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #5
  %1378 = load ptr, ptr %3, align 8, !tbaa !5
  %1379 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1378, i32 0, i32 2
  %1380 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1379, i32 0, i32 1
  %1381 = load ptr, ptr %1380, align 8, !tbaa !28
  %1382 = load i64, ptr %1381, align 8, !tbaa !19
  store i64 %1382, ptr %97, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #5
  %1383 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1383, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #5
  %1384 = load ptr, ptr %17, align 8, !tbaa !5
  %1385 = load i64, ptr %97, align 8, !tbaa !19
  %1386 = getelementptr inbounds i8, ptr %1384, i64 %1385
  store ptr %1386, ptr %99, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1387

1387:                                             ; preds = %1430, %1376
  %1388 = load i32, ptr %6, align 4, !tbaa !14
  %1389 = load i32, ptr %8, align 4, !tbaa !14
  %1390 = icmp slt i32 %1388, %1389
  br i1 %1390, label %1391, label %1433

1391:                                             ; preds = %1387
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1392

1392:                                             ; preds = %1426, %1391
  %1393 = load i32, ptr %5, align 4, !tbaa !14
  %1394 = load i32, ptr %7, align 4, !tbaa !14
  %1395 = icmp slt i32 %1393, %1394
  br i1 %1395, label %1396, label %1429

1396:                                             ; preds = %1392
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #5
  %1397 = load ptr, ptr %96, align 8, !tbaa !5
  %1398 = load i32, ptr %5, align 4, !tbaa !14
  %1399 = load i32, ptr %6, align 4, !tbaa !14
  %1400 = load i32, ptr %9, align 4, !tbaa !14
  %1401 = load ptr, ptr %4, align 8, !tbaa !5
  %1402 = call i32 @libxsmm_elementwise_get_index(i32 noundef %1398, i32 noundef %1399, i32 noundef %1400, ptr noundef %1401, i32 noundef 0)
  %1403 = sext i32 %1402 to i64
  %1404 = getelementptr inbounds float, ptr %1397, i64 %1403
  %1405 = load float, ptr %1404, align 4, !tbaa !29
  store float %1405, ptr %100, align 4, !tbaa !43
  %1406 = getelementptr inbounds [2 x i16], ptr %100, i64 0, i64 0
  %1407 = load i16, ptr %1406, align 4, !tbaa !43
  %1408 = load ptr, ptr %98, align 8, !tbaa !5
  %1409 = load i32, ptr %6, align 4, !tbaa !14
  %1410 = load i32, ptr %10, align 4, !tbaa !14
  %1411 = mul nsw i32 %1409, %1410
  %1412 = load i32, ptr %5, align 4, !tbaa !14
  %1413 = add nsw i32 %1411, %1412
  %1414 = sext i32 %1413 to i64
  %1415 = getelementptr inbounds i16, ptr %1408, i64 %1414
  store i16 %1407, ptr %1415, align 2, !tbaa !48
  %1416 = getelementptr inbounds [2 x i16], ptr %100, i64 0, i64 1
  %1417 = load i16, ptr %1416, align 2, !tbaa !43
  %1418 = load ptr, ptr %99, align 8, !tbaa !5
  %1419 = load i32, ptr %6, align 4, !tbaa !14
  %1420 = load i32, ptr %10, align 4, !tbaa !14
  %1421 = mul nsw i32 %1419, %1420
  %1422 = load i32, ptr %5, align 4, !tbaa !14
  %1423 = add nsw i32 %1421, %1422
  %1424 = sext i32 %1423 to i64
  %1425 = getelementptr inbounds i16, ptr %1418, i64 %1424
  store i16 %1417, ptr %1425, align 2, !tbaa !48
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #5
  br label %1426

1426:                                             ; preds = %1396
  %1427 = load i32, ptr %5, align 4, !tbaa !14
  %1428 = add nsw i32 %1427, 1
  store i32 %1428, ptr %5, align 4, !tbaa !14
  br label %1392, !llvm.loop !66

1429:                                             ; preds = %1392
  br label %1430

1430:                                             ; preds = %1429
  %1431 = load i32, ptr %6, align 4, !tbaa !14
  %1432 = add nsw i32 %1431, 1
  store i32 %1432, ptr %6, align 4, !tbaa !14
  br label %1387, !llvm.loop !67

1433:                                             ; preds = %1387
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #5
  br label %1697

1434:                                             ; preds = %1370
  %1435 = load ptr, ptr %4, align 8, !tbaa !5
  %1436 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1435, i32 0, i32 10
  %1437 = load i16, ptr %1436, align 1, !tbaa !9
  %1438 = zext i16 %1437 to i32
  %1439 = icmp eq i32 %1438, 64
  br i1 %1439, label %1446, label %1440

1440:                                             ; preds = %1434
  %1441 = load ptr, ptr %4, align 8, !tbaa !5
  %1442 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1441, i32 0, i32 10
  %1443 = load i16, ptr %1442, align 1, !tbaa !9
  %1444 = zext i16 %1443 to i32
  %1445 = icmp eq i32 %1444, 65
  br i1 %1445, label %1446, label %1550

1446:                                             ; preds = %1440, %1434
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #5
  %1447 = load ptr, ptr %3, align 8, !tbaa !5
  %1448 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %1447, i32 0, i32 2
  %1449 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %1448, i32 0, i32 1
  %1450 = load ptr, ptr %1449, align 8, !tbaa !28
  store ptr %1450, ptr %101, align 8, !tbaa !5
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1451

1451:                                             ; preds = %1546, %1446
  %1452 = load i32, ptr %6, align 4, !tbaa !14
  %1453 = load i32, ptr %8, align 4, !tbaa !14
  %1454 = icmp slt i32 %1452, %1453
  br i1 %1454, label %1455, label %1549

1455:                                             ; preds = %1451
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1456

1456:                                             ; preds = %1542, %1455
  %1457 = load i32, ptr %5, align 4, !tbaa !14
  %1458 = load i32, ptr %7, align 4, !tbaa !14
  %1459 = icmp slt i32 %1457, %1458
  br i1 %1459, label %1460, label %1545

1460:                                             ; preds = %1456
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #5
  store float 0.000000e+00, ptr %102, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 2, ptr %103) #5
  store i16 0, ptr %103, align 2, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 2, ptr %104) #5
  store i16 0, ptr %104, align 2, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 2, ptr %105) #5
  store i16 0, ptr %105, align 2, !tbaa !48
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #5
  store float 0.000000e+00, ptr %106, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #5
  store float 0.000000e+00, ptr %107, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #5
  %1461 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %1461, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #5
  %1462 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1462, ptr %110, align 8, !tbaa !5
  %1463 = load ptr, ptr %109, align 8, !tbaa !5
  %1464 = load i32, ptr %5, align 4, !tbaa !14
  %1465 = load i32, ptr %6, align 4, !tbaa !14
  %1466 = load i32, ptr %9, align 4, !tbaa !14
  %1467 = load ptr, ptr %4, align 8, !tbaa !5
  %1468 = call i32 @libxsmm_elementwise_get_index(i32 noundef %1464, i32 noundef %1465, i32 noundef %1466, ptr noundef %1467, i32 noundef 0)
  %1469 = sext i32 %1468 to i64
  %1470 = getelementptr inbounds float, ptr %1463, i64 %1469
  %1471 = load float, ptr %1470, align 4, !tbaa !29
  store float %1471, ptr %102, align 4, !tbaa !29
  %1472 = load float, ptr %102, align 4, !tbaa !29
  store float %1472, ptr %108, align 4, !tbaa !43
  %1473 = getelementptr inbounds [2 x i16], ptr %108, i64 0, i64 0
  store i16 0, ptr %1473, align 4, !tbaa !43
  %1474 = getelementptr inbounds [2 x i16], ptr %108, i64 0, i64 1
  %1475 = load i16, ptr %1474, align 2, !tbaa !43
  store i16 %1475, ptr %103, align 2, !tbaa !48
  %1476 = load float, ptr %102, align 4, !tbaa !29
  %1477 = load float, ptr %108, align 4, !tbaa !43
  %1478 = fsub float %1476, %1477
  store float %1478, ptr %106, align 4, !tbaa !29
  %1479 = load ptr, ptr %4, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1479, i32 0, i32 10
  %1481 = load i16, ptr %1480, align 1, !tbaa !9
  %1482 = zext i16 %1481 to i32
  %1483 = icmp eq i32 %1482, 65
  br i1 %1483, label %1484, label %1494

1484:                                             ; preds = %1460
  %1485 = load float, ptr %106, align 4, !tbaa !29
  store float %1485, ptr %108, align 4, !tbaa !43
  %1486 = getelementptr inbounds [2 x i16], ptr %108, i64 0, i64 0
  store i16 0, ptr %1486, align 4, !tbaa !43
  %1487 = getelementptr inbounds [2 x i16], ptr %108, i64 0, i64 1
  %1488 = load i16, ptr %1487, align 2, !tbaa !43
  store i16 %1488, ptr %104, align 2, !tbaa !48
  %1489 = load float, ptr %106, align 4, !tbaa !29
  %1490 = load float, ptr %108, align 4, !tbaa !43
  %1491 = fsub float %1489, %1490
  store float %1491, ptr %107, align 4, !tbaa !29
  %1492 = load float, ptr %107, align 4, !tbaa !29
  %1493 = call zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef %1492)
  store i16 %1493, ptr %105, align 2, !tbaa !48
  br label %1497

1494:                                             ; preds = %1460
  %1495 = load float, ptr %106, align 4, !tbaa !29
  %1496 = call zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef %1495)
  store i16 %1496, ptr %104, align 2, !tbaa !48
  br label %1497

1497:                                             ; preds = %1494, %1484
  %1498 = load i16, ptr %103, align 2, !tbaa !48
  %1499 = load ptr, ptr %110, align 8, !tbaa !5
  %1500 = load i32, ptr %6, align 4, !tbaa !14
  %1501 = load i32, ptr %10, align 4, !tbaa !14
  %1502 = mul nsw i32 %1500, %1501
  %1503 = load i32, ptr %5, align 4, !tbaa !14
  %1504 = add nsw i32 %1502, %1503
  %1505 = sext i32 %1504 to i64
  %1506 = getelementptr inbounds i16, ptr %1499, i64 %1505
  store i16 %1498, ptr %1506, align 2, !tbaa !48
  %1507 = load i16, ptr %104, align 2, !tbaa !48
  %1508 = load ptr, ptr %110, align 8, !tbaa !5
  %1509 = load i32, ptr %6, align 4, !tbaa !14
  %1510 = load i32, ptr %10, align 4, !tbaa !14
  %1511 = mul nsw i32 %1509, %1510
  %1512 = load i32, ptr %5, align 4, !tbaa !14
  %1513 = add nsw i32 %1511, %1512
  %1514 = sext i32 %1513 to i64
  %1515 = load ptr, ptr %101, align 8, !tbaa !5
  %1516 = getelementptr inbounds i64, ptr %1515, i64 0
  %1517 = load i64, ptr %1516, align 8, !tbaa !19
  %1518 = udiv i64 %1517, 2
  %1519 = add i64 %1514, %1518
  %1520 = getelementptr inbounds i16, ptr %1508, i64 %1519
  store i16 %1507, ptr %1520, align 2, !tbaa !48
  %1521 = load ptr, ptr %4, align 8, !tbaa !5
  %1522 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1521, i32 0, i32 10
  %1523 = load i16, ptr %1522, align 1, !tbaa !9
  %1524 = zext i16 %1523 to i32
  %1525 = icmp eq i32 %1524, 65
  br i1 %1525, label %1526, label %1541

1526:                                             ; preds = %1497
  %1527 = load i16, ptr %105, align 2, !tbaa !48
  %1528 = load ptr, ptr %110, align 8, !tbaa !5
  %1529 = load i32, ptr %6, align 4, !tbaa !14
  %1530 = load i32, ptr %10, align 4, !tbaa !14
  %1531 = mul nsw i32 %1529, %1530
  %1532 = load i32, ptr %5, align 4, !tbaa !14
  %1533 = add nsw i32 %1531, %1532
  %1534 = sext i32 %1533 to i64
  %1535 = load ptr, ptr %101, align 8, !tbaa !5
  %1536 = getelementptr inbounds i64, ptr %1535, i64 1
  %1537 = load i64, ptr %1536, align 8, !tbaa !19
  %1538 = udiv i64 %1537, 2
  %1539 = add i64 %1534, %1538
  %1540 = getelementptr inbounds i16, ptr %1528, i64 %1539
  store i16 %1527, ptr %1540, align 2, !tbaa !48
  br label %1541

1541:                                             ; preds = %1526, %1497
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %105) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %104) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %103) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #5
  br label %1542

1542:                                             ; preds = %1541
  %1543 = load i32, ptr %5, align 4, !tbaa !14
  %1544 = add nsw i32 %1543, 1
  store i32 %1544, ptr %5, align 4, !tbaa !14
  br label %1456, !llvm.loop !68

1545:                                             ; preds = %1456
  br label %1546

1546:                                             ; preds = %1545
  %1547 = load i32, ptr %6, align 4, !tbaa !14
  %1548 = add nsw i32 %1547, 1
  store i32 %1548, ptr %6, align 4, !tbaa !14
  br label %1451, !llvm.loop !69

1549:                                             ; preds = %1451
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #5
  br label %1696

1550:                                             ; preds = %1440
  store i32 0, ptr %6, align 4, !tbaa !14
  br label %1551

1551:                                             ; preds = %1692, %1550
  %1552 = load i32, ptr %6, align 4, !tbaa !14
  %1553 = load i32, ptr %8, align 4, !tbaa !14
  %1554 = icmp slt i32 %1552, %1553
  br i1 %1554, label %1555, label %1695

1555:                                             ; preds = %1551
  store i32 0, ptr %5, align 4, !tbaa !14
  br label %1556

1556:                                             ; preds = %1688, %1555
  %1557 = load i32, ptr %5, align 4, !tbaa !14
  %1558 = load i32, ptr %7, align 4, !tbaa !14
  %1559 = icmp slt i32 %1557, %1558
  br i1 %1559, label %1560, label %1691

1560:                                             ; preds = %1556
  %1561 = load i32, ptr %11, align 4, !tbaa !14
  %1562 = icmp eq i32 %1561, 0
  br i1 %1562, label %1563, label %1620

1563:                                             ; preds = %1560
  %1564 = load i32, ptr %12, align 4, !tbaa !14
  %1565 = icmp eq i32 %1564, 0
  br i1 %1565, label %1566, label %1620

1566:                                             ; preds = %1563
  %1567 = load i32, ptr %13, align 4, !tbaa !14
  %1568 = icmp eq i32 %1567, 0
  br i1 %1568, label %1569, label %1620

1569:                                             ; preds = %1566
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #5
  %1570 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %1570, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #5
  %1571 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1571, ptr %112, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #5
  %1572 = load ptr, ptr %111, align 8, !tbaa !5
  %1573 = load i32, ptr %5, align 4, !tbaa !14
  %1574 = load i32, ptr %6, align 4, !tbaa !14
  %1575 = load i32, ptr %9, align 4, !tbaa !14
  %1576 = load ptr, ptr %4, align 8, !tbaa !5
  %1577 = call i32 @libxsmm_elementwise_get_index(i32 noundef %1573, i32 noundef %1574, i32 noundef %1575, ptr noundef %1576, i32 noundef 0)
  %1578 = sext i32 %1577 to i64
  %1579 = getelementptr inbounds double, ptr %1572, i64 %1578
  %1580 = load double, ptr %1579, align 8, !tbaa !31
  store double %1580, ptr %113, align 8, !tbaa !31
  %1581 = load double, ptr %113, align 8, !tbaa !31
  %1582 = load ptr, ptr %4, align 8, !tbaa !5
  %1583 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1582, i32 0, i32 10
  %1584 = load i16, ptr %1583, align 1, !tbaa !9
  %1585 = zext i16 %1584 to i32
  %1586 = call double @libxsmm_fp64_unary_compute(double noundef %1581, i32 noundef %1585)
  %1587 = load ptr, ptr %112, align 8, !tbaa !5
  %1588 = load i32, ptr %5, align 4, !tbaa !14
  %1589 = load i32, ptr %6, align 4, !tbaa !14
  %1590 = load i32, ptr %10, align 4, !tbaa !14
  %1591 = mul nsw i32 %1589, %1590
  %1592 = add nsw i32 %1588, %1591
  %1593 = sext i32 %1592 to i64
  %1594 = getelementptr inbounds double, ptr %1587, i64 %1593
  store double %1586, ptr %1594, align 8, !tbaa !31
  %1595 = load ptr, ptr %4, align 8, !tbaa !5
  %1596 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1595, i32 0, i32 10
  %1597 = load i16, ptr %1596, align 1, !tbaa !9
  %1598 = zext i16 %1597 to i32
  %1599 = icmp eq i32 %1598, 63
  br i1 %1599, label %1600, label %1619

1600:                                             ; preds = %1569
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #5
  %1601 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %1601, ptr %114, align 8, !tbaa !5
  %1602 = load ptr, ptr %112, align 8, !tbaa !5
  %1603 = load i32, ptr %5, align 4, !tbaa !14
  %1604 = load i32, ptr %6, align 4, !tbaa !14
  %1605 = load i32, ptr %10, align 4, !tbaa !14
  %1606 = mul nsw i32 %1604, %1605
  %1607 = add nsw i32 %1603, %1606
  %1608 = sext i32 %1607 to i64
  %1609 = getelementptr inbounds double, ptr %1602, i64 %1608
  %1610 = load double, ptr %1609, align 8, !tbaa !31
  %1611 = load ptr, ptr %114, align 8, !tbaa !5
  %1612 = load i32, ptr %5, align 4, !tbaa !14
  %1613 = load i32, ptr %6, align 4, !tbaa !14
  %1614 = load i32, ptr %10, align 4, !tbaa !14
  %1615 = mul nsw i32 %1613, %1614
  %1616 = add nsw i32 %1612, %1615
  %1617 = sext i32 %1616 to i64
  %1618 = getelementptr inbounds double, ptr %1611, i64 %1617
  store double %1610, ptr %1618, align 8, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #5
  br label %1619

1619:                                             ; preds = %1600, %1569
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #5
  br label %1687

1620:                                             ; preds = %1566, %1563, %1560
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #5
  %1621 = load ptr, ptr %16, align 8, !tbaa !5
  %1622 = load i32, ptr %5, align 4, !tbaa !14
  %1623 = load i32, ptr %6, align 4, !tbaa !14
  %1624 = load i32, ptr %9, align 4, !tbaa !14
  %1625 = load i32, ptr %11, align 4, !tbaa !14
  %1626 = load ptr, ptr %4, align 8, !tbaa !5
  %1627 = call float @libxsmm_elementwise_get_float_value(ptr noundef %1621, i32 noundef %1622, i32 noundef %1623, i32 noundef %1624, i32 noundef %1625, ptr noundef %1626, i32 noundef 0)
  store float %1627, ptr %115, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #5
  %1628 = load float, ptr %115, align 4, !tbaa !29
  %1629 = load ptr, ptr %4, align 8, !tbaa !5
  %1630 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1629, i32 0, i32 10
  %1631 = load i16, ptr %1630, align 1, !tbaa !9
  %1632 = zext i16 %1631 to i32
  %1633 = call float @libxsmm_fp32_unary_compute(float noundef %1628, i32 noundef %1632)
  store float %1633, ptr %116, align 4, !tbaa !29
  %1634 = load ptr, ptr %17, align 8, !tbaa !5
  %1635 = load i32, ptr %5, align 4, !tbaa !14
  %1636 = load i32, ptr %6, align 4, !tbaa !14
  %1637 = load i32, ptr %10, align 4, !tbaa !14
  %1638 = load i32, ptr %14, align 4, !tbaa !14
  %1639 = and i32 %1638, 4096
  %1640 = icmp ugt i32 %1639, 0
  %1641 = zext i1 %1640 to i32
  %1642 = load i32, ptr %12, align 4, !tbaa !14
  %1643 = load ptr, ptr %15, align 8, !tbaa !5
  %1644 = load i32, ptr %19, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %1634, ptr noundef %116, i32 noundef %1635, i32 noundef %1636, i32 noundef %1637, i32 noundef %1641, i32 noundef %1642, ptr noundef %1643, i32 noundef %1644)
  %1645 = load i32, ptr %19, align 4, !tbaa !14
  %1646 = add i32 %1645, 1
  store i32 %1646, ptr %19, align 4, !tbaa !14
  %1647 = load ptr, ptr %4, align 8, !tbaa !5
  %1648 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1647, i32 0, i32 10
  %1649 = load i16, ptr %1648, align 1, !tbaa !9
  %1650 = zext i16 %1649 to i32
  %1651 = icmp eq i32 %1650, 63
  br i1 %1651, label %1652, label %1686

1652:                                             ; preds = %1620
  %1653 = load i32, ptr %14, align 4, !tbaa !14
  %1654 = and i32 %1653, 4096
  %1655 = icmp ugt i32 %1654, 0
  br i1 %1655, label %1656, label %1679

1656:                                             ; preds = %1652
  %1657 = load i32, ptr %12, align 4, !tbaa !14
  %1658 = icmp eq i32 %1657, 4
  br i1 %1658, label %1659, label %1679

1659:                                             ; preds = %1656
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #5
  %1660 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1660, ptr %117, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #5
  %1661 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %1661, ptr %118, align 8, !tbaa !5
  %1662 = load ptr, ptr %117, align 8, !tbaa !5
  %1663 = load i32, ptr %5, align 4, !tbaa !14
  %1664 = load i32, ptr %6, align 4, !tbaa !14
  %1665 = load i32, ptr %10, align 4, !tbaa !14
  %1666 = mul nsw i32 %1664, %1665
  %1667 = add nsw i32 %1663, %1666
  %1668 = sext i32 %1667 to i64
  %1669 = getelementptr inbounds i8, ptr %1662, i64 %1668
  %1670 = load i8, ptr %1669, align 1, !tbaa !43
  %1671 = load ptr, ptr %118, align 8, !tbaa !5
  %1672 = load i32, ptr %5, align 4, !tbaa !14
  %1673 = load i32, ptr %6, align 4, !tbaa !14
  %1674 = load i32, ptr %10, align 4, !tbaa !14
  %1675 = mul nsw i32 %1673, %1674
  %1676 = add nsw i32 %1672, %1675
  %1677 = sext i32 %1676 to i64
  %1678 = getelementptr inbounds i8, ptr %1671, i64 %1677
  store i8 %1670, ptr %1678, align 1, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #5
  br label %1685

1679:                                             ; preds = %1656, %1652
  %1680 = load ptr, ptr %18, align 8, !tbaa !5
  %1681 = load i32, ptr %5, align 4, !tbaa !14
  %1682 = load i32, ptr %6, align 4, !tbaa !14
  %1683 = load i32, ptr %10, align 4, !tbaa !14
  %1684 = load i32, ptr %12, align 4, !tbaa !14
  call void @libxsmm_elementwise_store_value(ptr noundef %1680, ptr noundef %116, i32 noundef %1681, i32 noundef %1682, i32 noundef %1683, i32 noundef 0, i32 noundef %1684, ptr noundef null, i32 noundef 0)
  br label %1685

1685:                                             ; preds = %1679, %1659
  br label %1686

1686:                                             ; preds = %1685, %1620
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #5
  br label %1687

1687:                                             ; preds = %1686, %1619
  br label %1688

1688:                                             ; preds = %1687
  %1689 = load i32, ptr %5, align 4, !tbaa !14
  %1690 = add nsw i32 %1689, 1
  store i32 %1690, ptr %5, align 4, !tbaa !14
  br label %1556, !llvm.loop !70

1691:                                             ; preds = %1556
  br label %1692

1692:                                             ; preds = %1691
  %1693 = load i32, ptr %6, align 4, !tbaa !14
  %1694 = add nsw i32 %1693, 1
  store i32 %1694, ptr %6, align 4, !tbaa !14
  br label %1551, !llvm.loop !71

1695:                                             ; preds = %1551
  br label %1696

1696:                                             ; preds = %1695, %1549
  br label %1697

1697:                                             ; preds = %1696, %1433
  br label %1698

1698:                                             ; preds = %1697, %1369
  br label %1699

1699:                                             ; preds = %1698, %1288
  br label %1700

1700:                                             ; preds = %1699, %1085
  br label %1701

1701:                                             ; preds = %1700, %917
  br label %1702

1702:                                             ; preds = %1701, %683
  br label %1703

1703:                                             ; preds = %1702, %524
  br label %1704

1704:                                             ; preds = %1703, %371
  br label %1705

1705:                                             ; preds = %1704, %277
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  br label %1706

1706:                                             ; preds = %1705, %144
  br label %1707

1707:                                             ; preds = %1706, %137
  br label %1708

1708:                                             ; preds = %1707, %122
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.nearbyint.f32(float) #4

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) #3

attributes #0 = { nounwind "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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !12, i64 29}
!10 = !{!"libxsmm_meltw_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !12, i64 27, !12, i64 29, !7, i64 31}
!11 = !{!"int", !7, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = !{!10, !11, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"libxsmm_meltw_unary_param", !17, i64 0, !18, i64 32, !18, i64 80}
!17 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!18 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!19 = !{!20, !20, i64 0}
!20 = !{!"long long", !7, i64 0}
!21 = !{!10, !11, i64 4}
!22 = !{!10, !11, i64 8}
!23 = !{!10, !11, i64 12}
!24 = !{!10, !12, i64 27}
!25 = !{!16, !6, i64 8}
!26 = !{!16, !6, i64 32}
!27 = !{!16, !6, i64 80}
!28 = !{!16, !6, i64 88}
!29 = !{!30, !30, i64 0}
!30 = !{!"float", !7, i64 0}
!31 = !{!32, !32, i64 0}
!32 = !{!"double", !7, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34}
!37 = distinct !{!37, !34}
!38 = distinct !{!38, !34}
!39 = distinct !{!39, !34}
!40 = distinct !{!40, !34}
!41 = distinct !{!41, !34}
!42 = !{!16, !6, i64 40}
!43 = !{!7, !7, i64 0}
!44 = distinct !{!44, !34}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = distinct !{!47, !34}
!48 = !{!12, !12, i64 0}
!49 = distinct !{!49, !34}
!50 = distinct !{!50, !34}
!51 = distinct !{!51, !34}
!52 = distinct !{!52, !34}
!53 = distinct !{!53, !34}
!54 = distinct !{!54, !34}
!55 = distinct !{!55, !34}
!56 = distinct !{!56, !34}
!57 = distinct !{!57, !34}
!58 = distinct !{!58, !34}
!59 = distinct !{!59, !34}
!60 = distinct !{!60, !34}
!61 = distinct !{!61, !34}
!62 = distinct !{!62, !34}
!63 = distinct !{!63, !34}
!64 = distinct !{!64, !34}
!65 = distinct !{!65, !34}
!66 = distinct !{!66, !34}
!67 = distinct !{!67, !34}
!68 = distinct !{!68, !34}
!69 = distinct !{!69, !34}
!70 = distinct !{!70, !34}
!71 = distinct !{!71, !34}


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

@libxsmm_target_archid = external local_unnamed_addr global i32, align 4

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare float @expf(float noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local float @libxsmm_fp32_unary_compute(float noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local double @libxsmm_fp64_unary_compute(double noundef, i32 noundef) local_unnamed_addr #1

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

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

; Function Attrs: nounwind uwtable
declare dso_local zeroext i8 @libxsmm_extract_bit(ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

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

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

declare zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef) local_unnamed_addr #3

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_reference_unary_elementwise(ptr noundef %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = alloca float, align 4
  %4 = alloca float, align 4
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca [16 x float], align 16
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = tail call i32 @libxsmm_is_reduce_op(ptr noundef %1)
  %.not = icmp eq i32 %12, 0
  br i1 %.not, label %14, label %13

13:                                               ; preds = %2
  tail call void @libxsmm_elementwise_reduce_kernel(ptr noundef %0, ptr noundef %1)
  br label %.loopexit

14:                                               ; preds = %2
  %15 = getelementptr inbounds i8, ptr %1, i64 29
  %16 = load i16, ptr %15, align 1, !tbaa !5
  %.off = add i16 %16, -51
  %switch = icmp ult i16 %.off, 2
  br i1 %switch, label %17, label %18

17:                                               ; preds = %14
  tail call void @libxsmm_elementwise_gather_scatter_kernel(ptr noundef %0, ptr noundef nonnull %1)
  br label %.loopexit

18:                                               ; preds = %14
  %19 = tail call i32 @libxsmm_is_transform_op(ptr noundef nonnull %1)
  %.not689 = icmp eq i32 %19, 0
  br i1 %.not689, label %21, label %20

20:                                               ; preds = %18
  tail call void @libxsmm_elementwise_transform_kernel(ptr noundef %0, ptr noundef nonnull %1)
  br label %.loopexit

21:                                               ; preds = %18
  %22 = load i32, ptr %1, align 1, !tbaa !11
  %23 = load i16, ptr %15, align 1, !tbaa !5
  %24 = icmp eq i16 %23, 27
  br i1 %24, label %25, label %28

25:                                               ; preds = %21
  %26 = load ptr, ptr %0, align 8, !tbaa !12
  %27 = load i64, ptr %26, align 8, !tbaa !17
  br label %32

28:                                               ; preds = %21
  %29 = getelementptr inbounds i8, ptr %1, i64 4
  %30 = load i32, ptr %29, align 1, !tbaa !19
  %31 = zext i32 %30 to i64
  br label %32

32:                                               ; preds = %28, %25
  %33 = phi i64 [ %27, %25 ], [ %31, %28 ]
  %34 = trunc i64 %33 to i32
  %35 = getelementptr inbounds i8, ptr %1, i64 8
  %36 = load i32, ptr %35, align 1, !tbaa !20
  %37 = getelementptr inbounds i8, ptr %1, i64 12
  %38 = load i32, ptr %37, align 1, !tbaa !21
  %39 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 0) #6
  %40 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #6
  %41 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #6
  %42 = getelementptr inbounds i8, ptr %1, i64 27
  %43 = load i16, ptr %42, align 1, !tbaa !22
  %.fr = freeze i16 %43
  %44 = zext i16 %.fr to i32
  %45 = getelementptr inbounds i8, ptr %0, i64 8
  %46 = load ptr, ptr %45, align 8, !tbaa !23
  %47 = getelementptr inbounds i8, ptr %0, i64 32
  %48 = load ptr, ptr %47, align 8, !tbaa !24
  %49 = getelementptr inbounds i8, ptr %0, i64 80
  %50 = load ptr, ptr %49, align 8, !tbaa !25
  %51 = getelementptr inbounds i8, ptr %0, i64 88
  %52 = load ptr, ptr %51, align 8, !tbaa !26
  %53 = load i16, ptr %15, align 1, !tbaa !5
  switch i16 %53, label %.preheader698 [
    i16 24, label %63
    i16 23, label %86
    i16 5, label %115
    i16 34, label %115
    i16 36, label %115
    i16 6, label %174
    i16 35, label %174
    i16 37, label %174
    i16 42, label %214
    i16 43, label %291
    i16 25, label %344
    i16 26, label %411
    i16 33, label %435
    i16 64, label %452
    i16 65, label %452
  ]

.preheader698:                                    ; preds = %32
  %54 = icmp sgt i32 %34, 0
  br i1 %54, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader698
  %55 = icmp sgt i32 %22, 0
  %56 = icmp eq i32 %39, 0
  %57 = icmp eq i32 %40, 0
  %or.cond21 = select i1 %56, i1 %57, i1 false
  %58 = icmp eq i32 %41, 0
  %or.cond23 = select i1 %or.cond21, i1 %58, i1 false
  %59 = and i32 %44, 4096
  %.lobit = lshr exact i32 %59, 12
  %60 = icmp ne i32 %59, 0
  %61 = icmp eq i32 %40, 4
  %or.cond25 = select i1 %60, i1 %61, i1 false
  %62 = sext i32 %38 to i64
  %wide.trip.count1022 = and i64 %33, 2147483647
  %wide.trip.count1012 = zext nneg i32 %22 to i64
  %wide.trip.count1017 = zext nneg i32 %22 to i64
  br label %.preheader

63:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #6
  %64 = icmp sgt i32 %34, 0
  br i1 %64, label %.preheader699.lr.ph, label %._crit_edge829

.preheader699.lr.ph:                              ; preds = %63
  %65 = icmp sgt i32 %22, 0
  %66 = icmp eq i32 %39, 0
  %67 = icmp eq i32 %40, 0
  %or.cond = select i1 %66, i1 %67, i1 false
  %68 = icmp eq i32 %41, 0
  %or.cond3 = select i1 %or.cond, i1 %68, i1 false
  br label %.preheader699

.preheader699:                                    ; preds = %.preheader699.lr.ph, %._crit_edge818
  %.0643827 = phi i32 [ 0, %.preheader699.lr.ph ], [ %79, %._crit_edge818 ]
  %.0661826 = phi double [ 0.000000e+00, %.preheader699.lr.ph ], [ %.1662.lcssa, %._crit_edge818 ]
  %.lcssa824825 = phi float [ 0.000000e+00, %.preheader699.lr.ph ], [ %.lcssa, %._crit_edge818 ]
  br i1 %65, label %.lr.ph817, label %._crit_edge818

.lr.ph817:                                        ; preds = %.preheader699
  br i1 %or.cond3, label %.lr.ph817.split.us, label %.lr.ph817.split

.lr.ph817.split.us:                               ; preds = %.lr.ph817, %.lr.ph817.split.us
  %.0816.us = phi i32 [ %74, %.lr.ph817.split.us ], [ 0, %.lr.ph817 ]
  %.1662815.us = phi double [ %73, %.lr.ph817.split.us ], [ %.0661826, %.lr.ph817 ]
  %69 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %.0816.us, i32 noundef %.0643827, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds double, ptr %48, i64 %70
  %72 = load double, ptr %71, align 8, !tbaa !27
  %73 = fadd double %.1662815.us, %72
  %74 = add nuw nsw i32 %.0816.us, 1
  %exitcond1007.not = icmp eq i32 %74, %22
  br i1 %exitcond1007.not, label %._crit_edge818, label %.lr.ph817.split.us, !llvm.loop !29

.lr.ph817.split:                                  ; preds = %.lr.ph817, %.lr.ph817.split
  %.0816 = phi i32 [ %78, %.lr.ph817.split ], [ 0, %.lr.ph817 ]
  %75 = phi float [ %77, %.lr.ph817.split ], [ %.lcssa824825, %.lr.ph817 ]
  %76 = tail call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.0816, i32 noundef %.0643827, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  %77 = fadd float %76, %75
  %78 = add nuw nsw i32 %.0816, 1
  %exitcond1006.not = icmp eq i32 %78, %22
  br i1 %exitcond1006.not, label %._crit_edge818, label %.lr.ph817.split, !llvm.loop !29

._crit_edge818:                                   ; preds = %.lr.ph817.split, %.lr.ph817.split.us, %.preheader699
  %.lcssa = phi float [ %.lcssa824825, %.preheader699 ], [ %.lcssa824825, %.lr.ph817.split.us ], [ %77, %.lr.ph817.split ]
  %.1662.lcssa = phi double [ %.0661826, %.preheader699 ], [ %73, %.lr.ph817.split.us ], [ %.0661826, %.lr.ph817.split ]
  %79 = add nuw nsw i32 %.0643827, 1
  %exitcond1008.not = icmp eq i32 %79, %34
  br i1 %exitcond1008.not, label %._crit_edge829, label %.preheader699, !llvm.loop !31

._crit_edge829:                                   ; preds = %._crit_edge818, %63
  %.lcssa824.lcssa = phi float [ 0.000000e+00, %63 ], [ %.lcssa, %._crit_edge818 ]
  %.0661.lcssa = phi double [ 0.000000e+00, %63 ], [ %.1662.lcssa, %._crit_edge818 ]
  store float %.lcssa824.lcssa, ptr %3, align 4, !tbaa !32
  %80 = icmp eq i32 %39, 0
  %81 = icmp eq i32 %40, 0
  %or.cond5 = select i1 %80, i1 %81, i1 false
  %82 = icmp eq i32 %41, 0
  %or.cond7 = select i1 %or.cond5, i1 %82, i1 false
  br i1 %or.cond7, label %83, label %84

83:                                               ; preds = %._crit_edge829
  store double %.0661.lcssa, ptr %50, align 8, !tbaa !27
  br label %85

84:                                               ; preds = %._crit_edge829
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %3, i32 noundef 0, i32 noundef 0, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  br label %85

85:                                               ; preds = %84, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #6
  br label %.loopexit

86:                                               ; preds = %32
  %87 = load i32, ptr %1, align 1, !tbaa !11
  %88 = getelementptr inbounds i8, ptr %1, i64 4
  %89 = load i32, ptr %88, align 1, !tbaa !19
  %90 = load i32, ptr %35, align 1, !tbaa !20
  %91 = load i32, ptr %37, align 1, !tbaa !21
  %92 = sdiv i32 %90, %87
  %93 = icmp sgt i32 %92, 0
  br i1 %93, label %.preheader701.lr.ph, label %.loopexit

.preheader701.lr.ph:                              ; preds = %86
  %94 = icmp sgt i32 %87, 0
  %factor.op.mul803 = mul i32 %90, %89
  %95 = icmp sgt i32 %89, 0
  br label %.preheader701

.preheader701:                                    ; preds = %.preheader701.lr.ph, %._crit_edge809
  %.0665814 = phi i32 [ 0, %.preheader701.lr.ph ], [ %114, %._crit_edge809 ]
  br i1 %94, label %.lr.ph808, label %._crit_edge809

.lr.ph808:                                        ; preds = %.preheader701
  %96 = mul nuw nsw i32 %.0665814, %87
  %97 = sdiv i32 %91, %89
  %98 = icmp sgt i32 %97, 0
  %99 = mul i32 %.0665814, %89
  br i1 %98, label %.lr.ph808.split.us, label %.lr.ph808.split

.lr.ph808.split.us:                               ; preds = %.lr.ph808
  br i1 %95, label %.preheader700.lr.ph.us.us, label %.preheader700.lr.ph.us

.preheader700.lr.ph.us.us:                        ; preds = %.lr.ph808.split.us, %._crit_edge805.split.us.us.us
  %.0664806.us.us = phi i32 [ %109, %._crit_edge805.split.us.us.us ], [ 0, %.lr.ph808.split.us ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  store float 0.000000e+00, ptr %4, align 4, !tbaa !32
  br label %.preheader700.us.us.us

.preheader700.us.us.us:                           ; preds = %._crit_edge802.us.us.us, %.preheader700.lr.ph.us.us
  %.0666804.us.us.us = phi i32 [ 0, %.preheader700.lr.ph.us.us ], [ %107, %._crit_edge802.us.us.us ]
  %factor.op.mul.reass.us.us.us = mul i32 %factor.op.mul803, %.0666804.us.us.us
  %100 = add i32 %factor.op.mul.reass.us.us.us, %.0664806.us.us
  br label %101

101:                                              ; preds = %101, %.preheader700.us.us.us
  %.0667800.us.us.us = phi i32 [ 0, %.preheader700.us.us.us ], [ %106, %101 ]
  %reass.add.us.us.us = add i32 %.0667800.us.us.us, %99
  %reass.mul.us.us.us = mul i32 %reass.add.us.us.us, %87
  %102 = add i32 %100, %reass.mul.us.us.us
  %103 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %102, i32 noundef 0, i32 noundef %102, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  %104 = load float, ptr %4, align 4, !tbaa !32
  %105 = fadd float %103, %104
  store float %105, ptr %4, align 4, !tbaa !32
  %106 = add nuw nsw i32 %.0667800.us.us.us, 1
  %exitcond1002.not = icmp eq i32 %106, %89
  br i1 %exitcond1002.not, label %._crit_edge802.us.us.us, label %101, !llvm.loop !34

._crit_edge802.us.us.us:                          ; preds = %101
  %107 = add nuw nsw i32 %.0666804.us.us.us, 1
  %exitcond1003.not = icmp eq i32 %107, %97
  br i1 %exitcond1003.not, label %._crit_edge805.split.us.us.us, label %.preheader700.us.us.us, !llvm.loop !35

._crit_edge805.split.us.us.us:                    ; preds = %._crit_edge802.us.us.us
  %108 = add nuw nsw i32 %.0664806.us.us, %96
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %4, i32 noundef %108, i32 noundef 0, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  %109 = add nuw nsw i32 %.0664806.us.us, 1
  %exitcond1004.not = icmp eq i32 %109, %87
  br i1 %exitcond1004.not, label %._crit_edge809, label %.preheader700.lr.ph.us.us, !llvm.loop !36

.preheader700.lr.ph.us:                           ; preds = %.lr.ph808.split.us, %.preheader700.lr.ph.us
  %.0664806.us = phi i32 [ %111, %.preheader700.lr.ph.us ], [ 0, %.lr.ph808.split.us ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  store float 0.000000e+00, ptr %4, align 4, !tbaa !32
  %110 = add nuw nsw i32 %.0664806.us, %96
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %4, i32 noundef %110, i32 noundef 0, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  %111 = add nuw nsw i32 %.0664806.us, 1
  %exitcond1001.not = icmp eq i32 %111, %87
  br i1 %exitcond1001.not, label %._crit_edge809, label %.preheader700.lr.ph.us, !llvm.loop !36

.lr.ph808.split:                                  ; preds = %.lr.ph808, %.lr.ph808.split
  %.0664806 = phi i32 [ %113, %.lr.ph808.split ], [ 0, %.lr.ph808 ]
  %112 = add nuw nsw i32 %.0664806, %96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #6
  store float 0.000000e+00, ptr %4, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %4, i32 noundef %112, i32 noundef 0, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #6
  %113 = add nuw nsw i32 %.0664806, 1
  %exitcond1000.not = icmp eq i32 %113, %87
  br i1 %exitcond1000.not, label %._crit_edge809, label %.lr.ph808.split, !llvm.loop !36

._crit_edge809:                                   ; preds = %.lr.ph808.split, %.preheader700.lr.ph.us, %._crit_edge805.split.us.us.us, %.preheader701
  %114 = add nuw nsw i32 %.0665814, 1
  %exitcond1005.not = icmp eq i32 %114, %92
  br i1 %exitcond1005.not, label %.loopexit, label %.preheader701, !llvm.loop !37

115:                                              ; preds = %32, %32, %32
  %116 = and i32 %44, 1
  %.not697.not = icmp eq i32 %116, 0
  br i1 %.not697.not, label %121, label %117

117:                                              ; preds = %115
  %118 = add nsw i32 %38, 15
  %119 = sdiv i32 %118, 16
  %120 = shl nsw i32 %119, 4
  br label %121

121:                                              ; preds = %115, %117
  %122 = phi i32 [ %120, %117 ], [ %38, %115 ]
  %123 = icmp eq i16 %53, 5
  br i1 %123, label %127, label %124

124:                                              ; preds = %121
  %125 = load ptr, ptr %0, align 8, !tbaa !12
  %126 = load float, ptr %125, align 4, !tbaa !32
  br label %127

127:                                              ; preds = %121, %124
  %128 = phi float [ %126, %124 ], [ 1.000000e+00, %121 ]
  %129 = icmp sgt i32 %34, 0
  br i1 %129, label %.preheader703.lr.ph, label %.loopexit

.preheader703.lr.ph:                              ; preds = %127
  %130 = icmp sgt i32 %22, 0
  br label %.preheader703

.preheader703:                                    ; preds = %.preheader703.lr.ph, %._crit_edge797
  %.1644798 = phi i32 [ 0, %.preheader703.lr.ph ], [ %173, %._crit_edge797 ]
  br i1 %130, label %.lr.ph, label %._crit_edge797

.lr.ph:                                           ; preds = %.preheader703
  br i1 %.not697.not, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %148
  %.1796.us = phi i32 [ %149, %148 ], [ 0, %.lr.ph ]
  %131 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.1796.us, i32 noundef %.1644798, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  store float 0.000000e+00, ptr %5, align 4, !tbaa !32
  %132 = load i16, ptr %15, align 1, !tbaa !5
  switch i16 %132, label %148 [
    i16 5, label %145
    i16 34, label %141
    i16 36, label %133
  ]

133:                                              ; preds = %.lr.ph.split.us
  %134 = fcmp ugt float %131, 0.000000e+00
  br i1 %134, label %139, label %135

135:                                              ; preds = %133
  %136 = call float @expf(float noundef %131) #6, !tbaa !38
  %137 = fadd float %136, -1.000000e+00
  %138 = fmul float %128, %137
  br label %139

139:                                              ; preds = %135, %133
  %140 = phi float [ %138, %135 ], [ %131, %133 ]
  store float %140, ptr %5, align 4, !tbaa !32
  br label %148

141:                                              ; preds = %.lr.ph.split.us
  %142 = fcmp ole float %131, 0.000000e+00
  %143 = fmul float %128, %131
  %144 = select i1 %142, float %143, float %131
  store float %144, ptr %5, align 4, !tbaa !32
  br label %148

145:                                              ; preds = %.lr.ph.split.us
  %146 = fcmp ole float %131, 0.000000e+00
  %147 = select i1 %146, float 0.000000e+00, float %131
  store float %147, ptr %5, align 4, !tbaa !32
  br label %148

148:                                              ; preds = %145, %141, %139, %.lr.ph.split.us
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %5, i32 noundef %.1796.us, i32 noundef %.1644798, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  %149 = add nuw nsw i32 %.1796.us, 1
  %exitcond998.not = icmp eq i32 %149, %22
  br i1 %exitcond998.not, label %._crit_edge797, label %.lr.ph.split.us, !llvm.loop !39

.lr.ph.split:                                     ; preds = %.lr.ph, %171
  %.1796 = phi i32 [ %172, %171 ], [ 0, %.lr.ph ]
  %150 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.1796, i32 noundef %.1644798, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #6
  store float 0.000000e+00, ptr %5, align 4, !tbaa !32
  %151 = load i16, ptr %15, align 1, !tbaa !5
  switch i16 %151, label %167 [
    i16 5, label %152
    i16 34, label %155
    i16 36, label %159
  ]

152:                                              ; preds = %.lr.ph.split
  %153 = fcmp ole float %150, 0.000000e+00
  %154 = select i1 %153, float 0.000000e+00, float %150
  store float %154, ptr %5, align 4, !tbaa !32
  br label %167

155:                                              ; preds = %.lr.ph.split
  %156 = fcmp ole float %150, 0.000000e+00
  %157 = fmul float %128, %150
  %158 = select i1 %156, float %157, float %150
  store float %158, ptr %5, align 4, !tbaa !32
  br label %167

159:                                              ; preds = %.lr.ph.split
  %160 = fcmp ugt float %150, 0.000000e+00
  br i1 %160, label %165, label %161

161:                                              ; preds = %159
  %162 = call float @expf(float noundef %150) #6, !tbaa !38
  %163 = fadd float %162, -1.000000e+00
  %164 = fmul float %128, %163
  br label %165

165:                                              ; preds = %159, %161
  %166 = phi float [ %164, %161 ], [ %150, %159 ]
  store float %166, ptr %5, align 4, !tbaa !32
  br label %167

167:                                              ; preds = %.lr.ph.split, %155, %165, %152
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %5, i32 noundef %.1796, i32 noundef %.1644798, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  %168 = fcmp ugt float %150, 0.000000e+00
  br i1 %168, label %170, label %169

169:                                              ; preds = %167
  call void @libxsmm_zero_bit(ptr noundef %52, i32 noundef %.1796, i32 noundef %.1644798, i32 noundef %122)
  br label %171

170:                                              ; preds = %167
  call void @libxsmm_set_bit(ptr noundef %52, i32 noundef %.1796, i32 noundef %.1644798, i32 noundef %122)
  br label %171

171:                                              ; preds = %169, %170
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #6
  %172 = add nuw nsw i32 %.1796, 1
  %exitcond997.not = icmp eq i32 %172, %22
  br i1 %exitcond997.not, label %._crit_edge797, label %.lr.ph.split, !llvm.loop !39

._crit_edge797:                                   ; preds = %171, %148, %.preheader703
  %173 = add nuw nsw i32 %.1644798, 1
  %exitcond999.not = icmp eq i32 %173, %34
  br i1 %exitcond999.not, label %.loopexit, label %.preheader703, !llvm.loop !40

174:                                              ; preds = %32, %32, %32
  %175 = and i32 %44, 1
  %176 = icmp eq i32 %175, 0
  br i1 %176, label %181, label %177

177:                                              ; preds = %174
  %178 = add nsw i32 %36, 15
  %179 = sdiv i32 %178, 16
  %180 = shl nsw i32 %179, 4
  br label %181

181:                                              ; preds = %174, %177
  %182 = phi i32 [ %180, %177 ], [ %36, %174 ]
  %183 = icmp eq i16 %53, 6
  br i1 %183, label %187, label %184

184:                                              ; preds = %181
  %185 = load ptr, ptr %0, align 8, !tbaa !12
  %186 = load float, ptr %185, align 4, !tbaa !32
  br label %187

187:                                              ; preds = %181, %184
  %188 = phi float [ %186, %184 ], [ 1.000000e+00, %181 ]
  %189 = getelementptr inbounds i8, ptr %0, i64 40
  %190 = load ptr, ptr %189, align 8, !tbaa !41
  %191 = icmp sgt i32 %34, 0
  %192 = icmp sgt i32 %22, 0
  %or.cond1065 = select i1 %191, i1 %192, i1 false
  br i1 %or.cond1065, label %.preheader705.us, label %.loopexit

.preheader705.us:                                 ; preds = %187, %._crit_edge793.us
  %.2645794.us = phi i32 [ %213, %._crit_edge793.us ], [ 0, %187 ]
  br label %193

193:                                              ; preds = %.preheader705.us, %211
  %.2792.us = phi i32 [ 0, %.preheader705.us ], [ %212, %211 ]
  %194 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.2792.us, i32 noundef %.2645794.us, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #6
  store float 0.000000e+00, ptr %6, align 4, !tbaa !32
  %195 = load i16, ptr %15, align 1, !tbaa !5
  switch i16 %195, label %211 [
    i16 6, label %207
    i16 35, label %202
    i16 37, label %196
  ]

196:                                              ; preds = %193
  %197 = call float @libxsmm_elementwise_get_float_value(ptr noundef %190, i32 noundef %.2792.us, i32 noundef %.2645794.us, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  %198 = fcmp ogt float %197, 0.000000e+00
  %199 = fadd float %188, %197
  %200 = fmul float %194, %199
  %201 = select i1 %198, float %194, float %200
  store float %201, ptr %6, align 4, !tbaa !32
  br label %211

202:                                              ; preds = %193
  %203 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %190, i32 noundef %.2792.us, i32 noundef %.2645794.us, i32 noundef %182)
  %204 = icmp eq i8 %203, 0
  %205 = fmul float %188, %194
  %206 = select i1 %204, float %205, float %194
  store float %206, ptr %6, align 4, !tbaa !32
  br label %211

207:                                              ; preds = %193
  %208 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %190, i32 noundef %.2792.us, i32 noundef %.2645794.us, i32 noundef %182)
  %209 = icmp eq i8 %208, 0
  %210 = select i1 %209, float 0.000000e+00, float %194
  store float %210, ptr %6, align 4, !tbaa !32
  br label %211

211:                                              ; preds = %207, %202, %196, %193
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %6, i32 noundef %.2792.us, i32 noundef %.2645794.us, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #6
  %212 = add nuw nsw i32 %.2792.us, 1
  %exitcond995.not = icmp eq i32 %212, %22
  br i1 %exitcond995.not, label %._crit_edge793.us, label %193, !llvm.loop !42

._crit_edge793.us:                                ; preds = %211
  %213 = add nuw nsw i32 %.2645794.us, 1
  %exitcond996.not = icmp eq i32 %213, %34
  br i1 %exitcond996.not, label %.loopexit, label %.preheader705.us, !llvm.loop !43

214:                                              ; preds = %32
  %215 = and i32 %44, 1024
  %.not694 = icmp eq i32 %215, 0
  %216 = and i32 %44, 16
  %.not695 = icmp eq i32 %216, 0
  br i1 %.not694, label %217, label %221

217:                                              ; preds = %214
  %218 = getelementptr inbounds i8, ptr %0, i64 40
  %219 = load ptr, ptr %218, align 8, !tbaa !41
  %220 = load float, ptr %219, align 4, !tbaa !32
  br label %221

221:                                              ; preds = %214, %217
  %222 = phi float [ %220, %217 ], [ 1.000000e+00, %214 ]
  %223 = icmp eq i32 %39, 1
  %224 = icmp eq i32 %40, 12
  %or.cond9 = select i1 %223, i1 %224, i1 false
  br i1 %or.cond9, label %.preheader708, label %249

.preheader708:                                    ; preds = %221
  %225 = icmp sgt i32 %34, 0
  %226 = icmp sgt i32 %22, 0
  %or.cond1066 = select i1 %225, i1 %226, i1 false
  br i1 %or.cond1066, label %.preheader707.us.preheader, label %.loopexit

.preheader707.us.preheader:                       ; preds = %.preheader708
  %227 = sext i32 %38 to i64
  %wide.trip.count993 = and i64 %33, 2147483647
  %wide.trip.count983 = zext nneg i32 %22 to i64
  %wide.trip.count988 = zext nneg i32 %22 to i64
  br label %.preheader707.us

.preheader707.us:                                 ; preds = %.preheader707.us.preheader, %._crit_edge783.us
  %indvars.iv990 = phi i64 [ 0, %.preheader707.us.preheader ], [ %indvars.iv.next991, %._crit_edge783.us ]
  %228 = mul nsw i64 %indvars.iv990, %227
  %229 = trunc nuw nsw i64 %indvars.iv990 to i32
  %invariant.gep1063 = getelementptr i8, ptr %50, i64 %228
  br i1 %.not695, label %.lr.ph.split.us.us791, label %.lr.ph.split.us790

.lr.ph.split.us790:                               ; preds = %.preheader707.us, %.lr.ph.split.us790
  %indvars.iv980 = phi i64 [ %indvars.iv.next981, %.lr.ph.split.us790 ], [ 0, %.preheader707.us ]
  %230 = trunc nuw nsw i64 %indvars.iv980 to i32
  %231 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %230, i32 noundef %229, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds float, ptr %48, i64 %232
  %234 = load float, ptr %233, align 4, !tbaa !32
  %235 = fmul float %222, %234
  %236 = tail call float @llvm.nearbyint.f32(float %235)
  %237 = fcmp olt float %236, -1.280000e+02
  %.0670.us = select i1 %237, float -1.280000e+02, float %236
  %238 = fcmp ogt float %.0670.us, 1.270000e+02
  %.1671.us = select i1 %238, float 1.270000e+02, float %.0670.us
  %239 = fptosi float %.1671.us to i8
  %gep1062 = getelementptr i8, ptr %invariant.gep1063, i64 %indvars.iv980
  store i8 %239, ptr %gep1062, align 1, !tbaa !44
  %indvars.iv.next981 = add nuw nsw i64 %indvars.iv980, 1
  %exitcond984.not = icmp eq i64 %indvars.iv.next981, %wide.trip.count983
  br i1 %exitcond984.not, label %._crit_edge783.us, label %.lr.ph.split.us790, !llvm.loop !45

._crit_edge783.us:                                ; preds = %.lr.ph.split.us790, %.lr.ph.split.us.us791
  %indvars.iv.next991 = add nuw nsw i64 %indvars.iv990, 1
  %exitcond994.not = icmp eq i64 %indvars.iv.next991, %wide.trip.count993
  br i1 %exitcond994.not, label %.loopexit, label %.preheader707.us, !llvm.loop !46

.lr.ph.split.us.us791:                            ; preds = %.preheader707.us, %.lr.ph.split.us.us791
  %indvars.iv985 = phi i64 [ %indvars.iv.next986, %.lr.ph.split.us.us791 ], [ 0, %.preheader707.us ]
  %240 = trunc nuw nsw i64 %indvars.iv985 to i32
  %241 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %240, i32 noundef %229, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds float, ptr %48, i64 %242
  %244 = load float, ptr %243, align 4, !tbaa !32
  %245 = fmul float %222, %244
  %246 = tail call float @llvm.nearbyint.f32(float %245)
  %247 = fptosi float %246 to i32
  %248 = trunc i32 %247 to i8
  %gep1064 = getelementptr i8, ptr %invariant.gep1063, i64 %indvars.iv985
  store i8 %248, ptr %gep1064, align 1, !tbaa !44
  %indvars.iv.next986 = add nuw nsw i64 %indvars.iv985, 1
  %exitcond989.not = icmp eq i64 %indvars.iv.next986, %wide.trip.count988
  br i1 %exitcond989.not, label %._crit_edge783.us, label %.lr.ph.split.us.us791, !llvm.loop !45

249:                                              ; preds = %221
  %250 = icmp eq i32 %40, 10
  %or.cond11 = select i1 %223, i1 %250, i1 false
  br i1 %or.cond11, label %.preheader711, label %275

.preheader711:                                    ; preds = %249
  %251 = icmp sgt i32 %34, 0
  %252 = icmp sgt i32 %22, 0
  %or.cond1067 = select i1 %251, i1 %252, i1 false
  br i1 %or.cond1067, label %.preheader710.us.preheader, label %.loopexit

.preheader710.us.preheader:                       ; preds = %.preheader711
  %253 = sext i32 %38 to i64
  %wide.trip.count978 = and i64 %33, 2147483647
  %wide.trip.count968 = zext nneg i32 %22 to i64
  %wide.trip.count973 = zext nneg i32 %22 to i64
  br label %.preheader710.us

.preheader710.us:                                 ; preds = %.preheader710.us.preheader, %._crit_edge775.us
  %indvars.iv975 = phi i64 [ 0, %.preheader710.us.preheader ], [ %indvars.iv.next976, %._crit_edge775.us ]
  %254 = mul nsw i64 %indvars.iv975, %253
  %255 = trunc nuw nsw i64 %indvars.iv975 to i32
  %invariant.gep1059 = getelementptr i16, ptr %50, i64 %254
  br i1 %.not695, label %.lr.ph.split.us.us, label %.lr.ph.split.us781

.lr.ph.split.us781:                               ; preds = %.preheader710.us, %.lr.ph.split.us781
  %indvars.iv965 = phi i64 [ %indvars.iv.next966, %.lr.ph.split.us781 ], [ 0, %.preheader710.us ]
  %256 = trunc nuw nsw i64 %indvars.iv965 to i32
  %257 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %256, i32 noundef %255, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds float, ptr %48, i64 %258
  %260 = load float, ptr %259, align 4, !tbaa !32
  %261 = fmul float %222, %260
  %262 = tail call float @llvm.nearbyint.f32(float %261)
  %263 = fcmp olt float %262, -3.276800e+04
  %.0672.us = select i1 %263, float -3.276800e+04, float %262
  %264 = fcmp ogt float %.0672.us, 3.276700e+04
  %.1673.us = select i1 %264, float 3.276700e+04, float %.0672.us
  %265 = fptosi float %.1673.us to i16
  %gep1058 = getelementptr i16, ptr %invariant.gep1059, i64 %indvars.iv965
  store i16 %265, ptr %gep1058, align 2, !tbaa !47
  %indvars.iv.next966 = add nuw nsw i64 %indvars.iv965, 1
  %exitcond969.not = icmp eq i64 %indvars.iv.next966, %wide.trip.count968
  br i1 %exitcond969.not, label %._crit_edge775.us, label %.lr.ph.split.us781, !llvm.loop !48

._crit_edge775.us:                                ; preds = %.lr.ph.split.us781, %.lr.ph.split.us.us
  %indvars.iv.next976 = add nuw nsw i64 %indvars.iv975, 1
  %exitcond979.not = icmp eq i64 %indvars.iv.next976, %wide.trip.count978
  br i1 %exitcond979.not, label %.loopexit, label %.preheader710.us, !llvm.loop !49

.lr.ph.split.us.us:                               ; preds = %.preheader710.us, %.lr.ph.split.us.us
  %indvars.iv970 = phi i64 [ %indvars.iv.next971, %.lr.ph.split.us.us ], [ 0, %.preheader710.us ]
  %266 = trunc nuw nsw i64 %indvars.iv970 to i32
  %267 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %266, i32 noundef %255, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds float, ptr %48, i64 %268
  %270 = load float, ptr %269, align 4, !tbaa !32
  %271 = fmul float %222, %270
  %272 = tail call float @llvm.nearbyint.f32(float %271)
  %273 = fptosi float %272 to i32
  %274 = trunc i32 %273 to i16
  %gep1060 = getelementptr i16, ptr %invariant.gep1059, i64 %indvars.iv970
  store i16 %274, ptr %gep1060, align 2, !tbaa !47
  %indvars.iv.next971 = add nuw nsw i64 %indvars.iv970, 1
  %exitcond974.not = icmp eq i64 %indvars.iv.next971, %wide.trip.count973
  br i1 %exitcond974.not, label %._crit_edge775.us, label %.lr.ph.split.us.us, !llvm.loop !48

275:                                              ; preds = %249
  %276 = icmp eq i32 %40, 8
  %or.cond13 = select i1 %223, i1 %276, i1 false
  %277 = icmp sgt i32 %34, 0
  %or.cond841 = select i1 %or.cond13, i1 %277, i1 false
  %278 = icmp sgt i32 %22, 0
  %or.cond1068 = select i1 %or.cond841, i1 %278, i1 false
  br i1 %or.cond1068, label %.preheader713.us.preheader, label %.loopexit

.preheader713.us.preheader:                       ; preds = %275
  %279 = sext i32 %38 to i64
  %wide.trip.count963 = and i64 %33, 2147483647
  %wide.trip.count958 = zext nneg i32 %22 to i64
  br label %.preheader713.us

.preheader713.us:                                 ; preds = %.preheader713.us.preheader, %._crit_edge771.us
  %indvars.iv960 = phi i64 [ 0, %.preheader713.us.preheader ], [ %indvars.iv.next961, %._crit_edge771.us ]
  %280 = mul nsw i64 %indvars.iv960, %279
  %281 = trunc nuw nsw i64 %indvars.iv960 to i32
  %invariant.gep1055 = getelementptr i32, ptr %50, i64 %280
  br label %282

282:                                              ; preds = %.preheader713.us, %282
  %indvars.iv955 = phi i64 [ 0, %.preheader713.us ], [ %indvars.iv.next956, %282 ]
  %283 = trunc nuw nsw i64 %indvars.iv955 to i32
  %284 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %283, i32 noundef %281, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds float, ptr %48, i64 %285
  %287 = load float, ptr %286, align 4, !tbaa !32
  %288 = fmul float %222, %287
  %289 = tail call float @llvm.nearbyint.f32(float %288)
  %290 = fptosi float %289 to i32
  %gep1056 = getelementptr i32, ptr %invariant.gep1055, i64 %indvars.iv955
  store i32 %290, ptr %gep1056, align 4, !tbaa !38
  %indvars.iv.next956 = add nuw nsw i64 %indvars.iv955, 1
  %exitcond959.not = icmp eq i64 %indvars.iv.next956, %wide.trip.count958
  br i1 %exitcond959.not, label %._crit_edge771.us, label %282, !llvm.loop !50

._crit_edge771.us:                                ; preds = %282
  %indvars.iv.next961 = add nuw nsw i64 %indvars.iv960, 1
  %exitcond964.not = icmp eq i64 %indvars.iv.next961, %wide.trip.count963
  br i1 %exitcond964.not, label %.loopexit, label %.preheader713.us, !llvm.loop !51

291:                                              ; preds = %32
  %292 = and i32 %44, 1024
  %.not693 = icmp eq i32 %292, 0
  br i1 %.not693, label %293, label %297

293:                                              ; preds = %291
  %294 = getelementptr inbounds i8, ptr %0, i64 40
  %295 = load ptr, ptr %294, align 8, !tbaa !41
  %296 = load float, ptr %295, align 4, !tbaa !32
  br label %297

297:                                              ; preds = %291, %293
  %298 = phi float [ %296, %293 ], [ 1.000000e+00, %291 ]
  %299 = icmp eq i32 %40, 1
  %300 = icmp eq i32 %39, 12
  %or.cond15 = select i1 %299, i1 %300, i1 false
  br i1 %or.cond15, label %.preheader717, label %314

.preheader717:                                    ; preds = %297
  %301 = icmp sgt i32 %34, 0
  %302 = icmp sgt i32 %22, 0
  %or.cond1069 = select i1 %301, i1 %302, i1 false
  br i1 %or.cond1069, label %.preheader716.us.preheader, label %.loopexit

.preheader716.us.preheader:                       ; preds = %.preheader717
  %303 = sext i32 %38 to i64
  %wide.trip.count953 = and i64 %33, 2147483647
  %wide.trip.count948 = zext nneg i32 %22 to i64
  br label %.preheader716.us

.preheader716.us:                                 ; preds = %.preheader716.us.preheader, %._crit_edge767.us
  %indvars.iv950 = phi i64 [ 0, %.preheader716.us.preheader ], [ %indvars.iv.next951, %._crit_edge767.us ]
  %304 = mul nsw i64 %indvars.iv950, %303
  %305 = trunc nuw nsw i64 %indvars.iv950 to i32
  %invariant.gep1053 = getelementptr float, ptr %50, i64 %304
  br label %306

306:                                              ; preds = %.preheader716.us, %306
  %indvars.iv945 = phi i64 [ 0, %.preheader716.us ], [ %indvars.iv.next946, %306 ]
  %307 = trunc nuw nsw i64 %indvars.iv945 to i32
  %308 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %307, i32 noundef %305, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i8, ptr %48, i64 %309
  %311 = load i8, ptr %310, align 1, !tbaa !44
  %312 = sitofp i8 %311 to float
  %313 = fmul float %298, %312
  %gep1054 = getelementptr float, ptr %invariant.gep1053, i64 %indvars.iv945
  store float %313, ptr %gep1054, align 4, !tbaa !32
  %indvars.iv.next946 = add nuw nsw i64 %indvars.iv945, 1
  %exitcond949.not = icmp eq i64 %indvars.iv.next946, %wide.trip.count948
  br i1 %exitcond949.not, label %._crit_edge767.us, label %306, !llvm.loop !52

._crit_edge767.us:                                ; preds = %306
  %indvars.iv.next951 = add nuw nsw i64 %indvars.iv950, 1
  %exitcond954.not = icmp eq i64 %indvars.iv.next951, %wide.trip.count953
  br i1 %exitcond954.not, label %.loopexit, label %.preheader716.us, !llvm.loop !53

314:                                              ; preds = %297
  %315 = icmp eq i32 %39, 10
  %or.cond17 = select i1 %299, i1 %315, i1 false
  br i1 %or.cond17, label %.preheader720, label %329

.preheader720:                                    ; preds = %314
  %316 = icmp sgt i32 %34, 0
  %317 = icmp sgt i32 %22, 0
  %or.cond1070 = select i1 %316, i1 %317, i1 false
  br i1 %or.cond1070, label %.preheader719.us.preheader, label %.loopexit

.preheader719.us.preheader:                       ; preds = %.preheader720
  %318 = sext i32 %38 to i64
  %wide.trip.count943 = and i64 %33, 2147483647
  %wide.trip.count938 = zext nneg i32 %22 to i64
  br label %.preheader719.us

.preheader719.us:                                 ; preds = %.preheader719.us.preheader, %._crit_edge763.us
  %indvars.iv940 = phi i64 [ 0, %.preheader719.us.preheader ], [ %indvars.iv.next941, %._crit_edge763.us ]
  %319 = mul nsw i64 %indvars.iv940, %318
  %320 = trunc nuw nsw i64 %indvars.iv940 to i32
  %invariant.gep1051 = getelementptr float, ptr %50, i64 %319
  br label %321

321:                                              ; preds = %.preheader719.us, %321
  %indvars.iv935 = phi i64 [ 0, %.preheader719.us ], [ %indvars.iv.next936, %321 ]
  %322 = trunc nuw nsw i64 %indvars.iv935 to i32
  %323 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %322, i32 noundef %320, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i16, ptr %48, i64 %324
  %326 = load i16, ptr %325, align 2, !tbaa !47
  %327 = sitofp i16 %326 to float
  %328 = fmul float %298, %327
  %gep1052 = getelementptr float, ptr %invariant.gep1051, i64 %indvars.iv935
  store float %328, ptr %gep1052, align 4, !tbaa !32
  %indvars.iv.next936 = add nuw nsw i64 %indvars.iv935, 1
  %exitcond939.not = icmp eq i64 %indvars.iv.next936, %wide.trip.count938
  br i1 %exitcond939.not, label %._crit_edge763.us, label %321, !llvm.loop !54

._crit_edge763.us:                                ; preds = %321
  %indvars.iv.next941 = add nuw nsw i64 %indvars.iv940, 1
  %exitcond944.not = icmp eq i64 %indvars.iv.next941, %wide.trip.count943
  br i1 %exitcond944.not, label %.loopexit, label %.preheader719.us, !llvm.loop !55

329:                                              ; preds = %314
  %330 = icmp eq i32 %39, 8
  %or.cond19 = select i1 %299, i1 %330, i1 false
  %331 = icmp sgt i32 %34, 0
  %or.cond842 = select i1 %or.cond19, i1 %331, i1 false
  %332 = icmp sgt i32 %22, 0
  %or.cond1071 = select i1 %or.cond842, i1 %332, i1 false
  br i1 %or.cond1071, label %.preheader722.us.preheader, label %.loopexit

.preheader722.us.preheader:                       ; preds = %329
  %333 = sext i32 %38 to i64
  %wide.trip.count933 = and i64 %33, 2147483647
  %wide.trip.count928 = zext nneg i32 %22 to i64
  br label %.preheader722.us

.preheader722.us:                                 ; preds = %.preheader722.us.preheader, %._crit_edge759.us
  %indvars.iv930 = phi i64 [ 0, %.preheader722.us.preheader ], [ %indvars.iv.next931, %._crit_edge759.us ]
  %334 = mul nsw i64 %indvars.iv930, %333
  %335 = trunc nuw nsw i64 %indvars.iv930 to i32
  %invariant.gep = getelementptr float, ptr %50, i64 %334
  br label %336

336:                                              ; preds = %.preheader722.us, %336
  %indvars.iv925 = phi i64 [ 0, %.preheader722.us ], [ %indvars.iv.next926, %336 ]
  %337 = trunc nuw nsw i64 %indvars.iv925 to i32
  %338 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %337, i32 noundef %335, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds i32, ptr %48, i64 %339
  %341 = load i32, ptr %340, align 4, !tbaa !38
  %342 = sitofp i32 %341 to float
  %343 = fmul float %298, %342
  %gep = getelementptr float, ptr %invariant.gep, i64 %indvars.iv925
  store float %343, ptr %gep, align 4, !tbaa !32
  %indvars.iv.next926 = add nuw nsw i64 %indvars.iv925, 1
  %exitcond929.not = icmp eq i64 %indvars.iv.next926, %wide.trip.count928
  br i1 %exitcond929.not, label %._crit_edge759.us, label %336, !llvm.loop !56

._crit_edge759.us:                                ; preds = %336
  %indvars.iv.next931 = add nuw nsw i64 %indvars.iv930, 1
  %exitcond934.not = icmp eq i64 %indvars.iv.next931, %wide.trip.count933
  br i1 %exitcond934.not, label %.loopexit, label %.preheader722.us, !llvm.loop !57

344:                                              ; preds = %32
  %345 = and i32 %44, 1
  %.not692.not = icmp eq i32 %345, 0
  br i1 %.not692.not, label %.preheader727, label %346

346:                                              ; preds = %344
  %347 = add nsw i32 %38, 15
  %348 = sdiv i32 %347, 16
  %349 = shl nsw i32 %348, 4
  br label %.preheader727

.preheader727:                                    ; preds = %344, %346
  %350 = phi i32 [ %349, %346 ], [ %38, %344 ]
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #6
  %351 = load ptr, ptr %0, align 8, !tbaa !12
  %352 = load float, ptr %351, align 4, !tbaa !32
  %353 = fsub float 1.000000e+00, %352
  %354 = load i32, ptr @libxsmm_target_archid, align 4, !tbaa !38
  %355 = tail call i32 @libxsmm_cpuid_vlen32(i32 noundef %354) #6
  %356 = load ptr, ptr %51, align 8, !tbaa !26
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %7, i8 0, i64 64, i1 false), !tbaa !32
  %357 = fdiv float 1.000000e+00, %353
  %.fr843 = freeze i32 %355
  %358 = icmp sgt i32 %34, 0
  br i1 %358, label %.preheader726.lr.ph, label %._crit_edge

.preheader726.lr.ph:                              ; preds = %.preheader727
  %359 = sub i32 0, %.fr843
  %360 = and i32 %22, %359
  %361 = icmp sgt i32 %360, 0
  %362 = icmp sgt i32 %.fr843, 0
  %363 = zext i32 %.fr843 to i64
  br label %.preheader726

.preheader726:                                    ; preds = %.preheader726.lr.ph, %.loopexit725
  %.10653755 = phi i32 [ 0, %.preheader726.lr.ph ], [ %410, %.loopexit725 ]
  br i1 %361, label %.lr.ph746, label %._crit_edge747

.lr.ph746:                                        ; preds = %.preheader726
  br i1 %362, label %.lr.ph746.split.us, label %.lr.ph746.split

.lr.ph746.split.us:                               ; preds = %.lr.ph746
  br i1 %.not692.not, label %.lr.ph.us.us, label %.lr.ph.us

.lr.ph.us.us:                                     ; preds = %.lr.ph746.split.us, %._crit_edge.split.us.us.us
  %indvars.iv916 = phi i64 [ %indvars.iv.next917, %._crit_edge.split.us.us.us ], [ 0, %.lr.ph746.split.us ]
  call void @libxsmm_lsfr_Xwide(ptr noundef %46, ptr noundef nonnull %7, i32 noundef %.fr843)
  br label %364

364:                                              ; preds = %364, %.lr.ph.us.us
  %indvars.iv911 = phi i64 [ %indvars.iv.next912, %364 ], [ 0, %.lr.ph.us.us ]
  %365 = add nuw nsw i64 %indvars.iv911, %indvars.iv916
  %366 = trunc nuw i64 %365 to i32
  %367 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %366, i32 noundef %.10653755, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  %368 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv911
  %369 = load float, ptr %368, align 4, !tbaa !32
  %370 = fcmp olt float %369, %353
  %371 = fmul float %357, %367
  %372 = select i1 %370, float %371, float 0.000000e+00
  store float %372, ptr %8, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %8, i32 noundef %366, i32 noundef %.10653755, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  %indvars.iv.next912 = add nuw nsw i64 %indvars.iv911, 1
  %exitcond915.not = icmp eq i64 %indvars.iv.next912, %363
  br i1 %exitcond915.not, label %._crit_edge.split.us.us.us, label %364, !llvm.loop !58

._crit_edge.split.us.us.us:                       ; preds = %364
  %indvars.iv.next917 = add nuw nsw i64 %indvars.iv916, %363
  %373 = trunc nuw i64 %indvars.iv.next917 to i32
  %374 = icmp sgt i32 %360, %373
  br i1 %374, label %.lr.ph.us.us, label %._crit_edge747, !llvm.loop !59

.lr.ph.us:                                        ; preds = %.lr.ph746.split.us, %._crit_edge.split.us749
  %indvars.iv908 = phi i64 [ %indvars.iv.next909, %._crit_edge.split.us749 ], [ 0, %.lr.ph746.split.us ]
  call void @libxsmm_lsfr_Xwide(ptr noundef %46, ptr noundef nonnull %7, i32 noundef %.fr843)
  br label %375

375:                                              ; preds = %.lr.ph.us, %388
  %indvars.iv903 = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next904, %388 ]
  %376 = add nuw nsw i64 %indvars.iv903, %indvars.iv908
  %377 = trunc nuw i64 %376 to i32
  %378 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %377, i32 noundef %.10653755, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #6
  %379 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv903
  %380 = load float, ptr %379, align 4, !tbaa !32
  %381 = fcmp olt float %380, %353
  %382 = fmul float %357, %378
  %383 = select i1 %381, float %382, float 0.000000e+00
  store float %383, ptr %8, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %8, i32 noundef %377, i32 noundef %.10653755, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  %384 = load float, ptr %379, align 4, !tbaa !32
  %385 = fcmp olt float %384, %353
  br i1 %385, label %387, label %386

386:                                              ; preds = %375
  call void @libxsmm_zero_bit(ptr noundef %356, i32 noundef %377, i32 noundef %.10653755, i32 noundef %350)
  br label %388

387:                                              ; preds = %375
  call void @libxsmm_set_bit(ptr noundef %356, i32 noundef %377, i32 noundef %.10653755, i32 noundef %350)
  br label %388

388:                                              ; preds = %387, %386
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #6
  %indvars.iv.next904 = add nuw nsw i64 %indvars.iv903, 1
  %exitcond907.not = icmp eq i64 %indvars.iv.next904, %363
  br i1 %exitcond907.not, label %._crit_edge.split.us749, label %375, !llvm.loop !58

._crit_edge.split.us749:                          ; preds = %388
  %indvars.iv.next909 = add nuw nsw i64 %indvars.iv908, %363
  %389 = trunc nuw i64 %indvars.iv.next909 to i32
  %390 = icmp sgt i32 %360, %389
  br i1 %390, label %.lr.ph.us, label %._crit_edge747, !llvm.loop !59

.lr.ph746.split:                                  ; preds = %.lr.ph746, %.lr.ph746.split
  %.9744 = phi i32 [ %391, %.lr.ph746.split ], [ 0, %.lr.ph746 ]
  call void @libxsmm_lsfr_Xwide(ptr noundef %46, ptr noundef nonnull %7, i32 noundef %.fr843)
  %391 = add nsw i32 %.9744, %.fr843
  %392 = icmp slt i32 %391, %360
  br i1 %392, label %.lr.ph746.split, label %._crit_edge747, !llvm.loop !59

._crit_edge747:                                   ; preds = %.lr.ph746.split, %._crit_edge.split.us749, %._crit_edge.split.us.us.us, %.preheader726
  %.9.lcssa = phi i32 [ 0, %.preheader726 ], [ %373, %._crit_edge.split.us.us.us ], [ %389, %._crit_edge.split.us749 ], [ %391, %.lr.ph746.split ]
  %393 = icmp slt i32 %.9.lcssa, %22
  br i1 %393, label %394, label %.loopexit725

394:                                              ; preds = %._crit_edge747
  call void @libxsmm_lsfr_Xwide(ptr noundef %46, ptr noundef nonnull %7, i32 noundef %.fr843)
  %395 = sub i32 %22, %.9.lcssa
  %wide.trip.count922 = zext i32 %395 to i64
  br label %396

396:                                              ; preds = %394, %408
  %indvars.iv919 = phi i64 [ 0, %394 ], [ %indvars.iv.next920, %408 ]
  %.10754 = phi i32 [ %.9.lcssa, %394 ], [ %409, %408 ]
  %397 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.10754, i32 noundef %.10653755, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  %398 = getelementptr inbounds [16 x float], ptr %7, i64 0, i64 %indvars.iv919
  %399 = load float, ptr %398, align 4, !tbaa !32
  %400 = fcmp olt float %399, %353
  %401 = fmul float %357, %397
  %402 = select i1 %400, float %401, float 0.000000e+00
  store float %402, ptr %9, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %9, i32 noundef %.10754, i32 noundef %.10653755, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  br i1 %.not692.not, label %408, label %403

403:                                              ; preds = %396
  %404 = load float, ptr %398, align 4, !tbaa !32
  %405 = fcmp olt float %404, %353
  br i1 %405, label %406, label %407

406:                                              ; preds = %403
  call void @libxsmm_set_bit(ptr noundef %356, i32 noundef %.10754, i32 noundef %.10653755, i32 noundef %350)
  br label %408

407:                                              ; preds = %403
  call void @libxsmm_zero_bit(ptr noundef %356, i32 noundef %.10754, i32 noundef %.10653755, i32 noundef %350)
  br label %408

408:                                              ; preds = %406, %407, %396
  %indvars.iv.next920 = add nuw nsw i64 %indvars.iv919, 1
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  %409 = add nsw i32 %.10754, 1
  %exitcond923.not = icmp eq i64 %indvars.iv.next920, %wide.trip.count922
  br i1 %exitcond923.not, label %.loopexit725, label %396, !llvm.loop !60

.loopexit725:                                     ; preds = %408, %._crit_edge747
  %410 = add nuw nsw i32 %.10653755, 1
  %exitcond924.not = icmp eq i32 %410, %34
  br i1 %exitcond924.not, label %._crit_edge, label %.preheader726, !llvm.loop !61

._crit_edge:                                      ; preds = %.loopexit725, %.preheader727
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #6
  br label %.loopexit

411:                                              ; preds = %32
  %412 = and i32 %44, 1
  %413 = icmp eq i32 %412, 0
  br i1 %413, label %418, label %414

414:                                              ; preds = %411
  %415 = add nsw i32 %36, 15
  %416 = sdiv i32 %415, 16
  %417 = shl nsw i32 %416, 4
  br label %418

418:                                              ; preds = %411, %414
  %419 = phi i32 [ %417, %414 ], [ %36, %411 ]
  %420 = load ptr, ptr %0, align 8, !tbaa !12
  %421 = load float, ptr %420, align 4, !tbaa !32
  %422 = fsub float 1.000000e+00, %421
  %423 = fdiv float 1.000000e+00, %422
  %424 = getelementptr inbounds i8, ptr %0, i64 40
  %425 = load ptr, ptr %424, align 8, !tbaa !41
  %426 = icmp sgt i32 %34, 0
  %427 = icmp sgt i32 %22, 0
  %or.cond1072 = select i1 %426, i1 %427, i1 false
  br i1 %or.cond1072, label %.preheader728.us, label %.loopexit

.preheader728.us:                                 ; preds = %418, %._crit_edge.us741
  %.11654740.us = phi i32 [ %434, %._crit_edge.us741 ], [ 0, %418 ]
  br label %428

428:                                              ; preds = %.preheader728.us, %428
  %.11739.us = phi i32 [ 0, %.preheader728.us ], [ %433, %428 ]
  %429 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %.11739.us, i32 noundef %.11654740.us, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  %430 = fmul float %423, %429
  %431 = call zeroext i8 @libxsmm_extract_bit(ptr noundef %425, i32 noundef %.11739.us, i32 noundef %.11654740.us, i32 noundef %419)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #6
  %.not691.us = icmp eq i8 %431, 0
  %432 = select i1 %.not691.us, float 0.000000e+00, float %430
  store float %432, ptr %10, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %10, i32 noundef %.11739.us, i32 noundef %.11654740.us, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #6
  %433 = add nuw nsw i32 %.11739.us, 1
  %exitcond898.not = icmp eq i32 %433, %22
  br i1 %exitcond898.not, label %._crit_edge.us741, label %428, !llvm.loop !62

._crit_edge.us741:                                ; preds = %428
  %434 = add nuw nsw i32 %.11654740.us, 1
  %exitcond899.not = icmp eq i32 %434, %34
  br i1 %exitcond899.not, label %.loopexit, label %.preheader728.us, !llvm.loop !63

435:                                              ; preds = %32
  %436 = load i64, ptr %52, align 8, !tbaa !17
  %437 = getelementptr inbounds i8, ptr %50, i64 %436
  %438 = icmp sgt i32 %34, 0
  %439 = icmp sgt i32 %22, 0
  %or.cond1073 = select i1 %438, i1 %439, i1 false
  br i1 %or.cond1073, label %.preheader730.us.preheader, label %.loopexit

.preheader730.us.preheader:                       ; preds = %435
  %440 = sext i32 %38 to i64
  %wide.trip.count896 = and i64 %33, 2147483647
  %wide.trip.count891 = zext nneg i32 %22 to i64
  br label %.preheader730.us

.preheader730.us:                                 ; preds = %.preheader730.us.preheader, %._crit_edge.us738
  %indvars.iv893 = phi i64 [ 0, %.preheader730.us.preheader ], [ %indvars.iv.next894, %._crit_edge.us738 ]
  %441 = mul nsw i64 %indvars.iv893, %440
  %442 = trunc nuw nsw i64 %indvars.iv893 to i32
  br label %443

443:                                              ; preds = %.preheader730.us, %443
  %indvars.iv888 = phi i64 [ 0, %.preheader730.us ], [ %indvars.iv.next889, %443 ]
  %444 = trunc nuw nsw i64 %indvars.iv888 to i32
  %445 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %444, i32 noundef %442, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds float, ptr %48, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !32
  %.sroa.054.0.extract.trunc.us = trunc i32 %448 to i16
  %449 = add nsw i64 %indvars.iv888, %441
  %450 = getelementptr inbounds i16, ptr %50, i64 %449
  store i16 %.sroa.054.0.extract.trunc.us, ptr %450, align 2, !tbaa !47
  %.sroa.054.2.extract.shift.us = lshr i32 %448, 16
  %.sroa.054.2.extract.trunc.us = trunc nuw i32 %.sroa.054.2.extract.shift.us to i16
  %451 = getelementptr inbounds i16, ptr %437, i64 %449
  store i16 %.sroa.054.2.extract.trunc.us, ptr %451, align 2, !tbaa !47
  %indvars.iv.next889 = add nuw nsw i64 %indvars.iv888, 1
  %exitcond892.not = icmp eq i64 %indvars.iv.next889, %wide.trip.count891
  br i1 %exitcond892.not, label %._crit_edge.us738, label %443, !llvm.loop !64

._crit_edge.us738:                                ; preds = %443
  %indvars.iv.next894 = add nuw nsw i64 %indvars.iv893, 1
  %exitcond897.not = icmp eq i64 %indvars.iv.next894, %wide.trip.count896
  br i1 %exitcond897.not, label %.loopexit, label %.preheader730.us, !llvm.loop !65

452:                                              ; preds = %32, %32
  %453 = icmp sgt i32 %34, 0
  br i1 %453, label %.preheader732.lr.ph, label %.loopexit

.preheader732.lr.ph:                              ; preds = %452
  %454 = icmp sgt i32 %22, 0
  %455 = getelementptr inbounds i8, ptr %52, i64 8
  br i1 %454, label %.preheader732.us.preheader, label %.loopexit

.preheader732.us.preheader:                       ; preds = %.preheader732.lr.ph
  %456 = sext i32 %38 to i64
  %wide.trip.count886 = and i64 %33, 2147483647
  %wide.trip.count = zext nneg i32 %22 to i64
  br label %.preheader732.us

.preheader732.us:                                 ; preds = %.preheader732.us.preheader, %._crit_edge.us
  %indvars.iv883 = phi i64 [ 0, %.preheader732.us.preheader ], [ %indvars.iv.next884, %._crit_edge.us ]
  %457 = mul nsw i64 %indvars.iv883, %456
  %458 = trunc nuw nsw i64 %indvars.iv883 to i32
  br label %459

459:                                              ; preds = %.preheader732.us, %491
  %indvars.iv = phi i64 [ 0, %.preheader732.us ], [ %indvars.iv.next, %491 ]
  %460 = trunc nuw nsw i64 %indvars.iv to i32
  %461 = tail call i32 @libxsmm_elementwise_get_index(i32 noundef %460, i32 noundef %458, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds float, ptr %48, i64 %462
  %464 = load float, ptr %463, align 4, !tbaa !32
  %465 = bitcast float %464 to i32
  %.sroa.0.0.insert.mask.us = and i32 %465, -65536
  %466 = bitcast i32 %.sroa.0.0.insert.mask.us to float
  %.sroa.0.2.extract.shift.us = lshr i32 %465, 16
  %.sroa.0.2.extract.trunc.us = trunc nuw i32 %.sroa.0.2.extract.shift.us to i16
  %467 = fsub float %464, %466
  %468 = load i16, ptr %15, align 1, !tbaa !5
  %469 = icmp eq i16 %468, 65
  br i1 %469, label %472, label %470

470:                                              ; preds = %459
  %471 = tail call zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef %467) #6
  br label %477

472:                                              ; preds = %459
  %473 = bitcast float %467 to i32
  %.sroa.0.0.insert.mask39.us = and i32 %473, -65536
  %474 = bitcast i32 %.sroa.0.0.insert.mask39.us to float
  %.sroa.0.2.extract.shift42.us = lshr i32 %473, 16
  %.sroa.0.2.extract.trunc43.us = trunc nuw i32 %.sroa.0.2.extract.shift42.us to i16
  %475 = fsub float %467, %474
  %476 = tail call zeroext i16 @libxsmm_convert_f32_to_bf16_rne(float noundef %475) #6
  br label %477

477:                                              ; preds = %472, %470
  %.0669.us = phi i16 [ %.sroa.0.2.extract.trunc43.us, %472 ], [ %471, %470 ]
  %.0668.us = phi i16 [ %476, %472 ], [ 0, %470 ]
  %478 = add nsw i64 %indvars.iv, %457
  %479 = getelementptr inbounds i16, ptr %50, i64 %478
  store i16 %.sroa.0.2.extract.trunc.us, ptr %479, align 2, !tbaa !47
  %480 = load i64, ptr %52, align 8, !tbaa !17
  %481 = lshr i64 %480, 1
  %482 = getelementptr i16, ptr %50, i64 %481
  %483 = getelementptr i16, ptr %482, i64 %478
  store i16 %.0669.us, ptr %483, align 2, !tbaa !47
  %484 = load i16, ptr %15, align 1, !tbaa !5
  %485 = icmp eq i16 %484, 65
  br i1 %485, label %486, label %491

486:                                              ; preds = %477
  %487 = load i64, ptr %455, align 8, !tbaa !17
  %488 = lshr i64 %487, 1
  %489 = getelementptr i16, ptr %50, i64 %488
  %490 = getelementptr i16, ptr %489, i64 %478
  store i16 %.0668.us, ptr %490, align 2, !tbaa !47
  br label %491

491:                                              ; preds = %486, %477
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %459, !llvm.loop !66

._crit_edge.us:                                   ; preds = %491
  %indvars.iv.next884 = add nuw nsw i64 %indvars.iv883, 1
  %exitcond887.not = icmp eq i64 %indvars.iv.next884, %wide.trip.count886
  br i1 %exitcond887.not, label %.loopexit, label %.preheader732.us, !llvm.loop !67

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge835
  %indvars.iv1019 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next1020, %._crit_edge835 ]
  %.0658838 = phi i32 [ 0, %.preheader.lr.ph ], [ %.1659.lcssa, %._crit_edge835 ]
  br i1 %55, label %.lr.ph834, label %._crit_edge835

.lr.ph834:                                        ; preds = %.preheader
  %492 = mul nsw i64 %indvars.iv1019, %62
  %493 = trunc nuw nsw i64 %indvars.iv1019 to i32
  br i1 %or.cond23, label %.lr.ph834.split.us, label %.lr.ph834.split

.lr.ph834.split.us:                               ; preds = %.lr.ph834, %508
  %indvars.iv1014 = phi i64 [ %indvars.iv.next1015, %508 ], [ 0, %.lr.ph834 ]
  %494 = trunc nuw nsw i64 %indvars.iv1014 to i32
  %495 = call i32 @libxsmm_elementwise_get_index(i32 noundef %494, i32 noundef %493, i32 noundef %36, ptr noundef nonnull %1, i32 noundef 0)
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %48, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !27
  %499 = load i16, ptr %15, align 1, !tbaa !5
  %500 = zext i16 %499 to i32
  %501 = call double @libxsmm_fp64_unary_compute(double noundef %498, i32 noundef %500)
  %502 = add nsw i64 %indvars.iv1014, %492
  %503 = getelementptr inbounds double, ptr %50, i64 %502
  store double %501, ptr %503, align 8, !tbaa !27
  %504 = load i16, ptr %15, align 1, !tbaa !5
  %505 = icmp eq i16 %504, 63
  br i1 %505, label %506, label %508

506:                                              ; preds = %.lr.ph834.split.us
  %507 = getelementptr inbounds double, ptr %52, i64 %502
  store double %501, ptr %507, align 8, !tbaa !27
  br label %508

508:                                              ; preds = %506, %.lr.ph834.split.us
  %indvars.iv.next1015 = add nuw nsw i64 %indvars.iv1014, 1
  %exitcond1018.not = icmp eq i64 %indvars.iv.next1015, %wide.trip.count1017
  br i1 %exitcond1018.not, label %._crit_edge835, label %.lr.ph834.split.us, !llvm.loop !68

.lr.ph834.split:                                  ; preds = %.lr.ph834, %524
  %indvars.iv1009 = phi i64 [ %indvars.iv.next1010, %524 ], [ 0, %.lr.ph834 ]
  %.1659832 = phi i32 [ %514, %524 ], [ %.0658838, %.lr.ph834 ]
  %509 = trunc nuw nsw i64 %indvars.iv1009 to i32
  %510 = call float @libxsmm_elementwise_get_float_value(ptr noundef %48, i32 noundef %509, i32 noundef %493, i32 noundef %36, i32 noundef %39, ptr noundef nonnull %1, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #6
  %511 = load i16, ptr %15, align 1, !tbaa !5
  %512 = zext i16 %511 to i32
  %513 = call float @libxsmm_fp32_unary_compute(float noundef %510, i32 noundef %512)
  store float %513, ptr %11, align 4, !tbaa !32
  call void @libxsmm_elementwise_store_value(ptr noundef %50, ptr noundef nonnull %11, i32 noundef %509, i32 noundef %493, i32 noundef %38, i32 noundef %.lobit, i32 noundef %40, ptr noundef %46, i32 noundef %.1659832)
  %514 = add i32 %.1659832, 1
  %515 = load i16, ptr %15, align 1, !tbaa !5
  %516 = icmp eq i16 %515, 63
  br i1 %516, label %517, label %524

517:                                              ; preds = %.lr.ph834.split
  br i1 %or.cond25, label %518, label %523

518:                                              ; preds = %517
  %519 = add nsw i64 %indvars.iv1009, %492
  %520 = getelementptr inbounds i8, ptr %50, i64 %519
  %521 = load i8, ptr %520, align 1, !tbaa !44
  %522 = getelementptr inbounds i8, ptr %52, i64 %519
  store i8 %521, ptr %522, align 1, !tbaa !44
  br label %524

523:                                              ; preds = %517
  call void @libxsmm_elementwise_store_value(ptr noundef %52, ptr noundef nonnull %11, i32 noundef %509, i32 noundef %493, i32 noundef %38, i32 noundef 0, i32 noundef %40, ptr noundef null, i32 noundef 0)
  br label %524

524:                                              ; preds = %518, %523, %.lr.ph834.split
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #6
  %indvars.iv.next1010 = add nuw nsw i64 %indvars.iv1009, 1
  %exitcond1013.not = icmp eq i64 %indvars.iv.next1010, %wide.trip.count1012
  br i1 %exitcond1013.not, label %._crit_edge835, label %.lr.ph834.split, !llvm.loop !68

._crit_edge835:                                   ; preds = %524, %508, %.preheader
  %.1659.lcssa = phi i32 [ %.0658838, %.preheader ], [ %.0658838, %508 ], [ %514, %524 ]
  %indvars.iv.next1020 = add nuw nsw i64 %indvars.iv1019, 1
  %exitcond1023.not = icmp eq i64 %indvars.iv.next1020, %wide.trip.count1022
  br i1 %exitcond1023.not, label %.loopexit, label %.preheader, !llvm.loop !69

.loopexit:                                        ; preds = %._crit_edge.us, %._crit_edge.us738, %._crit_edge.us741, %._crit_edge759.us, %._crit_edge763.us, %._crit_edge767.us, %._crit_edge771.us, %._crit_edge775.us, %._crit_edge783.us, %._crit_edge793.us, %._crit_edge797, %._crit_edge809, %._crit_edge835, %.preheader732.lr.ph, %452, %435, %418, %.preheader720, %.preheader717, %.preheader711, %.preheader708, %187, %127, %86, %.preheader698, %85, %._crit_edge, %275, %329, %17, %20, %13
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.nearbyint.f32(float) #4

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

attributes #0 = { mustprogress nofree nounwind willreturn memory(write) "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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { 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 29}
!6 = !{!"libxsmm_meltw_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !8, i64 24, !8, i64 25, !8, i64 26, !10, i64 27, !10, i64 29, !8, i64 31}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!6, !7, i64 0}
!12 = !{!13, !15, i64 0}
!13 = !{!"libxsmm_meltw_unary_param", !14, i64 0, !16, i64 32, !16, i64 80}
!14 = !{!"libxsmm_matrix_op_arg", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!15 = !{!"any pointer", !8, i64 0}
!16 = !{!"libxsmm_matrix_arg", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !15, i64 40}
!17 = !{!18, !18, i64 0}
!18 = !{!"long long", !8, i64 0}
!19 = !{!6, !7, i64 4}
!20 = !{!6, !7, i64 8}
!21 = !{!6, !7, i64 12}
!22 = !{!6, !10, i64 27}
!23 = !{!13, !15, i64 8}
!24 = !{!13, !15, i64 32}
!25 = !{!13, !15, i64 80}
!26 = !{!13, !15, i64 88}
!27 = !{!28, !28, i64 0}
!28 = !{!"double", !8, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!33, !33, i64 0}
!33 = !{!"float", !8, i64 0}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = !{!7, !7, i64 0}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}
!41 = !{!13, !15, i64 40}
!42 = distinct !{!42, !30}
!43 = distinct !{!43, !30}
!44 = !{!8, !8, i64 0}
!45 = distinct !{!45, !30}
!46 = distinct !{!46, !30}
!47 = !{!10, !10, i64 0}
!48 = distinct !{!48, !30}
!49 = distinct !{!49, !30}
!50 = distinct !{!50, !30}
!51 = distinct !{!51, !30}
!52 = distinct !{!52, !30}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !30}
!55 = distinct !{!55, !30}
!56 = distinct !{!56, !30}
!57 = distinct !{!57, !30}
!58 = distinct !{!58, !30}
!59 = distinct !{!59, !30}
!60 = distinct !{!60, !30}
!61 = distinct !{!61, !30}
!62 = distinct !{!62, !30}
!63 = distinct !{!63, !30}
!64 = distinct !{!64, !30}
!65 = distinct !{!65, !30}
!66 = distinct !{!66, !30}
!67 = distinct !{!67, !30}
!68 = distinct !{!68, !30}
!69 = distinct !{!69, !30}


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