; LLVM IR from libxsmm/libxsmm :: src (generator_mateltwise_unary_binary_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_mateltwise_kernel_config_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>

@.str = external hidden unnamed_addr constant [97 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [606 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens = external hidden unnamed_addr constant [117 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [611 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [606 x i8], align 1

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_configure_aarch64_vlens(ptr noundef %0, ptr noundef %1) #2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca i8, align 1
  %7 = alloca i32, align 4
  %8 = alloca i8, align 1
  %9 = alloca i32, align 4
  %10 = 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) #4
  %11 = load ptr, ptr %4, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %11, i32 0, i32 0
  %13 = load i32, ptr %12, align 4, !tbaa !9
  %14 = call i32 @libxsmm_cpuid_vlen32(i32 noundef %13)
  %15 = mul nsw i32 4, %14
  store i32 %15, ptr %5, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %6) #4
  %16 = load ptr, ptr %3, align 8, !tbaa !5
  %17 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %16, i32 noundef 4)
  %18 = icmp eq i32 14, %17
  br i1 %18, label %19, label %58

19:                                               ; preds = %2
  %20 = load ptr, ptr %3, align 8, !tbaa !5
  %21 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %20, i32 noundef 0)
  %22 = trunc i32 %21 to i8
  %23 = zext i8 %22 to i32
  %24 = icmp eq i32 0, %23
  br i1 %24, label %31, label %25

25:                                               ; preds = %19
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %26, i32 noundef 0)
  %28 = trunc i32 %27 to i8
  %29 = zext i8 %28 to i32
  %30 = icmp slt i32 0, %29
  br i1 %30, label %31, label %52

31:                                               ; preds = %25, %19
  %32 = load ptr, ptr %3, align 8, !tbaa !5
  %33 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %32, i32 noundef 0)
  %34 = sext i32 %33 to i64
  %35 = mul i64 1, %34
  %36 = icmp ult i64 %35, 255
  br i1 %36, label %37, label %42

37:                                               ; preds = %31
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %38, i32 noundef 0)
  %40 = sext i32 %39 to i64
  %41 = mul i64 1, %40
  br label %43

42:                                               ; preds = %31
  br label %43

43:                                               ; preds = %42, %37
  %44 = phi i64 [ %41, %37 ], [ 255, %42 ]
  %45 = icmp ule i64 %44, 255
  br i1 %45, label %46, label %52

46:                                               ; preds = %43
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %47, i32 noundef 0)
  %49 = sitofp i32 %48 to double
  %50 = fcmp ole double 0.000000e+00, %49
  br i1 %50, label %51, label %52

51:                                               ; preds = %46
  br label %53

52:                                               ; preds = %46, %43, %25
  call void @__assert_fail(ptr noundef @.str.1, ptr noundef @.str, i32 noundef 288, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #5
  unreachable

53:                                               ; preds = %51
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %54, i32 noundef 0)
  %56 = trunc i32 %55 to i8
  %57 = zext i8 %56 to i32
  br label %97

58:                                               ; preds = %2
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %59, i32 noundef 4)
  %61 = trunc i32 %60 to i8
  %62 = zext i8 %61 to i32
  %63 = icmp eq i32 0, %62
  br i1 %63, label %70, label %64

64:                                               ; preds = %58
  %65 = load ptr, ptr %3, align 8, !tbaa !5
  %66 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %65, i32 noundef 4)
  %67 = trunc i32 %66 to i8
  %68 = zext i8 %67 to i32
  %69 = icmp slt i32 0, %68
  br i1 %69, label %70, label %91

70:                                               ; preds = %64, %58
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %71, i32 noundef 4)
  %73 = sext i32 %72 to i64
  %74 = mul i64 1, %73
  %75 = icmp ult i64 %74, 255
  br i1 %75, label %76, label %81

76:                                               ; preds = %70
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  %78 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %77, i32 noundef 4)
  %79 = sext i32 %78 to i64
  %80 = mul i64 1, %79
  br label %82

81:                                               ; preds = %70
  br label %82

82:                                               ; preds = %81, %76
  %83 = phi i64 [ %80, %76 ], [ 255, %81 ]
  %84 = icmp ule i64 %83, 255
  br i1 %84, label %85, label %91

85:                                               ; preds = %82
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %86, i32 noundef 4)
  %88 = sitofp i32 %87 to double
  %89 = fcmp ole double 0.000000e+00, %88
  br i1 %89, label %90, label %91

90:                                               ; preds = %85
  br label %92

91:                                               ; preds = %85, %82, %64
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str, i32 noundef 288, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #5
  unreachable

92:                                               ; preds = %90
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %93, i32 noundef 4)
  %95 = trunc i32 %94 to i8
  %96 = zext i8 %95 to i32
  br label %97

97:                                               ; preds = %92, %53
  %98 = phi i32 [ %57, %53 ], [ %96, %92 ]
  %99 = trunc i32 %98 to i8
  store i8 %99, ptr %6, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  %100 = load i8, ptr %6, align 1, !tbaa !13
  %101 = zext i8 %100 to i32
  %102 = icmp eq i32 0, %101
  br i1 %102, label %103, label %104

103:                                              ; preds = %97
  br label %197

104:                                              ; preds = %97
  %105 = load i8, ptr %6, align 1, !tbaa !13
  %106 = zext i8 %105 to i32
  %107 = icmp eq i32 1, %106
  br i1 %107, label %108, label %109

108:                                              ; preds = %104
  br label %195

109:                                              ; preds = %104
  %110 = load i8, ptr %6, align 1, !tbaa !13
  %111 = zext i8 %110 to i32
  %112 = icmp eq i32 2, %111
  br i1 %112, label %113, label %114

113:                                              ; preds = %109
  br label %193

114:                                              ; preds = %109
  %115 = load i8, ptr %6, align 1, !tbaa !13
  %116 = zext i8 %115 to i32
  %117 = icmp eq i32 3, %116
  br i1 %117, label %118, label %119

118:                                              ; preds = %114
  br label %191

119:                                              ; preds = %114
  %120 = load i8, ptr %6, align 1, !tbaa !13
  %121 = zext i8 %120 to i32
  %122 = icmp eq i32 4, %121
  br i1 %122, label %123, label %124

123:                                              ; preds = %119
  br label %189

124:                                              ; preds = %119
  %125 = load i8, ptr %6, align 1, !tbaa !13
  %126 = zext i8 %125 to i32
  %127 = icmp eq i32 5, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %124
  br label %187

129:                                              ; preds = %124
  %130 = load i8, ptr %6, align 1, !tbaa !13
  %131 = zext i8 %130 to i32
  %132 = icmp eq i32 6, %131
  br i1 %132, label %133, label %134

133:                                              ; preds = %129
  br label %185

134:                                              ; preds = %129
  %135 = load i8, ptr %6, align 1, !tbaa !13
  %136 = zext i8 %135 to i32
  %137 = icmp eq i32 7, %136
  br i1 %137, label %138, label %139

138:                                              ; preds = %134
  br label %183

139:                                              ; preds = %134
  %140 = load i8, ptr %6, align 1, !tbaa !13
  %141 = zext i8 %140 to i32
  %142 = icmp eq i32 8, %141
  br i1 %142, label %143, label %144

143:                                              ; preds = %139
  br label %181

144:                                              ; preds = %139
  %145 = load i8, ptr %6, align 1, !tbaa !13
  %146 = zext i8 %145 to i32
  %147 = icmp eq i32 9, %146
  br i1 %147, label %148, label %149

148:                                              ; preds = %144
  br label %179

149:                                              ; preds = %144
  %150 = load i8, ptr %6, align 1, !tbaa !13
  %151 = zext i8 %150 to i32
  %152 = icmp eq i32 10, %151
  br i1 %152, label %153, label %154

153:                                              ; preds = %149
  br label %177

154:                                              ; preds = %149
  %155 = load i8, ptr %6, align 1, !tbaa !13
  %156 = zext i8 %155 to i32
  %157 = icmp eq i32 11, %156
  br i1 %157, label %158, label %159

158:                                              ; preds = %154
  br label %175

159:                                              ; preds = %154
  %160 = load i8, ptr %6, align 1, !tbaa !13
  %161 = zext i8 %160 to i32
  %162 = icmp eq i32 12, %161
  br i1 %162, label %163, label %164

163:                                              ; preds = %159
  br label %173

164:                                              ; preds = %159
  %165 = load i8, ptr %6, align 1, !tbaa !13
  %166 = zext i8 %165 to i32
  %167 = icmp eq i32 13, %166
  br i1 %167, label %168, label %169

168:                                              ; preds = %164
  br label %171

169:                                              ; preds = %164
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str, i32 noundef 289, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #5
  unreachable

170:                                              ; No predecessors!
  br label %171

171:                                              ; preds = %170, %168
  %172 = phi i32 [ 1, %168 ], [ 0, %170 ]
  br label %173

173:                                              ; preds = %171, %163
  %174 = phi i32 [ 1, %163 ], [ %172, %171 ]
  br label %175

175:                                              ; preds = %173, %158
  %176 = phi i32 [ 2, %158 ], [ %174, %173 ]
  br label %177

177:                                              ; preds = %175, %153
  %178 = phi i32 [ 2, %153 ], [ %176, %175 ]
  br label %179

179:                                              ; preds = %177, %148
  %180 = phi i32 [ 4, %148 ], [ %178, %177 ]
  br label %181

181:                                              ; preds = %179, %143
  %182 = phi i32 [ 4, %143 ], [ %180, %179 ]
  br label %183

183:                                              ; preds = %181, %138
  %184 = phi i32 [ 8, %138 ], [ %182, %181 ]
  br label %185

185:                                              ; preds = %183, %133
  %186 = phi i32 [ 8, %133 ], [ %184, %183 ]
  br label %187

187:                                              ; preds = %185, %128
  %188 = phi i32 [ 1, %128 ], [ %186, %185 ]
  br label %189

189:                                              ; preds = %187, %123
  %190 = phi i32 [ 1, %123 ], [ %188, %187 ]
  br label %191

191:                                              ; preds = %189, %118
  %192 = phi i32 [ 2, %118 ], [ %190, %189 ]
  br label %193

193:                                              ; preds = %191, %113
  %194 = phi i32 [ 2, %113 ], [ %192, %191 ]
  br label %195

195:                                              ; preds = %193, %108
  %196 = phi i32 [ 4, %108 ], [ %194, %193 ]
  br label %197

197:                                              ; preds = %195, %103
  %198 = phi i32 [ 8, %103 ], [ %196, %195 ]
  store i32 %198, ptr %7, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #4
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %199, i32 noundef 3)
  %201 = trunc i32 %200 to i8
  %202 = zext i8 %201 to i32
  %203 = icmp eq i32 0, %202
  br i1 %203, label %210, label %204

204:                                              ; preds = %197
  %205 = load ptr, ptr %3, align 8, !tbaa !5
  %206 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %205, i32 noundef 3)
  %207 = trunc i32 %206 to i8
  %208 = zext i8 %207 to i32
  %209 = icmp slt i32 0, %208
  br i1 %209, label %210, label %231

210:                                              ; preds = %204, %197
  %211 = load ptr, ptr %3, align 8, !tbaa !5
  %212 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %211, i32 noundef 3)
  %213 = sext i32 %212 to i64
  %214 = mul i64 1, %213
  %215 = icmp ult i64 %214, 255
  br i1 %215, label %216, label %221

216:                                              ; preds = %210
  %217 = load ptr, ptr %3, align 8, !tbaa !5
  %218 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %217, i32 noundef 3)
  %219 = sext i32 %218 to i64
  %220 = mul i64 1, %219
  br label %222

221:                                              ; preds = %210
  br label %222

222:                                              ; preds = %221, %216
  %223 = phi i64 [ %220, %216 ], [ 255, %221 ]
  %224 = icmp ule i64 %223, 255
  br i1 %224, label %225, label %231

225:                                              ; preds = %222
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  %227 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %226, i32 noundef 3)
  %228 = sitofp i32 %227 to double
  %229 = fcmp ole double 0.000000e+00, %228
  br i1 %229, label %230, label %231

230:                                              ; preds = %225
  br label %232

231:                                              ; preds = %225, %222, %204
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str, i32 noundef 291, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #5
  unreachable

232:                                              ; preds = %230
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  %234 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %233, i32 noundef 3)
  %235 = trunc i32 %234 to i8
  store i8 %235, ptr %8, align 1, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  %236 = load ptr, ptr %3, align 8, !tbaa !5
  %237 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %236)
  %238 = icmp ugt i32 %237, 0
  br i1 %238, label %239, label %240

239:                                              ; preds = %232
  br label %340

240:                                              ; preds = %232
  %241 = load i8, ptr %8, align 1, !tbaa !13
  %242 = zext i8 %241 to i32
  %243 = icmp eq i32 0, %242
  br i1 %243, label %244, label %245

244:                                              ; preds = %240
  br label %338

245:                                              ; preds = %240
  %246 = load i8, ptr %8, align 1, !tbaa !13
  %247 = zext i8 %246 to i32
  %248 = icmp eq i32 1, %247
  br i1 %248, label %249, label %250

249:                                              ; preds = %245
  br label %336

250:                                              ; preds = %245
  %251 = load i8, ptr %8, align 1, !tbaa !13
  %252 = zext i8 %251 to i32
  %253 = icmp eq i32 2, %252
  br i1 %253, label %254, label %255

254:                                              ; preds = %250
  br label %334

255:                                              ; preds = %250
  %256 = load i8, ptr %8, align 1, !tbaa !13
  %257 = zext i8 %256 to i32
  %258 = icmp eq i32 3, %257
  br i1 %258, label %259, label %260

259:                                              ; preds = %255
  br label %332

260:                                              ; preds = %255
  %261 = load i8, ptr %8, align 1, !tbaa !13
  %262 = zext i8 %261 to i32
  %263 = icmp eq i32 4, %262
  br i1 %263, label %264, label %265

264:                                              ; preds = %260
  br label %330

265:                                              ; preds = %260
  %266 = load i8, ptr %8, align 1, !tbaa !13
  %267 = zext i8 %266 to i32
  %268 = icmp eq i32 5, %267
  br i1 %268, label %269, label %270

269:                                              ; preds = %265
  br label %328

270:                                              ; preds = %265
  %271 = load i8, ptr %8, align 1, !tbaa !13
  %272 = zext i8 %271 to i32
  %273 = icmp eq i32 6, %272
  br i1 %273, label %274, label %275

274:                                              ; preds = %270
  br label %326

275:                                              ; preds = %270
  %276 = load i8, ptr %8, align 1, !tbaa !13
  %277 = zext i8 %276 to i32
  %278 = icmp eq i32 7, %277
  br i1 %278, label %279, label %280

279:                                              ; preds = %275
  br label %324

280:                                              ; preds = %275
  %281 = load i8, ptr %8, align 1, !tbaa !13
  %282 = zext i8 %281 to i32
  %283 = icmp eq i32 8, %282
  br i1 %283, label %284, label %285

284:                                              ; preds = %280
  br label %322

285:                                              ; preds = %280
  %286 = load i8, ptr %8, align 1, !tbaa !13
  %287 = zext i8 %286 to i32
  %288 = icmp eq i32 9, %287
  br i1 %288, label %289, label %290

289:                                              ; preds = %285
  br label %320

290:                                              ; preds = %285
  %291 = load i8, ptr %8, align 1, !tbaa !13
  %292 = zext i8 %291 to i32
  %293 = icmp eq i32 10, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %290
  br label %318

295:                                              ; preds = %290
  %296 = load i8, ptr %8, align 1, !tbaa !13
  %297 = zext i8 %296 to i32
  %298 = icmp eq i32 11, %297
  br i1 %298, label %299, label %300

299:                                              ; preds = %295
  br label %316

300:                                              ; preds = %295
  %301 = load i8, ptr %8, align 1, !tbaa !13
  %302 = zext i8 %301 to i32
  %303 = icmp eq i32 12, %302
  br i1 %303, label %304, label %305

304:                                              ; preds = %300
  br label %314

305:                                              ; preds = %300
  %306 = load i8, ptr %8, align 1, !tbaa !13
  %307 = zext i8 %306 to i32
  %308 = icmp eq i32 13, %307
  br i1 %308, label %309, label %310

309:                                              ; preds = %305
  br label %312

310:                                              ; preds = %305
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str, i32 noundef 292, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #5
  unreachable

311:                                              ; No predecessors!
  br label %312

312:                                              ; preds = %311, %309
  %313 = phi i32 [ 1, %309 ], [ 0, %311 ]
  br label %314

314:                                              ; preds = %312, %304
  %315 = phi i32 [ 1, %304 ], [ %313, %312 ]
  br label %316

316:                                              ; preds = %314, %299
  %317 = phi i32 [ 2, %299 ], [ %315, %314 ]
  br label %318

318:                                              ; preds = %316, %294
  %319 = phi i32 [ 2, %294 ], [ %317, %316 ]
  br label %320

320:                                              ; preds = %318, %289
  %321 = phi i32 [ 4, %289 ], [ %319, %318 ]
  br label %322

322:                                              ; preds = %320, %284
  %323 = phi i32 [ 4, %284 ], [ %321, %320 ]
  br label %324

324:                                              ; preds = %322, %279
  %325 = phi i32 [ 8, %279 ], [ %323, %322 ]
  br label %326

326:                                              ; preds = %324, %274
  %327 = phi i32 [ 8, %274 ], [ %325, %324 ]
  br label %328

328:                                              ; preds = %326, %269
  %329 = phi i32 [ 1, %269 ], [ %327, %326 ]
  br label %330

330:                                              ; preds = %328, %264
  %331 = phi i32 [ 1, %264 ], [ %329, %328 ]
  br label %332

332:                                              ; preds = %330, %259
  %333 = phi i32 [ 2, %259 ], [ %331, %330 ]
  br label %334

334:                                              ; preds = %332, %254
  %335 = phi i32 [ 2, %254 ], [ %333, %332 ]
  br label %336

336:                                              ; preds = %334, %249
  %337 = phi i32 [ 4, %249 ], [ %335, %334 ]
  br label %338

338:                                              ; preds = %336, %244
  %339 = phi i32 [ 8, %244 ], [ %337, %336 ]
  br label %340

340:                                              ; preds = %338, %239
  %341 = phi i32 [ 1, %239 ], [ %339, %338 ]
  store i32 %341, ptr %9, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  %342 = load ptr, ptr %3, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %342, i32 0, i32 11
  %344 = load i8, ptr %343, align 1, !tbaa !14
  %345 = zext i8 %344 to i32
  %346 = icmp eq i32 %345, 2
  br i1 %346, label %347, label %353

347:                                              ; preds = %340
  %348 = load ptr, ptr %3, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %348, i32 0, i32 10
  %350 = load i16, ptr %349, align 1, !tbaa !17
  %351 = zext i16 %350 to i32
  %352 = icmp eq i32 %351, 26
  br label %353

353:                                              ; preds = %347, %340
  %354 = phi i1 [ false, %340 ], [ %352, %347 ]
  %355 = zext i1 %354 to i64
  %356 = select i1 %354, i32 1, i32 0
  store i32 %356, ptr %10, align 4, !tbaa !12
  %357 = load i32, ptr %7, align 4, !tbaa !12
  %358 = icmp ugt i32 %357, 0
  br i1 %358, label %359, label %365

359:                                              ; preds = %353
  %360 = load i32, ptr %5, align 4, !tbaa !12
  %361 = load i32, ptr %7, align 4, !tbaa !12
  %362 = udiv i32 %360, %361
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %363, i32 0, i32 124
  store i32 %362, ptr %364, align 4, !tbaa !18
  br label %365

365:                                              ; preds = %359, %353
  %366 = load i32, ptr %9, align 4, !tbaa !12
  %367 = icmp ugt i32 %366, 0
  br i1 %367, label %368, label %374

368:                                              ; preds = %365
  %369 = load i32, ptr %5, align 4, !tbaa !12
  %370 = load i32, ptr %9, align 4, !tbaa !12
  %371 = udiv i32 %369, %370
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %372, i32 0, i32 123
  store i32 %371, ptr %373, align 4, !tbaa !19
  br label %374

374:                                              ; preds = %368, %365
  %375 = load i32, ptr %10, align 4, !tbaa !12
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %377, label %383

377:                                              ; preds = %374
  %378 = load i32, ptr %5, align 4, !tbaa !12
  %379 = load i32, ptr %9, align 4, !tbaa !12
  %380 = udiv i32 %378, %379
  %381 = load ptr, ptr %4, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %381, i32 0, i32 124
  store i32 %380, ptr %382, align 4, !tbaa !18
  br label %383

383:                                              ; preds = %377, %374
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %384, i32 0, i32 124
  %386 = load i32, ptr %385, align 4, !tbaa !18
  %387 = load ptr, ptr %4, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %387, i32 0, i32 120
  store i32 %386, ptr %388, align 4, !tbaa !20
  %389 = load ptr, ptr %3, align 8, !tbaa !5
  %390 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %389)
  %391 = icmp ugt i32 %390, 0
  br i1 %391, label %392, label %398

392:                                              ; preds = %383
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %393, i32 0, i32 124
  %395 = load i32, ptr %394, align 4, !tbaa !18
  %396 = load ptr, ptr %4, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %396, i32 0, i32 123
  store i32 %395, ptr %397, align 4, !tbaa !19
  br label %398

398:                                              ; preds = %392, %383
  %399 = load ptr, ptr %3, align 8, !tbaa !5
  %400 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %399, i32 noundef 3)
  %401 = icmp eq i32 2, %400
  br i1 %401, label %418, label %402

402:                                              ; preds = %398
  %403 = load ptr, ptr %3, align 8, !tbaa !5
  %404 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %403, i32 noundef 3)
  %405 = icmp eq i32 10, %404
  br i1 %405, label %418, label %406

406:                                              ; preds = %402
  %407 = load ptr, ptr %3, align 8, !tbaa !5
  %408 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %407, i32 noundef 3)
  %409 = icmp eq i32 12, %408
  br i1 %409, label %418, label %410

410:                                              ; preds = %406
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %411, i32 noundef 3)
  %413 = icmp eq i32 11, %412
  br i1 %413, label %418, label %414

414:                                              ; preds = %410
  %415 = load ptr, ptr %3, align 8, !tbaa !5
  %416 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %415, i32 noundef 3)
  %417 = icmp eq i32 3, %416
  br i1 %417, label %418, label %437

418:                                              ; preds = %414, %410, %406, %402, %398
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %419, i32 noundef 4)
  %421 = icmp eq i32 1, %420
  br i1 %421, label %430, label %422

422:                                              ; preds = %418
  %423 = load ptr, ptr %3, align 8, !tbaa !5
  %424 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %423, i32 noundef 4)
  %425 = icmp eq i32 14, %424
  br i1 %425, label %430, label %426

426:                                              ; preds = %422
  %427 = load ptr, ptr %3, align 8, !tbaa !5
  %428 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %427, i32 noundef 0)
  %429 = icmp eq i32 1, %428
  br i1 %429, label %430, label %436

430:                                              ; preds = %426, %422, %418
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %431, i32 0, i32 124
  %433 = load i32, ptr %432, align 4, !tbaa !18
  %434 = load ptr, ptr %4, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %434, i32 0, i32 123
  store i32 %433, ptr %435, align 4, !tbaa !19
  br label %436

436:                                              ; preds = %430, %426
  br label %437

437:                                              ; preds = %436, %414
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  ret void
}

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) #1

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }
attributes #5 = { noreturn 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, !11, i64 0}
!10 = !{!"libxsmm_mateltwise_kernel_config_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !11, i64 340, !11, i64 344, !11, i64 348, !11, i64 352, !11, i64 356, !11, i64 360, !11, i64 364, !11, i64 368, !11, i64 372, !11, i64 376, !11, i64 380, !11, i64 384, !11, i64 388, !11, i64 392, !11, i64 396, !11, i64 400, !11, i64 404, !11, i64 408, !11, i64 412, !11, i64 416, !11, i64 420, !11, i64 424, !11, i64 428, !11, i64 432, !11, i64 436, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !11, i64 460, !11, i64 464, !11, i64 468, !11, i64 472, !11, i64 476, !11, i64 480, !11, i64 484, !11, i64 488, !11, i64 492, !11, i64 496, !11, i64 500, !11, i64 504, !11, i64 508, !7, i64 512}
!11 = !{!"int", !7, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !7, i64 31}
!15 = !{!"libxsmm_meltw_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !16, i64 27, !16, i64 29, !7, i64 31}
!16 = !{!"short", !7, i64 0}
!17 = !{!15, !16, i64 29}
!18 = !{!10, !11, i64 496}
!19 = !{!10, !11, i64 492}
!20 = !{!10, !11, i64 480}


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

@.str = external hidden unnamed_addr constant [97 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [606 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens = external hidden unnamed_addr constant [117 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [611 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [606 x i8], align 1
@switch.table.libxsmm_generator_configure_aarch64_vlens.1 = private unnamed_addr constant [11 x i32] [i32 2, i32 2, i32 1, i32 2, i32 8, i32 2, i32 4, i32 2, i32 2, i32 2, i32 1], align 4

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_configure_aarch64_vlens(ptr noundef %0, ptr nocapture noundef %1) local_unnamed_addr #1 {
  %3 = load i32, ptr %1, align 4, !tbaa !5
  %4 = tail call i32 @libxsmm_cpuid_vlen32(i32 noundef %3) #3
  %5 = shl nsw i32 %4, 2
  %6 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %7 = icmp eq i32 %6, 14
  br i1 %7, label %8, label %24

8:                                                ; preds = %2
  %9 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 0) #3
  %10 = and i32 %9, 255
  %11 = icmp eq i32 %10, 0
  br i1 %11, label %15, label %12

12:                                               ; preds = %8
  %13 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 0) #3
  %14 = and i32 %13, 255
  %.not113 = icmp eq i32 %14, 0
  br i1 %.not113, label %23, label %15

15:                                               ; preds = %12, %8
  %16 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 0) #3
  %17 = icmp ult i32 %16, 255
  br i1 %17, label %18, label %.thread

18:                                               ; preds = %15
  %19 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 0) #3
  %20 = icmp ult i32 %19, 256
  br i1 %20, label %.thread, label %23

.thread:                                          ; preds = %15, %18
  %21 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 0) #3
  %22 = icmp sgt i32 %21, -1
  br i1 %22, label %40, label %23

23:                                               ; preds = %.thread, %18, %12
  tail call void @__assert_fail(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str, i32 noundef 288, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #4
  unreachable

24:                                               ; preds = %2
  %25 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %26 = and i32 %25, 255
  %27 = icmp eq i32 %26, 0
  br i1 %27, label %31, label %28

28:                                               ; preds = %24
  %29 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %30 = and i32 %29, 255
  %.not = icmp eq i32 %30, 0
  br i1 %.not, label %39, label %31

31:                                               ; preds = %28, %24
  %32 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %33 = icmp ult i32 %32, 255
  br i1 %33, label %34, label %.thread118

34:                                               ; preds = %31
  %35 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %36 = icmp ult i32 %35, 256
  br i1 %36, label %.thread118, label %39

.thread118:                                       ; preds = %31, %34
  %37 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 4) #3
  %38 = icmp sgt i32 %37, -1
  br i1 %38, label %40, label %39

39:                                               ; preds = %.thread118, %34, %28
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str, i32 noundef 288, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #4
  unreachable

40:                                               ; preds = %.thread118, %.thread
  %.sink = phi i32 [ 0, %.thread ], [ 4, %.thread118 ]
  %41 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef %.sink) #3
  %trunc = trunc i32 %41 to i8
  switch i8 %trunc, label %42 [
    i8 0, label %46
    i8 1, label %.fold.split
  ]

42:                                               ; preds = %40
  %trunc128 = and i8 %trunc, -2
  %switch.tableidx = add i8 %trunc128, -2
  %43 = icmp ult i8 %switch.tableidx, 11
  br i1 %43, label %switch.hole_check, label %44

44:                                               ; preds = %switch.hole_check, %42
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, i32 noundef 289, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #4
  unreachable

.fold.split:                                      ; preds = %40
  br label %46

switch.hole_check:                                ; preds = %42
  %switch.maskindex = zext nneg i8 %switch.tableidx to i16
  %switch.shifted = lshr i16 1365, %switch.maskindex
  %switch.lobit = trunc i16 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup, label %44

switch.lookup:                                    ; preds = %switch.hole_check
  %45 = zext nneg i8 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_configure_aarch64_vlens.1, i64 0, i64 %45
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %46

46:                                               ; preds = %switch.lookup, %40, %.fold.split
  %47 = phi i32 [ 8, %40 ], [ 4, %.fold.split ], [ %switch.load, %switch.lookup ]
  %48 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %49 = and i32 %48, 255
  %50 = icmp eq i32 %49, 0
  br i1 %50, label %54, label %51

51:                                               ; preds = %46
  %52 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %53 = and i32 %52, 255
  %.not114 = icmp eq i32 %53, 0
  br i1 %.not114, label %62, label %54

54:                                               ; preds = %51, %46
  %55 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %56 = icmp ult i32 %55, 255
  br i1 %56, label %57, label %.thread119

57:                                               ; preds = %54
  %58 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %59 = icmp ult i32 %58, 256
  br i1 %59, label %.thread119, label %62

.thread119:                                       ; preds = %54, %57
  %60 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %61 = icmp sgt i32 %60, -1
  br i1 %61, label %63, label %62

62:                                               ; preds = %.thread119, %57, %51
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, i32 noundef 291, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #4
  unreachable

63:                                               ; preds = %.thread119
  %64 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %65 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %0) #3
  %.not115 = icmp eq i32 %65, 0
  br i1 %.not115, label %66, label %71

66:                                               ; preds = %63
  %trunc129 = trunc i32 %64 to i8
  switch i8 %trunc129, label %67 [
    i8 0, label %71
    i8 1, label %.fold.split117
  ]

67:                                               ; preds = %66
  %trunc130 = and i8 %trunc129, -2
  %switch.tableidx132 = add i8 %trunc130, -2
  %68 = icmp ult i8 %switch.tableidx132, 11
  br i1 %68, label %switch.hole_check133, label %69

69:                                               ; preds = %switch.hole_check133, %67
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, i32 noundef 292, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_aarch64_vlens) #4
  unreachable

.fold.split117:                                   ; preds = %66
  br label %71

switch.hole_check133:                             ; preds = %67
  %switch.maskindex135 = zext nneg i8 %switch.tableidx132 to i16
  %switch.shifted136 = lshr i16 1365, %switch.maskindex135
  %switch.lobit137 = trunc i16 %switch.shifted136 to i1
  br i1 %switch.lobit137, label %switch.lookup134, label %69

switch.lookup134:                                 ; preds = %switch.hole_check133
  %70 = zext nneg i8 %switch.tableidx132 to i64
  %switch.gep138 = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_configure_aarch64_vlens.1, i64 0, i64 %70
  %switch.load139 = load i32, ptr %switch.gep138, align 4
  br label %71

71:                                               ; preds = %switch.lookup134, %66, %.fold.split117, %63
  %72 = phi i32 [ 1, %63 ], [ 8, %66 ], [ 4, %.fold.split117 ], [ %switch.load139, %switch.lookup134 ]
  %73 = getelementptr inbounds i8, ptr %0, i64 31
  %74 = load i8, ptr %73, align 1, !tbaa !10
  %75 = icmp eq i8 %74, 2
  br i1 %75, label %76, label %.critedge

76:                                               ; preds = %71
  %77 = getelementptr inbounds i8, ptr %0, i64 29
  %78 = load i16, ptr %77, align 1, !tbaa !13
  %79 = icmp eq i16 %78, 26
  %80 = udiv i32 %5, %47
  %81 = getelementptr inbounds i8, ptr %1, i64 496
  store i32 %80, ptr %81, align 4, !tbaa !14
  %82 = udiv i32 %5, %72
  %83 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %82, ptr %83, align 4, !tbaa !15
  br i1 %79, label %84, label %89

84:                                               ; preds = %76
  store i32 %82, ptr %81, align 4, !tbaa !14
  br label %89

.critedge:                                        ; preds = %71
  %85 = udiv i32 %5, %47
  %86 = getelementptr inbounds i8, ptr %1, i64 496
  store i32 %85, ptr %86, align 4, !tbaa !14
  %87 = udiv i32 %5, %72
  %88 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %87, ptr %88, align 4, !tbaa !15
  br label %89

89:                                               ; preds = %.critedge, %84, %76
  %90 = phi i32 [ %85, %.critedge ], [ %82, %84 ], [ %80, %76 ]
  %91 = getelementptr inbounds i8, ptr %1, i64 496
  %92 = getelementptr inbounds i8, ptr %1, i64 480
  store i32 %90, ptr %92, align 4, !tbaa !16
  %93 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef nonnull %0) #3
  %.not116 = icmp eq i32 %93, 0
  br i1 %.not116, label %97, label %94

94:                                               ; preds = %89
  %95 = load i32, ptr %91, align 4, !tbaa !14
  %96 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %95, ptr %96, align 4, !tbaa !15
  br label %97

97:                                               ; preds = %94, %89
  %98 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %99 = icmp eq i32 %98, 2
  br i1 %99, label %112, label %100

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

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

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

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

112:                                              ; preds = %109, %106, %103, %100, %97
  %113 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 4) #3
  %114 = icmp eq i32 %113, 1
  br i1 %114, label %121, label %115

115:                                              ; preds = %112
  %116 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 4) #3
  %117 = icmp eq i32 %116, 14
  br i1 %117, label %121, label %118

118:                                              ; preds = %115
  %119 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 0) #3
  %120 = icmp eq i32 %119, 1
  br i1 %120, label %121, label %124

121:                                              ; preds = %118, %115, %112
  %122 = load i32, ptr %91, align 4, !tbaa !14
  %123 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %122, ptr %123, align 4, !tbaa !15
  br label %124

124:                                              ; preds = %118, %121, %109
  ret void
}

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) local_unnamed_addr #0

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }
attributes #4 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"libxsmm_mateltwise_kernel_config_struct", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !7, i64 136, !7, i64 140, !7, i64 144, !7, i64 148, !7, i64 152, !7, i64 156, !7, i64 160, !7, i64 164, !7, i64 168, !7, i64 172, !7, i64 176, !7, i64 180, !7, i64 184, !7, i64 188, !7, i64 192, !7, i64 196, !7, i64 200, !7, i64 204, !7, i64 208, !7, i64 212, !7, i64 216, !7, i64 220, !7, i64 224, !7, i64 228, !7, i64 232, !7, i64 236, !7, i64 240, !7, i64 244, !7, i64 248, !7, i64 252, !7, i64 256, !7, i64 260, !7, i64 264, !7, i64 268, !7, i64 272, !7, i64 276, !7, i64 280, !7, i64 284, !7, i64 288, !7, i64 292, !7, i64 296, !7, i64 300, !7, i64 304, !7, i64 308, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !7, i64 344, !7, i64 348, !7, i64 352, !7, i64 356, !7, i64 360, !7, i64 364, !7, i64 368, !7, i64 372, !7, i64 376, !7, i64 380, !7, i64 384, !7, i64 388, !7, i64 392, !7, i64 396, !7, i64 400, !7, i64 404, !7, i64 408, !7, i64 412, !7, i64 416, !7, i64 420, !7, i64 424, !7, i64 428, !7, i64 432, !7, i64 436, !7, i64 440, !7, i64 444, !7, i64 448, !7, i64 452, !7, i64 456, !7, i64 460, !7, i64 464, !7, i64 468, !7, i64 472, !7, i64 476, !7, i64 480, !7, i64 484, !7, i64 488, !7, i64 492, !7, i64 496, !7, i64 500, !7, i64 504, !7, i64 508, !8, i64 512}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !8, i64 31}
!11 = !{!"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, !12, i64 27, !12, i64 29, !8, i64 31}
!12 = !{!"short", !8, i64 0}
!13 = !{!11, !12, i64 29}
!14 = !{!6, !7, i64 496}
!15 = !{!6, !7, i64 492}
!16 = !{!6, !7, i64 480}


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