; 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_gp_reg_mapping_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 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>
%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 }

@.str = external hidden unnamed_addr constant [94 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4
@__func__.libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg = external hidden unnamed_addr constant [81 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 void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) #1

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

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7) #2 {
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store i32 %4, ptr %13, align 4, !tbaa !9
  store i32 %5, ptr %14, align 4, !tbaa !9
  store i32 %6, ptr %15, align 4, !tbaa !9
  store i32 %7, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %27 = load i32, ptr %13, align 4, !tbaa !9
  %28 = load ptr, ptr %10, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %28, i32 0, i32 1
  %30 = load i32, ptr %29, align 4, !tbaa !11
  %31 = icmp eq i32 %27, %30
  br i1 %31, label %46, label %32

32:                                               ; preds = %8
  %33 = load i32, ptr %13, align 4, !tbaa !9
  %34 = load ptr, ptr %10, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %34, i32 0, i32 2
  %36 = load i32, ptr %35, align 4, !tbaa !13
  %37 = icmp eq i32 %33, %36
  br i1 %37, label %38, label %44

38:                                               ; preds = %32
  %39 = load ptr, ptr %12, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %39, i32 0, i32 11
  %41 = load i8, ptr %40, align 1, !tbaa !14
  %42 = zext i8 %41 to i32
  %43 = icmp eq i32 %42, 2
  br label %44

44:                                               ; preds = %38, %32
  %45 = phi i1 [ false, %32 ], [ %43, %38 ]
  br label %46

46:                                               ; preds = %44, %8
  %47 = phi i1 [ true, %8 ], [ %45, %44 ]
  %48 = zext i1 %47 to i64
  %49 = select i1 %47, i32 1, i32 0
  store i32 %49, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %50 = load i32, ptr %13, align 4, !tbaa !9
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %51, i32 0, i32 6
  %53 = load i32, ptr %52, align 4, !tbaa !17
  %54 = icmp eq i32 %50, %53
  br i1 %54, label %75, label %55

55:                                               ; preds = %46
  %56 = load ptr, ptr %12, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %56, i32 0, i32 11
  %58 = load i8, ptr %57, align 1, !tbaa !14
  %59 = zext i8 %58 to i32
  %60 = icmp eq i32 %59, 1
  br i1 %60, label %61, label %73

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

67:                                               ; preds = %61
  %68 = load i32, ptr %13, align 4, !tbaa !9
  %69 = load ptr, ptr %10, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %69, i32 0, i32 7
  %71 = load i32, ptr %70, align 4, !tbaa !19
  %72 = icmp eq i32 %68, %71
  br label %73

73:                                               ; preds = %67, %61, %55
  %74 = phi i1 [ false, %61 ], [ false, %55 ], [ %72, %67 ]
  br label %75

75:                                               ; preds = %73, %46
  %76 = phi i1 [ true, %46 ], [ %74, %73 ]
  %77 = zext i1 %76 to i64
  %78 = select i1 %76, i32 1, i32 0
  store i32 %78, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %79 = load i32, ptr %13, align 4, !tbaa !9
  %80 = load ptr, ptr %10, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 4, !tbaa !11
  %83 = icmp eq i32 %79, %82
  br i1 %83, label %84, label %97

84:                                               ; preds = %75
  %85 = load ptr, ptr %12, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %85, i32 0, i32 11
  %87 = load i8, ptr %86, align 1, !tbaa !14
  %88 = zext i8 %87 to i32
  %89 = icmp eq i32 %88, 1
  br i1 %89, label %90, label %97

90:                                               ; preds = %84
  %91 = load ptr, ptr %12, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %91, i32 0, i32 9
  %93 = load i16, ptr %92, align 1, !tbaa !20
  %94 = zext i16 %93 to i32
  %95 = and i32 %94, 2
  %96 = icmp sgt i32 %95, 0
  br i1 %96, label %137, label %97

97:                                               ; preds = %90, %84, %75
  %98 = load i32, ptr %13, align 4, !tbaa !9
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %99, i32 0, i32 1
  %101 = load i32, ptr %100, align 4, !tbaa !11
  %102 = icmp eq i32 %98, %101
  br i1 %102, label %103, label %116

103:                                              ; preds = %97
  %104 = load ptr, ptr %12, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %104, i32 0, i32 11
  %106 = load i8, ptr %105, align 1, !tbaa !14
  %107 = zext i8 %106 to i32
  %108 = icmp eq i32 %107, 2
  br i1 %108, label %109, label %116

109:                                              ; preds = %103
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %110, i32 0, i32 9
  %112 = load i16, ptr %111, align 1, !tbaa !20
  %113 = zext i16 %112 to i32
  %114 = and i32 %113, 1
  %115 = icmp sgt i32 %114, 0
  br i1 %115, label %137, label %116

116:                                              ; preds = %109, %103, %97
  %117 = load i32, ptr %13, align 4, !tbaa !9
  %118 = load ptr, ptr %10, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %118, i32 0, i32 2
  %120 = load i32, ptr %119, align 4, !tbaa !13
  %121 = icmp eq i32 %117, %120
  br i1 %121, label %122, label %135

122:                                              ; preds = %116
  %123 = load ptr, ptr %12, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %123, i32 0, i32 11
  %125 = load i8, ptr %124, align 1, !tbaa !14
  %126 = zext i8 %125 to i32
  %127 = icmp eq i32 %126, 2
  br i1 %127, label %128, label %135

128:                                              ; preds = %122
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %129, i32 0, i32 9
  %131 = load i16, ptr %130, align 1, !tbaa !20
  %132 = zext i16 %131 to i32
  %133 = and i32 %132, 2
  %134 = icmp sgt i32 %133, 0
  br label %135

135:                                              ; preds = %128, %122, %116
  %136 = phi i1 [ false, %122 ], [ false, %116 ], [ %134, %128 ]
  br label %137

137:                                              ; preds = %135, %109, %90
  %138 = phi i1 [ true, %109 ], [ true, %90 ], [ %136, %135 ]
  %139 = zext i1 %138 to i64
  %140 = select i1 %138, i32 1, i32 0
  store i32 %140, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %141 = load i32, ptr %13, align 4, !tbaa !9
  %142 = load ptr, ptr %10, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %142, i32 0, i32 1
  %144 = load i32, ptr %143, align 4, !tbaa !11
  %145 = icmp eq i32 %141, %144
  br i1 %145, label %146, label %159

146:                                              ; preds = %137
  %147 = load ptr, ptr %12, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %147, i32 0, i32 11
  %149 = load i8, ptr %148, align 1, !tbaa !14
  %150 = zext i8 %149 to i32
  %151 = icmp eq i32 %150, 1
  br i1 %151, label %152, label %159

152:                                              ; preds = %146
  %153 = load ptr, ptr %12, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %153, i32 0, i32 9
  %155 = load i16, ptr %154, align 1, !tbaa !20
  %156 = zext i16 %155 to i32
  %157 = and i32 %156, 4
  %158 = icmp sgt i32 %157, 0
  br i1 %158, label %199, label %159

159:                                              ; preds = %152, %146, %137
  %160 = load i32, ptr %13, align 4, !tbaa !9
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %161, i32 0, i32 1
  %163 = load i32, ptr %162, align 4, !tbaa !11
  %164 = icmp eq i32 %160, %163
  br i1 %164, label %165, label %178

165:                                              ; preds = %159
  %166 = load ptr, ptr %12, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %166, i32 0, i32 11
  %168 = load i8, ptr %167, align 1, !tbaa !14
  %169 = zext i8 %168 to i32
  %170 = icmp eq i32 %169, 2
  br i1 %170, label %171, label %178

171:                                              ; preds = %165
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %172, i32 0, i32 9
  %174 = load i16, ptr %173, align 1, !tbaa !20
  %175 = zext i16 %174 to i32
  %176 = and i32 %175, 4
  %177 = icmp sgt i32 %176, 0
  br i1 %177, label %199, label %178

178:                                              ; preds = %171, %165, %159
  %179 = load i32, ptr %13, align 4, !tbaa !9
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %180, i32 0, i32 2
  %182 = load i32, ptr %181, align 4, !tbaa !13
  %183 = icmp eq i32 %179, %182
  br i1 %183, label %184, label %197

184:                                              ; preds = %178
  %185 = load ptr, ptr %12, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %185, i32 0, i32 11
  %187 = load i8, ptr %186, align 1, !tbaa !14
  %188 = zext i8 %187 to i32
  %189 = icmp eq i32 %188, 2
  br i1 %189, label %190, label %197

190:                                              ; preds = %184
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %191, i32 0, i32 9
  %193 = load i16, ptr %192, align 1, !tbaa !20
  %194 = zext i16 %193 to i32
  %195 = and i32 %194, 8
  %196 = icmp sgt i32 %195, 0
  br label %197

197:                                              ; preds = %190, %184, %178
  %198 = phi i1 [ false, %184 ], [ false, %178 ], [ %196, %190 ]
  br label %199

199:                                              ; preds = %197, %171, %152
  %200 = phi i1 [ true, %171 ], [ true, %152 ], [ %198, %197 ]
  %201 = zext i1 %200 to i64
  %202 = select i1 %200, i32 1, i32 0
  store i32 %202, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %203 = load i32, ptr %13, align 4, !tbaa !9
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %204, i32 0, i32 1
  %206 = load i32, ptr %205, align 4, !tbaa !11
  %207 = icmp eq i32 %203, %206
  br i1 %207, label %208, label %221

208:                                              ; preds = %199
  %209 = load ptr, ptr %12, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %209, i32 0, i32 11
  %211 = load i8, ptr %210, align 1, !tbaa !14
  %212 = zext i8 %211 to i32
  %213 = icmp eq i32 %212, 1
  br i1 %213, label %214, label %221

214:                                              ; preds = %208
  %215 = load ptr, ptr %12, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %215, i32 0, i32 9
  %217 = load i16, ptr %216, align 1, !tbaa !20
  %218 = zext i16 %217 to i32
  %219 = and i32 %218, 8
  %220 = icmp sgt i32 %219, 0
  br i1 %220, label %261, label %221

221:                                              ; preds = %214, %208, %199
  %222 = load i32, ptr %13, align 4, !tbaa !9
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %223, i32 0, i32 1
  %225 = load i32, ptr %224, align 4, !tbaa !11
  %226 = icmp eq i32 %222, %225
  br i1 %226, label %227, label %240

227:                                              ; preds = %221
  %228 = load ptr, ptr %12, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %228, i32 0, i32 11
  %230 = load i8, ptr %229, align 1, !tbaa !14
  %231 = zext i8 %230 to i32
  %232 = icmp eq i32 %231, 2
  br i1 %232, label %233, label %240

233:                                              ; preds = %227
  %234 = load ptr, ptr %12, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %234, i32 0, i32 9
  %236 = load i16, ptr %235, align 1, !tbaa !20
  %237 = zext i16 %236 to i32
  %238 = and i32 %237, 16
  %239 = icmp sgt i32 %238, 0
  br i1 %239, label %261, label %240

240:                                              ; preds = %233, %227, %221
  %241 = load i32, ptr %13, align 4, !tbaa !9
  %242 = load ptr, ptr %10, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %242, i32 0, i32 2
  %244 = load i32, ptr %243, align 4, !tbaa !13
  %245 = icmp eq i32 %241, %244
  br i1 %245, label %246, label %259

246:                                              ; preds = %240
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %247, i32 0, i32 11
  %249 = load i8, ptr %248, align 1, !tbaa !14
  %250 = zext i8 %249 to i32
  %251 = icmp eq i32 %250, 2
  br i1 %251, label %252, label %259

252:                                              ; preds = %246
  %253 = load ptr, ptr %12, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %253, i32 0, i32 9
  %255 = load i16, ptr %254, align 1, !tbaa !20
  %256 = zext i16 %255 to i32
  %257 = and i32 %256, 32
  %258 = icmp sgt i32 %257, 0
  br label %259

259:                                              ; preds = %252, %246, %240
  %260 = phi i1 [ false, %246 ], [ false, %240 ], [ %258, %252 ]
  br label %261

261:                                              ; preds = %259, %233, %214
  %262 = phi i1 [ true, %233 ], [ true, %214 ], [ %260, %259 ]
  %263 = zext i1 %262 to i64
  %264 = select i1 %262, i32 1, i32 0
  store i32 %264, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %265 = load i32, ptr %19, align 4, !tbaa !9
  %266 = icmp eq i32 %265, 1
  br i1 %266, label %273, label %267

267:                                              ; preds = %261
  %268 = load i32, ptr %20, align 4, !tbaa !9
  %269 = icmp eq i32 %268, 1
  br i1 %269, label %273, label %270

270:                                              ; preds = %267
  %271 = load i32, ptr %21, align 4, !tbaa !9
  %272 = icmp eq i32 %271, 1
  br label %273

273:                                              ; preds = %270, %267, %261
  %274 = phi i1 [ true, %267 ], [ true, %261 ], [ %272, %270 ]
  %275 = zext i1 %274 to i64
  %276 = select i1 %274, i32 1, i32 0
  store i32 %276, ptr %22, align 4, !tbaa !9
  %277 = load i32, ptr %17, align 4, !tbaa !9
  %278 = icmp ugt i32 %277, 0
  br i1 %278, label %282, label %279

279:                                              ; preds = %273
  %280 = load i32, ptr %18, align 4, !tbaa !9
  %281 = icmp ugt i32 %280, 0
  br i1 %281, label %282, label %441

282:                                              ; preds = %279, %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %283 = load i32, ptr %17, align 4, !tbaa !9
  %284 = icmp ugt i32 %283, 0
  br i1 %284, label %285, label %289

285:                                              ; preds = %282
  %286 = load ptr, ptr %11, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %286, i32 0, i32 120
  %288 = load i32, ptr %287, align 4, !tbaa !21
  br label %293

289:                                              ; preds = %282
  %290 = load ptr, ptr %11, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %290, i32 0, i32 123
  %292 = load i32, ptr %291, align 4, !tbaa !23
  br label %293

293:                                              ; preds = %289, %285
  %294 = phi i32 [ %288, %285 ], [ %292, %289 ]
  store i32 %294, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %295 = load i32, ptr %17, align 4, !tbaa !9
  %296 = icmp ugt i32 %295, 0
  br i1 %296, label %297, label %319

297:                                              ; preds = %293
  %298 = load i32, ptr %13, align 4, !tbaa !9
  %299 = load ptr, ptr %10, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %299, i32 0, i32 2
  %301 = load i32, ptr %300, align 4, !tbaa !13
  %302 = icmp eq i32 %298, %301
  br i1 %302, label %303, label %313

303:                                              ; preds = %297
  %304 = load ptr, ptr %12, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %304, i32 0, i32 11
  %306 = load i8, ptr %305, align 1, !tbaa !14
  %307 = zext i8 %306 to i32
  %308 = icmp eq i32 %307, 2
  br i1 %308, label %309, label %313

309:                                              ; preds = %303
  %310 = load ptr, ptr %11, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %310, i32 0, i32 3
  %312 = load i32, ptr %311, align 4, !tbaa !24
  br label %317

313:                                              ; preds = %303, %297
  %314 = load ptr, ptr %11, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %314, i32 0, i32 2
  %316 = load i32, ptr %315, align 4, !tbaa !25
  br label %317

317:                                              ; preds = %313, %309
  %318 = phi i32 [ %312, %309 ], [ %316, %313 ]
  br label %323

319:                                              ; preds = %293
  %320 = load ptr, ptr %11, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %320, i32 0, i32 5
  %322 = load i32, ptr %321, align 4, !tbaa !26
  br label %323

323:                                              ; preds = %319, %317
  %324 = phi i32 [ %318, %317 ], [ %322, %319 ]
  store i32 %324, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %325 = load i32, ptr %17, align 4, !tbaa !9
  %326 = icmp ugt i32 %325, 0
  br i1 %326, label %327, label %349

327:                                              ; preds = %323
  %328 = load i32, ptr %13, align 4, !tbaa !9
  %329 = load ptr, ptr %10, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %329, i32 0, i32 2
  %331 = load i32, ptr %330, align 4, !tbaa !13
  %332 = icmp eq i32 %328, %331
  br i1 %332, label %333, label %343

333:                                              ; preds = %327
  %334 = load ptr, ptr %12, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %334, i32 0, i32 11
  %336 = load i8, ptr %335, align 1, !tbaa !14
  %337 = zext i8 %336 to i32
  %338 = icmp eq i32 %337, 2
  br i1 %338, label %339, label %343

339:                                              ; preds = %333
  %340 = load ptr, ptr %12, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %340, i32 0, i32 4
  %342 = load i32, ptr %341, align 1, !tbaa !27
  br label %347

343:                                              ; preds = %333, %327
  %344 = load ptr, ptr %12, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %344, i32 0, i32 2
  %346 = load i32, ptr %345, align 1, !tbaa !28
  br label %347

347:                                              ; preds = %343, %339
  %348 = phi i32 [ %342, %339 ], [ %346, %343 ]
  br label %353

349:                                              ; preds = %323
  %350 = load ptr, ptr %12, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %350, i32 0, i32 3
  %352 = load i32, ptr %351, align 1, !tbaa !29
  br label %353

353:                                              ; preds = %349, %347
  %354 = phi i32 [ %348, %347 ], [ %352, %349 ]
  store i32 %354, ptr %25, align 4, !tbaa !9
  %355 = load i32, ptr %22, align 4, !tbaa !9
  %356 = icmp eq i32 %355, 0
  br i1 %356, label %357, label %393

357:                                              ; preds = %353
  %358 = load i32, ptr %16, align 4, !tbaa !9
  %359 = icmp eq i32 %358, 0
  br i1 %359, label %360, label %376

360:                                              ; preds = %357
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = load i32, ptr %14, align 4, !tbaa !9
  %363 = load i32, ptr %13, align 4, !tbaa !9
  %364 = load ptr, ptr %10, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %364, i32 0, i32 35
  %366 = load i32, ptr %365, align 4, !tbaa !30
  %367 = load i32, ptr %13, align 4, !tbaa !9
  %368 = load i32, ptr %23, align 4, !tbaa !9
  %369 = zext i32 %368 to i64
  %370 = load i32, ptr %15, align 4, !tbaa !9
  %371 = zext i32 %370 to i64
  %372 = mul nsw i64 %369, %371
  %373 = load i32, ptr %24, align 4, !tbaa !9
  %374 = zext i32 %373 to i64
  %375 = mul nsw i64 %372, %374
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %361, i32 noundef %362, i32 noundef %363, i32 noundef %366, i32 noundef %367, i64 noundef %375)
  br label %392

376:                                              ; preds = %357
  %377 = load ptr, ptr %9, align 8, !tbaa !5
  %378 = load i32, ptr %14, align 4, !tbaa !9
  %379 = load i32, ptr %13, align 4, !tbaa !9
  %380 = load ptr, ptr %10, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %380, i32 0, i32 35
  %382 = load i32, ptr %381, align 4, !tbaa !30
  %383 = load i32, ptr %13, align 4, !tbaa !9
  %384 = load i32, ptr %15, align 4, !tbaa !9
  %385 = zext i32 %384 to i64
  %386 = load i32, ptr %24, align 4, !tbaa !9
  %387 = zext i32 %386 to i64
  %388 = mul nsw i64 %385, %387
  %389 = load i32, ptr %25, align 4, !tbaa !9
  %390 = zext i32 %389 to i64
  %391 = mul nsw i64 %388, %390
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %377, i32 noundef %378, i32 noundef %379, i32 noundef %382, i32 noundef %383, i64 noundef %391)
  br label %392

392:                                              ; preds = %376, %360
  br label %440

393:                                              ; preds = %353
  %394 = load i32, ptr %19, align 4, !tbaa !9
  %395 = icmp ugt i32 %394, 0
  br i1 %395, label %396, label %416

396:                                              ; preds = %393
  %397 = load i32, ptr %16, align 4, !tbaa !9
  %398 = icmp eq i32 %397, 1
  br i1 %398, label %399, label %415

399:                                              ; preds = %396
  %400 = load ptr, ptr %9, align 8, !tbaa !5
  %401 = load i32, ptr %14, align 4, !tbaa !9
  %402 = load i32, ptr %13, align 4, !tbaa !9
  %403 = load ptr, ptr %10, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %403, i32 0, i32 35
  %405 = load i32, ptr %404, align 4, !tbaa !30
  %406 = load i32, ptr %13, align 4, !tbaa !9
  %407 = load i32, ptr %25, align 4, !tbaa !9
  %408 = zext i32 %407 to i64
  %409 = load i32, ptr %15, align 4, !tbaa !9
  %410 = zext i32 %409 to i64
  %411 = mul nsw i64 %408, %410
  %412 = load i32, ptr %24, align 4, !tbaa !9
  %413 = zext i32 %412 to i64
  %414 = mul nsw i64 %411, %413
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %400, i32 noundef %401, i32 noundef %402, i32 noundef %405, i32 noundef %406, i64 noundef %414)
  br label %415

415:                                              ; preds = %399, %396
  br label %416

416:                                              ; preds = %415, %393
  %417 = load i32, ptr %20, align 4, !tbaa !9
  %418 = icmp ugt i32 %417, 0
  br i1 %418, label %419, label %439

419:                                              ; preds = %416
  %420 = load i32, ptr %16, align 4, !tbaa !9
  %421 = icmp eq i32 %420, 0
  br i1 %421, label %422, label %438

422:                                              ; preds = %419
  %423 = load ptr, ptr %9, align 8, !tbaa !5
  %424 = load i32, ptr %14, align 4, !tbaa !9
  %425 = load i32, ptr %13, align 4, !tbaa !9
  %426 = load ptr, ptr %10, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %426, i32 0, i32 35
  %428 = load i32, ptr %427, align 4, !tbaa !30
  %429 = load i32, ptr %13, align 4, !tbaa !9
  %430 = load i32, ptr %23, align 4, !tbaa !9
  %431 = zext i32 %430 to i64
  %432 = load i32, ptr %15, align 4, !tbaa !9
  %433 = zext i32 %432 to i64
  %434 = mul nsw i64 %431, %433
  %435 = load i32, ptr %24, align 4, !tbaa !9
  %436 = zext i32 %435 to i64
  %437 = mul nsw i64 %434, %436
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %423, i32 noundef %424, i32 noundef %425, i32 noundef %428, i32 noundef %429, i64 noundef %437)
  br label %438

438:                                              ; preds = %422, %419
  br label %439

439:                                              ; preds = %438, %416
  br label %440

440:                                              ; preds = %439, %392
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  br label %740

441:                                              ; preds = %279
  %442 = load ptr, ptr %12, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %442, i32 0, i32 11
  %444 = load i8, ptr %443, align 1, !tbaa !14
  %445 = zext i8 %444 to i32
  %446 = icmp eq i32 %445, 1
  br i1 %446, label %447, label %739

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

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

459:                                              ; preds = %453, %447
  %460 = load ptr, ptr %12, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %460, i32 0, i32 9
  %462 = load i16, ptr %461, align 1, !tbaa !20
  %463 = zext i16 %462 to i32
  %464 = and i32 %463, 1
  %465 = icmp sgt i32 %464, 0
  br i1 %465, label %466, label %510

466:                                              ; preds = %459
  %467 = load i32, ptr %16, align 4, !tbaa !9
  %468 = icmp eq i32 %467, 0
  br i1 %468, label %469, label %489

469:                                              ; preds = %466
  %470 = load ptr, ptr %9, align 8, !tbaa !5
  %471 = load i32, ptr %14, align 4, !tbaa !9
  %472 = load ptr, ptr %10, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %472, i32 0, i32 9
  %474 = load i32, ptr %473, align 4, !tbaa !31
  %475 = load ptr, ptr %10, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %475, i32 0, i32 35
  %477 = load i32, ptr %476, align 4, !tbaa !30
  %478 = load ptr, ptr %10, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %478, i32 0, i32 9
  %480 = load i32, ptr %479, align 4, !tbaa !31
  %481 = load ptr, ptr %11, align 8, !tbaa !5
  %482 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %481, i32 0, i32 123
  %483 = load i32, ptr %482, align 4, !tbaa !23
  %484 = zext i32 %483 to i64
  %485 = load i32, ptr %15, align 4, !tbaa !9
  %486 = zext i32 %485 to i64
  %487 = mul nsw i64 %484, %486
  %488 = sdiv i64 %487, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %470, i32 noundef %471, i32 noundef %474, i32 noundef %477, i32 noundef %480, i64 noundef %488)
  br label %509

489:                                              ; preds = %466
  %490 = load ptr, ptr %9, align 8, !tbaa !5
  %491 = load i32, ptr %14, align 4, !tbaa !9
  %492 = load ptr, ptr %10, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %492, i32 0, i32 9
  %494 = load i32, ptr %493, align 4, !tbaa !31
  %495 = load ptr, ptr %10, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %495, i32 0, i32 35
  %497 = load i32, ptr %496, align 4, !tbaa !30
  %498 = load ptr, ptr %10, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %498, i32 0, i32 9
  %500 = load i32, ptr %499, align 4, !tbaa !31
  %501 = load ptr, ptr %11, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %501, i32 0, i32 17
  %503 = load i32, ptr %502, align 4, !tbaa !32
  %504 = zext i32 %503 to i64
  %505 = load i32, ptr %15, align 4, !tbaa !9
  %506 = zext i32 %505 to i64
  %507 = mul nsw i64 %504, %506
  %508 = sdiv i64 %507, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %490, i32 noundef %491, i32 noundef %494, i32 noundef %497, i32 noundef %500, i64 noundef %508)
  br label %509

509:                                              ; preds = %489, %469
  br label %510

510:                                              ; preds = %509, %459, %453
  %511 = load ptr, ptr %12, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %511, i32 0, i32 10
  %513 = load i16, ptr %512, align 1, !tbaa !18
  %514 = zext i16 %513 to i32
  %515 = icmp eq i32 %514, 6
  br i1 %515, label %528, label %516

516:                                              ; preds = %510
  %517 = load ptr, ptr %12, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %517, i32 0, i32 10
  %519 = load i16, ptr %518, align 1, !tbaa !18
  %520 = zext i16 %519 to i32
  %521 = icmp eq i32 %520, 35
  br i1 %521, label %528, label %522

522:                                              ; preds = %516
  %523 = load ptr, ptr %12, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %523, i32 0, i32 10
  %525 = load i16, ptr %524, align 1, !tbaa !18
  %526 = zext i16 %525 to i32
  %527 = icmp eq i32 %526, 37
  br i1 %527, label %528, label %622

528:                                              ; preds = %522, %516, %510
  %529 = load ptr, ptr %12, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %529, i32 0, i32 9
  %531 = load i16, ptr %530, align 1, !tbaa !20
  %532 = zext i16 %531 to i32
  %533 = and i32 %532, 1
  %534 = icmp sgt i32 %533, 0
  br i1 %534, label %535, label %577

535:                                              ; preds = %528
  %536 = load ptr, ptr %12, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %536, i32 0, i32 10
  %538 = load i16, ptr %537, align 1, !tbaa !18
  %539 = zext i16 %538 to i32
  %540 = icmp ne i32 %539, 37
  br i1 %540, label %541, label %577

541:                                              ; preds = %535
  %542 = load i32, ptr %16, align 4, !tbaa !9
  %543 = icmp eq i32 %542, 0
  br i1 %543, label %544, label %560

544:                                              ; preds = %541
  %545 = load ptr, ptr %9, align 8, !tbaa !5
  %546 = load i32, ptr %14, align 4, !tbaa !9
  %547 = load i32, ptr %13, align 4, !tbaa !9
  %548 = load ptr, ptr %10, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %548, i32 0, i32 35
  %550 = load i32, ptr %549, align 4, !tbaa !30
  %551 = load i32, ptr %13, align 4, !tbaa !9
  %552 = load ptr, ptr %11, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %552, i32 0, i32 120
  %554 = load i32, ptr %553, align 4, !tbaa !21
  %555 = zext i32 %554 to i64
  %556 = load i32, ptr %15, align 4, !tbaa !9
  %557 = zext i32 %556 to i64
  %558 = mul nsw i64 %555, %557
  %559 = sdiv i64 %558, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %545, i32 noundef %546, i32 noundef %547, i32 noundef %550, i32 noundef %551, i64 noundef %559)
  br label %576

560:                                              ; preds = %541
  %561 = load ptr, ptr %9, align 8, !tbaa !5
  %562 = load i32, ptr %14, align 4, !tbaa !9
  %563 = load i32, ptr %13, align 4, !tbaa !9
  %564 = load ptr, ptr %10, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %564, i32 0, i32 35
  %566 = load i32, ptr %565, align 4, !tbaa !30
  %567 = load i32, ptr %13, align 4, !tbaa !9
  %568 = load ptr, ptr %11, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %568, i32 0, i32 16
  %570 = load i32, ptr %569, align 4, !tbaa !33
  %571 = zext i32 %570 to i64
  %572 = load i32, ptr %15, align 4, !tbaa !9
  %573 = zext i32 %572 to i64
  %574 = mul nsw i64 %571, %573
  %575 = sdiv i64 %574, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %561, i32 noundef %562, i32 noundef %563, i32 noundef %566, i32 noundef %567, i64 noundef %575)
  br label %576

576:                                              ; preds = %560, %544
  br label %621

577:                                              ; preds = %535, %528
  %578 = load i32, ptr %16, align 4, !tbaa !9
  %579 = icmp eq i32 %578, 0
  br i1 %579, label %580, label %600

580:                                              ; preds = %577
  %581 = load ptr, ptr %9, align 8, !tbaa !5
  %582 = load i32, ptr %14, align 4, !tbaa !9
  %583 = load i32, ptr %13, align 4, !tbaa !9
  %584 = load ptr, ptr %10, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %584, i32 0, i32 35
  %586 = load i32, ptr %585, align 4, !tbaa !30
  %587 = load i32, ptr %13, align 4, !tbaa !9
  %588 = load ptr, ptr %11, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %588, i32 0, i32 120
  %590 = load i32, ptr %589, align 4, !tbaa !21
  %591 = zext i32 %590 to i64
  %592 = load i32, ptr %15, align 4, !tbaa !9
  %593 = zext i32 %592 to i64
  %594 = mul nsw i64 %591, %593
  %595 = load ptr, ptr %11, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %595, i32 0, i32 2
  %597 = load i32, ptr %596, align 4, !tbaa !25
  %598 = zext i32 %597 to i64
  %599 = mul nsw i64 %594, %598
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %581, i32 noundef %582, i32 noundef %583, i32 noundef %586, i32 noundef %587, i64 noundef %599)
  br label %620

600:                                              ; preds = %577
  %601 = load ptr, ptr %9, align 8, !tbaa !5
  %602 = load i32, ptr %14, align 4, !tbaa !9
  %603 = load i32, ptr %13, align 4, !tbaa !9
  %604 = load ptr, ptr %10, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %604, i32 0, i32 35
  %606 = load i32, ptr %605, align 4, !tbaa !30
  %607 = load i32, ptr %13, align 4, !tbaa !9
  %608 = load ptr, ptr %12, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %608, i32 0, i32 2
  %610 = load i32, ptr %609, align 1, !tbaa !28
  %611 = zext i32 %610 to i64
  %612 = load i32, ptr %15, align 4, !tbaa !9
  %613 = zext i32 %612 to i64
  %614 = mul nsw i64 %611, %613
  %615 = load ptr, ptr %11, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %615, i32 0, i32 2
  %617 = load i32, ptr %616, align 4, !tbaa !25
  %618 = zext i32 %617 to i64
  %619 = mul nsw i64 %614, %618
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %601, i32 noundef %602, i32 noundef %603, i32 noundef %606, i32 noundef %607, i64 noundef %619)
  br label %620

620:                                              ; preds = %600, %580
  br label %621

621:                                              ; preds = %620, %576
  br label %622

622:                                              ; preds = %621, %522
  %623 = load ptr, ptr %12, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %623, i32 0, i32 10
  %625 = load i16, ptr %624, align 1, !tbaa !18
  %626 = zext i16 %625 to i32
  %627 = icmp eq i32 %626, 25
  br i1 %627, label %628, label %679

628:                                              ; preds = %622
  %629 = load ptr, ptr %12, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %629, i32 0, i32 9
  %631 = load i16, ptr %630, align 1, !tbaa !20
  %632 = zext i16 %631 to i32
  %633 = and i32 %632, 1
  %634 = icmp sgt i32 %633, 0
  br i1 %634, label %635, label %679

635:                                              ; preds = %628
  %636 = load i32, ptr %16, align 4, !tbaa !9
  %637 = icmp eq i32 %636, 0
  br i1 %637, label %638, label %658

638:                                              ; preds = %635
  %639 = load ptr, ptr %9, align 8, !tbaa !5
  %640 = load i32, ptr %14, align 4, !tbaa !9
  %641 = load ptr, ptr %10, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %641, i32 0, i32 13
  %643 = load i32, ptr %642, align 4, !tbaa !34
  %644 = load ptr, ptr %10, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %644, i32 0, i32 35
  %646 = load i32, ptr %645, align 4, !tbaa !30
  %647 = load ptr, ptr %10, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %647, i32 0, i32 13
  %649 = load i32, ptr %648, align 4, !tbaa !34
  %650 = load ptr, ptr %11, align 8, !tbaa !5
  %651 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %650, i32 0, i32 123
  %652 = load i32, ptr %651, align 4, !tbaa !23
  %653 = zext i32 %652 to i64
  %654 = load i32, ptr %15, align 4, !tbaa !9
  %655 = zext i32 %654 to i64
  %656 = mul nsw i64 %653, %655
  %657 = sdiv i64 %656, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %639, i32 noundef %640, i32 noundef %643, i32 noundef %646, i32 noundef %649, i64 noundef %657)
  br label %678

658:                                              ; preds = %635
  %659 = load ptr, ptr %9, align 8, !tbaa !5
  %660 = load i32, ptr %14, align 4, !tbaa !9
  %661 = load ptr, ptr %10, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %661, i32 0, i32 13
  %663 = load i32, ptr %662, align 4, !tbaa !34
  %664 = load ptr, ptr %10, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %664, i32 0, i32 35
  %666 = load i32, ptr %665, align 4, !tbaa !30
  %667 = load ptr, ptr %10, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %667, i32 0, i32 13
  %669 = load i32, ptr %668, align 4, !tbaa !34
  %670 = load ptr, ptr %11, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %670, i32 0, i32 17
  %672 = load i32, ptr %671, align 4, !tbaa !32
  %673 = zext i32 %672 to i64
  %674 = load i32, ptr %15, align 4, !tbaa !9
  %675 = zext i32 %674 to i64
  %676 = mul nsw i64 %673, %675
  %677 = sdiv i64 %676, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %659, i32 noundef %660, i32 noundef %663, i32 noundef %666, i32 noundef %669, i64 noundef %677)
  br label %678

678:                                              ; preds = %658, %638
  br label %679

679:                                              ; preds = %678, %628, %622
  %680 = load ptr, ptr %12, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %680, i32 0, i32 10
  %682 = load i16, ptr %681, align 1, !tbaa !18
  %683 = zext i16 %682 to i32
  %684 = icmp eq i32 %683, 26
  br i1 %684, label %685, label %738

685:                                              ; preds = %679
  %686 = load ptr, ptr %12, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %686, i32 0, i32 9
  %688 = load i16, ptr %687, align 1, !tbaa !20
  %689 = zext i16 %688 to i32
  %690 = and i32 %689, 1
  %691 = icmp sgt i32 %690, 0
  br i1 %691, label %692, label %728

692:                                              ; preds = %685
  %693 = load i32, ptr %16, align 4, !tbaa !9
  %694 = icmp eq i32 %693, 0
  br i1 %694, label %695, label %711

695:                                              ; preds = %692
  %696 = load ptr, ptr %9, align 8, !tbaa !5
  %697 = load i32, ptr %14, align 4, !tbaa !9
  %698 = load i32, ptr %13, align 4, !tbaa !9
  %699 = load ptr, ptr %10, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %699, i32 0, i32 35
  %701 = load i32, ptr %700, align 4, !tbaa !30
  %702 = load i32, ptr %13, align 4, !tbaa !9
  %703 = load ptr, ptr %11, align 8, !tbaa !5
  %704 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %703, i32 0, i32 120
  %705 = load i32, ptr %704, align 4, !tbaa !21
  %706 = zext i32 %705 to i64
  %707 = load i32, ptr %15, align 4, !tbaa !9
  %708 = zext i32 %707 to i64
  %709 = mul nsw i64 %706, %708
  %710 = sdiv i64 %709, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %696, i32 noundef %697, i32 noundef %698, i32 noundef %701, i32 noundef %702, i64 noundef %710)
  br label %727

711:                                              ; preds = %692
  %712 = load ptr, ptr %9, align 8, !tbaa !5
  %713 = load i32, ptr %14, align 4, !tbaa !9
  %714 = load i32, ptr %13, align 4, !tbaa !9
  %715 = load ptr, ptr %10, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %715, i32 0, i32 35
  %717 = load i32, ptr %716, align 4, !tbaa !30
  %718 = load i32, ptr %13, align 4, !tbaa !9
  %719 = load ptr, ptr %11, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %719, i32 0, i32 16
  %721 = load i32, ptr %720, align 4, !tbaa !33
  %722 = zext i32 %721 to i64
  %723 = load i32, ptr %15, align 4, !tbaa !9
  %724 = zext i32 %723 to i64
  %725 = mul nsw i64 %722, %724
  %726 = sdiv i64 %725, 8
  call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %712, i32 noundef %713, i32 noundef %714, i32 noundef %717, i32 noundef %718, i64 noundef %726)
  br label %727

727:                                              ; preds = %711, %695
  br label %737

728:                                              ; preds = %685
  %729 = load ptr, ptr %9, align 8, !tbaa !5
  %730 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %731 = icmp ult i32 1, %730
  br i1 %731, label %732, label %734

732:                                              ; preds = %728
  %733 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %735

734:                                              ; preds = %728
  br label %735

735:                                              ; preds = %734, %732
  %736 = phi i32 [ %733, %732 ], [ 1, %734 ]
  call void @libxsmm_handle_error(ptr noundef %729, i32 noundef 90045, ptr noundef @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg, ptr noundef @.str, i32 noundef 199, i32 noundef %736)
  store i32 1, ptr %26, align 4
  br label %741

737:                                              ; preds = %727
  br label %738

738:                                              ; preds = %737, %679
  br label %739

739:                                              ; preds = %738, %441
  br label %740

740:                                              ; preds = %739, %440
  store i32 0, ptr %26, align 4
  br label %741

741:                                              ; preds = %740, %735
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  %742 = load i32, ptr %26, align 4
  switch i32 %742, label %744 [
    i32 0, label %743
    i32 1, label %743
  ]

743:                                              ; preds = %741, %741
  ret void

744:                                              ; preds = %741
  unreachable
}

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

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

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


; 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
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@__func__.libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg = external hidden unnamed_addr constant [81 x i8], align 1

declare void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #0

declare void @libxsmm_handle_error(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7) local_unnamed_addr #1 {
  %9 = getelementptr inbounds i8, ptr %1, i64 4
  %10 = load i32, ptr %9, align 4, !tbaa !5
  %11 = icmp eq i32 %10, %4
  br i1 %11, label %20, label %12

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %1, i64 8
  %14 = load i32, ptr %13, align 4, !tbaa !10
  %15 = icmp eq i32 %14, %4
  br i1 %15, label %16, label %20

16:                                               ; preds = %12
  %17 = getelementptr inbounds i8, ptr %3, i64 31
  %18 = load i8, ptr %17, align 1, !tbaa !11
  %19 = icmp eq i8 %18, 2
  br label %20

20:                                               ; preds = %12, %16, %8
  %21 = phi i1 [ true, %8 ], [ false, %12 ], [ %19, %16 ]
  %22 = getelementptr inbounds i8, ptr %1, i64 24
  %23 = load i32, ptr %22, align 4, !tbaa !14
  %24 = icmp eq i32 %23, %4
  br i1 %24, label %37, label %25

25:                                               ; preds = %20
  %26 = getelementptr inbounds i8, ptr %3, i64 31
  %27 = load i8, ptr %26, align 1, !tbaa !11
  %28 = icmp eq i8 %27, 1
  br i1 %28, label %29, label %37

29:                                               ; preds = %25
  %30 = getelementptr inbounds i8, ptr %3, i64 29
  %31 = load i16, ptr %30, align 1, !tbaa !15
  %32 = icmp eq i16 %31, 63
  br i1 %32, label %33, label %37

33:                                               ; preds = %29
  %34 = getelementptr inbounds i8, ptr %1, i64 28
  %35 = load i32, ptr %34, align 4, !tbaa !16
  %36 = icmp eq i32 %35, %4
  br label %37

37:                                               ; preds = %25, %29, %33, %20
  %38 = phi i1 [ true, %20 ], [ false, %29 ], [ false, %25 ], [ %36, %33 ]
  br i1 %11, label %39, label %.thread

39:                                               ; preds = %37
  %40 = getelementptr inbounds i8, ptr %3, i64 31
  %41 = load i8, ptr %40, align 1, !tbaa !11
  switch i8 %41, label %.thread [
    i8 1, label %42
    i8 2, label %46
  ]

42:                                               ; preds = %39
  %43 = getelementptr inbounds i8, ptr %3, i64 27
  %44 = load i16, ptr %43, align 1, !tbaa !17
  %45 = and i16 %44, 2
  %.not = icmp eq i16 %45, 0
  br i1 %.not, label %.thread, label %.thread219.thread

46:                                               ; preds = %39
  %47 = getelementptr inbounds i8, ptr %3, i64 27
  %48 = load i16, ptr %47, align 1, !tbaa !17
  %49 = and i16 %48, 1
  %.not206 = icmp eq i16 %49, 0
  br i1 %.not206, label %.thread, label %.thread237

.thread:                                          ; preds = %39, %42, %37, %46
  %50 = getelementptr inbounds i8, ptr %1, i64 8
  %51 = load i32, ptr %50, align 4, !tbaa !10
  %52 = icmp eq i32 %51, %4
  br i1 %52, label %53, label %62

53:                                               ; preds = %.thread
  %54 = getelementptr inbounds i8, ptr %3, i64 31
  %55 = load i8, ptr %54, align 1, !tbaa !11
  %56 = icmp eq i8 %55, 2
  br i1 %56, label %57, label %62

57:                                               ; preds = %53
  %58 = getelementptr inbounds i8, ptr %3, i64 27
  %59 = load i16, ptr %58, align 1, !tbaa !17
  %60 = and i16 %59, 2
  %61 = icmp ne i16 %60, 0
  br label %62

62:                                               ; preds = %.thread, %53, %57
  %63 = phi i1 [ false, %53 ], [ false, %.thread ], [ %61, %57 ]
  br i1 %11, label %.thread219, label %.thread238

.thread219:                                       ; preds = %62
  %.phi.trans.insert = getelementptr inbounds i8, ptr %3, i64 31
  %.pre = load i8, ptr %.phi.trans.insert, align 1, !tbaa !11
  switch i8 %.pre, label %.thread238 [
    i8 1, label %.thread219.thread
    i8 2, label %.thread237
  ]

.thread219.thread:                                ; preds = %.thread219, %42
  %64 = phi i1 [ %63, %.thread219 ], [ true, %42 ]
  %65 = getelementptr inbounds i8, ptr %3, i64 27
  %66 = load i16, ptr %65, align 1, !tbaa !17
  %67 = and i16 %66, 4
  %.not207 = icmp eq i16 %67, 0
  br i1 %.not207, label %.thread238, label %.thread223.thread

.thread237:                                       ; preds = %.thread219, %46
  %68 = phi i1 [ true, %46 ], [ %63, %.thread219 ]
  %69 = getelementptr inbounds i8, ptr %3, i64 27
  %70 = load i16, ptr %69, align 1, !tbaa !17
  %71 = and i16 %70, 4
  %.not208 = icmp eq i16 %71, 0
  br i1 %.not208, label %.thread238, label %.thread240

.thread238:                                       ; preds = %.thread219, %.thread219.thread, %62, %.thread237
  %72 = phi i1 [ %68, %.thread237 ], [ %63, %62 ], [ %64, %.thread219.thread ], [ %63, %.thread219 ]
  %73 = getelementptr inbounds i8, ptr %1, i64 8
  %74 = load i32, ptr %73, align 4, !tbaa !10
  %75 = icmp eq i32 %74, %4
  br i1 %75, label %76, label %85

76:                                               ; preds = %.thread238
  %77 = getelementptr inbounds i8, ptr %3, i64 31
  %78 = load i8, ptr %77, align 1, !tbaa !11
  %79 = icmp eq i8 %78, 2
  br i1 %79, label %80, label %85

80:                                               ; preds = %76
  %81 = getelementptr inbounds i8, ptr %3, i64 27
  %82 = load i16, ptr %81, align 1, !tbaa !17
  %83 = and i16 %82, 8
  %84 = icmp ne i16 %83, 0
  br label %85

85:                                               ; preds = %.thread238, %76, %80
  %86 = phi i1 [ false, %76 ], [ false, %.thread238 ], [ %84, %80 ]
  br i1 %11, label %.thread223, label %.thread241

.thread223:                                       ; preds = %85
  %.phi.trans.insert234 = getelementptr inbounds i8, ptr %3, i64 31
  %.pre235 = load i8, ptr %.phi.trans.insert234, align 1, !tbaa !11
  switch i8 %.pre235, label %.thread241 [
    i8 1, label %.thread223.thread
    i8 2, label %.thread240
  ]

.thread223.thread:                                ; preds = %.thread223, %.thread219.thread
  %87 = phi i1 [ %72, %.thread223 ], [ %64, %.thread219.thread ]
  %88 = phi i1 [ %86, %.thread223 ], [ true, %.thread219.thread ]
  %89 = getelementptr inbounds i8, ptr %3, i64 27
  %90 = load i16, ptr %89, align 1, !tbaa !17
  %91 = and i16 %90, 8
  %.not209 = icmp eq i16 %91, 0
  br i1 %.not209, label %.thread241, label %111

.thread240:                                       ; preds = %.thread223, %.thread237
  %92 = phi i1 [ true, %.thread237 ], [ %86, %.thread223 ]
  %93 = phi i1 [ %68, %.thread237 ], [ %72, %.thread223 ]
  %94 = getelementptr inbounds i8, ptr %3, i64 27
  %95 = load i16, ptr %94, align 1, !tbaa !17
  %96 = and i16 %95, 16
  %.not210 = icmp eq i16 %96, 0
  br i1 %.not210, label %.thread241, label %111

.thread241:                                       ; preds = %.thread223, %.thread223.thread, %85, %.thread240
  %97 = phi i1 [ %93, %.thread240 ], [ %72, %85 ], [ %87, %.thread223.thread ], [ %72, %.thread223 ]
  %98 = phi i1 [ %92, %.thread240 ], [ %86, %85 ], [ %88, %.thread223.thread ], [ %86, %.thread223 ]
  %99 = getelementptr inbounds i8, ptr %1, i64 8
  %100 = load i32, ptr %99, align 4, !tbaa !10
  %101 = icmp eq i32 %100, %4
  br i1 %101, label %102, label %111

102:                                              ; preds = %.thread241
  %103 = getelementptr inbounds i8, ptr %3, i64 31
  %104 = load i8, ptr %103, align 1, !tbaa !11
  %105 = icmp eq i8 %104, 2
  br i1 %105, label %106, label %111

106:                                              ; preds = %102
  %107 = getelementptr inbounds i8, ptr %3, i64 27
  %108 = load i16, ptr %107, align 1, !tbaa !17
  %109 = and i16 %108, 32
  %110 = icmp ne i16 %109, 0
  br label %111

111:                                              ; preds = %.thread241, %102, %106, %.thread240, %.thread223.thread
  %112 = phi i1 [ %92, %.thread240 ], [ %88, %.thread223.thread ], [ %98, %102 ], [ %98, %.thread241 ], [ %98, %106 ]
  %113 = phi i1 [ %93, %.thread240 ], [ %87, %.thread223.thread ], [ %97, %102 ], [ %97, %.thread241 ], [ %97, %106 ]
  %114 = phi i1 [ true, %.thread240 ], [ true, %.thread223.thread ], [ false, %102 ], [ false, %.thread241 ], [ %110, %106 ]
  %or.cond = select i1 %113, i1 true, i1 %112
  %spec.select = select i1 %or.cond, i1 true, i1 %114
  %or.cond3 = select i1 %21, i1 true, i1 %38
  br i1 %or.cond3, label %115, label %164

115:                                              ; preds = %111
  %.in.v = select i1 %21, i64 480, i64 492
  %.in = getelementptr inbounds i8, ptr %2, i64 %.in.v
  %116 = load i32, ptr %.in, align 4, !tbaa !18
  br i1 %21, label %117, label %.sink.split262

117:                                              ; preds = %115
  %118 = getelementptr inbounds i8, ptr %1, i64 8
  %119 = load i32, ptr %118, align 4, !tbaa !10
  %120 = icmp eq i32 %119, %4
  br i1 %120, label %121, label %.sink.split262

121:                                              ; preds = %117
  %122 = getelementptr inbounds i8, ptr %3, i64 31
  %123 = load i8, ptr %122, align 1, !tbaa !11
  %124 = icmp eq i8 %123, 2
  %. = select i1 %124, i64 12, i64 8
  %125 = icmp eq i8 %123, 2
  %spec.select261 = select i1 %125, i64 16, i64 8
  br label %.sink.split262

.sink.split262:                                   ; preds = %117, %115, %121
  %.sink = phi i64 [ %spec.select261, %121 ], [ 8, %117 ], [ 12, %115 ]
  %..pn = phi i64 [ %., %121 ], [ 8, %117 ], [ 20, %115 ]
  %.in265 = getelementptr inbounds i8, ptr %2, i64 %..pn
  %126 = load i32, ptr %.in265, align 4, !tbaa !18
  %127 = getelementptr inbounds i8, ptr %3, i64 %.sink
  %128 = load i32, ptr %127, align 1, !tbaa !18
  br i1 %spec.select, label %145, label %129

129:                                              ; preds = %.sink.split262
  %130 = icmp eq i32 %7, 0
  %131 = getelementptr inbounds i8, ptr %1, i64 140
  %132 = load i32, ptr %131, align 4, !tbaa !19
  br i1 %130, label %133, label %139

133:                                              ; preds = %129
  %134 = zext i32 %116 to i64
  %135 = zext i32 %6 to i64
  %136 = mul nuw nsw i64 %134, %135
  %137 = zext i32 %126 to i64
  %138 = mul nuw nsw i64 %136, %137
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %132, i32 noundef %4, i64 noundef %138) #2
  br label %272

139:                                              ; preds = %129
  %140 = zext i32 %6 to i64
  %141 = zext i32 %126 to i64
  %142 = mul nuw nsw i64 %141, %140
  %143 = zext i32 %128 to i64
  %144 = mul nuw nsw i64 %142, %143
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %132, i32 noundef %4, i64 noundef %144) #2
  br label %272

145:                                              ; preds = %.sink.split262
  %146 = icmp eq i32 %7, 1
  %or.cond5 = and i1 %146, %113
  br i1 %or.cond5, label %.thread229, label %154

.thread229:                                       ; preds = %145
  %147 = getelementptr inbounds i8, ptr %1, i64 140
  %148 = load i32, ptr %147, align 4, !tbaa !19
  %149 = zext i32 %128 to i64
  %150 = zext i32 %6 to i64
  %151 = zext i32 %126 to i64
  %152 = mul nuw i64 %151, %150
  %153 = mul i64 %152, %149
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %148, i32 noundef %4, i64 noundef %153) #2
  br label %272

154:                                              ; preds = %145
  %155 = icmp eq i32 %7, 0
  %or.cond7 = and i1 %155, %112
  br i1 %or.cond7, label %156, label %272

156:                                              ; preds = %154
  %157 = getelementptr inbounds i8, ptr %1, i64 140
  %158 = load i32, ptr %157, align 4, !tbaa !19
  %159 = zext i32 %116 to i64
  %160 = zext i32 %6 to i64
  %161 = mul nuw nsw i64 %159, %160
  %162 = zext i32 %126 to i64
  %163 = mul nuw nsw i64 %161, %162
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %158, i32 noundef %4, i64 noundef %163) #2
  br label %272

164:                                              ; preds = %111
  %165 = getelementptr inbounds i8, ptr %3, i64 31
  %166 = load i8, ptr %165, align 1, !tbaa !11
  %167 = icmp eq i8 %166, 1
  br i1 %167, label %168, label %272

168:                                              ; preds = %164
  %169 = getelementptr inbounds i8, ptr %3, i64 29
  %170 = load i16, ptr %169, align 1, !tbaa !15
  switch i16 %170, label %186 [
    i16 5, label %171
    i16 34, label %171
  ]

171:                                              ; preds = %168, %168
  %172 = getelementptr inbounds i8, ptr %3, i64 27
  %173 = load i16, ptr %172, align 1, !tbaa !17
  %174 = and i16 %173, 1
  %.not211 = icmp eq i16 %174, 0
  br i1 %.not211, label %thread-pre-split, label %thread-pre-split.sink.split

thread-pre-split.sink.split:                      ; preds = %171
  %175 = icmp eq i32 %7, 0
  %176 = getelementptr inbounds i8, ptr %1, i64 36
  %177 = load i32, ptr %176, align 4, !tbaa !20
  %178 = getelementptr inbounds i8, ptr %1, i64 140
  %179 = load i32, ptr %178, align 4, !tbaa !19
  %180 = zext i32 %6 to i64
  %.258 = select i1 %175, i64 492, i64 68
  %181 = getelementptr inbounds i8, ptr %2, i64 %.258
  %182 = load i32, ptr %181, align 4, !tbaa !18
  %183 = zext i32 %182 to i64
  %184 = mul nuw nsw i64 %183, %180
  %185 = lshr i64 %184, 3
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %177, i32 noundef %179, i32 noundef %177, i64 noundef %185) #2
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.sink.split, %171
  %.pr = load i16, ptr %169, align 1, !tbaa !15
  br label %186

186:                                              ; preds = %thread-pre-split, %168
  %187 = phi i16 [ %.pr, %thread-pre-split ], [ %170, %168 ]
  switch i16 %187, label %225 [
    i16 6, label %188
    i16 35, label %188
    i16 37, label %188
  ]

188:                                              ; preds = %186, %186, %186
  %189 = getelementptr inbounds i8, ptr %3, i64 27
  %190 = load i16, ptr %189, align 1, !tbaa !17
  %191 = and i16 %190, 1
  %.not212 = icmp eq i16 %191, 0
  %.not213 = icmp eq i16 %187, 37
  %or.cond233 = or i1 %.not213, %.not212
  %192 = icmp eq i32 %7, 0
  %193 = getelementptr inbounds i8, ptr %1, i64 140
  %194 = load i32, ptr %193, align 4, !tbaa !19
  %195 = zext i32 %6 to i64
  br i1 %or.cond233, label %209, label %196

196:                                              ; preds = %188
  br i1 %192, label %197, label %203

197:                                              ; preds = %196
  %198 = getelementptr inbounds i8, ptr %2, i64 480
  %199 = load i32, ptr %198, align 4, !tbaa !21
  %200 = zext i32 %199 to i64
  %201 = mul nuw nsw i64 %200, %195
  %202 = lshr i64 %201, 3
  br label %.sink.split

203:                                              ; preds = %196
  %204 = getelementptr inbounds i8, ptr %2, i64 64
  %205 = load i32, ptr %204, align 4, !tbaa !23
  %206 = zext i32 %205 to i64
  %207 = mul nuw nsw i64 %206, %195
  %208 = lshr i64 %207, 3
  br label %.sink.split

209:                                              ; preds = %188
  %210 = getelementptr inbounds i8, ptr %2, i64 8
  %211 = load i32, ptr %210, align 4, !tbaa !24
  %212 = zext i32 %211 to i64
  br i1 %192, label %213, label %219

213:                                              ; preds = %209
  %214 = getelementptr inbounds i8, ptr %2, i64 480
  %215 = load i32, ptr %214, align 4, !tbaa !21
  %216 = zext i32 %215 to i64
  %217 = mul nuw nsw i64 %216, %195
  %218 = mul nuw nsw i64 %217, %212
  br label %.sink.split

219:                                              ; preds = %209
  %220 = getelementptr inbounds i8, ptr %3, i64 8
  %221 = load i32, ptr %220, align 1, !tbaa !25
  %222 = zext i32 %221 to i64
  %223 = mul nuw nsw i64 %222, %195
  %224 = mul nuw nsw i64 %223, %212
  br label %.sink.split

.sink.split:                                      ; preds = %213, %219, %197, %203
  %.sink259 = phi i64 [ %208, %203 ], [ %202, %197 ], [ %224, %219 ], [ %218, %213 ]
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %194, i32 noundef %4, i64 noundef %.sink259) #2
  br label %225

225:                                              ; preds = %.sink.split, %186
  %226 = load i16, ptr %169, align 1, !tbaa !15
  %227 = icmp eq i16 %226, 25
  br i1 %227, label %228, label %243

228:                                              ; preds = %225
  %229 = getelementptr inbounds i8, ptr %3, i64 27
  %230 = load i16, ptr %229, align 1, !tbaa !17
  %231 = and i16 %230, 1
  %.not214 = icmp eq i16 %231, 0
  br i1 %.not214, label %thread-pre-split231, label %thread-pre-split231.sink.split

thread-pre-split231.sink.split:                   ; preds = %228
  %232 = icmp eq i32 %7, 0
  %233 = getelementptr inbounds i8, ptr %1, i64 52
  %234 = load i32, ptr %233, align 4, !tbaa !26
  %235 = getelementptr inbounds i8, ptr %1, i64 140
  %236 = load i32, ptr %235, align 4, !tbaa !19
  %237 = zext i32 %6 to i64
  %.260 = select i1 %232, i64 492, i64 68
  %238 = getelementptr inbounds i8, ptr %2, i64 %.260
  %239 = load i32, ptr %238, align 4, !tbaa !18
  %240 = zext i32 %239 to i64
  %241 = mul nuw nsw i64 %240, %237
  %242 = lshr i64 %241, 3
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %234, i32 noundef %236, i32 noundef %234, i64 noundef %242) #2
  br label %thread-pre-split231

thread-pre-split231:                              ; preds = %thread-pre-split231.sink.split, %228
  %.pr232 = load i16, ptr %169, align 1, !tbaa !15
  br label %243

243:                                              ; preds = %thread-pre-split231, %225
  %244 = phi i16 [ %.pr232, %thread-pre-split231 ], [ %226, %225 ]
  %245 = icmp eq i16 %244, 26
  br i1 %245, label %246, label %272

246:                                              ; preds = %243
  %247 = getelementptr inbounds i8, ptr %3, i64 27
  %248 = load i16, ptr %247, align 1, !tbaa !17
  %249 = and i16 %248, 1
  %.not215 = icmp eq i16 %249, 0
  br i1 %.not215, label %267, label %250

250:                                              ; preds = %246
  %251 = icmp eq i32 %7, 0
  %252 = getelementptr inbounds i8, ptr %1, i64 140
  %253 = load i32, ptr %252, align 4, !tbaa !19
  %254 = zext i32 %6 to i64
  br i1 %251, label %255, label %261

255:                                              ; preds = %250
  %256 = getelementptr inbounds i8, ptr %2, i64 480
  %257 = load i32, ptr %256, align 4, !tbaa !21
  %258 = zext i32 %257 to i64
  %259 = mul nuw nsw i64 %258, %254
  %260 = lshr i64 %259, 3
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %253, i32 noundef %4, i64 noundef %260) #2
  br label %272

261:                                              ; preds = %250
  %262 = getelementptr inbounds i8, ptr %2, i64 64
  %263 = load i32, ptr %262, align 4, !tbaa !23
  %264 = zext i32 %263 to i64
  %265 = mul nuw nsw i64 %264, %254
  %266 = lshr i64 %265, 3
  tail call void @libxsmm_rv64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %253, i32 noundef %4, i64 noundef %266) #2
  br label %272

267:                                              ; preds = %246
  %268 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !18
  %269 = icmp ugt i32 %268, 1
  %270 = load i32, ptr @libxsmm_verbosity, align 4
  %271 = select i1 %269, i32 %270, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90045, ptr noundef nonnull @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_rv64_gp_reg, ptr noundef nonnull @.str, i32 noundef 199, i32 noundef %271) #2
  br label %272

272:                                              ; preds = %.thread229, %243, %255, %261, %164, %154, %156, %133, %139, %267
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 4}
!6 = !{!"libxsmm_mateltwise_gp_reg_mapping_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 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!12, !8, i64 31}
!12 = !{!"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, !13, i64 27, !13, i64 29, !8, i64 31}
!13 = !{!"short", !8, i64 0}
!14 = !{!6, !7, i64 24}
!15 = !{!12, !13, i64 29}
!16 = !{!6, !7, i64 28}
!17 = !{!12, !13, i64 27}
!18 = !{!7, !7, i64 0}
!19 = !{!6, !7, i64 140}
!20 = !{!6, !7, i64 36}
!21 = !{!22, !7, i64 480}
!22 = !{!"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}
!23 = !{!22, !7, i64 64}
!24 = !{!22, !7, i64 8}
!25 = !{!12, !7, i64 8}
!26 = !{!6, !7, i64 52}


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