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

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

%struct.libxsmm_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 [100 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_gp_reg = external hidden unnamed_addr constant [76 x i8], align 1

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #1

declare void @libxsmm_x86_instruction_alu_imm(ptr 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_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 i64, align 8
  %27 = alloca i64, align 8
  %28 = 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
  %29 = load i32, ptr %13, align 4, !tbaa !9
  %30 = load ptr, ptr %10, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %30, i32 0, i32 1
  %32 = load i32, ptr %31, align 4, !tbaa !11
  %33 = icmp eq i32 %29, %32
  br i1 %33, label %66, label %34

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

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

46:                                               ; preds = %40
  %47 = load ptr, ptr %12, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %47, i32 0, i32 11
  %49 = load i8, ptr %48, align 1, !tbaa !14
  %50 = zext i8 %49 to i32
  %51 = icmp eq i32 %50, 3
  br i1 %51, label %66, label %52

52:                                               ; preds = %46, %34
  %53 = load i32, ptr %13, align 4, !tbaa !9
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %54, i32 0, i32 3
  %56 = load i32, ptr %55, align 4, !tbaa !17
  %57 = icmp eq i32 %53, %56
  br i1 %57, label %58, label %64

58:                                               ; preds = %52
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %59, i32 0, i32 11
  %61 = load i8, ptr %60, align 1, !tbaa !14
  %62 = zext i8 %61 to i32
  %63 = icmp eq i32 %62, 3
  br label %64

64:                                               ; preds = %58, %52
  %65 = phi i1 [ false, %52 ], [ %63, %58 ]
  br label %66

66:                                               ; preds = %64, %46, %40, %8
  %67 = phi i1 [ true, %46 ], [ true, %40 ], [ true, %8 ], [ %65, %64 ]
  %68 = zext i1 %67 to i64
  %69 = select i1 %67, i32 1, i32 0
  store i32 %69, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #3
  %70 = load i32, ptr %13, align 4, !tbaa !9
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %71, i32 0, i32 6
  %73 = load i32, ptr %72, align 4, !tbaa !18
  %74 = icmp eq i32 %70, %73
  br i1 %74, label %95, label %75

75:                                               ; preds = %66
  %76 = load ptr, ptr %12, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %76, i32 0, i32 11
  %78 = load i8, ptr %77, align 1, !tbaa !14
  %79 = zext i8 %78 to i32
  %80 = icmp eq i32 %79, 1
  br i1 %80, label %81, label %93

81:                                               ; preds = %75
  %82 = load ptr, ptr %12, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %82, i32 0, i32 10
  %84 = load i16, ptr %83, align 1, !tbaa !19
  %85 = zext i16 %84 to i32
  %86 = icmp eq i32 %85, 63
  br i1 %86, label %87, label %93

87:                                               ; preds = %81
  %88 = load i32, ptr %13, align 4, !tbaa !9
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %89, i32 0, i32 7
  %91 = load i32, ptr %90, align 4, !tbaa !20
  %92 = icmp eq i32 %88, %91
  br label %93

93:                                               ; preds = %87, %81, %75
  %94 = phi i1 [ false, %81 ], [ false, %75 ], [ %92, %87 ]
  br label %95

95:                                               ; preds = %93, %66
  %96 = phi i1 [ true, %66 ], [ %94, %93 ]
  %97 = zext i1 %96 to i64
  %98 = select i1 %96, i32 1, i32 0
  store i32 %98, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %99 = load i32, ptr %13, align 4, !tbaa !9
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %100, i32 0, i32 1
  %102 = load i32, ptr %101, align 4, !tbaa !11
  %103 = icmp eq i32 %99, %102
  br i1 %103, label %104, label %117

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

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

117:                                              ; preds = %110, %104, %95
  %118 = load i32, ptr %13, align 4, !tbaa !9
  %119 = load ptr, ptr %10, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %119, i32 0, i32 1
  %121 = load i32, ptr %120, align 4, !tbaa !11
  %122 = icmp eq i32 %118, %121
  br i1 %122, label %123, label %136

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

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

136:                                              ; preds = %129, %123, %117
  %137 = load i32, ptr %13, align 4, !tbaa !9
  %138 = load ptr, ptr %10, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %138, i32 0, i32 1
  %140 = load i32, ptr %139, align 4, !tbaa !11
  %141 = icmp eq i32 %137, %140
  br i1 %141, label %142, label %155

142:                                              ; preds = %136
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %143, i32 0, i32 11
  %145 = load i8, ptr %144, align 1, !tbaa !14
  %146 = zext i8 %145 to i32
  %147 = icmp eq i32 %146, 3
  br i1 %147, label %148, label %155

148:                                              ; preds = %142
  %149 = load ptr, ptr %12, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %149, i32 0, i32 9
  %151 = load i16, ptr %150, align 1, !tbaa !21
  %152 = zext i16 %151 to i32
  %153 = and i32 %152, 1
  %154 = icmp sgt i32 %153, 0
  br i1 %154, label %214, label %155

155:                                              ; preds = %148, %142, %136
  %156 = load i32, ptr %13, align 4, !tbaa !9
  %157 = load ptr, ptr %10, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %157, i32 0, i32 2
  %159 = load i32, ptr %158, align 4, !tbaa !13
  %160 = icmp eq i32 %156, %159
  br i1 %160, label %161, label %174

161:                                              ; preds = %155
  %162 = load ptr, ptr %12, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %162, i32 0, i32 11
  %164 = load i8, ptr %163, align 1, !tbaa !14
  %165 = zext i8 %164 to i32
  %166 = icmp eq i32 %165, 2
  br i1 %166, label %167, label %174

167:                                              ; preds = %161
  %168 = load ptr, ptr %12, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %168, i32 0, i32 9
  %170 = load i16, ptr %169, align 1, !tbaa !21
  %171 = zext i16 %170 to i32
  %172 = and i32 %171, 2
  %173 = icmp sgt i32 %172, 0
  br i1 %173, label %214, label %174

174:                                              ; preds = %167, %161, %155
  %175 = load i32, ptr %13, align 4, !tbaa !9
  %176 = load ptr, ptr %10, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %176, i32 0, i32 2
  %178 = load i32, ptr %177, align 4, !tbaa !13
  %179 = icmp eq i32 %175, %178
  br i1 %179, label %180, label %193

180:                                              ; preds = %174
  %181 = load ptr, ptr %12, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %181, i32 0, i32 11
  %183 = load i8, ptr %182, align 1, !tbaa !14
  %184 = zext i8 %183 to i32
  %185 = icmp eq i32 %184, 3
  br i1 %185, label %186, label %193

186:                                              ; preds = %180
  %187 = load ptr, ptr %12, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %187, i32 0, i32 9
  %189 = load i16, ptr %188, align 1, !tbaa !21
  %190 = zext i16 %189 to i32
  %191 = and i32 %190, 2
  %192 = icmp sgt i32 %191, 0
  br i1 %192, label %214, label %193

193:                                              ; preds = %186, %180, %174
  %194 = load i32, ptr %13, align 4, !tbaa !9
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %195, i32 0, i32 3
  %197 = load i32, ptr %196, align 4, !tbaa !17
  %198 = icmp eq i32 %194, %197
  br i1 %198, label %199, label %212

199:                                              ; preds = %193
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %200, i32 0, i32 11
  %202 = load i8, ptr %201, align 1, !tbaa !14
  %203 = zext i8 %202 to i32
  %204 = icmp eq i32 %203, 3
  br i1 %204, label %205, label %212

205:                                              ; preds = %199
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %206, i32 0, i32 9
  %208 = load i16, ptr %207, align 1, !tbaa !21
  %209 = zext i16 %208 to i32
  %210 = and i32 %209, 4
  %211 = icmp sgt i32 %210, 0
  br label %212

212:                                              ; preds = %205, %199, %193
  %213 = phi i1 [ false, %199 ], [ false, %193 ], [ %211, %205 ]
  br label %214

214:                                              ; preds = %212, %186, %167, %148, %129, %110
  %215 = phi i1 [ true, %186 ], [ true, %167 ], [ true, %148 ], [ true, %129 ], [ true, %110 ], [ %213, %212 ]
  %216 = zext i1 %215 to i64
  %217 = select i1 %215, i32 1, i32 0
  store i32 %217, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %218 = load i32, ptr %13, align 4, !tbaa !9
  %219 = load ptr, ptr %10, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %219, i32 0, i32 1
  %221 = load i32, ptr %220, align 4, !tbaa !11
  %222 = icmp eq i32 %218, %221
  br i1 %222, label %223, label %236

223:                                              ; preds = %214
  %224 = load ptr, ptr %12, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %224, i32 0, i32 11
  %226 = load i8, ptr %225, align 1, !tbaa !14
  %227 = zext i8 %226 to i32
  %228 = icmp eq i32 %227, 1
  br i1 %228, label %229, label %236

229:                                              ; preds = %223
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %230, i32 0, i32 9
  %232 = load i16, ptr %231, align 1, !tbaa !21
  %233 = zext i16 %232 to i32
  %234 = and i32 %233, 4
  %235 = icmp sgt i32 %234, 0
  br i1 %235, label %333, label %236

236:                                              ; preds = %229, %223, %214
  %237 = load i32, ptr %13, align 4, !tbaa !9
  %238 = load ptr, ptr %10, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %238, i32 0, i32 1
  %240 = load i32, ptr %239, align 4, !tbaa !11
  %241 = icmp eq i32 %237, %240
  br i1 %241, label %242, label %255

242:                                              ; preds = %236
  %243 = load ptr, ptr %12, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %243, i32 0, i32 11
  %245 = load i8, ptr %244, align 1, !tbaa !14
  %246 = zext i8 %245 to i32
  %247 = icmp eq i32 %246, 2
  br i1 %247, label %248, label %255

248:                                              ; preds = %242
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %249, i32 0, i32 9
  %251 = load i16, ptr %250, align 1, !tbaa !21
  %252 = zext i16 %251 to i32
  %253 = and i32 %252, 4
  %254 = icmp sgt i32 %253, 0
  br i1 %254, label %333, label %255

255:                                              ; preds = %248, %242, %236
  %256 = load i32, ptr %13, align 4, !tbaa !9
  %257 = load ptr, ptr %10, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %257, i32 0, i32 1
  %259 = load i32, ptr %258, align 4, !tbaa !11
  %260 = icmp eq i32 %256, %259
  br i1 %260, label %261, label %274

261:                                              ; preds = %255
  %262 = load ptr, ptr %12, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %262, i32 0, i32 11
  %264 = load i8, ptr %263, align 1, !tbaa !14
  %265 = zext i8 %264 to i32
  %266 = icmp eq i32 %265, 3
  br i1 %266, label %267, label %274

267:                                              ; preds = %261
  %268 = load ptr, ptr %12, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %268, i32 0, i32 9
  %270 = load i16, ptr %269, align 1, !tbaa !21
  %271 = zext i16 %270 to i32
  %272 = and i32 %271, 8
  %273 = icmp sgt i32 %272, 0
  br i1 %273, label %333, label %274

274:                                              ; preds = %267, %261, %255
  %275 = load i32, ptr %13, align 4, !tbaa !9
  %276 = load ptr, ptr %10, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %276, i32 0, i32 2
  %278 = load i32, ptr %277, align 4, !tbaa !13
  %279 = icmp eq i32 %275, %278
  br i1 %279, label %280, label %293

280:                                              ; preds = %274
  %281 = load ptr, ptr %12, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %281, i32 0, i32 11
  %283 = load i8, ptr %282, align 1, !tbaa !14
  %284 = zext i8 %283 to i32
  %285 = icmp eq i32 %284, 2
  br i1 %285, label %286, label %293

286:                                              ; preds = %280
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %287, i32 0, i32 9
  %289 = load i16, ptr %288, align 1, !tbaa !21
  %290 = zext i16 %289 to i32
  %291 = and i32 %290, 8
  %292 = icmp sgt i32 %291, 0
  br i1 %292, label %333, label %293

293:                                              ; preds = %286, %280, %274
  %294 = load i32, ptr %13, align 4, !tbaa !9
  %295 = load ptr, ptr %10, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %295, i32 0, i32 2
  %297 = load i32, ptr %296, align 4, !tbaa !13
  %298 = icmp eq i32 %294, %297
  br i1 %298, label %299, label %312

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

305:                                              ; preds = %299
  %306 = load ptr, ptr %12, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %306, i32 0, i32 9
  %308 = load i16, ptr %307, align 1, !tbaa !21
  %309 = zext i16 %308 to i32
  %310 = and i32 %309, 16
  %311 = icmp sgt i32 %310, 0
  br i1 %311, label %333, label %312

312:                                              ; preds = %305, %299, %293
  %313 = load i32, ptr %13, align 4, !tbaa !9
  %314 = load ptr, ptr %10, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %314, i32 0, i32 3
  %316 = load i32, ptr %315, align 4, !tbaa !17
  %317 = icmp eq i32 %313, %316
  br i1 %317, label %318, label %331

318:                                              ; preds = %312
  %319 = load ptr, ptr %12, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %319, i32 0, i32 11
  %321 = load i8, ptr %320, align 1, !tbaa !14
  %322 = zext i8 %321 to i32
  %323 = icmp eq i32 %322, 3
  br i1 %323, label %324, label %331

324:                                              ; preds = %318
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %325, i32 0, i32 9
  %327 = load i16, ptr %326, align 1, !tbaa !21
  %328 = zext i16 %327 to i32
  %329 = and i32 %328, 32
  %330 = icmp sgt i32 %329, 0
  br label %331

331:                                              ; preds = %324, %318, %312
  %332 = phi i1 [ false, %318 ], [ false, %312 ], [ %330, %324 ]
  br label %333

333:                                              ; preds = %331, %305, %286, %267, %248, %229
  %334 = phi i1 [ true, %305 ], [ true, %286 ], [ true, %267 ], [ true, %248 ], [ true, %229 ], [ %332, %331 ]
  %335 = zext i1 %334 to i64
  %336 = select i1 %334, i32 1, i32 0
  store i32 %336, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %337 = load i32, ptr %13, align 4, !tbaa !9
  %338 = load ptr, ptr %10, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %338, i32 0, i32 1
  %340 = load i32, ptr %339, align 4, !tbaa !11
  %341 = icmp eq i32 %337, %340
  br i1 %341, label %342, label %355

342:                                              ; preds = %333
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %343, i32 0, i32 11
  %345 = load i8, ptr %344, align 1, !tbaa !14
  %346 = zext i8 %345 to i32
  %347 = icmp eq i32 %346, 1
  br i1 %347, label %348, label %355

348:                                              ; preds = %342
  %349 = load ptr, ptr %12, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %349, i32 0, i32 9
  %351 = load i16, ptr %350, align 1, !tbaa !21
  %352 = zext i16 %351 to i32
  %353 = and i32 %352, 8
  %354 = icmp sgt i32 %353, 0
  br i1 %354, label %452, label %355

355:                                              ; preds = %348, %342, %333
  %356 = load i32, ptr %13, align 4, !tbaa !9
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %357, i32 0, i32 1
  %359 = load i32, ptr %358, align 4, !tbaa !11
  %360 = icmp eq i32 %356, %359
  br i1 %360, label %361, label %374

361:                                              ; preds = %355
  %362 = load ptr, ptr %12, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %362, i32 0, i32 11
  %364 = load i8, ptr %363, align 1, !tbaa !14
  %365 = zext i8 %364 to i32
  %366 = icmp eq i32 %365, 2
  br i1 %366, label %367, label %374

367:                                              ; preds = %361
  %368 = load ptr, ptr %12, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %368, i32 0, i32 9
  %370 = load i16, ptr %369, align 1, !tbaa !21
  %371 = zext i16 %370 to i32
  %372 = and i32 %371, 16
  %373 = icmp sgt i32 %372, 0
  br i1 %373, label %452, label %374

374:                                              ; preds = %367, %361, %355
  %375 = load i32, ptr %13, align 4, !tbaa !9
  %376 = load ptr, ptr %10, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %376, i32 0, i32 1
  %378 = load i32, ptr %377, align 4, !tbaa !11
  %379 = icmp eq i32 %375, %378
  br i1 %379, label %380, label %393

380:                                              ; preds = %374
  %381 = load ptr, ptr %12, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %381, i32 0, i32 11
  %383 = load i8, ptr %382, align 1, !tbaa !14
  %384 = zext i8 %383 to i32
  %385 = icmp eq i32 %384, 3
  br i1 %385, label %386, label %393

386:                                              ; preds = %380
  %387 = load ptr, ptr %12, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %387, i32 0, i32 9
  %389 = load i16, ptr %388, align 1, !tbaa !21
  %390 = zext i16 %389 to i32
  %391 = and i32 %390, 64
  %392 = icmp sgt i32 %391, 0
  br i1 %392, label %452, label %393

393:                                              ; preds = %386, %380, %374
  %394 = load i32, ptr %13, align 4, !tbaa !9
  %395 = load ptr, ptr %10, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %395, i32 0, i32 2
  %397 = load i32, ptr %396, align 4, !tbaa !13
  %398 = icmp eq i32 %394, %397
  br i1 %398, label %399, label %412

399:                                              ; preds = %393
  %400 = load ptr, ptr %12, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %400, i32 0, i32 11
  %402 = load i8, ptr %401, align 1, !tbaa !14
  %403 = zext i8 %402 to i32
  %404 = icmp eq i32 %403, 2
  br i1 %404, label %405, label %412

405:                                              ; preds = %399
  %406 = load ptr, ptr %12, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %406, i32 0, i32 9
  %408 = load i16, ptr %407, align 1, !tbaa !21
  %409 = zext i16 %408 to i32
  %410 = and i32 %409, 32
  %411 = icmp sgt i32 %410, 0
  br i1 %411, label %452, label %412

412:                                              ; preds = %405, %399, %393
  %413 = load i32, ptr %13, align 4, !tbaa !9
  %414 = load ptr, ptr %10, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %414, i32 0, i32 2
  %416 = load i32, ptr %415, align 4, !tbaa !13
  %417 = icmp eq i32 %413, %416
  br i1 %417, label %418, label %431

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

424:                                              ; preds = %418
  %425 = load ptr, ptr %12, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %425, i32 0, i32 9
  %427 = load i16, ptr %426, align 1, !tbaa !21
  %428 = zext i16 %427 to i32
  %429 = and i32 %428, 128
  %430 = icmp sgt i32 %429, 0
  br i1 %430, label %452, label %431

431:                                              ; preds = %424, %418, %412
  %432 = load i32, ptr %13, align 4, !tbaa !9
  %433 = load ptr, ptr %10, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %433, i32 0, i32 3
  %435 = load i32, ptr %434, align 4, !tbaa !17
  %436 = icmp eq i32 %432, %435
  br i1 %436, label %437, label %450

437:                                              ; preds = %431
  %438 = load ptr, ptr %12, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %438, i32 0, i32 11
  %440 = load i8, ptr %439, align 1, !tbaa !14
  %441 = zext i8 %440 to i32
  %442 = icmp eq i32 %441, 3
  br i1 %442, label %443, label %450

443:                                              ; preds = %437
  %444 = load ptr, ptr %12, align 8, !tbaa !5
  %445 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %444, i32 0, i32 9
  %446 = load i16, ptr %445, align 1, !tbaa !21
  %447 = zext i16 %446 to i32
  %448 = and i32 %447, 256
  %449 = icmp sgt i32 %448, 0
  br label %450

450:                                              ; preds = %443, %437, %431
  %451 = phi i1 [ false, %437 ], [ false, %431 ], [ %449, %443 ]
  br label %452

452:                                              ; preds = %450, %424, %405, %386, %367, %348
  %453 = phi i1 [ true, %424 ], [ true, %405 ], [ true, %386 ], [ true, %367 ], [ true, %348 ], [ %451, %450 ]
  %454 = zext i1 %453 to i64
  %455 = select i1 %453, i32 1, i32 0
  store i32 %455, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %456 = load i32, ptr %19, align 4, !tbaa !9
  %457 = icmp eq i32 %456, 1
  br i1 %457, label %464, label %458

458:                                              ; preds = %452
  %459 = load i32, ptr %20, align 4, !tbaa !9
  %460 = icmp eq i32 %459, 1
  br i1 %460, label %464, label %461

461:                                              ; preds = %458
  %462 = load i32, ptr %21, align 4, !tbaa !9
  %463 = icmp eq i32 %462, 1
  br label %464

464:                                              ; preds = %461, %458, %452
  %465 = phi i1 [ true, %458 ], [ true, %452 ], [ %463, %461 ]
  %466 = zext i1 %465 to i64
  %467 = select i1 %465, i32 1, i32 0
  store i32 %467, ptr %22, align 4, !tbaa !9
  %468 = load i32, ptr %17, align 4, !tbaa !9
  %469 = icmp ugt i32 %468, 0
  br i1 %469, label %473, label %470

470:                                              ; preds = %464
  %471 = load i32, ptr %18, align 4, !tbaa !9
  %472 = icmp ugt i32 %471, 0
  br i1 %472, label %473, label %703

473:                                              ; preds = %470, %464
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %474 = load i32, ptr %17, align 4, !tbaa !9
  %475 = icmp ugt i32 %474, 0
  br i1 %475, label %476, label %480

476:                                              ; preds = %473
  %477 = load ptr, ptr %11, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %477, i32 0, i32 120
  %479 = load i32, ptr %478, align 4, !tbaa !22
  br label %484

480:                                              ; preds = %473
  %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 !24
  br label %484

484:                                              ; preds = %480, %476
  %485 = phi i32 [ %479, %476 ], [ %483, %480 ]
  store i32 %485, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %486 = load i32, ptr %17, align 4, !tbaa !9
  %487 = icmp ugt i32 %486, 0
  br i1 %487, label %488, label %516

488:                                              ; preds = %484
  %489 = load i32, ptr %13, align 4, !tbaa !9
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %490, i32 0, i32 2
  %492 = load i32, ptr %491, align 4, !tbaa !13
  %493 = icmp eq i32 %489, %492
  br i1 %493, label %494, label %510

494:                                              ; preds = %488
  %495 = load ptr, ptr %12, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %495, i32 0, i32 11
  %497 = load i8, ptr %496, align 1, !tbaa !14
  %498 = zext i8 %497 to i32
  %499 = icmp eq i32 %498, 2
  br i1 %499, label %506, label %500

500:                                              ; preds = %494
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %501, i32 0, i32 11
  %503 = load i8, ptr %502, align 1, !tbaa !14
  %504 = zext i8 %503 to i32
  %505 = icmp eq i32 %504, 3
  br i1 %505, label %506, label %510

506:                                              ; preds = %500, %494
  %507 = load ptr, ptr %11, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %507, i32 0, i32 3
  %509 = load i32, ptr %508, align 4, !tbaa !25
  br label %514

510:                                              ; preds = %500, %488
  %511 = load ptr, ptr %11, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %511, i32 0, i32 2
  %513 = load i32, ptr %512, align 4, !tbaa !26
  br label %514

514:                                              ; preds = %510, %506
  %515 = phi i32 [ %509, %506 ], [ %513, %510 ]
  br label %520

516:                                              ; preds = %484
  %517 = load ptr, ptr %11, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %517, i32 0, i32 5
  %519 = load i32, ptr %518, align 4, !tbaa !27
  br label %520

520:                                              ; preds = %516, %514
  %521 = phi i32 [ %515, %514 ], [ %519, %516 ]
  store i32 %521, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %522 = load i32, ptr %17, align 4, !tbaa !9
  %523 = icmp ugt i32 %522, 0
  br i1 %523, label %524, label %552

524:                                              ; preds = %520
  %525 = load i32, ptr %13, align 4, !tbaa !9
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %526, i32 0, i32 2
  %528 = load i32, ptr %527, align 4, !tbaa !13
  %529 = icmp eq i32 %525, %528
  br i1 %529, label %530, label %546

530:                                              ; preds = %524
  %531 = load ptr, ptr %12, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %531, i32 0, i32 11
  %533 = load i8, ptr %532, align 1, !tbaa !14
  %534 = zext i8 %533 to i32
  %535 = icmp eq i32 %534, 2
  br i1 %535, label %542, label %536

536:                                              ; preds = %530
  %537 = load ptr, ptr %12, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %537, i32 0, i32 11
  %539 = load i8, ptr %538, align 1, !tbaa !14
  %540 = zext i8 %539 to i32
  %541 = icmp eq i32 %540, 3
  br i1 %541, label %542, label %546

542:                                              ; preds = %536, %530
  %543 = load ptr, ptr %12, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %543, i32 0, i32 4
  %545 = load i32, ptr %544, align 1, !tbaa !28
  br label %550

546:                                              ; preds = %536, %524
  %547 = load ptr, ptr %12, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %547, i32 0, i32 2
  %549 = load i32, ptr %548, align 1, !tbaa !29
  br label %550

550:                                              ; preds = %546, %542
  %551 = phi i32 [ %545, %542 ], [ %549, %546 ]
  br label %556

552:                                              ; preds = %520
  %553 = load ptr, ptr %12, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %553, i32 0, i32 3
  %555 = load i32, ptr %554, align 1, !tbaa !30
  br label %556

556:                                              ; preds = %552, %550
  %557 = phi i32 [ %551, %550 ], [ %555, %552 ]
  store i32 %557, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  %558 = load i32, ptr %23, align 4, !tbaa !9
  %559 = zext i32 %558 to i64
  %560 = load i32, ptr %15, align 4, !tbaa !9
  %561 = zext i32 %560 to i64
  %562 = mul nsw i64 %559, %561
  %563 = load i32, ptr %24, align 4, !tbaa !9
  %564 = zext i32 %563 to i64
  %565 = mul nsw i64 %562, %564
  store i64 %565, ptr %26, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  %566 = load i32, ptr %25, align 4, !tbaa !9
  %567 = zext i32 %566 to i64
  %568 = load i32, ptr %15, align 4, !tbaa !9
  %569 = zext i32 %568 to i64
  %570 = mul nsw i64 %567, %569
  %571 = load i32, ptr %24, align 4, !tbaa !9
  %572 = zext i32 %571 to i64
  %573 = mul nsw i64 %570, %572
  store i64 %573, ptr %27, align 8, !tbaa !31
  %574 = load i32, ptr %17, align 4, !tbaa !9
  %575 = icmp ugt i32 %574, 0
  br i1 %575, label %576, label %628

576:                                              ; preds = %556
  %577 = load i32, ptr %13, align 4, !tbaa !9
  %578 = load ptr, ptr %10, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %578, i32 0, i32 3
  %580 = load i32, ptr %579, align 4, !tbaa !17
  %581 = icmp eq i32 %577, %580
  br i1 %581, label %582, label %628

582:                                              ; preds = %576
  %583 = load ptr, ptr %12, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %583, i32 0, i32 11
  %585 = load i8, ptr %584, align 1, !tbaa !14
  %586 = zext i8 %585 to i32
  %587 = icmp eq i32 %586, 3
  br i1 %587, label %588, label %628

588:                                              ; preds = %582
  %589 = load ptr, ptr %11, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %589, i32 0, i32 4
  %591 = load i32, ptr %590, align 4, !tbaa !33
  store i32 %591, ptr %24, align 4, !tbaa !9
  %592 = load ptr, ptr %12, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %592, i32 0, i32 5
  %594 = load i32, ptr %593, align 1, !tbaa !34
  store i32 %594, ptr %25, align 4, !tbaa !9
  %595 = load ptr, ptr %12, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %595, i32 0, i32 10
  %597 = load i16, ptr %596, align 1, !tbaa !19
  %598 = zext i16 %597 to i32
  %599 = icmp eq i32 %598, 3
  br i1 %599, label %600, label %627

600:                                              ; preds = %588
  store i32 1, ptr %24, align 4, !tbaa !9
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %601, i32 0, i32 9
  %603 = load i16, ptr %602, align 1, !tbaa !21
  %604 = zext i16 %603 to i32
  %605 = and i32 %604, 1024
  %606 = icmp sgt i32 %605, 0
  br i1 %606, label %607, label %612

607:                                              ; preds = %600
  %608 = load i32, ptr %25, align 4, !tbaa !9
  %609 = add i32 %608, 15
  %610 = udiv i32 %609, 16
  %611 = mul i32 %610, 16
  store i32 %611, ptr %25, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %607, %600
  %613 = load i32, ptr %23, align 4, !tbaa !9
  %614 = load i32, ptr %15, align 4, !tbaa !9
  %615 = mul i32 %613, %614
  %616 = load i32, ptr %24, align 4, !tbaa !9
  %617 = mul i32 %615, %616
  %618 = zext i32 %617 to i64
  %619 = sdiv i64 %618, 8
  store i64 %619, ptr %26, align 8, !tbaa !31
  %620 = load i32, ptr %25, align 4, !tbaa !9
  %621 = load i32, ptr %15, align 4, !tbaa !9
  %622 = mul i32 %620, %621
  %623 = load i32, ptr %24, align 4, !tbaa !9
  %624 = mul i32 %622, %623
  %625 = zext i32 %624 to i64
  %626 = sdiv i64 %625, 8
  store i64 %626, ptr %27, align 8, !tbaa !31
  br label %627

627:                                              ; preds = %612, %588
  br label %628

628:                                              ; preds = %627, %582, %576, %556
  %629 = load ptr, ptr %12, align 8, !tbaa !5
  %630 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %629)
  %631 = icmp ugt i32 %630, 0
  br i1 %631, label %632, label %660

632:                                              ; preds = %628
  %633 = load ptr, ptr %12, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %633, i32 0, i32 9
  %635 = load i16, ptr %634, align 1, !tbaa !21
  %636 = zext i16 %635 to i32
  %637 = and i32 %636, 128
  %638 = icmp sgt i32 %637, 0
  br i1 %638, label %639, label %660

639:                                              ; preds = %632
  %640 = load i32, ptr %18, align 4, !tbaa !9
  %641 = icmp ugt i32 %640, 0
  br i1 %641, label %642, label %660

642:                                              ; preds = %639
  store i32 1, ptr %24, align 4, !tbaa !9
  %643 = load ptr, ptr %11, align 8, !tbaa !5
  %644 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %643, i32 0, i32 17
  %645 = load i32, ptr %644, align 4, !tbaa !35
  store i32 %645, ptr %25, align 4, !tbaa !9
  %646 = load i32, ptr %23, align 4, !tbaa !9
  %647 = load i32, ptr %15, align 4, !tbaa !9
  %648 = mul i32 %646, %647
  %649 = load i32, ptr %24, align 4, !tbaa !9
  %650 = mul i32 %648, %649
  %651 = zext i32 %650 to i64
  %652 = sdiv i64 %651, 8
  store i64 %652, ptr %26, align 8, !tbaa !31
  %653 = load i32, ptr %25, align 4, !tbaa !9
  %654 = load i32, ptr %15, align 4, !tbaa !9
  %655 = mul i32 %653, %654
  %656 = load i32, ptr %24, align 4, !tbaa !9
  %657 = mul i32 %655, %656
  %658 = zext i32 %657 to i64
  %659 = sdiv i64 %658, 8
  store i64 %659, ptr %27, align 8, !tbaa !31
  br label %660

660:                                              ; preds = %642, %639, %632, %628
  %661 = load i32, ptr %22, align 4, !tbaa !9
  %662 = icmp eq i32 %661, 0
  br i1 %662, label %663, label %677

663:                                              ; preds = %660
  %664 = load i32, ptr %16, align 4, !tbaa !9
  %665 = icmp eq i32 %664, 0
  br i1 %665, label %666, label %671

666:                                              ; preds = %663
  %667 = load ptr, ptr %9, align 8, !tbaa !5
  %668 = load i32, ptr %14, align 4, !tbaa !9
  %669 = load i32, ptr %13, align 4, !tbaa !9
  %670 = load i64, ptr %26, align 8, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %667, i32 noundef %668, i32 noundef %669, i64 noundef %670)
  br label %676

671:                                              ; preds = %663
  %672 = load ptr, ptr %9, align 8, !tbaa !5
  %673 = load i32, ptr %14, align 4, !tbaa !9
  %674 = load i32, ptr %13, align 4, !tbaa !9
  %675 = load i64, ptr %27, align 8, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %672, i32 noundef %673, i32 noundef %674, i64 noundef %675)
  br label %676

676:                                              ; preds = %671, %666
  br label %702

677:                                              ; preds = %660
  %678 = load i32, ptr %19, align 4, !tbaa !9
  %679 = icmp ugt i32 %678, 0
  br i1 %679, label %680, label %689

680:                                              ; preds = %677
  %681 = load i32, ptr %16, align 4, !tbaa !9
  %682 = icmp eq i32 %681, 1
  br i1 %682, label %683, label %688

683:                                              ; preds = %680
  %684 = load ptr, ptr %9, align 8, !tbaa !5
  %685 = load i32, ptr %14, align 4, !tbaa !9
  %686 = load i32, ptr %13, align 4, !tbaa !9
  %687 = load i64, ptr %27, align 8, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %684, i32 noundef %685, i32 noundef %686, i64 noundef %687)
  br label %688

688:                                              ; preds = %683, %680
  br label %689

689:                                              ; preds = %688, %677
  %690 = load i32, ptr %20, align 4, !tbaa !9
  %691 = icmp ugt i32 %690, 0
  br i1 %691, label %692, label %701

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

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 i64, ptr %26, align 8, !tbaa !31
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %696, i32 noundef %697, i32 noundef %698, i64 noundef %699)
  br label %700

700:                                              ; preds = %695, %692
  br label %701

701:                                              ; preds = %700, %689
  br label %702

702:                                              ; preds = %701, %676
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  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 %954

703:                                              ; preds = %470
  %704 = load ptr, ptr %12, align 8, !tbaa !5
  %705 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %704, i32 0, i32 11
  %706 = load i8, ptr %705, align 1, !tbaa !14
  %707 = zext i8 %706 to i32
  %708 = icmp eq i32 %707, 1
  br i1 %708, label %709, label %953

709:                                              ; preds = %703
  %710 = load ptr, ptr %12, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %710, i32 0, i32 10
  %712 = load i16, ptr %711, align 1, !tbaa !19
  %713 = zext i16 %712 to i32
  %714 = icmp eq i32 %713, 5
  br i1 %714, label %721, label %715

715:                                              ; preds = %709
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %716, i32 0, i32 10
  %718 = load i16, ptr %717, align 1, !tbaa !19
  %719 = zext i16 %718 to i32
  %720 = icmp eq i32 %719, 34
  br i1 %720, label %721, label %760

721:                                              ; preds = %715, %709
  %722 = load ptr, ptr %12, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %722, i32 0, i32 9
  %724 = load i16, ptr %723, align 1, !tbaa !21
  %725 = zext i16 %724 to i32
  %726 = and i32 %725, 1
  %727 = icmp sgt i32 %726, 0
  br i1 %727, label %728, label %760

728:                                              ; preds = %721
  %729 = load i32, ptr %16, align 4, !tbaa !9
  %730 = icmp eq i32 %729, 0
  br i1 %730, label %731, label %745

731:                                              ; preds = %728
  %732 = load ptr, ptr %9, align 8, !tbaa !5
  %733 = load i32, ptr %14, align 4, !tbaa !9
  %734 = load ptr, ptr %10, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %734, i32 0, i32 9
  %736 = load i32, ptr %735, align 4, !tbaa !36
  %737 = load ptr, ptr %11, align 8, !tbaa !5
  %738 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %737, i32 0, i32 123
  %739 = load i32, ptr %738, align 4, !tbaa !24
  %740 = zext i32 %739 to i64
  %741 = load i32, ptr %15, align 4, !tbaa !9
  %742 = zext i32 %741 to i64
  %743 = mul nsw i64 %740, %742
  %744 = sdiv i64 %743, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %732, i32 noundef %733, i32 noundef %736, i64 noundef %744)
  br label %759

745:                                              ; preds = %728
  %746 = load ptr, ptr %9, align 8, !tbaa !5
  %747 = load i32, ptr %14, align 4, !tbaa !9
  %748 = load ptr, ptr %10, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %748, i32 0, i32 9
  %750 = load i32, ptr %749, align 4, !tbaa !36
  %751 = load ptr, ptr %11, align 8, !tbaa !5
  %752 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %751, i32 0, i32 17
  %753 = load i32, ptr %752, align 4, !tbaa !35
  %754 = zext i32 %753 to i64
  %755 = load i32, ptr %15, align 4, !tbaa !9
  %756 = zext i32 %755 to i64
  %757 = mul nsw i64 %754, %756
  %758 = sdiv i64 %757, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %746, i32 noundef %747, i32 noundef %750, i64 noundef %758)
  br label %759

759:                                              ; preds = %745, %731
  br label %760

760:                                              ; preds = %759, %721, %715
  %761 = load ptr, ptr %12, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %761, i32 0, i32 10
  %763 = load i16, ptr %762, align 1, !tbaa !19
  %764 = zext i16 %763 to i32
  %765 = icmp eq i32 %764, 6
  br i1 %765, label %778, label %766

766:                                              ; preds = %760
  %767 = load ptr, ptr %12, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %767, i32 0, i32 10
  %769 = load i16, ptr %768, align 1, !tbaa !19
  %770 = zext i16 %769 to i32
  %771 = icmp eq i32 %770, 35
  br i1 %771, label %778, label %772

772:                                              ; preds = %766
  %773 = load ptr, ptr %12, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %773, i32 0, i32 10
  %775 = load i16, ptr %774, align 1, !tbaa !19
  %776 = zext i16 %775 to i32
  %777 = icmp eq i32 %776, 37
  br i1 %777, label %778, label %856

778:                                              ; preds = %772, %766, %760
  %779 = load ptr, ptr %12, align 8, !tbaa !5
  %780 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %779, i32 0, i32 9
  %781 = load i16, ptr %780, align 1, !tbaa !21
  %782 = zext i16 %781 to i32
  %783 = and i32 %782, 1
  %784 = icmp sgt i32 %783, 0
  br i1 %784, label %785, label %819

785:                                              ; preds = %778
  %786 = load ptr, ptr %12, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %786, i32 0, i32 10
  %788 = load i16, ptr %787, align 1, !tbaa !19
  %789 = zext i16 %788 to i32
  %790 = icmp ne i32 %789, 37
  br i1 %790, label %791, label %819

791:                                              ; preds = %785
  %792 = load i32, ptr %16, align 4, !tbaa !9
  %793 = icmp eq i32 %792, 0
  br i1 %793, label %794, label %806

794:                                              ; preds = %791
  %795 = load ptr, ptr %9, align 8, !tbaa !5
  %796 = load i32, ptr %14, align 4, !tbaa !9
  %797 = load i32, ptr %13, align 4, !tbaa !9
  %798 = load ptr, ptr %11, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %798, i32 0, i32 120
  %800 = load i32, ptr %799, align 4, !tbaa !22
  %801 = zext i32 %800 to i64
  %802 = load i32, ptr %15, align 4, !tbaa !9
  %803 = zext i32 %802 to i64
  %804 = mul nsw i64 %801, %803
  %805 = sdiv i64 %804, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %795, i32 noundef %796, i32 noundef %797, i64 noundef %805)
  br label %818

806:                                              ; preds = %791
  %807 = load ptr, ptr %9, align 8, !tbaa !5
  %808 = load i32, ptr %14, align 4, !tbaa !9
  %809 = load i32, ptr %13, align 4, !tbaa !9
  %810 = load ptr, ptr %11, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %810, i32 0, i32 16
  %812 = load i32, ptr %811, align 4, !tbaa !37
  %813 = zext i32 %812 to i64
  %814 = load i32, ptr %15, align 4, !tbaa !9
  %815 = zext i32 %814 to i64
  %816 = mul nsw i64 %813, %815
  %817 = sdiv i64 %816, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %807, i32 noundef %808, i32 noundef %809, i64 noundef %817)
  br label %818

818:                                              ; preds = %806, %794
  br label %855

819:                                              ; preds = %785, %778
  %820 = load i32, ptr %16, align 4, !tbaa !9
  %821 = icmp eq i32 %820, 0
  br i1 %821, label %822, label %838

822:                                              ; preds = %819
  %823 = load ptr, ptr %9, align 8, !tbaa !5
  %824 = load i32, ptr %14, align 4, !tbaa !9
  %825 = load i32, ptr %13, align 4, !tbaa !9
  %826 = load ptr, ptr %11, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %826, i32 0, i32 120
  %828 = load i32, ptr %827, align 4, !tbaa !22
  %829 = zext i32 %828 to i64
  %830 = load i32, ptr %15, align 4, !tbaa !9
  %831 = zext i32 %830 to i64
  %832 = mul nsw i64 %829, %831
  %833 = load ptr, ptr %11, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %833, i32 0, i32 2
  %835 = load i32, ptr %834, align 4, !tbaa !26
  %836 = zext i32 %835 to i64
  %837 = mul nsw i64 %832, %836
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %823, i32 noundef %824, i32 noundef %825, i64 noundef %837)
  br label %854

838:                                              ; preds = %819
  %839 = load ptr, ptr %9, align 8, !tbaa !5
  %840 = load i32, ptr %14, align 4, !tbaa !9
  %841 = load i32, ptr %13, align 4, !tbaa !9
  %842 = load ptr, ptr %12, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %842, i32 0, i32 2
  %844 = load i32, ptr %843, align 1, !tbaa !29
  %845 = zext i32 %844 to i64
  %846 = load i32, ptr %15, align 4, !tbaa !9
  %847 = zext i32 %846 to i64
  %848 = mul nsw i64 %845, %847
  %849 = load ptr, ptr %11, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %849, i32 0, i32 2
  %851 = load i32, ptr %850, align 4, !tbaa !26
  %852 = zext i32 %851 to i64
  %853 = mul nsw i64 %848, %852
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %839, i32 noundef %840, i32 noundef %841, i64 noundef %853)
  br label %854

854:                                              ; preds = %838, %822
  br label %855

855:                                              ; preds = %854, %818
  br label %856

856:                                              ; preds = %855, %772
  %857 = load ptr, ptr %12, align 8, !tbaa !5
  %858 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %857, i32 0, i32 10
  %859 = load i16, ptr %858, align 1, !tbaa !19
  %860 = zext i16 %859 to i32
  %861 = icmp eq i32 %860, 25
  br i1 %861, label %862, label %901

862:                                              ; preds = %856
  %863 = load ptr, ptr %12, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %863, i32 0, i32 9
  %865 = load i16, ptr %864, align 1, !tbaa !21
  %866 = zext i16 %865 to i32
  %867 = and i32 %866, 1
  %868 = icmp sgt i32 %867, 0
  br i1 %868, label %869, label %901

869:                                              ; preds = %862
  %870 = load i32, ptr %16, align 4, !tbaa !9
  %871 = icmp eq i32 %870, 0
  br i1 %871, label %872, label %886

872:                                              ; preds = %869
  %873 = load ptr, ptr %9, align 8, !tbaa !5
  %874 = load i32, ptr %14, align 4, !tbaa !9
  %875 = load ptr, ptr %10, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %875, i32 0, i32 13
  %877 = load i32, ptr %876, align 4, !tbaa !38
  %878 = load ptr, ptr %11, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %878, i32 0, i32 123
  %880 = load i32, ptr %879, align 4, !tbaa !24
  %881 = zext i32 %880 to i64
  %882 = load i32, ptr %15, align 4, !tbaa !9
  %883 = zext i32 %882 to i64
  %884 = mul nsw i64 %881, %883
  %885 = sdiv i64 %884, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %873, i32 noundef %874, i32 noundef %877, i64 noundef %885)
  br label %900

886:                                              ; preds = %869
  %887 = load ptr, ptr %9, align 8, !tbaa !5
  %888 = load i32, ptr %14, align 4, !tbaa !9
  %889 = load ptr, ptr %10, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %889, i32 0, i32 13
  %891 = load i32, ptr %890, align 4, !tbaa !38
  %892 = load ptr, ptr %11, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %892, i32 0, i32 17
  %894 = load i32, ptr %893, align 4, !tbaa !35
  %895 = zext i32 %894 to i64
  %896 = load i32, ptr %15, align 4, !tbaa !9
  %897 = zext i32 %896 to i64
  %898 = mul nsw i64 %895, %897
  %899 = sdiv i64 %898, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %887, i32 noundef %888, i32 noundef %891, i64 noundef %899)
  br label %900

900:                                              ; preds = %886, %872
  br label %901

901:                                              ; preds = %900, %862, %856
  %902 = load ptr, ptr %12, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %902, i32 0, i32 10
  %904 = load i16, ptr %903, align 1, !tbaa !19
  %905 = zext i16 %904 to i32
  %906 = icmp eq i32 %905, 26
  br i1 %906, label %907, label %952

907:                                              ; preds = %901
  %908 = load ptr, ptr %12, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %908, i32 0, i32 9
  %910 = load i16, ptr %909, align 1, !tbaa !21
  %911 = zext i16 %910 to i32
  %912 = and i32 %911, 1
  %913 = icmp sgt i32 %912, 0
  br i1 %913, label %914, label %942

914:                                              ; preds = %907
  %915 = load i32, ptr %16, align 4, !tbaa !9
  %916 = icmp eq i32 %915, 0
  br i1 %916, label %917, label %929

917:                                              ; preds = %914
  %918 = load ptr, ptr %9, align 8, !tbaa !5
  %919 = load i32, ptr %14, align 4, !tbaa !9
  %920 = load i32, ptr %13, align 4, !tbaa !9
  %921 = load ptr, ptr %11, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %921, i32 0, i32 120
  %923 = load i32, ptr %922, align 4, !tbaa !22
  %924 = zext i32 %923 to i64
  %925 = load i32, ptr %15, align 4, !tbaa !9
  %926 = zext i32 %925 to i64
  %927 = mul nsw i64 %924, %926
  %928 = sdiv i64 %927, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %918, i32 noundef %919, i32 noundef %920, i64 noundef %928)
  br label %941

929:                                              ; preds = %914
  %930 = load ptr, ptr %9, align 8, !tbaa !5
  %931 = load i32, ptr %14, align 4, !tbaa !9
  %932 = load i32, ptr %13, align 4, !tbaa !9
  %933 = load ptr, ptr %11, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %933, i32 0, i32 16
  %935 = load i32, ptr %934, align 4, !tbaa !37
  %936 = zext i32 %935 to i64
  %937 = load i32, ptr %15, align 4, !tbaa !9
  %938 = zext i32 %937 to i64
  %939 = mul nsw i64 %936, %938
  %940 = sdiv i64 %939, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %930, i32 noundef %931, i32 noundef %932, i64 noundef %940)
  br label %941

941:                                              ; preds = %929, %917
  br label %951

942:                                              ; preds = %907
  %943 = load ptr, ptr %9, align 8, !tbaa !5
  %944 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %945 = icmp ult i32 1, %944
  br i1 %945, label %946, label %948

946:                                              ; preds = %942
  %947 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %949

948:                                              ; preds = %942
  br label %949

949:                                              ; preds = %948, %946
  %950 = phi i32 [ %947, %946 ], [ 1, %948 ]
  call void @libxsmm_handle_error(ptr noundef %943, i32 noundef 90045, ptr noundef @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_in_microkernel_addr_gp_reg, ptr noundef @.str, i32 noundef 272, i32 noundef %950)
  store i32 1, ptr %28, align 4
  br label %955

951:                                              ; preds = %941
  br label %952

952:                                              ; preds = %951, %901
  br label %953

953:                                              ; preds = %952, %703
  br label %954

954:                                              ; preds = %953, %702
  store i32 0, ptr %28, align 4
  br label %955

955:                                              ; preds = %954, %949
  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
  %956 = load i32, ptr %28, align 4
  switch i32 %956, label %958 [
    i32 0, label %957
    i32 1, label %957
  ]

957:                                              ; preds = %955, %955
  ret void

958:                                              ; preds = %955
  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 12}
!18 = !{!12, !10, i64 24}
!19 = !{!15, !16, i64 29}
!20 = !{!12, !10, i64 28}
!21 = !{!15, !16, i64 27}
!22 = !{!23, !10, i64 480}
!23 = !{!"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}
!24 = !{!23, !10, i64 492}
!25 = !{!23, !10, i64 12}
!26 = !{!23, !10, i64 8}
!27 = !{!23, !10, i64 20}
!28 = !{!15, !10, i64 16}
!29 = !{!15, !10, i64 8}
!30 = !{!15, !10, i64 12}
!31 = !{!32, !32, i64 0}
!32 = !{!"long long", !7, i64 0}
!33 = !{!23, !10, i64 16}
!34 = !{!15, !10, i64 20}
!35 = !{!23, !10, i64 68}
!36 = !{!12, !10, i64 36}
!37 = !{!23, !10, i64 64}
!38 = !{!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 [100 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_gp_reg = external hidden unnamed_addr constant [76 x i8], align 1

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #0

declare void @libxsmm_x86_instruction_alu_imm(ptr 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_gp_reg(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr noundef %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 %28, 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 = and i8 %18, -2
  %switch = icmp eq i8 %19, 2
  br i1 %switch, label %28, label %20

20:                                               ; preds = %16, %12
  %21 = getelementptr inbounds i8, ptr %1, i64 12
  %22 = load i32, ptr %21, align 4, !tbaa !14
  %23 = icmp eq i32 %22, %4
  br i1 %23, label %24, label %28

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

28:                                               ; preds = %16, %20, %24, %8
  %29 = phi i1 [ true, %8 ], [ false, %20 ], [ %27, %24 ], [ true, %16 ]
  %30 = getelementptr inbounds i8, ptr %1, i64 24
  %31 = load i32, ptr %30, align 4, !tbaa !15
  %32 = icmp eq i32 %31, %4
  br i1 %32, label %45, label %33

33:                                               ; preds = %28
  %34 = getelementptr inbounds i8, ptr %3, i64 31
  %35 = load i8, ptr %34, align 1, !tbaa !11
  %36 = icmp eq i8 %35, 1
  br i1 %36, label %37, label %45

37:                                               ; preds = %33
  %38 = getelementptr inbounds i8, ptr %3, i64 29
  %39 = load i16, ptr %38, align 1, !tbaa !16
  %40 = icmp eq i16 %39, 63
  br i1 %40, label %41, label %45

41:                                               ; preds = %37
  %42 = getelementptr inbounds i8, ptr %1, i64 28
  %43 = load i32, ptr %42, align 4, !tbaa !17
  %44 = icmp eq i32 %43, %4
  br label %45

45:                                               ; preds = %33, %37, %41, %28
  %46 = phi i1 [ true, %28 ], [ false, %37 ], [ false, %33 ], [ %44, %41 ]
  br i1 %11, label %47, label %.thread313

47:                                               ; preds = %45
  %48 = getelementptr inbounds i8, ptr %3, i64 31
  %49 = load i8, ptr %48, align 1, !tbaa !11
  switch i8 %49, label %.thread313 [
    i8 1, label %50
    i8 2, label %54
    i8 3, label %58
  ]

50:                                               ; preds = %47
  %51 = getelementptr inbounds i8, ptr %3, i64 27
  %52 = load i16, ptr %51, align 1, !tbaa !18
  %53 = and i16 %52, 2
  %.not = icmp eq i16 %53, 0
  br i1 %.not, label %.thread313, label %.thread285.thread315

54:                                               ; preds = %47
  %55 = getelementptr inbounds i8, ptr %3, i64 27
  %56 = load i16, ptr %55, align 1, !tbaa !18
  %57 = and i16 %56, 1
  %.not253 = icmp eq i16 %57, 0
  br i1 %.not253, label %.thread313, label %.thread285.thread.thread

58:                                               ; preds = %47
  %59 = getelementptr inbounds i8, ptr %3, i64 27
  %60 = load i16, ptr %59, align 1, !tbaa !18
  %61 = and i16 %60, 1
  %.not254 = icmp eq i16 %61, 0
  br i1 %.not254, label %.thread313, label %.thread336

.thread313:                                       ; preds = %47, %50, %54, %45, %58
  %62 = getelementptr inbounds i8, ptr %1, i64 8
  %63 = load i32, ptr %62, align 4, !tbaa !10
  %64 = icmp eq i32 %63, %4
  br i1 %64, label %65, label %.thread314

65:                                               ; preds = %.thread313
  %66 = getelementptr inbounds i8, ptr %3, i64 31
  %67 = load i8, ptr %66, align 1, !tbaa !11
  switch i8 %67, label %.thread314 [
    i8 2, label %68
    i8 3, label %72
  ]

68:                                               ; preds = %65
  %69 = getelementptr inbounds i8, ptr %3, i64 27
  %70 = load i16, ptr %69, align 1, !tbaa !18
  %71 = and i16 %70, 2
  %.not255 = icmp eq i16 %71, 0
  br i1 %.not255, label %.thread314, label %88

72:                                               ; preds = %65
  %73 = getelementptr inbounds i8, ptr %3, i64 27
  %74 = load i16, ptr %73, align 1, !tbaa !18
  %75 = and i16 %74, 2
  %.not256 = icmp eq i16 %75, 0
  br i1 %.not256, label %.thread314, label %88

.thread314:                                       ; preds = %65, %68, %.thread313, %72
  %76 = getelementptr inbounds i8, ptr %1, i64 12
  %77 = load i32, ptr %76, align 4, !tbaa !14
  %78 = icmp eq i32 %77, %4
  br i1 %78, label %79, label %88

79:                                               ; preds = %.thread314
  %80 = getelementptr inbounds i8, ptr %3, i64 31
  %81 = load i8, ptr %80, align 1, !tbaa !11
  %82 = icmp eq i8 %81, 3
  br i1 %82, label %83, label %88

83:                                               ; preds = %79
  %84 = getelementptr inbounds i8, ptr %3, i64 27
  %85 = load i16, ptr %84, align 1, !tbaa !18
  %86 = and i16 %85, 4
  %87 = icmp ne i16 %86, 0
  br label %88

88:                                               ; preds = %.thread314, %79, %83, %72, %68
  %89 = phi i1 [ true, %72 ], [ true, %68 ], [ false, %79 ], [ false, %.thread314 ], [ %87, %83 ]
  br i1 %11, label %.thread285, label %.thread320

.thread285:                                       ; preds = %88
  %.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 %.thread320 [
    i8 1, label %.thread285.thread315
    i8 2, label %.thread285.thread.thread
    i8 3, label %.thread336
  ]

.thread285.thread315:                             ; preds = %.thread285, %50
  %90 = phi i1 [ %89, %.thread285 ], [ true, %50 ]
  %91 = getelementptr inbounds i8, ptr %3, i64 27
  %92 = load i16, ptr %91, align 1, !tbaa !18
  %93 = and i16 %92, 4
  %.not257 = icmp eq i16 %93, 0
  br i1 %.not257, label %.thread320, label %.thread293.thread324

.thread285.thread.thread:                         ; preds = %.thread285, %54
  %94 = phi i1 [ true, %54 ], [ %89, %.thread285 ]
  %95 = getelementptr inbounds i8, ptr %3, i64 27
  %96 = load i16, ptr %95, align 1, !tbaa !18
  %97 = and i16 %96, 4
  %.not258 = icmp eq i16 %97, 0
  br i1 %.not258, label %.thread320, label %.thread293.thread.thread

.thread336:                                       ; preds = %.thread285, %58
  %98 = phi i1 [ true, %58 ], [ %89, %.thread285 ]
  %99 = getelementptr inbounds i8, ptr %3, i64 27
  %100 = load i16, ptr %99, align 1, !tbaa !18
  %101 = and i16 %100, 8
  %.not259 = icmp eq i16 %101, 0
  br i1 %.not259, label %.thread320, label %.thread338

.thread320:                                       ; preds = %.thread285, %.thread285.thread315, %.thread285.thread.thread, %88, %.thread336
  %102 = phi i1 [ %98, %.thread336 ], [ %89, %88 ], [ %94, %.thread285.thread.thread ], [ %90, %.thread285.thread315 ], [ %89, %.thread285 ]
  %103 = getelementptr inbounds i8, ptr %1, i64 8
  %104 = load i32, ptr %103, align 4, !tbaa !10
  %105 = icmp eq i32 %104, %4
  br i1 %105, label %106, label %.thread321

106:                                              ; preds = %.thread320
  %107 = getelementptr inbounds i8, ptr %3, i64 31
  %108 = load i8, ptr %107, align 1, !tbaa !11
  switch i8 %108, label %.thread321 [
    i8 2, label %109
    i8 3, label %113
  ]

109:                                              ; preds = %106
  %110 = getelementptr inbounds i8, ptr %3, i64 27
  %111 = load i16, ptr %110, align 1, !tbaa !18
  %112 = and i16 %111, 8
  %.not260 = icmp eq i16 %112, 0
  br i1 %.not260, label %.thread321, label %129

113:                                              ; preds = %106
  %114 = getelementptr inbounds i8, ptr %3, i64 27
  %115 = load i16, ptr %114, align 1, !tbaa !18
  %116 = and i16 %115, 16
  %.not261 = icmp eq i16 %116, 0
  br i1 %.not261, label %.thread321, label %129

.thread321:                                       ; preds = %106, %109, %.thread320, %113
  %117 = getelementptr inbounds i8, ptr %1, i64 12
  %118 = load i32, ptr %117, align 4, !tbaa !14
  %119 = icmp eq i32 %118, %4
  br i1 %119, label %120, label %129

120:                                              ; preds = %.thread321
  %121 = getelementptr inbounds i8, ptr %3, i64 31
  %122 = load i8, ptr %121, align 1, !tbaa !11
  %123 = icmp eq i8 %122, 3
  br i1 %123, label %124, label %129

124:                                              ; preds = %120
  %125 = getelementptr inbounds i8, ptr %3, i64 27
  %126 = load i16, ptr %125, align 1, !tbaa !18
  %127 = and i16 %126, 32
  %128 = icmp ne i16 %127, 0
  br label %129

129:                                              ; preds = %.thread321, %120, %124, %113, %109
  %130 = phi i1 [ true, %113 ], [ true, %109 ], [ false, %120 ], [ false, %.thread321 ], [ %128, %124 ]
  br i1 %11, label %.thread293, label %.thread330

.thread293:                                       ; preds = %129
  %.phi.trans.insert311 = getelementptr inbounds i8, ptr %3, i64 31
  %.pre312 = load i8, ptr %.phi.trans.insert311, align 1, !tbaa !11
  switch i8 %.pre312, label %.thread330 [
    i8 1, label %.thread293.thread324
    i8 2, label %.thread293.thread.thread
    i8 3, label %.thread338
  ]

.thread293.thread324:                             ; preds = %.thread293, %.thread285.thread315
  %131 = phi i1 [ %102, %.thread293 ], [ %90, %.thread285.thread315 ]
  %132 = phi i1 [ %130, %.thread293 ], [ true, %.thread285.thread315 ]
  %133 = getelementptr inbounds i8, ptr %3, i64 27
  %134 = load i16, ptr %133, align 1, !tbaa !18
  %135 = and i16 %134, 8
  %.not262 = icmp eq i16 %135, 0
  br i1 %.not262, label %.thread330, label %174

.thread293.thread.thread:                         ; preds = %.thread293, %.thread285.thread.thread
  %136 = phi i1 [ true, %.thread285.thread.thread ], [ %130, %.thread293 ]
  %137 = phi i1 [ %94, %.thread285.thread.thread ], [ %102, %.thread293 ]
  %138 = getelementptr inbounds i8, ptr %3, i64 27
  %139 = load i16, ptr %138, align 1, !tbaa !18
  %140 = and i16 %139, 16
  %.not263 = icmp eq i16 %140, 0
  br i1 %.not263, label %.thread330, label %174

.thread338:                                       ; preds = %.thread293, %.thread336
  %141 = phi i1 [ %98, %.thread336 ], [ %102, %.thread293 ]
  %142 = phi i1 [ true, %.thread336 ], [ %130, %.thread293 ]
  %143 = getelementptr inbounds i8, ptr %3, i64 27
  %144 = load i16, ptr %143, align 1, !tbaa !18
  %145 = and i16 %144, 64
  %.not264 = icmp eq i16 %145, 0
  br i1 %.not264, label %.thread330, label %174

.thread330:                                       ; preds = %.thread293, %.thread293.thread324, %.thread293.thread.thread, %129, %.thread338
  %146 = phi i1 [ %142, %.thread338 ], [ %130, %129 ], [ %136, %.thread293.thread.thread ], [ %132, %.thread293.thread324 ], [ %130, %.thread293 ]
  %147 = phi i1 [ %141, %.thread338 ], [ %102, %129 ], [ %137, %.thread293.thread.thread ], [ %131, %.thread293.thread324 ], [ %102, %.thread293 ]
  %148 = getelementptr inbounds i8, ptr %1, i64 8
  %149 = load i32, ptr %148, align 4, !tbaa !10
  %150 = icmp eq i32 %149, %4
  br i1 %150, label %151, label %.thread331

151:                                              ; preds = %.thread330
  %152 = getelementptr inbounds i8, ptr %3, i64 31
  %153 = load i8, ptr %152, align 1, !tbaa !11
  switch i8 %153, label %.thread331 [
    i8 2, label %154
    i8 3, label %158
  ]

154:                                              ; preds = %151
  %155 = getelementptr inbounds i8, ptr %3, i64 27
  %156 = load i16, ptr %155, align 1, !tbaa !18
  %157 = and i16 %156, 32
  %.not265 = icmp eq i16 %157, 0
  br i1 %.not265, label %.thread331, label %174

158:                                              ; preds = %151
  %159 = getelementptr inbounds i8, ptr %3, i64 27
  %160 = load i16, ptr %159, align 1, !tbaa !18
  %161 = and i16 %160, 128
  %.not266 = icmp eq i16 %161, 0
  br i1 %.not266, label %.thread331, label %174

.thread331:                                       ; preds = %151, %154, %.thread330, %158
  %162 = getelementptr inbounds i8, ptr %1, i64 12
  %163 = load i32, ptr %162, align 4, !tbaa !14
  %164 = icmp eq i32 %163, %4
  br i1 %164, label %165, label %174

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

169:                                              ; preds = %165
  %170 = getelementptr inbounds i8, ptr %3, i64 27
  %171 = load i16, ptr %170, align 1, !tbaa !18
  %172 = and i16 %171, 256
  %173 = icmp ne i16 %172, 0
  br label %174

174:                                              ; preds = %.thread331, %165, %169, %158, %154, %.thread338, %.thread293.thread.thread, %.thread293.thread324
  %175 = phi i1 [ %146, %158 ], [ %146, %154 ], [ %142, %.thread338 ], [ %136, %.thread293.thread.thread ], [ %132, %.thread293.thread324 ], [ %146, %165 ], [ %146, %.thread331 ], [ %146, %169 ]
  %176 = phi i1 [ %147, %158 ], [ %147, %154 ], [ %141, %.thread338 ], [ %137, %.thread293.thread.thread ], [ %131, %.thread293.thread324 ], [ %147, %165 ], [ %147, %.thread331 ], [ %147, %169 ]
  %177 = phi i1 [ true, %158 ], [ true, %154 ], [ true, %.thread338 ], [ true, %.thread293.thread.thread ], [ true, %.thread293.thread324 ], [ false, %165 ], [ false, %.thread331 ], [ %173, %169 ]
  %or.cond = select i1 %176, i1 true, i1 %175
  %spec.select = select i1 %or.cond, i1 true, i1 %177
  %or.cond3 = select i1 %29, i1 true, i1 %46
  br i1 %or.cond3, label %178, label %266

178:                                              ; preds = %174
  %.in.v = select i1 %29, i64 480, i64 492
  %.in = getelementptr inbounds i8, ptr %2, i64 %.in.v
  %179 = load i32, ptr %.in, align 4, !tbaa !19
  br i1 %29, label %180, label %192

180:                                              ; preds = %178
  %181 = getelementptr inbounds i8, ptr %1, i64 8
  %182 = load i32, ptr %181, align 4, !tbaa !10
  %183 = icmp eq i32 %182, %4
  br i1 %183, label %184, label %190

184:                                              ; preds = %180
  %185 = getelementptr inbounds i8, ptr %3, i64 31
  %186 = load i8, ptr %185, align 1, !tbaa !11
  %187 = and i8 %186, -2
  %switch277 = icmp eq i8 %187, 2
  %. = select i1 %switch277, i64 12, i64 8
  %188 = getelementptr inbounds i8, ptr %2, i64 %.
  %189 = and i8 %186, -2
  %switch279 = icmp eq i8 %189, 2
  %spec.select355 = select i1 %switch279, i64 16, i64 8
  br label %204

190:                                              ; preds = %180
  %191 = getelementptr inbounds i8, ptr %2, i64 8
  br label %204

192:                                              ; preds = %178
  %193 = getelementptr inbounds i8, ptr %2, i64 20
  %194 = load i32, ptr %193, align 4, !tbaa !19
  %195 = getelementptr inbounds i8, ptr %3, i64 12
  %196 = load i32, ptr %195, align 1, !tbaa !19
  %197 = zext i32 %179 to i64
  %198 = zext i32 %6 to i64
  %199 = zext i32 %194 to i64
  %200 = mul nuw i64 %199, %198
  %201 = mul i64 %200, %197
  %202 = zext i32 %196 to i64
  %203 = mul i64 %200, %202
  br label %240

204:                                              ; preds = %184, %190
  %.sink = phi i64 [ 8, %190 ], [ %spec.select355, %184 ]
  %.in356 = phi ptr [ %191, %190 ], [ %188, %184 ]
  %205 = load i32, ptr %.in356, align 4, !tbaa !19
  %206 = getelementptr inbounds i8, ptr %3, i64 %.sink
  %207 = load i32, ptr %206, align 1, !tbaa !19
  %208 = zext i32 %179 to i64
  %209 = zext i32 %6 to i64
  %210 = zext i32 %205 to i64
  %211 = mul nuw i64 %210, %209
  %212 = mul i64 %211, %208
  %213 = zext i32 %207 to i64
  %214 = mul i64 %211, %213
  %215 = getelementptr inbounds i8, ptr %1, i64 12
  %216 = load i32, ptr %215, align 4, !tbaa !14
  %217 = icmp eq i32 %216, %4
  br i1 %217, label %218, label %240

218:                                              ; preds = %204
  %219 = getelementptr inbounds i8, ptr %3, i64 31
  %220 = load i8, ptr %219, align 1, !tbaa !11
  %221 = icmp eq i8 %220, 3
  br i1 %221, label %222, label %240

222:                                              ; preds = %218
  %223 = getelementptr inbounds i8, ptr %3, i64 29
  %224 = load i16, ptr %223, align 1, !tbaa !16
  %225 = icmp eq i16 %224, 3
  br i1 %225, label %226, label %240

226:                                              ; preds = %222
  %227 = getelementptr inbounds i8, ptr %3, i64 20
  %228 = load i32, ptr %227, align 1, !tbaa !20
  %229 = getelementptr inbounds i8, ptr %3, i64 27
  %230 = load i16, ptr %229, align 1, !tbaa !18
  %231 = and i16 %230, 1024
  %.not274 = icmp eq i16 %231, 0
  %232 = add i32 %228, 15
  %233 = and i32 %232, -16
  %.0245 = select i1 %.not274, i32 %228, i32 %233
  %234 = mul i32 %179, %6
  %235 = lshr i32 %234, 3
  %236 = zext nneg i32 %235 to i64
  %237 = mul i32 %.0245, %6
  %238 = lshr i32 %237, 3
  %239 = zext nneg i32 %238 to i64
  br label %240

240:                                              ; preds = %192, %222, %226, %218, %204
  %.0243 = phi i64 [ %236, %226 ], [ %212, %222 ], [ %212, %218 ], [ %212, %204 ], [ %201, %192 ]
  %.0 = phi i64 [ %239, %226 ], [ %214, %222 ], [ %214, %218 ], [ %214, %204 ], [ %203, %192 ]
  %241 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %3) #2
  %.not275 = icmp eq i32 %241, 0
  br i1 %.not275, label %256, label %242

242:                                              ; preds = %240
  %243 = getelementptr inbounds i8, ptr %3, i64 27
  %244 = load i16, ptr %243, align 1, !tbaa !18
  %245 = and i16 %244, 128
  %246 = icmp ne i16 %245, 0
  %or.cond5 = select i1 %246, i1 %46, i1 false
  br i1 %or.cond5, label %247, label %256

247:                                              ; preds = %242
  %248 = getelementptr inbounds i8, ptr %2, i64 68
  %249 = load i32, ptr %248, align 4, !tbaa !21
  %250 = mul i32 %179, %6
  %251 = lshr i32 %250, 3
  %252 = zext nneg i32 %251 to i64
  %253 = mul i32 %249, %6
  %254 = lshr i32 %253, 3
  %255 = zext nneg i32 %254 to i64
  br label %256

256:                                              ; preds = %247, %242, %240
  %.1244 = phi i64 [ %252, %247 ], [ %.0243, %242 ], [ %.0243, %240 ]
  %.1 = phi i64 [ %255, %247 ], [ %.0, %242 ], [ %.0, %240 ]
  br i1 %spec.select, label %261, label %257

257:                                              ; preds = %256
  %258 = icmp eq i32 %7, 0
  br i1 %258, label %259, label %260

259:                                              ; preds = %257
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.1244) #2
  br label %366

260:                                              ; preds = %257
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.1) #2
  br label %366

261:                                              ; preds = %256
  %262 = icmp eq i32 %7, 1
  %or.cond7 = and i1 %262, %176
  br i1 %or.cond7, label %.thread306, label %263

.thread306:                                       ; preds = %261
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.1) #2
  br label %366

263:                                              ; preds = %261
  %264 = icmp eq i32 %7, 0
  %or.cond9 = and i1 %264, %175
  br i1 %or.cond9, label %265, label %366

265:                                              ; preds = %263
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.1244) #2
  br label %366

266:                                              ; preds = %174
  %267 = getelementptr inbounds i8, ptr %3, i64 31
  %268 = load i8, ptr %267, align 1, !tbaa !11
  %269 = icmp eq i8 %268, 1
  br i1 %269, label %270, label %366

270:                                              ; preds = %266
  %271 = getelementptr inbounds i8, ptr %3, i64 29
  %272 = load i16, ptr %271, align 1, !tbaa !16
  switch i16 %272, label %286 [
    i16 5, label %273
    i16 34, label %273
  ]

273:                                              ; preds = %270, %270
  %274 = getelementptr inbounds i8, ptr %3, i64 27
  %275 = load i16, ptr %274, align 1, !tbaa !18
  %276 = and i16 %275, 1
  %.not267 = icmp eq i16 %276, 0
  br i1 %.not267, label %thread-pre-split, label %thread-pre-split.sink.split

thread-pre-split.sink.split:                      ; preds = %273
  %277 = icmp eq i32 %7, 0
  %278 = getelementptr inbounds i8, ptr %1, i64 36
  %279 = load i32, ptr %278, align 4, !tbaa !23
  %280 = zext i32 %6 to i64
  %.353 = select i1 %277, i64 492, i64 68
  %281 = getelementptr inbounds i8, ptr %2, i64 %.353
  %282 = load i32, ptr %281, align 4, !tbaa !19
  %283 = zext i32 %282 to i64
  %284 = mul nuw nsw i64 %283, %280
  %285 = lshr i64 %284, 3
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %279, i64 noundef %285) #2
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.sink.split, %273
  %.pr = load i16, ptr %271, align 1, !tbaa !16
  br label %286

286:                                              ; preds = %thread-pre-split, %270
  %287 = phi i16 [ %.pr, %thread-pre-split ], [ %272, %270 ]
  switch i16 %287, label %323 [
    i16 6, label %288
    i16 35, label %288
    i16 37, label %288
  ]

288:                                              ; preds = %286, %286, %286
  %289 = getelementptr inbounds i8, ptr %3, i64 27
  %290 = load i16, ptr %289, align 1, !tbaa !18
  %291 = and i16 %290, 1
  %.not268 = icmp eq i16 %291, 0
  %.not269 = icmp eq i16 %287, 37
  %or.cond310 = or i1 %.not269, %.not268
  %292 = icmp eq i32 %7, 0
  %293 = zext i32 %6 to i64
  br i1 %or.cond310, label %307, label %294

294:                                              ; preds = %288
  br i1 %292, label %295, label %301

295:                                              ; preds = %294
  %296 = getelementptr inbounds i8, ptr %2, i64 480
  %297 = load i32, ptr %296, align 4, !tbaa !24
  %298 = zext i32 %297 to i64
  %299 = mul nuw nsw i64 %298, %293
  %300 = lshr i64 %299, 3
  br label %.sink.split

301:                                              ; preds = %294
  %302 = getelementptr inbounds i8, ptr %2, i64 64
  %303 = load i32, ptr %302, align 4, !tbaa !25
  %304 = zext i32 %303 to i64
  %305 = mul nuw nsw i64 %304, %293
  %306 = lshr i64 %305, 3
  br label %.sink.split

307:                                              ; preds = %288
  %308 = getelementptr inbounds i8, ptr %2, i64 8
  %309 = load i32, ptr %308, align 4, !tbaa !26
  %310 = zext i32 %309 to i64
  br i1 %292, label %311, label %317

311:                                              ; preds = %307
  %312 = getelementptr inbounds i8, ptr %2, i64 480
  %313 = load i32, ptr %312, align 4, !tbaa !24
  %314 = zext i32 %313 to i64
  %315 = mul nuw nsw i64 %314, %293
  %316 = mul nuw nsw i64 %315, %310
  br label %.sink.split

317:                                              ; preds = %307
  %318 = getelementptr inbounds i8, ptr %3, i64 8
  %319 = load i32, ptr %318, align 1, !tbaa !27
  %320 = zext i32 %319 to i64
  %321 = mul nuw nsw i64 %320, %293
  %322 = mul nuw nsw i64 %321, %310
  br label %.sink.split

.sink.split:                                      ; preds = %311, %317, %295, %301
  %.sink346 = phi i64 [ %306, %301 ], [ %300, %295 ], [ %322, %317 ], [ %316, %311 ]
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.sink346) #2
  br label %323

323:                                              ; preds = %.sink.split, %286
  %324 = load i16, ptr %271, align 1, !tbaa !16
  %325 = icmp eq i16 %324, 25
  br i1 %325, label %326, label %339

326:                                              ; preds = %323
  %327 = getelementptr inbounds i8, ptr %3, i64 27
  %328 = load i16, ptr %327, align 1, !tbaa !18
  %329 = and i16 %328, 1
  %.not270 = icmp eq i16 %329, 0
  br i1 %.not270, label %thread-pre-split308, label %thread-pre-split308.sink.split

thread-pre-split308.sink.split:                   ; preds = %326
  %330 = icmp eq i32 %7, 0
  %331 = getelementptr inbounds i8, ptr %1, i64 52
  %332 = load i32, ptr %331, align 4, !tbaa !28
  %333 = zext i32 %6 to i64
  %.354 = select i1 %330, i64 492, i64 68
  %334 = getelementptr inbounds i8, ptr %2, i64 %.354
  %335 = load i32, ptr %334, align 4, !tbaa !19
  %336 = zext i32 %335 to i64
  %337 = mul nuw nsw i64 %336, %333
  %338 = lshr i64 %337, 3
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %332, i64 noundef %338) #2
  br label %thread-pre-split308

thread-pre-split308:                              ; preds = %thread-pre-split308.sink.split, %326
  %.pr309 = load i16, ptr %271, align 1, !tbaa !16
  br label %339

339:                                              ; preds = %thread-pre-split308, %323
  %340 = phi i16 [ %.pr309, %thread-pre-split308 ], [ %324, %323 ]
  %341 = icmp eq i16 %340, 26
  br i1 %341, label %342, label %366

342:                                              ; preds = %339
  %343 = getelementptr inbounds i8, ptr %3, i64 27
  %344 = load i16, ptr %343, align 1, !tbaa !18
  %345 = and i16 %344, 1
  %.not271 = icmp eq i16 %345, 0
  br i1 %.not271, label %361, label %346

346:                                              ; preds = %342
  %347 = icmp eq i32 %7, 0
  %348 = zext i32 %6 to i64
  br i1 %347, label %349, label %355

349:                                              ; preds = %346
  %350 = getelementptr inbounds i8, ptr %2, i64 480
  %351 = load i32, ptr %350, align 4, !tbaa !24
  %352 = zext i32 %351 to i64
  %353 = mul nuw nsw i64 %352, %348
  %354 = lshr i64 %353, 3
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %354) #2
  br label %366

355:                                              ; preds = %346
  %356 = getelementptr inbounds i8, ptr %2, i64 64
  %357 = load i32, ptr %356, align 4, !tbaa !25
  %358 = zext i32 %357 to i64
  %359 = mul nuw nsw i64 %358, %348
  %360 = lshr i64 %359, 3
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %360) #2
  br label %366

361:                                              ; preds = %342
  %362 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %363 = icmp ugt i32 %362, 1
  %364 = load i32, ptr @libxsmm_verbosity, align 4
  %365 = select i1 %363, i32 %364, 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_gp_reg, ptr noundef nonnull @.str, i32 noundef 272, i32 noundef %365) #2
  br label %366

366:                                              ; preds = %.thread306, %339, %349, %355, %266, %263, %265, %259, %260, %361
  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 12}
!15 = !{!6, !7, i64 24}
!16 = !{!12, !13, i64 29}
!17 = !{!6, !7, i64 28}
!18 = !{!12, !13, i64 27}
!19 = !{!7, !7, i64 0}
!20 = !{!12, !7, i64 20}
!21 = !{!22, !7, i64 68}
!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 = !{!6, !7, i64 36}
!24 = !{!22, !7, i64 480}
!25 = !{!22, !7, i64 64}
!26 = !{!22, !7, i64 8}
!27 = !{!12, !7, i64 8}
!28 = !{!6, !7, i64 52}


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