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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @libxsmm_generator_mateltwise_aarch64_valid_arch_precision(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
  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
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %14, i32 0, i32 11
  %16 = load i8, ptr %15, align 1, !tbaa !11
  %17 = zext i8 %16 to i32
  %18 = icmp eq i32 %17, 1
  br i1 %18, label %19, label %135

19:                                               ; preds = %2
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %20, i32 0, i32 10
  %22 = load i16, ptr %21, align 1, !tbaa !14
  %23 = zext i16 %22 to i32
  %24 = icmp eq i32 %23, 28
  br i1 %24, label %133, label %25

25:                                               ; preds = %19
  %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, 29
  br i1 %30, label %133, 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, 30
  br i1 %36, label %133, 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, 31
  br i1 %42, label %133, 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, 32
  br i1 %48, label %133, 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, 54
  br i1 %54, label %133, 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, 61
  br i1 %60, label %133, 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, 62
  br i1 %66, label %133, 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, 55
  br i1 %72, label %133, 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, 56
  br i1 %78, label %133, 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, 67
  br i1 %84, label %133, 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, 66
  br i1 %90, label %133, 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, 57
  br i1 %96, label %133, 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, 39
  br i1 %102, label %133, 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, 40
  br i1 %108, label %133, 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, 41
  br i1 %114, label %133, 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, 58
  br i1 %120, label %133, 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, 59
  br i1 %126, label %133, 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, 60
  br label %133

133:                                              ; preds = %127, %121, %115, %109, %103, %97, %91, %85, %79, %73, %67, %61, %55, %49, %43, %37, %31, %25, %19
  %134 = phi i1 [ 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 ], [ true, %19 ], [ %132, %127 ]
  br label %135

135:                                              ; preds = %133, %2
  %136 = phi i1 [ false, %2 ], [ %134, %133 ]
  %137 = zext i1 %136 to i64
  %138 = select i1 %136, i32 1, i32 0
  store i32 %138, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %139, i32 0, i32 11
  %141 = load i8, ptr %140, align 1, !tbaa !11
  %142 = zext i8 %141 to i32
  %143 = icmp eq i32 %142, 1
  br i1 %143, label %144, label %236

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

150:                                              ; preds = %144
  %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 !14
  %154 = zext i16 %153 to i32
  %155 = icmp eq i32 %154, 2
  br i1 %155, label %234, label %156

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

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

168:                                              ; preds = %162
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %169, i32 0, i32 10
  %171 = load i16, ptr %170, align 1, !tbaa !14
  %172 = zext i16 %171 to i32
  %173 = icmp eq i32 %172, 13
  br i1 %173, label %234, label %174

174:                                              ; preds = %168
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %175, i32 0, i32 10
  %177 = load i16, ptr %176, align 1, !tbaa !14
  %178 = zext i16 %177 to i32
  %179 = icmp eq i32 %178, 14
  br i1 %179, label %234, label %180

180:                                              ; preds = %174
  %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, 15
  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, 16
  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, 18
  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, 19
  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, 20
  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, 63
  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, 21
  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, 70
  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, 69
  br label %234

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

236:                                              ; preds = %234, %135
  %237 = phi i1 [ false, %135 ], [ %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 %259

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, 51
  br i1 %250, label %257, 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, 52
  br label %257

257:                                              ; preds = %251, %245
  %258 = phi i1 [ true, %245 ], [ %256, %251 ]
  br label %259

259:                                              ; preds = %257, %236
  %260 = phi i1 [ false, %236 ], [ %258, %257 ]
  %261 = zext i1 %260 to i64
  %262 = select i1 %260, i32 1, i32 0
  store i32 %262, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  %263 = load ptr, ptr %4, align 8, !tbaa !5
  %264 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %263, i32 noundef 4)
  %265 = icmp sgt i32 %264, 0
  br i1 %265, label %270, label %266

266:                                              ; preds = %259
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %267, i32 noundef 5)
  %269 = icmp sgt i32 %268, 0
  br label %270

270:                                              ; preds = %266, %259
  %271 = phi i1 [ true, %259 ], [ %269, %266 ]
  %272 = zext i1 %271 to i64
  %273 = select i1 %271, i32 1, i32 0
  store i32 %273, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  %274 = load ptr, ptr %4, align 8, !tbaa !5
  %275 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %274, i32 noundef 0)
  %276 = icmp sgt i32 %275, 0
  %277 = zext i1 %276 to i64
  %278 = select i1 %276, i32 1, i32 0
  store i32 %278, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %279, i32 noundef 3)
  %281 = icmp sgt i32 %280, 0
  %282 = zext i1 %281 to i64
  %283 = select i1 %281, i32 1, i32 0
  store i32 %283, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %284 = load ptr, ptr %4, align 8, !tbaa !5
  %285 = call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef %284, i32 noundef 2)
  %286 = icmp sgt i32 %285, 0
  %287 = zext i1 %286 to i64
  %288 = select i1 %286, i32 1, i32 0
  store i32 %288, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = call i32 @libxsmm_generator_mateltwise_all_inp_comp_out_prec(ptr noundef %289, i32 noundef 0)
  %291 = icmp sgt i32 %290, 0
  %292 = zext i1 %291 to i64
  %293 = select i1 %291, i32 1, i32 0
  store i32 %293, ptr %13, align 4, !tbaa !9
  %294 = load i32, ptr %6, align 4, !tbaa !9
  %295 = icmp eq i32 %294, 0
  br i1 %295, label %296, label %369

296:                                              ; preds = %270
  %297 = load i32, ptr %8, align 4, !tbaa !9
  %298 = icmp eq i32 %297, 0
  br i1 %298, label %299, label %369

299:                                              ; preds = %296
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %300, i32 0, i32 11
  %302 = load i8, ptr %301, align 1, !tbaa !11
  %303 = zext i8 %302 to i32
  %304 = icmp eq i32 %303, 1
  br i1 %304, label %305, label %311

305:                                              ; preds = %299
  %306 = load ptr, ptr %4, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %306, i32 0, i32 10
  %308 = load i16, ptr %307, align 1, !tbaa !14
  %309 = zext i16 %308 to i32
  %310 = icmp eq i32 %309, 2
  br i1 %310, label %369, label %311

311:                                              ; preds = %305, %299
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %312, i32 0, i32 11
  %314 = load i8, ptr %313, align 1, !tbaa !11
  %315 = zext i8 %314 to i32
  %316 = icmp eq i32 %315, 1
  br i1 %316, label %317, label %323

317:                                              ; preds = %311
  %318 = load ptr, ptr %4, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %318, i32 0, i32 10
  %320 = load i16, ptr %319, align 1, !tbaa !14
  %321 = zext i16 %320 to i32
  %322 = icmp eq i32 %321, 27
  br i1 %322, label %369, label %323

323:                                              ; preds = %317, %311
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %324, i32 0, i32 11
  %326 = load i8, ptr %325, align 1, !tbaa !11
  %327 = zext i8 %326 to i32
  %328 = icmp eq i32 %327, 1
  br i1 %328, label %329, label %335

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

335:                                              ; preds = %329, %323
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %336, i32 noundef 4)
  %338 = icmp eq i32 2, %337
  br i1 %338, label %367, label %339

339:                                              ; preds = %335
  %340 = load ptr, ptr %4, align 8, !tbaa !5
  %341 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %340, i32 noundef 4)
  %342 = icmp eq i32 10, %341
  br i1 %342, label %367, label %343

343:                                              ; preds = %339
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %344, i32 noundef 4)
  %346 = icmp eq i32 3, %345
  br i1 %346, label %367, label %347

347:                                              ; preds = %343
  %348 = load ptr, ptr %4, align 8, !tbaa !5
  %349 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %348, i32 noundef 4)
  %350 = icmp eq i32 5, %349
  br i1 %350, label %367, label %351

351:                                              ; preds = %347
  %352 = load ptr, ptr %4, align 8, !tbaa !5
  %353 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %352, i32 noundef 4)
  %354 = icmp eq i32 4, %353
  br i1 %354, label %367, label %355

355:                                              ; preds = %351
  %356 = load ptr, ptr %4, align 8, !tbaa !5
  %357 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %356, i32 noundef 4)
  %358 = icmp eq i32 12, %357
  br i1 %358, label %367, label %359

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

363:                                              ; preds = %359
  %364 = load ptr, ptr %4, align 8, !tbaa !5
  %365 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %364, i32 noundef 4)
  %366 = icmp eq i32 6, %365
  br i1 %366, label %367, label %368

367:                                              ; preds = %363, %359, %355, %351, %347, %343, %339, %335
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %367, %363
  br label %369

369:                                              ; preds = %368, %329, %317, %305, %296, %270
  %370 = load ptr, ptr %4, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %370, i32 0, i32 11
  %372 = load i8, ptr %371, align 1, !tbaa !11
  %373 = zext i8 %372 to i32
  %374 = icmp eq i32 %373, 1
  br i1 %374, label %375, label %392

375:                                              ; preds = %369
  %376 = load ptr, ptr %4, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %376, i32 0, i32 10
  %378 = load i16, ptr %377, align 1, !tbaa !14
  %379 = zext i16 %378 to i32
  %380 = icmp eq i32 %379, 33
  br i1 %380, label %381, label %392

381:                                              ; preds = %375
  %382 = load ptr, ptr %3, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %382, i32 0, i32 6
  %384 = load i32, ptr %383, align 4, !tbaa !15
  %385 = icmp ne i32 %384, 2302
  br i1 %385, label %386, label %392

386:                                              ; preds = %381
  %387 = load ptr, ptr %3, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %387, i32 0, i32 6
  %389 = load i32, ptr %388, align 4, !tbaa !15
  %390 = icmp ne i32 %389, 2202
  br i1 %390, label %391, label %392

391:                                              ; preds = %386
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %392

392:                                              ; preds = %391, %386, %381, %375, %369
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %393, i32 0, i32 11
  %395 = load i8, ptr %394, align 1, !tbaa !11
  %396 = zext i8 %395 to i32
  %397 = icmp eq i32 %396, 2
  br i1 %397, label %398, label %415

398:                                              ; preds = %392
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %399, i32 0, i32 10
  %401 = load i16, ptr %400, align 1, !tbaa !14
  %402 = zext i16 %401 to i32
  %403 = icmp eq i32 %402, 26
  br i1 %403, label %404, label %415

404:                                              ; preds = %398
  %405 = load ptr, ptr %3, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %405, i32 0, i32 6
  %407 = load i32, ptr %406, align 4, !tbaa !15
  %408 = icmp ne i32 %407, 2302
  br i1 %408, label %409, label %415

409:                                              ; preds = %404
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %410, i32 0, i32 6
  %412 = load i32, ptr %411, align 4, !tbaa !15
  %413 = icmp ne i32 %412, 2202
  br i1 %413, label %414, label %415

414:                                              ; preds = %409
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %414, %409, %404, %398, %392
  %416 = load ptr, ptr %4, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %416, i32 0, i32 11
  %418 = load i8, ptr %417, align 1, !tbaa !11
  %419 = zext i8 %418 to i32
  %420 = icmp eq i32 %419, 1
  br i1 %420, label %421, label %444

421:                                              ; preds = %415
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %422, i32 0, i32 10
  %424 = load i16, ptr %423, align 1, !tbaa !14
  %425 = zext i16 %424 to i32
  %426 = icmp eq i32 %425, 64
  br i1 %426, label %433, label %427

427:                                              ; preds = %421
  %428 = load ptr, ptr %4, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %428, i32 0, i32 10
  %430 = load i16, ptr %429, align 1, !tbaa !14
  %431 = zext i16 %430 to i32
  %432 = icmp eq i32 %431, 65
  br i1 %432, label %433, label %444

433:                                              ; preds = %427, %421
  %434 = load ptr, ptr %3, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %434, i32 0, i32 6
  %436 = load i32, ptr %435, align 4, !tbaa !15
  %437 = icmp ne i32 %436, 2302
  br i1 %437, label %438, label %444

438:                                              ; preds = %433
  %439 = load ptr, ptr %3, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %439, i32 0, i32 6
  %441 = load i32, ptr %440, align 4, !tbaa !15
  %442 = icmp ne i32 %441, 2202
  br i1 %442, label %443, label %444

443:                                              ; preds = %438
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %444

444:                                              ; preds = %443, %438, %433, %427, %415
  %445 = load i32, ptr %9, align 4, !tbaa !9
  %446 = icmp ugt i32 %445, 0
  br i1 %446, label %447, label %448

447:                                              ; preds = %444
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %448

448:                                              ; preds = %447, %444
  %449 = load ptr, ptr %4, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %449, i32 0, i32 11
  %451 = load i8, ptr %450, align 1, !tbaa !11
  %452 = zext i8 %451 to i32
  %453 = icmp eq i32 %452, 1
  br i1 %453, label %454, label %464

454:                                              ; preds = %448
  %455 = load i32, ptr %6, align 4, !tbaa !9
  %456 = icmp eq i32 %455, 0
  br i1 %456, label %457, label %464

457:                                              ; preds = %454
  %458 = load i32, ptr %7, align 4, !tbaa !9
  %459 = icmp eq i32 %458, 0
  br i1 %459, label %460, label %464

460:                                              ; preds = %457
  %461 = load i32, ptr %10, align 4, !tbaa !9
  %462 = icmp ugt i32 %461, 0
  br i1 %462, label %463, label %464

463:                                              ; preds = %460
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %464

464:                                              ; preds = %463, %460, %457, %454, %448
  %465 = load i32, ptr %11, align 4, !tbaa !9
  %466 = icmp ugt i32 %465, 0
  br i1 %466, label %467, label %498

467:                                              ; preds = %464
  %468 = load ptr, ptr %4, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %468, i32 0, i32 11
  %470 = load i8, ptr %469, align 1, !tbaa !11
  %471 = zext i8 %470 to i32
  %472 = icmp eq i32 %471, 1
  br i1 %472, label %473, label %485

473:                                              ; preds = %467
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %474, i32 0, i32 10
  %476 = load i16, ptr %475, align 1, !tbaa !14
  %477 = zext i16 %476 to i32
  %478 = icmp eq i32 %477, 51
  br i1 %478, label %498, label %479

479:                                              ; preds = %473
  %480 = load ptr, ptr %4, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %480, i32 0, i32 10
  %482 = load i16, ptr %481, align 1, !tbaa !14
  %483 = zext i16 %482 to i32
  %484 = icmp eq i32 %483, 52
  br i1 %484, label %498, label %485

485:                                              ; preds = %479, %467
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %486, i32 0, i32 11
  %488 = load i8, ptr %487, align 1, !tbaa !11
  %489 = zext i8 %488 to i32
  %490 = icmp eq i32 %489, 1
  br i1 %490, label %491, label %497

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

497:                                              ; preds = %491, %485
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %498

498:                                              ; preds = %497, %491, %479, %473, %464
  %499 = load i32, ptr %11, align 4, !tbaa !9
  %500 = icmp ugt i32 %499, 0
  br i1 %500, label %501, label %514

501:                                              ; preds = %498
  %502 = load ptr, ptr %4, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %502, i32 0, i32 11
  %504 = load i8, ptr %503, align 1, !tbaa !11
  %505 = zext i8 %504 to i32
  %506 = icmp eq i32 %505, 1
  br i1 %506, label %507, label %513

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

513:                                              ; preds = %507, %501
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %514

514:                                              ; preds = %513, %507, %498
  %515 = load i32, ptr %12, align 4, !tbaa !9
  %516 = icmp ugt i32 %515, 0
  br i1 %516, label %517, label %613

517:                                              ; preds = %514
  %518 = load ptr, ptr %3, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %518, i32 0, i32 6
  %520 = load i32, ptr %519, align 4, !tbaa !15
  %521 = icmp ne i32 %520, 2302
  br i1 %521, label %522, label %613

522:                                              ; preds = %517
  %523 = load ptr, ptr %3, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %523, i32 0, i32 6
  %525 = load i32, ptr %524, align 4, !tbaa !15
  %526 = icmp ne i32 %525, 2202
  br i1 %526, label %527, label %613

527:                                              ; preds = %522
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %528, i32 0, i32 11
  %530 = load i8, ptr %529, align 1, !tbaa !11
  %531 = zext i8 %530 to i32
  %532 = icmp eq i32 %531, 1
  br i1 %532, label %533, label %545

533:                                              ; preds = %527
  %534 = load ptr, ptr %4, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %534, i32 0, i32 10
  %536 = load i16, ptr %535, align 1, !tbaa !14
  %537 = zext i16 %536 to i32
  %538 = icmp eq i32 %537, 51
  br i1 %538, label %612, label %539

539:                                              ; preds = %533
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %540, i32 0, i32 10
  %542 = load i16, ptr %541, align 1, !tbaa !14
  %543 = zext i16 %542 to i32
  %544 = icmp eq i32 %543, 52
  br i1 %544, label %612, label %545

545:                                              ; preds = %539, %527
  %546 = load ptr, ptr %4, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %546, i32 0, i32 11
  %548 = load i8, ptr %547, align 1, !tbaa !11
  %549 = zext i8 %548 to i32
  %550 = icmp eq i32 %549, 1
  br i1 %550, label %551, label %611

551:                                              ; preds = %545
  %552 = load ptr, ptr %4, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %552, i32 0, i32 10
  %554 = load i16, ptr %553, align 1, !tbaa !14
  %555 = zext i16 %554 to i32
  %556 = icmp eq i32 %555, 28
  br i1 %556, label %612, label %557

557:                                              ; preds = %551
  %558 = load ptr, ptr %4, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %558, i32 0, i32 10
  %560 = load i16, ptr %559, align 1, !tbaa !14
  %561 = zext i16 %560 to i32
  %562 = icmp eq i32 %561, 29
  br i1 %562, label %612, label %563

563:                                              ; preds = %557
  %564 = load ptr, ptr %4, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %564, i32 0, i32 10
  %566 = load i16, ptr %565, align 1, !tbaa !14
  %567 = zext i16 %566 to i32
  %568 = icmp eq i32 %567, 30
  br i1 %568, label %612, label %569

569:                                              ; preds = %563
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %570, i32 0, i32 10
  %572 = load i16, ptr %571, align 1, !tbaa !14
  %573 = zext i16 %572 to i32
  %574 = icmp eq i32 %573, 54
  br i1 %574, label %612, label %575

575:                                              ; preds = %569
  %576 = load ptr, ptr %4, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %576, i32 0, i32 10
  %578 = load i16, ptr %577, align 1, !tbaa !14
  %579 = zext i16 %578 to i32
  %580 = icmp eq i32 %579, 39
  br i1 %580, label %612, label %581

581:                                              ; preds = %575
  %582 = load ptr, ptr %4, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %582, i32 0, i32 10
  %584 = load i16, ptr %583, align 1, !tbaa !14
  %585 = zext i16 %584 to i32
  %586 = icmp eq i32 %585, 40
  br i1 %586, label %612, label %587

587:                                              ; preds = %581
  %588 = load ptr, ptr %4, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %588, i32 0, i32 10
  %590 = load i16, ptr %589, align 1, !tbaa !14
  %591 = zext i16 %590 to i32
  %592 = icmp eq i32 %591, 41
  br i1 %592, label %612, label %593

593:                                              ; preds = %587
  %594 = load ptr, ptr %4, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %594, i32 0, i32 10
  %596 = load i16, ptr %595, align 1, !tbaa !14
  %597 = zext i16 %596 to i32
  %598 = icmp eq i32 %597, 58
  br i1 %598, label %612, label %599

599:                                              ; preds = %593
  %600 = load ptr, ptr %4, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %600, i32 0, i32 10
  %602 = load i16, ptr %601, align 1, !tbaa !14
  %603 = zext i16 %602 to i32
  %604 = icmp eq i32 %603, 59
  br i1 %604, label %612, label %605

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

611:                                              ; preds = %605, %545
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %611, %605, %599, %593, %587, %581, %575, %569, %563, %557, %551, %539, %533
  br label %613

613:                                              ; preds = %612, %522, %517, %514
  %614 = load ptr, ptr %4, align 8, !tbaa !5
  %615 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %614, i32 0, i32 11
  %616 = load i8, ptr %615, align 1, !tbaa !11
  %617 = zext i8 %616 to i32
  %618 = icmp eq i32 %617, 1
  br i1 %618, label %619, label %630

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 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %623)
  %625 = icmp sgt i32 %624, 0
  br i1 %625, label %626, label %630

626:                                              ; preds = %619
  %627 = load i32, ptr %10, align 4, !tbaa !9
  %628 = icmp ugt i32 %627, 0
  br i1 %628, label %629, label %630

629:                                              ; preds = %626
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %630

630:                                              ; preds = %629, %626, %619, %613
  %631 = load i32, ptr %10, align 4, !tbaa !9
  %632 = icmp ugt i32 %631, 0
  br i1 %632, label %633, label %637

633:                                              ; preds = %630
  %634 = load i32, ptr %13, align 4, !tbaa !9
  %635 = icmp eq i32 %634, 0
  br i1 %635, label %636, label %637

636:                                              ; preds = %633
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %637

637:                                              ; preds = %636, %633, %630
  %638 = load ptr, ptr %4, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %638, i32 0, i32 11
  %640 = load i8, ptr %639, align 1, !tbaa !11
  %641 = zext i8 %640 to i32
  %642 = icmp eq i32 %641, 2
  br i1 %642, label %643, label %663

643:                                              ; preds = %637
  %644 = load ptr, ptr %4, align 8, !tbaa !5
  %645 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %644)
  %646 = icmp ugt i32 %645, 0
  br i1 %646, label %647, label %663

647:                                              ; preds = %643
  %648 = load ptr, ptr %4, align 8, !tbaa !5
  %649 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %648, i32 noundef 4)
  %650 = icmp ne i32 1, %649
  br i1 %650, label %662, label %651

651:                                              ; preds = %647
  %652 = load ptr, ptr %4, align 8, !tbaa !5
  %653 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %652, i32 noundef 3)
  %654 = icmp ne i32 14, %653
  br i1 %654, label %662, label %655

655:                                              ; preds = %651
  %656 = load ptr, ptr %4, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %656, i32 0, i32 9
  %658 = load i16, ptr %657, align 1, !tbaa !17
  %659 = zext i16 %658 to i32
  %660 = and i32 %659, 128
  %661 = icmp eq i32 %660, 0
  br i1 %661, label %662, label %663

662:                                              ; preds = %655, %651, %647
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %663

663:                                              ; preds = %662, %655, %643, %637
  %664 = load ptr, ptr %4, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %664, i32 0, i32 11
  %666 = load i8, ptr %665, align 1, !tbaa !11
  %667 = zext i8 %666 to i32
  %668 = icmp eq i32 %667, 3
  br i1 %668, label %669, label %696

669:                                              ; preds = %663
  %670 = load ptr, ptr %4, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %670, i32 0, i32 10
  %672 = load i16, ptr %671, align 1, !tbaa !14
  %673 = zext i16 %672 to i32
  %674 = icmp ne i32 %673, 3
  br i1 %674, label %675, label %676

675:                                              ; preds = %669
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %695

676:                                              ; preds = %669
  %677 = load ptr, ptr %4, align 8, !tbaa !5
  %678 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %677, i32 noundef 4)
  %679 = icmp ne i32 1, %678
  br i1 %679, label %680, label %681

680:                                              ; preds = %676
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %681

681:                                              ; preds = %680, %676
  %682 = load ptr, ptr %4, align 8, !tbaa !5
  %683 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %682, i32 noundef 2)
  %684 = icmp ne i32 14, %683
  br i1 %684, label %685, label %686

685:                                              ; preds = %681
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %686

686:                                              ; preds = %685, %681
  %687 = load ptr, ptr %4, align 8, !tbaa !5
  %688 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %687, i32 0, i32 9
  %689 = load i16, ptr %688, align 1, !tbaa !17
  %690 = zext i16 %689 to i32
  %691 = and i32 %690, 1024
  %692 = icmp eq i32 %691, 0
  br i1 %692, label %693, label %694

693:                                              ; preds = %686
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %694

694:                                              ; preds = %693, %686
  br label %695

695:                                              ; preds = %694, %675
  br label %696

696:                                              ; preds = %695, %663
  %697 = load ptr, ptr %4, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %697, i32 0, i32 11
  %699 = load i8, ptr %698, align 1, !tbaa !11
  %700 = zext i8 %699 to i32
  %701 = icmp eq i32 %700, 1
  br i1 %701, label %702, label %722

702:                                              ; preds = %696
  %703 = load ptr, ptr %4, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %703, i32 0, i32 10
  %705 = load i16, ptr %704, align 1, !tbaa !14
  %706 = zext i16 %705 to i32
  %707 = icmp eq i32 %706, 42
  br i1 %707, label %708, label %722

708:                                              ; preds = %702
  %709 = load ptr, ptr %3, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %709, i32 0, i32 6
  %711 = load i32, ptr %710, align 4, !tbaa !15
  %712 = icmp ne i32 %711, 2302
  br i1 %712, label %721, label %713

713:                                              ; preds = %708
  %714 = load ptr, ptr %4, align 8, !tbaa !5
  %715 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %714, i32 noundef 3)
  %716 = icmp ne i32 12, %715
  br i1 %716, label %721, label %717

717:                                              ; preds = %713
  %718 = load ptr, ptr %4, align 8, !tbaa !5
  %719 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %718, i32 noundef 0)
  %720 = icmp ne i32 1, %719
  br i1 %720, label %721, label %722

721:                                              ; preds = %717, %713, %708
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %722

722:                                              ; preds = %721, %717, %702, %696
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %723, i32 0, i32 11
  %725 = load i8, ptr %724, align 1, !tbaa !11
  %726 = zext i8 %725 to i32
  %727 = icmp eq i32 %726, 1
  br i1 %727, label %728, label %748

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

734:                                              ; preds = %728
  %735 = load ptr, ptr %3, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %735, i32 0, i32 6
  %737 = load i32, ptr %736, align 4, !tbaa !15
  %738 = icmp ne i32 %737, 2302
  br i1 %738, label %747, label %739

739:                                              ; preds = %734
  %740 = load ptr, ptr %4, align 8, !tbaa !5
  %741 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %740, i32 noundef 0)
  %742 = icmp ne i32 12, %741
  br i1 %742, label %747, label %743

743:                                              ; preds = %739
  %744 = load ptr, ptr %4, align 8, !tbaa !5
  %745 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %744, i32 noundef 3)
  %746 = icmp ne i32 1, %745
  br i1 %746, label %747, label %748

747:                                              ; preds = %743, %739, %734
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %748

748:                                              ; preds = %747, %743, %728, %722
  %749 = load i32, ptr %5, align 4, !tbaa !9
  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 %749
}

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

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

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

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef) #0

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #0

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

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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_aarch64_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 %6, label %switch.edge171

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %1, i64 29
  %8 = load i16, ptr %7, align 1, !tbaa !11
  %switch.tableidx = add i16 %8, -28
  %9 = icmp ult i16 %switch.tableidx, 40
  %switch.cast = zext nneg i16 %switch.tableidx to i40
  %switch.downshift = lshr i40 -240585263073, %switch.cast
  %switch.masked = trunc i40 %switch.downshift to i1
  %.ph = select i1 %9, i1 %switch.masked, i1 false
  switch i16 %8, label %10 [
    i16 1, label %11
    i16 2, label %11
    i16 3, label %11
    i16 4, label %11
    i16 13, label %11
    i16 14, label %11
    i16 15, label %11
    i16 16, label %11
    i16 18, label %11
    i16 19, label %11
    i16 20, label %11
    i16 63, label %11
    i16 21, label %11
    i16 70, label %11
    i16 69, label %11
  ]

10:                                               ; preds = %6
  br label %11

11:                                               ; preds = %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %6, %10
  %.ph181 = phi i1 [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ true, %6 ], [ false, %10 ], [ true, %6 ]
  %12 = add i16 %8, -51
  %spec.select = icmp ult i16 %12, 2
  br label %switch.edge171

switch.edge171:                                   ; preds = %2, %11
  %13 = phi i1 [ %.ph181, %11 ], [ false, %2 ]
  %14 = phi i1 [ %.ph, %11 ], [ false, %2 ]
  %15 = phi i1 [ %spec.select, %11 ], [ false, %2 ]
  %16 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 4) #2
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %21, label %18

18:                                               ; preds = %switch.edge171
  %19 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 5) #2
  %20 = icmp sgt i32 %19, 0
  br label %21

21:                                               ; preds = %18, %switch.edge171
  %22 = phi i1 [ true, %switch.edge171 ], [ %20, %18 ]
  %23 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 0) #2
  %24 = icmp sgt i32 %23, 0
  %25 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 3) #2
  %26 = icmp sgt i32 %25, 0
  %27 = tail call i32 @libxsmm_generator_mateltwise_involves_prec(ptr noundef nonnull %1, i32 noundef 2) #2
  %28 = icmp sgt i32 %27, 0
  %29 = tail call i32 @libxsmm_generator_mateltwise_all_inp_comp_out_prec(ptr noundef nonnull %1, i32 noundef 0) #2
  %30 = icmp slt i32 %29, 1
  %or.cond.not = or i1 %14, %15
  br i1 %or.cond.not, label %62, label %31

31:                                               ; preds = %21
  %32 = load i8, ptr %3, align 1, !tbaa !5
  %33 = icmp eq i8 %32, 1
  br i1 %33, label %34, label %37

34:                                               ; preds = %31
  %35 = getelementptr inbounds i8, ptr %1, i64 29
  %36 = load i16, ptr %35, align 1, !tbaa !11
  switch i16 %36, label %37 [
    i16 2, label %62
    i16 27, label %62
    i16 1, label %62
  ]

37:                                               ; preds = %34, %31
  %38 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %39 = icmp eq i32 %38, 2
  br i1 %39, label %61, label %40

40:                                               ; preds = %37
  %41 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %42 = icmp eq i32 %41, 10
  br i1 %42, label %61, label %43

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

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

49:                                               ; preds = %46
  %50 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %51 = icmp eq i32 %50, 4
  br i1 %51, label %61, label %52

52:                                               ; preds = %49
  %53 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %54 = icmp eq i32 %53, 12
  br i1 %54, label %61, label %55

55:                                               ; preds = %52
  %56 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %57 = icmp eq i32 %56, 8
  br i1 %57, label %61, 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, 6
  br i1 %60, label %61, label %62

61:                                               ; preds = %58, %55, %52, %49, %46, %43, %40, %37
  br label %62

62:                                               ; preds = %34, %34, %34, %58, %61, %21
  %.0 = phi i32 [ 1, %34 ], [ 0, %61 ], [ 1, %58 ], [ 1, %21 ], [ 1, %34 ], [ 1, %34 ]
  %63 = load i8, ptr %3, align 1, !tbaa !5
  %64 = icmp eq i8 %63, 1
  br i1 %64, label %65, label %73

65:                                               ; preds = %62
  %66 = getelementptr inbounds i8, ptr %1, i64 29
  %67 = load i16, ptr %66, align 1, !tbaa !11
  %68 = icmp eq i16 %67, 33
  br i1 %68, label %69, label %83

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %0, i64 28
  %71 = load i32, ptr %70, align 4, !tbaa !12
  switch i32 %71, label %72 [
    i32 2302, label %.thread
    i32 2202, label %.thread
  ]

72:                                               ; preds = %69
  br label %.thread

73:                                               ; preds = %62
  %74 = icmp eq i8 %63, 2
  br i1 %74, label %75, label %.thread188

75:                                               ; preds = %73
  %76 = getelementptr inbounds i8, ptr %1, i64 29
  %77 = load i16, ptr %76, align 1, !tbaa !11
  %78 = icmp eq i16 %77, 26
  br i1 %78, label %79, label %.thread188

79:                                               ; preds = %75
  %80 = getelementptr inbounds i8, ptr %0, i64 28
  %81 = load i32, ptr %80, align 4, !tbaa !12
  switch i32 %81, label %82 [
    i32 2302, label %.thread188
    i32 2202, label %.thread188
  ]

82:                                               ; preds = %79
  br label %.thread188

83:                                               ; preds = %65
  %84 = and i16 %67, -2
  %switch = icmp eq i16 %84, 64
  br i1 %switch, label %85, label %.thread

85:                                               ; preds = %83
  %86 = getelementptr inbounds i8, ptr %0, i64 28
  %87 = load i32, ptr %86, align 4, !tbaa !12
  switch i32 %87, label %88 [
    i32 2302, label %.thread
    i32 2202, label %.thread
  ]

88:                                               ; preds = %85
  br label %.thread

.thread:                                          ; preds = %69, %69, %72, %83, %85, %85, %88
  %.3 = phi i32 [ 0, %88 ], [ %.0, %85 ], [ %.0, %83 ], [ %.0, %85 ], [ 0, %72 ], [ %.0, %69 ], [ %.0, %69 ]
  %89 = or i1 %13, %14
  %90 = xor i1 %89, true
  %or.cond7 = select i1 %90, i1 %24, i1 false
  %91 = select i1 %or.cond7, i1 true, i1 %22
  %.5 = select i1 %91, i32 0, i32 %.3
  br i1 %26, label %92, label %95

.thread188:                                       ; preds = %73, %75, %82, %79, %79
  %.2.ph = phi i32 [ %.0, %79 ], [ %.0, %73 ], [ %.0, %75 ], [ %.0, %79 ], [ 0, %82 ]
  %spec.select172190 = select i1 %22, i32 0, i32 %.2.ph
  br i1 %26, label %.thread195, label %95

92:                                               ; preds = %.thread
  %.off176 = add i16 %67, -51
  %switch177 = icmp ult i16 %.off176, 2
  br i1 %switch177, label %.thread195, label %.thread209

.thread209:                                       ; preds = %92
  %93 = icmp eq i16 %67, 29
  %spec.select223 = select i1 %93, i32 %.5, i32 0
  %94 = icmp eq i16 %67, 29
  br i1 %94, label %95, label %.thread195

.thread195:                                       ; preds = %92, %.thread188, %.thread209
  br label %95

95:                                               ; preds = %.thread, %.thread188, %.thread195, %.thread209
  %.7 = phi i32 [ %spec.select223, %.thread209 ], [ 0, %.thread195 ], [ %.5, %.thread ], [ %spec.select172190, %.thread188 ]
  br i1 %28, label %96, label %104

96:                                               ; preds = %95
  %97 = getelementptr inbounds i8, ptr %0, i64 28
  %98 = load i32, ptr %97, align 4, !tbaa !12
  switch i32 %98, label %99 [
    i32 2302, label %104
    i32 2202, label %104
  ]

99:                                               ; preds = %96
  br i1 %64, label %100, label %.thread221

100:                                              ; preds = %99
  %101 = getelementptr inbounds i8, ptr %1, i64 29
  %102 = load i16, ptr %101, align 1, !tbaa !11
  %.off178 = add i16 %102, -51
  %switch179 = icmp ult i16 %.off178, 2
  br i1 %switch179, label %.thread212, label %103

103:                                              ; preds = %100
  switch i16 %102, label %.thread219 [
    i16 28, label %.thread212
    i16 29, label %.thread212
    i16 30, label %.thread212
    i16 54, label %.thread212
    i16 39, label %.thread212
    i16 40, label %.thread212
    i16 41, label %.thread212
    i16 58, label %.thread212
    i16 59, label %.thread212
    i16 60, label %.thread212
  ]

.thread219:                                       ; preds = %103
  br label %.thread212

104:                                              ; preds = %96, %96, %95
  br i1 %64, label %..thread212_crit_edge, label %.thread221

..thread212_crit_edge:                            ; preds = %104
  %.phi.trans.insert = getelementptr inbounds i8, ptr %1, i64 29
  %.pre = load i16, ptr %.phi.trans.insert, align 1, !tbaa !11
  br label %.thread212

.thread212:                                       ; preds = %..thread212_crit_edge, %.thread219, %103, %103, %103, %103, %103, %103, %103, %103, %103, %103, %100
  %105 = phi i16 [ %.pre, %..thread212_crit_edge ], [ %102, %100 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %103 ], [ %102, %.thread219 ]
  %.8214 = phi i32 [ %.7, %..thread212_crit_edge ], [ %.7, %100 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ %.7, %103 ], [ 0, %.thread219 ]
  %106 = zext i16 %105 to i32
  %107 = tail call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %106) #2
  %108 = icmp sgt i32 %107, 0
  %or.cond9 = select i1 %108, i1 %24, i1 false
  %spec.select173 = select i1 %or.cond9, i32 0, i32 %.8214
  %.pre224 = load i8, ptr %3, align 1, !tbaa !5
  br label %.thread221

.thread221:                                       ; preds = %99, %.thread212, %104
  %109 = phi i8 [ %63, %104 ], [ %.pre224, %.thread212 ], [ %63, %99 ]
  %.9 = phi i32 [ %.7, %104 ], [ %spec.select173, %.thread212 ], [ 0, %99 ]
  %or.cond11 = select i1 %24, i1 %30, i1 false
  %spec.select174 = select i1 %or.cond11, i32 0, i32 %.9
  %110 = icmp eq i8 %109, 2
  br i1 %110, label %111, label %123

111:                                              ; preds = %.thread221
  %112 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef nonnull %1) #2
  %.not159 = icmp eq i32 %112, 0
  br i1 %.not159, label %thread-pre-split, label %113

113:                                              ; preds = %111
  %114 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %.not160 = icmp eq i32 %114, 1
  br i1 %.not160, label %115, label %122

115:                                              ; preds = %113
  %116 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #2
  %.not161 = icmp eq i32 %116, 14
  br i1 %.not161, label %117, label %122

117:                                              ; preds = %115
  %118 = getelementptr inbounds i8, ptr %1, i64 27
  %119 = load i16, ptr %118, align 1, !tbaa !15
  %120 = and i16 %119, 128
  %121 = icmp eq i16 %120, 0
  br i1 %121, label %122, label %thread-pre-split

122:                                              ; preds = %117, %115, %113
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %111, %117, %122
  %.11.ph = phi i32 [ %spec.select174, %111 ], [ %spec.select174, %117 ], [ 0, %122 ]
  %.pr = load i8, ptr %3, align 1, !tbaa !5
  br label %123

123:                                              ; preds = %thread-pre-split, %.thread221
  %124 = phi i8 [ %.pr, %thread-pre-split ], [ %109, %.thread221 ]
  %.11 = phi i32 [ %.11.ph, %thread-pre-split ], [ %spec.select174, %.thread221 ]
  %125 = icmp eq i8 %124, 3
  br i1 %125, label %126, label %137

126:                                              ; preds = %123
  %127 = getelementptr inbounds i8, ptr %1, i64 29
  %128 = load i16, ptr %127, align 1, !tbaa !11
  %.not162 = icmp eq i16 %128, 3
  br i1 %.not162, label %129, label %.thread217

129:                                              ; preds = %126
  %130 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 4) #2
  %.not163 = icmp eq i32 %130, 1
  %131 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 2) #2
  %.not164 = icmp eq i32 %131, 14
  %132 = select i1 %.not164, i1 %.not163, i1 false
  %.13 = select i1 %132, i32 %.11, i32 0
  %133 = getelementptr inbounds i8, ptr %1, i64 27
  %134 = load i16, ptr %133, align 1, !tbaa !15
  %135 = and i16 %134, 1024
  %136 = icmp eq i16 %135, 0
  %spec.select180 = select i1 %136, i32 0, i32 %.13
  %.pre225 = load i8, ptr %3, align 1, !tbaa !5
  br label %137

137:                                              ; preds = %129, %123
  %138 = phi i8 [ %124, %123 ], [ %.pre225, %129 ]
  %.14 = phi i32 [ %.11, %123 ], [ %spec.select180, %129 ]
  %139 = icmp eq i8 %138, 1
  br i1 %139, label %140, label %.thread217

140:                                              ; preds = %137
  %141 = getelementptr inbounds i8, ptr %1, i64 29
  %142 = load i16, ptr %141, align 1, !tbaa !11
  %143 = icmp eq i16 %142, 42
  br i1 %143, label %144, label %152

144:                                              ; preds = %140
  %145 = getelementptr inbounds i8, ptr %0, i64 28
  %146 = load i32, ptr %145, align 4, !tbaa !12
  %.not165 = icmp eq i32 %146, 2302
  br i1 %.not165, label %147, label %151

147:                                              ; preds = %144
  %148 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #2
  %.not166 = icmp eq i32 %148, 12
  br i1 %.not166, label %149, label %151

149:                                              ; preds = %147
  %150 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 0) #2
  %.not167 = icmp eq i32 %150, 1
  br i1 %.not167, label %152, label %151

151:                                              ; preds = %149, %147, %144
  br label %152

152:                                              ; preds = %151, %149, %140
  %.15.ph = phi i32 [ %.14, %140 ], [ %.14, %149 ], [ 0, %151 ]
  %.pr216 = load i8, ptr %3, align 1, !tbaa !5
  %153 = icmp eq i8 %.pr216, 1
  br i1 %153, label %154, label %.thread217

154:                                              ; preds = %152
  %155 = load i16, ptr %141, align 1, !tbaa !11
  %156 = icmp eq i16 %155, 43
  br i1 %156, label %157, label %.thread217

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %0, i64 28
  %159 = load i32, ptr %158, align 4, !tbaa !12
  %.not168 = icmp eq i32 %159, 2302
  br i1 %.not168, label %160, label %164

160:                                              ; preds = %157
  %161 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 0) #2
  %.not169 = icmp eq i32 %161, 12
  br i1 %.not169, label %162, label %164

162:                                              ; preds = %160
  %163 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %1, i32 noundef 3) #2
  %.not170 = icmp eq i32 %163, 1
  br i1 %.not170, label %.thread217, label %164

164:                                              ; preds = %162, %160, %157
  br label %.thread217

.thread217:                                       ; preds = %126, %137, %164, %162, %154, %152
  %.16 = phi i32 [ 0, %164 ], [ %.15.ph, %162 ], [ %.15.ph, %154 ], [ %.15.ph, %152 ], [ %.14, %137 ], [ 0, %126 ]
  ret i32 %.16
}

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_meqn_is_unary_opcode_reduce_cols_idx_kernel(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: BDCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass