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

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

%struct.libxsmm_mateltwise_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_aarch64_gp_reg = external hidden unnamed_addr constant [87 x i8], align 1
@.str = external hidden unnamed_addr constant [97 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_aarch64_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
  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
  %28 = load i32, ptr %14, align 4, !tbaa !9
  %29 = load ptr, ptr %11, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %29, i32 0, i32 1
  %31 = load i32, ptr %30, align 4, !tbaa !11
  %32 = icmp eq i32 %28, %31
  br i1 %32, label %65, label %33

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

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

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

51:                                               ; preds = %45, %33
  %52 = load i32, ptr %14, align 4, !tbaa !9
  %53 = load ptr, ptr %11, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %53, i32 0, i32 3
  %55 = load i32, ptr %54, align 4, !tbaa !17
  %56 = icmp eq i32 %52, %55
  br i1 %56, label %57, label %63

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

63:                                               ; preds = %57, %51
  %64 = phi i1 [ false, %51 ], [ %62, %57 ]
  br label %65

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

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

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

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

92:                                               ; preds = %86, %80, %74
  %93 = phi i1 [ false, %80 ], [ false, %74 ], [ %91, %86 ]
  br label %94

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

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

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

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

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

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

135:                                              ; preds = %128, %122, %116
  %136 = load i32, ptr %14, align 4, !tbaa !9
  %137 = load ptr, ptr %11, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %137, i32 0, i32 1
  %139 = load i32, ptr %138, align 4, !tbaa !11
  %140 = icmp eq i32 %136, %139
  br i1 %140, label %141, label %154

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

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

154:                                              ; preds = %147, %141, %135
  %155 = load i32, ptr %14, align 4, !tbaa !9
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %156, i32 0, i32 2
  %158 = load i32, ptr %157, align 4, !tbaa !13
  %159 = icmp eq i32 %155, %158
  br i1 %159, label %160, label %173

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

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

173:                                              ; preds = %166, %160, %154
  %174 = load i32, ptr %14, align 4, !tbaa !9
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %175, i32 0, i32 2
  %177 = load i32, ptr %176, align 4, !tbaa !13
  %178 = icmp eq i32 %174, %177
  br i1 %178, label %179, label %192

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

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

192:                                              ; preds = %185, %179, %173
  %193 = load i32, ptr %14, align 4, !tbaa !9
  %194 = load ptr, ptr %11, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %194, i32 0, i32 3
  %196 = load i32, ptr %195, align 4, !tbaa !17
  %197 = icmp eq i32 %193, %196
  br i1 %197, label %198, label %211

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

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

211:                                              ; preds = %204, %198, %192
  %212 = phi i1 [ false, %198 ], [ false, %192 ], [ %210, %204 ]
  br label %213

213:                                              ; preds = %211, %185, %166, %147, %128, %109
  %214 = phi i1 [ true, %185 ], [ true, %166 ], [ true, %147 ], [ true, %128 ], [ true, %109 ], [ %212, %211 ]
  %215 = zext i1 %214 to i64
  %216 = select i1 %214, i32 1, i32 0
  store i32 %216, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %217 = load i32, ptr %14, align 4, !tbaa !9
  %218 = load ptr, ptr %11, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %218, i32 0, i32 1
  %220 = load i32, ptr %219, align 4, !tbaa !11
  %221 = icmp eq i32 %217, %220
  br i1 %221, label %222, label %235

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

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

235:                                              ; preds = %228, %222, %213
  %236 = load i32, ptr %14, align 4, !tbaa !9
  %237 = load ptr, ptr %11, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %237, i32 0, i32 1
  %239 = load i32, ptr %238, align 4, !tbaa !11
  %240 = icmp eq i32 %236, %239
  br i1 %240, label %241, label %254

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

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

254:                                              ; preds = %247, %241, %235
  %255 = load i32, ptr %14, align 4, !tbaa !9
  %256 = load ptr, ptr %11, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %256, i32 0, i32 1
  %258 = load i32, ptr %257, align 4, !tbaa !11
  %259 = icmp eq i32 %255, %258
  br i1 %259, label %260, label %273

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

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

273:                                              ; preds = %266, %260, %254
  %274 = load i32, ptr %14, align 4, !tbaa !9
  %275 = load ptr, ptr %11, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %275, i32 0, i32 2
  %277 = load i32, ptr %276, align 4, !tbaa !13
  %278 = icmp eq i32 %274, %277
  br i1 %278, label %279, label %292

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

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

292:                                              ; preds = %285, %279, %273
  %293 = load i32, ptr %14, align 4, !tbaa !9
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %294, i32 0, i32 2
  %296 = load i32, ptr %295, align 4, !tbaa !13
  %297 = icmp eq i32 %293, %296
  br i1 %297, label %298, label %311

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

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

311:                                              ; preds = %304, %298, %292
  %312 = load i32, ptr %14, align 4, !tbaa !9
  %313 = load ptr, ptr %11, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %313, i32 0, i32 3
  %315 = load i32, ptr %314, align 4, !tbaa !17
  %316 = icmp eq i32 %312, %315
  br i1 %316, label %317, label %330

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

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

330:                                              ; preds = %323, %317, %311
  %331 = phi i1 [ false, %317 ], [ false, %311 ], [ %329, %323 ]
  br label %332

332:                                              ; preds = %330, %304, %285, %266, %247, %228
  %333 = phi i1 [ true, %304 ], [ true, %285 ], [ true, %266 ], [ true, %247 ], [ true, %228 ], [ %331, %330 ]
  %334 = zext i1 %333 to i64
  %335 = select i1 %333, i32 1, i32 0
  store i32 %335, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %336 = load i32, ptr %14, align 4, !tbaa !9
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %337, i32 0, i32 1
  %339 = load i32, ptr %338, align 4, !tbaa !11
  %340 = icmp eq i32 %336, %339
  br i1 %340, label %341, label %354

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

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

354:                                              ; preds = %347, %341, %332
  %355 = load i32, ptr %14, align 4, !tbaa !9
  %356 = load ptr, ptr %11, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %356, i32 0, i32 1
  %358 = load i32, ptr %357, align 4, !tbaa !11
  %359 = icmp eq i32 %355, %358
  br i1 %359, label %360, label %373

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

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

373:                                              ; preds = %366, %360, %354
  %374 = load i32, ptr %14, align 4, !tbaa !9
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %375, i32 0, i32 1
  %377 = load i32, ptr %376, align 4, !tbaa !11
  %378 = icmp eq i32 %374, %377
  br i1 %378, label %379, label %392

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

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

392:                                              ; preds = %385, %379, %373
  %393 = load i32, ptr %14, align 4, !tbaa !9
  %394 = load ptr, ptr %11, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %394, i32 0, i32 2
  %396 = load i32, ptr %395, align 4, !tbaa !13
  %397 = icmp eq i32 %393, %396
  br i1 %397, label %398, label %411

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

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

411:                                              ; preds = %404, %398, %392
  %412 = load i32, ptr %14, align 4, !tbaa !9
  %413 = load ptr, ptr %11, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %413, i32 0, i32 2
  %415 = load i32, ptr %414, align 4, !tbaa !13
  %416 = icmp eq i32 %412, %415
  br i1 %416, label %417, label %430

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

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

430:                                              ; preds = %423, %417, %411
  %431 = load i32, ptr %14, align 4, !tbaa !9
  %432 = load ptr, ptr %11, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %432, i32 0, i32 3
  %434 = load i32, ptr %433, align 4, !tbaa !17
  %435 = icmp eq i32 %431, %434
  br i1 %435, label %436, label %449

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

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

449:                                              ; preds = %442, %436, %430
  %450 = phi i1 [ false, %436 ], [ false, %430 ], [ %448, %442 ]
  br label %451

451:                                              ; preds = %449, %423, %404, %385, %366, %347
  %452 = phi i1 [ true, %423 ], [ true, %404 ], [ true, %385 ], [ true, %366 ], [ true, %347 ], [ %450, %449 ]
  %453 = zext i1 %452 to i64
  %454 = select i1 %452, i32 1, i32 0
  store i32 %454, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %455 = load i32, ptr %21, align 4, !tbaa !9
  %456 = icmp eq i32 %455, 1
  br i1 %456, label %463, label %457

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

460:                                              ; preds = %457
  %461 = load i32, ptr %23, align 4, !tbaa !9
  %462 = icmp eq i32 %461, 1
  br label %463

463:                                              ; preds = %460, %457, %451
  %464 = phi i1 [ true, %457 ], [ true, %451 ], [ %462, %460 ]
  %465 = zext i1 %464 to i64
  %466 = select i1 %464, i32 1, i32 0
  store i32 %466, ptr %24, align 4, !tbaa !9
  %467 = load i32, ptr %19, align 4, !tbaa !9
  %468 = icmp ugt i32 %467, 0
  br i1 %468, label %472, label %469

469:                                              ; preds = %463
  %470 = load i32, ptr %20, align 4, !tbaa !9
  %471 = icmp ugt i32 %470, 0
  br i1 %471, label %472, label %692

472:                                              ; preds = %469, %463
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %473 = load i32, ptr %19, align 4, !tbaa !9
  %474 = icmp ugt i32 %473, 0
  br i1 %474, label %475, label %503

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

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

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

493:                                              ; preds = %487, %481
  %494 = load ptr, ptr %12, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %494, i32 0, i32 3
  %496 = load i32, ptr %495, align 4, !tbaa !22
  br label %501

497:                                              ; preds = %487, %475
  %498 = load ptr, ptr %12, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %498, i32 0, i32 2
  %500 = load i32, ptr %499, align 4, !tbaa !24
  br label %501

501:                                              ; preds = %497, %493
  %502 = phi i32 [ %496, %493 ], [ %500, %497 ]
  br label %507

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

507:                                              ; preds = %503, %501
  %508 = phi i32 [ %502, %501 ], [ %506, %503 ]
  store i32 %508, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %509 = load i32, ptr %19, align 4, !tbaa !9
  %510 = icmp ugt i32 %509, 0
  br i1 %510, label %511, label %539

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

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

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

529:                                              ; preds = %523, %517
  %530 = load ptr, ptr %13, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %530, i32 0, i32 4
  %532 = load i32, ptr %531, align 1, !tbaa !26
  br label %537

533:                                              ; preds = %523, %511
  %534 = load ptr, ptr %13, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %534, i32 0, i32 2
  %536 = load i32, ptr %535, align 1, !tbaa !27
  br label %537

537:                                              ; preds = %533, %529
  %538 = phi i32 [ %532, %529 ], [ %536, %533 ]
  br label %543

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

543:                                              ; preds = %539, %537
  %544 = phi i32 [ %538, %537 ], [ %542, %539 ]
  store i32 %544, ptr %26, align 4, !tbaa !9
  %545 = load i32, ptr %19, align 4, !tbaa !9
  %546 = icmp ugt i32 %545, 0
  br i1 %546, label %547, label %591

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

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

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

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

580:                                              ; preds = %571
  %581 = load i32, ptr %26, align 4, !tbaa !9
  %582 = add i32 %581, 15
  %583 = udiv i32 %582, 16
  %584 = mul i32 %583, 16
  %585 = udiv i32 %584, 8
  store i32 %585, ptr %26, align 4, !tbaa !9
  br label %589

586:                                              ; preds = %571
  %587 = load i32, ptr %26, align 4, !tbaa !9
  %588 = udiv i32 %587, 8
  store i32 %588, ptr %26, align 4, !tbaa !9
  br label %589

589:                                              ; preds = %586, %580
  br label %590

590:                                              ; preds = %589, %559
  br label %591

591:                                              ; preds = %590, %553, %547, %543
  %592 = load ptr, ptr %13, align 8, !tbaa !5
  %593 = call i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef %592)
  %594 = icmp ugt i32 %593, 0
  br i1 %594, label %595, label %611

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

602:                                              ; preds = %595
  %603 = load i32, ptr %20, align 4, !tbaa !9
  %604 = icmp ugt i32 %603, 0
  br i1 %604, label %605, label %611

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

611:                                              ; preds = %605, %602, %595, %591
  %612 = load i32, ptr %24, align 4, !tbaa !9
  %613 = icmp eq i32 %612, 0
  br i1 %613, label %614, label %647

614:                                              ; preds = %611
  %615 = load i32, ptr %18, align 4, !tbaa !9
  %616 = icmp eq i32 %615, 0
  br i1 %616, label %617, label %630

617:                                              ; preds = %614
  %618 = load ptr, ptr %10, align 8, !tbaa !5
  %619 = load i32, ptr %15, align 4, !tbaa !9
  %620 = load i32, ptr %14, align 4, !tbaa !9
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %621, i32 0, i32 35
  %623 = load i32, ptr %622, align 4, !tbaa !32
  %624 = load i32, ptr %14, align 4, !tbaa !9
  %625 = load i32, ptr %16, align 4, !tbaa !9
  %626 = zext i32 %625 to i64
  %627 = load i32, ptr %25, align 4, !tbaa !9
  %628 = zext i32 %627 to i64
  %629 = mul nsw i64 %626, %628
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %618, i32 noundef %619, i32 noundef %620, i32 noundef %623, i32 noundef %624, i64 noundef %629)
  br label %646

630:                                              ; preds = %614
  %631 = load ptr, ptr %10, align 8, !tbaa !5
  %632 = load i32, ptr %15, align 4, !tbaa !9
  %633 = load i32, ptr %14, align 4, !tbaa !9
  %634 = load ptr, ptr %11, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %634, i32 0, i32 35
  %636 = load i32, ptr %635, align 4, !tbaa !32
  %637 = load i32, ptr %14, align 4, !tbaa !9
  %638 = load i32, ptr %26, align 4, !tbaa !9
  %639 = zext i32 %638 to i64
  %640 = load i32, ptr %17, align 4, !tbaa !9
  %641 = zext i32 %640 to i64
  %642 = mul nsw i64 %639, %641
  %643 = load i32, ptr %25, align 4, !tbaa !9
  %644 = zext i32 %643 to i64
  %645 = mul nsw i64 %642, %644
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %631, i32 noundef %632, i32 noundef %633, i32 noundef %636, i32 noundef %637, i64 noundef %645)
  br label %646

646:                                              ; preds = %630, %617
  br label %691

647:                                              ; preds = %611
  %648 = load i32, ptr %21, align 4, !tbaa !9
  %649 = icmp ugt i32 %648, 0
  br i1 %649, label %650, label %670

650:                                              ; preds = %647
  %651 = load i32, ptr %18, align 4, !tbaa !9
  %652 = icmp eq i32 %651, 1
  br i1 %652, label %653, label %669

653:                                              ; preds = %650
  %654 = load ptr, ptr %10, align 8, !tbaa !5
  %655 = load i32, ptr %15, align 4, !tbaa !9
  %656 = load i32, ptr %14, align 4, !tbaa !9
  %657 = load ptr, ptr %11, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %657, i32 0, i32 35
  %659 = load i32, ptr %658, align 4, !tbaa !32
  %660 = load i32, ptr %14, align 4, !tbaa !9
  %661 = load i32, ptr %26, align 4, !tbaa !9
  %662 = zext i32 %661 to i64
  %663 = load i32, ptr %17, align 4, !tbaa !9
  %664 = zext i32 %663 to i64
  %665 = mul nsw i64 %662, %664
  %666 = load i32, ptr %25, align 4, !tbaa !9
  %667 = zext i32 %666 to i64
  %668 = mul nsw i64 %665, %667
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %654, i32 noundef %655, i32 noundef %656, i32 noundef %659, i32 noundef %660, i64 noundef %668)
  br label %669

669:                                              ; preds = %653, %650
  br label %670

670:                                              ; preds = %669, %647
  %671 = load i32, ptr %22, align 4, !tbaa !9
  %672 = icmp ugt i32 %671, 0
  br i1 %672, label %673, label %690

673:                                              ; preds = %670
  %674 = load i32, ptr %18, align 4, !tbaa !9
  %675 = icmp eq i32 %674, 0
  br i1 %675, label %676, label %689

676:                                              ; preds = %673
  %677 = load ptr, ptr %10, align 8, !tbaa !5
  %678 = load i32, ptr %15, align 4, !tbaa !9
  %679 = load i32, ptr %14, align 4, !tbaa !9
  %680 = load ptr, ptr %11, align 8, !tbaa !5
  %681 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %680, i32 0, i32 35
  %682 = load i32, ptr %681, align 4, !tbaa !32
  %683 = load i32, ptr %14, align 4, !tbaa !9
  %684 = load i32, ptr %16, align 4, !tbaa !9
  %685 = zext i32 %684 to i64
  %686 = load i32, ptr %25, align 4, !tbaa !9
  %687 = zext i32 %686 to i64
  %688 = mul nsw i64 %685, %687
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %677, i32 noundef %678, i32 noundef %679, i32 noundef %682, i32 noundef %683, i64 noundef %688)
  br label %689

689:                                              ; preds = %676, %673
  br label %690

690:                                              ; preds = %689, %670
  br label %691

691:                                              ; preds = %690, %646
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  br label %950

692:                                              ; preds = %469
  %693 = load ptr, ptr %13, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %693, i32 0, i32 11
  %695 = load i8, ptr %694, align 1, !tbaa !14
  %696 = zext i8 %695 to i32
  %697 = icmp eq i32 %696, 1
  br i1 %697, label %698, label %949

698:                                              ; preds = %692
  %699 = load ptr, ptr %13, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %699, i32 0, i32 10
  %701 = load i16, ptr %700, align 1, !tbaa !19
  %702 = zext i16 %701 to i32
  %703 = icmp eq i32 %702, 5
  br i1 %703, label %710, label %704

704:                                              ; preds = %698
  %705 = load ptr, ptr %13, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %705, i32 0, i32 10
  %707 = load i16, ptr %706, align 1, !tbaa !19
  %708 = zext i16 %707 to i32
  %709 = icmp eq i32 %708, 34
  br i1 %709, label %710, label %748

710:                                              ; preds = %704, %698
  %711 = load ptr, ptr %13, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %711, i32 0, i32 9
  %713 = load i16, ptr %712, align 1, !tbaa !21
  %714 = zext i16 %713 to i32
  %715 = and i32 %714, 1
  %716 = icmp sgt i32 %715, 0
  br i1 %716, label %717, label %748

717:                                              ; preds = %710
  %718 = load i32, ptr %18, align 4, !tbaa !9
  %719 = icmp eq i32 %718, 0
  br i1 %719, label %720, label %731

720:                                              ; preds = %717
  %721 = load ptr, ptr %10, align 8, !tbaa !5
  %722 = load i32, ptr %15, align 4, !tbaa !9
  %723 = load i32, ptr %14, align 4, !tbaa !9
  %724 = load ptr, ptr %11, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %724, i32 0, i32 35
  %726 = load i32, ptr %725, align 4, !tbaa !32
  %727 = load i32, ptr %14, align 4, !tbaa !9
  %728 = load i32, ptr %16, align 4, !tbaa !9
  %729 = zext i32 %728 to i64
  %730 = sdiv i64 %729, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %721, i32 noundef %722, i32 noundef %723, i32 noundef %726, i32 noundef %727, i64 noundef %730)
  br label %747

731:                                              ; preds = %717
  %732 = load ptr, ptr %10, align 8, !tbaa !5
  %733 = load i32, ptr %15, align 4, !tbaa !9
  %734 = load i32, ptr %14, align 4, !tbaa !9
  %735 = load ptr, ptr %11, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %735, i32 0, i32 35
  %737 = load i32, ptr %736, align 4, !tbaa !32
  %738 = load i32, ptr %14, align 4, !tbaa !9
  %739 = load ptr, ptr %12, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %739, i32 0, i32 17
  %741 = load i32, ptr %740, align 4, !tbaa !31
  %742 = zext i32 %741 to i64
  %743 = load i32, ptr %17, align 4, !tbaa !9
  %744 = zext i32 %743 to i64
  %745 = mul nsw i64 %742, %744
  %746 = sdiv i64 %745, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %732, i32 noundef %733, i32 noundef %734, i32 noundef %737, i32 noundef %738, i64 noundef %746)
  br label %747

747:                                              ; preds = %731, %720
  br label %748

748:                                              ; preds = %747, %710, %704
  %749 = load ptr, ptr %13, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %749, i32 0, i32 10
  %751 = load i16, ptr %750, align 1, !tbaa !19
  %752 = zext i16 %751 to i32
  %753 = icmp eq i32 %752, 6
  br i1 %753, label %766, label %754

754:                                              ; preds = %748
  %755 = load ptr, ptr %13, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %755, i32 0, i32 10
  %757 = load i16, ptr %756, align 1, !tbaa !19
  %758 = zext i16 %757 to i32
  %759 = icmp eq i32 %758, 35
  br i1 %759, label %766, label %760

760:                                              ; preds = %754
  %761 = load ptr, ptr %13, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %761, i32 0, i32 10
  %763 = load i16, ptr %762, align 1, !tbaa !19
  %764 = zext i16 %763 to i32
  %765 = icmp eq i32 %764, 37
  br i1 %765, label %766, label %850

766:                                              ; preds = %760, %754, %748
  %767 = load ptr, ptr %13, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %767, i32 0, i32 9
  %769 = load i16, ptr %768, align 1, !tbaa !21
  %770 = zext i16 %769 to i32
  %771 = and i32 %770, 1
  %772 = icmp sgt i32 %771, 0
  br i1 %772, label %773, label %810

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

779:                                              ; preds = %773
  %780 = load i32, ptr %18, align 4, !tbaa !9
  %781 = icmp eq i32 %780, 0
  br i1 %781, label %782, label %793

782:                                              ; preds = %779
  %783 = load ptr, ptr %10, align 8, !tbaa !5
  %784 = load i32, ptr %15, align 4, !tbaa !9
  %785 = load i32, ptr %14, align 4, !tbaa !9
  %786 = load ptr, ptr %11, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %786, i32 0, i32 35
  %788 = load i32, ptr %787, align 4, !tbaa !32
  %789 = load i32, ptr %14, align 4, !tbaa !9
  %790 = load i32, ptr %16, align 4, !tbaa !9
  %791 = zext i32 %790 to i64
  %792 = sdiv i64 %791, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %783, i32 noundef %784, i32 noundef %785, i32 noundef %788, i32 noundef %789, i64 noundef %792)
  br label %809

793:                                              ; preds = %779
  %794 = load ptr, ptr %10, align 8, !tbaa !5
  %795 = load i32, ptr %15, align 4, !tbaa !9
  %796 = load i32, ptr %14, align 4, !tbaa !9
  %797 = load ptr, ptr %11, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %797, i32 0, i32 35
  %799 = load i32, ptr %798, align 4, !tbaa !32
  %800 = load i32, ptr %14, align 4, !tbaa !9
  %801 = load ptr, ptr %12, align 8, !tbaa !5
  %802 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %801, i32 0, i32 16
  %803 = load i32, ptr %802, align 4, !tbaa !33
  %804 = zext i32 %803 to i64
  %805 = load i32, ptr %17, align 4, !tbaa !9
  %806 = zext i32 %805 to i64
  %807 = mul nsw i64 %804, %806
  %808 = sdiv i64 %807, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %794, i32 noundef %795, i32 noundef %796, i32 noundef %799, i32 noundef %800, i64 noundef %808)
  br label %809

809:                                              ; preds = %793, %782
  br label %849

810:                                              ; preds = %773, %766
  %811 = load i32, ptr %18, align 4, !tbaa !9
  %812 = icmp eq i32 %811, 0
  br i1 %812, label %813, label %828

813:                                              ; preds = %810
  %814 = load ptr, ptr %10, align 8, !tbaa !5
  %815 = load i32, ptr %15, align 4, !tbaa !9
  %816 = load i32, ptr %14, align 4, !tbaa !9
  %817 = load ptr, ptr %11, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %817, i32 0, i32 35
  %819 = load i32, ptr %818, align 4, !tbaa !32
  %820 = load i32, ptr %14, align 4, !tbaa !9
  %821 = load i32, ptr %16, align 4, !tbaa !9
  %822 = zext i32 %821 to i64
  %823 = load ptr, ptr %12, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %823, i32 0, i32 2
  %825 = load i32, ptr %824, align 4, !tbaa !24
  %826 = zext i32 %825 to i64
  %827 = mul nsw i64 %822, %826
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %814, i32 noundef %815, i32 noundef %816, i32 noundef %819, i32 noundef %820, i64 noundef %827)
  br label %848

828:                                              ; preds = %810
  %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 ptr, ptr %11, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %832, i32 0, i32 35
  %834 = load i32, ptr %833, align 4, !tbaa !32
  %835 = load i32, ptr %14, align 4, !tbaa !9
  %836 = load ptr, ptr %13, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %836, i32 0, i32 2
  %838 = load i32, ptr %837, align 1, !tbaa !27
  %839 = zext i32 %838 to i64
  %840 = load i32, ptr %17, align 4, !tbaa !9
  %841 = zext i32 %840 to i64
  %842 = mul nsw i64 %839, %841
  %843 = load ptr, ptr %12, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %843, i32 0, i32 2
  %845 = load i32, ptr %844, align 4, !tbaa !24
  %846 = zext i32 %845 to i64
  %847 = mul nsw i64 %842, %846
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %829, i32 noundef %830, i32 noundef %831, i32 noundef %834, i32 noundef %835, i64 noundef %847)
  br label %848

848:                                              ; preds = %828, %813
  br label %849

849:                                              ; preds = %848, %809
  br label %850

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

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

863:                                              ; preds = %856
  %864 = load i32, ptr %18, align 4, !tbaa !9
  %865 = icmp eq i32 %864, 0
  br i1 %865, label %866, label %877

866:                                              ; preds = %863
  %867 = load ptr, ptr %10, align 8, !tbaa !5
  %868 = load i32, ptr %15, align 4, !tbaa !9
  %869 = load i32, ptr %14, align 4, !tbaa !9
  %870 = load ptr, ptr %11, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %870, i32 0, i32 35
  %872 = load i32, ptr %871, align 4, !tbaa !32
  %873 = load i32, ptr %14, align 4, !tbaa !9
  %874 = load i32, ptr %16, align 4, !tbaa !9
  %875 = zext i32 %874 to i64
  %876 = sdiv i64 %875, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %867, i32 noundef %868, i32 noundef %869, i32 noundef %872, i32 noundef %873, i64 noundef %876)
  br label %893

877:                                              ; preds = %863
  %878 = load ptr, ptr %10, align 8, !tbaa !5
  %879 = load i32, ptr %15, align 4, !tbaa !9
  %880 = load i32, ptr %14, align 4, !tbaa !9
  %881 = load ptr, ptr %11, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %881, i32 0, i32 35
  %883 = load i32, ptr %882, align 4, !tbaa !32
  %884 = load i32, ptr %14, align 4, !tbaa !9
  %885 = load ptr, ptr %12, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %885, i32 0, i32 17
  %887 = load i32, ptr %886, align 4, !tbaa !31
  %888 = zext i32 %887 to i64
  %889 = load i32, ptr %17, align 4, !tbaa !9
  %890 = zext i32 %889 to i64
  %891 = mul nsw i64 %888, %890
  %892 = sdiv i64 %891, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %878, i32 noundef %879, i32 noundef %880, i32 noundef %883, i32 noundef %884, i64 noundef %892)
  br label %893

893:                                              ; preds = %877, %866
  br label %894

894:                                              ; preds = %893, %856, %850
  %895 = load ptr, ptr %13, align 8, !tbaa !5
  %896 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %895, i32 0, i32 10
  %897 = load i16, ptr %896, align 1, !tbaa !19
  %898 = zext i16 %897 to i32
  %899 = icmp eq i32 %898, 26
  br i1 %899, label %900, label %948

900:                                              ; preds = %894
  %901 = load ptr, ptr %13, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %901, i32 0, i32 9
  %903 = load i16, ptr %902, align 1, !tbaa !21
  %904 = zext i16 %903 to i32
  %905 = and i32 %904, 1
  %906 = icmp sgt i32 %905, 0
  br i1 %906, label %907, label %938

907:                                              ; preds = %900
  %908 = load i32, ptr %18, align 4, !tbaa !9
  %909 = icmp eq i32 %908, 0
  br i1 %909, label %910, label %921

910:                                              ; preds = %907
  %911 = load ptr, ptr %10, align 8, !tbaa !5
  %912 = load i32, ptr %15, align 4, !tbaa !9
  %913 = load i32, ptr %14, align 4, !tbaa !9
  %914 = load ptr, ptr %11, align 8, !tbaa !5
  %915 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %914, i32 0, i32 35
  %916 = load i32, ptr %915, align 4, !tbaa !32
  %917 = load i32, ptr %14, align 4, !tbaa !9
  %918 = load i32, ptr %16, align 4, !tbaa !9
  %919 = zext i32 %918 to i64
  %920 = sdiv i64 %919, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %911, i32 noundef %912, i32 noundef %913, i32 noundef %916, i32 noundef %917, i64 noundef %920)
  br label %937

921:                                              ; preds = %907
  %922 = load ptr, ptr %10, align 8, !tbaa !5
  %923 = load i32, ptr %15, align 4, !tbaa !9
  %924 = load i32, ptr %14, align 4, !tbaa !9
  %925 = load ptr, ptr %11, align 8, !tbaa !5
  %926 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %925, i32 0, i32 35
  %927 = load i32, ptr %926, align 4, !tbaa !32
  %928 = load i32, ptr %14, align 4, !tbaa !9
  %929 = load ptr, ptr %12, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %929, i32 0, i32 16
  %931 = load i32, ptr %930, align 4, !tbaa !33
  %932 = zext i32 %931 to i64
  %933 = load i32, ptr %17, align 4, !tbaa !9
  %934 = zext i32 %933 to i64
  %935 = mul nsw i64 %932, %934
  %936 = sdiv i64 %935, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %922, i32 noundef %923, i32 noundef %924, i32 noundef %927, i32 noundef %928, i64 noundef %936)
  br label %937

937:                                              ; preds = %921, %910
  br label %947

938:                                              ; preds = %900
  %939 = load ptr, ptr %10, align 8, !tbaa !5
  %940 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %941 = icmp ult i32 1, %940
  br i1 %941, label %942, label %944

942:                                              ; preds = %938
  %943 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %945

944:                                              ; preds = %938
  br label %945

945:                                              ; preds = %944, %942
  %946 = phi i32 [ %943, %942 ], [ 1, %944 ]
  call void @libxsmm_handle_error(ptr noundef %939, i32 noundef 90045, ptr noundef @__func__.libxsmm_generator_mateltwise_unary_binary_adjust_after_microkernel_addr_aarch64_gp_reg, ptr noundef @.str, i32 noundef 145, i32 noundef %946)
  store i32 1, ptr %27, align 4
  br label %951

947:                                              ; preds = %937
  br label %948

948:                                              ; preds = %947, %894
  br label %949

949:                                              ; preds = %948, %692
  br label %950

950:                                              ; preds = %949, %691
  store i32 0, ptr %27, align 4
  br label %951

951:                                              ; preds = %950, %945
  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
  %952 = load i32, ptr %27, align 4
  switch i32 %952, label %954 [
    i32 0, label %953
    i32 1, label %953
  ]

953:                                              ; preds = %951, %951
  ret void

954:                                              ; preds = %951
  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_aarch64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 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 = !{!12, !10, i64 140}
!33 = !{!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_aarch64_gp_reg = external hidden unnamed_addr constant [87 x i8], align 1
@.str = external hidden unnamed_addr constant [97 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_aarch64_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 %.thread324

48:                                               ; preds = %46
  %49 = getelementptr inbounds i8, ptr %3, i64 31
  %50 = load i8, ptr %49, align 1, !tbaa !11
  switch i8 %50, label %.thread324 [
    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 %.thread324, label %.thread296.thread326

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
  %.not265 = icmp eq i16 %58, 0
  br i1 %.not265, label %.thread324, label %.thread296.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
  %.not266 = icmp eq i16 %62, 0
  br i1 %.not266, label %.thread324, label %.thread347

.thread324:                                       ; 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 %.thread325

66:                                               ; preds = %.thread324
  %67 = getelementptr inbounds i8, ptr %3, i64 31
  %68 = load i8, ptr %67, align 1, !tbaa !11
  switch i8 %68, label %.thread325 [
    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
  %.not267 = icmp eq i16 %72, 0
  br i1 %.not267, label %.thread325, 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
  %.not268 = icmp eq i16 %76, 0
  br i1 %.not268, label %.thread325, label %89

.thread325:                                       ; preds = %66, %69, %.thread324, %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 = %.thread325
  %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 = %.thread325, %80, %84, %73, %69
  %90 = phi i1 [ true, %73 ], [ true, %69 ], [ false, %80 ], [ false, %.thread325 ], [ %88, %84 ]
  br i1 %12, label %.thread296, label %.thread331

.thread296:                                       ; 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 %.thread331 [
    i8 1, label %.thread296.thread326
    i8 2, label %.thread296.thread.thread
    i8 3, label %.thread347
  ]

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

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

.thread347:                                       ; preds = %.thread296, %59
  %99 = phi i1 [ true, %59 ], [ %90, %.thread296 ]
  %100 = getelementptr inbounds i8, ptr %3, i64 27
  %101 = load i16, ptr %100, align 1, !tbaa !18
  %102 = and i16 %101, 8
  %.not271 = icmp eq i16 %102, 0
  br i1 %.not271, label %.thread331, label %.thread349

.thread331:                                       ; preds = %.thread296, %.thread296.thread326, %.thread296.thread.thread, %89, %.thread347
  %103 = phi i1 [ %99, %.thread347 ], [ %90, %89 ], [ %95, %.thread296.thread.thread ], [ %91, %.thread296.thread326 ], [ %90, %.thread296 ]
  %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 %.thread332

107:                                              ; preds = %.thread331
  %108 = getelementptr inbounds i8, ptr %3, i64 31
  %109 = load i8, ptr %108, align 1, !tbaa !11
  switch i8 %109, label %.thread332 [
    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
  %.not272 = icmp eq i16 %113, 0
  br i1 %.not272, label %.thread332, 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
  %.not273 = icmp eq i16 %117, 0
  br i1 %.not273, label %.thread332, label %130

.thread332:                                       ; preds = %107, %110, %.thread331, %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 = %.thread332
  %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 = %.thread332, %121, %125, %114, %110
  %131 = phi i1 [ true, %114 ], [ true, %110 ], [ false, %121 ], [ false, %.thread332 ], [ %129, %125 ]
  br i1 %12, label %.thread304, label %.thread341

.thread304:                                       ; preds = %130
  %.phi.trans.insert322 = getelementptr inbounds i8, ptr %3, i64 31
  %.pre323 = load i8, ptr %.phi.trans.insert322, align 1, !tbaa !11
  switch i8 %.pre323, label %.thread341 [
    i8 1, label %.thread304.thread335
    i8 2, label %.thread304.thread.thread
    i8 3, label %.thread349
  ]

.thread304.thread335:                             ; preds = %.thread304, %.thread296.thread326
  %132 = phi i1 [ %103, %.thread304 ], [ %91, %.thread296.thread326 ]
  %133 = phi i1 [ %131, %.thread304 ], [ true, %.thread296.thread326 ]
  %134 = getelementptr inbounds i8, ptr %3, i64 27
  %135 = load i16, ptr %134, align 1, !tbaa !18
  %136 = and i16 %135, 8
  %.not274 = icmp eq i16 %136, 0
  br i1 %.not274, label %.thread341, label %175

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

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

.thread341:                                       ; preds = %.thread304, %.thread304.thread335, %.thread304.thread.thread, %130, %.thread349
  %147 = phi i1 [ %143, %.thread349 ], [ %131, %130 ], [ %137, %.thread304.thread.thread ], [ %133, %.thread304.thread335 ], [ %131, %.thread304 ]
  %148 = phi i1 [ %142, %.thread349 ], [ %103, %130 ], [ %138, %.thread304.thread.thread ], [ %132, %.thread304.thread335 ], [ %103, %.thread304 ]
  %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 %.thread342

152:                                              ; preds = %.thread341
  %153 = getelementptr inbounds i8, ptr %3, i64 31
  %154 = load i8, ptr %153, align 1, !tbaa !11
  switch i8 %154, label %.thread342 [
    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
  %.not277 = icmp eq i16 %158, 0
  br i1 %.not277, label %.thread342, 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
  %.not278 = icmp eq i16 %162, 0
  br i1 %.not278, label %.thread342, label %175

.thread342:                                       ; preds = %152, %155, %.thread341, %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 = %.thread342
  %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 = %.thread342, %166, %170, %159, %155, %.thread349, %.thread304.thread.thread, %.thread304.thread335
  %176 = phi i1 [ %147, %159 ], [ %147, %155 ], [ %143, %.thread349 ], [ %137, %.thread304.thread.thread ], [ %133, %.thread304.thread335 ], [ %147, %166 ], [ %147, %.thread342 ], [ %147, %170 ]
  %177 = phi i1 [ %148, %159 ], [ %148, %155 ], [ %142, %.thread349 ], [ %138, %.thread304.thread.thread ], [ %132, %.thread304.thread335 ], [ %148, %166 ], [ %148, %.thread342 ], [ %148, %170 ]
  %178 = phi i1 [ true, %159 ], [ true, %155 ], [ true, %.thread349 ], [ true, %.thread304.thread.thread ], [ true, %.thread304.thread335 ], [ false, %166 ], [ false, %.thread342 ], [ %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 %270

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
  %switch288 = icmp eq i8 %187, 2
  %. = select i1 %switch288, i64 12, i64 8
  %188 = getelementptr inbounds i8, ptr %2, i64 %.
  %189 = and i8 %186, -2
  %switch290 = icmp eq i8 %189, 2
  %spec.select354 = select i1 %switch290, 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.select354, %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
  %.not285 = icmp eq i16 %220, 0
  br i1 %.not285, 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
  %.0256 = phi i32 [ %217, %221 ], [ %217, %225 ], [ %6, %208 ], [ %6, %204 ], [ %6, %197 ], [ %6, %192 ]
  %.0254 = 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
  %.not286 = icmp eq i32 %228, 0
  br i1 %.not286, 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 %.0256, 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
  %.1257 = phi i32 [ %235, %234 ], [ %.0256, %229 ], [ %.0256, %227 ]
  %.1255 = phi i32 [ 1, %234 ], [ %.0254, %229 ], [ %.0254, %227 ]
  %.1 = phi i32 [ %237, %234 ], [ %.0, %229 ], [ %.0, %227 ]
  br i1 %spec.select, label %253, label %239

239:                                              ; preds = %238
  %240 = icmp eq i32 %8, 0
  %241 = getelementptr inbounds i8, ptr %1, i64 140
  %242 = load i32, ptr %241, align 4, !tbaa !24
  br i1 %240, label %243, label %247

243:                                              ; preds = %239
  %244 = zext i32 %.1257 to i64
  %245 = zext i32 %.1255 to i64
  %246 = mul nuw nsw i64 %245, %244
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %242, i32 noundef %4, i64 noundef %246) #2
  br label %379

247:                                              ; preds = %239
  %248 = zext i32 %.1 to i64
  %249 = zext i32 %7 to i64
  %250 = zext i32 %.1255 to i64
  %251 = mul nuw i64 %250, %249
  %252 = mul i64 %251, %248
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %242, i32 noundef %4, i64 noundef %252) #2
  br label %379

253:                                              ; preds = %238
  %254 = icmp eq i32 %8, 1
  %or.cond7 = and i1 %254, %177
  br i1 %or.cond7, label %.thread317, label %262

.thread317:                                       ; preds = %253
  %255 = getelementptr inbounds i8, ptr %1, i64 140
  %256 = load i32, ptr %255, align 4, !tbaa !24
  %257 = zext i32 %.1 to i64
  %258 = zext i32 %7 to i64
  %259 = zext i32 %.1255 to i64
  %260 = mul nuw i64 %259, %258
  %261 = mul i64 %260, %257
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %256, i32 noundef %4, i64 noundef %261) #2
  br label %379

262:                                              ; preds = %253
  %263 = icmp eq i32 %8, 0
  %or.cond9 = and i1 %263, %176
  br i1 %or.cond9, label %264, label %379

264:                                              ; preds = %262
  %265 = getelementptr inbounds i8, ptr %1, i64 140
  %266 = load i32, ptr %265, align 4, !tbaa !24
  %267 = zext i32 %.1257 to i64
  %268 = zext i32 %.1255 to i64
  %269 = mul nuw nsw i64 %268, %267
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %266, i32 noundef %4, i64 noundef %269) #2
  br label %379

270:                                              ; preds = %175
  %271 = getelementptr inbounds i8, ptr %3, i64 31
  %272 = load i8, ptr %271, align 1, !tbaa !11
  %273 = icmp eq i8 %272, 1
  br i1 %273, label %274, label %379

274:                                              ; preds = %270
  %275 = getelementptr inbounds i8, ptr %3, i64 29
  %276 = load i16, ptr %275, align 1, !tbaa !16
  switch i16 %276, label %295 [
    i16 5, label %277
    i16 34, label %277
  ]

277:                                              ; preds = %274, %274
  %278 = getelementptr inbounds i8, ptr %3, i64 27
  %279 = load i16, ptr %278, align 1, !tbaa !18
  %280 = and i16 %279, 1
  %.not279 = icmp eq i16 %280, 0
  br i1 %.not279, label %thread-pre-split, label %281

281:                                              ; preds = %277
  %282 = icmp eq i32 %8, 0
  %283 = getelementptr inbounds i8, ptr %1, i64 140
  %284 = load i32, ptr %283, align 4, !tbaa !24
  br i1 %282, label %285, label %288

285:                                              ; preds = %281
  %286 = lshr i32 %6, 3
  %287 = zext nneg i32 %286 to i64
  br label %thread-pre-split.sink.split

288:                                              ; preds = %281
  %289 = getelementptr inbounds i8, ptr %2, i64 68
  %290 = load i32, ptr %289, align 4, !tbaa !23
  %291 = zext i32 %290 to i64
  %292 = zext i32 %7 to i64
  %293 = mul nuw nsw i64 %291, %292
  %294 = lshr i64 %293, 3
  br label %thread-pre-split.sink.split

thread-pre-split.sink.split:                      ; preds = %285, %288
  %.sink351 = phi i64 [ %294, %288 ], [ %287, %285 ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %284, i32 noundef %4, i64 noundef %.sink351) #2
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %thread-pre-split.sink.split, %277
  %.pr = load i16, ptr %275, align 1, !tbaa !16
  br label %295

295:                                              ; preds = %thread-pre-split, %274
  %296 = phi i16 [ %.pr, %thread-pre-split ], [ %276, %274 ]
  switch i16 %296, label %332 [
    i16 6, label %297
    i16 35, label %297
    i16 37, label %297
  ]

297:                                              ; preds = %295, %295, %295
  %298 = getelementptr inbounds i8, ptr %3, i64 27
  %299 = load i16, ptr %298, align 1, !tbaa !18
  %300 = and i16 %299, 1
  %.not280 = icmp eq i16 %300, 0
  %.not281 = icmp eq i16 %296, 37
  %or.cond321 = or i1 %.not281, %.not280
  %301 = icmp eq i32 %8, 0
  %302 = getelementptr inbounds i8, ptr %1, i64 140
  %303 = load i32, ptr %302, align 4, !tbaa !24
  br i1 %or.cond321, label %315, label %304

304:                                              ; preds = %297
  br i1 %301, label %305, label %308

305:                                              ; preds = %304
  %306 = lshr i32 %6, 3
  %307 = zext nneg i32 %306 to i64
  br label %.sink.split

308:                                              ; preds = %304
  %309 = getelementptr inbounds i8, ptr %2, i64 64
  %310 = load i32, ptr %309, align 4, !tbaa !25
  %311 = zext i32 %310 to i64
  %312 = zext i32 %7 to i64
  %313 = mul nuw nsw i64 %311, %312
  %314 = lshr i64 %313, 3
  br label %.sink.split

315:                                              ; preds = %297
  br i1 %301, label %316, label %322

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

322:                                              ; preds = %315
  %323 = getelementptr inbounds i8, ptr %3, i64 8
  %324 = load i32, ptr %323, align 1, !tbaa !27
  %325 = zext i32 %324 to i64
  %326 = zext i32 %7 to i64
  %327 = mul nuw nsw i64 %325, %326
  %328 = getelementptr inbounds i8, ptr %2, i64 8
  %329 = load i32, ptr %328, align 4, !tbaa !26
  %330 = zext i32 %329 to i64
  %331 = mul nuw nsw i64 %327, %330
  br label %.sink.split

.sink.split:                                      ; preds = %316, %322, %305, %308
  %.sink353 = phi i64 [ %314, %308 ], [ %307, %305 ], [ %331, %322 ], [ %321, %316 ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %303, i32 noundef %4, i64 noundef %.sink353) #2
  br label %332

332:                                              ; preds = %.sink.split, %295
  %333 = load i16, ptr %275, align 1, !tbaa !16
  %334 = icmp eq i16 %333, 25
  br i1 %334, label %335, label %353

335:                                              ; preds = %332
  %336 = getelementptr inbounds i8, ptr %3, i64 27
  %337 = load i16, ptr %336, align 1, !tbaa !18
  %338 = and i16 %337, 1
  %.not282 = icmp eq i16 %338, 0
  br i1 %.not282, label %thread-pre-split319, label %339

339:                                              ; preds = %335
  %340 = icmp eq i32 %8, 0
  %341 = getelementptr inbounds i8, ptr %1, i64 140
  %342 = load i32, ptr %341, align 4, !tbaa !24
  br i1 %340, label %343, label %346

343:                                              ; preds = %339
  %344 = lshr i32 %6, 3
  %345 = zext nneg i32 %344 to i64
  br label %thread-pre-split319.sink.split

346:                                              ; preds = %339
  %347 = getelementptr inbounds i8, ptr %2, i64 68
  %348 = load i32, ptr %347, align 4, !tbaa !23
  %349 = zext i32 %348 to i64
  %350 = zext i32 %7 to i64
  %351 = mul nuw nsw i64 %349, %350
  %352 = lshr i64 %351, 3
  br label %thread-pre-split319.sink.split

thread-pre-split319.sink.split:                   ; preds = %343, %346
  %.sink352 = phi i64 [ %352, %346 ], [ %345, %343 ]
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %342, i32 noundef %4, i64 noundef %.sink352) #2
  br label %thread-pre-split319

thread-pre-split319:                              ; preds = %thread-pre-split319.sink.split, %335
  %.pr320 = load i16, ptr %275, align 1, !tbaa !16
  br label %353

353:                                              ; preds = %thread-pre-split319, %332
  %354 = phi i16 [ %.pr320, %thread-pre-split319 ], [ %333, %332 ]
  %355 = icmp eq i16 %354, 26
  br i1 %355, label %356, label %379

356:                                              ; preds = %353
  %357 = getelementptr inbounds i8, ptr %3, i64 27
  %358 = load i16, ptr %357, align 1, !tbaa !18
  %359 = and i16 %358, 1
  %.not283 = icmp eq i16 %359, 0
  br i1 %.not283, label %374, label %360

360:                                              ; preds = %356
  %361 = icmp eq i32 %8, 0
  %362 = getelementptr inbounds i8, ptr %1, i64 140
  %363 = load i32, ptr %362, align 4, !tbaa !24
  br i1 %361, label %364, label %367

364:                                              ; preds = %360
  %365 = lshr i32 %6, 3
  %366 = zext nneg i32 %365 to i64
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %363, i32 noundef %4, i64 noundef %366) #2
  br label %379

367:                                              ; preds = %360
  %368 = getelementptr inbounds i8, ptr %2, i64 64
  %369 = load i32, ptr %368, align 4, !tbaa !25
  %370 = zext i32 %369 to i64
  %371 = zext i32 %7 to i64
  %372 = mul nuw nsw i64 %370, %371
  %373 = lshr i64 %372, 3
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef %5, i32 noundef %4, i32 noundef %363, i32 noundef %4, i64 noundef %373) #2
  br label %379

374:                                              ; preds = %356
  %375 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !19
  %376 = icmp ugt i32 %375, 1
  %377 = load i32, ptr @libxsmm_verbosity, align 4
  %378 = select i1 %376, i32 %377, 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_aarch64_gp_reg, ptr noundef nonnull @.str, i32 noundef 145, i32 noundef %378) #2
  br label %379

379:                                              ; preds = %.thread317, %353, %364, %367, %270, %262, %264, %243, %247, %374
  ret void
}

declare i32 @libxsmm_generator_mateltwise_is_binary_cmp_op(ptr noundef) local_unnamed_addr #1

declare void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef, i32 noundef, i32 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 = !{!6, !7, i64 140}
!25 = !{!21, !7, i64 64}
!26 = !{!21, !7, i64 8}
!27 = !{!12, !7, i64 8}


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