; 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_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 }
%struct.libxsmm_generated_code = type { ptr, i32, i32, i32, i32, i32, i32 }
%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 }

@.str = external hidden unnamed_addr constant [97 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [286 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [386 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [396 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [401 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [431 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [431 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv = external hidden unnamed_addr constant [280 x i8], align 1

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

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

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

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

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

declare i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext) #1

declare void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext) #1

declare void @libxsmm_aarch64_instruction_sve_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef) #1

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

declare void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv(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, i32 noundef %9) #3 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %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 i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i8, align 1
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store i32 %4, ptr %15, align 4, !tbaa !9
  store i32 %5, ptr %16, align 4, !tbaa !9
  store i32 %6, ptr %17, align 4, !tbaa !9
  store i32 %7, ptr %18, align 4, !tbaa !9
  store i32 %8, ptr %19, align 4, !tbaa !9
  store i32 %9, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %37 = load ptr, ptr %14, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %37, i32 0, i32 2
  %39 = load i32, ptr %38, align 1, !tbaa !11
  %40 = load ptr, ptr %13, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %40, i32 0, i32 2
  %42 = load i32, ptr %41, align 4, !tbaa !14
  %43 = mul i32 %39, %42
  store i32 %43, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %44 = load i32, ptr %19, align 4, !tbaa !9
  %45 = icmp eq i32 %44, 0
  br i1 %45, label %46, label %54

46:                                               ; preds = %10
  %47 = load ptr, ptr %13, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %47, i32 0, i32 2
  %49 = load i32, ptr %48, align 4, !tbaa !14
  %50 = load i32, ptr %15, align 4, !tbaa !9
  %51 = mul i32 %49, %50
  %52 = load i32, ptr %17, align 4, !tbaa !9
  %53 = mul i32 %51, %52
  br label %65

54:                                               ; preds = %10
  %55 = load ptr, ptr %13, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %55, i32 0, i32 2
  %57 = load i32, ptr %56, align 4, !tbaa !14
  %58 = load i32, ptr %15, align 4, !tbaa !9
  %59 = load i32, ptr %17, align 4, !tbaa !9
  %60 = sub i32 %59, 1
  %61 = mul i32 %58, %60
  %62 = load i32, ptr %19, align 4, !tbaa !9
  %63 = add i32 %61, %62
  %64 = mul i32 %57, %63
  br label %65

65:                                               ; preds = %54, %46
  %66 = phi i32 [ %53, %46 ], [ %64, %54 ]
  store i32 %66, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #4
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %67, i32 0, i32 6
  %69 = load i32, ptr %68, align 4, !tbaa !16
  %70 = icmp uge i32 %69, 2201
  br i1 %70, label %71, label %76

71:                                               ; preds = %65
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.libxsmm_generated_code, ptr %72, i32 0, i32 6
  %74 = load i32, ptr %73, align 4, !tbaa !16
  %75 = icmp ule i32 %74, 2999
  br label %76

76:                                               ; preds = %71, %65
  %77 = phi i1 [ false, %65 ], [ %75, %71 ]
  %78 = zext i1 %77 to i32
  %79 = trunc i32 %78 to i8
  store i8 %79, ptr %25, align 1, !tbaa !18
  %80 = load i8, ptr %25, align 1, !tbaa !18
  %81 = icmp ne i8 %80, 0
  br i1 %81, label %82, label %645

82:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #4
  store i8 6, ptr %26, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #4
  store i8 7, ptr %27, align 1, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %83 = load ptr, ptr %14, align 8, !tbaa !5
  %84 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %83, i32 noundef 4)
  %85 = icmp eq i32 0, %84
  br i1 %85, label %86, label %87

86:                                               ; preds = %82
  br label %180

87:                                               ; preds = %82
  %88 = load ptr, ptr %14, align 8, !tbaa !5
  %89 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %88, i32 noundef 4)
  %90 = icmp eq i32 1, %89
  br i1 %90, label %91, label %92

91:                                               ; preds = %87
  br label %178

92:                                               ; preds = %87
  %93 = load ptr, ptr %14, align 8, !tbaa !5
  %94 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %93, i32 noundef 4)
  %95 = icmp eq i32 2, %94
  br i1 %95, label %96, label %97

96:                                               ; preds = %92
  br label %176

97:                                               ; preds = %92
  %98 = load ptr, ptr %14, align 8, !tbaa !5
  %99 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %98, i32 noundef 4)
  %100 = icmp eq i32 3, %99
  br i1 %100, label %101, label %102

101:                                              ; preds = %97
  br label %174

102:                                              ; preds = %97
  %103 = load ptr, ptr %14, align 8, !tbaa !5
  %104 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %103, i32 noundef 4)
  %105 = icmp eq i32 4, %104
  br i1 %105, label %106, label %107

106:                                              ; preds = %102
  br label %172

107:                                              ; preds = %102
  %108 = load ptr, ptr %14, align 8, !tbaa !5
  %109 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %108, i32 noundef 4)
  %110 = icmp eq i32 5, %109
  br i1 %110, label %111, label %112

111:                                              ; preds = %107
  br label %170

112:                                              ; preds = %107
  %113 = load ptr, ptr %14, align 8, !tbaa !5
  %114 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %113, i32 noundef 4)
  %115 = icmp eq i32 6, %114
  br i1 %115, label %116, label %117

116:                                              ; preds = %112
  br label %168

117:                                              ; preds = %112
  %118 = load ptr, ptr %14, align 8, !tbaa !5
  %119 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %118, i32 noundef 4)
  %120 = icmp eq i32 7, %119
  br i1 %120, label %121, label %122

121:                                              ; preds = %117
  br label %166

122:                                              ; preds = %117
  %123 = load ptr, ptr %14, align 8, !tbaa !5
  %124 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %123, i32 noundef 4)
  %125 = icmp eq i32 8, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %122
  br label %164

127:                                              ; preds = %122
  %128 = load ptr, ptr %14, align 8, !tbaa !5
  %129 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %128, i32 noundef 4)
  %130 = icmp eq i32 9, %129
  br i1 %130, label %131, label %132

131:                                              ; preds = %127
  br label %162

132:                                              ; preds = %127
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %133, i32 noundef 4)
  %135 = icmp eq i32 10, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %132
  br label %160

137:                                              ; preds = %132
  %138 = load ptr, ptr %14, align 8, !tbaa !5
  %139 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %138, i32 noundef 4)
  %140 = icmp eq i32 11, %139
  br i1 %140, label %141, label %142

141:                                              ; preds = %137
  br label %158

142:                                              ; preds = %137
  %143 = load ptr, ptr %14, align 8, !tbaa !5
  %144 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %143, i32 noundef 4)
  %145 = icmp eq i32 12, %144
  br i1 %145, label %146, label %147

146:                                              ; preds = %142
  br label %156

147:                                              ; preds = %142
  %148 = load ptr, ptr %14, align 8, !tbaa !5
  %149 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %148, i32 noundef 4)
  %150 = icmp eq i32 13, %149
  br i1 %150, label %151, label %152

151:                                              ; preds = %147
  br label %154

152:                                              ; preds = %147
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str, i32 noundef 1640, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

153:                                              ; No predecessors!
  br label %154

154:                                              ; preds = %153, %151
  %155 = phi i32 [ 1, %151 ], [ 0, %153 ]
  br label %156

156:                                              ; preds = %154, %146
  %157 = phi i32 [ 1, %146 ], [ %155, %154 ]
  br label %158

158:                                              ; preds = %156, %141
  %159 = phi i32 [ 2, %141 ], [ %157, %156 ]
  br label %160

160:                                              ; preds = %158, %136
  %161 = phi i32 [ 2, %136 ], [ %159, %158 ]
  br label %162

162:                                              ; preds = %160, %131
  %163 = phi i32 [ 4, %131 ], [ %161, %160 ]
  br label %164

164:                                              ; preds = %162, %126
  %165 = phi i32 [ 4, %126 ], [ %163, %162 ]
  br label %166

166:                                              ; preds = %164, %121
  %167 = phi i32 [ 8, %121 ], [ %165, %164 ]
  br label %168

168:                                              ; preds = %166, %116
  %169 = phi i32 [ 8, %116 ], [ %167, %166 ]
  br label %170

170:                                              ; preds = %168, %111
  %171 = phi i32 [ 1, %111 ], [ %169, %168 ]
  br label %172

172:                                              ; preds = %170, %106
  %173 = phi i32 [ 1, %106 ], [ %171, %170 ]
  br label %174

174:                                              ; preds = %172, %101
  %175 = phi i32 [ 2, %101 ], [ %173, %172 ]
  br label %176

176:                                              ; preds = %174, %96
  %177 = phi i32 [ 2, %96 ], [ %175, %174 ]
  br label %178

178:                                              ; preds = %176, %91
  %179 = phi i32 [ 4, %91 ], [ %177, %176 ]
  br label %180

180:                                              ; preds = %178, %86
  %181 = phi i32 [ 8, %86 ], [ %179, %178 ]
  %182 = trunc i32 %181 to i8
  %183 = call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext %182)
  store i32 %183, ptr %28, align 4, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %641, %180
  %185 = load i32, ptr %22, align 4, !tbaa !9
  %186 = load i32, ptr %18, align 4, !tbaa !9
  %187 = icmp ult i32 %185, %186
  br i1 %187, label %188, label %644

188:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %189

189:                                              ; preds = %583, %188
  %190 = load i32, ptr %21, align 4, !tbaa !9
  %191 = load i32, ptr %17, align 4, !tbaa !9
  %192 = icmp ult i32 %190, %191
  br i1 %192, label %193, label %586

193:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %194 = load ptr, ptr %14, align 8, !tbaa !5
  %195 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %194, i32 noundef 0)
  %196 = icmp eq i32 1, %195
  br i1 %196, label %197, label %207

197:                                              ; preds = %193
  %198 = load i32, ptr %21, align 4, !tbaa !9
  %199 = load i32, ptr %17, align 4, !tbaa !9
  %200 = sub i32 %199, 1
  %201 = icmp eq i32 %198, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %197
  %203 = load i32, ptr %19, align 4, !tbaa !9
  br label %205

204:                                              ; preds = %197
  br label %205

205:                                              ; preds = %204, %202
  %206 = phi i32 [ %203, %202 ], [ 0, %204 ]
  br label %225

207:                                              ; preds = %193
  %208 = load i32, ptr %21, align 4, !tbaa !9
  %209 = load i32, ptr %17, align 4, !tbaa !9
  %210 = sub i32 %209, 1
  %211 = icmp eq i32 %208, %210
  br i1 %211, label %212, label %221

212:                                              ; preds = %207
  %213 = load i32, ptr %19, align 4, !tbaa !9
  %214 = icmp ugt i32 %213, 0
  br i1 %214, label %215, label %217

215:                                              ; preds = %212
  %216 = load i32, ptr %19, align 4, !tbaa !9
  br label %219

217:                                              ; preds = %212
  %218 = load i32, ptr %15, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %217, %215
  %220 = phi i32 [ %216, %215 ], [ %218, %217 ]
  br label %223

221:                                              ; preds = %207
  %222 = load i32, ptr %15, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %221, %219
  %224 = phi i32 [ %220, %219 ], [ %222, %221 ]
  br label %225

225:                                              ; preds = %223, %205
  %226 = phi i32 [ %206, %205 ], [ %224, %223 ]
  store i32 %226, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %227 = load ptr, ptr %14, align 8, !tbaa !5
  %228 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %227, i32 noundef 0)
  %229 = icmp eq i32 1, %228
  br i1 %229, label %230, label %243

230:                                              ; preds = %225
  %231 = load i32, ptr %21, align 4, !tbaa !9
  %232 = load i32, ptr %17, align 4, !tbaa !9
  %233 = sub i32 %232, 1
  %234 = icmp eq i32 %231, %233
  br i1 %234, label %235, label %240

235:                                              ; preds = %230
  %236 = load i32, ptr %19, align 4, !tbaa !9
  %237 = icmp ugt i32 %236, 0
  %238 = zext i1 %237 to i64
  %239 = select i1 %237, i32 1, i32 0
  br label %241

240:                                              ; preds = %230
  br label %241

241:                                              ; preds = %240, %235
  %242 = phi i32 [ %239, %235 ], [ 0, %240 ]
  br label %256

243:                                              ; preds = %225
  %244 = load i32, ptr %21, align 4, !tbaa !9
  %245 = load i32, ptr %17, align 4, !tbaa !9
  %246 = sub i32 %245, 1
  %247 = icmp eq i32 %244, %246
  br i1 %247, label %248, label %253

248:                                              ; preds = %243
  %249 = load i32, ptr %19, align 4, !tbaa !9
  %250 = icmp ugt i32 %249, 0
  %251 = zext i1 %250 to i64
  %252 = select i1 %250, i32 1, i32 2
  br label %254

253:                                              ; preds = %243
  br label %254

254:                                              ; preds = %253, %248
  %255 = phi i32 [ %252, %248 ], [ 2, %253 ]
  br label %256

256:                                              ; preds = %254, %241
  %257 = phi i32 [ %242, %241 ], [ %255, %254 ]
  store i32 %257, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %258 = load i32, ptr %16, align 4, !tbaa !9
  %259 = load i32, ptr %22, align 4, !tbaa !9
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = mul i32 %259, %260
  %262 = add i32 %258, %261
  %263 = load i32, ptr %21, align 4, !tbaa !9
  %264 = add i32 %262, %263
  store i32 %264, ptr %32, align 4, !tbaa !9
  %265 = load ptr, ptr %14, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %265, i32 0, i32 9
  %267 = load i16, ptr %266, align 1, !tbaa !19
  %268 = zext i16 %267 to i32
  %269 = and i32 %268, 1
  %270 = icmp sgt i32 %269, 0
  br i1 %270, label %271, label %415

271:                                              ; preds = %256
  %272 = load ptr, ptr %14, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %272, i32 0, i32 10
  %274 = load i16, ptr %273, align 1, !tbaa !20
  %275 = zext i16 %274 to i32
  %276 = icmp ne i32 %275, 37
  br i1 %276, label %277, label %415

277:                                              ; preds = %271
  %278 = load ptr, ptr %11, align 8, !tbaa !5
  %279 = load ptr, ptr %14, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %279, i32 0, i32 0
  %281 = load i32, ptr %280, align 1, !tbaa !21
  %282 = load i32, ptr %21, align 4, !tbaa !9
  %283 = load i32, ptr %17, align 4, !tbaa !9
  %284 = load ptr, ptr %13, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %284, i32 0, i32 29
  %286 = load i32, ptr %285, align 4, !tbaa !22
  %287 = trunc i32 %286 to i8
  %288 = zext i8 %287 to i32
  %289 = icmp eq i32 0, %288
  br i1 %289, label %297, label %290

290:                                              ; preds = %277
  %291 = load ptr, ptr %13, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %291, i32 0, i32 29
  %293 = load i32, ptr %292, align 4, !tbaa !22
  %294 = trunc i32 %293 to i8
  %295 = zext i8 %294 to i32
  %296 = icmp slt i32 0, %295
  br i1 %296, label %297, label %321

297:                                              ; preds = %290, %277
  %298 = load ptr, ptr %13, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %298, i32 0, i32 29
  %300 = load i32, ptr %299, align 4, !tbaa !22
  %301 = zext i32 %300 to i64
  %302 = mul i64 1, %301
  %303 = icmp ult i64 %302, 255
  br i1 %303, label %304, label %310

304:                                              ; preds = %297
  %305 = load ptr, ptr %13, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %305, i32 0, i32 29
  %307 = load i32, ptr %306, align 4, !tbaa !22
  %308 = zext i32 %307 to i64
  %309 = mul i64 1, %308
  br label %311

310:                                              ; preds = %297
  br label %311

311:                                              ; preds = %310, %304
  %312 = phi i64 [ %309, %304 ], [ 255, %310 ]
  %313 = icmp ule i64 %312, 255
  br i1 %313, label %314, label %321

314:                                              ; preds = %311
  %315 = load ptr, ptr %13, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %315, i32 0, i32 29
  %317 = load i32, ptr %316, align 4, !tbaa !22
  %318 = uitofp i32 %317 to double
  %319 = fcmp ole double 0.000000e+00, %318
  br i1 %319, label %320, label %321

320:                                              ; preds = %314
  br label %322

321:                                              ; preds = %314, %311, %290
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str, i32 noundef 1654, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

322:                                              ; preds = %320
  %323 = load ptr, ptr %13, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %323, i32 0, i32 29
  %325 = load i32, ptr %324, align 4, !tbaa !22
  %326 = trunc i32 %325 to i8
  %327 = load ptr, ptr %12, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %327, i32 0, i32 9
  %329 = load i32, ptr %328, align 4, !tbaa !23
  %330 = trunc i32 %329 to i8
  %331 = zext i8 %330 to i32
  %332 = icmp eq i32 0, %331
  br i1 %332, label %340, label %333

333:                                              ; preds = %322
  %334 = load ptr, ptr %12, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %334, i32 0, i32 9
  %336 = load i32, ptr %335, align 4, !tbaa !23
  %337 = trunc i32 %336 to i8
  %338 = zext i8 %337 to i32
  %339 = icmp slt i32 0, %338
  br i1 %339, label %340, label %364

340:                                              ; preds = %333, %322
  %341 = load ptr, ptr %12, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %341, i32 0, i32 9
  %343 = load i32, ptr %342, align 4, !tbaa !23
  %344 = zext i32 %343 to i64
  %345 = mul i64 1, %344
  %346 = icmp ult i64 %345, 255
  br i1 %346, label %347, label %353

347:                                              ; preds = %340
  %348 = load ptr, ptr %12, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %348, i32 0, i32 9
  %350 = load i32, ptr %349, align 4, !tbaa !23
  %351 = zext i32 %350 to i64
  %352 = mul i64 1, %351
  br label %354

353:                                              ; preds = %340
  br label %354

354:                                              ; preds = %353, %347
  %355 = phi i64 [ %352, %347 ], [ 255, %353 ]
  %356 = icmp ule i64 %355, 255
  br i1 %356, label %357, label %364

357:                                              ; preds = %354
  %358 = load ptr, ptr %12, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %358, i32 0, i32 9
  %360 = load i32, ptr %359, align 4, !tbaa !23
  %361 = uitofp i32 %360 to double
  %362 = fcmp ole double 0.000000e+00, %361
  br i1 %362, label %363, label %364

363:                                              ; preds = %357
  br label %365

364:                                              ; preds = %357, %354, %333
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str, i32 noundef 1655, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

365:                                              ; preds = %363
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %366, i32 0, i32 9
  %368 = load i32, ptr %367, align 4, !tbaa !23
  %369 = trunc i32 %368 to i8
  %370 = load i8, ptr %27, align 1, !tbaa !18
  %371 = load ptr, ptr %12, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %371, i32 0, i32 35
  %373 = load i32, ptr %372, align 4, !tbaa !25
  %374 = trunc i32 %373 to i8
  %375 = zext i8 %374 to i32
  %376 = icmp eq i32 0, %375
  br i1 %376, label %384, label %377

377:                                              ; preds = %365
  %378 = load ptr, ptr %12, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %378, i32 0, i32 35
  %380 = load i32, ptr %379, align 4, !tbaa !25
  %381 = trunc i32 %380 to i8
  %382 = zext i8 %381 to i32
  %383 = icmp slt i32 0, %382
  br i1 %383, label %384, label %408

384:                                              ; preds = %377, %365
  %385 = load ptr, ptr %12, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %385, i32 0, i32 35
  %387 = load i32, ptr %386, align 4, !tbaa !25
  %388 = zext i32 %387 to i64
  %389 = mul i64 1, %388
  %390 = icmp ult i64 %389, 255
  br i1 %390, label %391, label %397

391:                                              ; preds = %384
  %392 = load ptr, ptr %12, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %392, i32 0, i32 35
  %394 = load i32, ptr %393, align 4, !tbaa !25
  %395 = zext i32 %394 to i64
  %396 = mul i64 1, %395
  br label %398

397:                                              ; preds = %384
  br label %398

398:                                              ; preds = %397, %391
  %399 = phi i64 [ %396, %391 ], [ 255, %397 ]
  %400 = icmp ule i64 %399, 255
  br i1 %400, label %401, label %408

401:                                              ; preds = %398
  %402 = load ptr, ptr %12, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %402, i32 0, i32 35
  %404 = load i32, ptr %403, align 4, !tbaa !25
  %405 = uitofp i32 %404 to double
  %406 = fcmp ole double 0.000000e+00, %405
  br i1 %406, label %407, label %408

407:                                              ; preds = %401
  br label %409

408:                                              ; preds = %401, %398, %377
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str, i32 noundef 1657, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

409:                                              ; preds = %407
  %410 = load ptr, ptr %12, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %410, i32 0, i32 35
  %412 = load i32, ptr %411, align 4, !tbaa !25
  %413 = trunc i32 %412 to i8
  %414 = load i8, ptr %26, align 1, !tbaa !18
  call void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_sve(ptr noundef %278, i32 noundef %281, i32 noundef %282, i32 noundef %283, i8 noundef zeroext %326, i8 noundef zeroext %369, i8 noundef zeroext %370, i8 noundef zeroext %413, i8 noundef zeroext %414, ptr noundef %29)
  br label %499

415:                                              ; preds = %271, %256
  %416 = load ptr, ptr %14, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %416, i32 0, i32 10
  %418 = load i16, ptr %417, align 1, !tbaa !20
  %419 = zext i16 %418 to i32
  %420 = icmp eq i32 %419, 37
  br i1 %420, label %421, label %497

421:                                              ; preds = %415
  %422 = load ptr, ptr %11, align 8, !tbaa !5
  %423 = load ptr, ptr %12, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %423, i32 0, i32 9
  %425 = load i32, ptr %424, align 4, !tbaa !23
  %426 = load ptr, ptr %12, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %426, i32 0, i32 36
  %428 = load i32, ptr %427, align 4, !tbaa !26
  %429 = load ptr, ptr %13, align 8, !tbaa !5
  %430 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %429, i32 0, i32 29
  %431 = load i32, ptr %430, align 4, !tbaa !22
  %432 = load ptr, ptr %13, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %432, i32 0, i32 2
  %434 = load i32, ptr %433, align 4, !tbaa !14
  %435 = load i32, ptr %30, align 4, !tbaa !9
  %436 = load i32, ptr %31, align 4, !tbaa !9
  %437 = trunc i32 %436 to i8
  %438 = zext i8 %437 to i32
  %439 = icmp eq i32 0, %438
  br i1 %439, label %445, label %440

440:                                              ; preds = %421
  %441 = load i32, ptr %31, align 4, !tbaa !9
  %442 = trunc i32 %441 to i8
  %443 = zext i8 %442 to i32
  %444 = icmp slt i32 0, %443
  br i1 %444, label %445, label %463

445:                                              ; preds = %440, %421
  %446 = load i32, ptr %31, align 4, !tbaa !9
  %447 = zext i32 %446 to i64
  %448 = mul i64 1, %447
  %449 = icmp ult i64 %448, 255
  br i1 %449, label %450, label %454

450:                                              ; preds = %445
  %451 = load i32, ptr %31, align 4, !tbaa !9
  %452 = zext i32 %451 to i64
  %453 = mul i64 1, %452
  br label %455

454:                                              ; preds = %445
  br label %455

455:                                              ; preds = %454, %450
  %456 = phi i64 [ %453, %450 ], [ 255, %454 ]
  %457 = icmp ule i64 %456, 255
  br i1 %457, label %458, label %463

458:                                              ; preds = %455
  %459 = load i32, ptr %31, align 4, !tbaa !9
  %460 = uitofp i32 %459 to double
  %461 = fcmp ole double 0.000000e+00, %460
  br i1 %461, label %462, label %463

462:                                              ; preds = %458
  br label %464

463:                                              ; preds = %458, %455, %440
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str, i32 noundef 1662, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

464:                                              ; preds = %462
  %465 = load i32, ptr %31, align 4, !tbaa !9
  %466 = trunc i32 %465 to i8
  %467 = load i8, ptr %25, align 1, !tbaa !18
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %422, i32 noundef %425, i32 noundef %428, i32 noundef %431, i32 noundef %434, i32 noundef %435, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %466, i8 noundef zeroext %467)
  %468 = load ptr, ptr %14, align 8, !tbaa !5
  %469 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %468, i32 noundef 4)
  %470 = icmp eq i32 1, %469
  br i1 %470, label %471, label %475

471:                                              ; preds = %464
  %472 = load ptr, ptr %14, align 8, !tbaa !5
  %473 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %472, i32 noundef 0)
  %474 = icmp eq i32 2, %473
  br i1 %474, label %483, label %475

475:                                              ; preds = %471, %464
  %476 = load ptr, ptr %14, align 8, !tbaa !5
  %477 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %476, i32 noundef 3)
  %478 = icmp eq i32 1, %477
  br i1 %478, label %479, label %488

479:                                              ; preds = %475
  %480 = load ptr, ptr %14, align 8, !tbaa !5
  %481 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %480, i32 noundef 0)
  %482 = icmp eq i32 2, %481
  br i1 %482, label %483, label %488

483:                                              ; preds = %479, %471
  %484 = load ptr, ptr %11, align 8, !tbaa !5
  %485 = load ptr, ptr %13, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %485, i32 0, i32 29
  %487 = load i32, ptr %486, align 4, !tbaa !22
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %484, i32 noundef %487, i32 noundef 0)
  br label %488

488:                                              ; preds = %483, %479, %475
  %489 = load ptr, ptr %11, align 8, !tbaa !5
  %490 = load ptr, ptr %13, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %490, i32 0, i32 29
  %492 = load i32, ptr %491, align 4, !tbaa !22
  %493 = load i8, ptr %27, align 1, !tbaa !18
  %494 = zext i8 %493 to i32
  %495 = load i32, ptr %20, align 4, !tbaa !9
  %496 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %489, i32 noundef 1695555730, i32 noundef %492, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %494, i32 noundef %495, i32 noundef %496)
  br label %498

497:                                              ; preds = %415
  br label %498

498:                                              ; preds = %497, %488
  br label %499

499:                                              ; preds = %498, %409
  %500 = load ptr, ptr %14, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %500, i32 0, i32 10
  %502 = load i16, ptr %501, align 1, !tbaa !20
  %503 = zext i16 %502 to i32
  %504 = icmp eq i32 %503, 35
  br i1 %504, label %505, label %525

505:                                              ; preds = %499
  %506 = load ptr, ptr %11, align 8, !tbaa !5
  %507 = load i32, ptr %32, align 4, !tbaa !9
  %508 = load ptr, ptr %13, align 8, !tbaa !5
  %509 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %508, i32 0, i32 102
  %510 = load i32, ptr %509, align 4, !tbaa !27
  %511 = load ptr, ptr %13, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %511, i32 0, i32 30
  %513 = load i32, ptr %512, align 4, !tbaa !28
  %514 = load i32, ptr %20, align 4, !tbaa !9
  %515 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %506, i32 noundef 1694500867, i32 noundef %507, i32 noundef %510, i8 noundef zeroext 0, i32 noundef %513, i32 noundef %514, i32 noundef %515)
  %516 = load ptr, ptr %11, align 8, !tbaa !5
  %517 = load i32, ptr %32, align 4, !tbaa !9
  %518 = load ptr, ptr %13, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %518, i32 0, i32 30
  %520 = load i32, ptr %519, align 4, !tbaa !28
  %521 = load i32, ptr %32, align 4, !tbaa !9
  %522 = load i8, ptr %27, align 1, !tbaa !18
  %523 = zext i8 %522 to i32
  %524 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %516, i32 noundef 86032515, i32 noundef %517, i32 noundef %520, i8 noundef zeroext 0, i32 noundef %521, i32 noundef %523, i32 noundef %524)
  br label %582

525:                                              ; preds = %499
  %526 = load ptr, ptr %14, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %526, i32 0, i32 10
  %528 = load i16, ptr %527, align 1, !tbaa !20
  %529 = zext i16 %528 to i32
  %530 = icmp eq i32 %529, 6
  br i1 %530, label %531, label %541

531:                                              ; preds = %525
  %532 = load ptr, ptr %11, align 8, !tbaa !5
  %533 = load i32, ptr %32, align 4, !tbaa !9
  %534 = load ptr, ptr %13, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %534, i32 0, i32 32
  %536 = load i32, ptr %535, align 4, !tbaa !29
  %537 = load i32, ptr %32, align 4, !tbaa !9
  %538 = load i8, ptr %27, align 1, !tbaa !18
  %539 = zext i8 %538 to i32
  %540 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %532, i32 noundef 86032515, i32 noundef %533, i32 noundef %536, i8 noundef zeroext 0, i32 noundef %537, i32 noundef %539, i32 noundef %540)
  br label %581

541:                                              ; preds = %525
  %542 = load ptr, ptr %14, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %542, i32 0, i32 10
  %544 = load i16, ptr %543, align 1, !tbaa !20
  %545 = zext i16 %544 to i32
  %546 = icmp eq i32 %545, 37
  br i1 %546, label %547, label %579

547:                                              ; preds = %541
  %548 = load ptr, ptr %11, align 8, !tbaa !5
  %549 = load ptr, ptr %13, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %549, i32 0, i32 29
  %551 = load i32, ptr %550, align 4, !tbaa !22
  %552 = load ptr, ptr %13, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %552, i32 0, i32 102
  %554 = load i32, ptr %553, align 4, !tbaa !27
  %555 = load ptr, ptr %13, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %555, i32 0, i32 29
  %557 = load i32, ptr %556, align 4, !tbaa !22
  %558 = load i32, ptr %20, align 4, !tbaa !9
  %559 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %548, i32 noundef 1694498819, i32 noundef %551, i32 noundef %554, i8 noundef zeroext 0, i32 noundef %557, i32 noundef %558, i32 noundef %559)
  %560 = load ptr, ptr %11, align 8, !tbaa !5
  %561 = load ptr, ptr %13, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %561, i32 0, i32 29
  %563 = load i32, ptr %562, align 4, !tbaa !22
  %564 = load i32, ptr %32, align 4, !tbaa !9
  %565 = load ptr, ptr %13, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %565, i32 0, i32 29
  %567 = load i32, ptr %566, align 4, !tbaa !22
  %568 = load i32, ptr %20, align 4, !tbaa !9
  %569 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %560, i32 noundef 1694500867, i32 noundef %563, i32 noundef %564, i8 noundef zeroext 0, i32 noundef %567, i32 noundef %568, i32 noundef %569)
  %570 = load ptr, ptr %11, align 8, !tbaa !5
  %571 = load i32, ptr %32, align 4, !tbaa !9
  %572 = load ptr, ptr %13, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %572, i32 0, i32 29
  %574 = load i32, ptr %573, align 4, !tbaa !22
  %575 = load i32, ptr %32, align 4, !tbaa !9
  %576 = load i8, ptr %27, align 1, !tbaa !18
  %577 = zext i8 %576 to i32
  %578 = load i32, ptr %28, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %570, i32 noundef 86032515, i32 noundef %571, i32 noundef %574, i8 noundef zeroext 0, i32 noundef %575, i32 noundef %577, i32 noundef %578)
  br label %580

579:                                              ; preds = %541
  br label %580

580:                                              ; preds = %579, %547
  br label %581

581:                                              ; preds = %580, %531
  br label %582

582:                                              ; preds = %581, %505
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %583

583:                                              ; preds = %582
  %584 = load i32, ptr %21, align 4, !tbaa !9
  %585 = add i32 %584, 1
  store i32 %585, ptr %21, align 4, !tbaa !9
  br label %189, !llvm.loop !30

586:                                              ; preds = %189
  %587 = load ptr, ptr %14, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %587, i32 0, i32 9
  %589 = load i16, ptr %588, align 1, !tbaa !19
  %590 = zext i16 %589 to i32
  %591 = and i32 %590, 1
  %592 = icmp sgt i32 %591, 0
  br i1 %592, label %593, label %619

593:                                              ; preds = %586
  %594 = load ptr, ptr %14, align 8, !tbaa !5
  %595 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %594, i32 0, i32 10
  %596 = load i16, ptr %595, align 1, !tbaa !20
  %597 = zext i16 %596 to i32
  %598 = icmp ne i32 %597, 37
  br i1 %598, label %599, label %619

599:                                              ; preds = %593
  %600 = load ptr, ptr %11, align 8, !tbaa !5
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %601, i32 0, i32 9
  %603 = load i32, ptr %602, align 4, !tbaa !23
  %604 = load ptr, ptr %12, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %604, i32 0, i32 35
  %606 = load i32, ptr %605, align 4, !tbaa !25
  %607 = load ptr, ptr %12, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %607, i32 0, i32 9
  %609 = load i32, ptr %608, align 4, !tbaa !23
  %610 = load ptr, ptr %13, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %610, i32 0, i32 16
  %612 = load i32, ptr %611, align 4, !tbaa !32
  %613 = zext i32 %612 to i64
  %614 = load i32, ptr %29, align 4, !tbaa !9
  %615 = zext i32 %614 to i64
  %616 = mul nsw i64 %615, 8
  %617 = sub nsw i64 %613, %616
  %618 = sdiv i64 %617, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %600, i32 noundef 4096, i32 noundef %603, i32 noundef %606, i32 noundef %609, i64 noundef %618)
  br label %640

619:                                              ; preds = %593, %586
  %620 = load i32, ptr %23, align 4, !tbaa !9
  %621 = load i32, ptr %24, align 4, !tbaa !9
  %622 = icmp ne i32 %620, %621
  br i1 %622, label %623, label %639

623:                                              ; preds = %619
  %624 = load ptr, ptr %11, align 8, !tbaa !5
  %625 = load ptr, ptr %12, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %625, i32 0, i32 9
  %627 = load i32, ptr %626, align 4, !tbaa !23
  %628 = load ptr, ptr %12, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %628, i32 0, i32 35
  %630 = load i32, ptr %629, align 4, !tbaa !25
  %631 = load ptr, ptr %12, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %631, i32 0, i32 9
  %633 = load i32, ptr %632, align 4, !tbaa !23
  %634 = load i32, ptr %23, align 4, !tbaa !9
  %635 = zext i32 %634 to i64
  %636 = load i32, ptr %24, align 4, !tbaa !9
  %637 = zext i32 %636 to i64
  %638 = sub nsw i64 %635, %637
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %624, i32 noundef 4096, i32 noundef %627, i32 noundef %630, i32 noundef %633, i64 noundef %638)
  br label %639

639:                                              ; preds = %623, %619
  br label %640

640:                                              ; preds = %639, %599
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %641

641:                                              ; preds = %640
  %642 = load i32, ptr %22, align 4, !tbaa !9
  %643 = add i32 %642, 1
  store i32 %643, ptr %22, align 4, !tbaa !9
  br label %184, !llvm.loop !33

644:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #4
  br label %1135

645:                                              ; preds = %76
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %646

646:                                              ; preds = %1131, %645
  %647 = load i32, ptr %22, align 4, !tbaa !9
  %648 = load i32, ptr %18, align 4, !tbaa !9
  %649 = icmp ult i32 %647, %648
  br i1 %649, label %650, label %1134

650:                                              ; preds = %646
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  store i32 0, ptr %33, align 4, !tbaa !9
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %651

651:                                              ; preds = %1073, %650
  %652 = load i32, ptr %21, align 4, !tbaa !9
  %653 = load i32, ptr %17, align 4, !tbaa !9
  %654 = icmp ult i32 %652, %653
  br i1 %654, label %655, label %1076

655:                                              ; preds = %651
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  %656 = load ptr, ptr %14, align 8, !tbaa !5
  %657 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %656, i32 noundef 0)
  %658 = icmp eq i32 1, %657
  br i1 %658, label %659, label %669

659:                                              ; preds = %655
  %660 = load i32, ptr %21, align 4, !tbaa !9
  %661 = load i32, ptr %17, align 4, !tbaa !9
  %662 = sub i32 %661, 1
  %663 = icmp eq i32 %660, %662
  br i1 %663, label %664, label %666

664:                                              ; preds = %659
  %665 = load i32, ptr %19, align 4, !tbaa !9
  br label %667

666:                                              ; preds = %659
  br label %667

667:                                              ; preds = %666, %664
  %668 = phi i32 [ %665, %664 ], [ 0, %666 ]
  br label %687

669:                                              ; preds = %655
  %670 = load i32, ptr %21, align 4, !tbaa !9
  %671 = load i32, ptr %17, align 4, !tbaa !9
  %672 = sub i32 %671, 1
  %673 = icmp eq i32 %670, %672
  br i1 %673, label %674, label %683

674:                                              ; preds = %669
  %675 = load i32, ptr %19, align 4, !tbaa !9
  %676 = icmp ugt i32 %675, 0
  br i1 %676, label %677, label %679

677:                                              ; preds = %674
  %678 = load i32, ptr %19, align 4, !tbaa !9
  br label %681

679:                                              ; preds = %674
  %680 = load i32, ptr %15, align 4, !tbaa !9
  br label %681

681:                                              ; preds = %679, %677
  %682 = phi i32 [ %678, %677 ], [ %680, %679 ]
  br label %685

683:                                              ; preds = %669
  %684 = load i32, ptr %15, align 4, !tbaa !9
  br label %685

685:                                              ; preds = %683, %681
  %686 = phi i32 [ %682, %681 ], [ %684, %683 ]
  br label %687

687:                                              ; preds = %685, %667
  %688 = phi i32 [ %668, %667 ], [ %686, %685 ]
  store i32 %688, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %689 = load ptr, ptr %14, align 8, !tbaa !5
  %690 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %689, i32 noundef 0)
  %691 = icmp eq i32 1, %690
  br i1 %691, label %692, label %705

692:                                              ; preds = %687
  %693 = load i32, ptr %21, align 4, !tbaa !9
  %694 = load i32, ptr %17, align 4, !tbaa !9
  %695 = sub i32 %694, 1
  %696 = icmp eq i32 %693, %695
  br i1 %696, label %697, label %702

697:                                              ; preds = %692
  %698 = load i32, ptr %19, align 4, !tbaa !9
  %699 = icmp ugt i32 %698, 0
  %700 = zext i1 %699 to i64
  %701 = select i1 %699, i32 1, i32 0
  br label %703

702:                                              ; preds = %692
  br label %703

703:                                              ; preds = %702, %697
  %704 = phi i32 [ %701, %697 ], [ 0, %702 ]
  br label %718

705:                                              ; preds = %687
  %706 = load i32, ptr %21, align 4, !tbaa !9
  %707 = load i32, ptr %17, align 4, !tbaa !9
  %708 = sub i32 %707, 1
  %709 = icmp eq i32 %706, %708
  br i1 %709, label %710, label %715

710:                                              ; preds = %705
  %711 = load i32, ptr %19, align 4, !tbaa !9
  %712 = icmp ugt i32 %711, 0
  %713 = zext i1 %712 to i64
  %714 = select i1 %712, i32 1, i32 2
  br label %716

715:                                              ; preds = %705
  br label %716

716:                                              ; preds = %715, %710
  %717 = phi i32 [ %714, %710 ], [ 2, %715 ]
  br label %718

718:                                              ; preds = %716, %703
  %719 = phi i32 [ %704, %703 ], [ %717, %716 ]
  store i32 %719, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  %720 = load i32, ptr %16, align 4, !tbaa !9
  %721 = load i32, ptr %22, align 4, !tbaa !9
  %722 = load i32, ptr %17, align 4, !tbaa !9
  %723 = mul i32 %721, %722
  %724 = add i32 %720, %723
  %725 = load i32, ptr %21, align 4, !tbaa !9
  %726 = add i32 %724, %725
  store i32 %726, ptr %36, align 4, !tbaa !9
  %727 = load ptr, ptr %14, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %727, i32 0, i32 9
  %729 = load i16, ptr %728, align 1, !tbaa !19
  %730 = zext i16 %729 to i32
  %731 = and i32 %730, 1
  %732 = icmp sgt i32 %731, 0
  br i1 %732, label %733, label %915

733:                                              ; preds = %718
  %734 = load ptr, ptr %14, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %734, i32 0, i32 10
  %736 = load i16, ptr %735, align 1, !tbaa !20
  %737 = zext i16 %736 to i32
  %738 = icmp ne i32 %737, 37
  br i1 %738, label %739, label %915

739:                                              ; preds = %733
  %740 = load ptr, ptr %11, align 8, !tbaa !5
  %741 = load i32, ptr %21, align 4, !tbaa !9
  %742 = load i32, ptr %17, align 4, !tbaa !9
  %743 = load ptr, ptr %13, align 8, !tbaa !5
  %744 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %743, i32 0, i32 100
  %745 = load i32, ptr %744, align 4, !tbaa !34
  %746 = trunc i32 %745 to i8
  %747 = zext i8 %746 to i32
  %748 = icmp eq i32 0, %747
  br i1 %748, label %756, label %749

749:                                              ; preds = %739
  %750 = load ptr, ptr %13, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %750, i32 0, i32 100
  %752 = load i32, ptr %751, align 4, !tbaa !34
  %753 = trunc i32 %752 to i8
  %754 = zext i8 %753 to i32
  %755 = icmp slt i32 0, %754
  br i1 %755, label %756, label %780

756:                                              ; preds = %749, %739
  %757 = load ptr, ptr %13, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %757, i32 0, i32 100
  %759 = load i32, ptr %758, align 4, !tbaa !34
  %760 = zext i32 %759 to i64
  %761 = mul i64 1, %760
  %762 = icmp ult i64 %761, 255
  br i1 %762, label %763, label %769

763:                                              ; preds = %756
  %764 = load ptr, ptr %13, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %764, i32 0, i32 100
  %766 = load i32, ptr %765, align 4, !tbaa !34
  %767 = zext i32 %766 to i64
  %768 = mul i64 1, %767
  br label %770

769:                                              ; preds = %756
  br label %770

770:                                              ; preds = %769, %763
  %771 = phi i64 [ %768, %763 ], [ 255, %769 ]
  %772 = icmp ule i64 %771, 255
  br i1 %772, label %773, label %780

773:                                              ; preds = %770
  %774 = load ptr, ptr %13, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %774, i32 0, i32 100
  %776 = load i32, ptr %775, align 4, !tbaa !34
  %777 = uitofp i32 %776 to double
  %778 = fcmp ole double 0.000000e+00, %777
  br i1 %778, label %779, label %780

779:                                              ; preds = %773
  br label %781

780:                                              ; preds = %773, %770, %749
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str, i32 noundef 1734, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

781:                                              ; preds = %779
  %782 = load ptr, ptr %13, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %782, i32 0, i32 100
  %784 = load i32, ptr %783, align 4, !tbaa !34
  %785 = trunc i32 %784 to i8
  %786 = load ptr, ptr %13, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %786, i32 0, i32 101
  %788 = load i32, ptr %787, align 4, !tbaa !35
  %789 = trunc i32 %788 to i8
  %790 = zext i8 %789 to i32
  %791 = icmp eq i32 0, %790
  br i1 %791, label %799, label %792

792:                                              ; preds = %781
  %793 = load ptr, ptr %13, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %793, i32 0, i32 101
  %795 = load i32, ptr %794, align 4, !tbaa !35
  %796 = trunc i32 %795 to i8
  %797 = zext i8 %796 to i32
  %798 = icmp slt i32 0, %797
  br i1 %798, label %799, label %823

799:                                              ; preds = %792, %781
  %800 = load ptr, ptr %13, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %800, i32 0, i32 101
  %802 = load i32, ptr %801, align 4, !tbaa !35
  %803 = zext i32 %802 to i64
  %804 = mul i64 1, %803
  %805 = icmp ult i64 %804, 255
  br i1 %805, label %806, label %812

806:                                              ; preds = %799
  %807 = load ptr, ptr %13, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %807, i32 0, i32 101
  %809 = load i32, ptr %808, align 4, !tbaa !35
  %810 = zext i32 %809 to i64
  %811 = mul i64 1, %810
  br label %813

812:                                              ; preds = %799
  br label %813

813:                                              ; preds = %812, %806
  %814 = phi i64 [ %811, %806 ], [ 255, %812 ]
  %815 = icmp ule i64 %814, 255
  br i1 %815, label %816, label %823

816:                                              ; preds = %813
  %817 = load ptr, ptr %13, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %817, i32 0, i32 101
  %819 = load i32, ptr %818, align 4, !tbaa !35
  %820 = uitofp i32 %819 to double
  %821 = fcmp ole double 0.000000e+00, %820
  br i1 %821, label %822, label %823

822:                                              ; preds = %816
  br label %824

823:                                              ; preds = %816, %813, %792
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str, i32 noundef 1735, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

824:                                              ; preds = %822
  %825 = load ptr, ptr %13, align 8, !tbaa !5
  %826 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %825, i32 0, i32 101
  %827 = load i32, ptr %826, align 4, !tbaa !35
  %828 = trunc i32 %827 to i8
  %829 = load ptr, ptr %13, align 8, !tbaa !5
  %830 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %829, i32 0, i32 29
  %831 = load i32, ptr %830, align 4, !tbaa !22
  %832 = trunc i32 %831 to i8
  %833 = zext i8 %832 to i32
  %834 = icmp eq i32 0, %833
  br i1 %834, label %842, label %835

835:                                              ; preds = %824
  %836 = load ptr, ptr %13, align 8, !tbaa !5
  %837 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %836, i32 0, i32 29
  %838 = load i32, ptr %837, align 4, !tbaa !22
  %839 = trunc i32 %838 to i8
  %840 = zext i8 %839 to i32
  %841 = icmp slt i32 0, %840
  br i1 %841, label %842, label %866

842:                                              ; preds = %835, %824
  %843 = load ptr, ptr %13, align 8, !tbaa !5
  %844 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %843, i32 0, i32 29
  %845 = load i32, ptr %844, align 4, !tbaa !22
  %846 = zext i32 %845 to i64
  %847 = mul i64 1, %846
  %848 = icmp ult i64 %847, 255
  br i1 %848, label %849, label %855

849:                                              ; preds = %842
  %850 = load ptr, ptr %13, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %850, i32 0, i32 29
  %852 = load i32, ptr %851, align 4, !tbaa !22
  %853 = zext i32 %852 to i64
  %854 = mul i64 1, %853
  br label %856

855:                                              ; preds = %842
  br label %856

856:                                              ; preds = %855, %849
  %857 = phi i64 [ %854, %849 ], [ 255, %855 ]
  %858 = icmp ule i64 %857, 255
  br i1 %858, label %859, label %866

859:                                              ; preds = %856
  %860 = load ptr, ptr %13, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %860, i32 0, i32 29
  %862 = load i32, ptr %861, align 4, !tbaa !22
  %863 = uitofp i32 %862 to double
  %864 = fcmp ole double 0.000000e+00, %863
  br i1 %864, label %865, label %866

865:                                              ; preds = %859
  br label %867

866:                                              ; preds = %859, %856, %835
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str, i32 noundef 1736, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

867:                                              ; preds = %865
  %868 = load ptr, ptr %13, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %868, i32 0, i32 29
  %870 = load i32, ptr %869, align 4, !tbaa !22
  %871 = trunc i32 %870 to i8
  %872 = load ptr, ptr %12, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %872, i32 0, i32 9
  %874 = load i32, ptr %873, align 4, !tbaa !23
  %875 = trunc i32 %874 to i8
  %876 = zext i8 %875 to i32
  %877 = icmp eq i32 0, %876
  br i1 %877, label %885, label %878

878:                                              ; preds = %867
  %879 = load ptr, ptr %12, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %879, i32 0, i32 9
  %881 = load i32, ptr %880, align 4, !tbaa !23
  %882 = trunc i32 %881 to i8
  %883 = zext i8 %882 to i32
  %884 = icmp slt i32 0, %883
  br i1 %884, label %885, label %909

885:                                              ; preds = %878, %867
  %886 = load ptr, ptr %12, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %886, i32 0, i32 9
  %888 = load i32, ptr %887, align 4, !tbaa !23
  %889 = zext i32 %888 to i64
  %890 = mul i64 1, %889
  %891 = icmp ult i64 %890, 255
  br i1 %891, label %892, label %898

892:                                              ; preds = %885
  %893 = load ptr, ptr %12, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %893, i32 0, i32 9
  %895 = load i32, ptr %894, align 4, !tbaa !23
  %896 = zext i32 %895 to i64
  %897 = mul i64 1, %896
  br label %899

898:                                              ; preds = %885
  br label %899

899:                                              ; preds = %898, %892
  %900 = phi i64 [ %897, %892 ], [ 255, %898 ]
  %901 = icmp ule i64 %900, 255
  br i1 %901, label %902, label %909

902:                                              ; preds = %899
  %903 = load ptr, ptr %12, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %903, i32 0, i32 9
  %905 = load i32, ptr %904, align 4, !tbaa !23
  %906 = uitofp i32 %905 to double
  %907 = fcmp ole double 0.000000e+00, %906
  br i1 %907, label %908, label %909

908:                                              ; preds = %902
  br label %910

909:                                              ; preds = %902, %899, %878
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str, i32 noundef 1737, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

910:                                              ; preds = %908
  %911 = load ptr, ptr %12, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %911, i32 0, i32 9
  %913 = load i32, ptr %912, align 4, !tbaa !23
  %914 = trunc i32 %913 to i8
  call void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_asimd(ptr noundef %740, i32 noundef %741, i32 noundef %742, i8 noundef zeroext %785, i8 noundef zeroext %828, i8 noundef zeroext %871, i8 noundef zeroext %914, ptr noundef %33)
  br label %998

915:                                              ; preds = %733, %718
  %916 = load ptr, ptr %14, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %916, i32 0, i32 10
  %918 = load i16, ptr %917, align 1, !tbaa !20
  %919 = zext i16 %918 to i32
  %920 = icmp eq i32 %919, 37
  br i1 %920, label %921, label %996

921:                                              ; preds = %915
  %922 = load ptr, ptr %11, align 8, !tbaa !5
  %923 = load ptr, ptr %12, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %923, i32 0, i32 9
  %925 = load i32, ptr %924, align 4, !tbaa !23
  %926 = load ptr, ptr %12, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %926, i32 0, i32 36
  %928 = load i32, ptr %927, align 4, !tbaa !26
  %929 = load ptr, ptr %13, align 8, !tbaa !5
  %930 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %929, i32 0, i32 29
  %931 = load i32, ptr %930, align 4, !tbaa !22
  %932 = load ptr, ptr %13, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %932, i32 0, i32 2
  %934 = load i32, ptr %933, align 4, !tbaa !14
  %935 = load i32, ptr %34, align 4, !tbaa !9
  %936 = load i32, ptr %35, align 4, !tbaa !9
  %937 = trunc i32 %936 to i8
  %938 = zext i8 %937 to i32
  %939 = icmp eq i32 0, %938
  br i1 %939, label %945, label %940

940:                                              ; preds = %921
  %941 = load i32, ptr %35, align 4, !tbaa !9
  %942 = trunc i32 %941 to i8
  %943 = zext i8 %942 to i32
  %944 = icmp slt i32 0, %943
  br i1 %944, label %945, label %963

945:                                              ; preds = %940, %921
  %946 = load i32, ptr %35, align 4, !tbaa !9
  %947 = zext i32 %946 to i64
  %948 = mul i64 1, %947
  %949 = icmp ult i64 %948, 255
  br i1 %949, label %950, label %954

950:                                              ; preds = %945
  %951 = load i32, ptr %35, align 4, !tbaa !9
  %952 = zext i32 %951 to i64
  %953 = mul i64 1, %952
  br label %955

954:                                              ; preds = %945
  br label %955

955:                                              ; preds = %954, %950
  %956 = phi i64 [ %953, %950 ], [ 255, %954 ]
  %957 = icmp ule i64 %956, 255
  br i1 %957, label %958, label %963

958:                                              ; preds = %955
  %959 = load i32, ptr %35, align 4, !tbaa !9
  %960 = uitofp i32 %959 to double
  %961 = fcmp ole double 0.000000e+00, %960
  br i1 %961, label %962, label %963

962:                                              ; preds = %958
  br label %964

963:                                              ; preds = %958, %955, %940
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str, i32 noundef 1741, ptr noundef @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

964:                                              ; preds = %962
  %965 = load i32, ptr %35, align 4, !tbaa !9
  %966 = trunc i32 %965 to i8
  %967 = load i8, ptr %25, align 1, !tbaa !18
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %922, i32 noundef %925, i32 noundef %928, i32 noundef %931, i32 noundef %934, i32 noundef %935, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %966, i8 noundef zeroext %967)
  %968 = load ptr, ptr %14, align 8, !tbaa !5
  %969 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %968, i32 noundef 4)
  %970 = icmp eq i32 1, %969
  br i1 %970, label %971, label %975

971:                                              ; preds = %964
  %972 = load ptr, ptr %14, align 8, !tbaa !5
  %973 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %972, i32 noundef 0)
  %974 = icmp eq i32 2, %973
  br i1 %974, label %983, label %975

975:                                              ; preds = %971, %964
  %976 = load ptr, ptr %14, align 8, !tbaa !5
  %977 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %976, i32 noundef 3)
  %978 = icmp eq i32 1, %977
  br i1 %978, label %979, label %988

979:                                              ; preds = %975
  %980 = load ptr, ptr %14, align 8, !tbaa !5
  %981 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef %980, i32 noundef 0)
  %982 = icmp eq i32 2, %981
  br i1 %982, label %983, label %988

983:                                              ; preds = %979, %971
  %984 = load ptr, ptr %11, align 8, !tbaa !5
  %985 = load ptr, ptr %13, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %985, i32 0, i32 29
  %987 = load i32, ptr %986, align 4, !tbaa !22
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %984, i32 noundef %987, i32 noundef 0)
  br label %988

988:                                              ; preds = %983, %979, %975
  %989 = load ptr, ptr %11, align 8, !tbaa !5
  %990 = load ptr, ptr %13, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %990, i32 0, i32 29
  %992 = load i32, ptr %991, align 4, !tbaa !22
  %993 = load ptr, ptr %13, align 8, !tbaa !5
  %994 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %993, i32 0, i32 30
  %995 = load i32, ptr %994, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %989, i32 noundef 245417994, i32 noundef %992, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %995, i32 noundef 5)
  br label %997

996:                                              ; preds = %915
  br label %997

997:                                              ; preds = %996, %988
  br label %998

998:                                              ; preds = %997, %910
  %999 = load ptr, ptr %14, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %999, i32 0, i32 10
  %1001 = load i16, ptr %1000, align 1, !tbaa !20
  %1002 = zext i16 %1001 to i32
  %1003 = icmp eq i32 %1002, 35
  br i1 %1003, label %1004, label %1021

1004:                                             ; preds = %998
  %1005 = load ptr, ptr %11, align 8, !tbaa !5
  %1006 = load i32, ptr %36, align 4, !tbaa !9
  %1007 = load ptr, ptr %13, align 8, !tbaa !5
  %1008 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1007, i32 0, i32 102
  %1009 = load i32, ptr %1008, align 4, !tbaa !27
  %1010 = load ptr, ptr %13, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1010, i32 0, i32 30
  %1012 = load i32, ptr %1011, align 4, !tbaa !28
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1005, i32 noundef 773905419, i32 noundef %1006, i32 noundef %1009, i8 noundef zeroext 0, i32 noundef %1012, i32 noundef 5)
  %1013 = load ptr, ptr %11, align 8, !tbaa !5
  %1014 = load ptr, ptr %13, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1014, i32 0, i32 30
  %1016 = load i32, ptr %1015, align 4, !tbaa !28
  %1017 = load ptr, ptr %13, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1017, i32 0, i32 29
  %1019 = load i32, ptr %1018, align 4, !tbaa !22
  %1020 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1013, i32 noundef 786439187, i32 noundef %1016, i32 noundef %1019, i8 noundef zeroext 0, i32 noundef %1020, i32 noundef 1)
  br label %1072

1021:                                             ; preds = %998
  %1022 = load ptr, ptr %14, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1022, i32 0, i32 10
  %1024 = load i16, ptr %1023, align 1, !tbaa !20
  %1025 = zext i16 %1024 to i32
  %1026 = icmp eq i32 %1025, 6
  br i1 %1026, label %1027, label %1036

1027:                                             ; preds = %1021
  %1028 = load ptr, ptr %11, align 8, !tbaa !5
  %1029 = load ptr, ptr %13, align 8, !tbaa !5
  %1030 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1029, i32 0, i32 32
  %1031 = load i32, ptr %1030, align 4, !tbaa !29
  %1032 = load ptr, ptr %13, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1032, i32 0, i32 29
  %1034 = load i32, ptr %1033, align 4, !tbaa !22
  %1035 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1028, i32 noundef 786439187, i32 noundef %1031, i32 noundef %1034, i8 noundef zeroext 0, i32 noundef %1035, i32 noundef 1)
  br label %1071

1036:                                             ; preds = %1021
  %1037 = load ptr, ptr %14, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1037, i32 0, i32 10
  %1039 = load i16, ptr %1038, align 1, !tbaa !20
  %1040 = zext i16 %1039 to i32
  %1041 = icmp eq i32 %1040, 37
  br i1 %1041, label %1042, label %1069

1042:                                             ; preds = %1036
  %1043 = load ptr, ptr %11, align 8, !tbaa !5
  %1044 = load ptr, ptr %13, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1044, i32 0, i32 29
  %1046 = load i32, ptr %1045, align 4, !tbaa !22
  %1047 = load ptr, ptr %13, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1047, i32 0, i32 102
  %1049 = load i32, ptr %1048, align 4, !tbaa !27
  %1050 = load ptr, ptr %13, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1050, i32 0, i32 29
  %1052 = load i32, ptr %1051, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1043, i32 noundef 237032459, i32 noundef %1046, i32 noundef %1049, i8 noundef zeroext 0, i32 noundef %1052, i32 noundef 5)
  %1053 = load ptr, ptr %11, align 8, !tbaa !5
  %1054 = load ptr, ptr %13, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1054, i32 0, i32 29
  %1056 = load i32, ptr %1055, align 4, !tbaa !22
  %1057 = load i32, ptr %36, align 4, !tbaa !9
  %1058 = load ptr, ptr %13, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1058, i32 0, i32 29
  %1060 = load i32, ptr %1059, align 4, !tbaa !22
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1053, i32 noundef 773905419, i32 noundef %1056, i32 noundef %1057, i8 noundef zeroext 0, i32 noundef %1060, i32 noundef 5)
  %1061 = load ptr, ptr %11, align 8, !tbaa !5
  %1062 = load ptr, ptr %13, align 8, !tbaa !5
  %1063 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1062, i32 0, i32 29
  %1064 = load i32, ptr %1063, align 4, !tbaa !22
  %1065 = load ptr, ptr %13, align 8, !tbaa !5
  %1066 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1065, i32 0, i32 30
  %1067 = load i32, ptr %1066, align 4, !tbaa !28
  %1068 = load i32, ptr %36, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %1061, i32 noundef 786439187, i32 noundef %1064, i32 noundef %1067, i8 noundef zeroext 0, i32 noundef %1068, i32 noundef 1)
  br label %1070

1069:                                             ; preds = %1036
  br label %1070

1070:                                             ; preds = %1069, %1042
  br label %1071

1071:                                             ; preds = %1070, %1027
  br label %1072

1072:                                             ; preds = %1071, %1004
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %1073

1073:                                             ; preds = %1072
  %1074 = load i32, ptr %21, align 4, !tbaa !9
  %1075 = add i32 %1074, 1
  store i32 %1075, ptr %21, align 4, !tbaa !9
  br label %651, !llvm.loop !36

1076:                                             ; preds = %651
  %1077 = load ptr, ptr %14, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1077, i32 0, i32 9
  %1079 = load i16, ptr %1078, align 1, !tbaa !19
  %1080 = zext i16 %1079 to i32
  %1081 = and i32 %1080, 1
  %1082 = icmp sgt i32 %1081, 0
  br i1 %1082, label %1083, label %1109

1083:                                             ; preds = %1076
  %1084 = load ptr, ptr %14, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1084, i32 0, i32 10
  %1086 = load i16, ptr %1085, align 1, !tbaa !20
  %1087 = zext i16 %1086 to i32
  %1088 = icmp ne i32 %1087, 37
  br i1 %1088, label %1089, label %1109

1089:                                             ; preds = %1083
  %1090 = load ptr, ptr %11, align 8, !tbaa !5
  %1091 = load ptr, ptr %12, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1091, i32 0, i32 9
  %1093 = load i32, ptr %1092, align 4, !tbaa !23
  %1094 = load ptr, ptr %12, align 8, !tbaa !5
  %1095 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1094, i32 0, i32 35
  %1096 = load i32, ptr %1095, align 4, !tbaa !25
  %1097 = load ptr, ptr %12, align 8, !tbaa !5
  %1098 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1097, i32 0, i32 9
  %1099 = load i32, ptr %1098, align 4, !tbaa !23
  %1100 = load ptr, ptr %13, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1100, i32 0, i32 16
  %1102 = load i32, ptr %1101, align 4, !tbaa !32
  %1103 = zext i32 %1102 to i64
  %1104 = load i32, ptr %33, align 4, !tbaa !9
  %1105 = zext i32 %1104 to i64
  %1106 = mul nsw i64 %1105, 8
  %1107 = sub nsw i64 %1103, %1106
  %1108 = sdiv i64 %1107, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1090, i32 noundef 4096, i32 noundef %1093, i32 noundef %1096, i32 noundef %1099, i64 noundef %1108)
  br label %1130

1109:                                             ; preds = %1083, %1076
  %1110 = load i32, ptr %23, align 4, !tbaa !9
  %1111 = load i32, ptr %24, align 4, !tbaa !9
  %1112 = icmp ne i32 %1110, %1111
  br i1 %1112, label %1113, label %1129

1113:                                             ; preds = %1109
  %1114 = load ptr, ptr %11, align 8, !tbaa !5
  %1115 = load ptr, ptr %12, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1115, i32 0, i32 9
  %1117 = load i32, ptr %1116, align 4, !tbaa !23
  %1118 = load ptr, ptr %12, align 8, !tbaa !5
  %1119 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1118, i32 0, i32 35
  %1120 = load i32, ptr %1119, align 4, !tbaa !25
  %1121 = load ptr, ptr %12, align 8, !tbaa !5
  %1122 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1121, i32 0, i32 9
  %1123 = load i32, ptr %1122, align 4, !tbaa !23
  %1124 = load i32, ptr %23, align 4, !tbaa !9
  %1125 = zext i32 %1124 to i64
  %1126 = load i32, ptr %24, align 4, !tbaa !9
  %1127 = zext i32 %1126 to i64
  %1128 = sub nsw i64 %1125, %1127
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1114, i32 noundef 4096, i32 noundef %1117, i32 noundef %1120, i32 noundef %1123, i64 noundef %1128)
  br label %1129

1129:                                             ; preds = %1113, %1109
  br label %1130

1130:                                             ; preds = %1129, %1089
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %1131

1131:                                             ; preds = %1130
  %1132 = load i32, ptr %22, align 4, !tbaa !9
  %1133 = add i32 %1132, 1
  store i32 %1133, ptr %22, align 4, !tbaa !9
  br label %646, !llvm.loop !37

1134:                                             ; preds = %646
  br label %1135

1135:                                             ; preds = %1134, %644
  %1136 = load ptr, ptr %14, align 8, !tbaa !5
  %1137 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1136, i32 0, i32 9
  %1138 = load i16, ptr %1137, align 1, !tbaa !19
  %1139 = zext i16 %1138 to i32
  %1140 = and i32 %1139, 1
  %1141 = icmp sgt i32 %1140, 0
  br i1 %1141, label %1142, label %1167

1142:                                             ; preds = %1135
  %1143 = load ptr, ptr %14, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1143, i32 0, i32 10
  %1145 = load i16, ptr %1144, align 1, !tbaa !20
  %1146 = zext i16 %1145 to i32
  %1147 = icmp ne i32 %1146, 37
  br i1 %1147, label %1148, label %1167

1148:                                             ; preds = %1142
  %1149 = load ptr, ptr %11, align 8, !tbaa !5
  %1150 = load ptr, ptr %12, align 8, !tbaa !5
  %1151 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1150, i32 0, i32 9
  %1152 = load i32, ptr %1151, align 4, !tbaa !23
  %1153 = load ptr, ptr %12, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1153, i32 0, i32 35
  %1155 = load i32, ptr %1154, align 4, !tbaa !25
  %1156 = load ptr, ptr %12, align 8, !tbaa !5
  %1157 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1156, i32 0, i32 9
  %1158 = load i32, ptr %1157, align 4, !tbaa !23
  %1159 = load i32, ptr %18, align 4, !tbaa !9
  %1160 = zext i32 %1159 to i64
  %1161 = load ptr, ptr %13, align 8, !tbaa !5
  %1162 = getelementptr inbounds %struct.libxsmm_mateltwise_kernel_config_struct, ptr %1161, i32 0, i32 16
  %1163 = load i32, ptr %1162, align 4, !tbaa !32
  %1164 = udiv i32 %1163, 8
  %1165 = zext i32 %1164 to i64
  %1166 = mul nsw i64 %1160, %1165
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1149, i32 noundef 4097, i32 noundef %1152, i32 noundef %1155, i32 noundef %1158, i64 noundef %1166)
  br label %1183

1167:                                             ; preds = %1142, %1135
  %1168 = load ptr, ptr %11, align 8, !tbaa !5
  %1169 = load ptr, ptr %12, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1169, i32 0, i32 9
  %1171 = load i32, ptr %1170, align 4, !tbaa !23
  %1172 = load ptr, ptr %12, align 8, !tbaa !5
  %1173 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1172, i32 0, i32 35
  %1174 = load i32, ptr %1173, align 4, !tbaa !25
  %1175 = load ptr, ptr %12, align 8, !tbaa !5
  %1176 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %1175, i32 0, i32 9
  %1177 = load i32, ptr %1176, align 4, !tbaa !23
  %1178 = load i32, ptr %23, align 4, !tbaa !9
  %1179 = zext i32 %1178 to i64
  %1180 = load i32, ptr %18, align 4, !tbaa !9
  %1181 = zext i32 %1180 to i64
  %1182 = mul nsw i64 %1179, %1181
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %1168, i32 noundef 4097, i32 noundef %1171, i32 noundef %1174, i32 noundef %1177, i64 noundef %1182)
  br label %1183

1183:                                             ; preds = %1167, %1148
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_sve(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_asimd(ptr noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 8}
!12 = !{!"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, !13, i64 27, !13, i64 29, !7, i64 31}
!13 = !{!"short", !7, i64 0}
!14 = !{!15, !10, i64 8}
!15 = !{!"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}
!16 = !{!17, !10, i64 28}
!17 = !{!"libxsmm_generated_code", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!18 = !{!7, !7, i64 0}
!19 = !{!12, !13, i64 27}
!20 = !{!12, !13, i64 29}
!21 = !{!12, !10, i64 0}
!22 = !{!15, !10, i64 116}
!23 = !{!24, !10, i64 36}
!24 = !{!"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}
!25 = !{!24, !10, i64 140}
!26 = !{!24, !10, i64 144}
!27 = !{!15, !10, i64 408}
!28 = !{!15, !10, i64 120}
!29 = !{!15, !10, i64 128}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!15, !10, i64 64}
!33 = distinct !{!33, !31}
!34 = !{!15, !10, i64 400}
!35 = !{!15, !10, i64 404}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [97 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv = external hidden unnamed_addr constant [280 x i8], align 1

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

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

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

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

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

declare i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_aarch64_instruction_sve_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

declare void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i32 noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv(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, i32 noundef %9) local_unnamed_addr #3 {
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = getelementptr inbounds i8, ptr %3, i64 8
  %14 = load i32, ptr %13, align 1, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %2, i64 8
  %16 = load i32, ptr %15, align 4, !tbaa !11
  %17 = mul i32 %16, %14
  %18 = icmp eq i32 %8, 0
  br i1 %18, label %19, label %22

19:                                               ; preds = %10
  %20 = mul i32 %6, %4
  %21 = mul i32 %20, %16
  br label %27

22:                                               ; preds = %10
  %23 = add i32 %6, -1
  %24 = mul i32 %23, %4
  %25 = add i32 %24, %8
  %26 = mul i32 %16, %25
  br label %27

27:                                               ; preds = %22, %19
  %28 = phi i32 [ %21, %19 ], [ %26, %22 ]
  %29 = getelementptr inbounds i8, ptr %0, i64 28
  %30 = load i32, ptr %29, align 4, !tbaa !13
  %31 = add i32 %30, -2201
  %spec.select = icmp ult i32 %31, 799
  br i1 %spec.select, label %141, label %.preheader

.preheader:                                       ; preds = %27
  %.not350 = icmp eq i32 %7, 0
  br i1 %.not350, label %.loopexit, label %.lr.ph339

.lr.ph339:                                        ; preds = %.preheader
  %.not351 = icmp eq i32 %6, 0
  %32 = add i32 %6, -1
  %33 = select i1 %18, i32 %4, i32 %8
  %34 = select i1 %18, i8 2, i8 1
  %.not318 = icmp ne i32 %8, 0
  %35 = getelementptr inbounds i8, ptr %3, i64 27
  %36 = getelementptr inbounds i8, ptr %3, i64 29
  %37 = getelementptr inbounds i8, ptr %2, i64 400
  %38 = getelementptr inbounds i8, ptr %2, i64 404
  %39 = getelementptr inbounds i8, ptr %2, i64 116
  %40 = getelementptr inbounds i8, ptr %1, i64 36
  %41 = getelementptr inbounds i8, ptr %1, i64 144
  %42 = getelementptr inbounds i8, ptr %2, i64 120
  %43 = getelementptr inbounds i8, ptr %2, i64 408
  %44 = getelementptr inbounds i8, ptr %2, i64 128
  %45 = getelementptr inbounds i8, ptr %1, i64 140
  %46 = getelementptr inbounds i8, ptr %2, i64 64
  %.not315 = icmp eq i32 %17, %28
  %.not315.fr = freeze i1 %.not315
  %47 = zext i32 %17 to i64
  %48 = zext i32 %28 to i64
  %49 = sub nsw i64 %47, %48
  br i1 %.not351, label %.lr.ph339.split, label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph339, %68
  %.1294338.us = phi i32 [ %69, %68 ], [ 0, %.lr.ph339 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #4
  store i32 0, ptr %12, align 4, !tbaa !16
  %50 = mul i32 %.1294338.us, %6
  %51 = add i32 %50, %5
  br label %70

52:                                               ; preds = %._crit_edge.us
  %53 = load i16, ptr %36, align 1, !tbaa !17
  %.not314.us = icmp eq i16 %53, 37
  br i1 %.not314.us, label %64, label %54

54:                                               ; preds = %52
  %55 = load i32, ptr %40, align 4, !tbaa !18
  %56 = load i32, ptr %45, align 4, !tbaa !20
  %57 = load i32, ptr %46, align 4, !tbaa !21
  %58 = zext i32 %57 to i64
  %59 = load i32, ptr %12, align 4, !tbaa !16
  %60 = zext i32 %59 to i64
  %61 = shl nuw nsw i64 %60, 3
  %62 = sub nsw i64 %58, %61
  %63 = sdiv i64 %62, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %55, i32 noundef %56, i32 noundef %55, i64 noundef %63) #4
  br label %68

64:                                               ; preds = %52, %._crit_edge.us
  br i1 %.not315.fr, label %68, label %65

65:                                               ; preds = %64
  %66 = load i32, ptr %40, align 4, !tbaa !18
  %67 = load i32, ptr %45, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %66, i32 noundef %67, i32 noundef %66, i64 noundef %49) #4
  br label %68

68:                                               ; preds = %65, %64, %54
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  %69 = add nuw i32 %.1294338.us, 1
  %exitcond358.not = icmp eq i32 %69, %7
  br i1 %exitcond358.not, label %.loopexit, label %.lr.ph.us, !llvm.loop !22

70:                                               ; preds = %.lr.ph.us, %125
  %.1336.us = phi i32 [ 0, %.lr.ph.us ], [ %126, %125 ]
  %71 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %72 = icmp eq i32 %71, 1
  %73 = icmp eq i32 %.1336.us, %32
  %74 = select i1 %73, i32 %8, i32 0
  %spec.select333.us = select i1 %73, i32 %33, i32 %4
  %75 = select i1 %72, i32 %74, i32 %spec.select333.us
  %76 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %77 = icmp eq i32 %76, 1
  %spec.select334.us = select i1 %73, i8 %34, i8 2
  %narrow = and i1 %73, %.not318
  %spec.select348 = zext i1 %narrow to i8
  %78 = select i1 %77, i8 %spec.select348, i8 %spec.select334.us
  %79 = add i32 %51, %.1336.us
  %80 = load i16, ptr %35, align 1, !tbaa !24
  %81 = and i16 %80, 1
  %.not319.us = icmp eq i16 %81, 0
  %.pre = load i16, ptr %36, align 1, !tbaa !17
  %82 = icmp eq i16 %.pre, 37
  br i1 %.not319.us, label %93, label %83

83:                                               ; preds = %70
  br i1 %82, label %.thread, label %84

84:                                               ; preds = %83
  %85 = load i32, ptr %37, align 4, !tbaa !25
  %86 = trunc i32 %85 to i8
  %87 = load i32, ptr %38, align 4, !tbaa !26
  %88 = trunc i32 %87 to i8
  %89 = load i32, ptr %39, align 4, !tbaa !27
  %90 = trunc i32 %89 to i8
  %91 = load i32, ptr %40, align 4, !tbaa !18
  %92 = trunc i32 %91 to i8
  call void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_asimd(ptr noundef %0, i32 noundef %.1336.us, i32 noundef %6, i8 noundef zeroext %86, i8 noundef zeroext %88, i8 noundef zeroext %90, i8 noundef zeroext %92, ptr noundef nonnull %12)
  br label %thread-pre-split

93:                                               ; preds = %70
  br i1 %82, label %.thread, label %114

.thread:                                          ; preds = %83, %93
  %94 = load i32, ptr %40, align 4, !tbaa !18
  %95 = load i32, ptr %41, align 4, !tbaa !28
  %96 = load i32, ptr %39, align 4, !tbaa !27
  %97 = load i32, ptr %15, align 4, !tbaa !11
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %94, i32 noundef %95, i32 noundef %96, i32 noundef %97, i32 noundef %75, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %78, i8 noundef zeroext 0) #4
  %98 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %99 = icmp eq i32 %98, 1
  br i1 %99, label %100, label %103

100:                                              ; preds = %.thread
  %101 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %102 = icmp eq i32 %101, 2
  br i1 %102, label %109, label %103

103:                                              ; preds = %100, %.thread
  %104 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 3) #4
  %105 = icmp eq i32 %104, 1
  br i1 %105, label %106, label %111

106:                                              ; preds = %103
  %107 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %108 = icmp eq i32 %107, 2
  br i1 %108, label %109, label %111

109:                                              ; preds = %106, %100
  %110 = load i32, ptr %39, align 4, !tbaa !27
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %110, i32 noundef 0) #4
  br label %111

111:                                              ; preds = %109, %106, %103
  %112 = load i32, ptr %39, align 4, !tbaa !27
  %113 = load i32, ptr %42, align 4, !tbaa !29
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245417994, i32 noundef %112, i32 noundef 127, i8 noundef zeroext 0, i32 noundef %113, i32 noundef 5) #4
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %84, %111
  %.pr = load i16, ptr %36, align 1, !tbaa !17
  br label %114

114:                                              ; preds = %thread-pre-split, %93
  %115 = phi i16 [ %.pr, %thread-pre-split ], [ %.pre, %93 ]
  switch i16 %115, label %125 [
    i16 35, label %120
    i16 6, label %.sink.split
    i16 37, label %116
  ]

116:                                              ; preds = %114
  %117 = load i32, ptr %39, align 4, !tbaa !27
  %118 = load i32, ptr %43, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 237032459, i32 noundef %117, i32 noundef %118, i8 noundef zeroext 0, i32 noundef %117, i32 noundef 5) #4
  %119 = load i32, ptr %39, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 773905419, i32 noundef %119, i32 noundef %79, i8 noundef zeroext 0, i32 noundef %119, i32 noundef 5) #4
  br label %.sink.split

120:                                              ; preds = %114
  %121 = load i32, ptr %43, align 4, !tbaa !30
  %122 = load i32, ptr %42, align 4, !tbaa !29
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 773905419, i32 noundef %79, i32 noundef %121, i8 noundef zeroext 0, i32 noundef %122, i32 noundef 5) #4
  br label %.sink.split

.sink.split:                                      ; preds = %114, %116, %120
  %.sink372 = phi ptr [ %42, %120 ], [ %39, %116 ], [ %44, %114 ]
  %.sink371 = phi ptr [ %39, %120 ], [ %42, %116 ], [ %39, %114 ]
  %123 = load i32, ptr %.sink372, align 4, !tbaa !16
  %124 = load i32, ptr %.sink371, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 786439187, i32 noundef %123, i32 noundef %124, i8 noundef zeroext 0, i32 noundef %79, i32 noundef 1) #4
  br label %125

125:                                              ; preds = %.sink.split, %114
  %126 = add nuw i32 %.1336.us, 1
  %exitcond.not = icmp eq i32 %126, %6
  br i1 %exitcond.not, label %._crit_edge.us, label %70, !llvm.loop !31

._crit_edge.us:                                   ; preds = %125
  %127 = load i16, ptr %35, align 1, !tbaa !24
  %128 = and i16 %127, 1
  %.not.us = icmp eq i16 %128, 0
  br i1 %.not.us, label %64, label %52

.lr.ph339.split:                                  ; preds = %.lr.ph339
  br i1 %.not315.fr, label %.lr.ph339.split.split.us, label %.lr.ph339.split.split

.lr.ph339.split.split.us:                         ; preds = %.lr.ph339.split, %139
  %.1294338.us340 = phi i32 [ %140, %139 ], [ 0, %.lr.ph339.split ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #4
  %129 = load i16, ptr %35, align 1, !tbaa !24
  %130 = and i16 %129, 1
  %.not.us341 = icmp eq i16 %130, 0
  br i1 %.not.us341, label %139, label %131

131:                                              ; preds = %.lr.ph339.split.split.us
  %132 = load i16, ptr %36, align 1, !tbaa !17
  %.not314.us342 = icmp eq i16 %132, 37
  br i1 %.not314.us342, label %139, label %133

133:                                              ; preds = %131
  %134 = load i32, ptr %40, align 4, !tbaa !18
  %135 = load i32, ptr %45, align 4, !tbaa !20
  %136 = load i32, ptr %46, align 4, !tbaa !21
  %137 = lshr i32 %136, 3
  %138 = zext nneg i32 %137 to i64
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %134, i32 noundef %135, i32 noundef %134, i64 noundef %138) #4
  br label %139

139:                                              ; preds = %.lr.ph339.split.split.us, %131, %133
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  %140 = add nuw i32 %.1294338.us340, 1
  %exitcond360.not = icmp eq i32 %140, %7
  br i1 %exitcond360.not, label %.loopexit, label %.lr.ph339.split.split.us, !llvm.loop !22

141:                                              ; preds = %27
  %142 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %143 = icmp eq i32 %142, 0
  br i1 %143, label %184, label %144

144:                                              ; preds = %141
  %145 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %146 = icmp eq i32 %145, 1
  br i1 %146, label %184, label %147

147:                                              ; preds = %144
  %148 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %149 = icmp eq i32 %148, 2
  br i1 %149, label %184, label %150

150:                                              ; preds = %147
  %151 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %152 = icmp eq i32 %151, 3
  br i1 %152, label %184, label %153

153:                                              ; preds = %150
  %154 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %155 = icmp eq i32 %154, 4
  br i1 %155, label %184, label %156

156:                                              ; preds = %153
  %157 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %158 = icmp eq i32 %157, 5
  br i1 %158, label %184, label %159

159:                                              ; preds = %156
  %160 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %161 = icmp eq i32 %160, 6
  br i1 %161, label %184, label %162

162:                                              ; preds = %159
  %163 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %164 = icmp eq i32 %163, 7
  br i1 %164, label %184, label %165

165:                                              ; preds = %162
  %166 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %167 = icmp eq i32 %166, 8
  br i1 %167, label %184, label %168

168:                                              ; preds = %165
  %169 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %170 = icmp eq i32 %169, 9
  br i1 %170, label %184, label %171

171:                                              ; preds = %168
  %172 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %173 = icmp eq i32 %172, 10
  br i1 %173, label %184, label %174

174:                                              ; preds = %171
  %175 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %176 = icmp eq i32 %175, 11
  br i1 %176, label %184, label %177

177:                                              ; preds = %174
  %178 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %179 = icmp eq i32 %178, 12
  br i1 %179, label %184, label %180

180:                                              ; preds = %177
  %181 = tail call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %182 = icmp eq i32 %181, 13
  br i1 %182, label %184, label %183

183:                                              ; preds = %180
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str, i32 noundef 1640, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_compute_unary_aarch64_2d_reg_block_relu_inv) #5
  unreachable

184:                                              ; preds = %144, %150, %156, %162, %168, %174, %180, %177, %171, %165, %159, %153, %147, %141
  %185 = phi i8 [ 8, %141 ], [ 4, %144 ], [ 2, %147 ], [ 2, %150 ], [ 1, %153 ], [ 1, %156 ], [ 8, %159 ], [ 8, %162 ], [ 4, %165 ], [ 4, %168 ], [ 2, %171 ], [ 2, %174 ], [ 1, %177 ], [ 1, %180 ]
  %186 = tail call i32 @libxsmm_generator_aarch64_get_sve_type(i8 noundef zeroext %185) #4
  %.not352 = icmp eq i32 %7, 0
  br i1 %.not352, label %.loopexit, label %.lr.ph347

.lr.ph347:                                        ; preds = %184
  %.not353 = icmp eq i32 %6, 0
  %187 = add i32 %6, -1
  %188 = select i1 %18, i32 %4, i32 %8
  %189 = select i1 %18, i8 2, i8 1
  %.not328 = icmp ne i32 %8, 0
  %190 = getelementptr inbounds i8, ptr %3, i64 27
  %191 = getelementptr inbounds i8, ptr %3, i64 29
  %192 = getelementptr inbounds i8, ptr %2, i64 116
  %193 = getelementptr inbounds i8, ptr %1, i64 36
  %194 = getelementptr inbounds i8, ptr %1, i64 140
  %195 = getelementptr inbounds i8, ptr %1, i64 144
  %196 = getelementptr inbounds i8, ptr %2, i64 408
  %197 = getelementptr inbounds i8, ptr %2, i64 128
  %198 = getelementptr inbounds i8, ptr %2, i64 120
  %199 = getelementptr inbounds i8, ptr %2, i64 64
  %.not325 = icmp eq i32 %17, %28
  %200 = zext i32 %17 to i64
  %201 = zext i32 %28 to i64
  %202 = sub nsw i64 %200, %201
  br label %203

203:                                              ; preds = %.lr.ph347, %278
  %.0293345 = phi i32 [ 0, %.lr.ph347 ], [ %279, %278 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  store i32 0, ptr %11, align 4, !tbaa !16
  br i1 %.not353, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %203
  %204 = mul i32 %.0293345, %6
  %205 = add i32 %204, %5
  br label %206

206:                                              ; preds = %.lr.ph, %258
  %.0343 = phi i32 [ 0, %.lr.ph ], [ %259, %258 ]
  %207 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %208 = icmp eq i32 %207, 1
  %209 = icmp eq i32 %.0343, %187
  %210 = select i1 %209, i32 %8, i32 0
  %spec.select331 = select i1 %209, i32 %188, i32 %4
  %211 = select i1 %208, i32 %210, i32 %spec.select331
  %212 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %213 = icmp eq i32 %212, 1
  %spec.select332 = select i1 %209, i8 %189, i8 2
  %narrow354 = and i1 %209, %.not328
  %spec.select349 = zext i1 %narrow354 to i8
  %214 = select i1 %213, i8 %spec.select349, i8 %spec.select332
  %215 = add i32 %205, %.0343
  %216 = load i16, ptr %190, align 1, !tbaa !24
  %217 = and i16 %216, 1
  %.not329 = icmp eq i16 %217, 0
  %.pre363 = load i16, ptr %191, align 1, !tbaa !17
  %218 = icmp eq i16 %.pre363, 37
  br i1 %.not329, label %228, label %219

219:                                              ; preds = %206
  br i1 %218, label %.thread364, label %220

220:                                              ; preds = %219
  %221 = load i32, ptr %3, align 1, !tbaa !32
  %222 = load i32, ptr %192, align 4, !tbaa !27
  %223 = trunc i32 %222 to i8
  %224 = load i32, ptr %193, align 4, !tbaa !18
  %225 = trunc i32 %224 to i8
  %226 = load i32, ptr %194, align 4, !tbaa !20
  %227 = trunc i32 %226 to i8
  call void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_sve(ptr noundef %0, i32 noundef %221, i32 noundef %.0343, i32 noundef %6, i8 noundef zeroext %223, i8 noundef zeroext %225, i8 noundef zeroext 7, i8 noundef zeroext %227, i8 noundef zeroext 6, ptr noundef nonnull %11)
  br label %thread-pre-split365

228:                                              ; preds = %206
  br i1 %218, label %.thread364, label %248

.thread364:                                       ; preds = %219, %228
  %229 = load i32, ptr %193, align 4, !tbaa !18
  %230 = load i32, ptr %195, align 4, !tbaa !28
  %231 = load i32, ptr %192, align 4, !tbaa !27
  %232 = load i32, ptr %15, align 4, !tbaa !11
  call void @libxsmm_generator_vloadstore_masked_vreg_aarch64(ptr noundef %0, i32 noundef %229, i32 noundef %230, i32 noundef %231, i32 noundef %232, i32 noundef %211, i32 noundef 1, i32 noundef 0, i8 noundef zeroext %214, i8 noundef zeroext 1) #4
  %233 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 4) #4
  %234 = icmp eq i32 %233, 1
  br i1 %234, label %235, label %238

235:                                              ; preds = %.thread364
  %236 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %237 = icmp eq i32 %236, 2
  br i1 %237, label %244, label %238

238:                                              ; preds = %235, %.thread364
  %239 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 3) #4
  %240 = icmp eq i32 %239, 1
  br i1 %240, label %241, label %246

241:                                              ; preds = %238
  %242 = call i32 @libxsmm_meltw_getenum_precision(ptr noundef nonnull %3, i32 noundef 0) #4
  %243 = icmp eq i32 %242, 2
  br i1 %243, label %244, label %246

244:                                              ; preds = %241, %235
  %245 = load i32, ptr %192, align 4, !tbaa !27
  call void @libxsmm_generator_vcvt_bf16f32_aarch64(ptr noundef %0, i32 noundef %245, i32 noundef 0) #4
  br label %246

246:                                              ; preds = %244, %241, %238
  %247 = load i32, ptr %192, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1695555730, i32 noundef %247, i32 noundef 127, i8 noundef zeroext 0, i32 noundef 7, i32 noundef %9, i32 noundef %186) #4
  br label %thread-pre-split365

thread-pre-split365:                              ; preds = %220, %246
  %.pr366 = load i16, ptr %191, align 1, !tbaa !17
  br label %248

248:                                              ; preds = %thread-pre-split365, %228
  %249 = phi i16 [ %.pr366, %thread-pre-split365 ], [ %.pre363, %228 ]
  switch i16 %249, label %258 [
    i16 35, label %250
    i16 6, label %.sink.split373
    i16 37, label %253
  ]

250:                                              ; preds = %248
  %251 = load i32, ptr %196, align 4, !tbaa !30
  %252 = load i32, ptr %198, align 4, !tbaa !29
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694500867, i32 noundef %215, i32 noundef %251, i8 noundef zeroext 0, i32 noundef %252, i32 noundef %9, i32 noundef %186) #4
  br label %.sink.split373

253:                                              ; preds = %248
  %254 = load i32, ptr %192, align 4, !tbaa !27
  %255 = load i32, ptr %196, align 4, !tbaa !30
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694498819, i32 noundef %254, i32 noundef %255, i8 noundef zeroext 0, i32 noundef %254, i32 noundef %9, i32 noundef %186) #4
  %256 = load i32, ptr %192, align 4, !tbaa !27
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 1694500867, i32 noundef %256, i32 noundef %215, i8 noundef zeroext 0, i32 noundef %256, i32 noundef %9, i32 noundef %186) #4
  br label %.sink.split373

.sink.split373:                                   ; preds = %248, %250, %253
  %.sink374 = phi ptr [ %192, %253 ], [ %198, %250 ], [ %197, %248 ]
  %257 = load i32, ptr %.sink374, align 4, !tbaa !16
  call void @libxsmm_aarch64_instruction_sve_compute(ptr noundef %0, i32 noundef 86032515, i32 noundef %215, i32 noundef %257, i8 noundef zeroext 0, i32 noundef %215, i32 noundef 7, i32 noundef %186) #4
  br label %258

258:                                              ; preds = %.sink.split373, %248
  %259 = add nuw i32 %.0343, 1
  %exitcond361.not = icmp eq i32 %259, %6
  br i1 %exitcond361.not, label %._crit_edge, label %206, !llvm.loop !33

._crit_edge:                                      ; preds = %258, %203
  %260 = load i16, ptr %190, align 1, !tbaa !24
  %261 = and i16 %260, 1
  %.not323 = icmp eq i16 %261, 0
  br i1 %.not323, label %274, label %262

262:                                              ; preds = %._crit_edge
  %263 = load i16, ptr %191, align 1, !tbaa !17
  %.not324 = icmp eq i16 %263, 37
  br i1 %.not324, label %274, label %264

264:                                              ; preds = %262
  %265 = load i32, ptr %193, align 4, !tbaa !18
  %266 = load i32, ptr %194, align 4, !tbaa !20
  %267 = load i32, ptr %199, align 4, !tbaa !21
  %268 = zext i32 %267 to i64
  %269 = load i32, ptr %11, align 4, !tbaa !16
  %270 = zext i32 %269 to i64
  %271 = shl nuw nsw i64 %270, 3
  %272 = sub nsw i64 %268, %271
  %273 = sdiv i64 %272, 8
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %265, i32 noundef %266, i32 noundef %265, i64 noundef %273) #4
  br label %278

274:                                              ; preds = %262, %._crit_edge
  br i1 %.not325, label %278, label %275

275:                                              ; preds = %274
  %276 = load i32, ptr %193, align 4, !tbaa !18
  %277 = load i32, ptr %194, align 4, !tbaa !20
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %276, i32 noundef %277, i32 noundef %276, i64 noundef %202) #4
  br label %278

278:                                              ; preds = %274, %275, %264
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  %279 = add nuw i32 %.0293345, 1
  %exitcond362.not = icmp eq i32 %279, %7
  br i1 %exitcond362.not, label %.loopexit, label %203, !llvm.loop !34

.lr.ph339.split.split:                            ; preds = %.lr.ph339.split, %293
  %.1294338 = phi i32 [ %294, %293 ], [ 0, %.lr.ph339.split ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #4
  %280 = load i16, ptr %35, align 1, !tbaa !24
  %281 = and i16 %280, 1
  %.not = icmp eq i16 %281, 0
  br i1 %.not, label %290, label %282

282:                                              ; preds = %.lr.ph339.split.split
  %283 = load i16, ptr %36, align 1, !tbaa !17
  %.not314 = icmp eq i16 %283, 37
  br i1 %.not314, label %290, label %284

284:                                              ; preds = %282
  %285 = load i32, ptr %40, align 4, !tbaa !18
  %286 = load i32, ptr %45, align 4, !tbaa !20
  %287 = load i32, ptr %46, align 4, !tbaa !21
  %288 = lshr i32 %287, 3
  %289 = zext nneg i32 %288 to i64
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %285, i32 noundef %286, i32 noundef %285, i64 noundef %289) #4
  br label %293

290:                                              ; preds = %282, %.lr.ph339.split.split
  %291 = load i32, ptr %40, align 4, !tbaa !18
  %292 = load i32, ptr %45, align 4, !tbaa !20
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %291, i32 noundef %292, i32 noundef %291, i64 noundef %49) #4
  br label %293

293:                                              ; preds = %290, %284
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #4
  %294 = add nuw i32 %.1294338, 1
  %exitcond359.not = icmp eq i32 %294, %7
  br i1 %exitcond359.not, label %.loopexit, label %.lr.ph339.split.split, !llvm.loop !22

.loopexit:                                        ; preds = %68, %293, %139, %278, %.preheader, %184
  %295 = getelementptr inbounds i8, ptr %3, i64 27
  %296 = load i16, ptr %295, align 1, !tbaa !24
  %297 = and i16 %296, 1
  %.not321 = icmp eq i16 %297, 0
  br i1 %.not321, label %312, label %298

298:                                              ; preds = %.loopexit
  %299 = getelementptr inbounds i8, ptr %3, i64 29
  %300 = load i16, ptr %299, align 1, !tbaa !17
  %.not322 = icmp eq i16 %300, 37
  br i1 %.not322, label %312, label %301

301:                                              ; preds = %298
  %302 = getelementptr inbounds i8, ptr %1, i64 36
  %303 = load i32, ptr %302, align 4, !tbaa !18
  %304 = getelementptr inbounds i8, ptr %1, i64 140
  %305 = load i32, ptr %304, align 4, !tbaa !20
  %306 = zext i32 %7 to i64
  %307 = getelementptr inbounds i8, ptr %2, i64 64
  %308 = load i32, ptr %307, align 4, !tbaa !21
  %309 = lshr i32 %308, 3
  %310 = zext nneg i32 %309 to i64
  %311 = mul nuw nsw i64 %310, %306
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4097, i32 noundef %303, i32 noundef %305, i32 noundef %303, i64 noundef %311) #4
  br label %320

312:                                              ; preds = %298, %.loopexit
  %313 = getelementptr inbounds i8, ptr %1, i64 36
  %314 = load i32, ptr %313, align 4, !tbaa !18
  %315 = getelementptr inbounds i8, ptr %1, i64 140
  %316 = load i32, ptr %315, align 4, !tbaa !20
  %317 = zext i32 %17 to i64
  %318 = zext i32 %7 to i64
  %319 = mul nuw nsw i64 %317, %318
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4097, i32 noundef %314, i32 noundef %316, i32 noundef %314, i64 noundef %319) #4
  br label %320

320:                                              ; preds = %312, %301
  ret void
}

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_sve(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_unary_binary_aarch64_load_bitmask_2bytemult_asimd(ptr noundef, i32 noundef, i32 noundef, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, i8 noundef zeroext, ptr noundef) local_unnamed_addr #3

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind 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 #4 = { nounwind }
attributes #5 = { noreturn nounwind }

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass