; LLVM IR from libxsmm/libxsmm :: src (generator_gemm_common_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_gemm_descriptor = type <{ i32, i32, i32, i32, i32, i32, i32, i8, [3 x i8], i8, i64, i64, i8, i32, i32, i32, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16, i32, i32, i32, i8 }>

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64_asimd(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) #1 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca [3 x i32], align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i32 %2, ptr %13, align 4, !tbaa !9
  store i32 %3, ptr %14, align 4, !tbaa !9
  store i32 %4, ptr %15, align 4, !tbaa !9
  store i32 %5, ptr %16, align 4, !tbaa !9
  store i32 %6, ptr %17, align 4, !tbaa !9
  store i32 %7, ptr %18, align 4, !tbaa !9
  store i32 %8, ptr %19, align 4, !tbaa !9
  store i32 %9, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  store i32 0, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 0, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  store i32 0, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  %28 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %28, ptr %27, align 4, !tbaa !9
  %29 = load i32, ptr %17, align 4, !tbaa !9
  %30 = load i32, ptr %18, align 4, !tbaa !9
  %31 = load i32, ptr %15, align 4, !tbaa !9
  %32 = udiv i32 %30, %31
  %33 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  store i32 %32, ptr %33, align 4, !tbaa !9
  %34 = load i32, ptr %18, align 4, !tbaa !9
  %35 = load i32, ptr %15, align 4, !tbaa !9
  %36 = urem i32 %34, %35
  %37 = load i32, ptr %15, align 4, !tbaa !9
  %38 = udiv i32 %37, 2
  %39 = udiv i32 %36, %38
  %40 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  store i32 %39, ptr %40, align 4, !tbaa !9
  %41 = load i32, ptr %18, align 4, !tbaa !9
  %42 = load i32, ptr %15, align 4, !tbaa !9
  %43 = urem i32 %41, %42
  %44 = load i32, ptr %15, align 4, !tbaa !9
  %45 = udiv i32 %44, 2
  %46 = urem i32 %43, %45
  %47 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 2
  store i32 %46, ptr %47, align 4, !tbaa !9
  %48 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %49 = load i32, ptr %48, align 4, !tbaa !9
  %50 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %51 = load i32, ptr %50, align 4, !tbaa !9
  %52 = add i32 %49, %51
  %53 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 2
  %54 = load i32, ptr %53, align 4, !tbaa !9
  %55 = add i32 %52, %54
  store i32 %55, ptr %25, align 4, !tbaa !9
  %56 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %57 = load i32, ptr %56, align 4, !tbaa !9
  %58 = mul i32 %57, 16
  %59 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %60 = load i32, ptr %59, align 4, !tbaa !9
  %61 = mul i32 %60, 8
  %62 = add i32 %58, %61
  %63 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 2
  %64 = load i32, ptr %63, align 4, !tbaa !9
  %65 = mul i32 %64, 4
  %66 = add i32 %62, %65
  store i32 %66, ptr %26, align 4, !tbaa !9
  %67 = load i32, ptr %16, align 4, !tbaa !9
  %68 = load i32, ptr %19, align 4, !tbaa !9
  %69 = load i32, ptr %25, align 4, !tbaa !9
  %70 = mul i32 %68, %69
  %71 = sub i32 %67, %70
  store i32 %71, ptr %21, align 4, !tbaa !9
  %72 = load ptr, ptr %11, align 8, !tbaa !5
  %73 = load i32, ptr %27, align 4, !tbaa !9
  call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %72, i32 noundef 7, i32 noundef %73)
  %74 = load ptr, ptr %12, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.libxsmm_gemm_descriptor, ptr %74, i32 0, i32 6
  %76 = load i32, ptr %75, align 1, !tbaa !11
  %77 = and i32 %76, 4
  %78 = icmp eq i32 %77, 0
  br i1 %78, label %79, label %284

79:                                               ; preds = %10
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %80

80:                                               ; preds = %271, %79
  %81 = load i32, ptr %22, align 4, !tbaa !9
  %82 = load i32, ptr %19, align 4, !tbaa !9
  %83 = icmp ult i32 %81, %82
  br i1 %83, label %84, label %274

84:                                               ; preds = %80
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %85

85:                                               ; preds = %123, %84
  %86 = load i32, ptr %23, align 4, !tbaa !9
  %87 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %88 = load i32, ptr %87, align 4, !tbaa !9
  %89 = icmp ult i32 %86, %88
  br i1 %89, label %90, label %126

90:                                               ; preds = %85
  %91 = load i32, ptr %22, align 4, !tbaa !9
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %93, label %97

93:                                               ; preds = %90
  %94 = load ptr, ptr %11, align 8, !tbaa !5
  %95 = load i32, ptr %27, align 4, !tbaa !9
  %96 = load i32, ptr %23, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %94, i32 noundef 1010828294, i32 noundef %95, i32 noundef 127, i32 noundef 16, i32 noundef %96, i32 noundef 1)
  br label %97

97:                                               ; preds = %93, %90
  %98 = load ptr, ptr %11, align 8, !tbaa !5
  %99 = load i32, ptr %13, align 4, !tbaa !9
  %100 = load i32, ptr %21, align 4, !tbaa !9
  %101 = load i32, ptr %23, align 4, !tbaa !9
  %102 = add i32 %100, %101
  %103 = load i32, ptr %25, align 4, !tbaa !9
  %104 = load i32, ptr %22, align 4, !tbaa !9
  %105 = mul i32 %103, %104
  %106 = add i32 %102, %105
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %98, i32 noundef 1010828294, i32 noundef %99, i32 noundef 127, i32 noundef 16, i32 noundef %106, i32 noundef 1)
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = load i32, ptr %21, align 4, !tbaa !9
  %109 = load i32, ptr %23, align 4, !tbaa !9
  %110 = add i32 %108, %109
  %111 = load i32, ptr %25, align 4, !tbaa !9
  %112 = load i32, ptr %22, align 4, !tbaa !9
  %113 = mul i32 %111, %112
  %114 = add i32 %110, %113
  %115 = load i32, ptr %23, align 4, !tbaa !9
  %116 = load i32, ptr %21, align 4, !tbaa !9
  %117 = load i32, ptr %23, align 4, !tbaa !9
  %118 = add i32 %116, %117
  %119 = load i32, ptr %25, align 4, !tbaa !9
  %120 = load i32, ptr %22, align 4, !tbaa !9
  %121 = mul i32 %119, %120
  %122 = add i32 %118, %121
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %107, i32 noundef 237032459, i32 noundef %114, i32 noundef %115, i8 noundef zeroext 0, i32 noundef %122, i32 noundef 5)
  br label %123

123:                                              ; preds = %97
  %124 = load i32, ptr %23, align 4, !tbaa !9
  %125 = add i32 %124, 1
  store i32 %125, ptr %23, align 4, !tbaa !9
  br label %85, !llvm.loop !15

126:                                              ; preds = %85
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %127

127:                                              ; preds = %180, %126
  %128 = load i32, ptr %23, align 4, !tbaa !9
  %129 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %130 = load i32, ptr %129, align 4, !tbaa !9
  %131 = icmp ult i32 %128, %130
  br i1 %131, label %132, label %183

132:                                              ; preds = %127
  %133 = load i32, ptr %22, align 4, !tbaa !9
  %134 = icmp eq i32 %133, 0
  br i1 %134, label %135, label %142

135:                                              ; preds = %132
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = load i32, ptr %27, align 4, !tbaa !9
  %138 = load i32, ptr %23, align 4, !tbaa !9
  %139 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = add i32 %138, %140
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %136, i32 noundef 1010828294, i32 noundef %137, i32 noundef 127, i32 noundef 8, i32 noundef %141, i32 noundef 6)
  br label %142

142:                                              ; preds = %135, %132
  %143 = load ptr, ptr %11, align 8, !tbaa !5
  %144 = load i32, ptr %13, align 4, !tbaa !9
  %145 = load i32, ptr %21, align 4, !tbaa !9
  %146 = load i32, ptr %23, align 4, !tbaa !9
  %147 = add i32 %145, %146
  %148 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %149 = load i32, ptr %148, align 4, !tbaa !9
  %150 = add i32 %147, %149
  %151 = load i32, ptr %25, align 4, !tbaa !9
  %152 = load i32, ptr %22, align 4, !tbaa !9
  %153 = mul i32 %151, %152
  %154 = add i32 %150, %153
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %143, i32 noundef 1010828294, i32 noundef %144, i32 noundef 127, i32 noundef 8, i32 noundef %154, i32 noundef 6)
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = load i32, ptr %21, align 4, !tbaa !9
  %157 = load i32, ptr %23, align 4, !tbaa !9
  %158 = add i32 %156, %157
  %159 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = add i32 %158, %160
  %162 = load i32, ptr %25, align 4, !tbaa !9
  %163 = load i32, ptr %22, align 4, !tbaa !9
  %164 = mul i32 %162, %163
  %165 = add i32 %161, %164
  %166 = load i32, ptr %23, align 4, !tbaa !9
  %167 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = add i32 %166, %168
  %170 = load i32, ptr %21, align 4, !tbaa !9
  %171 = load i32, ptr %23, align 4, !tbaa !9
  %172 = add i32 %170, %171
  %173 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %174 = load i32, ptr %173, align 4, !tbaa !9
  %175 = add i32 %172, %174
  %176 = load i32, ptr %25, align 4, !tbaa !9
  %177 = load i32, ptr %22, align 4, !tbaa !9
  %178 = mul i32 %176, %177
  %179 = add i32 %175, %178
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %155, i32 noundef 237032459, i32 noundef %165, i32 noundef %169, i8 noundef zeroext 0, i32 noundef %179, i32 noundef 5)
  br label %180

180:                                              ; preds = %142
  %181 = load i32, ptr %23, align 4, !tbaa !9
  %182 = add i32 %181, 1
  store i32 %182, ptr %23, align 4, !tbaa !9
  br label %127, !llvm.loop !17

183:                                              ; preds = %127
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %184

184:                                              ; preds = %252, %183
  %185 = load i32, ptr %23, align 4, !tbaa !9
  %186 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 2
  %187 = load i32, ptr %186, align 4, !tbaa !9
  %188 = icmp ult i32 %185, %187
  br i1 %188, label %189, label %255

189:                                              ; preds = %184
  %190 = load i32, ptr %22, align 4, !tbaa !9
  %191 = icmp eq i32 %190, 0
  br i1 %191, label %192, label %202

192:                                              ; preds = %189
  %193 = load ptr, ptr %11, align 8, !tbaa !5
  %194 = load i32, ptr %27, align 4, !tbaa !9
  %195 = load i32, ptr %23, align 4, !tbaa !9
  %196 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %197 = load i32, ptr %196, align 4, !tbaa !9
  %198 = add i32 %195, %197
  %199 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = add i32 %198, %200
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %193, i32 noundef 1010828294, i32 noundef %194, i32 noundef 127, i32 noundef 4, i32 noundef %201, i32 noundef 4)
  br label %202

202:                                              ; preds = %192, %189
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = load i32, ptr %13, align 4, !tbaa !9
  %205 = load i32, ptr %21, align 4, !tbaa !9
  %206 = load i32, ptr %23, align 4, !tbaa !9
  %207 = add i32 %205, %206
  %208 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = add i32 %207, %209
  %211 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %212 = load i32, ptr %211, align 4, !tbaa !9
  %213 = add i32 %210, %212
  %214 = load i32, ptr %25, align 4, !tbaa !9
  %215 = load i32, ptr %22, align 4, !tbaa !9
  %216 = mul i32 %214, %215
  %217 = add i32 %213, %216
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %203, i32 noundef 1010828294, i32 noundef %204, i32 noundef 127, i32 noundef 4, i32 noundef %217, i32 noundef 4)
  %218 = load ptr, ptr %11, align 8, !tbaa !5
  %219 = load i32, ptr %21, align 4, !tbaa !9
  %220 = load i32, ptr %23, align 4, !tbaa !9
  %221 = add i32 %219, %220
  %222 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %223 = load i32, ptr %222, align 4, !tbaa !9
  %224 = add i32 %221, %223
  %225 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %226 = load i32, ptr %225, align 4, !tbaa !9
  %227 = add i32 %224, %226
  %228 = load i32, ptr %25, align 4, !tbaa !9
  %229 = load i32, ptr %22, align 4, !tbaa !9
  %230 = mul i32 %228, %229
  %231 = add i32 %227, %230
  %232 = load i32, ptr %23, align 4, !tbaa !9
  %233 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %234 = load i32, ptr %233, align 4, !tbaa !9
  %235 = add i32 %232, %234
  %236 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = add i32 %235, %237
  %239 = load i32, ptr %21, align 4, !tbaa !9
  %240 = load i32, ptr %23, align 4, !tbaa !9
  %241 = add i32 %239, %240
  %242 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %243 = load i32, ptr %242, align 4, !tbaa !9
  %244 = add i32 %241, %243
  %245 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %246 = load i32, ptr %245, align 4, !tbaa !9
  %247 = add i32 %244, %246
  %248 = load i32, ptr %25, align 4, !tbaa !9
  %249 = load i32, ptr %22, align 4, !tbaa !9
  %250 = mul i32 %248, %249
  %251 = add i32 %247, %250
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %218, i32 noundef 237032459, i32 noundef %231, i32 noundef %238, i8 noundef zeroext 0, i32 noundef %251, i32 noundef 5)
  br label %252

252:                                              ; preds = %202
  %253 = load i32, ptr %23, align 4, !tbaa !9
  %254 = add i32 %253, 1
  store i32 %254, ptr %23, align 4, !tbaa !9
  br label %184, !llvm.loop !18

255:                                              ; preds = %184
  %256 = load i32, ptr %20, align 4, !tbaa !9
  %257 = load i32, ptr %26, align 4, !tbaa !9
  %258 = sub i32 %256, %257
  %259 = icmp ugt i32 %258, 0
  br i1 %259, label %260, label %270

260:                                              ; preds = %255
  %261 = load ptr, ptr %11, align 8, !tbaa !5
  %262 = load i32, ptr %13, align 4, !tbaa !9
  %263 = load i32, ptr %14, align 4, !tbaa !9
  %264 = load i32, ptr %13, align 4, !tbaa !9
  %265 = load i32, ptr %20, align 4, !tbaa !9
  %266 = zext i32 %265 to i64
  %267 = load i32, ptr %26, align 4, !tbaa !9
  %268 = zext i32 %267 to i64
  %269 = sub nsw i64 %266, %268
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %261, i32 noundef 4096, i32 noundef %262, i32 noundef %263, i32 noundef %264, i64 noundef %269)
  br label %270

270:                                              ; preds = %260, %255
  br label %271

271:                                              ; preds = %270
  %272 = load i32, ptr %22, align 4, !tbaa !9
  %273 = add i32 %272, 1
  store i32 %273, ptr %22, align 4, !tbaa !9
  br label %80, !llvm.loop !19

274:                                              ; preds = %80
  %275 = load ptr, ptr %11, align 8, !tbaa !5
  %276 = load i32, ptr %13, align 4, !tbaa !9
  %277 = load i32, ptr %14, align 4, !tbaa !9
  %278 = load i32, ptr %13, align 4, !tbaa !9
  %279 = load i32, ptr %20, align 4, !tbaa !9
  %280 = zext i32 %279 to i64
  %281 = load i32, ptr %19, align 4, !tbaa !9
  %282 = zext i32 %281 to i64
  %283 = mul nsw i64 %280, %282
  call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %275, i32 noundef 4097, i32 noundef %276, i32 noundef %277, i32 noundef %278, i64 noundef %283)
  br label %411

284:                                              ; preds = %10
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %285

285:                                              ; preds = %407, %284
  %286 = load i32, ptr %22, align 4, !tbaa !9
  %287 = load i32, ptr %19, align 4, !tbaa !9
  %288 = icmp ult i32 %286, %287
  br i1 %288, label %289, label %410

289:                                              ; preds = %285
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %290

290:                                              ; preds = %313, %289
  %291 = load i32, ptr %23, align 4, !tbaa !9
  %292 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %293 = load i32, ptr %292, align 4, !tbaa !9
  %294 = icmp ult i32 %291, %293
  br i1 %294, label %295, label %316

295:                                              ; preds = %290
  %296 = load i32, ptr %22, align 4, !tbaa !9
  %297 = icmp eq i32 %296, 0
  br i1 %297, label %298, label %302

298:                                              ; preds = %295
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = load i32, ptr %27, align 4, !tbaa !9
  %301 = load i32, ptr %23, align 4, !tbaa !9
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %299, i32 noundef 1010828294, i32 noundef %300, i32 noundef 127, i32 noundef 16, i32 noundef %301, i32 noundef 1)
  br label %302

302:                                              ; preds = %298, %295
  %303 = load ptr, ptr %11, align 8, !tbaa !5
  %304 = load i32, ptr %23, align 4, !tbaa !9
  %305 = load i32, ptr %23, align 4, !tbaa !9
  %306 = load i32, ptr %21, align 4, !tbaa !9
  %307 = load i32, ptr %23, align 4, !tbaa !9
  %308 = add i32 %306, %307
  %309 = load i32, ptr %25, align 4, !tbaa !9
  %310 = load i32, ptr %22, align 4, !tbaa !9
  %311 = mul i32 %309, %310
  %312 = add i32 %308, %311
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %303, i32 noundef 245373971, i32 noundef %304, i32 noundef %305, i8 noundef zeroext 0, i32 noundef %312, i32 noundef 1)
  br label %313

313:                                              ; preds = %302
  %314 = load i32, ptr %23, align 4, !tbaa !9
  %315 = add i32 %314, 1
  store i32 %315, ptr %23, align 4, !tbaa !9
  br label %290, !llvm.loop !20

316:                                              ; preds = %290
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %352, %316
  %318 = load i32, ptr %23, align 4, !tbaa !9
  %319 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %320 = load i32, ptr %319, align 4, !tbaa !9
  %321 = icmp ult i32 %318, %320
  br i1 %321, label %322, label %355

322:                                              ; preds = %317
  %323 = load i32, ptr %22, align 4, !tbaa !9
  %324 = icmp eq i32 %323, 0
  br i1 %324, label %325, label %332

325:                                              ; preds = %322
  %326 = load ptr, ptr %11, align 8, !tbaa !5
  %327 = load i32, ptr %27, align 4, !tbaa !9
  %328 = load i32, ptr %23, align 4, !tbaa !9
  %329 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = add i32 %328, %330
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %326, i32 noundef 1010828294, i32 noundef %327, i32 noundef 127, i32 noundef 8, i32 noundef %331, i32 noundef 6)
  br label %332

332:                                              ; preds = %325, %322
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = load i32, ptr %23, align 4, !tbaa !9
  %335 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %336 = load i32, ptr %335, align 4, !tbaa !9
  %337 = add i32 %334, %336
  %338 = load i32, ptr %23, align 4, !tbaa !9
  %339 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = add i32 %338, %340
  %342 = load i32, ptr %21, align 4, !tbaa !9
  %343 = load i32, ptr %23, align 4, !tbaa !9
  %344 = add i32 %342, %343
  %345 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = add i32 %344, %346
  %348 = load i32, ptr %25, align 4, !tbaa !9
  %349 = load i32, ptr %22, align 4, !tbaa !9
  %350 = mul i32 %348, %349
  %351 = add i32 %347, %350
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %333, i32 noundef 245373971, i32 noundef %337, i32 noundef %341, i8 noundef zeroext 0, i32 noundef %351, i32 noundef 0)
  br label %352

352:                                              ; preds = %332
  %353 = load i32, ptr %23, align 4, !tbaa !9
  %354 = add i32 %353, 1
  store i32 %354, ptr %23, align 4, !tbaa !9
  br label %317, !llvm.loop !21

355:                                              ; preds = %317
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %356

356:                                              ; preds = %403, %355
  %357 = load i32, ptr %23, align 4, !tbaa !9
  %358 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 2
  %359 = load i32, ptr %358, align 4, !tbaa !9
  %360 = icmp ult i32 %357, %359
  br i1 %360, label %361, label %406

361:                                              ; preds = %356
  %362 = load i32, ptr %22, align 4, !tbaa !9
  %363 = icmp eq i32 %362, 0
  br i1 %363, label %364, label %374

364:                                              ; preds = %361
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = load i32, ptr %27, align 4, !tbaa !9
  %367 = load i32, ptr %23, align 4, !tbaa !9
  %368 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %369 = load i32, ptr %368, align 4, !tbaa !9
  %370 = add i32 %367, %369
  %371 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %372 = load i32, ptr %371, align 4, !tbaa !9
  %373 = add i32 %370, %372
  call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %365, i32 noundef 1010828294, i32 noundef %366, i32 noundef 127, i32 noundef 4, i32 noundef %373, i32 noundef 4)
  br label %374

374:                                              ; preds = %364, %361
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = load i32, ptr %23, align 4, !tbaa !9
  %377 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %378 = load i32, ptr %377, align 4, !tbaa !9
  %379 = add i32 %376, %378
  %380 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %381 = load i32, ptr %380, align 4, !tbaa !9
  %382 = add i32 %379, %381
  %383 = load i32, ptr %23, align 4, !tbaa !9
  %384 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %385 = load i32, ptr %384, align 4, !tbaa !9
  %386 = add i32 %383, %385
  %387 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %388 = load i32, ptr %387, align 4, !tbaa !9
  %389 = add i32 %386, %388
  %390 = load i32, ptr %21, align 4, !tbaa !9
  %391 = load i32, ptr %23, align 4, !tbaa !9
  %392 = add i32 %390, %391
  %393 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 0
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = add i32 %392, %394
  %396 = getelementptr inbounds [3 x i32], ptr %24, i64 0, i64 1
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = add i32 %395, %397
  %399 = load i32, ptr %25, align 4, !tbaa !9
  %400 = load i32, ptr %22, align 4, !tbaa !9
  %401 = mul i32 %399, %400
  %402 = add i32 %398, %401
  call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %375, i32 noundef 245373971, i32 noundef %382, i32 noundef %389, i8 noundef zeroext 0, i32 noundef %402, i32 noundef 0)
  br label %403

403:                                              ; preds = %374
  %404 = load i32, ptr %23, align 4, !tbaa !9
  %405 = add i32 %404, 1
  store i32 %405, ptr %23, align 4, !tbaa !9
  br label %356, !llvm.loop !22

406:                                              ; preds = %356
  br label %407

407:                                              ; preds = %406
  %408 = load i32, ptr %22, align 4, !tbaa !9
  %409 = add i32 %408, 1
  store i32 %409, ptr %22, align 4, !tbaa !9
  br label %285, !llvm.loop !23

410:                                              ; preds = %285
  br label %411

411:                                              ; preds = %410, %274
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"libxsmm_gemm_descriptor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !7, i64 28, !7, i64 29, !7, i64 32, !13, i64 33, !13, i64 41, !7, i64 49, !10, i64 50, !10, i64 54, !10, i64 58, !14, i64 62, !14, i64 64, !7, i64 66, !7, i64 67, !7, i64 68, !7, i64 69, !14, i64 70, !14, i64 72, !14, i64 74, !14, i64 76, !14, i64 78, !14, i64 80, !10, i64 82, !10, i64 86, !10, i64 90, !7, i64 94}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"short", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}
!22 = distinct !{!22, !16}
!23 = distinct !{!23, !16}


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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_generator_gemm_load_add_colbias_2dregblock_aarch64_asimd(ptr noundef %0, ptr nocapture noundef readonly %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8, i32 noundef %9) local_unnamed_addr #0 {
  %11 = udiv i32 %7, %4
  %12 = urem i32 %7, %4
  %13 = lshr i32 %4, 1
  %14 = udiv i32 %12, %13
  %15 = urem i32 %12, %13
  %16 = add i32 %14, %11
  %17 = add i32 %16, %15
  %18 = shl i32 %11, 4
  %19 = shl i32 %14, 3
  %20 = add i32 %19, %18
  %21 = shl i32 %15, 2
  %22 = add i32 %20, %21
  %23 = mul i32 %17, %8
  %24 = sub i32 %5, %23
  tail call void @libxsmm_generator_gemm_getval_stack_var_aarch64(ptr noundef %0, i32 noundef 7, i32 noundef %3)
  %25 = getelementptr inbounds i8, ptr %1, i64 24
  %26 = load i32, ptr %25, align 1, !tbaa !5
  %27 = and i32 %26, 4
  %28 = icmp eq i32 %27, 0
  %.not209 = icmp eq i32 %8, 0
  br i1 %28, label %.preheader185, label %.preheader189

.preheader189:                                    ; preds = %10
  br i1 %.not209, label %.loopexit, label %.preheader188.lr.ph

.preheader188.lr.ph:                              ; preds = %.preheader189
  %.not206 = icmp ugt i32 %4, %7
  %.not207 = icmp ugt i32 %13, %12
  %29 = add i32 %24, %11
  %.not208 = icmp eq i32 %15, 0
  %30 = add i32 %16, %24
  br label %.preheader188

.preheader185:                                    ; preds = %10
  br i1 %.not209, label %.preheader185.._crit_edge204_crit_edge, label %.preheader184.lr.ph

.preheader185.._crit_edge204_crit_edge:           ; preds = %.preheader185
  %.pre = zext i32 %9 to i64
  br label %._crit_edge204

.preheader184.lr.ph:                              ; preds = %.preheader185
  %.not210 = icmp ugt i32 %4, %7
  %.not211 = icmp ugt i32 %13, %12
  %31 = add i32 %24, %11
  %.not212 = icmp eq i32 %15, 0
  %32 = add i32 %16, %24
  %.not = icmp eq i32 %22, %9
  %33 = zext i32 %9 to i64
  %34 = zext i32 %22 to i64
  %35 = sub nsw i64 %33, %34
  br label %.preheader184

.preheader184:                                    ; preds = %.preheader184.lr.ph, %64
  %.0203 = phi i32 [ 0, %.preheader184.lr.ph ], [ %65, %64 ]
  br i1 %.not210, label %.preheader183, label %.lr.ph197

.lr.ph197:                                        ; preds = %.preheader184
  %36 = icmp eq i32 %.0203, 0
  %37 = mul i32 %.0203, %17
  %38 = add i32 %37, %24
  br label %42

.preheader183:                                    ; preds = %44, %.preheader184
  br i1 %.not211, label %.preheader, label %.lr.ph199

.lr.ph199:                                        ; preds = %.preheader183
  %39 = icmp eq i32 %.0203, 0
  %40 = mul i32 %.0203, %17
  %41 = add i32 %31, %40
  br label %51

42:                                               ; preds = %.lr.ph197, %44
  %.0176196 = phi i32 [ 0, %.lr.ph197 ], [ %46, %44 ]
  br i1 %36, label %43, label %44

43:                                               ; preds = %42
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 16, i32 noundef %.0176196, i32 noundef 1) #2
  br label %44

44:                                               ; preds = %43, %42
  %45 = add i32 %38, %.0176196
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %2, i32 noundef 127, i32 noundef 16, i32 noundef %45, i32 noundef 1) #2
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 237032459, i32 noundef %45, i32 noundef %.0176196, i8 noundef zeroext 0, i32 noundef %45, i32 noundef 5) #2
  %46 = add nuw i32 %.0176196, 1
  %47 = icmp ult i32 %46, %11
  br i1 %47, label %42, label %.preheader183, !llvm.loop !12

.preheader:                                       ; preds = %._crit_edge217, %.preheader183
  br i1 %.not212, label %._crit_edge202, label %.lr.ph201

.lr.ph201:                                        ; preds = %.preheader
  %48 = icmp eq i32 %.0203, 0
  %49 = mul i32 %.0203, %17
  %50 = add i32 %32, %49
  br label %57

51:                                               ; preds = %.lr.ph199, %._crit_edge217
  %.1177198 = phi i32 [ 0, %.lr.ph199 ], [ %55, %._crit_edge217 ]
  %52 = add i32 %.1177198, %11
  br i1 %39, label %53, label %._crit_edge217

53:                                               ; preds = %51
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 8, i32 noundef %52, i32 noundef 6) #2
  br label %._crit_edge217

._crit_edge217:                                   ; preds = %51, %53
  %54 = add i32 %41, %.1177198
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %2, i32 noundef 127, i32 noundef 8, i32 noundef %54, i32 noundef 6) #2
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 237032459, i32 noundef %54, i32 noundef %52, i8 noundef zeroext 0, i32 noundef %54, i32 noundef 5) #2
  %55 = add nuw i32 %.1177198, 1
  %56 = icmp ult i32 %55, %14
  br i1 %56, label %51, label %.preheader, !llvm.loop !14

57:                                               ; preds = %.lr.ph201, %._crit_edge218
  %.2200 = phi i32 [ 0, %.lr.ph201 ], [ %61, %._crit_edge218 ]
  %58 = add i32 %16, %.2200
  br i1 %48, label %59, label %._crit_edge218

59:                                               ; preds = %57
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 4, i32 noundef %58, i32 noundef 4) #2
  br label %._crit_edge218

._crit_edge218:                                   ; preds = %57, %59
  %60 = add i32 %50, %.2200
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %2, i32 noundef 127, i32 noundef 4, i32 noundef %60, i32 noundef 4) #2
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 237032459, i32 noundef %60, i32 noundef %58, i8 noundef zeroext 0, i32 noundef %60, i32 noundef 5) #2
  %61 = add nuw nsw i32 %.2200, 1
  %62 = icmp ult i32 %61, %15
  br i1 %62, label %57, label %._crit_edge202, !llvm.loop !15

._crit_edge202:                                   ; preds = %._crit_edge218, %.preheader
  br i1 %.not, label %64, label %63

63:                                               ; preds = %._crit_edge202
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4096, i32 noundef %2, i32 noundef %3, i32 noundef %2, i64 noundef %35) #2
  br label %64

64:                                               ; preds = %._crit_edge202, %63
  %65 = add nuw i32 %.0203, 1
  %exitcond214.not = icmp eq i32 %65, %8
  br i1 %exitcond214.not, label %._crit_edge204, label %.preheader184, !llvm.loop !16

._crit_edge204:                                   ; preds = %64, %.preheader185.._crit_edge204_crit_edge
  %.pre-phi = phi i64 [ %.pre, %.preheader185.._crit_edge204_crit_edge ], [ %33, %64 ]
  %66 = zext i32 %8 to i64
  %67 = mul nuw nsw i64 %.pre-phi, %66
  tail call void @libxsmm_aarch64_instruction_alu_compute_imm64(ptr noundef %0, i32 noundef 4097, i32 noundef %2, i32 noundef %3, i32 noundef %2, i64 noundef %67) #2
  br label %.loopexit

.preheader188:                                    ; preds = %.preheader188.lr.ph, %._crit_edge
  %.1195 = phi i32 [ 0, %.preheader188.lr.ph ], [ %95, %._crit_edge ]
  br i1 %.not206, label %.preheader187, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader188
  %68 = icmp eq i32 %.1195, 0
  %69 = mul i32 %.1195, %17
  %70 = add i32 %69, %24
  br i1 %68, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %.3190.us = phi i32 [ %72, %.lr.ph.split.us ], [ 0, %.lr.ph ]
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 16, i32 noundef %.3190.us, i32 noundef 1) #2
  %71 = add i32 %70, %.3190.us
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245373971, i32 noundef %.3190.us, i32 noundef %.3190.us, i8 noundef zeroext 0, i32 noundef %71, i32 noundef 1) #2
  %72 = add nuw i32 %.3190.us, 1
  %73 = icmp ult i32 %72, %11
  br i1 %73, label %.lr.ph.split.us, label %.preheader187, !llvm.loop !17

.preheader187:                                    ; preds = %.lr.ph.split, %.lr.ph.split.us, %.preheader188
  br i1 %.not207, label %.preheader186, label %.lr.ph192

.lr.ph192:                                        ; preds = %.preheader187
  %74 = icmp eq i32 %.1195, 0
  %75 = mul i32 %.1195, %17
  %76 = add i32 %29, %75
  br label %83

.lr.ph.split:                                     ; preds = %.lr.ph, %.lr.ph.split
  %.3190 = phi i32 [ %78, %.lr.ph.split ], [ 0, %.lr.ph ]
  %77 = add i32 %70, %.3190
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245373971, i32 noundef %.3190, i32 noundef %.3190, i8 noundef zeroext 0, i32 noundef %77, i32 noundef 1) #2
  %78 = add nuw i32 %.3190, 1
  %79 = icmp ult i32 %78, %11
  br i1 %79, label %.lr.ph.split, label %.preheader187, !llvm.loop !17

.preheader186:                                    ; preds = %._crit_edge215, %.preheader187
  br i1 %.not208, label %._crit_edge, label %.lr.ph194

.lr.ph194:                                        ; preds = %.preheader186
  %80 = icmp eq i32 %.1195, 0
  %81 = mul i32 %.1195, %17
  %82 = add i32 %30, %81
  br label %89

83:                                               ; preds = %.lr.ph192, %._crit_edge215
  %.4191 = phi i32 [ 0, %.lr.ph192 ], [ %87, %._crit_edge215 ]
  %84 = add i32 %.4191, %11
  br i1 %74, label %85, label %._crit_edge215

85:                                               ; preds = %83
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 8, i32 noundef %84, i32 noundef 6) #2
  br label %._crit_edge215

._crit_edge215:                                   ; preds = %83, %85
  %86 = add i32 %76, %.4191
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245373971, i32 noundef %84, i32 noundef %84, i8 noundef zeroext 0, i32 noundef %86, i32 noundef 0) #2
  %87 = add nuw i32 %.4191, 1
  %88 = icmp ult i32 %87, %14
  br i1 %88, label %83, label %.preheader186, !llvm.loop !18

89:                                               ; preds = %.lr.ph194, %._crit_edge216
  %.5193 = phi i32 [ 0, %.lr.ph194 ], [ %93, %._crit_edge216 ]
  %90 = add i32 %16, %.5193
  br i1 %80, label %91, label %._crit_edge216

91:                                               ; preds = %89
  tail call void @libxsmm_aarch64_instruction_asimd_move(ptr noundef %0, i32 noundef 1010828294, i32 noundef %3, i32 noundef 127, i32 noundef 4, i32 noundef %90, i32 noundef 4) #2
  br label %._crit_edge216

._crit_edge216:                                   ; preds = %89, %91
  %92 = add i32 %82, %.5193
  tail call void @libxsmm_aarch64_instruction_asimd_compute(ptr noundef %0, i32 noundef 245373971, i32 noundef %90, i32 noundef %90, i8 noundef zeroext 0, i32 noundef %92, i32 noundef 0) #2
  %93 = add nuw nsw i32 %.5193, 1
  %94 = icmp ult i32 %93, %15
  br i1 %94, label %89, label %._crit_edge, !llvm.loop !19

._crit_edge:                                      ; preds = %._crit_edge216, %.preheader186
  %95 = add nuw i32 %.1195, 1
  %exitcond.not = icmp eq i32 %95, %8
  br i1 %exitcond.not, label %.loopexit, label %.preheader188, !llvm.loop !20

.loopexit:                                        ; preds = %._crit_edge, %.preheader189, %._crit_edge204
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 24}
!6 = !{!"libxsmm_gemm_descriptor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !8, i64 28, !8, i64 29, !8, i64 32, !10, i64 33, !10, i64 41, !8, i64 49, !7, i64 50, !7, i64 54, !7, i64 58, !11, i64 62, !11, i64 64, !8, i64 66, !8, i64 67, !8, i64 68, !8, i64 69, !11, i64 70, !11, i64 72, !11, i64 74, !11, i64 76, !11, i64 78, !11, i64 80, !7, i64 82, !7, i64 86, !7, i64 90, !8, i64 94}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long long", !8, i64 0}
!11 = !{!"short", !8, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}


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