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

; 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 [94 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [606 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens = external hidden unnamed_addr constant [114 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

; 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_rv64_vlens(ptr noundef %0, ptr noundef %1) #1 {
  %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 213, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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 213, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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 214, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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 216, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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 i8, ptr %8, align 1, !tbaa !13
  %237 = zext i8 %236 to i32
  %238 = icmp eq i32 0, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %232
  br label %333

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

244:                                              ; preds = %240
  br label %331

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

249:                                              ; preds = %245
  br label %329

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

254:                                              ; preds = %250
  br label %327

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

259:                                              ; preds = %255
  br label %325

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

264:                                              ; preds = %260
  br label %323

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

269:                                              ; preds = %265
  br label %321

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

274:                                              ; preds = %270
  br label %319

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

279:                                              ; preds = %275
  br label %317

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

284:                                              ; preds = %280
  br label %315

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

289:                                              ; preds = %285
  br label %313

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

294:                                              ; preds = %290
  br label %311

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

299:                                              ; preds = %295
  br label %309

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

304:                                              ; preds = %300
  br label %307

305:                                              ; preds = %300
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str, i32 noundef 217, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens) #5
  unreachable

306:                                              ; No predecessors!
  br label %307

307:                                              ; preds = %306, %304
  %308 = phi i32 [ 1, %304 ], [ 0, %306 ]
  br label %309

309:                                              ; preds = %307, %299
  %310 = phi i32 [ 1, %299 ], [ %308, %307 ]
  br label %311

311:                                              ; preds = %309, %294
  %312 = phi i32 [ 2, %294 ], [ %310, %309 ]
  br label %313

313:                                              ; preds = %311, %289
  %314 = phi i32 [ 2, %289 ], [ %312, %311 ]
  br label %315

315:                                              ; preds = %313, %284
  %316 = phi i32 [ 4, %284 ], [ %314, %313 ]
  br label %317

317:                                              ; preds = %315, %279
  %318 = phi i32 [ 4, %279 ], [ %316, %315 ]
  br label %319

319:                                              ; preds = %317, %274
  %320 = phi i32 [ 8, %274 ], [ %318, %317 ]
  br label %321

321:                                              ; preds = %319, %269
  %322 = phi i32 [ 8, %269 ], [ %320, %319 ]
  br label %323

323:                                              ; preds = %321, %264
  %324 = phi i32 [ 1, %264 ], [ %322, %321 ]
  br label %325

325:                                              ; preds = %323, %259
  %326 = phi i32 [ 1, %259 ], [ %324, %323 ]
  br label %327

327:                                              ; preds = %325, %254
  %328 = phi i32 [ 2, %254 ], [ %326, %325 ]
  br label %329

329:                                              ; preds = %327, %249
  %330 = phi i32 [ 2, %249 ], [ %328, %327 ]
  br label %331

331:                                              ; preds = %329, %244
  %332 = phi i32 [ 4, %244 ], [ %330, %329 ]
  br label %333

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

340:                                              ; preds = %333
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %341, i32 0, i32 10
  %343 = load i16, ptr %342, align 1, !tbaa !17
  %344 = zext i16 %343 to i32
  %345 = icmp eq i32 %344, 26
  br label %346

346:                                              ; preds = %340, %333
  %347 = phi i1 [ false, %333 ], [ %345, %340 ]
  %348 = zext i1 %347 to i64
  %349 = select i1 %347, i32 1, i32 0
  store i32 %349, ptr %10, align 4, !tbaa !12
  %350 = load i32, ptr %7, align 4, !tbaa !12
  %351 = icmp ugt i32 %350, 0
  br i1 %351, label %352, label %358

352:                                              ; preds = %346
  %353 = load i32, ptr %5, align 4, !tbaa !12
  %354 = load i32, ptr %7, align 4, !tbaa !12
  %355 = udiv i32 %353, %354
  %356 = load ptr, ptr %4, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %356, i32 0, i32 124
  store i32 %355, ptr %357, align 4, !tbaa !18
  br label %358

358:                                              ; preds = %352, %346
  %359 = load i32, ptr %9, align 4, !tbaa !12
  %360 = icmp ugt i32 %359, 0
  br i1 %360, label %361, label %367

361:                                              ; preds = %358
  %362 = load i32, ptr %5, align 4, !tbaa !12
  %363 = load i32, ptr %9, align 4, !tbaa !12
  %364 = udiv i32 %362, %363
  %365 = load ptr, ptr %4, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %365, i32 0, i32 123
  store i32 %364, ptr %366, align 4, !tbaa !19
  br label %367

367:                                              ; preds = %361, %358
  %368 = load i32, ptr %10, align 4, !tbaa !12
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %370, label %376

370:                                              ; preds = %367
  %371 = load i32, ptr %5, align 4, !tbaa !12
  %372 = load i32, ptr %9, align 4, !tbaa !12
  %373 = udiv i32 %371, %372
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %374, i32 0, i32 124
  store i32 %373, ptr %375, align 4, !tbaa !18
  br label %376

376:                                              ; preds = %370, %367
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %377, i32 0, i32 124
  %379 = load i32, ptr %378, align 4, !tbaa !18
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %380, i32 0, i32 120
  store i32 %379, ptr %381, align 4, !tbaa !20
  %382 = load ptr, ptr %3, align 8, !tbaa !5
  %383 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %382, i32 noundef 3)
  %384 = icmp eq i32 2, %383
  br i1 %384, label %401, label %385

385:                                              ; preds = %376
  %386 = load ptr, ptr %3, align 8, !tbaa !5
  %387 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %386, i32 noundef 3)
  %388 = icmp eq i32 10, %387
  br i1 %388, label %401, label %389

389:                                              ; preds = %385
  %390 = load ptr, ptr %3, align 8, !tbaa !5
  %391 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %390, i32 noundef 3)
  %392 = icmp eq i32 12, %391
  br i1 %392, label %401, label %393

393:                                              ; preds = %389
  %394 = load ptr, ptr %3, align 8, !tbaa !5
  %395 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %394, i32 noundef 3)
  %396 = icmp eq i32 11, %395
  br i1 %396, label %401, label %397

397:                                              ; preds = %393
  %398 = load ptr, ptr %3, align 8, !tbaa !5
  %399 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %398, i32 noundef 3)
  %400 = icmp eq i32 3, %399
  br i1 %400, label %401, label %420

401:                                              ; preds = %397, %393, %389, %385, %376
  %402 = load ptr, ptr %3, align 8, !tbaa !5
  %403 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %402, i32 noundef 4)
  %404 = icmp eq i32 1, %403
  br i1 %404, label %413, label %405

405:                                              ; preds = %401
  %406 = load ptr, ptr %3, align 8, !tbaa !5
  %407 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %406, i32 noundef 4)
  %408 = icmp eq i32 14, %407
  br i1 %408, label %413, label %409

409:                                              ; preds = %405
  %410 = load ptr, ptr %3, align 8, !tbaa !5
  %411 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %410, i32 noundef 0)
  %412 = icmp eq i32 1, %411
  br i1 %412, label %413, label %419

413:                                              ; preds = %409, %405, %401
  %414 = load ptr, ptr %4, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %414, i32 0, i32 124
  %416 = load i32, ptr %415, align 4, !tbaa !18
  %417 = load ptr, ptr %4, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %417, i32 0, i32 123
  store i32 %416, ptr %418, align 4, !tbaa !19
  br label %419

419:                                              ; preds = %413, %409
  br label %420

420:                                              ; preds = %419, %397
  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) #2

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

; 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 = { 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 = { "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 [94 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [606 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens = external hidden unnamed_addr constant [114 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_rv64_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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_configure_rv64_vlens(ptr noundef %0, ptr nocapture noundef %1) local_unnamed_addr #0 {
  %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
  %.not109 = icmp eq i32 %14, 0
  br i1 %.not109, 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 213, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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 %.thread114

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 %.thread114, label %39

.thread114:                                       ; 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 = %.thread114, %34, %28
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str, i32 noundef 213, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens) #4
  unreachable

40:                                               ; preds = %.thread114, %.thread
  %.sink = phi i32 [ 0, %.thread ], [ 4, %.thread114 ]
  %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
  %trunc123 = and i8 %trunc, -2
  %switch.tableidx = add i8 %trunc123, -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 214, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_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_rv64_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
  %.not110 = icmp eq i32 %53, 0
  br i1 %.not110, 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 %.critedge

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 %.critedge, label %62

.critedge:                                        ; 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 = %.critedge, %57, %51
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str, i32 noundef 216, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens) #4
  unreachable

63:                                               ; preds = %.critedge
  %64 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef %0, i32 noundef 3) #3
  %trunc124 = trunc i32 %64 to i8
  switch i8 %trunc124, label %65 [
    i8 0, label %69
    i8 1, label %.fold.split111
  ]

65:                                               ; preds = %63
  %trunc125 = and i8 %trunc124, -2
  %switch.tableidx127 = add i8 %trunc125, -2
  %66 = icmp ult i8 %switch.tableidx127, 11
  br i1 %66, label %switch.hole_check128, label %67

67:                                               ; preds = %switch.hole_check128, %65
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, i32 noundef 217, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_generator_configure_rv64_vlens) #4
  unreachable

.fold.split111:                                   ; preds = %63
  br label %69

switch.hole_check128:                             ; preds = %65
  %switch.maskindex130 = zext nneg i8 %switch.tableidx127 to i16
  %switch.shifted131 = lshr i16 1365, %switch.maskindex130
  %switch.lobit132 = trunc i16 %switch.shifted131 to i1
  br i1 %switch.lobit132, label %switch.lookup129, label %67

switch.lookup129:                                 ; preds = %switch.hole_check128
  %68 = zext nneg i8 %switch.tableidx127 to i64
  %switch.gep133 = getelementptr inbounds [11 x i32], ptr @switch.table.libxsmm_generator_configure_rv64_vlens.1, i64 0, i64 %68
  %switch.load134 = load i32, ptr %switch.gep133, align 4
  br label %69

69:                                               ; preds = %switch.lookup129, %63, %.fold.split111
  %70 = phi i32 [ 8, %63 ], [ 4, %.fold.split111 ], [ %switch.load134, %switch.lookup129 ]
  %71 = getelementptr inbounds i8, ptr %0, i64 31
  %72 = load i8, ptr %71, align 1, !tbaa !10
  %73 = icmp eq i8 %72, 2
  br i1 %73, label %74, label %.critedge113

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

82:                                               ; preds = %74
  store i32 %80, ptr %79, align 4, !tbaa !14
  br label %87

.critedge113:                                     ; preds = %69
  %83 = udiv i32 %5, %47
  %84 = getelementptr inbounds i8, ptr %1, i64 496
  store i32 %83, ptr %84, align 4, !tbaa !14
  %85 = udiv i32 %5, %70
  %86 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %85, ptr %86, align 4, !tbaa !15
  br label %87

87:                                               ; preds = %.critedge113, %82, %74
  %88 = phi i32 [ %83, %.critedge113 ], [ %80, %82 ], [ %78, %74 ]
  %89 = getelementptr inbounds i8, ptr %1, i64 496
  %90 = getelementptr inbounds i8, ptr %1, i64 480
  store i32 %88, ptr %90, align 4, !tbaa !16
  %91 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %92 = icmp eq i32 %91, 2
  br i1 %92, label %105, label %93

93:                                               ; preds = %87
  %94 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %95 = icmp eq i32 %94, 10
  br i1 %95, label %105, label %96

96:                                               ; preds = %93
  %97 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %98 = icmp eq i32 %97, 12
  br i1 %98, label %105, label %99

99:                                               ; preds = %96
  %100 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %101 = icmp eq i32 %100, 11
  br i1 %101, label %105, label %102

102:                                              ; preds = %99
  %103 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 3) #3
  %104 = icmp eq i32 %103, 3
  br i1 %104, label %105, label %117

105:                                              ; preds = %102, %99, %96, %93, %87
  %106 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 4) #3
  %107 = icmp eq i32 %106, 1
  br i1 %107, label %114, label %108

108:                                              ; preds = %105
  %109 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 4) #3
  %110 = icmp eq i32 %109, 14
  br i1 %110, label %114, label %111

111:                                              ; preds = %108
  %112 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %0, i32 noundef 0) #3
  %113 = icmp eq i32 %112, 1
  br i1 %113, label %114, label %117

114:                                              ; preds = %111, %108, %105
  %115 = load i32, ptr %89, align 4, !tbaa !14
  %116 = getelementptr inbounds i8, ptr %1, i64 492
  store i32 %115, ptr %116, align 4, !tbaa !15
  br label %117

117:                                              ; preds = %111, %114, %102
  ret void
}

declare i32 @libxsmm_cpuid_vlen32(i32 noundef) local_unnamed_addr #1

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

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

attributes #0 = { 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 #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 = { 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