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

@__func__.libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_gp_reg = external hidden unnamed_addr constant [79 x i8], align 1
@.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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_mateltwise_unary_binary_adjust_after_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, i32 noundef %8) #0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store i32 %4, ptr %14, align 4, !tbaa !9
  store i32 %5, ptr %15, align 4, !tbaa !9
  store i32 %6, ptr %16, align 4, !tbaa !9
  store i32 %7, ptr %17, align 4, !tbaa !9
  store i32 %8, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %29 = load i32, ptr %14, align 4, !tbaa !9
  %30 = load ptr, ptr %11, 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 = %9
  %35 = load i32, ptr %14, align 4, !tbaa !9
  %36 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %54 = load ptr, ptr %11, 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 %13, 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, %9
  %67 = phi i1 [ true, %46 ], [ true, %40 ], [ true, %9 ], [ %65, %64 ]
  %68 = zext i1 %67 to i64
  %69 = select i1 %67, i32 1, i32 0
  store i32 %69, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %70 = load i32, ptr %14, align 4, !tbaa !9
  %71 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %89 = load ptr, ptr %11, 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 %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %99 = load i32, ptr %14, align 4, !tbaa !9
  %100 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %119 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %138 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %157 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %176 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %195 = load ptr, ptr %11, 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 %13, 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 %13, 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 %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %218 = load i32, ptr %14, align 4, !tbaa !9
  %219 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %238 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %257 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %276 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %295 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %314 = load ptr, ptr %11, 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 %13, 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 %13, 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 %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %337 = load i32, ptr %14, align 4, !tbaa !9
  %338 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %357 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %376 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %395 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %414 = load ptr, ptr %11, 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 %13, 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 %13, 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 %14, align 4, !tbaa !9
  %433 = load ptr, ptr %11, 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 %13, 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 %13, 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 %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %456 = load i32, ptr %21, align 4, !tbaa !9
  %457 = icmp eq i32 %456, 1
  br i1 %457, label %464, label %458

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

461:                                              ; preds = %458
  %462 = load i32, ptr %23, 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 %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %468 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %468, ptr %25, align 4, !tbaa !9
  %469 = load i32, ptr %19, align 4, !tbaa !9
  %470 = icmp ugt i32 %469, 0
  br i1 %470, label %474, label %471

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

474:                                              ; preds = %471, %464
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %475 = load i32, ptr %19, align 4, !tbaa !9
  %476 = icmp ugt i32 %475, 0
  br i1 %476, label %477, label %505

477:                                              ; preds = %474
  %478 = load i32, ptr %14, align 4, !tbaa !9
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %479, i32 0, i32 2
  %481 = load i32, ptr %480, align 4, !tbaa !13
  %482 = icmp eq i32 %478, %481
  br i1 %482, label %483, label %499

483:                                              ; preds = %477
  %484 = load ptr, ptr %13, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %484, i32 0, i32 11
  %486 = load i8, ptr %485, align 1, !tbaa !14
  %487 = zext i8 %486 to i32
  %488 = icmp eq i32 %487, 2
  br i1 %488, label %495, label %489

489:                                              ; preds = %483
  %490 = load ptr, ptr %13, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %490, i32 0, i32 11
  %492 = load i8, ptr %491, align 1, !tbaa !14
  %493 = zext i8 %492 to i32
  %494 = icmp eq i32 %493, 3
  br i1 %494, label %495, label %499

495:                                              ; preds = %489, %483
  %496 = load ptr, ptr %12, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %496, i32 0, i32 3
  %498 = load i32, ptr %497, align 4, !tbaa !22
  br label %503

499:                                              ; preds = %489, %477
  %500 = load ptr, ptr %12, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %500, i32 0, i32 2
  %502 = load i32, ptr %501, align 4, !tbaa !24
  br label %503

503:                                              ; preds = %499, %495
  %504 = phi i32 [ %498, %495 ], [ %502, %499 ]
  br label %509

505:                                              ; preds = %474
  %506 = load ptr, ptr %12, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %506, i32 0, i32 5
  %508 = load i32, ptr %507, align 4, !tbaa !25
  br label %509

509:                                              ; preds = %505, %503
  %510 = phi i32 [ %504, %503 ], [ %508, %505 ]
  store i32 %510, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  %511 = load i32, ptr %19, align 4, !tbaa !9
  %512 = icmp ugt i32 %511, 0
  br i1 %512, label %513, label %541

513:                                              ; preds = %509
  %514 = load i32, ptr %14, align 4, !tbaa !9
  %515 = load ptr, ptr %11, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %515, i32 0, i32 2
  %517 = load i32, ptr %516, align 4, !tbaa !13
  %518 = icmp eq i32 %514, %517
  br i1 %518, label %519, label %535

519:                                              ; preds = %513
  %520 = load ptr, ptr %13, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %520, i32 0, i32 11
  %522 = load i8, ptr %521, align 1, !tbaa !14
  %523 = zext i8 %522 to i32
  %524 = icmp eq i32 %523, 2
  br i1 %524, label %531, label %525

525:                                              ; preds = %519
  %526 = load ptr, ptr %13, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %526, i32 0, i32 11
  %528 = load i8, ptr %527, align 1, !tbaa !14
  %529 = zext i8 %528 to i32
  %530 = icmp eq i32 %529, 3
  br i1 %530, label %531, label %535

531:                                              ; preds = %525, %519
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %532, i32 0, i32 4
  %534 = load i32, ptr %533, align 1, !tbaa !26
  br label %539

535:                                              ; preds = %525, %513
  %536 = load ptr, ptr %13, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %536, i32 0, i32 2
  %538 = load i32, ptr %537, align 1, !tbaa !27
  br label %539

539:                                              ; preds = %535, %531
  %540 = phi i32 [ %534, %531 ], [ %538, %535 ]
  br label %545

541:                                              ; preds = %509
  %542 = load ptr, ptr %13, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %542, i32 0, i32 3
  %544 = load i32, ptr %543, align 1, !tbaa !28
  br label %545

545:                                              ; preds = %541, %539
  %546 = phi i32 [ %540, %539 ], [ %544, %541 ]
  store i32 %546, ptr %27, align 4, !tbaa !9
  %547 = load i32, ptr %19, align 4, !tbaa !9
  %548 = icmp ugt i32 %547, 0
  br i1 %548, label %549, label %593

549:                                              ; preds = %545
  %550 = load i32, ptr %14, align 4, !tbaa !9
  %551 = load ptr, ptr %11, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %551, i32 0, i32 3
  %553 = load i32, ptr %552, align 4, !tbaa !17
  %554 = icmp eq i32 %550, %553
  br i1 %554, label %555, label %593

555:                                              ; preds = %549
  %556 = load ptr, ptr %13, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %556, i32 0, i32 11
  %558 = load i8, ptr %557, align 1, !tbaa !14
  %559 = zext i8 %558 to i32
  %560 = icmp eq i32 %559, 3
  br i1 %560, label %561, label %593

561:                                              ; preds = %555
  %562 = load ptr, ptr %12, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %562, i32 0, i32 4
  %564 = load i32, ptr %563, align 4, !tbaa !29
  store i32 %564, ptr %26, align 4, !tbaa !9
  %565 = load ptr, ptr %13, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %565, i32 0, i32 5
  %567 = load i32, ptr %566, align 1, !tbaa !30
  store i32 %567, ptr %27, align 4, !tbaa !9
  %568 = load ptr, ptr %13, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %568, i32 0, i32 10
  %570 = load i16, ptr %569, align 1, !tbaa !19
  %571 = zext i16 %570 to i32
  %572 = icmp eq i32 %571, 3
  br i1 %572, label %573, label %592

573:                                              ; preds = %561
  store i32 1, ptr %26, align 4, !tbaa !9
  %574 = load i32, ptr %25, align 4, !tbaa !9
  %575 = udiv i32 %574, 8
  store i32 %575, ptr %25, align 4, !tbaa !9
  %576 = load ptr, ptr %13, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %576, i32 0, i32 9
  %578 = load i16, ptr %577, align 1, !tbaa !21
  %579 = zext i16 %578 to i32
  %580 = and i32 %579, 1024
  %581 = icmp sgt i32 %580, 0
  br i1 %581, label %582, label %588

582:                                              ; preds = %573
  %583 = load i32, ptr %27, align 4, !tbaa !9
  %584 = add i32 %583, 15
  %585 = udiv i32 %584, 16
  %586 = mul i32 %585, 16
  %587 = udiv i32 %586, 8
  store i32 %587, ptr %27, align 4, !tbaa !9
  br label %591

588:                                              ; preds = %573
  %589 = load i32, ptr %27, align 4, !tbaa !9
  %590 = udiv i32 %589, 8
  store i32 %590, ptr %27, align 4, !tbaa !9
  br label %591

591:                                              ; preds = %588, %582
  br label %592

592:                                              ; preds = %591, %561
  br label %593

593:                                              ; preds = %592, %555, %549, %545
  %594 = load ptr, ptr %13, align 8, !tbaa !5
  %595 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %594)
  %596 = icmp ugt i32 %595, 0
  br i1 %596, label %597, label %613

597:                                              ; preds = %593
  %598 = load ptr, ptr %13, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %598, i32 0, i32 9
  %600 = load i16, ptr %599, align 1, !tbaa !21
  %601 = zext i16 %600 to i32
  %602 = and i32 %601, 128
  %603 = icmp sgt i32 %602, 0
  br i1 %603, label %604, label %613

604:                                              ; preds = %597
  %605 = load i32, ptr %20, align 4, !tbaa !9
  %606 = icmp ugt i32 %605, 0
  br i1 %606, label %607, label %613

607:                                              ; preds = %604
  store i32 1, ptr %26, align 4, !tbaa !9
  %608 = load i32, ptr %25, align 4, !tbaa !9
  %609 = udiv i32 %608, 8
  store i32 %609, ptr %25, align 4, !tbaa !9
  %610 = load ptr, ptr %12, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %610, i32 0, i32 17
  %612 = load i32, ptr %611, align 4, !tbaa !31
  store i32 %612, ptr %27, align 4, !tbaa !9
  br label %613

613:                                              ; preds = %607, %604, %597, %593
  %614 = load i32, ptr %24, align 4, !tbaa !9
  %615 = icmp eq i32 %614, 0
  br i1 %615, label %616, label %641

616:                                              ; preds = %613
  %617 = load i32, ptr %18, align 4, !tbaa !9
  %618 = icmp eq i32 %617, 0
  br i1 %618, label %619, label %628

619:                                              ; preds = %616
  %620 = load ptr, ptr %10, align 8, !tbaa !5
  %621 = load i32, ptr %15, align 4, !tbaa !9
  %622 = load i32, ptr %14, align 4, !tbaa !9
  %623 = load i32, ptr %25, align 4, !tbaa !9
  %624 = zext i32 %623 to i64
  %625 = load i32, ptr %26, align 4, !tbaa !9
  %626 = zext i32 %625 to i64
  %627 = mul nsw i64 %624, %626
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %620, i32 noundef %621, i32 noundef %622, i64 noundef %627)
  br label %640

628:                                              ; preds = %616
  %629 = load ptr, ptr %10, align 8, !tbaa !5
  %630 = load i32, ptr %15, align 4, !tbaa !9
  %631 = load i32, ptr %14, align 4, !tbaa !9
  %632 = load i32, ptr %27, align 4, !tbaa !9
  %633 = zext i32 %632 to i64
  %634 = load i32, ptr %17, align 4, !tbaa !9
  %635 = zext i32 %634 to i64
  %636 = mul nsw i64 %633, %635
  %637 = load i32, ptr %26, align 4, !tbaa !9
  %638 = zext i32 %637 to i64
  %639 = mul nsw i64 %636, %638
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %629, i32 noundef %630, i32 noundef %631, i64 noundef %639)
  br label %640

640:                                              ; preds = %628, %619
  br label %677

641:                                              ; preds = %613
  %642 = load i32, ptr %21, align 4, !tbaa !9
  %643 = icmp ugt i32 %642, 0
  br i1 %643, label %644, label %660

644:                                              ; preds = %641
  %645 = load i32, ptr %18, align 4, !tbaa !9
  %646 = icmp eq i32 %645, 1
  br i1 %646, label %647, label %659

647:                                              ; preds = %644
  %648 = load ptr, ptr %10, align 8, !tbaa !5
  %649 = load i32, ptr %15, align 4, !tbaa !9
  %650 = load i32, ptr %14, align 4, !tbaa !9
  %651 = load i32, ptr %27, align 4, !tbaa !9
  %652 = zext i32 %651 to i64
  %653 = load i32, ptr %17, align 4, !tbaa !9
  %654 = zext i32 %653 to i64
  %655 = mul nsw i64 %652, %654
  %656 = load i32, ptr %26, align 4, !tbaa !9
  %657 = zext i32 %656 to i64
  %658 = mul nsw i64 %655, %657
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %648, i32 noundef %649, i32 noundef %650, i64 noundef %658)
  br label %659

659:                                              ; preds = %647, %644
  br label %660

660:                                              ; preds = %659, %641
  %661 = load i32, ptr %22, align 4, !tbaa !9
  %662 = icmp ugt i32 %661, 0
  br i1 %662, label %663, label %676

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

666:                                              ; preds = %663
  %667 = load ptr, ptr %10, align 8, !tbaa !5
  %668 = load i32, ptr %15, align 4, !tbaa !9
  %669 = load i32, ptr %14, align 4, !tbaa !9
  %670 = load i32, ptr %25, align 4, !tbaa !9
  %671 = zext i32 %670 to i64
  %672 = load i32, ptr %26, align 4, !tbaa !9
  %673 = zext i32 %672 to i64
  %674 = mul nsw i64 %671, %673
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %667, i32 noundef %668, i32 noundef %669, i64 noundef %674)
  br label %675

675:                                              ; preds = %666, %663
  br label %676

676:                                              ; preds = %675, %660
  br label %677

677:                                              ; preds = %676, %640
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  br label %896

678:                                              ; preds = %471
  %679 = load ptr, ptr %13, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %679, i32 0, i32 11
  %681 = load i8, ptr %680, align 1, !tbaa !14
  %682 = zext i8 %681 to i32
  %683 = icmp eq i32 %682, 1
  br i1 %683, label %684, label %895

684:                                              ; preds = %678
  %685 = load ptr, ptr %13, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %685, i32 0, i32 10
  %687 = load i16, ptr %686, align 1, !tbaa !19
  %688 = zext i16 %687 to i32
  %689 = icmp eq i32 %688, 5
  br i1 %689, label %696, label %690

690:                                              ; preds = %684
  %691 = load ptr, ptr %13, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %691, i32 0, i32 10
  %693 = load i16, ptr %692, align 1, !tbaa !19
  %694 = zext i16 %693 to i32
  %695 = icmp eq i32 %694, 34
  br i1 %695, label %696, label %726

696:                                              ; preds = %690, %684
  %697 = load ptr, ptr %13, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %697, i32 0, i32 9
  %699 = load i16, ptr %698, align 1, !tbaa !21
  %700 = zext i16 %699 to i32
  %701 = and i32 %700, 1
  %702 = icmp sgt i32 %701, 0
  br i1 %702, label %703, label %726

703:                                              ; preds = %696
  %704 = load i32, ptr %18, align 4, !tbaa !9
  %705 = icmp eq i32 %704, 0
  br i1 %705, label %706, label %713

706:                                              ; preds = %703
  %707 = load ptr, ptr %10, align 8, !tbaa !5
  %708 = load i32, ptr %15, align 4, !tbaa !9
  %709 = load i32, ptr %14, align 4, !tbaa !9
  %710 = load i32, ptr %25, align 4, !tbaa !9
  %711 = zext i32 %710 to i64
  %712 = sdiv i64 %711, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %707, i32 noundef %708, i32 noundef %709, i64 noundef %712)
  br label %725

713:                                              ; preds = %703
  %714 = load ptr, ptr %10, align 8, !tbaa !5
  %715 = load i32, ptr %15, align 4, !tbaa !9
  %716 = load i32, ptr %14, align 4, !tbaa !9
  %717 = load ptr, ptr %12, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %717, i32 0, i32 17
  %719 = load i32, ptr %718, align 4, !tbaa !31
  %720 = zext i32 %719 to i64
  %721 = load i32, ptr %17, align 4, !tbaa !9
  %722 = zext i32 %721 to i64
  %723 = mul nsw i64 %720, %722
  %724 = sdiv i64 %723, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %714, i32 noundef %715, i32 noundef %716, i64 noundef %724)
  br label %725

725:                                              ; preds = %713, %706
  br label %726

726:                                              ; preds = %725, %696, %690
  %727 = load ptr, ptr %13, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %727, i32 0, i32 10
  %729 = load i16, ptr %728, align 1, !tbaa !19
  %730 = zext i16 %729 to i32
  %731 = icmp eq i32 %730, 6
  br i1 %731, label %744, label %732

732:                                              ; preds = %726
  %733 = load ptr, ptr %13, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %733, i32 0, i32 10
  %735 = load i16, ptr %734, align 1, !tbaa !19
  %736 = zext i16 %735 to i32
  %737 = icmp eq i32 %736, 35
  br i1 %737, label %744, label %738

738:                                              ; preds = %732
  %739 = load ptr, ptr %13, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %739, i32 0, i32 10
  %741 = load i16, ptr %740, align 1, !tbaa !19
  %742 = zext i16 %741 to i32
  %743 = icmp eq i32 %742, 37
  br i1 %743, label %744, label %812

744:                                              ; preds = %738, %732, %726
  %745 = load ptr, ptr %13, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %745, i32 0, i32 9
  %747 = load i16, ptr %746, align 1, !tbaa !21
  %748 = zext i16 %747 to i32
  %749 = and i32 %748, 1
  %750 = icmp sgt i32 %749, 0
  br i1 %750, label %751, label %780

751:                                              ; preds = %744
  %752 = load ptr, ptr %13, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %752, i32 0, i32 10
  %754 = load i16, ptr %753, align 1, !tbaa !19
  %755 = zext i16 %754 to i32
  %756 = icmp ne i32 %755, 37
  br i1 %756, label %757, label %780

757:                                              ; preds = %751
  %758 = load i32, ptr %18, align 4, !tbaa !9
  %759 = icmp eq i32 %758, 0
  br i1 %759, label %760, label %767

760:                                              ; preds = %757
  %761 = load ptr, ptr %10, align 8, !tbaa !5
  %762 = load i32, ptr %15, align 4, !tbaa !9
  %763 = load i32, ptr %14, align 4, !tbaa !9
  %764 = load i32, ptr %25, align 4, !tbaa !9
  %765 = zext i32 %764 to i64
  %766 = sdiv i64 %765, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %761, i32 noundef %762, i32 noundef %763, i64 noundef %766)
  br label %779

767:                                              ; preds = %757
  %768 = load ptr, ptr %10, align 8, !tbaa !5
  %769 = load i32, ptr %15, align 4, !tbaa !9
  %770 = load i32, ptr %14, align 4, !tbaa !9
  %771 = load ptr, ptr %12, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %771, i32 0, i32 16
  %773 = load i32, ptr %772, align 4, !tbaa !32
  %774 = zext i32 %773 to i64
  %775 = load i32, ptr %17, align 4, !tbaa !9
  %776 = zext i32 %775 to i64
  %777 = mul nsw i64 %774, %776
  %778 = sdiv i64 %777, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %768, i32 noundef %769, i32 noundef %770, i64 noundef %778)
  br label %779

779:                                              ; preds = %767, %760
  br label %811

780:                                              ; preds = %751, %744
  %781 = load i32, ptr %18, align 4, !tbaa !9
  %782 = icmp eq i32 %781, 0
  br i1 %782, label %783, label %794

783:                                              ; preds = %780
  %784 = load ptr, ptr %10, align 8, !tbaa !5
  %785 = load i32, ptr %15, align 4, !tbaa !9
  %786 = load i32, ptr %14, align 4, !tbaa !9
  %787 = load i32, ptr %25, align 4, !tbaa !9
  %788 = zext i32 %787 to i64
  %789 = load ptr, ptr %12, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %789, i32 0, i32 2
  %791 = load i32, ptr %790, align 4, !tbaa !24
  %792 = zext i32 %791 to i64
  %793 = mul nsw i64 %788, %792
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %784, i32 noundef %785, i32 noundef %786, i64 noundef %793)
  br label %810

794:                                              ; preds = %780
  %795 = load ptr, ptr %10, align 8, !tbaa !5
  %796 = load i32, ptr %15, align 4, !tbaa !9
  %797 = load i32, ptr %14, align 4, !tbaa !9
  %798 = load ptr, ptr %13, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %798, i32 0, i32 2
  %800 = load i32, ptr %799, align 1, !tbaa !27
  %801 = zext i32 %800 to i64
  %802 = load i32, ptr %17, align 4, !tbaa !9
  %803 = zext i32 %802 to i64
  %804 = mul nsw i64 %801, %803
  %805 = load ptr, ptr %12, align 8, !tbaa !5
  %806 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %805, i32 0, i32 2
  %807 = load i32, ptr %806, align 4, !tbaa !24
  %808 = zext i32 %807 to i64
  %809 = mul nsw i64 %804, %808
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %795, i32 noundef %796, i32 noundef %797, i64 noundef %809)
  br label %810

810:                                              ; preds = %794, %783
  br label %811

811:                                              ; preds = %810, %779
  br label %812

812:                                              ; preds = %811, %738
  %813 = load ptr, ptr %13, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %813, i32 0, i32 10
  %815 = load i16, ptr %814, align 1, !tbaa !19
  %816 = zext i16 %815 to i32
  %817 = icmp eq i32 %816, 25
  br i1 %817, label %818, label %848

818:                                              ; preds = %812
  %819 = load ptr, ptr %13, align 8, !tbaa !5
  %820 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %819, i32 0, i32 9
  %821 = load i16, ptr %820, align 1, !tbaa !21
  %822 = zext i16 %821 to i32
  %823 = and i32 %822, 1
  %824 = icmp sgt i32 %823, 0
  br i1 %824, label %825, label %848

825:                                              ; preds = %818
  %826 = load i32, ptr %18, align 4, !tbaa !9
  %827 = icmp eq i32 %826, 0
  br i1 %827, label %828, label %835

828:                                              ; preds = %825
  %829 = load ptr, ptr %10, align 8, !tbaa !5
  %830 = load i32, ptr %15, align 4, !tbaa !9
  %831 = load i32, ptr %14, align 4, !tbaa !9
  %832 = load i32, ptr %25, align 4, !tbaa !9
  %833 = zext i32 %832 to i64
  %834 = sdiv i64 %833, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %829, i32 noundef %830, i32 noundef %831, i64 noundef %834)
  br label %847

835:                                              ; preds = %825
  %836 = load ptr, ptr %10, align 8, !tbaa !5
  %837 = load i32, ptr %15, align 4, !tbaa !9
  %838 = load i32, ptr %14, align 4, !tbaa !9
  %839 = load ptr, ptr %12, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %839, i32 0, i32 17
  %841 = load i32, ptr %840, align 4, !tbaa !31
  %842 = zext i32 %841 to i64
  %843 = load i32, ptr %17, align 4, !tbaa !9
  %844 = zext i32 %843 to i64
  %845 = mul nsw i64 %842, %844
  %846 = sdiv i64 %845, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %836, i32 noundef %837, i32 noundef %838, i64 noundef %846)
  br label %847

847:                                              ; preds = %835, %828
  br label %848

848:                                              ; preds = %847, %818, %812
  %849 = load ptr, ptr %13, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %849, i32 0, i32 10
  %851 = load i16, ptr %850, align 1, !tbaa !19
  %852 = zext i16 %851 to i32
  %853 = icmp eq i32 %852, 26
  br i1 %853, label %854, label %894

854:                                              ; preds = %848
  %855 = load ptr, ptr %13, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %855, i32 0, i32 9
  %857 = load i16, ptr %856, align 1, !tbaa !21
  %858 = zext i16 %857 to i32
  %859 = and i32 %858, 1
  %860 = icmp sgt i32 %859, 0
  br i1 %860, label %861, label %884

861:                                              ; preds = %854
  %862 = load i32, ptr %18, align 4, !tbaa !9
  %863 = icmp eq i32 %862, 0
  br i1 %863, label %864, label %871

864:                                              ; preds = %861
  %865 = load ptr, ptr %10, align 8, !tbaa !5
  %866 = load i32, ptr %15, align 4, !tbaa !9
  %867 = load i32, ptr %14, align 4, !tbaa !9
  %868 = load i32, ptr %25, align 4, !tbaa !9
  %869 = zext i32 %868 to i64
  %870 = sdiv i64 %869, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %865, i32 noundef %866, i32 noundef %867, i64 noundef %870)
  br label %883

871:                                              ; preds = %861
  %872 = load ptr, ptr %10, align 8, !tbaa !5
  %873 = load i32, ptr %15, align 4, !tbaa !9
  %874 = load i32, ptr %14, align 4, !tbaa !9
  %875 = load ptr, ptr %12, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %875, i32 0, i32 16
  %877 = load i32, ptr %876, align 4, !tbaa !32
  %878 = zext i32 %877 to i64
  %879 = load i32, ptr %17, align 4, !tbaa !9
  %880 = zext i32 %879 to i64
  %881 = mul nsw i64 %878, %880
  %882 = sdiv i64 %881, 8
  call void @libxsmm_x86_instruction_alu_imm(ptr noundef %872, i32 noundef %873, i32 noundef %874, i64 noundef %882)
  br label %883

883:                                              ; preds = %871, %864
  br label %893

884:                                              ; preds = %854
  %885 = load ptr, ptr %10, align 8, !tbaa !5
  %886 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %887 = icmp ult i32 1, %886
  br i1 %887, label %888, label %890

888:                                              ; preds = %884
  %889 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %891

890:                                              ; preds = %884
  br label %891

891:                                              ; preds = %890, %888
  %892 = phi i32 [ %889, %888 ], [ 1, %890 ]
  call void @libxsmm_handle_error(ptr noundef %885, i32 noundef 90045, ptr noundef @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_gp_reg, ptr noundef @.str, i32 noundef 144, i32 noundef %892)
  store i32 1, ptr %28, align 4
  br label %897

893:                                              ; preds = %883
  br label %894

894:                                              ; preds = %893, %848
  br label %895

895:                                              ; preds = %894, %678
  br label %896

896:                                              ; preds = %895, %677
  store i32 0, ptr %28, align 4
  br label %897

897:                                              ; preds = %896, %891
  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
  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
  %898 = load i32, ptr %28, align 4
  switch i32 %898, label %900 [
    i32 0, label %899
    i32 1, label %899
  ]

899:                                              ; preds = %897, %897
  ret void

900:                                              ; preds = %897
  unreachable
}

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

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) #2

declare void @libxsmm_x86_instruction_alu_imm(ptr noundef, i32 noundef, i32 noundef, i64 noundef) #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 12}
!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 8}
!25 = !{!23, !10, i64 20}
!26 = !{!15, !10, i64 16}
!27 = !{!15, !10, i64 8}
!28 = !{!15, !10, i64 12}
!29 = !{!23, !10, i64 16}
!30 = !{!15, !10, i64 20}
!31 = !{!23, !10, i64 68}
!32 = !{!23, !10, i64 64}


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

@__func__.libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_gp_reg = external hidden unnamed_addr constant [79 x i8], align 1
@.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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_mateltwise_unary_binary_adjust_after_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, i32 noundef %8) local_unnamed_addr #0 {
  %10 = getelementptr inbounds i8, ptr %1, i64 4
  %11 = load i32, ptr %10, align 4, !tbaa !5
  %12 = icmp eq i32 %11, %4
  br i1 %12, label %29, label %13

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

17:                                               ; preds = %13
  %18 = getelementptr inbounds i8, ptr %3, i64 31
  %19 = load i8, ptr %18, align 1, !tbaa !11
  %20 = and i8 %19, -2
  %switch = icmp eq i8 %20, 2
  br i1 %switch, label %29, label %21

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

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

29:                                               ; preds = %17, %21, %25, %9
  %30 = phi i1 [ true, %9 ], [ false, %21 ], [ %28, %25 ], [ true, %17 ]
  %31 = getelementptr inbounds i8, ptr %1, i64 24
  %32 = load i32, ptr %31, align 4, !tbaa !15
  %33 = icmp eq i32 %32, %4
  br i1 %33, label %46, label %34

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

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

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

46:                                               ; preds = %34, %38, %42, %29
  %47 = phi i1 [ true, %29 ], [ false, %38 ], [ false, %34 ], [ %45, %42 ]
  br i1 %12, label %48, label %.thread297

48:                                               ; preds = %46
  %49 = getelementptr inbounds i8, ptr %3, i64 31
  %50 = load i8, ptr %49, align 1, !tbaa !11
  switch i8 %50, label %.thread297 [
    i8 1, label %51
    i8 2, label %55
    i8 3, label %59
  ]

51:                                               ; preds = %48
  %52 = getelementptr inbounds i8, ptr %3, i64 27
  %53 = load i16, ptr %52, align 1, !tbaa !18
  %54 = and i16 %53, 2
  %.not = icmp eq i16 %54, 0
  br i1 %.not, label %.thread297, label %.thread269.thread299

55:                                               ; preds = %48
  %56 = getelementptr inbounds i8, ptr %3, i64 27
  %57 = load i16, ptr %56, align 1, !tbaa !18
  %58 = and i16 %57, 1
  %.not238 = icmp eq i16 %58, 0
  br i1 %.not238, label %.thread297, label %.thread269.thread.thread

59:                                               ; preds = %48
  %60 = getelementptr inbounds i8, ptr %3, i64 27
  %61 = load i16, ptr %60, align 1, !tbaa !18
  %62 = and i16 %61, 1
  %.not239 = icmp eq i16 %62, 0
  br i1 %.not239, label %.thread297, label %.thread320

.thread297:                                       ; preds = %48, %51, %55, %46, %59
  %63 = getelementptr inbounds i8, ptr %1, i64 8
  %64 = load i32, ptr %63, align 4, !tbaa !10
  %65 = icmp eq i32 %64, %4
  br i1 %65, label %66, label %.thread298

66:                                               ; preds = %.thread297
  %67 = getelementptr inbounds i8, ptr %3, i64 31
  %68 = load i8, ptr %67, align 1, !tbaa !11
  switch i8 %68, label %.thread298 [
    i8 2, label %69
    i8 3, label %73
  ]

69:                                               ; preds = %66
  %70 = getelementptr inbounds i8, ptr %3, i64 27
  %71 = load i16, ptr %70, align 1, !tbaa !18
  %72 = and i16 %71, 2
  %.not240 = icmp eq i16 %72, 0
  br i1 %.not240, label %.thread298, label %89

73:                                               ; preds = %66
  %74 = getelementptr inbounds i8, ptr %3, i64 27
  %75 = load i16, ptr %74, align 1, !tbaa !18
  %76 = and i16 %75, 2
  %.not241 = icmp eq i16 %76, 0
  br i1 %.not241, label %.thread298, label %89

.thread298:                                       ; preds = %66, %69, %.thread297, %73
  %77 = getelementptr inbounds i8, ptr %1, i64 12
  %78 = load i32, ptr %77, align 4, !tbaa !14
  %79 = icmp eq i32 %78, %4
  br i1 %79, label %80, label %89

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

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

89:                                               ; preds = %.thread298, %80, %84, %73, %69
  %90 = phi i1 [ true, %73 ], [ true, %69 ], [ false, %80 ], [ false, %.thread298 ], [ %88, %84 ]
  br i1 %12, label %.thread269, label %.thread304

.thread269:                                       ; preds = %89
  %.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 %.thread304 [
    i8 1, label %.thread269.thread299
    i8 2, label %.thread269.thread.thread
    i8 3, label %.thread320
  ]

.thread269.thread299:                             ; preds = %.thread269, %51
  %91 = phi i1 [ %90, %.thread269 ], [ true, %51 ]
  %92 = getelementptr inbounds i8, ptr %3, i64 27
  %93 = load i16, ptr %92, align 1, !tbaa !18
  %94 = and i16 %93, 4
  %.not242 = icmp eq i16 %94, 0
  br i1 %.not242, label %.thread304, label %.thread277.thread308

.thread269.thread.thread:                         ; preds = %.thread269, %55
  %95 = phi i1 [ true, %55 ], [ %90, %.thread269 ]
  %96 = getelementptr inbounds i8, ptr %3, i64 27
  %97 = load i16, ptr %96, align 1, !tbaa !18
  %98 = and i16 %97, 4
  %.not243 = icmp eq i16 %98, 0
  br i1 %.not243, label %.thread304, label %.thread277.thread.thread

.thread320:                                       ; preds = %.thread269, %59
  %99 = phi i1 [ true, %59 ], [ %90, %.thread269 ]
  %100 = getelementptr inbounds i8, ptr %3, i64 27
  %101 = load i16, ptr %100, align 1, !tbaa !18
  %102 = and i16 %101, 8
  %.not244 = icmp eq i16 %102, 0
  br i1 %.not244, label %.thread304, label %.thread322

.thread304:                                       ; preds = %.thread269, %.thread269.thread299, %.thread269.thread.thread, %89, %.thread320
  %103 = phi i1 [ %99, %.thread320 ], [ %90, %89 ], [ %95, %.thread269.thread.thread ], [ %91, %.thread269.thread299 ], [ %90, %.thread269 ]
  %104 = getelementptr inbounds i8, ptr %1, i64 8
  %105 = load i32, ptr %104, align 4, !tbaa !10
  %106 = icmp eq i32 %105, %4
  br i1 %106, label %107, label %.thread305

107:                                              ; preds = %.thread304
  %108 = getelementptr inbounds i8, ptr %3, i64 31
  %109 = load i8, ptr %108, align 1, !tbaa !11
  switch i8 %109, label %.thread305 [
    i8 2, label %110
    i8 3, label %114
  ]

110:                                              ; preds = %107
  %111 = getelementptr inbounds i8, ptr %3, i64 27
  %112 = load i16, ptr %111, align 1, !tbaa !18
  %113 = and i16 %112, 8
  %.not245 = icmp eq i16 %113, 0
  br i1 %.not245, label %.thread305, label %130

114:                                              ; preds = %107
  %115 = getelementptr inbounds i8, ptr %3, i64 27
  %116 = load i16, ptr %115, align 1, !tbaa !18
  %117 = and i16 %116, 16
  %.not246 = icmp eq i16 %117, 0
  br i1 %.not246, label %.thread305, label %130

.thread305:                                       ; preds = %107, %110, %.thread304, %114
  %118 = getelementptr inbounds i8, ptr %1, i64 12
  %119 = load i32, ptr %118, align 4, !tbaa !14
  %120 = icmp eq i32 %119, %4
  br i1 %120, label %121, label %130

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

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

130:                                              ; preds = %.thread305, %121, %125, %114, %110
  %131 = phi i1 [ true, %114 ], [ true, %110 ], [ false, %121 ], [ false, %.thread305 ], [ %129, %125 ]
  br i1 %12, label %.thread277, label %.thread314

.thread277:                                       ; preds = %130
  %.phi.trans.insert295 = getelementptr inbounds i8, ptr %3, i64 31
  %.pre296 = load i8, ptr %.phi.trans.insert295, align 1, !tbaa !11
  switch i8 %.pre296, label %.thread314 [
    i8 1, label %.thread277.thread308
    i8 2, label %.thread277.thread.thread
    i8 3, label %.thread322
  ]

.thread277.thread308:                             ; preds = %.thread277, %.thread269.thread299
  %132 = phi i1 [ %103, %.thread277 ], [ %91, %.thread269.thread299 ]
  %133 = phi i1 [ %131, %.thread277 ], [ true, %.thread269.thread299 ]
  %134 = getelementptr inbounds i8, ptr %3, i64 27
  %135 = load i16, ptr %134, align 1, !tbaa !18
  %136 = and i16 %135, 8
  %.not247 = icmp eq i16 %136, 0
  br i1 %.not247, label %.thread314, label %175

.thread277.thread.thread:                         ; preds = %.thread277, %.thread269.thread.thread
  %137 = phi i1 [ true, %.thread269.thread.thread ], [ %131, %.thread277 ]
  %138 = phi i1 [ %95, %.thread269.thread.thread ], [ %103, %.thread277 ]
  %139 = getelementptr inbounds i8, ptr %3, i64 27
  %140 = load i16, ptr %139, align 1, !tbaa !18
  %141 = and i16 %140, 16
  %.not248 = icmp eq i16 %141, 0
  br i1 %.not248, label %.thread314, label %175

.thread322:                                       ; preds = %.thread277, %.thread320
  %142 = phi i1 [ %99, %.thread320 ], [ %103, %.thread277 ]
  %143 = phi i1 [ true, %.thread320 ], [ %131, %.thread277 ]
  %144 = getelementptr inbounds i8, ptr %3, i64 27
  %145 = load i16, ptr %144, align 1, !tbaa !18
  %146 = and i16 %145, 64
  %.not249 = icmp eq i16 %146, 0
  br i1 %.not249, label %.thread314, label %175

.thread314:                                       ; preds = %.thread277, %.thread277.thread308, %.thread277.thread.thread, %130, %.thread322
  %147 = phi i1 [ %143, %.thread322 ], [ %131, %130 ], [ %137, %.thread277.thread.thread ], [ %133, %.thread277.thread308 ], [ %131, %.thread277 ]
  %148 = phi i1 [ %142, %.thread322 ], [ %103, %130 ], [ %138, %.thread277.thread.thread ], [ %132, %.thread277.thread308 ], [ %103, %.thread277 ]
  %149 = getelementptr inbounds i8, ptr %1, i64 8
  %150 = load i32, ptr %149, align 4, !tbaa !10
  %151 = icmp eq i32 %150, %4
  br i1 %151, label %152, label %.thread315

152:                                              ; preds = %.thread314
  %153 = getelementptr inbounds i8, ptr %3, i64 31
  %154 = load i8, ptr %153, align 1, !tbaa !11
  switch i8 %154, label %.thread315 [
    i8 2, label %155
    i8 3, label %159
  ]

155:                                              ; preds = %152
  %156 = getelementptr inbounds i8, ptr %3, i64 27
  %157 = load i16, ptr %156, align 1, !tbaa !18
  %158 = and i16 %157, 32
  %.not250 = icmp eq i16 %158, 0
  br i1 %.not250, label %.thread315, label %175

159:                                              ; preds = %152
  %160 = getelementptr inbounds i8, ptr %3, i64 27
  %161 = load i16, ptr %160, align 1, !tbaa !18
  %162 = and i16 %161, 128
  %.not251 = icmp eq i16 %162, 0
  br i1 %.not251, label %.thread315, label %175

.thread315:                                       ; preds = %152, %155, %.thread314, %159
  %163 = getelementptr inbounds i8, ptr %1, i64 12
  %164 = load i32, ptr %163, align 4, !tbaa !14
  %165 = icmp eq i32 %164, %4
  br i1 %165, label %166, label %175

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

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

175:                                              ; preds = %.thread315, %166, %170, %159, %155, %.thread322, %.thread277.thread.thread, %.thread277.thread308
  %176 = phi i1 [ %147, %159 ], [ %147, %155 ], [ %143, %.thread322 ], [ %137, %.thread277.thread.thread ], [ %133, %.thread277.thread308 ], [ %147, %166 ], [ %147, %.thread315 ], [ %147, %170 ]
  %177 = phi i1 [ %148, %159 ], [ %148, %155 ], [ %142, %.thread322 ], [ %138, %.thread277.thread.thread ], [ %132, %.thread277.thread308 ], [ %148, %166 ], [ %148, %.thread315 ], [ %148, %170 ]
  %178 = phi i1 [ true, %159 ], [ true, %155 ], [ true, %.thread322 ], [ true, %.thread277.thread.thread ], [ true, %.thread277.thread308 ], [ false, %166 ], [ false, %.thread315 ], [ %174, %170 ]
  %or.cond = select i1 %177, i1 true, i1 %176
  %spec.select = select i1 %or.cond, i1 true, i1 %178
  %or.cond3 = select i1 %30, i1 true, i1 %47
  br i1 %or.cond3, label %179, label %264

179:                                              ; preds = %175
  br i1 %30, label %180, label %192

180:                                              ; preds = %179
  %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
  %switch261 = icmp eq i8 %187, 2
  %. = select i1 %switch261, i64 12, i64 8
  %188 = getelementptr inbounds i8, ptr %2, i64 %.
  %189 = and i8 %186, -2
  %switch263 = icmp eq i8 %189, 2
  %spec.select327 = select i1 %switch263, i64 16, i64 8
  br label %197

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

192:                                              ; preds = %179
  %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
  br label %227

197:                                              ; preds = %184, %190
  %.sink = phi i64 [ 8, %190 ], [ %spec.select327, %184 ]
  %.in = phi ptr [ %191, %190 ], [ %188, %184 ]
  %198 = load i32, ptr %.in, align 4, !tbaa !19
  %199 = getelementptr inbounds i8, ptr %3, i64 %.sink
  %200 = load i32, ptr %199, align 1, !tbaa !19
  %201 = getelementptr inbounds i8, ptr %1, i64 12
  %202 = load i32, ptr %201, align 4, !tbaa !14
  %203 = icmp eq i32 %202, %4
  br i1 %203, label %204, label %227

204:                                              ; preds = %197
  %205 = getelementptr inbounds i8, ptr %3, i64 31
  %206 = load i8, ptr %205, align 1, !tbaa !11
  %207 = icmp eq i8 %206, 3
  br i1 %207, label %208, label %227

208:                                              ; preds = %204
  %209 = getelementptr inbounds i8, ptr %2, i64 16
  %210 = load i32, ptr %209, align 4, !tbaa !20
  %211 = getelementptr inbounds i8, ptr %3, i64 20
  %212 = load i32, ptr %211, align 1, !tbaa !22
  %213 = getelementptr inbounds i8, ptr %3, i64 29
  %214 = load i16, ptr %213, align 1, !tbaa !16
  %215 = icmp eq i16 %214, 3
  br i1 %215, label %216, label %227

216:                                              ; preds = %208
  %217 = lshr i32 %6, 3
  %218 = getelementptr inbounds i8, ptr %3, i64 27
  %219 = load i16, ptr %218, align 1, !tbaa !18
  %220 = and i16 %219, 1024
  %.not258 = icmp eq i16 %220, 0
  br i1 %.not258, label %225, label %221

221:                                              ; preds = %216
  %222 = add i32 %212, 15
  %223 = lshr i32 %222, 3
  %224 = and i32 %223, 536870910
  br label %227

225:                                              ; preds = %216
  %226 = lshr i32 %212, 3
  br label %227

227:                                              ; preds = %192, %208, %225, %221, %204, %197
  %.0229 = phi i32 [ %217, %221 ], [ %217, %225 ], [ %6, %208 ], [ %6, %204 ], [ %6, %197 ], [ %6, %192 ]
  %.0227 = phi i32 [ 1, %221 ], [ 1, %225 ], [ %210, %208 ], [ %198, %204 ], [ %198, %197 ], [ %194, %192 ]
  %.0 = phi i32 [ %224, %221 ], [ %226, %225 ], [ %212, %208 ], [ %200, %204 ], [ %200, %197 ], [ %196, %192 ]
  %228 = tail call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %3) #2
  %.not259 = icmp eq i32 %228, 0
  br i1 %.not259, label %238, label %229

229:                                              ; preds = %227
  %230 = getelementptr inbounds i8, ptr %3, i64 27
  %231 = load i16, ptr %230, align 1, !tbaa !18
  %232 = and i16 %231, 128
  %233 = icmp ne i16 %232, 0
  %or.cond5 = select i1 %233, i1 %47, i1 false
  br i1 %or.cond5, label %234, label %238

234:                                              ; preds = %229
  %235 = lshr i32 %.0229, 3
  %236 = getelementptr inbounds i8, ptr %2, i64 68
  %237 = load i32, ptr %236, align 4, !tbaa !23
  br label %238

238:                                              ; preds = %234, %229, %227
  %.1230 = phi i32 [ %235, %234 ], [ %.0229, %229 ], [ %.0229, %227 ]
  %.1228 = phi i32 [ 1, %234 ], [ %.0227, %229 ], [ %.0227, %227 ]
  %.1 = phi i32 [ %237, %234 ], [ %.0, %229 ], [ %.0, %227 ]
  br i1 %spec.select, label %251, label %239

239:                                              ; preds = %238
  %240 = icmp eq i32 %8, 0
  br i1 %240, label %241, label %245

241:                                              ; preds = %239
  %242 = zext i32 %.1230 to i64
  %243 = zext i32 %.1228 to i64
  %244 = mul nuw nsw i64 %243, %242
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %244) #2
  br label %365

245:                                              ; preds = %239
  %246 = zext i32 %.1 to i64
  %247 = zext i32 %7 to i64
  %248 = zext i32 %.1228 to i64
  %249 = mul nuw i64 %248, %247
  %250 = mul i64 %249, %246
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %250) #2
  br label %365

251:                                              ; preds = %238
  %252 = icmp eq i32 %8, 1
  %or.cond7 = and i1 %252, %177
  br i1 %or.cond7, label %.thread290, label %258

.thread290:                                       ; preds = %251
  %253 = zext i32 %.1 to i64
  %254 = zext i32 %7 to i64
  %255 = zext i32 %.1228 to i64
  %256 = mul nuw i64 %255, %254
  %257 = mul i64 %256, %253
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %257) #2
  br label %365

258:                                              ; preds = %251
  %259 = icmp eq i32 %8, 0
  %or.cond9 = and i1 %259, %176
  br i1 %or.cond9, label %260, label %365

260:                                              ; preds = %258
  %261 = zext i32 %.1230 to i64
  %262 = zext i32 %.1228 to i64
  %263 = mul nuw nsw i64 %262, %261
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %263) #2
  br label %365

264:                                              ; preds = %175
  %265 = getelementptr inbounds i8, ptr %3, i64 31
  %266 = load i8, ptr %265, align 1, !tbaa !11
  %267 = icmp eq i8 %266, 1
  br i1 %267, label %268, label %365

268:                                              ; preds = %264
  %269 = getelementptr inbounds i8, ptr %3, i64 29
  %270 = load i16, ptr %269, align 1, !tbaa !16
  switch i16 %270, label %287 [
    i16 5, label %271
    i16 34, label %271
  ]

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

275:                                              ; preds = %271
  %276 = icmp eq i32 %8, 0
  br i1 %276, label %277, label %280

277:                                              ; preds = %275
  %278 = lshr i32 %6, 3
  %279 = zext nneg i32 %278 to i64
  br label %thread-pre-split.sink.split

280:                                              ; preds = %275
  %281 = getelementptr inbounds i8, ptr %2, i64 68
  %282 = load i32, ptr %281, align 4, !tbaa !23
  %283 = zext i32 %282 to i64
  %284 = zext i32 %7 to i64
  %285 = mul nuw nsw i64 %283, %284
  %286 = lshr i64 %285, 3
  br label %thread-pre-split.sink.split

thread-pre-split.sink.split:                      ; preds = %277, %280
  %.sink324 = phi i64 [ %286, %280 ], [ %279, %277 ]
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.sink324) #2
  br label %thread-pre-split

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

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

289:                                              ; preds = %287, %287, %287
  %290 = getelementptr inbounds i8, ptr %3, i64 27
  %291 = load i16, ptr %290, align 1, !tbaa !18
  %292 = and i16 %291, 1
  %.not253 = icmp eq i16 %292, 0
  %.not254 = icmp eq i16 %288, 37
  %or.cond294 = or i1 %.not254, %.not253
  %293 = icmp eq i32 %8, 0
  br i1 %or.cond294, label %305, label %294

294:                                              ; preds = %289
  br i1 %293, label %295, label %298

295:                                              ; preds = %294
  %296 = lshr i32 %6, 3
  %297 = zext nneg i32 %296 to i64
  br label %.sink.split

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

305:                                              ; preds = %289
  br i1 %293, label %306, label %312

306:                                              ; preds = %305
  %307 = zext i32 %6 to i64
  %308 = getelementptr inbounds i8, ptr %2, i64 8
  %309 = load i32, ptr %308, align 4, !tbaa !25
  %310 = zext i32 %309 to i64
  %311 = mul nuw nsw i64 %310, %307
  br label %.sink.split

312:                                              ; preds = %305
  %313 = getelementptr inbounds i8, ptr %3, i64 8
  %314 = load i32, ptr %313, align 1, !tbaa !26
  %315 = zext i32 %314 to i64
  %316 = zext i32 %7 to i64
  %317 = mul nuw nsw i64 %315, %316
  %318 = getelementptr inbounds i8, ptr %2, i64 8
  %319 = load i32, ptr %318, align 4, !tbaa !25
  %320 = zext i32 %319 to i64
  %321 = mul nuw nsw i64 %317, %320
  br label %.sink.split

.sink.split:                                      ; preds = %306, %312, %295, %298
  %.sink325 = phi i64 [ %304, %298 ], [ %297, %295 ], [ %321, %312 ], [ %311, %306 ]
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.sink325) #2
  br label %322

322:                                              ; preds = %.sink.split, %287
  %323 = load i16, ptr %269, align 1, !tbaa !16
  %324 = icmp eq i16 %323, 25
  br i1 %324, label %325, label %341

325:                                              ; preds = %322
  %326 = getelementptr inbounds i8, ptr %3, i64 27
  %327 = load i16, ptr %326, align 1, !tbaa !18
  %328 = and i16 %327, 1
  %.not255 = icmp eq i16 %328, 0
  br i1 %.not255, label %thread-pre-split292, label %329

329:                                              ; preds = %325
  %330 = icmp eq i32 %8, 0
  br i1 %330, label %331, label %334

331:                                              ; preds = %329
  %332 = lshr i32 %6, 3
  %333 = zext nneg i32 %332 to i64
  br label %thread-pre-split292.sink.split

334:                                              ; preds = %329
  %335 = getelementptr inbounds i8, ptr %2, i64 68
  %336 = load i32, ptr %335, align 4, !tbaa !23
  %337 = zext i32 %336 to i64
  %338 = zext i32 %7 to i64
  %339 = mul nuw nsw i64 %337, %338
  %340 = lshr i64 %339, 3
  br label %thread-pre-split292.sink.split

thread-pre-split292.sink.split:                   ; preds = %331, %334
  %.sink326 = phi i64 [ %340, %334 ], [ %333, %331 ]
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %.sink326) #2
  br label %thread-pre-split292

thread-pre-split292:                              ; preds = %thread-pre-split292.sink.split, %325
  %.pr293 = load i16, ptr %269, align 1, !tbaa !16
  br label %341

341:                                              ; preds = %thread-pre-split292, %322
  %342 = phi i16 [ %.pr293, %thread-pre-split292 ], [ %323, %322 ]
  %343 = icmp eq i16 %342, 26
  br i1 %343, label %344, label %365

344:                                              ; preds = %341
  %345 = getelementptr inbounds i8, ptr %3, i64 27
  %346 = load i16, ptr %345, align 1, !tbaa !18
  %347 = and i16 %346, 1
  %.not256 = icmp eq i16 %347, 0
  br i1 %.not256, label %360, label %348

348:                                              ; preds = %344
  %349 = icmp eq i32 %8, 0
  br i1 %349, label %350, label %353

350:                                              ; preds = %348
  %351 = lshr i32 %6, 3
  %352 = zext nneg i32 %351 to i64
  tail call void @libxsmm_x86_instruction_alu_imm(ptr noundef %0, i32 noundef %5, i32 noundef %4, i64 noundef %352) #2
  br label %365

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

360:                                              ; preds = %344
  %361 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %362 = icmp ugt i32 %361, 1
  %363 = load i32, ptr @libxsmm_verbosity, align 4
  %364 = select i1 %362, i32 %363, i32 1
  tail call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90045, ptr noundef nonnull @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_gp_reg, ptr noundef nonnull @.str, i32 noundef 144, i32 noundef %364) #2
  br label %365

365:                                              ; preds = %.thread290, %341, %350, %353, %264, %258, %260, %241, %245, %360
  ret void
}

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #1

declare void @libxsmm_x86_instruction_alu_imm(ptr noundef, i32 noundef, i32 noundef, i64 noundef) local_unnamed_addr #1

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = !{!21, !7, i64 16}
!21 = !{!"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}
!22 = !{!12, !7, i64 20}
!23 = !{!21, !7, i64 68}
!24 = !{!21, !7, i64 64}
!25 = !{!21, !7, i64 8}
!26 = !{!12, !7, i64 8}


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