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

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

%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @libxsmm_generator_mateltwise_x86_valid_arch_precision(ptr noundef %0, ptr noundef %1) #2 {
  %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 i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  store i32 1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %20, i32 0, i32 11
  %22 = load i8, ptr %21, align 1, !tbaa !11
  %23 = zext i8 %22 to i32
  %24 = icmp eq i32 %23, 1
  br i1 %24, label %25, label %171

25:                                               ; preds = %2
  %26 = load ptr, ptr %4, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %26, i32 0, i32 10
  %28 = load i16, ptr %27, align 1, !tbaa !14
  %29 = zext i16 %28 to i32
  %30 = icmp eq i32 %29, 28
  br i1 %30, label %169, label %31

31:                                               ; preds = %25
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %32, i32 0, i32 10
  %34 = load i16, ptr %33, align 1, !tbaa !14
  %35 = zext i16 %34 to i32
  %36 = icmp eq i32 %35, 29
  br i1 %36, label %169, label %37

37:                                               ; preds = %31
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %38, i32 0, i32 10
  %40 = load i16, ptr %39, align 1, !tbaa !14
  %41 = zext i16 %40 to i32
  %42 = icmp eq i32 %41, 30
  br i1 %42, label %169, label %43

43:                                               ; preds = %37
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %44, i32 0, i32 10
  %46 = load i16, ptr %45, align 1, !tbaa !14
  %47 = zext i16 %46 to i32
  %48 = icmp eq i32 %47, 31
  br i1 %48, label %169, label %49

49:                                               ; preds = %43
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %50, i32 0, i32 10
  %52 = load i16, ptr %51, align 1, !tbaa !14
  %53 = zext i16 %52 to i32
  %54 = icmp eq i32 %53, 32
  br i1 %54, label %169, label %55

55:                                               ; preds = %49
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %56, i32 0, i32 10
  %58 = load i16, ptr %57, align 1, !tbaa !14
  %59 = zext i16 %58 to i32
  %60 = icmp eq i32 %59, 54
  br i1 %60, label %169, label %61

61:                                               ; preds = %55
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %62, i32 0, i32 10
  %64 = load i16, ptr %63, align 1, !tbaa !14
  %65 = zext i16 %64 to i32
  %66 = icmp eq i32 %65, 61
  br i1 %66, label %169, label %67

67:                                               ; preds = %61
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %68, i32 0, i32 10
  %70 = load i16, ptr %69, align 1, !tbaa !14
  %71 = zext i16 %70 to i32
  %72 = icmp eq i32 %71, 62
  br i1 %72, label %169, label %73

73:                                               ; preds = %67
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %74, i32 0, i32 10
  %76 = load i16, ptr %75, align 1, !tbaa !14
  %77 = zext i16 %76 to i32
  %78 = icmp eq i32 %77, 55
  br i1 %78, label %169, label %79

79:                                               ; preds = %73
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %80, i32 0, i32 10
  %82 = load i16, ptr %81, align 1, !tbaa !14
  %83 = zext i16 %82 to i32
  %84 = icmp eq i32 %83, 56
  br i1 %84, label %169, label %85

85:                                               ; preds = %79
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %86, i32 0, i32 10
  %88 = load i16, ptr %87, align 1, !tbaa !14
  %89 = zext i16 %88 to i32
  %90 = icmp eq i32 %89, 67
  br i1 %90, label %169, label %91

91:                                               ; preds = %85
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %92, i32 0, i32 10
  %94 = load i16, ptr %93, align 1, !tbaa !14
  %95 = zext i16 %94 to i32
  %96 = icmp eq i32 %95, 66
  br i1 %96, label %169, label %97

97:                                               ; preds = %91
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %98, i32 0, i32 10
  %100 = load i16, ptr %99, align 1, !tbaa !14
  %101 = zext i16 %100 to i32
  %102 = icmp eq i32 %101, 57
  br i1 %102, label %169, label %103

103:                                              ; preds = %97
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %104, i32 0, i32 10
  %106 = load i16, ptr %105, align 1, !tbaa !14
  %107 = zext i16 %106 to i32
  %108 = icmp eq i32 %107, 71
  br i1 %108, label %169, label %109

109:                                              ; preds = %103
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %110, i32 0, i32 10
  %112 = load i16, ptr %111, align 1, !tbaa !14
  %113 = zext i16 %112 to i32
  %114 = icmp eq i32 %113, 72
  br i1 %114, label %169, label %115

115:                                              ; preds = %109
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %116, i32 0, i32 10
  %118 = load i16, ptr %117, align 1, !tbaa !14
  %119 = zext i16 %118 to i32
  %120 = icmp eq i32 %119, 73
  br i1 %120, label %169, label %121

121:                                              ; preds = %115
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %122, i32 0, i32 10
  %124 = load i16, ptr %123, align 1, !tbaa !14
  %125 = zext i16 %124 to i32
  %126 = icmp eq i32 %125, 74
  br i1 %126, label %169, label %127

127:                                              ; preds = %121
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %128, i32 0, i32 10
  %130 = load i16, ptr %129, align 1, !tbaa !14
  %131 = zext i16 %130 to i32
  %132 = icmp eq i32 %131, 75
  br i1 %132, label %169, label %133

133:                                              ; preds = %127
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %134, i32 0, i32 10
  %136 = load i16, ptr %135, align 1, !tbaa !14
  %137 = zext i16 %136 to i32
  %138 = icmp eq i32 %137, 39
  br i1 %138, label %169, label %139

139:                                              ; preds = %133
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %140, i32 0, i32 10
  %142 = load i16, ptr %141, align 1, !tbaa !14
  %143 = zext i16 %142 to i32
  %144 = icmp eq i32 %143, 40
  br i1 %144, label %169, label %145

145:                                              ; preds = %139
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %146, i32 0, i32 10
  %148 = load i16, ptr %147, align 1, !tbaa !14
  %149 = zext i16 %148 to i32
  %150 = icmp eq i32 %149, 41
  br i1 %150, label %169, label %151

151:                                              ; preds = %145
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %152, i32 0, i32 10
  %154 = load i16, ptr %153, align 1, !tbaa !14
  %155 = zext i16 %154 to i32
  %156 = icmp eq i32 %155, 58
  br i1 %156, label %169, label %157

157:                                              ; preds = %151
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %158, i32 0, i32 10
  %160 = load i16, ptr %159, align 1, !tbaa !14
  %161 = zext i16 %160 to i32
  %162 = icmp eq i32 %161, 59
  br i1 %162, label %169, label %163

163:                                              ; preds = %157
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %164, i32 0, i32 10
  %166 = load i16, ptr %165, align 1, !tbaa !14
  %167 = zext i16 %166 to i32
  %168 = icmp eq i32 %167, 60
  br label %169

169:                                              ; preds = %163, %157, %151, %145, %139, %133, %127, %121, %115, %109, %103, %97, %91, %85, %79, %73, %67, %61, %55, %49, %43, %37, %31, %25
  %170 = phi i1 [ true, %157 ], [ true, %151 ], [ true, %145 ], [ true, %139 ], [ true, %133 ], [ true, %127 ], [ true, %121 ], [ true, %115 ], [ true, %109 ], [ true, %103 ], [ true, %97 ], [ true, %91 ], [ true, %85 ], [ true, %79 ], [ true, %73 ], [ true, %67 ], [ true, %61 ], [ true, %55 ], [ true, %49 ], [ true, %43 ], [ true, %37 ], [ true, %31 ], [ true, %25 ], [ %168, %163 ]
  br label %171

171:                                              ; preds = %169, %2
  %172 = phi i1 [ false, %2 ], [ %170, %169 ]
  %173 = zext i1 %172 to i64
  %174 = select i1 %172, i32 1, i32 0
  store i32 %174, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %175, i32 0, i32 11
  %177 = load i8, ptr %176, align 1, !tbaa !11
  %178 = zext i8 %177 to i32
  %179 = icmp eq i32 %178, 1
  br i1 %179, label %180, label %236

180:                                              ; preds = %171
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %181, i32 0, i32 10
  %183 = load i16, ptr %182, align 1, !tbaa !14
  %184 = zext i16 %183 to i32
  %185 = icmp eq i32 %184, 1
  br i1 %185, label %234, label %186

186:                                              ; preds = %180
  %187 = load ptr, ptr %4, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %187, i32 0, i32 10
  %189 = load i16, ptr %188, align 1, !tbaa !14
  %190 = zext i16 %189 to i32
  %191 = icmp eq i32 %190, 2
  br i1 %191, label %234, label %192

192:                                              ; preds = %186
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %193, i32 0, i32 10
  %195 = load i16, ptr %194, align 1, !tbaa !14
  %196 = zext i16 %195 to i32
  %197 = icmp eq i32 %196, 3
  br i1 %197, label %234, label %198

198:                                              ; preds = %192
  %199 = load ptr, ptr %4, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %199, i32 0, i32 10
  %201 = load i16, ptr %200, align 1, !tbaa !14
  %202 = zext i16 %201 to i32
  %203 = icmp eq i32 %202, 4
  br i1 %203, label %234, label %204

204:                                              ; preds = %198
  %205 = load ptr, ptr %4, align 8, !tbaa !5
  %206 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %205, i32 0, i32 10
  %207 = load i16, ptr %206, align 1, !tbaa !14
  %208 = zext i16 %207 to i32
  %209 = icmp eq i32 %208, 13
  br i1 %209, label %234, label %210

210:                                              ; preds = %204
  %211 = load ptr, ptr %4, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %211, i32 0, i32 10
  %213 = load i16, ptr %212, align 1, !tbaa !14
  %214 = zext i16 %213 to i32
  %215 = icmp eq i32 %214, 14
  br i1 %215, label %234, label %216

216:                                              ; preds = %210
  %217 = load ptr, ptr %4, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %217, i32 0, i32 10
  %219 = load i16, ptr %218, align 1, !tbaa !14
  %220 = zext i16 %219 to i32
  %221 = icmp eq i32 %220, 15
  br i1 %221, label %234, label %222

222:                                              ; preds = %216
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %223, i32 0, i32 10
  %225 = load i16, ptr %224, align 1, !tbaa !14
  %226 = zext i16 %225 to i32
  %227 = icmp eq i32 %226, 16
  br i1 %227, label %234, label %228

228:                                              ; preds = %222
  %229 = load ptr, ptr %4, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %229, i32 0, i32 10
  %231 = load i16, ptr %230, align 1, !tbaa !14
  %232 = zext i16 %231 to i32
  %233 = icmp eq i32 %232, 63
  br label %234

234:                                              ; preds = %228, %222, %216, %210, %204, %198, %192, %186, %180
  %235 = phi i1 [ true, %222 ], [ true, %216 ], [ true, %210 ], [ true, %204 ], [ true, %198 ], [ true, %192 ], [ true, %186 ], [ true, %180 ], [ %233, %228 ]
  br label %236

236:                                              ; preds = %234, %171
  %237 = phi i1 [ false, %171 ], [ %235, %234 ]
  %238 = zext i1 %237 to i64
  %239 = select i1 %237, i32 1, i32 0
  store i32 %239, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  %240 = load ptr, ptr %4, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %240, i32 0, i32 11
  %242 = load i8, ptr %241, align 1, !tbaa !11
  %243 = zext i8 %242 to i32
  %244 = icmp eq i32 %243, 1
  br i1 %244, label %245, label %283

245:                                              ; preds = %236
  %246 = load ptr, ptr %4, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %246, i32 0, i32 10
  %248 = load i16, ptr %247, align 1, !tbaa !14
  %249 = zext i16 %248 to i32
  %250 = icmp eq i32 %249, 5
  br i1 %250, label %281, label %251

251:                                              ; preds = %245
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %252, i32 0, i32 10
  %254 = load i16, ptr %253, align 1, !tbaa !14
  %255 = zext i16 %254 to i32
  %256 = icmp eq i32 %255, 6
  br i1 %256, label %281, label %257

257:                                              ; preds = %251
  %258 = load ptr, ptr %4, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %258, i32 0, i32 10
  %260 = load i16, ptr %259, align 1, !tbaa !14
  %261 = zext i16 %260 to i32
  %262 = icmp eq i32 %261, 34
  br i1 %262, label %281, label %263

263:                                              ; preds = %257
  %264 = load ptr, ptr %4, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %264, i32 0, i32 10
  %266 = load i16, ptr %265, align 1, !tbaa !14
  %267 = zext i16 %266 to i32
  %268 = icmp eq i32 %267, 35
  br i1 %268, label %281, label %269

269:                                              ; preds = %263
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %270, i32 0, i32 10
  %272 = load i16, ptr %271, align 1, !tbaa !14
  %273 = zext i16 %272 to i32
  %274 = icmp eq i32 %273, 36
  br i1 %274, label %281, label %275

275:                                              ; preds = %269
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %276, i32 0, i32 10
  %278 = load i16, ptr %277, align 1, !tbaa !14
  %279 = zext i16 %278 to i32
  %280 = icmp eq i32 %279, 37
  br label %281

281:                                              ; preds = %275, %269, %263, %257, %251, %245
  %282 = phi i1 [ true, %269 ], [ true, %263 ], [ true, %257 ], [ true, %251 ], [ true, %245 ], [ %280, %275 ]
  br label %283

283:                                              ; preds = %281, %236
  %284 = phi i1 [ false, %236 ], [ %282, %281 ]
  %285 = zext i1 %284 to i64
  %286 = select i1 %284, i32 1, i32 0
  store i32 %286, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %287 = load ptr, ptr %4, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %287, i32 0, i32 11
  %289 = load i8, ptr %288, align 1, !tbaa !11
  %290 = zext i8 %289 to i32
  %291 = icmp eq i32 %290, 1
  br i1 %291, label %292, label %298

292:                                              ; preds = %283
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %293, i32 0, i32 10
  %295 = load i16, ptr %294, align 1, !tbaa !14
  %296 = zext i16 %295 to i32
  %297 = icmp eq i32 %296, 27
  br label %298

298:                                              ; preds = %292, %283
  %299 = phi i1 [ false, %283 ], [ %297, %292 ]
  %300 = zext i1 %299 to i64
  %301 = select i1 %299, i32 1, i32 0
  store i32 %301, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  %302 = load ptr, ptr %4, align 8, !tbaa !5
  %303 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %302, i32 0, i32 11
  %304 = load i8, ptr %303, align 1, !tbaa !11
  %305 = zext i8 %304 to i32
  %306 = icmp eq i32 %305, 1
  br i1 %306, label %307, label %357

307:                                              ; preds = %298
  %308 = load ptr, ptr %4, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %308, i32 0, i32 10
  %310 = load i16, ptr %309, align 1, !tbaa !14
  %311 = zext i16 %310 to i32
  %312 = icmp eq i32 %311, 18
  br i1 %312, label %355, label %313

313:                                              ; preds = %307
  %314 = load ptr, ptr %4, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %314, i32 0, i32 10
  %316 = load i16, ptr %315, align 1, !tbaa !14
  %317 = zext i16 %316 to i32
  %318 = icmp eq i32 %317, 21
  br i1 %318, label %355, label %319

319:                                              ; preds = %313
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %320, i32 0, i32 10
  %322 = load i16, ptr %321, align 1, !tbaa !14
  %323 = zext i16 %322 to i32
  %324 = icmp eq i32 %323, 69
  br i1 %324, label %355, label %325

325:                                              ; preds = %319
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %326, i32 0, i32 10
  %328 = load i16, ptr %327, align 1, !tbaa !14
  %329 = zext i16 %328 to i32
  %330 = icmp eq i32 %329, 70
  br i1 %330, label %355, label %331

331:                                              ; preds = %325
  %332 = load ptr, ptr %4, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %332, i32 0, i32 10
  %334 = load i16, ptr %333, align 1, !tbaa !14
  %335 = zext i16 %334 to i32
  %336 = icmp eq i32 %335, 19
  br i1 %336, label %355, label %337

337:                                              ; preds = %331
  %338 = load ptr, ptr %4, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %338, i32 0, i32 10
  %340 = load i16, ptr %339, align 1, !tbaa !14
  %341 = zext i16 %340 to i32
  %342 = icmp eq i32 %341, 20
  br i1 %342, label %355, label %343

343:                                              ; preds = %337
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %344, i32 0, i32 10
  %346 = load i16, ptr %345, align 1, !tbaa !14
  %347 = zext i16 %346 to i32
  %348 = icmp eq i32 %347, 44
  br i1 %348, label %355, label %349

349:                                              ; preds = %343
  %350 = load ptr, ptr %4, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %350, i32 0, i32 10
  %352 = load i16, ptr %351, align 1, !tbaa !14
  %353 = zext i16 %352 to i32
  %354 = icmp eq i32 %353, 21
  br label %355

355:                                              ; preds = %349, %343, %337, %331, %325, %319, %313, %307
  %356 = phi i1 [ true, %343 ], [ true, %337 ], [ true, %331 ], [ true, %325 ], [ true, %319 ], [ true, %313 ], [ true, %307 ], [ %354, %349 ]
  br label %357

357:                                              ; preds = %355, %298
  %358 = phi i1 [ false, %298 ], [ %356, %355 ]
  %359 = zext i1 %358 to i64
  %360 = select i1 %358, i32 1, i32 0
  store i32 %360, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  %361 = load ptr, ptr %4, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %361, i32 0, i32 11
  %363 = load i8, ptr %362, align 1, !tbaa !11
  %364 = zext i8 %363 to i32
  %365 = icmp eq i32 %364, 1
  br i1 %365, label %366, label %373

366:                                              ; preds = %357
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %367, i32 0, i32 10
  %369 = load i16, ptr %368, align 1, !tbaa !14
  %370 = zext i16 %369 to i32
  %371 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %370)
  %372 = icmp sgt i32 %371, 0
  br label %373

373:                                              ; preds = %366, %357
  %374 = phi i1 [ false, %357 ], [ %372, %366 ]
  %375 = zext i1 %374 to i64
  %376 = select i1 %374, i32 1, i32 0
  store i32 %376, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %377, i32 0, i32 11
  %379 = load i8, ptr %378, align 1, !tbaa !11
  %380 = zext i8 %379 to i32
  %381 = icmp eq i32 %380, 1
  br i1 %381, label %382, label %438

382:                                              ; preds = %373
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %383, i32 0, i32 10
  %385 = load i16, ptr %384, align 1, !tbaa !14
  %386 = zext i16 %385 to i32
  %387 = icmp eq i32 %386, 7
  br i1 %387, label %436, label %388

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

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

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

406:                                              ; preds = %400
  %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 !14
  %410 = zext i16 %409 to i32
  %411 = icmp eq i32 %410, 26
  br i1 %411, label %436, label %412

412:                                              ; preds = %406
  %413 = load ptr, ptr %4, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %413, i32 0, i32 10
  %415 = load i16, ptr %414, align 1, !tbaa !14
  %416 = zext i16 %415 to i32
  %417 = icmp eq i32 %416, 9
  br i1 %417, label %436, label %418

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

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

430:                                              ; preds = %424
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %431, i32 0, i32 10
  %433 = load i16, ptr %432, align 1, !tbaa !14
  %434 = zext i16 %433 to i32
  %435 = icmp eq i32 %434, 12
  br label %436

436:                                              ; preds = %430, %424, %418, %412, %406, %400, %394, %388, %382
  %437 = phi i1 [ true, %424 ], [ true, %418 ], [ true, %412 ], [ true, %406 ], [ true, %400 ], [ true, %394 ], [ true, %388 ], [ true, %382 ], [ %435, %430 ]
  br label %438

438:                                              ; preds = %436, %373
  %439 = phi i1 [ false, %373 ], [ %437, %436 ]
  %440 = zext i1 %439 to i64
  %441 = select i1 %439, i32 1, i32 0
  store i32 %441, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %442 = load ptr, ptr %4, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %442, i32 0, i32 11
  %444 = load i8, ptr %443, align 1, !tbaa !11
  %445 = zext i8 %444 to i32
  %446 = icmp eq i32 %445, 1
  br i1 %446, label %447, label %461

447:                                              ; preds = %438
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %448, i32 0, i32 10
  %450 = load i16, ptr %449, align 1, !tbaa !14
  %451 = zext i16 %450 to i32
  %452 = icmp eq i32 %451, 51
  br i1 %452, label %459, label %453

453:                                              ; preds = %447
  %454 = load ptr, ptr %4, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %454, i32 0, i32 10
  %456 = load i16, ptr %455, align 1, !tbaa !14
  %457 = zext i16 %456 to i32
  %458 = icmp eq i32 %457, 52
  br label %459

459:                                              ; preds = %453, %447
  %460 = phi i1 [ true, %447 ], [ %458, %453 ]
  br label %461

461:                                              ; preds = %459, %438
  %462 = phi i1 [ false, %438 ], [ %460, %459 ]
  %463 = zext i1 %462 to i64
  %464 = select i1 %462, i32 1, i32 0
  store i32 %464, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  %465 = load ptr, ptr %4, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %465, i32 0, i32 11
  %467 = load i8, ptr %466, align 1, !tbaa !11
  %468 = zext i8 %467 to i32
  %469 = icmp eq i32 %468, 1
  br i1 %469, label %470, label %484

470:                                              ; preds = %461
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %471, i32 0, i32 10
  %473 = load i16, ptr %472, align 1, !tbaa !14
  %474 = zext i16 %473 to i32
  %475 = icmp eq i32 %474, 42
  br i1 %475, label %482, label %476

476:                                              ; preds = %470
  %477 = load ptr, ptr %4, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %477, i32 0, i32 10
  %479 = load i16, ptr %478, align 1, !tbaa !14
  %480 = zext i16 %479 to i32
  %481 = icmp eq i32 %480, 43
  br label %482

482:                                              ; preds = %476, %470
  %483 = phi i1 [ true, %470 ], [ %481, %476 ]
  br label %484

484:                                              ; preds = %482, %461
  %485 = phi i1 [ false, %461 ], [ %483, %482 ]
  %486 = zext i1 %485 to i64
  %487 = select i1 %485, i32 1, i32 0
  store i32 %487, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %488, i32 0, i32 11
  %490 = load i8, ptr %489, align 1, !tbaa !11
  %491 = zext i8 %490 to i32
  %492 = icmp eq i32 %491, 2
  br i1 %492, label %493, label %645

493:                                              ; preds = %484
  %494 = load ptr, ptr %4, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %494, i32 0, i32 10
  %496 = load i16, ptr %495, align 1, !tbaa !14
  %497 = zext i16 %496 to i32
  %498 = icmp eq i32 %497, 6
  br i1 %498, label %643, label %499

499:                                              ; preds = %493
  %500 = load ptr, ptr %4, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %500, i32 0, i32 10
  %502 = load i16, ptr %501, align 1, !tbaa !14
  %503 = zext i16 %502 to i32
  %504 = icmp eq i32 %503, 7
  br i1 %504, label %643, label %505

505:                                              ; preds = %499
  %506 = load ptr, ptr %4, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %506, i32 0, i32 10
  %508 = load i16, ptr %507, align 1, !tbaa !14
  %509 = zext i16 %508 to i32
  %510 = icmp eq i32 %509, 8
  br i1 %510, label %643, label %511

511:                                              ; preds = %505
  %512 = load ptr, ptr %4, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %512, i32 0, i32 10
  %514 = load i16, ptr %513, align 1, !tbaa !14
  %515 = zext i16 %514 to i32
  %516 = icmp eq i32 %515, 11
  br i1 %516, label %643, label %517

517:                                              ; preds = %511
  %518 = load ptr, ptr %4, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %518, i32 0, i32 10
  %520 = load i16, ptr %519, align 1, !tbaa !14
  %521 = zext i16 %520 to i32
  %522 = icmp eq i32 %521, 12
  br i1 %522, label %643, label %523

523:                                              ; preds = %517
  %524 = load ptr, ptr %4, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %524, i32 0, i32 10
  %526 = load i16, ptr %525, align 1, !tbaa !14
  %527 = zext i16 %526 to i32
  %528 = icmp eq i32 %527, 13
  br i1 %528, label %643, label %529

529:                                              ; preds = %523
  %530 = load ptr, ptr %4, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %530, i32 0, i32 10
  %532 = load i16, ptr %531, align 1, !tbaa !14
  %533 = zext i16 %532 to i32
  %534 = icmp eq i32 %533, 14
  br i1 %534, label %643, label %535

535:                                              ; preds = %529
  %536 = load ptr, ptr %4, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %536, i32 0, i32 10
  %538 = load i16, ptr %537, align 1, !tbaa !14
  %539 = zext i16 %538 to i32
  %540 = icmp eq i32 %539, 15
  br i1 %540, label %643, label %541

541:                                              ; preds = %535
  %542 = load ptr, ptr %4, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %542, i32 0, i32 10
  %544 = load i16, ptr %543, align 1, !tbaa !14
  %545 = zext i16 %544 to i32
  %546 = icmp eq i32 %545, 16
  br i1 %546, label %643, label %547

547:                                              ; preds = %541
  %548 = load ptr, ptr %4, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %548, i32 0, i32 10
  %550 = load i16, ptr %549, align 1, !tbaa !14
  %551 = zext i16 %550 to i32
  %552 = icmp eq i32 %551, 17
  br i1 %552, label %643, label %553

553:                                              ; preds = %547
  %554 = load ptr, ptr %4, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %554, i32 0, i32 10
  %556 = load i16, ptr %555, align 1, !tbaa !14
  %557 = zext i16 %556 to i32
  %558 = icmp eq i32 %557, 18
  br i1 %558, label %643, label %559

559:                                              ; preds = %553
  %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 !14
  %563 = zext i16 %562 to i32
  %564 = icmp eq i32 %563, 19
  br i1 %564, label %643, label %565

565:                                              ; preds = %559
  %566 = load ptr, ptr %4, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %566, i32 0, i32 10
  %568 = load i16, ptr %567, align 1, !tbaa !14
  %569 = zext i16 %568 to i32
  %570 = icmp eq i32 %569, 20
  br i1 %570, label %643, label %571

571:                                              ; preds = %565
  %572 = load ptr, ptr %4, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %572, i32 0, i32 10
  %574 = load i16, ptr %573, align 1, !tbaa !14
  %575 = zext i16 %574 to i32
  %576 = icmp eq i32 %575, 21
  br i1 %576, label %643, label %577

577:                                              ; preds = %571
  %578 = load ptr, ptr %4, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %578, i32 0, i32 10
  %580 = load i16, ptr %579, align 1, !tbaa !14
  %581 = zext i16 %580 to i32
  %582 = icmp eq i32 %581, 22
  br i1 %582, label %643, label %583

583:                                              ; preds = %577
  %584 = load ptr, ptr %4, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %584, i32 0, i32 10
  %586 = load i16, ptr %585, align 1, !tbaa !14
  %587 = zext i16 %586 to i32
  %588 = icmp eq i32 %587, 23
  br i1 %588, label %643, label %589

589:                                              ; preds = %583
  %590 = load ptr, ptr %4, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %590, i32 0, i32 10
  %592 = load i16, ptr %591, align 1, !tbaa !14
  %593 = zext i16 %592 to i32
  %594 = icmp eq i32 %593, 24
  br i1 %594, label %643, label %595

595:                                              ; preds = %589
  %596 = load ptr, ptr %4, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %596, i32 0, i32 10
  %598 = load i16, ptr %597, align 1, !tbaa !14
  %599 = zext i16 %598 to i32
  %600 = icmp eq i32 %599, 25
  br i1 %600, label %643, label %601

601:                                              ; preds = %595
  %602 = load ptr, ptr %4, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %602, i32 0, i32 10
  %604 = load i16, ptr %603, align 1, !tbaa !14
  %605 = zext i16 %604 to i32
  %606 = icmp eq i32 %605, 26
  br i1 %606, label %643, label %607

607:                                              ; preds = %601
  %608 = load ptr, ptr %4, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %608, i32 0, i32 10
  %610 = load i16, ptr %609, align 1, !tbaa !14
  %611 = zext i16 %610 to i32
  %612 = icmp eq i32 %611, 27
  br i1 %612, label %643, label %613

613:                                              ; preds = %607
  %614 = load ptr, ptr %4, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %614, i32 0, i32 10
  %616 = load i16, ptr %615, align 1, !tbaa !14
  %617 = zext i16 %616 to i32
  %618 = icmp eq i32 %617, 28
  br i1 %618, label %643, label %619

619:                                              ; preds = %613
  %620 = load ptr, ptr %4, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %620, i32 0, i32 10
  %622 = load i16, ptr %621, align 1, !tbaa !14
  %623 = zext i16 %622 to i32
  %624 = icmp eq i32 %623, 29
  br i1 %624, label %643, label %625

625:                                              ; preds = %619
  %626 = load ptr, ptr %4, align 8, !tbaa !5
  %627 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %626, i32 0, i32 10
  %628 = load i16, ptr %627, align 1, !tbaa !14
  %629 = zext i16 %628 to i32
  %630 = icmp eq i32 %629, 30
  br i1 %630, label %643, label %631

631:                                              ; preds = %625
  %632 = load ptr, ptr %4, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %632, i32 0, i32 10
  %634 = load i16, ptr %633, align 1, !tbaa !14
  %635 = zext i16 %634 to i32
  %636 = icmp eq i32 %635, 31
  br i1 %636, label %643, label %637

637:                                              ; preds = %631
  %638 = load ptr, ptr %4, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %638, i32 0, i32 10
  %640 = load i16, ptr %639, align 1, !tbaa !14
  %641 = zext i16 %640 to i32
  %642 = icmp eq i32 %641, 32
  br label %643

643:                                              ; preds = %637, %631, %625, %619, %613, %607, %601, %595, %589, %583, %577, %571, %565, %559, %553, %547, %541, %535, %529, %523, %517, %511, %505, %499, %493
  %644 = phi i1 [ true, %631 ], [ true, %625 ], [ true, %619 ], [ true, %613 ], [ true, %607 ], [ true, %601 ], [ true, %595 ], [ true, %589 ], [ true, %583 ], [ true, %577 ], [ true, %571 ], [ true, %565 ], [ true, %559 ], [ true, %553 ], [ true, %547 ], [ true, %541 ], [ true, %535 ], [ true, %529 ], [ true, %523 ], [ true, %517 ], [ true, %511 ], [ true, %505 ], [ true, %499 ], [ true, %493 ], [ %642, %637 ]
  br label %645

645:                                              ; preds = %643, %484
  %646 = phi i1 [ false, %484 ], [ %644, %643 ]
  %647 = zext i1 %646 to i64
  %648 = select i1 %646, i32 1, i32 0
  store i32 %648, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  %649 = load ptr, ptr %4, align 8, !tbaa !5
  %650 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %649, i32 noundef 4)
  %651 = icmp sgt i32 %650, 0
  br i1 %651, label %656, label %652

652:                                              ; preds = %645
  %653 = load ptr, ptr %4, align 8, !tbaa !5
  %654 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %653, i32 noundef 5)
  %655 = icmp sgt i32 %654, 0
  br label %656

656:                                              ; preds = %652, %645
  %657 = phi i1 [ true, %645 ], [ %655, %652 ]
  %658 = zext i1 %657 to i64
  %659 = select i1 %657, i32 1, i32 0
  store i32 %659, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %660 = load ptr, ptr %4, align 8, !tbaa !5
  %661 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %660, i32 noundef 0)
  %662 = icmp sgt i32 %661, 0
  %663 = zext i1 %662 to i64
  %664 = select i1 %662, i32 1, i32 0
  store i32 %664, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %665 = load ptr, ptr %4, align 8, !tbaa !5
  %666 = call i32 @libxsmm_generator_mateltwise_all_inp_comp_out_prec(ptr noundef %665, i32 noundef 0)
  %667 = icmp sgt i32 %666, 0
  %668 = zext i1 %667 to i64
  %669 = select i1 %667, i32 1, i32 0
  store i32 %669, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %670 = load ptr, ptr %4, align 8, !tbaa !5
  %671 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %670, i32 noundef 3)
  %672 = icmp sgt i32 %671, 0
  %673 = zext i1 %672 to i64
  %674 = select i1 %672, i32 1, i32 0
  store i32 %674, ptr %19, align 4, !tbaa !9
  %675 = load i32, ptr %6, align 4, !tbaa !9
  %676 = icmp eq i32 %675, 0
  br i1 %676, label %677, label %774

677:                                              ; preds = %656
  %678 = load i32, ptr %13, align 4, !tbaa !9
  %679 = icmp eq i32 %678, 0
  br i1 %679, label %680, label %774

680:                                              ; preds = %677
  %681 = load ptr, ptr %4, align 8, !tbaa !5
  %682 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %681, i32 0, i32 11
  %683 = load i8, ptr %682, align 1, !tbaa !11
  %684 = zext i8 %683 to i32
  %685 = icmp eq i32 %684, 1
  br i1 %685, label %686, label %692

686:                                              ; preds = %680
  %687 = load ptr, ptr %4, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %687, i32 0, i32 10
  %689 = load i16, ptr %688, align 1, !tbaa !14
  %690 = zext i16 %689 to i32
  %691 = icmp eq i32 %690, 2
  br i1 %691, label %774, label %692

692:                                              ; preds = %686, %680
  %693 = load ptr, ptr %4, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %693, i32 0, i32 11
  %695 = load i8, ptr %694, align 1, !tbaa !11
  %696 = zext i8 %695 to i32
  %697 = icmp eq i32 %696, 1
  br i1 %697, label %698, label %704

698:                                              ; preds = %692
  %699 = load ptr, ptr %4, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %699, i32 0, i32 10
  %701 = load i16, ptr %700, align 1, !tbaa !14
  %702 = zext i16 %701 to i32
  %703 = icmp eq i32 %702, 5
  br i1 %703, label %774, label %704

704:                                              ; preds = %698, %692
  %705 = load ptr, ptr %4, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %705, i32 0, i32 11
  %707 = load i8, ptr %706, align 1, !tbaa !11
  %708 = zext i8 %707 to i32
  %709 = icmp eq i32 %708, 1
  br i1 %709, label %710, label %716

710:                                              ; preds = %704
  %711 = load ptr, ptr %4, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %711, i32 0, i32 10
  %713 = load i16, ptr %712, align 1, !tbaa !14
  %714 = zext i16 %713 to i32
  %715 = icmp eq i32 %714, 6
  br i1 %715, label %774, label %716

716:                                              ; preds = %710, %704
  %717 = load ptr, ptr %4, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %717, i32 0, i32 11
  %719 = load i8, ptr %718, align 1, !tbaa !11
  %720 = zext i8 %719 to i32
  %721 = icmp eq i32 %720, 1
  br i1 %721, label %722, label %728

722:                                              ; preds = %716
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %723, i32 0, i32 10
  %725 = load i16, ptr %724, align 1, !tbaa !14
  %726 = zext i16 %725 to i32
  %727 = icmp eq i32 %726, 27
  br i1 %727, label %774, label %728

728:                                              ; preds = %722, %716
  %729 = load ptr, ptr %4, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %729, i32 0, i32 11
  %731 = load i8, ptr %730, align 1, !tbaa !11
  %732 = zext i8 %731 to i32
  %733 = icmp eq i32 %732, 1
  br i1 %733, label %734, label %740

734:                                              ; preds = %728
  %735 = load ptr, ptr %4, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %735, i32 0, i32 10
  %737 = load i16, ptr %736, align 1, !tbaa !14
  %738 = zext i16 %737 to i32
  %739 = icmp eq i32 %738, 1
  br i1 %739, label %774, label %740

740:                                              ; preds = %734, %728
  %741 = load ptr, ptr %4, align 8, !tbaa !5
  %742 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %741, i32 noundef 4)
  %743 = icmp eq i32 2, %742
  br i1 %743, label %772, label %744

744:                                              ; preds = %740
  %745 = load ptr, ptr %4, align 8, !tbaa !5
  %746 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %745, i32 noundef 4)
  %747 = icmp eq i32 10, %746
  br i1 %747, label %772, label %748

748:                                              ; preds = %744
  %749 = load ptr, ptr %4, align 8, !tbaa !5
  %750 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %749, i32 noundef 4)
  %751 = icmp eq i32 3, %750
  br i1 %751, label %772, label %752

752:                                              ; preds = %748
  %753 = load ptr, ptr %4, align 8, !tbaa !5
  %754 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %753, i32 noundef 4)
  %755 = icmp eq i32 5, %754
  br i1 %755, label %772, label %756

756:                                              ; preds = %752
  %757 = load ptr, ptr %4, align 8, !tbaa !5
  %758 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %757, i32 noundef 4)
  %759 = icmp eq i32 4, %758
  br i1 %759, label %772, label %760

760:                                              ; preds = %756
  %761 = load ptr, ptr %4, align 8, !tbaa !5
  %762 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %761, i32 noundef 4)
  %763 = icmp eq i32 12, %762
  br i1 %763, label %772, label %764

764:                                              ; preds = %760
  %765 = load ptr, ptr %4, align 8, !tbaa !5
  %766 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %765, i32 noundef 4)
  %767 = icmp eq i32 8, %766
  br i1 %767, label %772, label %768

768:                                              ; preds = %764
  %769 = load ptr, ptr %4, align 8, !tbaa !5
  %770 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %769, i32 noundef 4)
  %771 = icmp eq i32 6, %770
  br i1 %771, label %772, label %773

772:                                              ; preds = %768, %764, %760, %756, %752, %748, %744, %740
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %773

773:                                              ; preds = %772, %768
  br label %774

774:                                              ; preds = %773, %734, %722, %710, %698, %686, %677, %656
  %775 = load ptr, ptr %3, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %775, i32 0, i32 6
  %777 = load i32, ptr %776, align 4, !tbaa !15
  %778 = icmp ult i32 %777, 1006
  br i1 %778, label %779, label %786

779:                                              ; preds = %774
  %780 = load ptr, ptr %4, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %780, i32 0, i32 11
  %782 = load i8, ptr %781, align 1, !tbaa !11
  %783 = zext i8 %782 to i32
  %784 = icmp eq i32 %783, 3
  br i1 %784, label %785, label %786

785:                                              ; preds = %779
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %786

786:                                              ; preds = %785, %779, %774
  %787 = load ptr, ptr %3, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %787, i32 0, i32 6
  %789 = load i32, ptr %788, align 4, !tbaa !15
  %790 = icmp ult i32 %789, 1006
  br i1 %790, label %791, label %816

791:                                              ; preds = %786
  %792 = load i32, ptr %12, align 4, !tbaa !9
  %793 = icmp eq i32 %792, 1
  br i1 %793, label %815, label %794

794:                                              ; preds = %791
  %795 = load i32, ptr %10, align 4, !tbaa !9
  %796 = icmp eq i32 %795, 1
  br i1 %796, label %815, label %797

797:                                              ; preds = %794
  %798 = load i32, ptr %11, align 4, !tbaa !9
  %799 = icmp eq i32 %798, 1
  br i1 %799, label %815, label %800

800:                                              ; preds = %797
  %801 = load i32, ptr %13, align 4, !tbaa !9
  %802 = icmp eq i32 %801, 1
  br i1 %802, label %815, label %803

803:                                              ; preds = %800
  %804 = load i32, ptr %8, align 4, !tbaa !9
  %805 = icmp eq i32 %804, 1
  br i1 %805, label %815, label %806

806:                                              ; preds = %803
  %807 = load i32, ptr %9, align 4, !tbaa !9
  %808 = icmp eq i32 %807, 1
  br i1 %808, label %815, label %809

809:                                              ; preds = %806
  %810 = load i32, ptr %14, align 4, !tbaa !9
  %811 = icmp eq i32 %810, 1
  br i1 %811, label %815, label %812

812:                                              ; preds = %809
  %813 = load i32, ptr %15, align 4, !tbaa !9
  %814 = icmp eq i32 %813, 1
  br i1 %814, label %815, label %816

815:                                              ; preds = %812, %809, %806, %803, %800, %797, %794, %791
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %816

816:                                              ; preds = %815, %812, %786
  %817 = load i32, ptr %19, align 4, !tbaa !9
  %818 = icmp ugt i32 %817, 0
  br i1 %818, label %819, label %828

819:                                              ; preds = %816
  %820 = load ptr, ptr %3, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %820, i32 0, i32 6
  %822 = load i32, ptr %821, align 4, !tbaa !15
  %823 = icmp ult i32 %822, 1006
  br i1 %823, label %824, label %828

824:                                              ; preds = %819
  %825 = load i32, ptr %6, align 4, !tbaa !9
  %826 = icmp eq i32 %825, 0
  br i1 %826, label %827, label %828

827:                                              ; preds = %824
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %828

828:                                              ; preds = %827, %824, %819, %816
  %829 = load ptr, ptr %3, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %829, i32 0, i32 6
  %831 = load i32, ptr %830, align 4, !tbaa !15
  %832 = icmp eq i32 %831, 1005
  br i1 %832, label %833, label %837

833:                                              ; preds = %828
  %834 = load i32, ptr %6, align 4, !tbaa !9
  %835 = icmp eq i32 %834, 0
  br i1 %835, label %836, label %837

836:                                              ; preds = %833
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %837

837:                                              ; preds = %836, %833, %828
  %838 = load ptr, ptr %4, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %838, i32 0, i32 11
  %840 = load i8, ptr %839, align 1, !tbaa !11
  %841 = zext i8 %840 to i32
  %842 = icmp eq i32 %841, 1
  br i1 %842, label %843, label %855

843:                                              ; preds = %837
  %844 = load ptr, ptr %4, align 8, !tbaa !5
  %845 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %844, i32 0, i32 10
  %846 = load i16, ptr %845, align 1, !tbaa !14
  %847 = zext i16 %846 to i32
  %848 = icmp eq i32 %847, 33
  br i1 %848, label %849, label %855

849:                                              ; preds = %843
  %850 = load ptr, ptr %3, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %850, i32 0, i32 6
  %852 = load i32, ptr %851, align 4, !tbaa !15
  %853 = icmp ult i32 %852, 1051
  br i1 %853, label %854, label %855

854:                                              ; preds = %849
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %855

855:                                              ; preds = %854, %849, %843, %837
  %856 = load ptr, ptr %4, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %856, i32 0, i32 11
  %858 = load i8, ptr %857, align 1, !tbaa !11
  %859 = zext i8 %858 to i32
  %860 = icmp eq i32 %859, 2
  br i1 %860, label %861, label %873

861:                                              ; preds = %855
  %862 = load ptr, ptr %4, align 8, !tbaa !5
  %863 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %862, i32 0, i32 10
  %864 = load i16, ptr %863, align 1, !tbaa !14
  %865 = zext i16 %864 to i32
  %866 = icmp eq i32 %865, 26
  br i1 %866, label %867, label %873

867:                                              ; preds = %861
  %868 = load ptr, ptr %3, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %868, i32 0, i32 6
  %870 = load i32, ptr %869, align 4, !tbaa !15
  %871 = icmp ult i32 %870, 1051
  br i1 %871, label %872, label %873

872:                                              ; preds = %867
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %873

873:                                              ; preds = %872, %867, %861, %855
  %874 = load ptr, ptr %4, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %874, i32 0, i32 11
  %876 = load i8, ptr %875, align 1, !tbaa !11
  %877 = zext i8 %876 to i32
  %878 = icmp eq i32 %877, 2
  br i1 %878, label %879, label %899

879:                                              ; preds = %873
  %880 = load ptr, ptr %4, align 8, !tbaa !5
  %881 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %880)
  %882 = icmp ugt i32 %881, 0
  br i1 %882, label %883, label %899

883:                                              ; preds = %879
  %884 = load ptr, ptr %4, align 8, !tbaa !5
  %885 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %884, i32 noundef 4)
  %886 = icmp ne i32 1, %885
  br i1 %886, label %898, label %887

887:                                              ; preds = %883
  %888 = load ptr, ptr %4, align 8, !tbaa !5
  %889 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %888, i32 noundef 3)
  %890 = icmp ne i32 14, %889
  br i1 %890, label %898, label %891

891:                                              ; preds = %887
  %892 = load ptr, ptr %4, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %892, i32 0, i32 9
  %894 = load i16, ptr %893, align 1, !tbaa !17
  %895 = zext i16 %894 to i32
  %896 = and i32 %895, 128
  %897 = icmp eq i32 %896, 0
  br i1 %897, label %898, label %899

898:                                              ; preds = %891, %887, %883
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %899

899:                                              ; preds = %898, %891, %879, %873
  %900 = load ptr, ptr %4, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %900, i32 0, i32 11
  %902 = load i8, ptr %901, align 1, !tbaa !11
  %903 = zext i8 %902 to i32
  %904 = icmp eq i32 %903, 1
  br i1 %904, label %905, label %923

905:                                              ; preds = %899
  %906 = load ptr, ptr %4, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %906, i32 0, i32 10
  %908 = load i16, ptr %907, align 1, !tbaa !14
  %909 = zext i16 %908 to i32
  %910 = icmp eq i32 %909, 64
  br i1 %910, label %917, label %911

911:                                              ; preds = %905
  %912 = load ptr, ptr %4, align 8, !tbaa !5
  %913 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %912, i32 0, i32 10
  %914 = load i16, ptr %913, align 1, !tbaa !14
  %915 = zext i16 %914 to i32
  %916 = icmp eq i32 %915, 65
  br i1 %916, label %917, label %923

917:                                              ; preds = %911, %905
  %918 = load ptr, ptr %3, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %918, i32 0, i32 6
  %920 = load i32, ptr %919, align 4, !tbaa !15
  %921 = icmp ult i32 %920, 1051
  br i1 %921, label %922, label %923

922:                                              ; preds = %917
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %923

923:                                              ; preds = %922, %917, %911, %899
  %924 = load i32, ptr %16, align 4, !tbaa !9
  %925 = icmp ugt i32 %924, 0
  br i1 %925, label %926, label %935

926:                                              ; preds = %923
  %927 = load ptr, ptr %3, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %927, i32 0, i32 6
  %929 = load i32, ptr %928, align 4, !tbaa !15
  %930 = icmp ult i32 %929, 1051
  br i1 %930, label %931, label %935

931:                                              ; preds = %926
  %932 = load i32, ptr %6, align 4, !tbaa !9
  %933 = icmp eq i32 %932, 0
  br i1 %933, label %934, label %935

934:                                              ; preds = %931
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %935

935:                                              ; preds = %934, %931, %926, %923
  %936 = load ptr, ptr %4, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %936, i32 0, i32 11
  %938 = load i8, ptr %937, align 1, !tbaa !11
  %939 = zext i8 %938 to i32
  %940 = icmp eq i32 %939, 1
  br i1 %940, label %941, label %954

941:                                              ; preds = %935
  %942 = load i32, ptr %6, align 4, !tbaa !9
  %943 = icmp eq i32 %942, 0
  br i1 %943, label %944, label %954

944:                                              ; preds = %941
  %945 = load i32, ptr %7, align 4, !tbaa !9
  %946 = icmp eq i32 %945, 0
  br i1 %946, label %947, label %954

947:                                              ; preds = %944
  %948 = load i32, ptr %10, align 4, !tbaa !9
  %949 = icmp eq i32 %948, 0
  br i1 %949, label %950, label %954

950:                                              ; preds = %947
  %951 = load i32, ptr %17, align 4, !tbaa !9
  %952 = icmp ugt i32 %951, 0
  br i1 %952, label %953, label %954

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

954:                                              ; preds = %953, %950, %947, %944, %941, %935
  %955 = load ptr, ptr %4, align 8, !tbaa !5
  %956 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %955, i32 0, i32 11
  %957 = load i8, ptr %956, align 1, !tbaa !11
  %958 = zext i8 %957 to i32
  %959 = icmp eq i32 %958, 1
  br i1 %959, label %960, label %971

960:                                              ; preds = %954
  %961 = load ptr, ptr %4, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %961, i32 0, i32 10
  %963 = load i16, ptr %962, align 1, !tbaa !14
  %964 = zext i16 %963 to i32
  %965 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %964)
  %966 = icmp sgt i32 %965, 0
  br i1 %966, label %967, label %971

967:                                              ; preds = %960
  %968 = load i32, ptr %17, align 4, !tbaa !9
  %969 = icmp ugt i32 %968, 0
  br i1 %969, label %970, label %971

970:                                              ; preds = %967
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %971

971:                                              ; preds = %970, %967, %960, %954
  %972 = load i32, ptr %17, align 4, !tbaa !9
  %973 = icmp ugt i32 %972, 0
  br i1 %973, label %974, label %978

974:                                              ; preds = %971
  %975 = load i32, ptr %18, align 4, !tbaa !9
  %976 = icmp eq i32 %975, 0
  br i1 %976, label %977, label %978

977:                                              ; preds = %974
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %978

978:                                              ; preds = %977, %974, %971
  %979 = load ptr, ptr %4, align 8, !tbaa !5
  %980 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %979, i32 0, i32 11
  %981 = load i8, ptr %980, align 1, !tbaa !11
  %982 = zext i8 %981 to i32
  %983 = icmp eq i32 %982, 3
  br i1 %983, label %984, label %1011

984:                                              ; preds = %978
  %985 = load ptr, ptr %4, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %985, i32 0, i32 10
  %987 = load i16, ptr %986, align 1, !tbaa !14
  %988 = zext i16 %987 to i32
  %989 = icmp ne i32 %988, 3
  br i1 %989, label %990, label %991

990:                                              ; preds = %984
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %1010

991:                                              ; preds = %984
  %992 = load ptr, ptr %4, align 8, !tbaa !5
  %993 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %992, i32 noundef 4)
  %994 = icmp ne i32 1, %993
  br i1 %994, label %995, label %996

995:                                              ; preds = %991
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %996

996:                                              ; preds = %995, %991
  %997 = load ptr, ptr %4, align 8, !tbaa !5
  %998 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %997, i32 noundef 2)
  %999 = icmp ne i32 14, %998
  br i1 %999, label %1000, label %1001

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

1001:                                             ; preds = %1000, %996
  %1002 = load ptr, ptr %4, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1002, i32 0, i32 9
  %1004 = load i16, ptr %1003, align 1, !tbaa !17
  %1005 = zext i16 %1004 to i32
  %1006 = and i32 %1005, 1024
  %1007 = icmp eq i32 %1006, 0
  br i1 %1007, label %1008, label %1009

1008:                                             ; preds = %1001
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %1009

1009:                                             ; preds = %1008, %1001
  br label %1010

1010:                                             ; preds = %1009, %990
  br label %1011

1011:                                             ; preds = %1010, %978
  %1012 = load i32, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  ret i32 %1012
}

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef) #1

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

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !7, i64 31}
!12 = !{!"libxsmm_meltw_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !13, i64 27, !13, i64 29, !7, i64 31}
!13 = !{!"short", !7, i64 0}
!14 = !{!12, !13, i64 29}
!15 = !{!16, !10, i64 28}
!16 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!17 = !{!12, !13, i64 27}


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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @libxsmm_generator_mateltwise_x86_valid_arch_precision(ptr nocapture noundef readonly %0, ptr noundef %1) local_unnamed_addr #1 {
  %3 = getelementptr inbounds i8, ptr %1, i64 31
  %4 = load i8, ptr %3, align 1, !tbaa !5
  %5 = icmp eq i8 %4, 1
  br i1 %5, label %switch.edge220, label %switch.edge220.thread243

switch.edge220:                                   ; preds = %2
  %6 = getelementptr inbounds i8, ptr %1, i64 29
  %7 = load i16, ptr %6, align 1, !tbaa !11
  %switch.tableidx = add i16 %7, -28
  %8 = icmp ult i16 %switch.tableidx, 48
  %switch.cast = zext nneg i16 %switch.tableidx to i48
  %switch.downshift = lshr i48 -7937166657505, %switch.cast
  %switch.masked = trunc i48 %switch.downshift to i1
  %.ph = select i1 %8, i1 %switch.masked, i1 false
  %9 = icmp ult i16 %7, 64
  %switch.cast282 = zext nneg i16 %7 to i64
  %switch.downshift284 = lshr i64 -9223372036854652898, %switch.cast282
  %switch.masked285 = trunc i64 %switch.downshift284 to i1
  %.ph237 = select i1 %9, i1 %switch.masked285, i1 false
  %10 = icmp ult i16 %7, 38
  %switch.cast273 = zext nneg i16 %7 to i38
  %switch.downshift275 = lshr i38 -17179869088, %switch.cast273
  %switch.masked276 = trunc i38 %switch.downshift275 to i1
  %.ph238 = select i1 %10, i1 %switch.masked276, i1 false
  %11 = icmp eq i16 %7, 27
  %switch.tableidx286 = add i16 %7, -18
  %12 = icmp ult i16 %switch.tableidx286, 53
  %switch.cast287 = zext nneg i16 %switch.tableidx286 to i53
  %switch.downshift289 = lshr i53 -2251799746576369, %switch.cast287
  %switch.masked290 = trunc i53 %switch.downshift289 to i1
  %.ph241 = select i1 %12, i1 %switch.masked290, i1 false
  %13 = zext i16 %7 to i32
  %14 = tail call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %13) #2
  %15 = icmp sgt i32 %14, 0
  %.pr = load i8, ptr %3, align 1, !tbaa !5
  %16 = icmp eq i8 %.pr, 1
  br i1 %16, label %.thread, label %switch.edge220.thread243

.thread:                                          ; preds = %switch.edge220
  %17 = load i16, ptr %6, align 1, !tbaa !11
  %18 = icmp ult i16 %17, 27
  %switch.cast278 = zext nneg i16 %17 to i27
  %switch.downshift280 = lshr i27 -33415296, %switch.cast278
  %switch.masked281 = trunc i27 %switch.downshift280 to i1
  %.ph244 = select i1 %18, i1 %switch.masked281, i1 false
  %19 = add i16 %17, -51
  %spec.select = icmp ult i16 %19, 2
  %20 = and i16 %17, -2
  %spec.select222 = icmp eq i16 %20, 42
  br label %switch.edge223

switch.edge220.thread243:                         ; preds = %2, %switch.edge220
  %.ph246 = phi i8 [ %.pr, %switch.edge220 ], [ %4, %2 ]
  %.ph247 = phi i1 [ %.ph241, %switch.edge220 ], [ false, %2 ]
  %.ph248 = phi i1 [ %.ph238, %switch.edge220 ], [ false, %2 ]
  %.ph249 = phi i1 [ %.ph, %switch.edge220 ], [ false, %2 ]
  %.ph250 = phi i1 [ %.ph237, %switch.edge220 ], [ false, %2 ]
  %.ph251 = phi i1 [ %11, %switch.edge220 ], [ false, %2 ]
  %.ph252 = phi i1 [ %15, %switch.edge220 ], [ false, %2 ]
  %21 = icmp eq i8 %.ph246, 2
  br i1 %21, label %22, label %switch.edge223

22:                                               ; preds = %switch.edge220.thread243
  %23 = getelementptr inbounds i8, ptr %1, i64 29
  %24 = load i16, ptr %23, align 1, !tbaa !11
  switch i16 %24, label %25 [
    i16 6, label %switch.edge223
    i16 7, label %switch.edge223
    i16 8, label %switch.edge223
    i16 11, label %switch.edge223
    i16 12, label %switch.edge223
    i16 13, label %switch.edge223
    i16 14, label %switch.edge223
    i16 15, label %switch.edge223
    i16 16, label %switch.edge223
    i16 17, label %switch.edge223
    i16 18, label %switch.edge223
    i16 19, label %switch.edge223
    i16 20, label %switch.edge223
    i16 21, label %switch.edge223
    i16 22, label %switch.edge223
    i16 23, label %switch.edge223
    i16 24, label %switch.edge223
    i16 25, label %switch.edge223
    i16 26, label %switch.edge223
    i16 27, label %switch.edge223
    i16 28, label %switch.edge223
    i16 29, label %switch.edge223
    i16 30, label %switch.edge223
    i16 31, label %switch.edge223
    i16 32, label %switch.edge223
  ]

25:                                               ; preds = %22
  br label %switch.edge223

switch.edge223:                                   ; preds = %.thread, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %22, %25, %switch.edge220.thread243
  %26 = phi i1 [ false, %switch.edge220.thread243 ], [ false, %22 ], [ false, %25 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ %spec.select222, %.thread ]
  %27 = phi i1 [ false, %switch.edge220.thread243 ], [ false, %22 ], [ false, %25 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ %.ph244, %.thread ]
  %28 = phi i1 [ %.ph247, %switch.edge220.thread243 ], [ %.ph247, %22 ], [ %.ph247, %25 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph247, %22 ], [ %.ph241, %.thread ]
  %29 = phi i1 [ %.ph248, %switch.edge220.thread243 ], [ %.ph248, %22 ], [ %.ph248, %25 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph248, %22 ], [ %.ph238, %.thread ]
  %30 = phi i1 [ %.ph249, %switch.edge220.thread243 ], [ %.ph249, %22 ], [ %.ph249, %25 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph249, %22 ], [ %.ph, %.thread ]
  %31 = phi i1 [ %.ph250, %switch.edge220.thread243 ], [ %.ph250, %22 ], [ %.ph250, %25 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph250, %22 ], [ %.ph237, %.thread ]
  %32 = phi i1 [ %.ph251, %switch.edge220.thread243 ], [ %.ph251, %22 ], [ %.ph251, %25 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %.ph251, %22 ], [ %11, %.thread ]
  %33 = phi i1 [ %.ph252, %switch.edge220.thread243 ], [ %.ph252, %22 ], [ %.ph252, %25 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %.ph252, %22 ], [ %15, %.thread ]
  %34 = phi i1 [ false, %switch.edge220.thread243 ], [ false, %22 ], [ false, %25 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ false, %22 ], [ %spec.select, %.thread ]
  %35 = phi i1 [ false, %switch.edge220.thread243 ], [ true, %22 ], [ false, %25 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ true, %22 ], [ false, %.thread ]
  %36 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 4) #2
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %41, label %38

38:                                               ; preds = %switch.edge223
  %39 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 5) #2
  %40 = icmp sgt i32 %39, 0
  br label %41

41:                                               ; preds = %38, %switch.edge223
  %42 = phi i1 [ true, %switch.edge223 ], [ %40, %38 ]
  %43 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 0) #2
  %44 = icmp sgt i32 %43, 0
  %45 = tail call i32 @libxsmm_generator_mateltwise_all_inp_comp_out_prec(ptr noundef nonnull %1, i32 noundef 0) #2
  %46 = icmp slt i32 %45, 1
  %47 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 3) #2
  %48 = icmp sgt i32 %47, 0
  %or.cond.not = or i1 %30, %34
  br i1 %or.cond.not, label %80, label %49

49:                                               ; preds = %41
  %50 = load i8, ptr %3, align 1, !tbaa !5
  %51 = icmp eq i8 %50, 1
  br i1 %51, label %52, label %55

52:                                               ; preds = %49
  %53 = getelementptr inbounds i8, ptr %1, i64 29
  %54 = load i16, ptr %53, align 1, !tbaa !11
  switch i16 %54, label %55 [
    i16 2, label %80
    i16 5, label %80
    i16 6, label %80
    i16 27, label %80
    i16 1, label %80
  ]

55:                                               ; preds = %52, %49
  %56 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %57 = icmp eq i32 %56, 2
  br i1 %57, label %79, label %58

58:                                               ; preds = %55
  %59 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %60 = icmp eq i32 %59, 10
  br i1 %60, label %79, label %61

61:                                               ; preds = %58
  %62 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %63 = icmp eq i32 %62, 3
  br i1 %63, label %79, label %64

64:                                               ; preds = %61
  %65 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %66 = icmp eq i32 %65, 5
  br i1 %66, label %79, label %67

67:                                               ; preds = %64
  %68 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %69 = icmp eq i32 %68, 4
  br i1 %69, label %79, label %70

70:                                               ; preds = %67
  %71 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %72 = icmp eq i32 %71, 12
  br i1 %72, label %79, label %73

73:                                               ; preds = %70
  %74 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %75 = icmp eq i32 %74, 8
  br i1 %75, label %79, label %76

76:                                               ; preds = %73
  %77 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %78 = icmp eq i32 %77, 6
  br i1 %78, label %79, label %80

79:                                               ; preds = %76, %73, %70, %67, %64, %61, %58, %55
  br label %80

80:                                               ; preds = %52, %52, %52, %52, %52, %76, %79, %41
  %.0 = phi i32 [ 1, %52 ], [ 0, %79 ], [ 1, %76 ], [ 1, %41 ], [ 1, %52 ], [ 1, %52 ], [ 1, %52 ], [ 1, %52 ]
  %81 = getelementptr inbounds i8, ptr %0, i64 28
  %82 = load i32, ptr %81, align 4, !tbaa !12
  %83 = icmp ult i32 %82, 1006
  %.pre = load i8, ptr %3, align 1, !tbaa !5
  br i1 %83, label %84, label %91

84:                                               ; preds = %80
  %85 = icmp eq i8 %.pre, 3
  %or.cond3 = or i1 %27, %28
  %or.cond5 = select i1 %or.cond3, i1 true, i1 %33
  %86 = or i1 %29, %or.cond5
  %87 = or i1 %32, %86
  %88 = or i1 %26, %87
  %89 = or i1 %35, %88
  %or.cond15 = or i1 %34, %89
  %90 = select i1 %or.cond15, i1 true, i1 %85
  %spec.select225 = select i1 %90, i32 0, i32 %.0
  br label %91

91:                                               ; preds = %80, %84
  %.2 = phi i32 [ %spec.select225, %84 ], [ %.0, %80 ]
  %92 = icmp ugt i32 %82, 1005
  %or.cond17.not = or i1 %30, %92
  %spec.select226 = select i1 %or.cond17.not, i32 %.2, i32 0
  %.3 = select i1 %48, i32 %spec.select226, i32 %.2
  %93 = icmp ne i32 %82, 1005
  %or.cond19.not = or i1 %30, %93
  %spec.select227 = select i1 %or.cond19.not, i32 %.3, i32 0
  switch i8 %.pre, label %.thread267.thread [
    i8 1, label %94
    i8 2, label %100
  ]

94:                                               ; preds = %91
  %95 = getelementptr inbounds i8, ptr %1, i64 29
  %96 = load i16, ptr %95, align 1, !tbaa !11
  %97 = icmp eq i16 %96, 33
  br i1 %97, label %98, label %.thread267

98:                                               ; preds = %94
  %99 = icmp ult i32 %82, 1051
  %spec.select228 = select i1 %99, i32 0, i32 %.3
  br label %.thread267

100:                                              ; preds = %91
  %101 = getelementptr inbounds i8, ptr %1, i64 29
  %102 = load i16, ptr %101, align 1, !tbaa !11
  %103 = icmp eq i16 %102, 26
  %104 = icmp ult i32 %82, 1051
  %spec.select229 = select i1 %104, i32 0, i32 %.3
  %.6.ph = select i1 %103, i32 %spec.select229, i32 %spec.select227
  %105 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef nonnull %1) #2
  %.not = icmp eq i32 %105, 0
  br i1 %.not, label %.thread267, label %106

106:                                              ; preds = %100
  %107 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %.not213 = icmp eq i32 %107, 1
  br i1 %.not213, label %108, label %115

108:                                              ; preds = %106
  %109 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #2
  %.not214 = icmp eq i32 %109, 14
  br i1 %.not214, label %110, label %115

110:                                              ; preds = %108
  %111 = getelementptr inbounds i8, ptr %1, i64 27
  %112 = load i16, ptr %111, align 1, !tbaa !15
  %113 = and i16 %112, 128
  %114 = icmp eq i16 %113, 0
  br i1 %114, label %115, label %.thread267

115:                                              ; preds = %110, %108, %106
  br label %.thread267

.thread267:                                       ; preds = %94, %98, %115, %110, %100
  %.7.ph = phi i32 [ %spec.select227, %94 ], [ %spec.select228, %98 ], [ %.6.ph, %100 ], [ %.6.ph, %110 ], [ 0, %115 ]
  %.pr269 = load i8, ptr %3, align 1, !tbaa !5
  %116 = icmp eq i8 %.pr269, 1
  br i1 %116, label %117, label %.thread267.thread

117:                                              ; preds = %.thread267
  %118 = getelementptr inbounds i8, ptr %1, i64 29
  %119 = load i16, ptr %118, align 1, !tbaa !11
  %120 = and i16 %119, -2
  %switch = icmp eq i16 %120, 64
  br i1 %switch, label %121, label %.thread267.thread

121:                                              ; preds = %117
  %122 = load i32, ptr %81, align 4, !tbaa !12
  %123 = icmp ult i32 %122, 1051
  %spec.select230 = select i1 %123, i32 0, i32 %.7.ph
  br label %.thread267.thread

.thread267.thread:                                ; preds = %91, %121, %117, %.thread267
  %124 = phi i8 [ %.pr269, %.thread267 ], [ 1, %117 ], [ 1, %121 ], [ %.pre, %91 ]
  %125 = phi i1 [ false, %.thread267 ], [ true, %117 ], [ true, %121 ], [ false, %91 ]
  %.8 = phi i32 [ %.7.ph, %.thread267 ], [ %.7.ph, %117 ], [ %spec.select230, %121 ], [ %spec.select227, %91 ]
  br i1 %42, label %126, label %129

126:                                              ; preds = %.thread267.thread
  %127 = load i32, ptr %81, align 4, !tbaa !12
  %128 = icmp ugt i32 %127, 1050
  %or.cond21.not = or i1 %30, %128
  %spec.select231 = select i1 %or.cond21.not, i32 %.8, i32 0
  br label %129

129:                                              ; preds = %126, %.thread267.thread
  %.9 = phi i32 [ %.8, %.thread267.thread ], [ %spec.select231, %126 ]
  %130 = or i1 %30, %31
  %131 = or i1 %28, %130
  %132 = xor i1 %131, true
  %or.cond27 = and i1 %125, %132
  %or.cond29 = select i1 %or.cond27, i1 %44, i1 false
  %spec.select232 = select i1 %or.cond29, i32 0, i32 %.9
  br i1 %125, label %133, label %139

133:                                              ; preds = %129
  %134 = getelementptr inbounds i8, ptr %1, i64 29
  %135 = load i16, ptr %134, align 1, !tbaa !11
  %136 = zext i16 %135 to i32
  %137 = tail call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %136) #2
  %138 = icmp sgt i32 %137, 0
  %or.cond31 = select i1 %138, i1 %44, i1 false
  %spec.select233 = select i1 %or.cond31, i32 0, i32 %spec.select232
  %.pre271 = load i8, ptr %3, align 1, !tbaa !5
  br label %139

139:                                              ; preds = %133, %129
  %140 = phi i8 [ %124, %129 ], [ %.pre271, %133 ]
  %.11 = phi i32 [ %spec.select232, %129 ], [ %spec.select233, %133 ]
  %or.cond33 = select i1 %44, i1 %46, i1 false
  %spec.select234 = select i1 %or.cond33, i32 0, i32 %.11
  %141 = icmp eq i8 %140, 3
  br i1 %141, label %142, label %153

142:                                              ; preds = %139
  %143 = getelementptr inbounds i8, ptr %1, i64 29
  %144 = load i16, ptr %143, align 1, !tbaa !11
  %.not216 = icmp eq i16 %144, 3
  br i1 %.not216, label %145, label %153

145:                                              ; preds = %142
  %146 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %.not217 = icmp eq i32 %146, 1
  %147 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 2) #2
  %.not218 = icmp eq i32 %147, 14
  %148 = select i1 %.not218, i1 %.not217, i1 false
  %.14 = select i1 %148, i32 %spec.select234, i32 0
  %149 = getelementptr inbounds i8, ptr %1, i64 27
  %150 = load i16, ptr %149, align 1, !tbaa !15
  %151 = and i16 %150, 1024
  %152 = icmp eq i16 %151, 0
  %spec.select236 = select i1 %152, i32 0, i32 %.14
  br label %153

153:                                              ; preds = %145, %142, %139
  %.15 = phi i32 [ %spec.select234, %139 ], [ 0, %142 ], [ %spec.select236, %145 ]
  ret i32 %.15
}

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef) local_unnamed_addr #0

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

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !8, i64 31}
!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, !10, i64 29}
!12 = !{!13, !7, i64 28}
!13 = !{!"libxsmm_generated_code", !14, i64 0, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!6, !10, i64 27}


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