; LLVM IR from libxsmm/libxsmm :: src (generator_matequation_scratch_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_descriptor_blob = type { [96 x i8] }
%struct.libxsmm_matequation_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.libxsmm_mateltwise_gp_reg_mapping_struct, %struct.libxsmm_gp_reg_mapping_struct }
%struct.libxsmm_mateltwise_gp_reg_mapping_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_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 }
%struct.libxsmm_matrix_eqn = type { ptr, ptr, i32, i32, i32, i32 }
%struct.libxsmm_meqn_elem = type { ptr, ptr, ptr, ptr, i32, %union.libxsmm_meqn_info, i32, i32, %struct.libxsmm_meqn_tmp_info, i32, i32, i32, %union.libxsmm_meqn_fusion_info }
%union.libxsmm_meqn_info = type { %struct.libxsmm_meqn_arg }
%struct.libxsmm_meqn_arg = type { i32, i32, i32, i32, i32, i32, i32, %struct.libxsmm_matrix_arg_attributes }
%struct.libxsmm_matrix_arg_attributes = type { i32, i32, i32, i32 }
%struct.libxsmm_meqn_tmp_info = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%union.libxsmm_meqn_fusion_info = type { %struct.libxsmm_meqn_xgemm_fusion_info }
%struct.libxsmm_meqn_xgemm_fusion_info = type { i32, i32, i32, i32, i32 }
%struct.libxsmm_meqn_descriptor = type <{ i32, i32, i32, i8, i32 }>
%struct.libxsmm_meqn_ternary_op = type { i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_matequation_kernel_config_struct = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [32 x i32], i32, i32, i32, i32, ptr, ptr, i32, i32, i32, [64 x i32], [64 x i32], %struct.libxsmm_mateltwise_kernel_config_struct, %struct.libxsmm_micro_kernel_config }
%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_micro_kernel_config = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], [4 x i32], i32, [2 x %struct.libxsmm_blocking_info_t], %struct.libxsmm_tile_config, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, i32, i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_blocking_info_t = type { i32, [4 x i32], i32, i32 }
%struct.libxsmm_tile_config = type { i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8, i16, i8 }
%struct.libxsmm_meqn_binary_op = type { i32, i32, i32, i32, i32, i32 }
%struct.libxsmm_meqn_unary_op = type { i32, i32, i32, i32 }
%struct.libxsmm_meltw_descriptor = type <{ i32, i32, i32, i32, i32, i32, i8, i8, i8, i16, i16, i8 }>

@stderr = external global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [93 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel = external hidden unnamed_addr constant [254 x i8], align 1
@__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel = external hidden unnamed_addr constant [63 x i8], align 1
@libxsmm_ninit = external global i32, align 4
@libxsmm_verbosity = external global i32, align 4

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #0

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

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

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

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %struct.libxsmm_descriptor_blob, align 1
  %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 ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i16, align 2
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i16, align 2
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 96, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  store ptr null, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 58, ptr %17, align 4, !tbaa !9
  %30 = load i32, ptr %17, align 4, !tbaa !9
  %31 = load ptr, ptr %9, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %31, i32 0, i32 12
  store i32 %30, ptr %32, align 4, !tbaa !11
  %33 = load ptr, ptr %9, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %33, i32 0, i32 15
  store i32 59, ptr %34, align 4, !tbaa !15
  %35 = load ptr, ptr %12, align 8, !tbaa !5
  %36 = icmp eq ptr %35, null
  br i1 %36, label %37, label %40

37:                                               ; preds = %6
  %38 = load ptr, ptr @stderr, align 8, !tbaa !5
  %39 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %38, ptr noundef @.str.4) #5
  store i32 1, ptr %18, align 4
  br label %1551

40:                                               ; preds = %6
  %41 = load ptr, ptr %12, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %41, i32 0, i32 0
  %43 = load ptr, ptr %42, align 8, !tbaa !16
  %44 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %43, i32 0, i32 7
  %45 = load i32, ptr %44, align 4, !tbaa !16
  store i32 %45, ptr %16, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %40
  %47 = load ptr, ptr %9, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %47, i32 0, i32 18
  %49 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %48, i32 0, i32 0
  store i32 60, ptr %49, align 4, !tbaa !17
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %51, i32 0, i32 18
  %53 = getelementptr inbounds %struct.libxsmm_mateltwise_gp_reg_mapping_struct, ptr %52, i32 0, i32 0
  %54 = load i32, ptr %53, align 4, !tbaa !17
  call void @libxsmm_generator_meqn_getaddr_stack_var_aarch64(ptr noundef %50, i32 noundef 4, i32 noundef %54)
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %55

55:                                               ; preds = %1547, %46
  %56 = load i32, ptr %15, align 4, !tbaa !9
  %57 = load i32, ptr %16, align 4, !tbaa !9
  %58 = icmp ule i32 %56, %57
  br i1 %58, label %59, label %1550

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %60 = load ptr, ptr %12, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %60, i32 0, i32 0
  %62 = load ptr, ptr %61, align 8, !tbaa !16
  %63 = load i32, ptr %15, align 4, !tbaa !9
  %64 = call ptr @libxsmm_generator_matequation_find_op_at_timestamp(ptr noundef %62, i32 noundef %63)
  store ptr %64, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 1, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 1, ptr %21, align 4, !tbaa !9
  %65 = load ptr, ptr %19, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %66, align 8, !tbaa !16
  %68 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %67, i32 0, i32 8
  %69 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %68, i32 0, i32 4
  %70 = load i32, ptr %69, align 8, !tbaa !16
  store i32 %70, ptr %21, align 4, !tbaa !9
  %71 = load i32, ptr %15, align 4, !tbaa !9
  %72 = load i32, ptr %16, align 4, !tbaa !9
  %73 = icmp eq i32 %71, %72
  br i1 %73, label %74, label %257

74:                                               ; preds = %59
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %75, i32 0, i32 3
  %77 = load i8, ptr %76, align 1, !tbaa !18
  %78 = zext i8 %77 to i32
  %79 = ashr i32 %78, 4
  %80 = icmp eq i32 0, %79
  br i1 %80, label %81, label %243

81:                                               ; preds = %74
  %82 = load ptr, ptr %8, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %82, i32 0, i32 3
  %84 = load i8, ptr %83, align 1, !tbaa !18
  %85 = zext i8 %84 to i32
  %86 = and i32 %85, 15
  %87 = icmp eq i32 0, %86
  br i1 %87, label %88, label %89

88:                                               ; preds = %81
  br label %241

89:                                               ; preds = %81
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %90, i32 0, i32 3
  %92 = load i8, ptr %91, align 1, !tbaa !18
  %93 = zext i8 %92 to i32
  %94 = and i32 %93, 15
  %95 = icmp eq i32 1, %94
  br i1 %95, label %96, label %97

96:                                               ; preds = %89
  br label %239

97:                                               ; preds = %89
  %98 = load ptr, ptr %8, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %98, i32 0, i32 3
  %100 = load i8, ptr %99, align 1, !tbaa !18
  %101 = zext i8 %100 to i32
  %102 = and i32 %101, 15
  %103 = icmp eq i32 2, %102
  br i1 %103, label %104, label %105

104:                                              ; preds = %97
  br label %237

105:                                              ; preds = %97
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %106, i32 0, i32 3
  %108 = load i8, ptr %107, align 1, !tbaa !18
  %109 = zext i8 %108 to i32
  %110 = and i32 %109, 15
  %111 = icmp eq i32 3, %110
  br i1 %111, label %112, label %113

112:                                              ; preds = %105
  br label %235

113:                                              ; preds = %105
  %114 = load ptr, ptr %8, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %114, i32 0, i32 3
  %116 = load i8, ptr %115, align 1, !tbaa !18
  %117 = zext i8 %116 to i32
  %118 = and i32 %117, 15
  %119 = icmp eq i32 4, %118
  br i1 %119, label %120, label %121

120:                                              ; preds = %113
  br label %233

121:                                              ; preds = %113
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %122, i32 0, i32 3
  %124 = load i8, ptr %123, align 1, !tbaa !18
  %125 = zext i8 %124 to i32
  %126 = and i32 %125, 15
  %127 = icmp eq i32 5, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %121
  br label %231

129:                                              ; preds = %121
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %130, i32 0, i32 3
  %132 = load i8, ptr %131, align 1, !tbaa !18
  %133 = zext i8 %132 to i32
  %134 = and i32 %133, 15
  %135 = icmp eq i32 6, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %129
  br label %229

137:                                              ; preds = %129
  %138 = load ptr, ptr %8, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %138, i32 0, i32 3
  %140 = load i8, ptr %139, align 1, !tbaa !18
  %141 = zext i8 %140 to i32
  %142 = and i32 %141, 15
  %143 = icmp eq i32 7, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %137
  br label %227

145:                                              ; preds = %137
  %146 = load ptr, ptr %8, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %146, i32 0, i32 3
  %148 = load i8, ptr %147, align 1, !tbaa !18
  %149 = zext i8 %148 to i32
  %150 = and i32 %149, 15
  %151 = icmp eq i32 8, %150
  br i1 %151, label %152, label %153

152:                                              ; preds = %145
  br label %225

153:                                              ; preds = %145
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %154, i32 0, i32 3
  %156 = load i8, ptr %155, align 1, !tbaa !18
  %157 = zext i8 %156 to i32
  %158 = and i32 %157, 15
  %159 = icmp eq i32 9, %158
  br i1 %159, label %160, label %161

160:                                              ; preds = %153
  br label %223

161:                                              ; preds = %153
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %162, i32 0, i32 3
  %164 = load i8, ptr %163, align 1, !tbaa !18
  %165 = zext i8 %164 to i32
  %166 = and i32 %165, 15
  %167 = icmp eq i32 10, %166
  br i1 %167, label %168, label %169

168:                                              ; preds = %161
  br label %221

169:                                              ; preds = %161
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %170, i32 0, i32 3
  %172 = load i8, ptr %171, align 1, !tbaa !18
  %173 = zext i8 %172 to i32
  %174 = and i32 %173, 15
  %175 = icmp eq i32 11, %174
  br i1 %175, label %176, label %177

176:                                              ; preds = %169
  br label %219

177:                                              ; preds = %169
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %178, i32 0, i32 3
  %180 = load i8, ptr %179, align 1, !tbaa !18
  %181 = zext i8 %180 to i32
  %182 = and i32 %181, 15
  %183 = icmp eq i32 12, %182
  br i1 %183, label %184, label %185

184:                                              ; preds = %177
  br label %217

185:                                              ; preds = %177
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %186, i32 0, i32 3
  %188 = load i8, ptr %187, align 1, !tbaa !18
  %189 = zext i8 %188 to i32
  %190 = and i32 %189, 15
  %191 = icmp eq i32 13, %190
  br i1 %191, label %192, label %193

192:                                              ; preds = %185
  br label %215

193:                                              ; preds = %185
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %194, i32 0, i32 3
  %196 = load i8, ptr %195, align 1, !tbaa !18
  %197 = zext i8 %196 to i32
  %198 = and i32 %197, 15
  %199 = icmp eq i32 14, %198
  br i1 %199, label %200, label %201

200:                                              ; preds = %193
  br label %213

201:                                              ; preds = %193
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %202, i32 0, i32 3
  %204 = load i8, ptr %203, align 1, !tbaa !18
  %205 = zext i8 %204 to i32
  %206 = and i32 %205, 15
  %207 = icmp eq i32 15, %206
  br i1 %207, label %208, label %209

208:                                              ; preds = %201
  br label %211

209:                                              ; preds = %201
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.6, i32 noundef 178, ptr noundef @__PRETTY_FUNCTION__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel) #6
  unreachable

210:                                              ; No predecessors!
  br label %211

211:                                              ; preds = %210, %208
  %212 = phi i32 [ 15, %208 ], [ 0, %210 ]
  br label %213

213:                                              ; preds = %211, %200
  %214 = phi i32 [ 14, %200 ], [ %212, %211 ]
  br label %215

215:                                              ; preds = %213, %192
  %216 = phi i32 [ 12, %192 ], [ %214, %213 ]
  br label %217

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

219:                                              ; preds = %217, %176
  %220 = phi i32 [ 10, %176 ], [ %218, %217 ]
  br label %221

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

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

225:                                              ; preds = %223, %152
  %226 = phi i32 [ 8, %152 ], [ %224, %223 ]
  br label %227

227:                                              ; preds = %225, %144
  %228 = phi i32 [ 6, %144 ], [ %226, %225 ]
  br label %229

229:                                              ; preds = %227, %136
  %230 = phi i32 [ 6, %136 ], [ %228, %227 ]
  br label %231

231:                                              ; preds = %229, %128
  %232 = phi i32 [ 5, %128 ], [ %230, %229 ]
  br label %233

233:                                              ; preds = %231, %120
  %234 = phi i32 [ 4, %120 ], [ %232, %231 ]
  br label %235

235:                                              ; preds = %233, %112
  %236 = phi i32 [ 3, %112 ], [ %234, %233 ]
  br label %237

237:                                              ; preds = %235, %104
  %238 = phi i32 [ 2, %104 ], [ %236, %235 ]
  br label %239

239:                                              ; preds = %237, %96
  %240 = phi i32 [ 1, %96 ], [ %238, %237 ]
  br label %241

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

243:                                              ; preds = %74
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %244, i32 0, i32 3
  %246 = load i8, ptr %245, align 1, !tbaa !18
  %247 = zext i8 %246 to i32
  %248 = ashr i32 %247, 4
  br label %249

249:                                              ; preds = %243, %241
  %250 = phi i32 [ %242, %241 ], [ %248, %243 ]
  store i32 %250, ptr %20, align 4, !tbaa !9
  %251 = load ptr, ptr %8, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.libxsmm_meqn_descriptor, ptr %251, i32 0, i32 2
  %253 = load i32, ptr %252, align 1, !tbaa !20
  %254 = load ptr, ptr %19, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %254, i32 0, i32 8
  %256 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %255, i32 0, i32 3
  store i32 %253, ptr %256, align 4, !tbaa !16
  br label %262

257:                                              ; preds = %59
  %258 = load ptr, ptr %19, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %258, i32 0, i32 8
  %260 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %259, i32 0, i32 4
  %261 = load i32, ptr %260, align 8, !tbaa !16
  store i32 %261, ptr %20, align 4, !tbaa !9
  br label %262

262:                                              ; preds = %257, %249
  %263 = load ptr, ptr %19, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %263, i32 0, i32 4
  %265 = load i32, ptr %264, align 8, !tbaa !16
  %266 = icmp eq i32 %265, 4
  br i1 %266, label %267, label %821

267:                                              ; preds = %262
  %268 = load ptr, ptr %19, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %268, i32 0, i32 5
  %270 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %269, i32 0, i32 0
  %271 = load i32, ptr %270, align 4, !tbaa !16
  %272 = icmp eq i32 %271, 4
  br i1 %272, label %273, label %526

273:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %274, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !16
  %277 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %276, i32 0, i32 6
  %278 = load i32, ptr %277, align 8, !tbaa !16
  store i32 %278, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #5
  store i16 0, ptr %23, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %279 = load ptr, ptr %19, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %279, i32 0, i32 5
  %281 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %280, i32 0, i32 1
  %282 = load i32, ptr %281, align 4, !tbaa !16
  store i32 %282, ptr %24, align 4, !tbaa !9
  %283 = load i32, ptr %24, align 4, !tbaa !9
  %284 = and i32 %283, 1
  %285 = icmp ugt i32 %284, 0
  br i1 %285, label %286, label %291

286:                                              ; preds = %273
  %287 = load i16, ptr %23, align 2, !tbaa !21
  %288 = zext i16 %287 to i32
  %289 = or i32 %288, 1
  %290 = trunc i32 %289 to i16
  store i16 %290, ptr %23, align 2, !tbaa !21
  br label %311

291:                                              ; preds = %273
  %292 = load i32, ptr %24, align 4, !tbaa !9
  %293 = and i32 %292, 8
  %294 = icmp ugt i32 %293, 0
  br i1 %294, label %295, label %300

295:                                              ; preds = %291
  %296 = load i16, ptr %23, align 2, !tbaa !21
  %297 = zext i16 %296 to i32
  %298 = or i32 %297, 4
  %299 = trunc i32 %298 to i16
  store i16 %299, ptr %23, align 2, !tbaa !21
  br label %310

300:                                              ; preds = %291
  %301 = load i32, ptr %24, align 4, !tbaa !9
  %302 = and i32 %301, 64
  %303 = icmp ugt i32 %302, 0
  br i1 %303, label %304, label %309

304:                                              ; preds = %300
  %305 = load i16, ptr %23, align 2, !tbaa !21
  %306 = zext i16 %305 to i32
  %307 = or i32 %306, 16
  %308 = trunc i32 %307 to i16
  store i16 %308, ptr %23, align 2, !tbaa !21
  br label %309

309:                                              ; preds = %304, %300
  br label %310

310:                                              ; preds = %309, %295
  br label %311

311:                                              ; preds = %310, %286
  %312 = load i32, ptr %24, align 4, !tbaa !9
  %313 = and i32 %312, 4
  %314 = icmp ugt i32 %313, 0
  br i1 %314, label %315, label %320

315:                                              ; preds = %311
  %316 = load i16, ptr %23, align 2, !tbaa !21
  %317 = zext i16 %316 to i32
  %318 = or i32 %317, 2
  %319 = trunc i32 %318 to i16
  store i16 %319, ptr %23, align 2, !tbaa !21
  br label %340

320:                                              ; preds = %311
  %321 = load i32, ptr %24, align 4, !tbaa !9
  %322 = and i32 %321, 32
  %323 = icmp ugt i32 %322, 0
  br i1 %323, label %324, label %329

324:                                              ; preds = %320
  %325 = load i16, ptr %23, align 2, !tbaa !21
  %326 = zext i16 %325 to i32
  %327 = or i32 %326, 8
  %328 = trunc i32 %327 to i16
  store i16 %328, ptr %23, align 2, !tbaa !21
  br label %339

329:                                              ; preds = %320
  %330 = load i32, ptr %24, align 4, !tbaa !9
  %331 = and i32 %330, 256
  %332 = icmp ugt i32 %331, 0
  br i1 %332, label %333, label %338

333:                                              ; preds = %329
  %334 = load i16, ptr %23, align 2, !tbaa !21
  %335 = zext i16 %334 to i32
  %336 = or i32 %335, 32
  %337 = trunc i32 %336 to i16
  store i16 %337, ptr %23, align 2, !tbaa !21
  br label %338

338:                                              ; preds = %333, %329
  br label %339

339:                                              ; preds = %338, %324
  br label %340

340:                                              ; preds = %339, %315
  %341 = load ptr, ptr %7, align 8, !tbaa !5
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  %343 = load ptr, ptr %9, align 8, !tbaa !5
  %344 = load ptr, ptr %19, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %344, i32 0, i32 0
  %346 = load ptr, ptr %345, align 8, !tbaa !16
  %347 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %341, ptr noundef %342, ptr noundef %343, ptr noundef %346, i32 noundef %347, i32 noundef 0)
  %348 = load ptr, ptr %7, align 8, !tbaa !5
  %349 = load ptr, ptr %10, align 8, !tbaa !5
  %350 = load ptr, ptr %9, align 8, !tbaa !5
  %351 = load ptr, ptr %19, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %351, i32 0, i32 2
  %353 = load ptr, ptr %352, align 8, !tbaa !16
  %354 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %348, ptr noundef %349, ptr noundef %350, ptr noundef %353, i32 noundef %354, i32 noundef 1)
  %355 = load ptr, ptr %7, align 8, !tbaa !5
  %356 = load i32, ptr %22, align 4, !tbaa !9
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %357, i32 0, i32 51
  %359 = load i32, ptr %358, align 8, !tbaa !23
  %360 = mul i32 %356, %359
  %361 = load ptr, ptr %9, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %361, i32 0, i32 15
  %363 = load i32, ptr %362, align 4, !tbaa !15
  %364 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %355, i32 noundef %360, i32 noundef %363, i32 noundef %364)
  %365 = load ptr, ptr %7, align 8, !tbaa !5
  %366 = load ptr, ptr %9, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %366, i32 0, i32 15
  %368 = load i32, ptr %367, align 4, !tbaa !15
  %369 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %365, i32 noundef 30, i32 noundef %368, i32 noundef %369)
  %370 = load i32, ptr %21, align 4, !tbaa !9
  %371 = load ptr, ptr %19, align 8, !tbaa !5
  %372 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %371, i32 0, i32 2
  %373 = load ptr, ptr %372, align 8, !tbaa !16
  %374 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %373, i32 0, i32 8
  %375 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %374, i32 0, i32 4
  %376 = load i32, ptr %375, align 8, !tbaa !16
  %377 = load ptr, ptr %19, align 8, !tbaa !5
  %378 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %377, i32 0, i32 5
  %379 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %378, i32 0, i32 2
  %380 = load i32, ptr %379, align 4, !tbaa !16
  %381 = load i32, ptr %20, align 4, !tbaa !9
  %382 = load ptr, ptr %19, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %382, i32 0, i32 8
  %384 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %383, i32 0, i32 1
  %385 = load i32, ptr %384, align 4, !tbaa !16
  %386 = load ptr, ptr %19, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %386, i32 0, i32 8
  %388 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %387, i32 0, i32 2
  %389 = load i32, ptr %388, align 8, !tbaa !16
  %390 = load ptr, ptr %19, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %390, i32 0, i32 0
  %392 = load ptr, ptr %391, align 8, !tbaa !16
  %393 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %392, i32 0, i32 8
  %394 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %393, i32 0, i32 3
  %395 = load i32, ptr %394, align 4, !tbaa !16
  %396 = load ptr, ptr %19, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %396, i32 0, i32 8
  %398 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %397, i32 0, i32 1
  %399 = load i32, ptr %398, align 4, !tbaa !16
  %400 = load ptr, ptr %19, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %400, i32 0, i32 2
  %402 = load ptr, ptr %401, align 8, !tbaa !16
  %403 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %402, i32 0, i32 8
  %404 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %403, i32 0, i32 3
  %405 = load i32, ptr %404, align 4, !tbaa !16
  %406 = load i16, ptr %23, align 2, !tbaa !21
  %407 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %370, i32 noundef %376, i32 noundef 15, i32 noundef %380, i32 noundef %381, i32 noundef %385, i32 noundef %389, i32 noundef %395, i32 noundef %399, i32 noundef %405, i32 noundef 0, i16 noundef zeroext %406, i16 noundef zeroext 2, i8 noundef zeroext 2)
  store ptr %407, ptr %14, align 8, !tbaa !5
  %408 = load ptr, ptr %7, align 8, !tbaa !5
  %409 = load ptr, ptr %10, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %409, i32 0, i32 59
  %411 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %408, ptr noundef %410, ptr noundef %411)
  %412 = load ptr, ptr %7, align 8, !tbaa !5
  %413 = load ptr, ptr %11, align 8, !tbaa !5
  %414 = load ptr, ptr %9, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %414, i32 0, i32 18
  %416 = load ptr, ptr %10, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %416, i32 0, i32 59
  %418 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %412, ptr noundef %413, ptr noundef %415, ptr noundef %417, ptr noundef %418)
  store i16 0, ptr %23, align 2, !tbaa !21
  %419 = load i32, ptr %24, align 4, !tbaa !9
  %420 = and i32 %419, 2
  %421 = icmp ugt i32 %420, 0
  br i1 %421, label %422, label %427

422:                                              ; preds = %340
  %423 = load i16, ptr %23, align 2, !tbaa !21
  %424 = zext i16 %423 to i32
  %425 = or i32 %424, 1
  %426 = trunc i32 %425 to i16
  store i16 %426, ptr %23, align 2, !tbaa !21
  br label %447

427:                                              ; preds = %340
  %428 = load i32, ptr %24, align 4, !tbaa !9
  %429 = and i32 %428, 16
  %430 = icmp ugt i32 %429, 0
  br i1 %430, label %431, label %436

431:                                              ; preds = %427
  %432 = load i16, ptr %23, align 2, !tbaa !21
  %433 = zext i16 %432 to i32
  %434 = or i32 %433, 4
  %435 = trunc i32 %434 to i16
  store i16 %435, ptr %23, align 2, !tbaa !21
  br label %446

436:                                              ; preds = %427
  %437 = load i32, ptr %24, align 4, !tbaa !9
  %438 = and i32 %437, 128
  %439 = icmp ugt i32 %438, 0
  br i1 %439, label %440, label %445

440:                                              ; preds = %436
  %441 = load i16, ptr %23, align 2, !tbaa !21
  %442 = zext i16 %441 to i32
  %443 = or i32 %442, 16
  %444 = trunc i32 %443 to i16
  store i16 %444, ptr %23, align 2, !tbaa !21
  br label %445

445:                                              ; preds = %440, %436
  br label %446

446:                                              ; preds = %445, %431
  br label %447

447:                                              ; preds = %446, %422
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = load ptr, ptr %10, align 8, !tbaa !5
  %450 = load ptr, ptr %9, align 8, !tbaa !5
  %451 = load ptr, ptr %19, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %451, i32 0, i32 1
  %453 = load ptr, ptr %452, align 8, !tbaa !16
  %454 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %448, ptr noundef %449, ptr noundef %450, ptr noundef %453, i32 noundef %454, i32 noundef 0)
  %455 = load ptr, ptr %7, align 8, !tbaa !5
  %456 = load i32, ptr %22, align 4, !tbaa !9
  %457 = load ptr, ptr %10, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %457, i32 0, i32 51
  %459 = load i32, ptr %458, align 8, !tbaa !23
  %460 = mul i32 %456, %459
  %461 = load ptr, ptr %9, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %461, i32 0, i32 15
  %463 = load i32, ptr %462, align 4, !tbaa !15
  %464 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %455, i32 noundef %460, i32 noundef %463, i32 noundef %464)
  %465 = load ptr, ptr %7, align 8, !tbaa !5
  %466 = load ptr, ptr %9, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %466, i32 0, i32 15
  %468 = load i32, ptr %467, align 4, !tbaa !15
  %469 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %465, i32 noundef 14, i32 noundef %468, i32 noundef %469)
  %470 = load ptr, ptr %7, align 8, !tbaa !5
  %471 = load ptr, ptr %10, align 8, !tbaa !5
  %472 = load ptr, ptr %9, align 8, !tbaa !5
  %473 = load ptr, ptr %19, align 8, !tbaa !5
  %474 = load i32, ptr %17, align 4, !tbaa !9
  %475 = load i32, ptr %15, align 4, !tbaa !9
  %476 = load i32, ptr %16, align 4, !tbaa !9
  %477 = icmp eq i32 %475, %476
  %478 = zext i1 %477 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %470, ptr noundef %471, ptr noundef %472, ptr noundef %473, i32 noundef %474, i32 noundef %478)
  %479 = load ptr, ptr %19, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %479, i32 0, i32 1
  %481 = load ptr, ptr %480, align 8, !tbaa !16
  %482 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %481, i32 0, i32 8
  %483 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %482, i32 0, i32 4
  %484 = load i32, ptr %483, align 8, !tbaa !16
  %485 = load i32, ptr %20, align 4, !tbaa !9
  %486 = load ptr, ptr %19, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %486, i32 0, i32 5
  %488 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %487, i32 0, i32 2
  %489 = load i32, ptr %488, align 4, !tbaa !16
  %490 = load i32, ptr %20, align 4, !tbaa !9
  %491 = load ptr, ptr %19, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %491, i32 0, i32 8
  %493 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %492, i32 0, i32 1
  %494 = load i32, ptr %493, align 4, !tbaa !16
  %495 = load ptr, ptr %19, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %495, i32 0, i32 8
  %497 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %496, i32 0, i32 2
  %498 = load i32, ptr %497, align 8, !tbaa !16
  %499 = load ptr, ptr %19, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %499, i32 0, i32 1
  %501 = load ptr, ptr %500, align 8, !tbaa !16
  %502 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %501, i32 0, i32 8
  %503 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %502, i32 0, i32 3
  %504 = load i32, ptr %503, align 4, !tbaa !16
  %505 = load ptr, ptr %19, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %505, i32 0, i32 8
  %507 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %506, i32 0, i32 3
  %508 = load i32, ptr %507, align 4, !tbaa !16
  %509 = load ptr, ptr %19, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %509, i32 0, i32 8
  %511 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %510, i32 0, i32 1
  %512 = load i32, ptr %511, align 4, !tbaa !16
  %513 = load i16, ptr %23, align 2, !tbaa !21
  %514 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %484, i32 noundef %485, i32 noundef 15, i32 noundef %489, i32 noundef %490, i32 noundef %494, i32 noundef %498, i32 noundef %504, i32 noundef %508, i32 noundef %512, i32 noundef 0, i16 noundef zeroext %513, i16 noundef zeroext 3, i8 noundef zeroext 2)
  store ptr %514, ptr %14, align 8, !tbaa !5
  %515 = load ptr, ptr %7, align 8, !tbaa !5
  %516 = load ptr, ptr %10, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %516, i32 0, i32 59
  %518 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %515, ptr noundef %517, ptr noundef %518)
  %519 = load ptr, ptr %7, align 8, !tbaa !5
  %520 = load ptr, ptr %11, align 8, !tbaa !5
  %521 = load ptr, ptr %9, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %521, i32 0, i32 18
  %523 = load ptr, ptr %10, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %523, i32 0, i32 59
  %525 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %519, ptr noundef %520, ptr noundef %522, ptr noundef %524, ptr noundef %525)
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %820

526:                                              ; preds = %267
  %527 = load ptr, ptr %19, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %527, i32 0, i32 5
  %529 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %528, i32 0, i32 0
  %530 = load i32, ptr %529, align 4, !tbaa !16
  %531 = icmp eq i32 %530, 1
  br i1 %531, label %532, label %785

532:                                              ; preds = %526
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %533 = load ptr, ptr %12, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %533, i32 0, i32 0
  %535 = load ptr, ptr %534, align 8, !tbaa !16
  %536 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %535, i32 0, i32 6
  %537 = load i32, ptr %536, align 8, !tbaa !16
  store i32 %537, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #5
  store i16 0, ptr %26, align 2, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %538 = load ptr, ptr %19, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %538, i32 0, i32 5
  %540 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %539, i32 0, i32 1
  %541 = load i32, ptr %540, align 4, !tbaa !16
  store i32 %541, ptr %27, align 4, !tbaa !9
  %542 = load i32, ptr %27, align 4, !tbaa !9
  %543 = and i32 %542, 1
  %544 = icmp ugt i32 %543, 0
  br i1 %544, label %545, label %550

545:                                              ; preds = %532
  %546 = load i16, ptr %26, align 2, !tbaa !21
  %547 = zext i16 %546 to i32
  %548 = or i32 %547, 1
  %549 = trunc i32 %548 to i16
  store i16 %549, ptr %26, align 2, !tbaa !21
  br label %570

550:                                              ; preds = %532
  %551 = load i32, ptr %27, align 4, !tbaa !9
  %552 = and i32 %551, 8
  %553 = icmp ugt i32 %552, 0
  br i1 %553, label %554, label %559

554:                                              ; preds = %550
  %555 = load i16, ptr %26, align 2, !tbaa !21
  %556 = zext i16 %555 to i32
  %557 = or i32 %556, 4
  %558 = trunc i32 %557 to i16
  store i16 %558, ptr %26, align 2, !tbaa !21
  br label %569

559:                                              ; preds = %550
  %560 = load i32, ptr %27, align 4, !tbaa !9
  %561 = and i32 %560, 64
  %562 = icmp ugt i32 %561, 0
  br i1 %562, label %563, label %568

563:                                              ; preds = %559
  %564 = load i16, ptr %26, align 2, !tbaa !21
  %565 = zext i16 %564 to i32
  %566 = or i32 %565, 16
  %567 = trunc i32 %566 to i16
  store i16 %567, ptr %26, align 2, !tbaa !21
  br label %568

568:                                              ; preds = %563, %559
  br label %569

569:                                              ; preds = %568, %554
  br label %570

570:                                              ; preds = %569, %545
  %571 = load i32, ptr %27, align 4, !tbaa !9
  %572 = and i32 %571, 2
  %573 = icmp ugt i32 %572, 0
  br i1 %573, label %574, label %579

574:                                              ; preds = %570
  %575 = load i16, ptr %26, align 2, !tbaa !21
  %576 = zext i16 %575 to i32
  %577 = or i32 %576, 2
  %578 = trunc i32 %577 to i16
  store i16 %578, ptr %26, align 2, !tbaa !21
  br label %599

579:                                              ; preds = %570
  %580 = load i32, ptr %27, align 4, !tbaa !9
  %581 = and i32 %580, 16
  %582 = icmp ugt i32 %581, 0
  br i1 %582, label %583, label %588

583:                                              ; preds = %579
  %584 = load i16, ptr %26, align 2, !tbaa !21
  %585 = zext i16 %584 to i32
  %586 = or i32 %585, 8
  %587 = trunc i32 %586 to i16
  store i16 %587, ptr %26, align 2, !tbaa !21
  br label %598

588:                                              ; preds = %579
  %589 = load i32, ptr %27, align 4, !tbaa !9
  %590 = and i32 %589, 128
  %591 = icmp ugt i32 %590, 0
  br i1 %591, label %592, label %597

592:                                              ; preds = %588
  %593 = load i16, ptr %26, align 2, !tbaa !21
  %594 = zext i16 %593 to i32
  %595 = or i32 %594, 32
  %596 = trunc i32 %595 to i16
  store i16 %596, ptr %26, align 2, !tbaa !21
  br label %597

597:                                              ; preds = %592, %588
  br label %598

598:                                              ; preds = %597, %583
  br label %599

599:                                              ; preds = %598, %574
  %600 = load ptr, ptr %7, align 8, !tbaa !5
  %601 = load ptr, ptr %10, align 8, !tbaa !5
  %602 = load ptr, ptr %9, align 8, !tbaa !5
  %603 = load ptr, ptr %19, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %603, i32 0, i32 0
  %605 = load ptr, ptr %604, align 8, !tbaa !16
  %606 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %600, ptr noundef %601, ptr noundef %602, ptr noundef %605, i32 noundef %606, i32 noundef 0)
  %607 = load ptr, ptr %7, align 8, !tbaa !5
  %608 = load ptr, ptr %10, align 8, !tbaa !5
  %609 = load ptr, ptr %9, align 8, !tbaa !5
  %610 = load ptr, ptr %19, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %610, i32 0, i32 1
  %612 = load ptr, ptr %611, align 8, !tbaa !16
  %613 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %607, ptr noundef %608, ptr noundef %609, ptr noundef %612, i32 noundef %613, i32 noundef 1)
  %614 = load ptr, ptr %7, align 8, !tbaa !5
  %615 = load i32, ptr %25, align 4, !tbaa !9
  %616 = load ptr, ptr %10, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %616, i32 0, i32 51
  %618 = load i32, ptr %617, align 8, !tbaa !23
  %619 = mul i32 %615, %618
  %620 = load ptr, ptr %9, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %620, i32 0, i32 15
  %622 = load i32, ptr %621, align 4, !tbaa !15
  %623 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %614, i32 noundef %619, i32 noundef %622, i32 noundef %623)
  %624 = load ptr, ptr %7, align 8, !tbaa !5
  %625 = load ptr, ptr %9, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %625, i32 0, i32 15
  %627 = load i32, ptr %626, align 4, !tbaa !15
  %628 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %624, i32 noundef 30, i32 noundef %627, i32 noundef %628)
  %629 = load i32, ptr %21, align 4, !tbaa !9
  %630 = load ptr, ptr %19, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %630, i32 0, i32 1
  %632 = load ptr, ptr %631, align 8, !tbaa !16
  %633 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %632, i32 0, i32 8
  %634 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %633, i32 0, i32 4
  %635 = load i32, ptr %634, align 8, !tbaa !16
  %636 = load ptr, ptr %19, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %636, i32 0, i32 5
  %638 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %637, i32 0, i32 2
  %639 = load i32, ptr %638, align 4, !tbaa !16
  %640 = load i32, ptr %20, align 4, !tbaa !9
  %641 = load ptr, ptr %19, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %641, i32 0, i32 8
  %643 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %642, i32 0, i32 1
  %644 = load i32, ptr %643, align 4, !tbaa !16
  %645 = load ptr, ptr %19, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %645, i32 0, i32 8
  %647 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %646, i32 0, i32 2
  %648 = load i32, ptr %647, align 8, !tbaa !16
  %649 = load ptr, ptr %19, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %649, i32 0, i32 0
  %651 = load ptr, ptr %650, align 8, !tbaa !16
  %652 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %651, i32 0, i32 8
  %653 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %652, i32 0, i32 3
  %654 = load i32, ptr %653, align 4, !tbaa !16
  %655 = load ptr, ptr %19, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %655, i32 0, i32 8
  %657 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %656, i32 0, i32 1
  %658 = load i32, ptr %657, align 4, !tbaa !16
  %659 = load ptr, ptr %19, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %659, i32 0, i32 1
  %661 = load ptr, ptr %660, align 8, !tbaa !16
  %662 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %661, i32 0, i32 8
  %663 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %662, i32 0, i32 3
  %664 = load i32, ptr %663, align 4, !tbaa !16
  %665 = load i16, ptr %26, align 2, !tbaa !21
  %666 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %629, i32 noundef %635, i32 noundef 15, i32 noundef %639, i32 noundef %640, i32 noundef %644, i32 noundef %648, i32 noundef %654, i32 noundef %658, i32 noundef %664, i32 noundef 0, i16 noundef zeroext %665, i16 noundef zeroext 2, i8 noundef zeroext 2)
  store ptr %666, ptr %14, align 8, !tbaa !5
  %667 = load ptr, ptr %7, align 8, !tbaa !5
  %668 = load ptr, ptr %10, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %668, i32 0, i32 59
  %670 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %667, ptr noundef %669, ptr noundef %670)
  %671 = load ptr, ptr %7, align 8, !tbaa !5
  %672 = load ptr, ptr %11, align 8, !tbaa !5
  %673 = load ptr, ptr %9, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %673, i32 0, i32 18
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %675, i32 0, i32 59
  %677 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %671, ptr noundef %672, ptr noundef %674, ptr noundef %676, ptr noundef %677)
  store i16 0, ptr %26, align 2, !tbaa !21
  %678 = load i32, ptr %27, align 4, !tbaa !9
  %679 = and i32 %678, 4
  %680 = icmp ugt i32 %679, 0
  br i1 %680, label %681, label %686

681:                                              ; preds = %599
  %682 = load i16, ptr %26, align 2, !tbaa !21
  %683 = zext i16 %682 to i32
  %684 = or i32 %683, 1
  %685 = trunc i32 %684 to i16
  store i16 %685, ptr %26, align 2, !tbaa !21
  br label %706

686:                                              ; preds = %599
  %687 = load i32, ptr %27, align 4, !tbaa !9
  %688 = and i32 %687, 32
  %689 = icmp ugt i32 %688, 0
  br i1 %689, label %690, label %695

690:                                              ; preds = %686
  %691 = load i16, ptr %26, align 2, !tbaa !21
  %692 = zext i16 %691 to i32
  %693 = or i32 %692, 4
  %694 = trunc i32 %693 to i16
  store i16 %694, ptr %26, align 2, !tbaa !21
  br label %705

695:                                              ; preds = %686
  %696 = load i32, ptr %27, align 4, !tbaa !9
  %697 = and i32 %696, 256
  %698 = icmp ugt i32 %697, 0
  br i1 %698, label %699, label %704

699:                                              ; preds = %695
  %700 = load i16, ptr %26, align 2, !tbaa !21
  %701 = zext i16 %700 to i32
  %702 = or i32 %701, 16
  %703 = trunc i32 %702 to i16
  store i16 %703, ptr %26, align 2, !tbaa !21
  br label %704

704:                                              ; preds = %699, %695
  br label %705

705:                                              ; preds = %704, %690
  br label %706

706:                                              ; preds = %705, %681
  %707 = load ptr, ptr %7, align 8, !tbaa !5
  %708 = load ptr, ptr %10, align 8, !tbaa !5
  %709 = load ptr, ptr %9, align 8, !tbaa !5
  %710 = load ptr, ptr %19, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %710, i32 0, i32 2
  %712 = load ptr, ptr %711, align 8, !tbaa !16
  %713 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %707, ptr noundef %708, ptr noundef %709, ptr noundef %712, i32 noundef %713, i32 noundef 0)
  %714 = load ptr, ptr %7, align 8, !tbaa !5
  %715 = load i32, ptr %25, align 4, !tbaa !9
  %716 = load ptr, ptr %10, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %716, i32 0, i32 51
  %718 = load i32, ptr %717, align 8, !tbaa !23
  %719 = mul i32 %715, %718
  %720 = load ptr, ptr %9, align 8, !tbaa !5
  %721 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %720, i32 0, i32 15
  %722 = load i32, ptr %721, align 4, !tbaa !15
  %723 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %714, i32 noundef %719, i32 noundef %722, i32 noundef %723)
  %724 = load ptr, ptr %7, align 8, !tbaa !5
  %725 = load ptr, ptr %9, align 8, !tbaa !5
  %726 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %725, i32 0, i32 15
  %727 = load i32, ptr %726, align 4, !tbaa !15
  %728 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %724, i32 noundef 14, i32 noundef %727, i32 noundef %728)
  %729 = load ptr, ptr %7, align 8, !tbaa !5
  %730 = load ptr, ptr %10, align 8, !tbaa !5
  %731 = load ptr, ptr %9, align 8, !tbaa !5
  %732 = load ptr, ptr %19, align 8, !tbaa !5
  %733 = load i32, ptr %17, align 4, !tbaa !9
  %734 = load i32, ptr %15, align 4, !tbaa !9
  %735 = load i32, ptr %16, align 4, !tbaa !9
  %736 = icmp eq i32 %734, %735
  %737 = zext i1 %736 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %729, ptr noundef %730, ptr noundef %731, ptr noundef %732, i32 noundef %733, i32 noundef %737)
  %738 = load ptr, ptr %19, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %738, i32 0, i32 2
  %740 = load ptr, ptr %739, align 8, !tbaa !16
  %741 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %740, i32 0, i32 8
  %742 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %741, i32 0, i32 4
  %743 = load i32, ptr %742, align 8, !tbaa !16
  %744 = load i32, ptr %20, align 4, !tbaa !9
  %745 = load ptr, ptr %19, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %745, i32 0, i32 5
  %747 = getelementptr inbounds %struct.libxsmm_meqn_ternary_op, ptr %746, i32 0, i32 2
  %748 = load i32, ptr %747, align 4, !tbaa !16
  %749 = load i32, ptr %20, align 4, !tbaa !9
  %750 = load ptr, ptr %19, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %750, i32 0, i32 8
  %752 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %751, i32 0, i32 1
  %753 = load i32, ptr %752, align 4, !tbaa !16
  %754 = load ptr, ptr %19, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %754, i32 0, i32 8
  %756 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %755, i32 0, i32 2
  %757 = load i32, ptr %756, align 8, !tbaa !16
  %758 = load ptr, ptr %19, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %758, i32 0, i32 2
  %760 = load ptr, ptr %759, align 8, !tbaa !16
  %761 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %760, i32 0, i32 8
  %762 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %761, i32 0, i32 3
  %763 = load i32, ptr %762, align 4, !tbaa !16
  %764 = load ptr, ptr %19, align 8, !tbaa !5
  %765 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %764, i32 0, i32 8
  %766 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %765, i32 0, i32 3
  %767 = load i32, ptr %766, align 4, !tbaa !16
  %768 = load ptr, ptr %19, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %768, i32 0, i32 8
  %770 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %769, i32 0, i32 1
  %771 = load i32, ptr %770, align 4, !tbaa !16
  %772 = load i16, ptr %26, align 2, !tbaa !21
  %773 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %743, i32 noundef %744, i32 noundef 15, i32 noundef %748, i32 noundef %749, i32 noundef %753, i32 noundef %757, i32 noundef %763, i32 noundef %767, i32 noundef %771, i32 noundef 0, i16 noundef zeroext %772, i16 noundef zeroext 1, i8 noundef zeroext 2)
  store ptr %773, ptr %14, align 8, !tbaa !5
  %774 = load ptr, ptr %7, align 8, !tbaa !5
  %775 = load ptr, ptr %10, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %775, i32 0, i32 59
  %777 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %774, ptr noundef %776, ptr noundef %777)
  %778 = load ptr, ptr %7, align 8, !tbaa !5
  %779 = load ptr, ptr %11, align 8, !tbaa !5
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %780, i32 0, i32 18
  %782 = load ptr, ptr %10, align 8, !tbaa !5
  %783 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %782, i32 0, i32 59
  %784 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %778, ptr noundef %779, ptr noundef %781, ptr noundef %783, ptr noundef %784)
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %819

785:                                              ; preds = %526
  %786 = load ptr, ptr %7, align 8, !tbaa !5
  %787 = load ptr, ptr %10, align 8, !tbaa !5
  %788 = load ptr, ptr %9, align 8, !tbaa !5
  %789 = load ptr, ptr %19, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %789, i32 0, i32 0
  %791 = load ptr, ptr %790, align 8, !tbaa !16
  %792 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %786, ptr noundef %787, ptr noundef %788, ptr noundef %791, i32 noundef %792, i32 noundef 0)
  %793 = load ptr, ptr %7, align 8, !tbaa !5
  %794 = load ptr, ptr %10, align 8, !tbaa !5
  %795 = load ptr, ptr %9, align 8, !tbaa !5
  %796 = load ptr, ptr %19, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %796, i32 0, i32 1
  %798 = load ptr, ptr %797, align 8, !tbaa !16
  %799 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %793, ptr noundef %794, ptr noundef %795, ptr noundef %798, i32 noundef %799, i32 noundef 1)
  %800 = load ptr, ptr %7, align 8, !tbaa !5
  %801 = load ptr, ptr %10, align 8, !tbaa !5
  %802 = load ptr, ptr %9, align 8, !tbaa !5
  %803 = load ptr, ptr %19, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %803, i32 0, i32 2
  %805 = load ptr, ptr %804, align 8, !tbaa !16
  %806 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %800, ptr noundef %801, ptr noundef %802, ptr noundef %805, i32 noundef %806, i32 noundef 2)
  %807 = load ptr, ptr %7, align 8, !tbaa !5
  %808 = load ptr, ptr %10, align 8, !tbaa !5
  %809 = load ptr, ptr %9, align 8, !tbaa !5
  %810 = load ptr, ptr %19, align 8, !tbaa !5
  %811 = load i32, ptr %17, align 4, !tbaa !9
  %812 = load i32, ptr %15, align 4, !tbaa !9
  %813 = load i32, ptr %16, align 4, !tbaa !9
  %814 = icmp eq i32 %812, %813
  %815 = zext i1 %814 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %807, ptr noundef %808, ptr noundef %809, ptr noundef %810, i32 noundef %811, i32 noundef %815)
  %816 = load ptr, ptr %19, align 8, !tbaa !5
  %817 = load i32, ptr %21, align 4, !tbaa !9
  %818 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_create_ternary_descriptor(ptr noundef %13, ptr noundef %816, ptr noundef %14, i32 noundef %817, i32 noundef %818)
  br label %819

819:                                              ; preds = %785, %706
  br label %820

820:                                              ; preds = %819, %447
  br label %1381

821:                                              ; preds = %262
  %822 = load ptr, ptr %19, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %822, i32 0, i32 4
  %824 = load i32, ptr %823, align 8, !tbaa !16
  %825 = icmp eq i32 %824, 2
  br i1 %825, label %826, label %1066

826:                                              ; preds = %821
  %827 = load ptr, ptr %19, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %827, i32 0, i32 5
  %829 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %828, i32 0, i32 0
  %830 = load i32, ptr %829, align 4, !tbaa !16
  %831 = icmp eq i32 %830, 7
  br i1 %831, label %832, label %1066

832:                                              ; preds = %826
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %833 = load ptr, ptr %12, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %833, i32 0, i32 0
  %835 = load ptr, ptr %834, align 8, !tbaa !16
  %836 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %835, i32 0, i32 6
  %837 = load i32, ptr %836, align 8, !tbaa !16
  store i32 %837, ptr %28, align 4, !tbaa !9
  %838 = load ptr, ptr %7, align 8, !tbaa !5
  %839 = load ptr, ptr %10, align 8, !tbaa !5
  %840 = load ptr, ptr %9, align 8, !tbaa !5
  %841 = load ptr, ptr %19, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %841, i32 0, i32 0
  %843 = load ptr, ptr %842, align 8, !tbaa !16
  %844 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %838, ptr noundef %839, ptr noundef %840, ptr noundef %843, i32 noundef %844, i32 noundef 0)
  %845 = load ptr, ptr %7, align 8, !tbaa !5
  %846 = load ptr, ptr %10, align 8, !tbaa !5
  %847 = load ptr, ptr %9, align 8, !tbaa !5
  %848 = load ptr, ptr %19, align 8, !tbaa !5
  %849 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %848, i32 0, i32 1
  %850 = load ptr, ptr %849, align 8, !tbaa !16
  %851 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %845, ptr noundef %846, ptr noundef %847, ptr noundef %850, i32 noundef %851, i32 noundef 1)
  %852 = load ptr, ptr %7, align 8, !tbaa !5
  %853 = load i32, ptr %28, align 4, !tbaa !9
  %854 = load ptr, ptr %10, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %854, i32 0, i32 51
  %856 = load i32, ptr %855, align 8, !tbaa !23
  %857 = mul i32 %853, %856
  %858 = load ptr, ptr %9, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %858, i32 0, i32 15
  %860 = load i32, ptr %859, align 4, !tbaa !15
  %861 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %852, i32 noundef %857, i32 noundef %860, i32 noundef %861)
  %862 = load ptr, ptr %7, align 8, !tbaa !5
  %863 = load ptr, ptr %9, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %863, i32 0, i32 15
  %865 = load i32, ptr %864, align 4, !tbaa !15
  %866 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %862, i32 noundef 30, i32 noundef %865, i32 noundef %866)
  %867 = load i32, ptr %21, align 4, !tbaa !9
  %868 = load ptr, ptr %19, align 8, !tbaa !5
  %869 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %868, i32 0, i32 1
  %870 = load ptr, ptr %869, align 8, !tbaa !16
  %871 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %870, i32 0, i32 8
  %872 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %871, i32 0, i32 4
  %873 = load i32, ptr %872, align 8, !tbaa !16
  %874 = load ptr, ptr %19, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %874, i32 0, i32 5
  %876 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %875, i32 0, i32 2
  %877 = load i32, ptr %876, align 4, !tbaa !16
  %878 = load i32, ptr %20, align 4, !tbaa !9
  %879 = load ptr, ptr %19, align 8, !tbaa !5
  %880 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %879, i32 0, i32 0
  %881 = load ptr, ptr %880, align 8, !tbaa !16
  %882 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %881, i32 0, i32 8
  %883 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %882, i32 0, i32 1
  %884 = load i32, ptr %883, align 4, !tbaa !16
  %885 = load ptr, ptr %19, align 8, !tbaa !5
  %886 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %885, i32 0, i32 0
  %887 = load ptr, ptr %886, align 8, !tbaa !16
  %888 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %887, i32 0, i32 8
  %889 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %888, i32 0, i32 2
  %890 = load i32, ptr %889, align 8, !tbaa !16
  %891 = load ptr, ptr %19, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %891, i32 0, i32 0
  %893 = load ptr, ptr %892, align 8, !tbaa !16
  %894 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %893, i32 0, i32 8
  %895 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %894, i32 0, i32 3
  %896 = load i32, ptr %895, align 4, !tbaa !16
  %897 = load ptr, ptr %19, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %897, i32 0, i32 0
  %899 = load ptr, ptr %898, align 8, !tbaa !16
  %900 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %899, i32 0, i32 8
  %901 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %900, i32 0, i32 1
  %902 = load i32, ptr %901, align 4, !tbaa !16
  %903 = load ptr, ptr %19, align 8, !tbaa !5
  %904 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %903, i32 0, i32 1
  %905 = load ptr, ptr %904, align 8, !tbaa !16
  %906 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %905, i32 0, i32 8
  %907 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %906, i32 0, i32 3
  %908 = load i32, ptr %907, align 4, !tbaa !16
  %909 = load ptr, ptr %19, align 8, !tbaa !5
  %910 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %909, i32 0, i32 5
  %911 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %910, i32 0, i32 1
  %912 = load i32, ptr %911, align 4, !tbaa !16
  %913 = trunc i32 %912 to i16
  %914 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %867, i32 noundef %873, i32 noundef 15, i32 noundef %877, i32 noundef %878, i32 noundef %884, i32 noundef %890, i32 noundef %896, i32 noundef %902, i32 noundef %908, i32 noundef 0, i16 noundef zeroext %913, i16 noundef zeroext 2, i8 noundef zeroext 2)
  store ptr %914, ptr %14, align 8, !tbaa !5
  %915 = load ptr, ptr %7, align 8, !tbaa !5
  %916 = load ptr, ptr %10, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %916, i32 0, i32 59
  %918 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %915, ptr noundef %917, ptr noundef %918)
  %919 = load ptr, ptr %7, align 8, !tbaa !5
  %920 = load ptr, ptr %11, align 8, !tbaa !5
  %921 = load ptr, ptr %9, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %921, i32 0, i32 18
  %923 = load ptr, ptr %10, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %923, i32 0, i32 59
  %925 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %919, ptr noundef %920, ptr noundef %922, ptr noundef %924, ptr noundef %925)
  %926 = load ptr, ptr %7, align 8, !tbaa !5
  %927 = load i32, ptr %28, align 4, !tbaa !9
  %928 = load ptr, ptr %10, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %928, i32 0, i32 51
  %930 = load i32, ptr %929, align 8, !tbaa !23
  %931 = mul i32 %927, %930
  %932 = load ptr, ptr %9, align 8, !tbaa !5
  %933 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %932, i32 0, i32 15
  %934 = load i32, ptr %933, align 4, !tbaa !15
  %935 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %926, i32 noundef %931, i32 noundef %934, i32 noundef %935)
  %936 = load ptr, ptr %7, align 8, !tbaa !5
  %937 = load ptr, ptr %9, align 8, !tbaa !5
  %938 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %937, i32 0, i32 15
  %939 = load i32, ptr %938, align 4, !tbaa !15
  %940 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %936, i32 noundef 8, i32 noundef %939, i32 noundef %940)
  %941 = load ptr, ptr %7, align 8, !tbaa !5
  %942 = load ptr, ptr %9, align 8, !tbaa !5
  %943 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %942, i32 0, i32 15
  %944 = load i32, ptr %943, align 4, !tbaa !15
  %945 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %941, i32 noundef 14, i32 noundef %944, i32 noundef %945)
  %946 = load i32, ptr %21, align 4, !tbaa !9
  %947 = load ptr, ptr %19, align 8, !tbaa !5
  %948 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %947, i32 0, i32 5
  %949 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %948, i32 0, i32 2
  %950 = load i32, ptr %949, align 4, !tbaa !16
  %951 = load i32, ptr %20, align 4, !tbaa !9
  %952 = load ptr, ptr %19, align 8, !tbaa !5
  %953 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %952, i32 0, i32 0
  %954 = load ptr, ptr %953, align 8, !tbaa !16
  %955 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %954, i32 0, i32 8
  %956 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %955, i32 0, i32 1
  %957 = load i32, ptr %956, align 4, !tbaa !16
  %958 = load ptr, ptr %19, align 8, !tbaa !5
  %959 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %958, i32 0, i32 0
  %960 = load ptr, ptr %959, align 8, !tbaa !16
  %961 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %960, i32 0, i32 8
  %962 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %961, i32 0, i32 2
  %963 = load i32, ptr %962, align 8, !tbaa !16
  %964 = load ptr, ptr %19, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %964, i32 0, i32 0
  %966 = load ptr, ptr %965, align 8, !tbaa !16
  %967 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %966, i32 0, i32 8
  %968 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %967, i32 0, i32 1
  %969 = load i32, ptr %968, align 4, !tbaa !16
  %970 = load ptr, ptr %19, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %970, i32 0, i32 0
  %972 = load ptr, ptr %971, align 8, !tbaa !16
  %973 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %972, i32 0, i32 8
  %974 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %973, i32 0, i32 1
  %975 = load i32, ptr %974, align 4, !tbaa !16
  %976 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %946, i32 noundef 15, i32 noundef 15, i32 noundef %950, i32 noundef %951, i32 noundef %957, i32 noundef %963, i32 noundef %969, i32 noundef %975, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 16, i16 noundef zeroext 18, i8 noundef zeroext 1)
  store ptr %976, ptr %14, align 8, !tbaa !5
  %977 = load ptr, ptr %7, align 8, !tbaa !5
  %978 = load ptr, ptr %10, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %978, i32 0, i32 59
  %980 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %977, ptr noundef %979, ptr noundef %980)
  %981 = load ptr, ptr %7, align 8, !tbaa !5
  %982 = load ptr, ptr %11, align 8, !tbaa !5
  %983 = load ptr, ptr %9, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %983, i32 0, i32 18
  %985 = load ptr, ptr %10, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %985, i32 0, i32 59
  %987 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %981, ptr noundef %982, ptr noundef %984, ptr noundef %986, ptr noundef %987)
  %988 = load ptr, ptr %7, align 8, !tbaa !5
  %989 = load i32, ptr %28, align 4, !tbaa !9
  %990 = load ptr, ptr %10, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %990, i32 0, i32 51
  %992 = load i32, ptr %991, align 8, !tbaa !23
  %993 = mul i32 %989, %992
  %994 = load ptr, ptr %9, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %994, i32 0, i32 15
  %996 = load i32, ptr %995, align 4, !tbaa !15
  %997 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %988, i32 noundef %993, i32 noundef %996, i32 noundef %997)
  %998 = load ptr, ptr %7, align 8, !tbaa !5
  %999 = load ptr, ptr %9, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %999, i32 0, i32 15
  %1001 = load i32, ptr %1000, align 4, !tbaa !15
  %1002 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %998, i32 noundef 8, i32 noundef %1001, i32 noundef %1002)
  %1003 = load i32, ptr %15, align 4, !tbaa !9
  %1004 = load i32, ptr %16, align 4, !tbaa !9
  %1005 = icmp eq i32 %1003, %1004
  br i1 %1005, label %1006, label %1012

1006:                                             ; preds = %832
  %1007 = load ptr, ptr %7, align 8, !tbaa !5
  %1008 = load ptr, ptr %9, align 8, !tbaa !5
  %1009 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1008, i32 0, i32 0
  %1010 = load i32, ptr %1009, align 4, !tbaa !28
  %1011 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1007, i32 noundef -1186988026, i32 noundef %1010, i32 noundef 127, i32 noundef 16, i32 noundef %1011)
  br label %1026

1012:                                             ; preds = %832
  %1013 = load ptr, ptr %7, align 8, !tbaa !5
  %1014 = load ptr, ptr %19, align 8, !tbaa !5
  %1015 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1014, i32 0, i32 8
  %1016 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1015, i32 0, i32 0
  %1017 = load i32, ptr %1016, align 8, !tbaa !16
  %1018 = load ptr, ptr %10, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1018, i32 0, i32 51
  %1020 = load i32, ptr %1019, align 8, !tbaa !23
  %1021 = mul i32 %1017, %1020
  %1022 = load ptr, ptr %9, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1022, i32 0, i32 15
  %1024 = load i32, ptr %1023, align 4, !tbaa !15
  %1025 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %1013, i32 noundef %1021, i32 noundef %1024, i32 noundef %1025)
  br label %1026

1026:                                             ; preds = %1012, %1006
  %1027 = load ptr, ptr %7, align 8, !tbaa !5
  %1028 = load ptr, ptr %9, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1028, i32 0, i32 15
  %1030 = load i32, ptr %1029, align 4, !tbaa !15
  %1031 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1027, i32 noundef 14, i32 noundef %1030, i32 noundef %1031)
  %1032 = load i32, ptr %21, align 4, !tbaa !9
  %1033 = load ptr, ptr %19, align 8, !tbaa !5
  %1034 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1033, i32 0, i32 5
  %1035 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %1034, i32 0, i32 2
  %1036 = load i32, ptr %1035, align 4, !tbaa !16
  %1037 = load i32, ptr %20, align 4, !tbaa !9
  %1038 = load ptr, ptr %19, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1038, i32 0, i32 0
  %1040 = load ptr, ptr %1039, align 8, !tbaa !16
  %1041 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1040, i32 0, i32 8
  %1042 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1041, i32 0, i32 1
  %1043 = load i32, ptr %1042, align 4, !tbaa !16
  %1044 = load ptr, ptr %19, align 8, !tbaa !5
  %1045 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1044, i32 0, i32 0
  %1046 = load ptr, ptr %1045, align 8, !tbaa !16
  %1047 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1046, i32 0, i32 8
  %1048 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1047, i32 0, i32 1
  %1049 = load i32, ptr %1048, align 4, !tbaa !16
  %1050 = load ptr, ptr %19, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1050, i32 0, i32 8
  %1052 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1051, i32 0, i32 3
  %1053 = load i32, ptr %1052, align 4, !tbaa !16
  %1054 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %1032, i32 noundef 15, i32 noundef 15, i32 noundef %1036, i32 noundef %1037, i32 noundef %1043, i32 noundef 1, i32 noundef %1049, i32 noundef %1053, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 32, i16 noundef zeroext 18, i8 noundef zeroext 1)
  store ptr %1054, ptr %14, align 8, !tbaa !5
  %1055 = load ptr, ptr %7, align 8, !tbaa !5
  %1056 = load ptr, ptr %10, align 8, !tbaa !5
  %1057 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1056, i32 0, i32 59
  %1058 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %1055, ptr noundef %1057, ptr noundef %1058)
  %1059 = load ptr, ptr %7, align 8, !tbaa !5
  %1060 = load ptr, ptr %11, align 8, !tbaa !5
  %1061 = load ptr, ptr %9, align 8, !tbaa !5
  %1062 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1061, i32 0, i32 18
  %1063 = load ptr, ptr %10, align 8, !tbaa !5
  %1064 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1063, i32 0, i32 59
  %1065 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %1059, ptr noundef %1060, ptr noundef %1062, ptr noundef %1064, ptr noundef %1065)
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  br label %1380

1066:                                             ; preds = %826, %821
  %1067 = load ptr, ptr %19, align 8, !tbaa !5
  %1068 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1067, i32 0, i32 4
  %1069 = load i32, ptr %1068, align 8, !tbaa !16
  %1070 = icmp eq i32 %1069, 1
  br i1 %1070, label %1071, label %1225

1071:                                             ; preds = %1066
  %1072 = load ptr, ptr %19, align 8, !tbaa !5
  %1073 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1072, i32 0, i32 5
  %1074 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1073, i32 0, i32 0
  %1075 = load i32, ptr %1074, align 4, !tbaa !16
  %1076 = icmp eq i32 %1075, 24
  br i1 %1076, label %1077, label %1225

1077:                                             ; preds = %1071
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %1078 = load ptr, ptr %12, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %1078, i32 0, i32 0
  %1080 = load ptr, ptr %1079, align 8, !tbaa !16
  %1081 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1080, i32 0, i32 6
  %1082 = load i32, ptr %1081, align 8, !tbaa !16
  store i32 %1082, ptr %29, align 4, !tbaa !9
  %1083 = load ptr, ptr %7, align 8, !tbaa !5
  %1084 = load ptr, ptr %10, align 8, !tbaa !5
  %1085 = load ptr, ptr %9, align 8, !tbaa !5
  %1086 = load ptr, ptr %19, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1086, i32 0, i32 0
  %1088 = load ptr, ptr %1087, align 8, !tbaa !16
  %1089 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %1083, ptr noundef %1084, ptr noundef %1085, ptr noundef %1088, i32 noundef %1089, i32 noundef 0)
  %1090 = load ptr, ptr %7, align 8, !tbaa !5
  %1091 = load i32, ptr %29, align 4, !tbaa !9
  %1092 = load ptr, ptr %10, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1092, i32 0, i32 51
  %1094 = load i32, ptr %1093, align 8, !tbaa !23
  %1095 = mul i32 %1091, %1094
  %1096 = load ptr, ptr %9, align 8, !tbaa !5
  %1097 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1096, i32 0, i32 15
  %1098 = load i32, ptr %1097, align 4, !tbaa !15
  %1099 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %1090, i32 noundef %1095, i32 noundef %1098, i32 noundef %1099)
  %1100 = load ptr, ptr %7, align 8, !tbaa !5
  %1101 = load ptr, ptr %9, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1101, i32 0, i32 15
  %1103 = load i32, ptr %1102, align 4, !tbaa !15
  %1104 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1100, i32 noundef 14, i32 noundef %1103, i32 noundef %1104)
  %1105 = load i32, ptr %21, align 4, !tbaa !9
  %1106 = load ptr, ptr %19, align 8, !tbaa !5
  %1107 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1106, i32 0, i32 5
  %1108 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1107, i32 0, i32 2
  %1109 = load i32, ptr %1108, align 4, !tbaa !16
  %1110 = load i32, ptr %20, align 4, !tbaa !9
  %1111 = load ptr, ptr %19, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1111, i32 0, i32 0
  %1113 = load ptr, ptr %1112, align 8, !tbaa !16
  %1114 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1113, i32 0, i32 8
  %1115 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1114, i32 0, i32 1
  %1116 = load i32, ptr %1115, align 4, !tbaa !16
  %1117 = load ptr, ptr %19, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1117, i32 0, i32 0
  %1119 = load ptr, ptr %1118, align 8, !tbaa !16
  %1120 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1119, i32 0, i32 8
  %1121 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1120, i32 0, i32 2
  %1122 = load i32, ptr %1121, align 8, !tbaa !16
  %1123 = load ptr, ptr %19, align 8, !tbaa !5
  %1124 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1123, i32 0, i32 0
  %1125 = load ptr, ptr %1124, align 8, !tbaa !16
  %1126 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1125, i32 0, i32 8
  %1127 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1126, i32 0, i32 3
  %1128 = load i32, ptr %1127, align 4, !tbaa !16
  %1129 = load ptr, ptr %19, align 8, !tbaa !5
  %1130 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1129, i32 0, i32 0
  %1131 = load ptr, ptr %1130, align 8, !tbaa !16
  %1132 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1131, i32 0, i32 8
  %1133 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1132, i32 0, i32 1
  %1134 = load i32, ptr %1133, align 4, !tbaa !16
  %1135 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %1105, i32 noundef 15, i32 noundef 15, i32 noundef %1109, i32 noundef %1110, i32 noundef %1116, i32 noundef %1122, i32 noundef %1128, i32 noundef %1134, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 16, i16 noundef zeroext 18, i8 noundef zeroext 1)
  store ptr %1135, ptr %14, align 8, !tbaa !5
  %1136 = load ptr, ptr %7, align 8, !tbaa !5
  %1137 = load ptr, ptr %10, align 8, !tbaa !5
  %1138 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1137, i32 0, i32 59
  %1139 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %1136, ptr noundef %1138, ptr noundef %1139)
  %1140 = load ptr, ptr %7, align 8, !tbaa !5
  %1141 = load ptr, ptr %11, align 8, !tbaa !5
  %1142 = load ptr, ptr %9, align 8, !tbaa !5
  %1143 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1142, i32 0, i32 18
  %1144 = load ptr, ptr %10, align 8, !tbaa !5
  %1145 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1144, i32 0, i32 59
  %1146 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %1140, ptr noundef %1141, ptr noundef %1143, ptr noundef %1145, ptr noundef %1146)
  %1147 = load ptr, ptr %7, align 8, !tbaa !5
  %1148 = load i32, ptr %29, align 4, !tbaa !9
  %1149 = load ptr, ptr %10, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1149, i32 0, i32 51
  %1151 = load i32, ptr %1150, align 8, !tbaa !23
  %1152 = mul i32 %1148, %1151
  %1153 = load ptr, ptr %9, align 8, !tbaa !5
  %1154 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1153, i32 0, i32 15
  %1155 = load i32, ptr %1154, align 4, !tbaa !15
  %1156 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %1147, i32 noundef %1152, i32 noundef %1155, i32 noundef %1156)
  %1157 = load ptr, ptr %7, align 8, !tbaa !5
  %1158 = load ptr, ptr %9, align 8, !tbaa !5
  %1159 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1158, i32 0, i32 15
  %1160 = load i32, ptr %1159, align 4, !tbaa !15
  %1161 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1157, i32 noundef 8, i32 noundef %1160, i32 noundef %1161)
  %1162 = load i32, ptr %15, align 4, !tbaa !9
  %1163 = load i32, ptr %16, align 4, !tbaa !9
  %1164 = icmp eq i32 %1162, %1163
  br i1 %1164, label %1165, label %1171

1165:                                             ; preds = %1077
  %1166 = load ptr, ptr %7, align 8, !tbaa !5
  %1167 = load ptr, ptr %9, align 8, !tbaa !5
  %1168 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1167, i32 0, i32 0
  %1169 = load i32, ptr %1168, align 4, !tbaa !28
  %1170 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1166, i32 noundef -1186988026, i32 noundef %1169, i32 noundef 127, i32 noundef 16, i32 noundef %1170)
  br label %1185

1171:                                             ; preds = %1077
  %1172 = load ptr, ptr %7, align 8, !tbaa !5
  %1173 = load ptr, ptr %19, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1173, i32 0, i32 8
  %1175 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1174, i32 0, i32 0
  %1176 = load i32, ptr %1175, align 8, !tbaa !16
  %1177 = load ptr, ptr %10, align 8, !tbaa !5
  %1178 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1177, i32 0, i32 51
  %1179 = load i32, ptr %1178, align 8, !tbaa !23
  %1180 = mul i32 %1176, %1179
  %1181 = load ptr, ptr %9, align 8, !tbaa !5
  %1182 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1181, i32 0, i32 15
  %1183 = load i32, ptr %1182, align 4, !tbaa !15
  %1184 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %1172, i32 noundef %1180, i32 noundef %1183, i32 noundef %1184)
  br label %1185

1185:                                             ; preds = %1171, %1165
  %1186 = load ptr, ptr %7, align 8, !tbaa !5
  %1187 = load ptr, ptr %9, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1187, i32 0, i32 15
  %1189 = load i32, ptr %1188, align 4, !tbaa !15
  %1190 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1186, i32 noundef 14, i32 noundef %1189, i32 noundef %1190)
  %1191 = load i32, ptr %21, align 4, !tbaa !9
  %1192 = load ptr, ptr %19, align 8, !tbaa !5
  %1193 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1192, i32 0, i32 5
  %1194 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1193, i32 0, i32 2
  %1195 = load i32, ptr %1194, align 4, !tbaa !16
  %1196 = load i32, ptr %20, align 4, !tbaa !9
  %1197 = load ptr, ptr %19, align 8, !tbaa !5
  %1198 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1197, i32 0, i32 0
  %1199 = load ptr, ptr %1198, align 8, !tbaa !16
  %1200 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1199, i32 0, i32 8
  %1201 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1200, i32 0, i32 1
  %1202 = load i32, ptr %1201, align 4, !tbaa !16
  %1203 = load ptr, ptr %19, align 8, !tbaa !5
  %1204 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1203, i32 0, i32 0
  %1205 = load ptr, ptr %1204, align 8, !tbaa !16
  %1206 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1205, i32 0, i32 8
  %1207 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1206, i32 0, i32 1
  %1208 = load i32, ptr %1207, align 4, !tbaa !16
  %1209 = load ptr, ptr %19, align 8, !tbaa !5
  %1210 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1209, i32 0, i32 8
  %1211 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1210, i32 0, i32 3
  %1212 = load i32, ptr %1211, align 4, !tbaa !16
  %1213 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef %13, i32 noundef %1191, i32 noundef 15, i32 noundef 15, i32 noundef %1195, i32 noundef %1196, i32 noundef %1202, i32 noundef 1, i32 noundef %1208, i32 noundef %1212, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 32, i16 noundef zeroext 18, i8 noundef zeroext 1)
  store ptr %1213, ptr %14, align 8, !tbaa !5
  %1214 = load ptr, ptr %7, align 8, !tbaa !5
  %1215 = load ptr, ptr %10, align 8, !tbaa !5
  %1216 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1215, i32 0, i32 59
  %1217 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %1214, ptr noundef %1216, ptr noundef %1217)
  %1218 = load ptr, ptr %7, align 8, !tbaa !5
  %1219 = load ptr, ptr %11, align 8, !tbaa !5
  %1220 = load ptr, ptr %9, align 8, !tbaa !5
  %1221 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1220, i32 0, i32 18
  %1222 = load ptr, ptr %10, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1222, i32 0, i32 59
  %1224 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %1218, ptr noundef %1219, ptr noundef %1221, ptr noundef %1223, ptr noundef %1224)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %1379

1225:                                             ; preds = %1071, %1066
  %1226 = load ptr, ptr %19, align 8, !tbaa !5
  %1227 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1226, i32 0, i32 4
  %1228 = load i32, ptr %1227, align 8, !tbaa !16
  %1229 = icmp eq i32 %1228, 1
  br i1 %1229, label %1230, label %1336

1230:                                             ; preds = %1225
  %1231 = load ptr, ptr %7, align 8, !tbaa !5
  %1232 = load ptr, ptr %10, align 8, !tbaa !5
  %1233 = load ptr, ptr %9, align 8, !tbaa !5
  %1234 = load ptr, ptr %19, align 8, !tbaa !5
  %1235 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1234, i32 0, i32 0
  %1236 = load ptr, ptr %1235, align 8, !tbaa !16
  %1237 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %1231, ptr noundef %1232, ptr noundef %1233, ptr noundef %1236, i32 noundef %1237, i32 noundef 0)
  %1238 = load ptr, ptr %7, align 8, !tbaa !5
  %1239 = load ptr, ptr %10, align 8, !tbaa !5
  %1240 = load ptr, ptr %9, align 8, !tbaa !5
  %1241 = load ptr, ptr %19, align 8, !tbaa !5
  %1242 = load i32, ptr %17, align 4, !tbaa !9
  %1243 = load i32, ptr %15, align 4, !tbaa !9
  %1244 = load i32, ptr %16, align 4, !tbaa !9
  %1245 = icmp eq i32 %1243, %1244
  %1246 = zext i1 %1245 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %1238, ptr noundef %1239, ptr noundef %1240, ptr noundef %1241, i32 noundef %1242, i32 noundef %1246)
  %1247 = load ptr, ptr %19, align 8, !tbaa !5
  %1248 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1247, i32 0, i32 5
  %1249 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1248, i32 0, i32 0
  %1250 = load i32, ptr %1249, align 4, !tbaa !16
  %1251 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %1250)
  %1252 = icmp sgt i32 %1251, 0
  br i1 %1252, label %1253, label %1275

1253:                                             ; preds = %1230
  %1254 = load ptr, ptr %7, align 8, !tbaa !5
  %1255 = load i32, ptr %17, align 4, !tbaa !9
  %1256 = load ptr, ptr %19, align 8, !tbaa !5
  %1257 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1256, i32 0, i32 0
  %1258 = load ptr, ptr %1257, align 8, !tbaa !16
  %1259 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1258, i32 0, i32 8
  %1260 = getelementptr inbounds %struct.libxsmm_meqn_tmp_info, ptr %1259, i32 0, i32 2
  %1261 = load i32, ptr %1260, align 8, !tbaa !16
  %1262 = sext i32 %1261 to i64
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %1254, i32 noundef %1255, i64 noundef %1262)
  %1263 = load ptr, ptr %7, align 8, !tbaa !5
  %1264 = load ptr, ptr %9, align 8, !tbaa !5
  %1265 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1264, i32 0, i32 15
  %1266 = load i32, ptr %1265, align 4, !tbaa !15
  %1267 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1263, i32 noundef 11, i32 noundef %1266, i32 noundef %1267)
  %1268 = load ptr, ptr %7, align 8, !tbaa !5
  %1269 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getaddr_stack_var_aarch64(ptr noundef %1268, i32 noundef 11, i32 noundef %1269)
  %1270 = load ptr, ptr %7, align 8, !tbaa !5
  %1271 = load ptr, ptr %9, align 8, !tbaa !5
  %1272 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1271, i32 0, i32 15
  %1273 = load i32, ptr %1272, align 4, !tbaa !15
  %1274 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1270, i32 noundef 10, i32 noundef %1273, i32 noundef %1274)
  br label %1275

1275:                                             ; preds = %1253, %1230
  %1276 = load ptr, ptr %12, align 8, !tbaa !5
  %1277 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %1276, i32 0, i32 0
  %1278 = load ptr, ptr %1277, align 8, !tbaa !16
  %1279 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1278, i32 0, i32 4
  %1280 = load i32, ptr %1279, align 8, !tbaa !16
  %1281 = icmp eq i32 %1280, 1
  br i1 %1281, label %1282, label %1302

1282:                                             ; preds = %1275
  %1283 = load ptr, ptr %12, align 8, !tbaa !5
  %1284 = getelementptr inbounds %struct.libxsmm_matrix_eqn, ptr %1283, i32 0, i32 0
  %1285 = load ptr, ptr %1284, align 8, !tbaa !16
  %1286 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1285, i32 0, i32 5
  %1287 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1286, i32 0, i32 0
  %1288 = load i32, ptr %1287, align 4, !tbaa !16
  %1289 = icmp eq i32 %1288, 33
  br i1 %1289, label %1290, label %1302

1290:                                             ; preds = %1282
  %1291 = load i32, ptr %15, align 4, !tbaa !9
  %1292 = load i32, ptr %16, align 4, !tbaa !9
  %1293 = icmp eq i32 %1291, %1292
  br i1 %1293, label %1294, label %1302

1294:                                             ; preds = %1290
  %1295 = load ptr, ptr %7, align 8, !tbaa !5
  %1296 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_getval_stack_var_aarch64(ptr noundef %1295, i32 noundef 29, i32 noundef %1296)
  %1297 = load ptr, ptr %7, align 8, !tbaa !5
  %1298 = load ptr, ptr %9, align 8, !tbaa !5
  %1299 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1298, i32 0, i32 15
  %1300 = load i32, ptr %1299, align 4, !tbaa !15
  %1301 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1297, i32 noundef 15, i32 noundef %1300, i32 noundef %1301)
  br label %1302

1302:                                             ; preds = %1294, %1290, %1282, %1275
  %1303 = load ptr, ptr %19, align 8, !tbaa !5
  %1304 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1303, i32 0, i32 4
  %1305 = load i32, ptr %1304, align 8, !tbaa !16
  %1306 = icmp eq i32 %1305, 1
  br i1 %1306, label %1307, label %1332

1307:                                             ; preds = %1302
  %1308 = load ptr, ptr %19, align 8, !tbaa !5
  %1309 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1308, i32 0, i32 5
  %1310 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1309, i32 0, i32 0
  %1311 = load i32, ptr %1310, align 4, !tbaa !16
  %1312 = icmp eq i32 %1311, 63
  br i1 %1312, label %1313, label %1332

1313:                                             ; preds = %1307
  %1314 = load ptr, ptr %7, align 8, !tbaa !5
  %1315 = load ptr, ptr %9, align 8, !tbaa !5
  %1316 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1315, i32 0, i32 0
  %1317 = load i32, ptr %1316, align 4, !tbaa !28
  %1318 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1314, i32 noundef -1186988026, i32 noundef %1317, i32 noundef 127, i32 noundef 0, i32 noundef %1318)
  %1319 = load ptr, ptr %7, align 8, !tbaa !5
  %1320 = load i32, ptr %17, align 4, !tbaa !9
  %1321 = load ptr, ptr %19, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1321, i32 0, i32 5
  %1323 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1322, i32 0, i32 3
  %1324 = load i32, ptr %1323, align 4, !tbaa !16
  %1325 = mul nsw i32 %1324, 32
  %1326 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %1319, i32 noundef -1186988026, i32 noundef %1320, i32 noundef 127, i32 noundef %1325, i32 noundef %1326)
  %1327 = load ptr, ptr %7, align 8, !tbaa !5
  %1328 = load ptr, ptr %9, align 8, !tbaa !5
  %1329 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1328, i32 0, i32 15
  %1330 = load i32, ptr %1329, align 4, !tbaa !15
  %1331 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %1327, i32 noundef 15, i32 noundef %1330, i32 noundef %1331)
  br label %1332

1332:                                             ; preds = %1313, %1307, %1302
  %1333 = load ptr, ptr %19, align 8, !tbaa !5
  %1334 = load i32, ptr %21, align 4, !tbaa !9
  %1335 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_create_unary_descriptor(ptr noundef %13, ptr noundef %1333, ptr noundef %14, i32 noundef %1334, i32 noundef %1335)
  br label %1378

1336:                                             ; preds = %1225
  %1337 = load ptr, ptr %19, align 8, !tbaa !5
  %1338 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1337, i32 0, i32 4
  %1339 = load i32, ptr %1338, align 8, !tbaa !16
  %1340 = icmp eq i32 %1339, 2
  br i1 %1340, label %1341, label %1368

1341:                                             ; preds = %1336
  %1342 = load ptr, ptr %7, align 8, !tbaa !5
  %1343 = load ptr, ptr %10, align 8, !tbaa !5
  %1344 = load ptr, ptr %9, align 8, !tbaa !5
  %1345 = load ptr, ptr %19, align 8, !tbaa !5
  %1346 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1345, i32 0, i32 0
  %1347 = load ptr, ptr %1346, align 8, !tbaa !16
  %1348 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %1342, ptr noundef %1343, ptr noundef %1344, ptr noundef %1347, i32 noundef %1348, i32 noundef 0)
  %1349 = load ptr, ptr %7, align 8, !tbaa !5
  %1350 = load ptr, ptr %10, align 8, !tbaa !5
  %1351 = load ptr, ptr %9, align 8, !tbaa !5
  %1352 = load ptr, ptr %19, align 8, !tbaa !5
  %1353 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1352, i32 0, i32 1
  %1354 = load ptr, ptr %1353, align 8, !tbaa !16
  %1355 = load i32, ptr %17, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %1349, ptr noundef %1350, ptr noundef %1351, ptr noundef %1354, i32 noundef %1355, i32 noundef 1)
  %1356 = load ptr, ptr %7, align 8, !tbaa !5
  %1357 = load ptr, ptr %10, align 8, !tbaa !5
  %1358 = load ptr, ptr %9, align 8, !tbaa !5
  %1359 = load ptr, ptr %19, align 8, !tbaa !5
  %1360 = load i32, ptr %17, align 4, !tbaa !9
  %1361 = load i32, ptr %15, align 4, !tbaa !9
  %1362 = load i32, ptr %16, align 4, !tbaa !9
  %1363 = icmp eq i32 %1361, %1362
  %1364 = zext i1 %1363 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %1356, ptr noundef %1357, ptr noundef %1358, ptr noundef %1359, i32 noundef %1360, i32 noundef %1364)
  %1365 = load ptr, ptr %19, align 8, !tbaa !5
  %1366 = load i32, ptr %21, align 4, !tbaa !9
  %1367 = load i32, ptr %20, align 4, !tbaa !9
  call void @libxsmm_generator_matequation_create_binary_descriptor(ptr noundef %13, ptr noundef %1365, ptr noundef %14, i32 noundef %1366, i32 noundef %1367)
  br label %1377

1368:                                             ; preds = %1336
  %1369 = load ptr, ptr %7, align 8, !tbaa !5
  %1370 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %1371 = icmp ult i32 1, %1370
  br i1 %1371, label %1372, label %1374

1372:                                             ; preds = %1368
  %1373 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %1375

1374:                                             ; preds = %1368
  br label %1375

1375:                                             ; preds = %1374, %1372
  %1376 = phi i32 [ %1373, %1372 ], [ 1, %1374 ]
  call void @libxsmm_handle_error(ptr noundef %1369, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel, ptr noundef @.str.6, i32 noundef 424, i32 noundef %1376)
  store i32 1, ptr %18, align 4
  br label %1544

1377:                                             ; preds = %1341
  br label %1378

1378:                                             ; preds = %1377, %1332
  br label %1379

1379:                                             ; preds = %1378, %1185
  br label %1380

1380:                                             ; preds = %1379, %1026
  br label %1381

1381:                                             ; preds = %1380, %820
  %1382 = load ptr, ptr %7, align 8, !tbaa !5
  %1383 = load ptr, ptr %10, align 8, !tbaa !5
  %1384 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1383, i32 0, i32 59
  %1385 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %1382, ptr noundef %1384, ptr noundef %1385)
  %1386 = load ptr, ptr %19, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1386, i32 0, i32 4
  %1388 = load i32, ptr %1387, align 8, !tbaa !16
  %1389 = icmp eq i32 %1388, 1
  br i1 %1389, label %1390, label %1438

1390:                                             ; preds = %1381
  %1391 = load ptr, ptr %14, align 8, !tbaa !5
  %1392 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1391, i32 0, i32 10
  %1393 = load i16, ptr %1392, align 1, !tbaa !29
  %1394 = zext i16 %1393 to i32
  %1395 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_kernel(i32 noundef %1394)
  %1396 = icmp sgt i32 %1395, 0
  br i1 %1396, label %1397, label %1438

1397:                                             ; preds = %1390
  %1398 = load ptr, ptr %14, align 8, !tbaa !5
  %1399 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1398, i32 0, i32 9
  %1400 = load i16, ptr %1399, align 1, !tbaa !31
  %1401 = zext i16 %1400 to i32
  %1402 = and i32 %1401, 32
  %1403 = icmp sgt i32 %1402, 0
  br i1 %1403, label %1404, label %1412

1404:                                             ; preds = %1397
  %1405 = load ptr, ptr %7, align 8, !tbaa !5
  %1406 = load ptr, ptr %11, align 8, !tbaa !5
  %1407 = load ptr, ptr %9, align 8, !tbaa !5
  %1408 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1407, i32 0, i32 18
  %1409 = load ptr, ptr %10, align 8, !tbaa !5
  %1410 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1409, i32 0, i32 59
  %1411 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %1405, ptr noundef %1406, ptr noundef %1408, ptr noundef %1410, ptr noundef %1411)
  br label %1437

1412:                                             ; preds = %1397
  %1413 = load ptr, ptr %14, align 8, !tbaa !5
  %1414 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1413, i32 0, i32 9
  %1415 = load i16, ptr %1414, align 1, !tbaa !31
  %1416 = zext i16 %1415 to i32
  %1417 = and i32 %1416, 16
  %1418 = icmp sgt i32 %1417, 0
  br i1 %1418, label %1419, label %1427

1419:                                             ; preds = %1412
  %1420 = load ptr, ptr %7, align 8, !tbaa !5
  %1421 = load ptr, ptr %11, align 8, !tbaa !5
  %1422 = load ptr, ptr %9, align 8, !tbaa !5
  %1423 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1422, i32 0, i32 18
  %1424 = load ptr, ptr %10, align 8, !tbaa !5
  %1425 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1424, i32 0, i32 59
  %1426 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %1420, ptr noundef %1421, ptr noundef %1423, ptr noundef %1425, ptr noundef %1426)
  br label %1436

1427:                                             ; preds = %1412
  %1428 = load ptr, ptr %7, align 8, !tbaa !5
  %1429 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !9
  %1430 = icmp ult i32 1, %1429
  br i1 %1430, label %1431, label %1433

1431:                                             ; preds = %1427
  %1432 = load i32, ptr @libxsmm_verbosity, align 4, !tbaa !9
  br label %1434

1433:                                             ; preds = %1427
  br label %1434

1434:                                             ; preds = %1433, %1431
  %1435 = phi i32 [ %1432, %1431 ], [ 1, %1433 ]
  call void @libxsmm_handle_error(ptr noundef %1428, i32 noundef 90000, ptr noundef @__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel, ptr noundef @.str.6, i32 noundef 459, i32 noundef %1435)
  store i32 1, ptr %18, align 4
  br label %1544

1436:                                             ; preds = %1419
  br label %1437

1437:                                             ; preds = %1436, %1404
  br label %1543

1438:                                             ; preds = %1390, %1381
  %1439 = load ptr, ptr %19, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1439, i32 0, i32 4
  %1441 = load i32, ptr %1440, align 8, !tbaa !16
  %1442 = icmp eq i32 %1441, 1
  br i1 %1442, label %1443, label %1458

1443:                                             ; preds = %1438
  %1444 = load ptr, ptr %14, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1444, i32 0, i32 10
  %1446 = load i16, ptr %1445, align 1, !tbaa !29
  %1447 = zext i16 %1446 to i32
  %1448 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %1447)
  %1449 = icmp sgt i32 %1448, 0
  br i1 %1449, label %1450, label %1458

1450:                                             ; preds = %1443
  %1451 = load ptr, ptr %7, align 8, !tbaa !5
  %1452 = load ptr, ptr %11, align 8, !tbaa !5
  %1453 = load ptr, ptr %9, align 8, !tbaa !5
  %1454 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1453, i32 0, i32 18
  %1455 = load ptr, ptr %10, align 8, !tbaa !5
  %1456 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1455, i32 0, i32 59
  %1457 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_index_aarch64_microkernel(ptr noundef %1451, ptr noundef %1452, ptr noundef %1454, ptr noundef %1456, ptr noundef %1457)
  br label %1542

1458:                                             ; preds = %1443, %1438
  %1459 = load ptr, ptr %19, align 8, !tbaa !5
  %1460 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1459, i32 0, i32 4
  %1461 = load i32, ptr %1460, align 8, !tbaa !16
  %1462 = icmp eq i32 %1461, 1
  br i1 %1462, label %1463, label %1478

1463:                                             ; preds = %1458
  %1464 = load ptr, ptr %14, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.libxsmm_meltw_descriptor, ptr %1464, i32 0, i32 10
  %1466 = load i16, ptr %1465, align 1, !tbaa !29
  %1467 = zext i16 %1466 to i32
  %1468 = call i32 @libxsmm_meqn_is_unary_opcode_transform_kernel(i32 noundef %1467)
  %1469 = icmp sgt i32 %1468, 0
  br i1 %1469, label %1470, label %1478

1470:                                             ; preds = %1463
  %1471 = load ptr, ptr %7, align 8, !tbaa !5
  %1472 = load ptr, ptr %11, align 8, !tbaa !5
  %1473 = load ptr, ptr %9, align 8, !tbaa !5
  %1474 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1473, i32 0, i32 18
  %1475 = load ptr, ptr %10, align 8, !tbaa !5
  %1476 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1475, i32 0, i32 59
  %1477 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_transform_aarch64_microkernel(ptr noundef %1471, ptr noundef %1472, ptr noundef %1474, ptr noundef %1476, ptr noundef %1477)
  br label %1541

1478:                                             ; preds = %1463, %1458
  %1479 = load ptr, ptr %19, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1479, i32 0, i32 4
  %1481 = load i32, ptr %1480, align 8, !tbaa !16
  %1482 = icmp eq i32 %1481, 1
  br i1 %1482, label %1483, label %1503

1483:                                             ; preds = %1478
  %1484 = load ptr, ptr %19, align 8, !tbaa !5
  %1485 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1484, i32 0, i32 5
  %1486 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1485, i32 0, i32 0
  %1487 = load i32, ptr %1486, align 4, !tbaa !16
  %1488 = icmp eq i32 %1487, 51
  br i1 %1488, label %1495, label %1489

1489:                                             ; preds = %1483
  %1490 = load ptr, ptr %19, align 8, !tbaa !5
  %1491 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1490, i32 0, i32 5
  %1492 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1491, i32 0, i32 0
  %1493 = load i32, ptr %1492, align 4, !tbaa !16
  %1494 = icmp eq i32 %1493, 52
  br i1 %1494, label %1495, label %1503

1495:                                             ; preds = %1489, %1483
  %1496 = load ptr, ptr %7, align 8, !tbaa !5
  %1497 = load ptr, ptr %11, align 8, !tbaa !5
  %1498 = load ptr, ptr %9, align 8, !tbaa !5
  %1499 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1498, i32 0, i32 18
  %1500 = load ptr, ptr %10, align 8, !tbaa !5
  %1501 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1500, i32 0, i32 59
  %1502 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_gather_scatter_aarch64_microkernel(ptr noundef %1496, ptr noundef %1497, ptr noundef %1499, ptr noundef %1501, ptr noundef %1502)
  br label %1540

1503:                                             ; preds = %1489, %1478
  %1504 = load ptr, ptr %19, align 8, !tbaa !5
  %1505 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1504, i32 0, i32 4
  %1506 = load i32, ptr %1505, align 8, !tbaa !16
  %1507 = icmp eq i32 %1506, 4
  br i1 %1507, label %1530, label %1508

1508:                                             ; preds = %1503
  %1509 = load ptr, ptr %19, align 8, !tbaa !5
  %1510 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1509, i32 0, i32 4
  %1511 = load i32, ptr %1510, align 8, !tbaa !16
  %1512 = icmp eq i32 %1511, 2
  br i1 %1512, label %1513, label %1519

1513:                                             ; preds = %1508
  %1514 = load ptr, ptr %19, align 8, !tbaa !5
  %1515 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1514, i32 0, i32 5
  %1516 = getelementptr inbounds %struct.libxsmm_meqn_binary_op, ptr %1515, i32 0, i32 0
  %1517 = load i32, ptr %1516, align 4, !tbaa !16
  %1518 = icmp eq i32 %1517, 7
  br i1 %1518, label %1530, label %1519

1519:                                             ; preds = %1513, %1508
  %1520 = load ptr, ptr %19, align 8, !tbaa !5
  %1521 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1520, i32 0, i32 4
  %1522 = load i32, ptr %1521, align 8, !tbaa !16
  %1523 = icmp eq i32 %1522, 1
  br i1 %1523, label %1524, label %1531

1524:                                             ; preds = %1519
  %1525 = load ptr, ptr %19, align 8, !tbaa !5
  %1526 = getelementptr inbounds %struct.libxsmm_meqn_elem, ptr %1525, i32 0, i32 5
  %1527 = getelementptr inbounds %struct.libxsmm_meqn_unary_op, ptr %1526, i32 0, i32 0
  %1528 = load i32, ptr %1527, align 4, !tbaa !16
  %1529 = icmp eq i32 %1528, 24
  br i1 %1529, label %1530, label %1531

1530:                                             ; preds = %1524, %1513, %1503
  br label %1539

1531:                                             ; preds = %1524, %1519
  %1532 = load ptr, ptr %7, align 8, !tbaa !5
  %1533 = load ptr, ptr %11, align 8, !tbaa !5
  %1534 = load ptr, ptr %9, align 8, !tbaa !5
  %1535 = getelementptr inbounds %struct.libxsmm_matequation_gp_reg_mapping_struct, ptr %1534, i32 0, i32 18
  %1536 = load ptr, ptr %10, align 8, !tbaa !5
  %1537 = getelementptr inbounds %struct.libxsmm_matequation_kernel_config_struct, ptr %1536, i32 0, i32 59
  %1538 = load ptr, ptr %14, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %1532, ptr noundef %1533, ptr noundef %1535, ptr noundef %1537, ptr noundef %1538)
  br label %1539

1539:                                             ; preds = %1531, %1530
  br label %1540

1540:                                             ; preds = %1539, %1495
  br label %1541

1541:                                             ; preds = %1540, %1470
  br label %1542

1542:                                             ; preds = %1541, %1450
  br label %1543

1543:                                             ; preds = %1542, %1437
  store i32 0, ptr %18, align 4
  br label %1544

1544:                                             ; preds = %1543, %1434, %1375
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  %1545 = load i32, ptr %18, align 4
  switch i32 %1545, label %1551 [
    i32 0, label %1546
  ]

1546:                                             ; preds = %1544
  br label %1547

1547:                                             ; preds = %1546
  %1548 = load i32, ptr %15, align 4, !tbaa !9
  %1549 = add i32 %1548, 1
  store i32 %1549, ptr %15, align 4, !tbaa !9
  br label %55, !llvm.loop !32

1550:                                             ; preds = %55
  store i32 0, ptr %18, align 4
  br label %1551

1551:                                             ; preds = %1550, %1544, %37
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 96, ptr %13) #5
  %1552 = load i32, ptr %18, align 4
  switch i32 %1552, label %1554 [
    i32 0, label %1553
    i32 1, label %1553
  ]

1553:                                             ; preds = %1551, %1551
  ret void

1554:                                             ; preds = %1551
  unreachable
}

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

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

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

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

declare ptr @libxsmm_meltw_descriptor_init2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) #1

declare void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef, ptr noundef, ptr noundef) #1

declare void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

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

declare void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

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

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

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

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

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_kernel(i32 noundef) #1

declare void @libxsmm_generator_reduce_cols_index_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @libxsmm_meqn_is_unary_opcode_transform_kernel(i32 noundef) #1

declare void @libxsmm_generator_transform_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare void @libxsmm_generator_gather_scatter_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind "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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #5 = { nounwind }
attributes #6 = { 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 48}
!12 = !{!"libxsmm_matequation_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, !13, i64 72, !14, i64 220}
!13 = !{!"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}
!14 = !{!"libxsmm_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}
!15 = !{!12, !10, i64 60}
!16 = !{!7, !7, i64 0}
!17 = !{!12, !10, i64 72}
!18 = !{!19, !7, i64 12}
!19 = !{!"libxsmm_meqn_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !7, i64 12, !10, i64 13}
!20 = !{!19, !10, i64 8}
!21 = !{!22, !22, i64 0}
!22 = !{!"short", !7, i64 0}
!23 = !{!24, !10, i64 328}
!24 = !{!"libxsmm_matequation_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, !7, 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, !7, i64 188, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !6, i64 336, !6, i64 344, !10, i64 352, !10, i64 356, !10, i64 360, !7, i64 364, !7, i64 620, !25, i64 876, !26, i64 1392}
!25 = !{!"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}
!26 = !{!"libxsmm_micro_kernel_config", !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, !7, 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, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !10, i64 460, !7, i64 464, !27, i64 520, !10, i64 556, !10, i64 560, !10, i64 564, !10, i64 568, !10, i64 572, !10, i64 576, !10, i64 580, !10, i64 584, !6, i64 592, !10, i64 600, !10, i64 604, !10, i64 608, !10, i64 612, !6, i64 616, !10, i64 624, !10, i64 628, !10, i64 632, !10, i64 636, !10, i64 640, !10, i64 644, !10, i64 648, !10, i64 652, !10, i64 656, !10, i64 660, !10, i64 664, !10, i64 668, !10, i64 672, !10, i64 676, !10, i64 680}
!27 = !{!"libxsmm_tile_config", !7, i64 0, !22, i64 2, !7, i64 4, !22, i64 6, !7, i64 8, !22, i64 10, !7, i64 12, !22, i64 14, !7, i64 16, !22, i64 18, !7, i64 20, !22, i64 22, !7, i64 24, !22, i64 26, !7, i64 28, !22, i64 30, !7, i64 32}
!28 = !{!12, !10, i64 0}
!29 = !{!30, !22, i64 29}
!30 = !{!"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, !22, i64 27, !22, i64 29, !7, i64 31}
!31 = !{!30, !22, i64 27}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}


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

%struct.libxsmm_descriptor_blob = type { [96 x i8] }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [93 x i8], align 1
@__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel = external hidden unnamed_addr constant [63 x i8], align 1
@libxsmm_ninit = external local_unnamed_addr global i32, align 4
@libxsmm_verbosity = external local_unnamed_addr global i32, align 4
@switch.table.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel = private unnamed_addr constant [15 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14], align 4

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef readonly %5) local_unnamed_addr #0 {
  %7 = alloca %struct.libxsmm_descriptor_blob, align 1
  %8 = alloca ptr, align 8
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  store ptr null, ptr %8, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %2, i64 48
  store i32 58, ptr %9, align 4, !tbaa !9
  %10 = getelementptr inbounds i8, ptr %2, i64 60
  store i32 59, ptr %10, align 4, !tbaa !14
  %11 = icmp eq ptr %5, null
  br i1 %11, label %12, label %15

12:                                               ; preds = %6
  %13 = load ptr, ptr @stderr, align 8, !tbaa !5
  %14 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %13, ptr noundef nonnull @.str.4) #5
  br label %.critedge

15:                                               ; preds = %6
  %16 = load ptr, ptr %5, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %16, i64 84
  %18 = load i32, ptr %17, align 4, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %2, i64 72
  store i32 60, ptr %19, align 4, !tbaa !16
  tail call void @libxsmm_generator_meqn_getaddr_stack_var_aarch64(ptr noundef %0, i32 noundef 4, i32 noundef 60) #4
  %20 = getelementptr inbounds i8, ptr %1, i64 12
  %21 = getelementptr inbounds i8, ptr %1, i64 8
  %22 = getelementptr inbounds i8, ptr %3, i64 328
  %23 = getelementptr inbounds i8, ptr %3, i64 876
  br label %24

24:                                               ; preds = %15, %414
  %.0579 = phi i32 [ 0, %15 ], [ %415, %414 ]
  %25 = load ptr, ptr %5, align 8, !tbaa !15
  %26 = call ptr @libxsmm_generator_matequation_find_op_at_timestamp(ptr noundef %25, i32 noundef %.0579) #4
  %27 = load ptr, ptr %26, align 8, !tbaa !15
  %28 = getelementptr inbounds i8, ptr %27, i64 104
  %29 = load i32, ptr %28, align 8, !tbaa !15
  %30 = icmp eq i32 %.0579, %18
  br i1 %30, label %31, label %43

31:                                               ; preds = %24
  %32 = load i8, ptr %20, align 1, !tbaa !17
  %33 = icmp ult i8 %32, 16
  br i1 %33, label %34, label %35

34:                                               ; preds = %31
  %.not581 = icmp eq i8 %32, 15
  br i1 %.not581, label %39, label %switch.lookup

35:                                               ; preds = %31
  %36 = lshr i8 %32, 4
  %37 = zext nneg i8 %36 to i32
  br label %39

switch.lookup:                                    ; preds = %34
  %38 = zext nneg i8 %32 to i64
  %switch.gep = getelementptr inbounds [15 x i32], ptr @switch.table.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel, i64 0, i64 %38
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %39

39:                                               ; preds = %34, %switch.lookup, %35
  %40 = phi i32 [ %37, %35 ], [ %switch.load, %switch.lookup ], [ 15, %34 ]
  %41 = load i32, ptr %21, align 1, !tbaa !19
  %42 = getelementptr inbounds i8, ptr %26, i64 100
  store i32 %41, ptr %42, align 4, !tbaa !15
  br label %46

43:                                               ; preds = %24
  %44 = getelementptr inbounds i8, ptr %26, i64 104
  %45 = load i32, ptr %44, align 8, !tbaa !15
  br label %46

46:                                               ; preds = %43, %39
  %.0511 = phi i32 [ %40, %39 ], [ %45, %43 ]
  %47 = getelementptr inbounds i8, ptr %26, i64 32
  %48 = load i32, ptr %47, align 8, !tbaa !15
  switch i32 %48, label %347 [
    i32 4, label %49
    i32 2, label %196
    i32 1, label %264
  ]

49:                                               ; preds = %46
  %50 = getelementptr inbounds i8, ptr %26, i64 36
  %51 = load i32, ptr %50, align 4, !tbaa !15
  switch i32 %51, label %190 [
    i32 4, label %52
    i32 1, label %121
  ]

52:                                               ; preds = %49
  %53 = load ptr, ptr %5, align 8, !tbaa !15
  %54 = getelementptr inbounds i8, ptr %53, i64 80
  %55 = load i32, ptr %54, align 8, !tbaa !15
  %56 = getelementptr inbounds i8, ptr %26, i64 40
  %57 = load i32, ptr %56, align 4, !tbaa !15
  %58 = and i32 %57, 1
  %.not534 = icmp eq i32 %58, 0
  br i1 %.not534, label %59, label %64

59:                                               ; preds = %52
  %60 = and i32 %57, 8
  %.not535 = icmp eq i32 %60, 0
  br i1 %.not535, label %61, label %64

61:                                               ; preds = %59
  %62 = trunc i32 %57 to i16
  %63 = lshr i16 %62, 2
  %spec.select = and i16 %63, 16
  br label %64

64:                                               ; preds = %61, %59, %52
  %.0513 = phi i16 [ 1, %52 ], [ 4, %59 ], [ %spec.select, %61 ]
  %65 = and i32 %57, 4
  %.not537 = icmp eq i32 %65, 0
  br i1 %.not537, label %66, label %72

66:                                               ; preds = %64
  %67 = and i32 %57, 32
  %.not538 = icmp eq i32 %67, 0
  br i1 %.not538, label %68, label %72

68:                                               ; preds = %66
  %69 = trunc i32 %57 to i16
  %70 = lshr i16 %69, 3
  %71 = and i16 %70, 32
  br label %72

72:                                               ; preds = %66, %64, %68
  %.sink = phi i16 [ %71, %68 ], [ 2, %64 ], [ 8, %66 ]
  %spec.select558 = or disjoint i16 %.0513, %.sink
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %73 = getelementptr inbounds i8, ptr %26, i64 16
  %74 = load ptr, ptr %73, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %74, i32 noundef 58, i32 noundef 1)
  %75 = load i32, ptr %22, align 8, !tbaa !20
  %76 = mul i32 %75, %55
  %77 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %76, i32 noundef %77, i32 noundef 58) #4
  %78 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 30, i32 noundef %78, i32 noundef 58) #4
  %79 = load ptr, ptr %73, align 8, !tbaa !15
  %80 = getelementptr inbounds i8, ptr %79, i64 104
  %81 = load i32, ptr %80, align 8, !tbaa !15
  %82 = getelementptr inbounds i8, ptr %26, i64 44
  %83 = load i32, ptr %82, align 4, !tbaa !15
  %84 = getelementptr inbounds i8, ptr %26, i64 92
  %85 = load i32, ptr %84, align 4, !tbaa !15
  %86 = getelementptr inbounds i8, ptr %26, i64 96
  %87 = load i32, ptr %86, align 8, !tbaa !15
  %88 = load ptr, ptr %26, align 8, !tbaa !15
  %89 = getelementptr inbounds i8, ptr %88, i64 100
  %90 = load i32, ptr %89, align 4, !tbaa !15
  %91 = getelementptr inbounds i8, ptr %79, i64 100
  %92 = load i32, ptr %91, align 4, !tbaa !15
  %93 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef %81, i32 noundef 15, i32 noundef %83, i32 noundef %.0511, i32 noundef %85, i32 noundef %87, i32 noundef %90, i32 noundef %85, i32 noundef %92, i32 noundef 0, i16 noundef zeroext %spec.select558, i16 noundef zeroext 2, i8 noundef zeroext 2) #4
  store ptr %93, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %93) #4
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %94) #4
  %95 = and i32 %57, 2
  %.not540 = icmp eq i32 %95, 0
  br i1 %.not540, label %96, label %101

96:                                               ; preds = %72
  %97 = and i32 %57, 16
  %.not541 = icmp eq i32 %97, 0
  br i1 %.not541, label %98, label %101

98:                                               ; preds = %96
  %99 = trunc i32 %57 to i16
  %100 = lshr i16 %99, 3
  %spec.select559 = and i16 %100, 16
  br label %101

101:                                              ; preds = %98, %96, %72
  %.2515 = phi i16 [ 1, %72 ], [ 4, %96 ], [ %spec.select559, %98 ]
  %102 = getelementptr inbounds i8, ptr %26, i64 8
  %103 = load ptr, ptr %102, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef %103, i32 noundef 58, i32 noundef 0)
  %104 = load i32, ptr %22, align 8, !tbaa !20
  %105 = mul i32 %104, %55
  %106 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %105, i32 noundef %106, i32 noundef 58) #4
  %107 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %107, i32 noundef 58) #4
  %108 = zext i1 %30 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %26, i32 noundef 58, i32 noundef %108)
  %109 = load ptr, ptr %102, align 8, !tbaa !15
  %110 = getelementptr inbounds i8, ptr %109, i64 104
  %111 = load i32, ptr %110, align 8, !tbaa !15
  %112 = load i32, ptr %82, align 4, !tbaa !15
  %113 = load i32, ptr %84, align 4, !tbaa !15
  %114 = load i32, ptr %86, align 8, !tbaa !15
  %115 = getelementptr inbounds i8, ptr %109, i64 100
  %116 = load i32, ptr %115, align 4, !tbaa !15
  %117 = getelementptr inbounds i8, ptr %26, i64 100
  %118 = load i32, ptr %117, align 4, !tbaa !15
  %119 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %111, i32 noundef %.0511, i32 noundef 15, i32 noundef %112, i32 noundef %.0511, i32 noundef %113, i32 noundef %114, i32 noundef %116, i32 noundef %118, i32 noundef %113, i32 noundef 0, i16 noundef zeroext %.2515, i16 noundef zeroext 3, i8 noundef zeroext 2) #4
  store ptr %119, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %119) #4
  %120 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %120) #4
  br label %352

121:                                              ; preds = %49
  %122 = load ptr, ptr %5, align 8, !tbaa !15
  %123 = getelementptr inbounds i8, ptr %122, i64 80
  %124 = load i32, ptr %123, align 8, !tbaa !15
  %125 = getelementptr inbounds i8, ptr %26, i64 40
  %126 = load i32, ptr %125, align 4, !tbaa !15
  %127 = and i32 %126, 1
  %.not525 = icmp eq i32 %127, 0
  br i1 %.not525, label %128, label %133

128:                                              ; preds = %121
  %129 = and i32 %126, 8
  %.not526 = icmp eq i32 %129, 0
  br i1 %.not526, label %130, label %133

130:                                              ; preds = %128
  %131 = trunc i32 %126 to i16
  %132 = lshr i16 %131, 2
  %spec.select560 = and i16 %132, 16
  br label %133

133:                                              ; preds = %130, %128, %121
  %.0512 = phi i16 [ 1, %121 ], [ 4, %128 ], [ %spec.select560, %130 ]
  %134 = and i32 %126, 2
  %.not528 = icmp eq i32 %134, 0
  br i1 %.not528, label %135, label %141

135:                                              ; preds = %133
  %136 = and i32 %126, 16
  %.not529 = icmp eq i32 %136, 0
  br i1 %.not529, label %137, label %141

137:                                              ; preds = %135
  %138 = trunc i32 %126 to i16
  %139 = lshr i16 %138, 2
  %140 = and i16 %139, 32
  br label %141

141:                                              ; preds = %135, %133, %137
  %.sink580 = phi i16 [ %140, %137 ], [ 2, %133 ], [ 8, %135 ]
  %spec.select561 = or disjoint i16 %.0512, %.sink580
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %142 = getelementptr inbounds i8, ptr %26, i64 8
  %143 = load ptr, ptr %142, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %143, i32 noundef 58, i32 noundef 1)
  %144 = load i32, ptr %22, align 8, !tbaa !20
  %145 = mul i32 %144, %124
  %146 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %145, i32 noundef %146, i32 noundef 58) #4
  %147 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 30, i32 noundef %147, i32 noundef 58) #4
  %148 = load ptr, ptr %142, align 8, !tbaa !15
  %149 = getelementptr inbounds i8, ptr %148, i64 104
  %150 = load i32, ptr %149, align 8, !tbaa !15
  %151 = getelementptr inbounds i8, ptr %26, i64 44
  %152 = load i32, ptr %151, align 4, !tbaa !15
  %153 = getelementptr inbounds i8, ptr %26, i64 92
  %154 = load i32, ptr %153, align 4, !tbaa !15
  %155 = getelementptr inbounds i8, ptr %26, i64 96
  %156 = load i32, ptr %155, align 8, !tbaa !15
  %157 = load ptr, ptr %26, align 8, !tbaa !15
  %158 = getelementptr inbounds i8, ptr %157, i64 100
  %159 = load i32, ptr %158, align 4, !tbaa !15
  %160 = getelementptr inbounds i8, ptr %148, i64 100
  %161 = load i32, ptr %160, align 4, !tbaa !15
  %162 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef %150, i32 noundef 15, i32 noundef %152, i32 noundef %.0511, i32 noundef %154, i32 noundef %156, i32 noundef %159, i32 noundef %154, i32 noundef %161, i32 noundef 0, i16 noundef zeroext %spec.select561, i16 noundef zeroext 2, i8 noundef zeroext 2) #4
  store ptr %162, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %162) #4
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %163) #4
  %164 = and i32 %126, 4
  %.not531 = icmp eq i32 %164, 0
  br i1 %.not531, label %165, label %170

165:                                              ; preds = %141
  %166 = and i32 %126, 32
  %.not532 = icmp eq i32 %166, 0
  br i1 %.not532, label %167, label %170

167:                                              ; preds = %165
  %168 = trunc i32 %126 to i16
  %169 = lshr i16 %168, 4
  %spec.select562 = and i16 %169, 16
  br label %170

170:                                              ; preds = %167, %165, %141
  %.2 = phi i16 [ 1, %141 ], [ 4, %165 ], [ %spec.select562, %167 ]
  %171 = getelementptr inbounds i8, ptr %26, i64 16
  %172 = load ptr, ptr %171, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef %172, i32 noundef 58, i32 noundef 0)
  %173 = load i32, ptr %22, align 8, !tbaa !20
  %174 = mul i32 %173, %124
  %175 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %174, i32 noundef %175, i32 noundef 58) #4
  %176 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %176, i32 noundef 58) #4
  %177 = zext i1 %30 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef nonnull %3, ptr noundef nonnull %2, ptr noundef nonnull %26, i32 noundef 58, i32 noundef %177)
  %178 = load ptr, ptr %171, align 8, !tbaa !15
  %179 = getelementptr inbounds i8, ptr %178, i64 104
  %180 = load i32, ptr %179, align 8, !tbaa !15
  %181 = load i32, ptr %151, align 4, !tbaa !15
  %182 = load i32, ptr %153, align 4, !tbaa !15
  %183 = load i32, ptr %155, align 8, !tbaa !15
  %184 = getelementptr inbounds i8, ptr %178, i64 100
  %185 = load i32, ptr %184, align 4, !tbaa !15
  %186 = getelementptr inbounds i8, ptr %26, i64 100
  %187 = load i32, ptr %186, align 4, !tbaa !15
  %188 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %180, i32 noundef %.0511, i32 noundef 15, i32 noundef %181, i32 noundef %.0511, i32 noundef %182, i32 noundef %183, i32 noundef %185, i32 noundef %187, i32 noundef %182, i32 noundef 0, i16 noundef zeroext %.2, i16 noundef zeroext 1, i8 noundef zeroext 2) #4
  store ptr %188, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %188) #4
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %189) #4
  br label %352

190:                                              ; preds = %49
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %191 = getelementptr inbounds i8, ptr %26, i64 8
  %192 = load ptr, ptr %191, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %192, i32 noundef 58, i32 noundef 1)
  %193 = getelementptr inbounds i8, ptr %26, i64 16
  %194 = load ptr, ptr %193, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %194, i32 noundef 58, i32 noundef 2)
  %195 = zext i1 %30 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %26, i32 noundef 58, i32 noundef %195)
  call void @libxsmm_generator_matequation_create_ternary_descriptor(ptr noundef nonnull %7, ptr noundef nonnull %26, ptr noundef nonnull %8, i32 noundef %29, i32 noundef %.0511) #4
  br label %352

196:                                              ; preds = %46
  %197 = getelementptr inbounds i8, ptr %26, i64 36
  %198 = load i32, ptr %197, align 4, !tbaa !15
  %199 = icmp eq i32 %198, 7
  br i1 %199, label %200, label %.thread566

200:                                              ; preds = %196
  %201 = load ptr, ptr %5, align 8, !tbaa !15
  %202 = getelementptr inbounds i8, ptr %201, i64 80
  %203 = load i32, ptr %202, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %204 = getelementptr inbounds i8, ptr %26, i64 8
  %205 = load ptr, ptr %204, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %205, i32 noundef 58, i32 noundef 1)
  %206 = load i32, ptr %22, align 8, !tbaa !20
  %207 = mul i32 %206, %203
  %208 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %207, i32 noundef %208, i32 noundef 58) #4
  %209 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 30, i32 noundef %209, i32 noundef 58) #4
  %210 = load ptr, ptr %204, align 8, !tbaa !15
  %211 = getelementptr inbounds i8, ptr %210, i64 104
  %212 = load i32, ptr %211, align 8, !tbaa !15
  %213 = getelementptr inbounds i8, ptr %26, i64 44
  %214 = load i32, ptr %213, align 4, !tbaa !15
  %215 = load ptr, ptr %26, align 8, !tbaa !15
  %216 = getelementptr inbounds i8, ptr %215, i64 92
  %217 = load i32, ptr %216, align 4, !tbaa !15
  %218 = getelementptr inbounds i8, ptr %215, i64 96
  %219 = load i32, ptr %218, align 8, !tbaa !15
  %220 = getelementptr inbounds i8, ptr %215, i64 100
  %221 = load i32, ptr %220, align 4, !tbaa !15
  %222 = getelementptr inbounds i8, ptr %210, i64 100
  %223 = load i32, ptr %222, align 4, !tbaa !15
  %224 = getelementptr inbounds i8, ptr %26, i64 40
  %225 = load i32, ptr %224, align 4, !tbaa !15
  %226 = trunc i32 %225 to i16
  %227 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef %212, i32 noundef 15, i32 noundef %214, i32 noundef %.0511, i32 noundef %217, i32 noundef %219, i32 noundef %221, i32 noundef %217, i32 noundef %223, i32 noundef 0, i16 noundef zeroext %226, i16 noundef zeroext 2, i8 noundef zeroext 2) #4
  store ptr %227, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %227) #4
  %228 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %228) #4
  %229 = load i32, ptr %22, align 8, !tbaa !20
  %230 = mul i32 %229, %203
  %231 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %230, i32 noundef %231, i32 noundef 58) #4
  %232 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 8, i32 noundef %232, i32 noundef 58) #4
  %233 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %233, i32 noundef 58) #4
  %234 = load i32, ptr %213, align 4, !tbaa !15
  %235 = load ptr, ptr %26, align 8, !tbaa !15
  %236 = getelementptr inbounds i8, ptr %235, i64 92
  %237 = load i32, ptr %236, align 4, !tbaa !15
  %238 = getelementptr inbounds i8, ptr %235, i64 96
  %239 = load i32, ptr %238, align 8, !tbaa !15
  %240 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef 15, i32 noundef 15, i32 noundef %234, i32 noundef %.0511, i32 noundef %237, i32 noundef %239, i32 noundef %237, i32 noundef %237, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 16, i16 noundef zeroext 18, i8 noundef zeroext 1) #4
  store ptr %240, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %240) #4
  %241 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %241) #4
  %242 = load i32, ptr %22, align 8, !tbaa !20
  %243 = mul i32 %242, %203
  %244 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %243, i32 noundef %244, i32 noundef 58) #4
  %245 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 8, i32 noundef %245, i32 noundef 58) #4
  br i1 %30, label %246, label %248

246:                                              ; preds = %200
  %247 = load i32, ptr %2, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %247, i32 noundef 127, i32 noundef 16, i32 noundef 58) #4
  br label %254

248:                                              ; preds = %200
  %249 = getelementptr inbounds i8, ptr %26, i64 88
  %250 = load i32, ptr %249, align 8, !tbaa !15
  %251 = load i32, ptr %22, align 8, !tbaa !20
  %252 = mul i32 %251, %250
  %253 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %252, i32 noundef %253, i32 noundef 58) #4
  br label %254

254:                                              ; preds = %248, %246
  %255 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %255, i32 noundef 58) #4
  %256 = load i32, ptr %213, align 4, !tbaa !15
  %257 = load ptr, ptr %26, align 8, !tbaa !15
  %258 = getelementptr inbounds i8, ptr %257, i64 92
  %259 = load i32, ptr %258, align 4, !tbaa !15
  %260 = getelementptr inbounds i8, ptr %26, i64 100
  %261 = load i32, ptr %260, align 4, !tbaa !15
  %262 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef 15, i32 noundef 15, i32 noundef %256, i32 noundef %.0511, i32 noundef %259, i32 noundef 1, i32 noundef %259, i32 noundef %261, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 32, i16 noundef zeroext 18, i8 noundef zeroext 1) #4
  store ptr %262, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %262) #4
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %263) #4
  br label %352

264:                                              ; preds = %46
  %265 = getelementptr inbounds i8, ptr %26, i64 36
  %266 = load i32, ptr %265, align 4, !tbaa !15
  %267 = icmp eq i32 %266, 24
  br i1 %267, label %268, label %.thread565

268:                                              ; preds = %264
  %269 = load ptr, ptr %5, align 8, !tbaa !15
  %270 = getelementptr inbounds i8, ptr %269, i64 80
  %271 = load i32, ptr %270, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %272 = load i32, ptr %22, align 8, !tbaa !20
  %273 = mul i32 %272, %271
  %274 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %273, i32 noundef %274, i32 noundef 58) #4
  %275 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %275, i32 noundef 58) #4
  %276 = getelementptr inbounds i8, ptr %26, i64 44
  %277 = load i32, ptr %276, align 4, !tbaa !15
  %278 = load ptr, ptr %26, align 8, !tbaa !15
  %279 = getelementptr inbounds i8, ptr %278, i64 92
  %280 = load i32, ptr %279, align 4, !tbaa !15
  %281 = getelementptr inbounds i8, ptr %278, i64 96
  %282 = load i32, ptr %281, align 8, !tbaa !15
  %283 = getelementptr inbounds i8, ptr %278, i64 100
  %284 = load i32, ptr %283, align 4, !tbaa !15
  %285 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef 15, i32 noundef 15, i32 noundef %277, i32 noundef %.0511, i32 noundef %280, i32 noundef %282, i32 noundef %284, i32 noundef %280, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 16, i16 noundef zeroext 18, i8 noundef zeroext 1) #4
  store ptr %285, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %285) #4
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %286) #4
  %287 = load i32, ptr %22, align 8, !tbaa !20
  %288 = mul i32 %287, %271
  %289 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %288, i32 noundef %289, i32 noundef 58) #4
  %290 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 8, i32 noundef %290, i32 noundef 58) #4
  br i1 %30, label %291, label %293

291:                                              ; preds = %268
  %292 = load i32, ptr %2, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %292, i32 noundef 127, i32 noundef 16, i32 noundef 58) #4
  br label %299

293:                                              ; preds = %268
  %294 = getelementptr inbounds i8, ptr %26, i64 88
  %295 = load i32, ptr %294, align 8, !tbaa !15
  %296 = load i32, ptr %22, align 8, !tbaa !20
  %297 = mul i32 %296, %295
  %298 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_getaddr_stack_tmp_i_aarch64(ptr noundef %0, i32 noundef %297, i32 noundef %298, i32 noundef 58) #4
  br label %299

299:                                              ; preds = %293, %291
  %300 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 14, i32 noundef %300, i32 noundef 58) #4
  %301 = load i32, ptr %276, align 4, !tbaa !15
  %302 = load ptr, ptr %26, align 8, !tbaa !15
  %303 = getelementptr inbounds i8, ptr %302, i64 92
  %304 = load i32, ptr %303, align 4, !tbaa !15
  %305 = getelementptr inbounds i8, ptr %26, i64 100
  %306 = load i32, ptr %305, align 4, !tbaa !15
  %307 = call ptr @libxsmm_meltw_descriptor_init2(ptr noundef nonnull %7, i32 noundef %29, i32 noundef 15, i32 noundef 15, i32 noundef %301, i32 noundef %.0511, i32 noundef %304, i32 noundef 1, i32 noundef %304, i32 noundef %306, i32 noundef 0, i32 noundef 0, i16 noundef zeroext 32, i16 noundef zeroext 18, i8 noundef zeroext 1) #4
  store ptr %307, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %307) #4
  %308 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %308) #4
  br label %352

.thread565:                                       ; preds = %264
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %309 = zext i1 %30 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %26, i32 noundef 58, i32 noundef %309)
  %310 = load i32, ptr %265, align 4, !tbaa !15
  %311 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %310) #4
  %312 = icmp sgt i32 %311, 0
  br i1 %312, label %313, label %320

313:                                              ; preds = %.thread565
  %314 = load ptr, ptr %26, align 8, !tbaa !15
  %315 = getelementptr inbounds i8, ptr %314, i64 96
  %316 = load i32, ptr %315, align 8, !tbaa !15
  %317 = sext i32 %316 to i64
  call void @libxsmm_aarch64_instruction_alu_set_imm64(ptr noundef %0, i32 noundef 58, i64 noundef %317) #4
  %318 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 11, i32 noundef %318, i32 noundef 58) #4
  call void @libxsmm_generator_meqn_getaddr_stack_var_aarch64(ptr noundef %0, i32 noundef 11, i32 noundef 58) #4
  %319 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 10, i32 noundef %319, i32 noundef 58) #4
  br label %320

320:                                              ; preds = %313, %.thread565
  %321 = load ptr, ptr %5, align 8, !tbaa !15
  %322 = getelementptr inbounds i8, ptr %321, i64 32
  %323 = load i32, ptr %322, align 8, !tbaa !15
  %324 = icmp eq i32 %323, 1
  br i1 %324, label %325, label %331

325:                                              ; preds = %320
  %326 = getelementptr inbounds i8, ptr %321, i64 36
  %327 = load i32, ptr %326, align 4, !tbaa !15
  %328 = icmp eq i32 %327, 33
  %brmerge.not = and i1 %30, %328
  br i1 %brmerge.not, label %329, label %331

329:                                              ; preds = %325
  call void @libxsmm_generator_meqn_getval_stack_var_aarch64(ptr noundef %0, i32 noundef 29, i32 noundef 58) #4
  %330 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 15, i32 noundef %330, i32 noundef 58) #4
  br label %331

331:                                              ; preds = %325, %329, %320
  %332 = load i32, ptr %47, align 8, !tbaa !15
  %333 = icmp eq i32 %332, 1
  br i1 %333, label %334, label %343

334:                                              ; preds = %331
  %335 = load i32, ptr %265, align 4, !tbaa !15
  %336 = icmp eq i32 %335, 63
  br i1 %336, label %337, label %343

337:                                              ; preds = %334
  %338 = load i32, ptr %2, align 4, !tbaa !26
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef %338, i32 noundef 127, i32 noundef 0, i32 noundef 58) #4
  %339 = getelementptr inbounds i8, ptr %26, i64 48
  %340 = load i32, ptr %339, align 4, !tbaa !15
  %341 = shl nsw i32 %340, 5
  call void @libxsmm_aarch64_instruction_alu_move(ptr noundef %0, i32 noundef -1186988026, i32 noundef 58, i32 noundef 127, i32 noundef %341, i32 noundef 58) #4
  %342 = load i32, ptr %10, align 4, !tbaa !14
  call void @libxsmm_generator_meqn_setval_stack_var_aarch64(ptr noundef %0, i32 noundef 15, i32 noundef %342, i32 noundef 58) #4
  br label %343

343:                                              ; preds = %337, %334, %331
  call void @libxsmm_generator_matequation_create_unary_descriptor(ptr noundef nonnull %7, ptr noundef nonnull %26, ptr noundef nonnull %8, i32 noundef %29, i32 noundef %.0511) #4
  br label %352

.thread566:                                       ; preds = %196
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %27, i32 noundef 58, i32 noundef 0)
  %344 = getelementptr inbounds i8, ptr %26, i64 8
  %345 = load ptr, ptr %344, align 8, !tbaa !15
  call void @libxsmm_generator_matequation_set_input_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef %345, i32 noundef 58, i32 noundef 1)
  %346 = zext i1 %30 to i32
  call void @libxsmm_generator_matequation_set_output_in_stack_param_struct_aarch64(ptr noundef %0, ptr noundef %3, ptr noundef %2, ptr noundef nonnull %26, i32 noundef 58, i32 noundef %346)
  call void @libxsmm_generator_matequation_create_binary_descriptor(ptr noundef nonnull %7, ptr noundef nonnull %26, ptr noundef nonnull %8, i32 noundef %29, i32 noundef %.0511) #4
  br label %352

347:                                              ; preds = %46
  %348 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !27
  %349 = icmp ugt i32 %348, 1
  %350 = load i32, ptr @libxsmm_verbosity, align 4
  %351 = select i1 %349, i32 %350, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel, ptr noundef nonnull @.str.6, i32 noundef 424, i32 noundef %351) #4
  br label %.critedge

352:                                              ; preds = %254, %343, %.thread566, %299, %101, %190, %170
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef %0, ptr noundef nonnull %23, ptr noundef %353) #4
  %354 = load i32, ptr %47, align 8, !tbaa !15
  %355 = icmp eq i32 %354, 1
  br i1 %355, label %356, label %.thread573

356:                                              ; preds = %352
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds i8, ptr %357, i64 29
  %359 = load i16, ptr %358, align 1, !tbaa !28
  %360 = zext i16 %359 to i32
  %361 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_kernel(i32 noundef %360) #4
  %362 = icmp sgt i32 %361, 0
  br i1 %362, label %363, label %378

363:                                              ; preds = %356
  %364 = load ptr, ptr %8, align 8, !tbaa !5
  %365 = getelementptr inbounds i8, ptr %364, i64 27
  %366 = load i16, ptr %365, align 1, !tbaa !30
  %367 = zext i16 %366 to i32
  %368 = and i32 %367, 32
  %.not543 = icmp eq i32 %368, 0
  br i1 %.not543, label %370, label %369

369:                                              ; preds = %363
  call void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef nonnull %364) #4
  br label %414

370:                                              ; preds = %363
  %371 = and i32 %367, 16
  %.not544 = icmp eq i32 %371, 0
  br i1 %.not544, label %373, label %372

372:                                              ; preds = %370
  call void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef nonnull %364) #4
  br label %414

373:                                              ; preds = %370
  %374 = load i32, ptr @libxsmm_ninit, align 4, !tbaa !27
  %375 = icmp ugt i32 %374, 1
  %376 = load i32, ptr @libxsmm_verbosity, align 4
  %377 = select i1 %375, i32 %376, i32 1
  call void @libxsmm_handle_error(ptr noundef %0, i32 noundef 90000, ptr noundef nonnull @__func__.libxsmm_generator_matequation_tmp_stack_scratch_aarch64_kernel, ptr noundef nonnull @.str.6, i32 noundef 459, i32 noundef %377) #4
  br label %.critedge

378:                                              ; preds = %356
  %.pr = load i32, ptr %47, align 8, !tbaa !15
  %379 = icmp eq i32 %.pr, 1
  br i1 %379, label %380, label %.thread573

380:                                              ; preds = %378
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = getelementptr inbounds i8, ptr %381, i64 29
  %383 = load i16, ptr %382, align 1, !tbaa !28
  %384 = zext i16 %383 to i32
  %385 = call i32 @libxsmm_meqn_is_unary_opcode_reduce_cols_idx_kernel(i32 noundef %384) #4
  %386 = icmp sgt i32 %385, 0
  br i1 %386, label %387, label %389

387:                                              ; preds = %380
  %388 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_reduce_cols_index_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %388) #4
  br label %414

389:                                              ; preds = %380
  %.pr569 = load i32, ptr %47, align 8, !tbaa !15
  %390 = icmp eq i32 %.pr569, 1
  br i1 %390, label %391, label %.thread573

391:                                              ; preds = %389
  %392 = load ptr, ptr %8, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i64 29
  %394 = load i16, ptr %393, align 1, !tbaa !28
  %395 = zext i16 %394 to i32
  %396 = call i32 @libxsmm_meqn_is_unary_opcode_transform_kernel(i32 noundef %395) #4
  %397 = icmp sgt i32 %396, 0
  br i1 %397, label %398, label %.thread570

398:                                              ; preds = %391
  %399 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_transform_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %399) #4
  br label %414

.thread570:                                       ; preds = %391
  %.pr572.pr = load i32, ptr %47, align 8, !tbaa !15
  %400 = icmp eq i32 %.pr572.pr, 1
  br i1 %400, label %401, label %.thread573

401:                                              ; preds = %.thread570
  %402 = getelementptr inbounds i8, ptr %26, i64 36
  %403 = load i32, ptr %402, align 4, !tbaa !15
  %.off = add i32 %403, -51
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %404, label %411

404:                                              ; preds = %401
  %405 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_gather_scatter_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %405) #4
  br label %414

.thread573:                                       ; preds = %378, %352, %389, %.thread570
  %406 = phi i32 [ %.pr572.pr, %.thread570 ], [ %.pr569, %389 ], [ %.pr, %378 ], [ %354, %352 ]
  switch i32 %406, label %.thread576 [
    i32 4, label %414
    i32 2, label %407
  ]

407:                                              ; preds = %.thread573
  %408 = getelementptr inbounds i8, ptr %26, i64 36
  %409 = load i32, ptr %408, align 4, !tbaa !15
  %410 = icmp eq i32 %409, 7
  br i1 %410, label %414, label %.thread576

411:                                              ; preds = %401
  %412 = icmp eq i32 %403, 24
  br i1 %412, label %414, label %.thread576

.thread576:                                       ; preds = %407, %.thread573, %411
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  call void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef %0, ptr noundef %4, ptr noundef nonnull %19, ptr noundef nonnull %23, ptr noundef %413) #4
  br label %414

414:                                              ; preds = %.thread573, %387, %404, %407, %411, %.thread576, %398, %369, %372
  %415 = add i32 %.0579, 1
  %.not = icmp ugt i32 %415, %18
  br i1 %.not, label %.critedge, label %24, !llvm.loop !31

.critedge:                                        ; preds = %414, %373, %347, %12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %7) #4
  ret void
}

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

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

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

declare ptr @libxsmm_meltw_descriptor_init2(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i16 noundef zeroext, i16 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1

declare void @libxsmm_generator_mateltwise_aarch64_init_micro_kernel_config_fullvector(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_unary_binary_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr 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) #3

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

declare void @libxsmm_generator_reduce_cols_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_reduce_rows_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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

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

declare i32 @libxsmm_meqn_is_unary_opcode_reduce_kernel(i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_reduce_cols_index_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @libxsmm_meqn_is_unary_opcode_transform_kernel(i32 noundef) local_unnamed_addr #1

declare void @libxsmm_generator_transform_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libxsmm_generator_gather_scatter_aarch64_microkernel(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nofree 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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind }
attributes #5 = { cold 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, !11, i64 48}
!10 = !{!"libxsmm_matequation_gp_reg_mapping_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !12, i64 72, !13, i64 220}
!11 = !{!"int", !7, i64 0}
!12 = !{!"libxsmm_mateltwise_gp_reg_mapping_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144}
!13 = !{!"libxsmm_gp_reg_mapping_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128}
!14 = !{!10, !11, i64 60}
!15 = !{!7, !7, i64 0}
!16 = !{!10, !11, i64 72}
!17 = !{!18, !7, i64 12}
!18 = !{!"libxsmm_meqn_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !7, i64 12, !11, i64 13}
!19 = !{!18, !11, i64 8}
!20 = !{!21, !11, i64 328}
!21 = !{!"libxsmm_matequation_kernel_config_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !7, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !7, i64 188, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !6, i64 336, !6, i64 344, !11, i64 352, !11, i64 356, !11, i64 360, !7, i64 364, !7, i64 620, !22, i64 876, !23, i64 1392}
!22 = !{!"libxsmm_mateltwise_kernel_config_struct", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !11, i64 340, !11, i64 344, !11, i64 348, !11, i64 352, !11, i64 356, !11, i64 360, !11, i64 364, !11, i64 368, !11, i64 372, !11, i64 376, !11, i64 380, !11, i64 384, !11, i64 388, !11, i64 392, !11, i64 396, !11, i64 400, !11, i64 404, !11, i64 408, !11, i64 412, !11, i64 416, !11, i64 420, !11, i64 424, !11, i64 428, !11, i64 432, !11, i64 436, !11, i64 440, !11, i64 444, !11, i64 448, !11, i64 452, !11, i64 456, !11, i64 460, !11, i64 464, !11, i64 468, !11, i64 472, !11, i64 476, !11, i64 480, !11, i64 484, !11, i64 488, !11, i64 492, !11, i64 496, !11, i64 500, !11, i64 504, !11, i64 508, !7, i64 512}
!23 = !{!"libxsmm_micro_kernel_config", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !7, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !11, i64 160, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !11, i64 196, !11, i64 200, !11, i64 204, !11, i64 208, !11, i64 212, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !11, i64 288, !11, i64 292, !11, i64 296, !11, i64 300, !11, i64 304, !11, i64 308, !11, i64 312, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !11, i64 340, !11, i64 344, !11, i64 348, !11, i64 352, !11, i64 356, !11, i64 360, !7, i64 364, !7, i64 380, !7, i64 396, !7, i64 412, !7, i64 428, !7, i64 444, !11, i64 460, !7, i64 464, !24, i64 520, !11, i64 556, !11, i64 560, !11, i64 564, !11, i64 568, !11, i64 572, !11, i64 576, !11, i64 580, !11, i64 584, !6, i64 592, !11, i64 600, !11, i64 604, !11, i64 608, !11, i64 612, !6, i64 616, !11, i64 624, !11, i64 628, !11, i64 632, !11, i64 636, !11, i64 640, !11, i64 644, !11, i64 648, !11, i64 652, !11, i64 656, !11, i64 660, !11, i64 664, !11, i64 668, !11, i64 672, !11, i64 676, !11, i64 680}
!24 = !{!"libxsmm_tile_config", !7, i64 0, !25, i64 2, !7, i64 4, !25, i64 6, !7, i64 8, !25, i64 10, !7, i64 12, !25, i64 14, !7, i64 16, !25, i64 18, !7, i64 20, !25, i64 22, !7, i64 24, !25, i64 26, !7, i64 28, !25, i64 30, !7, i64 32}
!25 = !{!"short", !7, i64 0}
!26 = !{!10, !11, i64 0}
!27 = !{!11, !11, i64 0}
!28 = !{!29, !25, i64 29}
!29 = !{!"libxsmm_meltw_descriptor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !7, i64 25, !7, i64 26, !25, i64 27, !25, i64 29, !7, i64 31}
!30 = !{!29, !25, i64 27}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}


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