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

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

%union.libxsmm_xcopykernel = type { ptr }
%struct.libxsmm_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@.str.9 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_matcopy_internal = external hidden unnamed_addr constant [199 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [260 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_matcopy_internal(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, i32 noundef %10, i64 %11) #2 {
  %13 = alloca %union.libxsmm_xcopykernel, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i8, align 1
  %51 = alloca ptr, align 8
  %52 = alloca i8, align 1
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca ptr, align 8
  %68 = alloca ptr, align 8
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca i8, align 1
  %74 = alloca ptr, align 8
  %75 = alloca i8, align 1
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i32, align 4
  %81 = alloca i32, align 4
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca ptr, align 8
  %91 = alloca ptr, align 8
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca ptr, align 8
  %95 = alloca ptr, align 8
  %96 = alloca i8, align 1
  %97 = alloca ptr, align 8
  %98 = alloca i8, align 1
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca ptr, align 8
  %102 = alloca ptr, align 8
  %103 = alloca i32, align 4
  %104 = alloca i32, align 4
  %105 = alloca ptr, align 8
  %106 = alloca ptr, align 8
  %107 = alloca i32, align 4
  %108 = alloca i32, align 4
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca i32, align 4
  %112 = alloca i32, align 4
  %113 = alloca ptr, align 8
  %114 = alloca ptr, align 8
  %115 = alloca i32, align 4
  %116 = alloca i32, align 4
  %117 = alloca ptr, align 8
  %118 = alloca ptr, align 8
  %119 = alloca i8, align 1
  %120 = alloca ptr, align 8
  %121 = alloca i8, align 1
  %122 = getelementptr inbounds %union.libxsmm_xcopykernel, ptr %13, i32 0, i32 0
  %123 = inttoptr i64 %11 to ptr
  store ptr %123, ptr %122, align 8
  store ptr %0, ptr %14, align 8, !tbaa !5
  store ptr %1, ptr %15, align 8, !tbaa !5
  store i32 %2, ptr %16, align 4, !tbaa !9
  store i32 %3, ptr %17, align 4, !tbaa !9
  store i32 %4, ptr %18, align 4, !tbaa !9
  store i32 %5, ptr %19, align 4, !tbaa !9
  store i32 %6, ptr %20, align 4, !tbaa !9
  store i32 %7, ptr %21, align 4, !tbaa !9
  store i32 %8, ptr %22, align 4, !tbaa !9
  store i32 %9, ptr %23, align 4, !tbaa !9
  store i32 %10, ptr %24, align 4, !tbaa !9
  %124 = load ptr, ptr %15, align 8, !tbaa !5
  %125 = icmp ne ptr null, %124
  br i1 %125, label %126, label %127

126:                                              ; preds = %12
  br label %128

127:                                              ; preds = %12
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.9, i32 noundef 200, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

128:                                              ; preds = %126
  br label %129

129:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %130 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %130, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %131 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %131, ptr %26, align 4, !tbaa !9
  %132 = load i32, ptr %24, align 4, !tbaa !9
  %133 = icmp ult i32 0, %132
  br i1 %133, label %134, label %138

134:                                              ; preds = %129
  %135 = load i32, ptr %23, align 4, !tbaa !9
  %136 = icmp ult i32 0, %135
  br i1 %136, label %137, label %138

137:                                              ; preds = %134
  br label %139

138:                                              ; preds = %134, %129
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

139:                                              ; preds = %137
  %140 = load ptr, ptr %13, align 8, !tbaa !11
  %141 = icmp ne ptr null, %140
  br i1 %141, label %142, label %212

142:                                              ; preds = %139
  br label %143

143:                                              ; preds = %207, %142
  %144 = load i32, ptr %25, align 4, !tbaa !9
  %145 = load i32, ptr %22, align 4, !tbaa !9
  %146 = load i32, ptr %24, align 4, !tbaa !9
  %147 = sub nsw i32 %145, %146
  %148 = add nsw i32 %147, 1
  %149 = icmp slt i32 %144, %148
  br i1 %149, label %150, label %211

150:                                              ; preds = %143
  %151 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %151, ptr %26, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %202, %150
  %153 = load i32, ptr %26, align 4, !tbaa !9
  %154 = load i32, ptr %20, align 4, !tbaa !9
  %155 = load i32, ptr %23, align 4, !tbaa !9
  %156 = sub nsw i32 %154, %155
  %157 = add nsw i32 %156, 1
  %158 = icmp slt i32 %153, %157
  br i1 %158, label %159, label %206

159:                                              ; preds = %152
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %160 = load ptr, ptr %15, align 8, !tbaa !5
  %161 = load i32, ptr %16, align 4, !tbaa !9
  %162 = zext i32 %161 to i64
  %163 = load i32, ptr %25, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = load i32, ptr %17, align 4, !tbaa !9
  %166 = zext i32 %165 to i64
  %167 = mul i64 %164, %166
  %168 = load i32, ptr %26, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = add i64 %167, %169
  %171 = mul i64 %162, %170
  %172 = getelementptr inbounds i8, ptr %160, i64 %171
  store ptr %172, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %173 = load ptr, ptr %14, align 8, !tbaa !5
  %174 = load i32, ptr %16, align 4, !tbaa !9
  %175 = zext i32 %174 to i64
  %176 = load i32, ptr %25, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = load i32, ptr %18, align 4, !tbaa !9
  %179 = zext i32 %178 to i64
  %180 = mul i64 %177, %179
  %181 = load i32, ptr %26, align 4, !tbaa !9
  %182 = sext i32 %181 to i64
  %183 = add i64 %180, %182
  %184 = mul i64 %175, %183
  %185 = getelementptr inbounds i8, ptr %173, i64 %184
  store ptr %185, ptr %28, align 8, !tbaa !5
  br label %186

186:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 128, ptr %29) #5
  %187 = load ptr, ptr %27, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %29, i32 0, i32 1
  %189 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %188, i32 0, i32 0
  store ptr %187, ptr %189, align 8, !tbaa !12
  %190 = load ptr, ptr %28, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.libxsmm_meltw_unary_param, ptr %29, i32 0, i32 2
  %192 = getelementptr inbounds %struct.libxsmm_matrix_arg, ptr %191, i32 0, i32 0
  store ptr %190, ptr %192, align 8, !tbaa !16
  %193 = load ptr, ptr %13, align 8, !tbaa !11
  %194 = icmp ne ptr null, %193
  br i1 %194, label %195, label %196

195:                                              ; preds = %186
  br label %197

196:                                              ; preds = %186
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

197:                                              ; preds = %195
  %198 = load ptr, ptr %13, align 8, !tbaa !11
  call void %198(ptr noundef %29)
  %199 = load i32, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 128, ptr %29) #5
  br label %200

200:                                              ; preds = %197
  br label %201

201:                                              ; preds = %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %23, align 4, !tbaa !9
  %204 = load i32, ptr %26, align 4, !tbaa !9
  %205 = add i32 %204, %203
  store i32 %205, ptr %26, align 4, !tbaa !9
  br label %152, !llvm.loop !17

206:                                              ; preds = %152
  br label %207

207:                                              ; preds = %206
  %208 = load i32, ptr %24, align 4, !tbaa !9
  %209 = load i32, ptr %25, align 4, !tbaa !9
  %210 = add i32 %209, %208
  store i32 %210, ptr %25, align 4, !tbaa !9
  br label %143, !llvm.loop !19

211:                                              ; preds = %143
  br label %563

212:                                              ; preds = %139
  br label %213

213:                                              ; preds = %558, %212
  %214 = load i32, ptr %25, align 4, !tbaa !9
  %215 = load i32, ptr %22, align 4, !tbaa !9
  %216 = load i32, ptr %24, align 4, !tbaa !9
  %217 = sub nsw i32 %215, %216
  %218 = add nsw i32 %217, 1
  %219 = icmp slt i32 %214, %218
  br i1 %219, label %220, label %562

220:                                              ; preds = %213
  %221 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %221, ptr %26, align 4, !tbaa !9
  br label %222

222:                                              ; preds = %553, %220
  %223 = load i32, ptr %26, align 4, !tbaa !9
  %224 = load i32, ptr %20, align 4, !tbaa !9
  %225 = load i32, ptr %23, align 4, !tbaa !9
  %226 = sub nsw i32 %224, %225
  %227 = add nsw i32 %226, 1
  %228 = icmp slt i32 %223, %227
  br i1 %228, label %229, label %557

229:                                              ; preds = %222
  br label %230

230:                                              ; preds = %229
  %231 = load i32, ptr %16, align 4, !tbaa !9
  switch i32 %231, label %443 [
    i32 2, label %232
    i32 4, label %285
    i32 8, label %338
    i32 16, label %391
  ]

232:                                              ; preds = %230
  br label %233

233:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %234 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %234, ptr %30, align 4, !tbaa !9
  br label %235

235:                                              ; preds = %279, %233
  %236 = load i32, ptr %30, align 4, !tbaa !9
  %237 = load i32, ptr %25, align 4, !tbaa !9
  %238 = load i32, ptr %24, align 4, !tbaa !9
  %239 = add i32 %237, %238
  %240 = icmp slt i32 %236, %239
  br i1 %240, label %241, label %282

241:                                              ; preds = %235
  %242 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %242, ptr %31, align 4, !tbaa !9
  br label %243

243:                                              ; preds = %275, %241
  %244 = load i32, ptr %31, align 4, !tbaa !9
  %245 = load i32, ptr %26, align 4, !tbaa !9
  %246 = load i32, ptr %23, align 4, !tbaa !9
  %247 = add i32 %245, %246
  %248 = icmp slt i32 %244, %247
  br i1 %248, label %249, label %278

249:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %250 = load ptr, ptr %15, align 8, !tbaa !5
  %251 = load i32, ptr %30, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = load i32, ptr %17, align 4, !tbaa !9
  %254 = zext i32 %253 to i64
  %255 = mul i64 %252, %254
  %256 = load i32, ptr %31, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = add i64 %255, %257
  %259 = mul i64 2, %258
  %260 = getelementptr inbounds i8, ptr %250, i64 %259
  store ptr %260, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %261 = load ptr, ptr %14, align 8, !tbaa !5
  %262 = load i32, ptr %30, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = load i32, ptr %18, align 4, !tbaa !9
  %265 = zext i32 %264 to i64
  %266 = mul i64 %263, %265
  %267 = load i32, ptr %31, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = add i64 %266, %268
  %270 = mul i64 2, %269
  %271 = getelementptr inbounds i8, ptr %261, i64 %270
  store ptr %271, ptr %33, align 8, !tbaa !5
  %272 = load ptr, ptr %32, align 8, !tbaa !5
  %273 = load i16, ptr %272, align 2, !tbaa !20
  %274 = load ptr, ptr %33, align 8, !tbaa !5
  store i16 %273, ptr %274, align 2, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  br label %275

275:                                              ; preds = %249
  %276 = load i32, ptr %31, align 4, !tbaa !9
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %31, align 4, !tbaa !9
  br label %243, !llvm.loop !22

278:                                              ; preds = %243
  br label %279

279:                                              ; preds = %278
  %280 = load i32, ptr %30, align 4, !tbaa !9
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %30, align 4, !tbaa !9
  br label %235, !llvm.loop !23

282:                                              ; preds = %235
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283
  br label %550

285:                                              ; preds = %230
  br label %286

286:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %287 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %287, ptr %34, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %332, %286
  %289 = load i32, ptr %34, align 4, !tbaa !9
  %290 = load i32, ptr %25, align 4, !tbaa !9
  %291 = load i32, ptr %24, align 4, !tbaa !9
  %292 = add i32 %290, %291
  %293 = icmp slt i32 %289, %292
  br i1 %293, label %294, label %335

294:                                              ; preds = %288
  %295 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %295, ptr %35, align 4, !tbaa !9
  br label %296

296:                                              ; preds = %328, %294
  %297 = load i32, ptr %35, align 4, !tbaa !9
  %298 = load i32, ptr %26, align 4, !tbaa !9
  %299 = load i32, ptr %23, align 4, !tbaa !9
  %300 = add i32 %298, %299
  %301 = icmp slt i32 %297, %300
  br i1 %301, label %302, label %331

302:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %303 = load ptr, ptr %15, align 8, !tbaa !5
  %304 = load i32, ptr %34, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = load i32, ptr %17, align 4, !tbaa !9
  %307 = zext i32 %306 to i64
  %308 = mul i64 %305, %307
  %309 = load i32, ptr %35, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = add i64 %308, %310
  %312 = mul i64 4, %311
  %313 = getelementptr inbounds i8, ptr %303, i64 %312
  store ptr %313, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %314 = load ptr, ptr %14, align 8, !tbaa !5
  %315 = load i32, ptr %34, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = load i32, ptr %18, align 4, !tbaa !9
  %318 = zext i32 %317 to i64
  %319 = mul i64 %316, %318
  %320 = load i32, ptr %35, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = add i64 %319, %321
  %323 = mul i64 4, %322
  %324 = getelementptr inbounds i8, ptr %314, i64 %323
  store ptr %324, ptr %37, align 8, !tbaa !5
  %325 = load ptr, ptr %36, align 8, !tbaa !5
  %326 = load float, ptr %325, align 4, !tbaa !24
  %327 = load ptr, ptr %37, align 8, !tbaa !5
  store float %326, ptr %327, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %328

328:                                              ; preds = %302
  %329 = load i32, ptr %35, align 4, !tbaa !9
  %330 = add nsw i32 %329, 1
  store i32 %330, ptr %35, align 4, !tbaa !9
  br label %296, !llvm.loop !26

331:                                              ; preds = %296
  br label %332

332:                                              ; preds = %331
  %333 = load i32, ptr %34, align 4, !tbaa !9
  %334 = add nsw i32 %333, 1
  store i32 %334, ptr %34, align 4, !tbaa !9
  br label %288, !llvm.loop !27

335:                                              ; preds = %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  br label %336

336:                                              ; preds = %335
  br label %337

337:                                              ; preds = %336
  br label %550

338:                                              ; preds = %230
  br label %339

339:                                              ; preds = %338
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %340 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %340, ptr %38, align 4, !tbaa !9
  br label %341

341:                                              ; preds = %385, %339
  %342 = load i32, ptr %38, align 4, !tbaa !9
  %343 = load i32, ptr %25, align 4, !tbaa !9
  %344 = load i32, ptr %24, align 4, !tbaa !9
  %345 = add i32 %343, %344
  %346 = icmp slt i32 %342, %345
  br i1 %346, label %347, label %388

347:                                              ; preds = %341
  %348 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %348, ptr %39, align 4, !tbaa !9
  br label %349

349:                                              ; preds = %381, %347
  %350 = load i32, ptr %39, align 4, !tbaa !9
  %351 = load i32, ptr %26, align 4, !tbaa !9
  %352 = load i32, ptr %23, align 4, !tbaa !9
  %353 = add i32 %351, %352
  %354 = icmp slt i32 %350, %353
  br i1 %354, label %355, label %384

355:                                              ; preds = %349
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %356 = load ptr, ptr %15, align 8, !tbaa !5
  %357 = load i32, ptr %38, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = load i32, ptr %17, align 4, !tbaa !9
  %360 = zext i32 %359 to i64
  %361 = mul i64 %358, %360
  %362 = load i32, ptr %39, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = add i64 %361, %363
  %365 = mul i64 8, %364
  %366 = getelementptr inbounds i8, ptr %356, i64 %365
  store ptr %366, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %367 = load ptr, ptr %14, align 8, !tbaa !5
  %368 = load i32, ptr %38, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = load i32, ptr %18, align 4, !tbaa !9
  %371 = zext i32 %370 to i64
  %372 = mul i64 %369, %371
  %373 = load i32, ptr %39, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = add i64 %372, %374
  %376 = mul i64 8, %375
  %377 = getelementptr inbounds i8, ptr %367, i64 %376
  store ptr %377, ptr %41, align 8, !tbaa !5
  %378 = load ptr, ptr %40, align 8, !tbaa !5
  %379 = load double, ptr %378, align 8, !tbaa !28
  %380 = load ptr, ptr %41, align 8, !tbaa !5
  store double %379, ptr %380, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %381

381:                                              ; preds = %355
  %382 = load i32, ptr %39, align 4, !tbaa !9
  %383 = add nsw i32 %382, 1
  store i32 %383, ptr %39, align 4, !tbaa !9
  br label %349, !llvm.loop !30

384:                                              ; preds = %349
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %38, align 4, !tbaa !9
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %38, align 4, !tbaa !9
  br label %341, !llvm.loop !31

388:                                              ; preds = %341
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %389

389:                                              ; preds = %388
  br label %390

390:                                              ; preds = %389
  br label %550

391:                                              ; preds = %230
  br label %392

392:                                              ; preds = %391
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %393 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %393, ptr %42, align 4, !tbaa !9
  br label %394

394:                                              ; preds = %437, %392
  %395 = load i32, ptr %42, align 4, !tbaa !9
  %396 = load i32, ptr %25, align 4, !tbaa !9
  %397 = load i32, ptr %24, align 4, !tbaa !9
  %398 = add i32 %396, %397
  %399 = icmp slt i32 %395, %398
  br i1 %399, label %400, label %440

400:                                              ; preds = %394
  %401 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %401, ptr %43, align 4, !tbaa !9
  br label %402

402:                                              ; preds = %433, %400
  %403 = load i32, ptr %43, align 4, !tbaa !9
  %404 = load i32, ptr %26, align 4, !tbaa !9
  %405 = load i32, ptr %23, align 4, !tbaa !9
  %406 = add i32 %404, %405
  %407 = icmp slt i32 %403, %406
  br i1 %407, label %408, label %436

408:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %409 = load ptr, ptr %15, align 8, !tbaa !5
  %410 = load i32, ptr %42, align 4, !tbaa !9
  %411 = sext i32 %410 to i64
  %412 = load i32, ptr %17, align 4, !tbaa !9
  %413 = zext i32 %412 to i64
  %414 = mul i64 %411, %413
  %415 = load i32, ptr %43, align 4, !tbaa !9
  %416 = sext i32 %415 to i64
  %417 = add i64 %414, %416
  %418 = mul i64 16, %417
  %419 = getelementptr inbounds i8, ptr %409, i64 %418
  store ptr %419, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %420 = load ptr, ptr %14, align 8, !tbaa !5
  %421 = load i32, ptr %42, align 4, !tbaa !9
  %422 = sext i32 %421 to i64
  %423 = load i32, ptr %18, align 4, !tbaa !9
  %424 = zext i32 %423 to i64
  %425 = mul i64 %422, %424
  %426 = load i32, ptr %43, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = add i64 %425, %427
  %429 = mul i64 16, %428
  %430 = getelementptr inbounds i8, ptr %420, i64 %429
  store ptr %430, ptr %45, align 8, !tbaa !5
  %431 = load ptr, ptr %45, align 8, !tbaa !5
  %432 = load ptr, ptr %44, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %431, ptr align 8 %432, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %433

433:                                              ; preds = %408
  %434 = load i32, ptr %43, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %43, align 4, !tbaa !9
  br label %402, !llvm.loop !33

436:                                              ; preds = %402
  br label %437

437:                                              ; preds = %436
  %438 = load i32, ptr %42, align 4, !tbaa !9
  %439 = add nsw i32 %438, 1
  store i32 %439, ptr %42, align 4, !tbaa !9
  br label %394, !llvm.loop !34

440:                                              ; preds = %394
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  br label %441

441:                                              ; preds = %440
  br label %442

442:                                              ; preds = %441
  br label %550

443:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %444 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %444, ptr %46, align 4, !tbaa !9
  br label %445

445:                                              ; preds = %546, %443
  %446 = load i32, ptr %46, align 4, !tbaa !9
  %447 = load i32, ptr %25, align 4, !tbaa !9
  %448 = load i32, ptr %24, align 4, !tbaa !9
  %449 = add i32 %447, %448
  %450 = icmp slt i32 %446, %449
  br i1 %450, label %451, label %549

451:                                              ; preds = %445
  %452 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %452, ptr %47, align 4, !tbaa !9
  br label %453

453:                                              ; preds = %542, %451
  %454 = load i32, ptr %47, align 4, !tbaa !9
  %455 = load i32, ptr %26, align 4, !tbaa !9
  %456 = load i32, ptr %23, align 4, !tbaa !9
  %457 = add i32 %455, %456
  %458 = icmp slt i32 %454, %457
  br i1 %458, label %459, label %545

459:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %460 = load ptr, ptr %15, align 8, !tbaa !5
  %461 = load i32, ptr %16, align 4, !tbaa !9
  %462 = zext i32 %461 to i64
  %463 = load i32, ptr %46, align 4, !tbaa !9
  %464 = sext i32 %463 to i64
  %465 = load i32, ptr %17, align 4, !tbaa !9
  %466 = zext i32 %465 to i64
  %467 = mul i64 %464, %466
  %468 = load i32, ptr %47, align 4, !tbaa !9
  %469 = sext i32 %468 to i64
  %470 = add i64 %467, %469
  %471 = mul i64 %462, %470
  %472 = getelementptr inbounds i8, ptr %460, i64 %471
  store ptr %472, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %473 = load ptr, ptr %14, align 8, !tbaa !5
  %474 = load i32, ptr %16, align 4, !tbaa !9
  %475 = zext i32 %474 to i64
  %476 = load i32, ptr %46, align 4, !tbaa !9
  %477 = sext i32 %476 to i64
  %478 = load i32, ptr %18, align 4, !tbaa !9
  %479 = zext i32 %478 to i64
  %480 = mul i64 %477, %479
  %481 = load i32, ptr %47, align 4, !tbaa !9
  %482 = sext i32 %481 to i64
  %483 = add i64 %480, %482
  %484 = mul i64 %475, %483
  %485 = getelementptr inbounds i8, ptr %473, i64 %484
  store ptr %485, ptr %49, align 8, !tbaa !5
  br label %486

486:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #5
  %487 = load i32, ptr %16, align 4, !tbaa !9
  %488 = trunc i32 %487 to i8
  %489 = sext i8 %488 to i32
  %490 = icmp eq i32 -128, %489
  br i1 %490, label %496, label %491

491:                                              ; preds = %486
  %492 = load i32, ptr %16, align 4, !tbaa !9
  %493 = trunc i32 %492 to i8
  %494 = sext i8 %493 to i32
  %495 = icmp slt i32 -128, %494
  br i1 %495, label %496, label %515

496:                                              ; preds = %491, %486
  %497 = load i32, ptr %16, align 4, !tbaa !9
  %498 = zext i32 %497 to i64
  %499 = mul i64 1, %498
  %500 = icmp ult i64 %499, 127
  br i1 %500, label %501, label %505

501:                                              ; preds = %496
  %502 = load i32, ptr %16, align 4, !tbaa !9
  %503 = zext i32 %502 to i64
  %504 = mul i64 1, %503
  br label %506

505:                                              ; preds = %496
  br label %506

506:                                              ; preds = %505, %501
  %507 = phi i64 [ %504, %501 ], [ 127, %505 ]
  %508 = icmp ule i64 %507, 127
  br i1 %508, label %509, label %515

509:                                              ; preds = %506
  %510 = load i32, ptr %16, align 4, !tbaa !9
  %511 = uitofp i32 %510 to double
  %512 = fcmp ole double 0.000000e+00, %511
  br i1 %512, label %514, label %513

513:                                              ; preds = %509
  br i1 true, label %514, label %515

514:                                              ; preds = %513, %509
  br label %516

515:                                              ; preds = %513, %506, %491
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

516:                                              ; preds = %514
  %517 = load i32, ptr %16, align 4, !tbaa !9
  %518 = trunc i32 %517 to i8
  store i8 %518, ptr %50, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %519 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %519, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #5
  store i8 0, ptr %52, align 1, !tbaa !11
  br label %520

520:                                              ; preds = %536, %516
  %521 = load i8, ptr %52, align 1, !tbaa !11
  %522 = sext i8 %521 to i32
  %523 = load i8, ptr %50, align 1, !tbaa !11
  %524 = sext i8 %523 to i32
  %525 = icmp slt i32 %522, %524
  br i1 %525, label %526, label %539

526:                                              ; preds = %520
  %527 = load ptr, ptr %48, align 8, !tbaa !5
  %528 = load i8, ptr %52, align 1, !tbaa !11
  %529 = sext i8 %528 to i64
  %530 = getelementptr inbounds i8, ptr %527, i64 %529
  %531 = load i8, ptr %530, align 1, !tbaa !11
  %532 = load ptr, ptr %51, align 8, !tbaa !5
  %533 = load i8, ptr %52, align 1, !tbaa !11
  %534 = sext i8 %533 to i64
  %535 = getelementptr inbounds i8, ptr %532, i64 %534
  store i8 %531, ptr %535, align 1, !tbaa !11
  br label %536

536:                                              ; preds = %526
  %537 = load i8, ptr %52, align 1, !tbaa !11
  %538 = add i8 %537, 1
  store i8 %538, ptr %52, align 1, !tbaa !11
  br label %520, !llvm.loop !35

539:                                              ; preds = %520
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #5
  br label %540

540:                                              ; preds = %539
  br label %541

541:                                              ; preds = %540
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %542

542:                                              ; preds = %541
  %543 = load i32, ptr %47, align 4, !tbaa !9
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %47, align 4, !tbaa !9
  br label %453, !llvm.loop !37

545:                                              ; preds = %453
  br label %546

546:                                              ; preds = %545
  %547 = load i32, ptr %46, align 4, !tbaa !9
  %548 = add nsw i32 %547, 1
  store i32 %548, ptr %46, align 4, !tbaa !9
  br label %445, !llvm.loop !38

549:                                              ; preds = %445
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  br label %550

550:                                              ; preds = %549, %442, %390, %337, %284
  br label %551

551:                                              ; preds = %550
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552
  %554 = load i32, ptr %23, align 4, !tbaa !9
  %555 = load i32, ptr %26, align 4, !tbaa !9
  %556 = add i32 %555, %554
  store i32 %556, ptr %26, align 4, !tbaa !9
  br label %222, !llvm.loop !39

557:                                              ; preds = %222
  br label %558

558:                                              ; preds = %557
  %559 = load i32, ptr %24, align 4, !tbaa !9
  %560 = load i32, ptr %25, align 4, !tbaa !9
  %561 = add i32 %560, %559
  store i32 %561, ptr %25, align 4, !tbaa !9
  br label %213, !llvm.loop !40

562:                                              ; preds = %213
  br label %563

563:                                              ; preds = %562, %211
  %564 = load i32, ptr %21, align 4, !tbaa !9
  store i32 %564, ptr %25, align 4, !tbaa !9
  br label %565

565:                                              ; preds = %886, %563
  %566 = load i32, ptr %25, align 4, !tbaa !9
  %567 = load i32, ptr %22, align 4, !tbaa !9
  %568 = load i32, ptr %24, align 4, !tbaa !9
  %569 = sub nsw i32 %567, %568
  %570 = add nsw i32 %569, 1
  %571 = icmp slt i32 %566, %570
  br i1 %571, label %572, label %890

572:                                              ; preds = %565
  br label %573

573:                                              ; preds = %572
  %574 = load i32, ptr %16, align 4, !tbaa !9
  switch i32 %574, label %778 [
    i32 2, label %575
    i32 4, label %626
    i32 8, label %677
    i32 16, label %728
  ]

575:                                              ; preds = %573
  br label %576

576:                                              ; preds = %575
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  %577 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %577, ptr %53, align 4, !tbaa !9
  br label %578

578:                                              ; preds = %620, %576
  %579 = load i32, ptr %53, align 4, !tbaa !9
  %580 = load i32, ptr %25, align 4, !tbaa !9
  %581 = load i32, ptr %24, align 4, !tbaa !9
  %582 = add i32 %580, %581
  %583 = icmp slt i32 %579, %582
  br i1 %583, label %584, label %623

584:                                              ; preds = %578
  %585 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %585, ptr %54, align 4, !tbaa !9
  br label %586

586:                                              ; preds = %616, %584
  %587 = load i32, ptr %54, align 4, !tbaa !9
  %588 = load i32, ptr %20, align 4, !tbaa !9
  %589 = icmp slt i32 %587, %588
  br i1 %589, label %590, label %619

590:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %591 = load ptr, ptr %15, align 8, !tbaa !5
  %592 = load i32, ptr %53, align 4, !tbaa !9
  %593 = sext i32 %592 to i64
  %594 = load i32, ptr %17, align 4, !tbaa !9
  %595 = zext i32 %594 to i64
  %596 = mul i64 %593, %595
  %597 = load i32, ptr %54, align 4, !tbaa !9
  %598 = sext i32 %597 to i64
  %599 = add i64 %596, %598
  %600 = mul i64 2, %599
  %601 = getelementptr inbounds i8, ptr %591, i64 %600
  store ptr %601, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %602 = load ptr, ptr %14, align 8, !tbaa !5
  %603 = load i32, ptr %53, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = load i32, ptr %18, align 4, !tbaa !9
  %606 = zext i32 %605 to i64
  %607 = mul i64 %604, %606
  %608 = load i32, ptr %54, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = add i64 %607, %609
  %611 = mul i64 2, %610
  %612 = getelementptr inbounds i8, ptr %602, i64 %611
  store ptr %612, ptr %56, align 8, !tbaa !5
  %613 = load ptr, ptr %55, align 8, !tbaa !5
  %614 = load i16, ptr %613, align 2, !tbaa !20
  %615 = load ptr, ptr %56, align 8, !tbaa !5
  store i16 %614, ptr %615, align 2, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  br label %616

616:                                              ; preds = %590
  %617 = load i32, ptr %54, align 4, !tbaa !9
  %618 = add nsw i32 %617, 1
  store i32 %618, ptr %54, align 4, !tbaa !9
  br label %586, !llvm.loop !41

619:                                              ; preds = %586
  br label %620

620:                                              ; preds = %619
  %621 = load i32, ptr %53, align 4, !tbaa !9
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr %53, align 4, !tbaa !9
  br label %578, !llvm.loop !42

623:                                              ; preds = %578
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  br label %624

624:                                              ; preds = %623
  br label %625

625:                                              ; preds = %624
  br label %883

626:                                              ; preds = %573
  br label %627

627:                                              ; preds = %626
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %628 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %628, ptr %57, align 4, !tbaa !9
  br label %629

629:                                              ; preds = %671, %627
  %630 = load i32, ptr %57, align 4, !tbaa !9
  %631 = load i32, ptr %25, align 4, !tbaa !9
  %632 = load i32, ptr %24, align 4, !tbaa !9
  %633 = add i32 %631, %632
  %634 = icmp slt i32 %630, %633
  br i1 %634, label %635, label %674

635:                                              ; preds = %629
  %636 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %636, ptr %58, align 4, !tbaa !9
  br label %637

637:                                              ; preds = %667, %635
  %638 = load i32, ptr %58, align 4, !tbaa !9
  %639 = load i32, ptr %20, align 4, !tbaa !9
  %640 = icmp slt i32 %638, %639
  br i1 %640, label %641, label %670

641:                                              ; preds = %637
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %642 = load ptr, ptr %15, align 8, !tbaa !5
  %643 = load i32, ptr %57, align 4, !tbaa !9
  %644 = sext i32 %643 to i64
  %645 = load i32, ptr %17, align 4, !tbaa !9
  %646 = zext i32 %645 to i64
  %647 = mul i64 %644, %646
  %648 = load i32, ptr %58, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = add i64 %647, %649
  %651 = mul i64 4, %650
  %652 = getelementptr inbounds i8, ptr %642, i64 %651
  store ptr %652, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  %653 = load ptr, ptr %14, align 8, !tbaa !5
  %654 = load i32, ptr %57, align 4, !tbaa !9
  %655 = sext i32 %654 to i64
  %656 = load i32, ptr %18, align 4, !tbaa !9
  %657 = zext i32 %656 to i64
  %658 = mul i64 %655, %657
  %659 = load i32, ptr %58, align 4, !tbaa !9
  %660 = sext i32 %659 to i64
  %661 = add i64 %658, %660
  %662 = mul i64 4, %661
  %663 = getelementptr inbounds i8, ptr %653, i64 %662
  store ptr %663, ptr %60, align 8, !tbaa !5
  %664 = load ptr, ptr %59, align 8, !tbaa !5
  %665 = load float, ptr %664, align 4, !tbaa !24
  %666 = load ptr, ptr %60, align 8, !tbaa !5
  store float %665, ptr %666, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  br label %667

667:                                              ; preds = %641
  %668 = load i32, ptr %58, align 4, !tbaa !9
  %669 = add nsw i32 %668, 1
  store i32 %669, ptr %58, align 4, !tbaa !9
  br label %637, !llvm.loop !43

670:                                              ; preds = %637
  br label %671

671:                                              ; preds = %670
  %672 = load i32, ptr %57, align 4, !tbaa !9
  %673 = add nsw i32 %672, 1
  store i32 %673, ptr %57, align 4, !tbaa !9
  br label %629, !llvm.loop !44

674:                                              ; preds = %629
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  br label %675

675:                                              ; preds = %674
  br label %676

676:                                              ; preds = %675
  br label %883

677:                                              ; preds = %573
  br label %678

678:                                              ; preds = %677
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %679 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %679, ptr %61, align 4, !tbaa !9
  br label %680

680:                                              ; preds = %722, %678
  %681 = load i32, ptr %61, align 4, !tbaa !9
  %682 = load i32, ptr %25, align 4, !tbaa !9
  %683 = load i32, ptr %24, align 4, !tbaa !9
  %684 = add i32 %682, %683
  %685 = icmp slt i32 %681, %684
  br i1 %685, label %686, label %725

686:                                              ; preds = %680
  %687 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %687, ptr %62, align 4, !tbaa !9
  br label %688

688:                                              ; preds = %718, %686
  %689 = load i32, ptr %62, align 4, !tbaa !9
  %690 = load i32, ptr %20, align 4, !tbaa !9
  %691 = icmp slt i32 %689, %690
  br i1 %691, label %692, label %721

692:                                              ; preds = %688
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %693 = load ptr, ptr %15, align 8, !tbaa !5
  %694 = load i32, ptr %61, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = load i32, ptr %17, align 4, !tbaa !9
  %697 = zext i32 %696 to i64
  %698 = mul i64 %695, %697
  %699 = load i32, ptr %62, align 4, !tbaa !9
  %700 = sext i32 %699 to i64
  %701 = add i64 %698, %700
  %702 = mul i64 8, %701
  %703 = getelementptr inbounds i8, ptr %693, i64 %702
  store ptr %703, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %704 = load ptr, ptr %14, align 8, !tbaa !5
  %705 = load i32, ptr %61, align 4, !tbaa !9
  %706 = sext i32 %705 to i64
  %707 = load i32, ptr %18, align 4, !tbaa !9
  %708 = zext i32 %707 to i64
  %709 = mul i64 %706, %708
  %710 = load i32, ptr %62, align 4, !tbaa !9
  %711 = sext i32 %710 to i64
  %712 = add i64 %709, %711
  %713 = mul i64 8, %712
  %714 = getelementptr inbounds i8, ptr %704, i64 %713
  store ptr %714, ptr %64, align 8, !tbaa !5
  %715 = load ptr, ptr %63, align 8, !tbaa !5
  %716 = load double, ptr %715, align 8, !tbaa !28
  %717 = load ptr, ptr %64, align 8, !tbaa !5
  store double %716, ptr %717, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  br label %718

718:                                              ; preds = %692
  %719 = load i32, ptr %62, align 4, !tbaa !9
  %720 = add nsw i32 %719, 1
  store i32 %720, ptr %62, align 4, !tbaa !9
  br label %688, !llvm.loop !45

721:                                              ; preds = %688
  br label %722

722:                                              ; preds = %721
  %723 = load i32, ptr %61, align 4, !tbaa !9
  %724 = add nsw i32 %723, 1
  store i32 %724, ptr %61, align 4, !tbaa !9
  br label %680, !llvm.loop !46

725:                                              ; preds = %680
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  br label %726

726:                                              ; preds = %725
  br label %727

727:                                              ; preds = %726
  br label %883

728:                                              ; preds = %573
  br label %729

729:                                              ; preds = %728
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  %730 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %730, ptr %65, align 4, !tbaa !9
  br label %731

731:                                              ; preds = %772, %729
  %732 = load i32, ptr %65, align 4, !tbaa !9
  %733 = load i32, ptr %25, align 4, !tbaa !9
  %734 = load i32, ptr %24, align 4, !tbaa !9
  %735 = add i32 %733, %734
  %736 = icmp slt i32 %732, %735
  br i1 %736, label %737, label %775

737:                                              ; preds = %731
  %738 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %738, ptr %66, align 4, !tbaa !9
  br label %739

739:                                              ; preds = %768, %737
  %740 = load i32, ptr %66, align 4, !tbaa !9
  %741 = load i32, ptr %20, align 4, !tbaa !9
  %742 = icmp slt i32 %740, %741
  br i1 %742, label %743, label %771

743:                                              ; preds = %739
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  %744 = load ptr, ptr %15, align 8, !tbaa !5
  %745 = load i32, ptr %65, align 4, !tbaa !9
  %746 = sext i32 %745 to i64
  %747 = load i32, ptr %17, align 4, !tbaa !9
  %748 = zext i32 %747 to i64
  %749 = mul i64 %746, %748
  %750 = load i32, ptr %66, align 4, !tbaa !9
  %751 = sext i32 %750 to i64
  %752 = add i64 %749, %751
  %753 = mul i64 16, %752
  %754 = getelementptr inbounds i8, ptr %744, i64 %753
  store ptr %754, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %755 = load ptr, ptr %14, align 8, !tbaa !5
  %756 = load i32, ptr %65, align 4, !tbaa !9
  %757 = sext i32 %756 to i64
  %758 = load i32, ptr %18, align 4, !tbaa !9
  %759 = zext i32 %758 to i64
  %760 = mul i64 %757, %759
  %761 = load i32, ptr %66, align 4, !tbaa !9
  %762 = sext i32 %761 to i64
  %763 = add i64 %760, %762
  %764 = mul i64 16, %763
  %765 = getelementptr inbounds i8, ptr %755, i64 %764
  store ptr %765, ptr %68, align 8, !tbaa !5
  %766 = load ptr, ptr %68, align 8, !tbaa !5
  %767 = load ptr, ptr %67, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %766, ptr align 8 %767, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  br label %768

768:                                              ; preds = %743
  %769 = load i32, ptr %66, align 4, !tbaa !9
  %770 = add nsw i32 %769, 1
  store i32 %770, ptr %66, align 4, !tbaa !9
  br label %739, !llvm.loop !47

771:                                              ; preds = %739
  br label %772

772:                                              ; preds = %771
  %773 = load i32, ptr %65, align 4, !tbaa !9
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %65, align 4, !tbaa !9
  br label %731, !llvm.loop !48

775:                                              ; preds = %731
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  br label %776

776:                                              ; preds = %775
  br label %777

777:                                              ; preds = %776
  br label %883

778:                                              ; preds = %573
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #5
  %779 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %779, ptr %69, align 4, !tbaa !9
  br label %780

780:                                              ; preds = %879, %778
  %781 = load i32, ptr %69, align 4, !tbaa !9
  %782 = load i32, ptr %25, align 4, !tbaa !9
  %783 = load i32, ptr %24, align 4, !tbaa !9
  %784 = add i32 %782, %783
  %785 = icmp slt i32 %781, %784
  br i1 %785, label %786, label %882

786:                                              ; preds = %780
  %787 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %787, ptr %70, align 4, !tbaa !9
  br label %788

788:                                              ; preds = %875, %786
  %789 = load i32, ptr %70, align 4, !tbaa !9
  %790 = load i32, ptr %20, align 4, !tbaa !9
  %791 = icmp slt i32 %789, %790
  br i1 %791, label %792, label %878

792:                                              ; preds = %788
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  %793 = load ptr, ptr %15, align 8, !tbaa !5
  %794 = load i32, ptr %16, align 4, !tbaa !9
  %795 = zext i32 %794 to i64
  %796 = load i32, ptr %69, align 4, !tbaa !9
  %797 = sext i32 %796 to i64
  %798 = load i32, ptr %17, align 4, !tbaa !9
  %799 = zext i32 %798 to i64
  %800 = mul i64 %797, %799
  %801 = load i32, ptr %70, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = add i64 %800, %802
  %804 = mul i64 %795, %803
  %805 = getelementptr inbounds i8, ptr %793, i64 %804
  store ptr %805, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  %806 = load ptr, ptr %14, align 8, !tbaa !5
  %807 = load i32, ptr %16, align 4, !tbaa !9
  %808 = zext i32 %807 to i64
  %809 = load i32, ptr %69, align 4, !tbaa !9
  %810 = sext i32 %809 to i64
  %811 = load i32, ptr %18, align 4, !tbaa !9
  %812 = zext i32 %811 to i64
  %813 = mul i64 %810, %812
  %814 = load i32, ptr %70, align 4, !tbaa !9
  %815 = sext i32 %814 to i64
  %816 = add i64 %813, %815
  %817 = mul i64 %808, %816
  %818 = getelementptr inbounds i8, ptr %806, i64 %817
  store ptr %818, ptr %72, align 8, !tbaa !5
  br label %819

819:                                              ; preds = %792
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #5
  %820 = load i32, ptr %16, align 4, !tbaa !9
  %821 = trunc i32 %820 to i8
  %822 = sext i8 %821 to i32
  %823 = icmp eq i32 -128, %822
  br i1 %823, label %829, label %824

824:                                              ; preds = %819
  %825 = load i32, ptr %16, align 4, !tbaa !9
  %826 = trunc i32 %825 to i8
  %827 = sext i8 %826 to i32
  %828 = icmp slt i32 -128, %827
  br i1 %828, label %829, label %848

829:                                              ; preds = %824, %819
  %830 = load i32, ptr %16, align 4, !tbaa !9
  %831 = zext i32 %830 to i64
  %832 = mul i64 1, %831
  %833 = icmp ult i64 %832, 127
  br i1 %833, label %834, label %838

834:                                              ; preds = %829
  %835 = load i32, ptr %16, align 4, !tbaa !9
  %836 = zext i32 %835 to i64
  %837 = mul i64 1, %836
  br label %839

838:                                              ; preds = %829
  br label %839

839:                                              ; preds = %838, %834
  %840 = phi i64 [ %837, %834 ], [ 127, %838 ]
  %841 = icmp ule i64 %840, 127
  br i1 %841, label %842, label %848

842:                                              ; preds = %839
  %843 = load i32, ptr %16, align 4, !tbaa !9
  %844 = uitofp i32 %843 to double
  %845 = fcmp ole double 0.000000e+00, %844
  br i1 %845, label %847, label %846

846:                                              ; preds = %842
  br i1 true, label %847, label %848

847:                                              ; preds = %846, %842
  br label %849

848:                                              ; preds = %846, %839, %824
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

849:                                              ; preds = %847
  %850 = load i32, ptr %16, align 4, !tbaa !9
  %851 = trunc i32 %850 to i8
  store i8 %851, ptr %73, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #5
  %852 = load ptr, ptr %72, align 8, !tbaa !5
  store ptr %852, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %75) #5
  store i8 0, ptr %75, align 1, !tbaa !11
  br label %853

853:                                              ; preds = %869, %849
  %854 = load i8, ptr %75, align 1, !tbaa !11
  %855 = sext i8 %854 to i32
  %856 = load i8, ptr %73, align 1, !tbaa !11
  %857 = sext i8 %856 to i32
  %858 = icmp slt i32 %855, %857
  br i1 %858, label %859, label %872

859:                                              ; preds = %853
  %860 = load ptr, ptr %71, align 8, !tbaa !5
  %861 = load i8, ptr %75, align 1, !tbaa !11
  %862 = sext i8 %861 to i64
  %863 = getelementptr inbounds i8, ptr %860, i64 %862
  %864 = load i8, ptr %863, align 1, !tbaa !11
  %865 = load ptr, ptr %74, align 8, !tbaa !5
  %866 = load i8, ptr %75, align 1, !tbaa !11
  %867 = sext i8 %866 to i64
  %868 = getelementptr inbounds i8, ptr %865, i64 %867
  store i8 %864, ptr %868, align 1, !tbaa !11
  br label %869

869:                                              ; preds = %859
  %870 = load i8, ptr %75, align 1, !tbaa !11
  %871 = add i8 %870, 1
  store i8 %871, ptr %75, align 1, !tbaa !11
  br label %853, !llvm.loop !49

872:                                              ; preds = %853
  call void @llvm.lifetime.end.p0(i64 1, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #5
  br label %873

873:                                              ; preds = %872
  br label %874

874:                                              ; preds = %873
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  br label %875

875:                                              ; preds = %874
  %876 = load i32, ptr %70, align 4, !tbaa !9
  %877 = add nsw i32 %876, 1
  store i32 %877, ptr %70, align 4, !tbaa !9
  br label %788, !llvm.loop !50

878:                                              ; preds = %788
  br label %879

879:                                              ; preds = %878
  %880 = load i32, ptr %69, align 4, !tbaa !9
  %881 = add nsw i32 %880, 1
  store i32 %881, ptr %69, align 4, !tbaa !9
  br label %780, !llvm.loop !51

882:                                              ; preds = %780
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  br label %883

883:                                              ; preds = %882, %777, %727, %676, %625
  br label %884

884:                                              ; preds = %883
  br label %885

885:                                              ; preds = %884
  br label %886

886:                                              ; preds = %885
  %887 = load i32, ptr %24, align 4, !tbaa !9
  %888 = load i32, ptr %25, align 4, !tbaa !9
  %889 = add i32 %888, %887
  store i32 %889, ptr %25, align 4, !tbaa !9
  br label %565, !llvm.loop !52

890:                                              ; preds = %565
  %891 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %891, ptr %26, align 4, !tbaa !9
  br label %892

892:                                              ; preds = %1212, %890
  %893 = load i32, ptr %26, align 4, !tbaa !9
  %894 = load i32, ptr %20, align 4, !tbaa !9
  %895 = load i32, ptr %23, align 4, !tbaa !9
  %896 = sub nsw i32 %894, %895
  %897 = icmp slt i32 %893, %896
  br i1 %897, label %898, label %1216

898:                                              ; preds = %892
  br label %899

899:                                              ; preds = %898
  %900 = load i32, ptr %16, align 4, !tbaa !9
  switch i32 %900, label %1104 [
    i32 2, label %901
    i32 4, label %952
    i32 8, label %1003
    i32 16, label %1054
  ]

901:                                              ; preds = %899
  br label %902

902:                                              ; preds = %901
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  %903 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %903, ptr %76, align 4, !tbaa !9
  br label %904

904:                                              ; preds = %946, %902
  %905 = load i32, ptr %76, align 4, !tbaa !9
  %906 = load i32, ptr %22, align 4, !tbaa !9
  %907 = icmp slt i32 %905, %906
  br i1 %907, label %908, label %949

908:                                              ; preds = %904
  %909 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %909, ptr %77, align 4, !tbaa !9
  br label %910

910:                                              ; preds = %942, %908
  %911 = load i32, ptr %77, align 4, !tbaa !9
  %912 = load i32, ptr %26, align 4, !tbaa !9
  %913 = load i32, ptr %23, align 4, !tbaa !9
  %914 = add i32 %912, %913
  %915 = icmp slt i32 %911, %914
  br i1 %915, label %916, label %945

916:                                              ; preds = %910
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  %917 = load ptr, ptr %15, align 8, !tbaa !5
  %918 = load i32, ptr %76, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = load i32, ptr %17, align 4, !tbaa !9
  %921 = zext i32 %920 to i64
  %922 = mul i64 %919, %921
  %923 = load i32, ptr %77, align 4, !tbaa !9
  %924 = sext i32 %923 to i64
  %925 = add i64 %922, %924
  %926 = mul i64 2, %925
  %927 = getelementptr inbounds i8, ptr %917, i64 %926
  store ptr %927, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  %928 = load ptr, ptr %14, align 8, !tbaa !5
  %929 = load i32, ptr %76, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = load i32, ptr %18, align 4, !tbaa !9
  %932 = zext i32 %931 to i64
  %933 = mul i64 %930, %932
  %934 = load i32, ptr %77, align 4, !tbaa !9
  %935 = sext i32 %934 to i64
  %936 = add i64 %933, %935
  %937 = mul i64 2, %936
  %938 = getelementptr inbounds i8, ptr %928, i64 %937
  store ptr %938, ptr %79, align 8, !tbaa !5
  %939 = load ptr, ptr %78, align 8, !tbaa !5
  %940 = load i16, ptr %939, align 2, !tbaa !20
  %941 = load ptr, ptr %79, align 8, !tbaa !5
  store i16 %940, ptr %941, align 2, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  br label %942

942:                                              ; preds = %916
  %943 = load i32, ptr %77, align 4, !tbaa !9
  %944 = add nsw i32 %943, 1
  store i32 %944, ptr %77, align 4, !tbaa !9
  br label %910, !llvm.loop !53

945:                                              ; preds = %910
  br label %946

946:                                              ; preds = %945
  %947 = load i32, ptr %76, align 4, !tbaa !9
  %948 = add nsw i32 %947, 1
  store i32 %948, ptr %76, align 4, !tbaa !9
  br label %904, !llvm.loop !54

949:                                              ; preds = %904
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  br label %950

950:                                              ; preds = %949
  br label %951

951:                                              ; preds = %950
  br label %1209

952:                                              ; preds = %899
  br label %953

953:                                              ; preds = %952
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  %954 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %954, ptr %80, align 4, !tbaa !9
  br label %955

955:                                              ; preds = %997, %953
  %956 = load i32, ptr %80, align 4, !tbaa !9
  %957 = load i32, ptr %22, align 4, !tbaa !9
  %958 = icmp slt i32 %956, %957
  br i1 %958, label %959, label %1000

959:                                              ; preds = %955
  %960 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %960, ptr %81, align 4, !tbaa !9
  br label %961

961:                                              ; preds = %993, %959
  %962 = load i32, ptr %81, align 4, !tbaa !9
  %963 = load i32, ptr %26, align 4, !tbaa !9
  %964 = load i32, ptr %23, align 4, !tbaa !9
  %965 = add i32 %963, %964
  %966 = icmp slt i32 %962, %965
  br i1 %966, label %967, label %996

967:                                              ; preds = %961
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  %968 = load ptr, ptr %15, align 8, !tbaa !5
  %969 = load i32, ptr %80, align 4, !tbaa !9
  %970 = sext i32 %969 to i64
  %971 = load i32, ptr %17, align 4, !tbaa !9
  %972 = zext i32 %971 to i64
  %973 = mul i64 %970, %972
  %974 = load i32, ptr %81, align 4, !tbaa !9
  %975 = sext i32 %974 to i64
  %976 = add i64 %973, %975
  %977 = mul i64 4, %976
  %978 = getelementptr inbounds i8, ptr %968, i64 %977
  store ptr %978, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #5
  %979 = load ptr, ptr %14, align 8, !tbaa !5
  %980 = load i32, ptr %80, align 4, !tbaa !9
  %981 = sext i32 %980 to i64
  %982 = load i32, ptr %18, align 4, !tbaa !9
  %983 = zext i32 %982 to i64
  %984 = mul i64 %981, %983
  %985 = load i32, ptr %81, align 4, !tbaa !9
  %986 = sext i32 %985 to i64
  %987 = add i64 %984, %986
  %988 = mul i64 4, %987
  %989 = getelementptr inbounds i8, ptr %979, i64 %988
  store ptr %989, ptr %83, align 8, !tbaa !5
  %990 = load ptr, ptr %82, align 8, !tbaa !5
  %991 = load float, ptr %990, align 4, !tbaa !24
  %992 = load ptr, ptr %83, align 8, !tbaa !5
  store float %991, ptr %992, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  br label %993

993:                                              ; preds = %967
  %994 = load i32, ptr %81, align 4, !tbaa !9
  %995 = add nsw i32 %994, 1
  store i32 %995, ptr %81, align 4, !tbaa !9
  br label %961, !llvm.loop !55

996:                                              ; preds = %961
  br label %997

997:                                              ; preds = %996
  %998 = load i32, ptr %80, align 4, !tbaa !9
  %999 = add nsw i32 %998, 1
  store i32 %999, ptr %80, align 4, !tbaa !9
  br label %955, !llvm.loop !56

1000:                                             ; preds = %955
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  br label %1001

1001:                                             ; preds = %1000
  br label %1002

1002:                                             ; preds = %1001
  br label %1209

1003:                                             ; preds = %899
  br label %1004

1004:                                             ; preds = %1003
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #5
  %1005 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1005, ptr %84, align 4, !tbaa !9
  br label %1006

1006:                                             ; preds = %1048, %1004
  %1007 = load i32, ptr %84, align 4, !tbaa !9
  %1008 = load i32, ptr %22, align 4, !tbaa !9
  %1009 = icmp slt i32 %1007, %1008
  br i1 %1009, label %1010, label %1051

1010:                                             ; preds = %1006
  %1011 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1011, ptr %85, align 4, !tbaa !9
  br label %1012

1012:                                             ; preds = %1044, %1010
  %1013 = load i32, ptr %85, align 4, !tbaa !9
  %1014 = load i32, ptr %26, align 4, !tbaa !9
  %1015 = load i32, ptr %23, align 4, !tbaa !9
  %1016 = add i32 %1014, %1015
  %1017 = icmp slt i32 %1013, %1016
  br i1 %1017, label %1018, label %1047

1018:                                             ; preds = %1012
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #5
  %1019 = load ptr, ptr %15, align 8, !tbaa !5
  %1020 = load i32, ptr %84, align 4, !tbaa !9
  %1021 = sext i32 %1020 to i64
  %1022 = load i32, ptr %17, align 4, !tbaa !9
  %1023 = zext i32 %1022 to i64
  %1024 = mul i64 %1021, %1023
  %1025 = load i32, ptr %85, align 4, !tbaa !9
  %1026 = sext i32 %1025 to i64
  %1027 = add i64 %1024, %1026
  %1028 = mul i64 8, %1027
  %1029 = getelementptr inbounds i8, ptr %1019, i64 %1028
  store ptr %1029, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #5
  %1030 = load ptr, ptr %14, align 8, !tbaa !5
  %1031 = load i32, ptr %84, align 4, !tbaa !9
  %1032 = sext i32 %1031 to i64
  %1033 = load i32, ptr %18, align 4, !tbaa !9
  %1034 = zext i32 %1033 to i64
  %1035 = mul i64 %1032, %1034
  %1036 = load i32, ptr %85, align 4, !tbaa !9
  %1037 = sext i32 %1036 to i64
  %1038 = add i64 %1035, %1037
  %1039 = mul i64 8, %1038
  %1040 = getelementptr inbounds i8, ptr %1030, i64 %1039
  store ptr %1040, ptr %87, align 8, !tbaa !5
  %1041 = load ptr, ptr %86, align 8, !tbaa !5
  %1042 = load double, ptr %1041, align 8, !tbaa !28
  %1043 = load ptr, ptr %87, align 8, !tbaa !5
  store double %1042, ptr %1043, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  br label %1044

1044:                                             ; preds = %1018
  %1045 = load i32, ptr %85, align 4, !tbaa !9
  %1046 = add nsw i32 %1045, 1
  store i32 %1046, ptr %85, align 4, !tbaa !9
  br label %1012, !llvm.loop !57

1047:                                             ; preds = %1012
  br label %1048

1048:                                             ; preds = %1047
  %1049 = load i32, ptr %84, align 4, !tbaa !9
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %84, align 4, !tbaa !9
  br label %1006, !llvm.loop !58

1051:                                             ; preds = %1006
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  br label %1052

1052:                                             ; preds = %1051
  br label %1053

1053:                                             ; preds = %1052
  br label %1209

1054:                                             ; preds = %899
  br label %1055

1055:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %1056 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1056, ptr %88, align 4, !tbaa !9
  br label %1057

1057:                                             ; preds = %1098, %1055
  %1058 = load i32, ptr %88, align 4, !tbaa !9
  %1059 = load i32, ptr %22, align 4, !tbaa !9
  %1060 = icmp slt i32 %1058, %1059
  br i1 %1060, label %1061, label %1101

1061:                                             ; preds = %1057
  %1062 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1062, ptr %89, align 4, !tbaa !9
  br label %1063

1063:                                             ; preds = %1094, %1061
  %1064 = load i32, ptr %89, align 4, !tbaa !9
  %1065 = load i32, ptr %26, align 4, !tbaa !9
  %1066 = load i32, ptr %23, align 4, !tbaa !9
  %1067 = add i32 %1065, %1066
  %1068 = icmp slt i32 %1064, %1067
  br i1 %1068, label %1069, label %1097

1069:                                             ; preds = %1063
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #5
  %1070 = load ptr, ptr %15, align 8, !tbaa !5
  %1071 = load i32, ptr %88, align 4, !tbaa !9
  %1072 = sext i32 %1071 to i64
  %1073 = load i32, ptr %17, align 4, !tbaa !9
  %1074 = zext i32 %1073 to i64
  %1075 = mul i64 %1072, %1074
  %1076 = load i32, ptr %89, align 4, !tbaa !9
  %1077 = sext i32 %1076 to i64
  %1078 = add i64 %1075, %1077
  %1079 = mul i64 16, %1078
  %1080 = getelementptr inbounds i8, ptr %1070, i64 %1079
  store ptr %1080, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #5
  %1081 = load ptr, ptr %14, align 8, !tbaa !5
  %1082 = load i32, ptr %88, align 4, !tbaa !9
  %1083 = sext i32 %1082 to i64
  %1084 = load i32, ptr %18, align 4, !tbaa !9
  %1085 = zext i32 %1084 to i64
  %1086 = mul i64 %1083, %1085
  %1087 = load i32, ptr %89, align 4, !tbaa !9
  %1088 = sext i32 %1087 to i64
  %1089 = add i64 %1086, %1088
  %1090 = mul i64 16, %1089
  %1091 = getelementptr inbounds i8, ptr %1081, i64 %1090
  store ptr %1091, ptr %91, align 8, !tbaa !5
  %1092 = load ptr, ptr %91, align 8, !tbaa !5
  %1093 = load ptr, ptr %90, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1092, ptr align 8 %1093, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  br label %1094

1094:                                             ; preds = %1069
  %1095 = load i32, ptr %89, align 4, !tbaa !9
  %1096 = add nsw i32 %1095, 1
  store i32 %1096, ptr %89, align 4, !tbaa !9
  br label %1063, !llvm.loop !59

1097:                                             ; preds = %1063
  br label %1098

1098:                                             ; preds = %1097
  %1099 = load i32, ptr %88, align 4, !tbaa !9
  %1100 = add nsw i32 %1099, 1
  store i32 %1100, ptr %88, align 4, !tbaa !9
  br label %1057, !llvm.loop !60

1101:                                             ; preds = %1057
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  br label %1102

1102:                                             ; preds = %1101
  br label %1103

1103:                                             ; preds = %1102
  br label %1209

1104:                                             ; preds = %899
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #5
  %1105 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1105, ptr %92, align 4, !tbaa !9
  br label %1106

1106:                                             ; preds = %1205, %1104
  %1107 = load i32, ptr %92, align 4, !tbaa !9
  %1108 = load i32, ptr %22, align 4, !tbaa !9
  %1109 = icmp slt i32 %1107, %1108
  br i1 %1109, label %1110, label %1208

1110:                                             ; preds = %1106
  %1111 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1111, ptr %93, align 4, !tbaa !9
  br label %1112

1112:                                             ; preds = %1201, %1110
  %1113 = load i32, ptr %93, align 4, !tbaa !9
  %1114 = load i32, ptr %26, align 4, !tbaa !9
  %1115 = load i32, ptr %23, align 4, !tbaa !9
  %1116 = add i32 %1114, %1115
  %1117 = icmp slt i32 %1113, %1116
  br i1 %1117, label %1118, label %1204

1118:                                             ; preds = %1112
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #5
  %1119 = load ptr, ptr %15, align 8, !tbaa !5
  %1120 = load i32, ptr %16, align 4, !tbaa !9
  %1121 = zext i32 %1120 to i64
  %1122 = load i32, ptr %92, align 4, !tbaa !9
  %1123 = sext i32 %1122 to i64
  %1124 = load i32, ptr %17, align 4, !tbaa !9
  %1125 = zext i32 %1124 to i64
  %1126 = mul i64 %1123, %1125
  %1127 = load i32, ptr %93, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = add i64 %1126, %1128
  %1130 = mul i64 %1121, %1129
  %1131 = getelementptr inbounds i8, ptr %1119, i64 %1130
  store ptr %1131, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #5
  %1132 = load ptr, ptr %14, align 8, !tbaa !5
  %1133 = load i32, ptr %16, align 4, !tbaa !9
  %1134 = zext i32 %1133 to i64
  %1135 = load i32, ptr %92, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = load i32, ptr %18, align 4, !tbaa !9
  %1138 = zext i32 %1137 to i64
  %1139 = mul i64 %1136, %1138
  %1140 = load i32, ptr %93, align 4, !tbaa !9
  %1141 = sext i32 %1140 to i64
  %1142 = add i64 %1139, %1141
  %1143 = mul i64 %1134, %1142
  %1144 = getelementptr inbounds i8, ptr %1132, i64 %1143
  store ptr %1144, ptr %95, align 8, !tbaa !5
  br label %1145

1145:                                             ; preds = %1118
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #5
  %1146 = load i32, ptr %16, align 4, !tbaa !9
  %1147 = trunc i32 %1146 to i8
  %1148 = sext i8 %1147 to i32
  %1149 = icmp eq i32 -128, %1148
  br i1 %1149, label %1155, label %1150

1150:                                             ; preds = %1145
  %1151 = load i32, ptr %16, align 4, !tbaa !9
  %1152 = trunc i32 %1151 to i8
  %1153 = sext i8 %1152 to i32
  %1154 = icmp slt i32 -128, %1153
  br i1 %1154, label %1155, label %1174

1155:                                             ; preds = %1150, %1145
  %1156 = load i32, ptr %16, align 4, !tbaa !9
  %1157 = zext i32 %1156 to i64
  %1158 = mul i64 1, %1157
  %1159 = icmp ult i64 %1158, 127
  br i1 %1159, label %1160, label %1164

1160:                                             ; preds = %1155
  %1161 = load i32, ptr %16, align 4, !tbaa !9
  %1162 = zext i32 %1161 to i64
  %1163 = mul i64 1, %1162
  br label %1165

1164:                                             ; preds = %1155
  br label %1165

1165:                                             ; preds = %1164, %1160
  %1166 = phi i64 [ %1163, %1160 ], [ 127, %1164 ]
  %1167 = icmp ule i64 %1166, 127
  br i1 %1167, label %1168, label %1174

1168:                                             ; preds = %1165
  %1169 = load i32, ptr %16, align 4, !tbaa !9
  %1170 = uitofp i32 %1169 to double
  %1171 = fcmp ole double 0.000000e+00, %1170
  br i1 %1171, label %1173, label %1172

1172:                                             ; preds = %1168
  br i1 true, label %1173, label %1174

1173:                                             ; preds = %1172, %1168
  br label %1175

1174:                                             ; preds = %1172, %1165, %1150
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

1175:                                             ; preds = %1173
  %1176 = load i32, ptr %16, align 4, !tbaa !9
  %1177 = trunc i32 %1176 to i8
  store i8 %1177, ptr %96, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #5
  %1178 = load ptr, ptr %95, align 8, !tbaa !5
  store ptr %1178, ptr %97, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %98) #5
  store i8 0, ptr %98, align 1, !tbaa !11
  br label %1179

1179:                                             ; preds = %1195, %1175
  %1180 = load i8, ptr %98, align 1, !tbaa !11
  %1181 = sext i8 %1180 to i32
  %1182 = load i8, ptr %96, align 1, !tbaa !11
  %1183 = sext i8 %1182 to i32
  %1184 = icmp slt i32 %1181, %1183
  br i1 %1184, label %1185, label %1198

1185:                                             ; preds = %1179
  %1186 = load ptr, ptr %94, align 8, !tbaa !5
  %1187 = load i8, ptr %98, align 1, !tbaa !11
  %1188 = sext i8 %1187 to i64
  %1189 = getelementptr inbounds i8, ptr %1186, i64 %1188
  %1190 = load i8, ptr %1189, align 1, !tbaa !11
  %1191 = load ptr, ptr %97, align 8, !tbaa !5
  %1192 = load i8, ptr %98, align 1, !tbaa !11
  %1193 = sext i8 %1192 to i64
  %1194 = getelementptr inbounds i8, ptr %1191, i64 %1193
  store i8 %1190, ptr %1194, align 1, !tbaa !11
  br label %1195

1195:                                             ; preds = %1185
  %1196 = load i8, ptr %98, align 1, !tbaa !11
  %1197 = add i8 %1196, 1
  store i8 %1197, ptr %98, align 1, !tbaa !11
  br label %1179, !llvm.loop !61

1198:                                             ; preds = %1179
  call void @llvm.lifetime.end.p0(i64 1, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #5
  br label %1199

1199:                                             ; preds = %1198
  br label %1200

1200:                                             ; preds = %1199
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #5
  br label %1201

1201:                                             ; preds = %1200
  %1202 = load i32, ptr %93, align 4, !tbaa !9
  %1203 = add nsw i32 %1202, 1
  store i32 %1203, ptr %93, align 4, !tbaa !9
  br label %1112, !llvm.loop !62

1204:                                             ; preds = %1112
  br label %1205

1205:                                             ; preds = %1204
  %1206 = load i32, ptr %92, align 4, !tbaa !9
  %1207 = add nsw i32 %1206, 1
  store i32 %1207, ptr %92, align 4, !tbaa !9
  br label %1106, !llvm.loop !63

1208:                                             ; preds = %1106
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #5
  br label %1209

1209:                                             ; preds = %1208, %1103, %1053, %1002, %951
  br label %1210

1210:                                             ; preds = %1209
  br label %1211

1211:                                             ; preds = %1210
  br label %1212

1212:                                             ; preds = %1211
  %1213 = load i32, ptr %23, align 4, !tbaa !9
  %1214 = load i32, ptr %26, align 4, !tbaa !9
  %1215 = add i32 %1214, %1213
  store i32 %1215, ptr %26, align 4, !tbaa !9
  br label %892, !llvm.loop !64

1216:                                             ; preds = %892
  br label %1217

1217:                                             ; preds = %1216
  %1218 = load i32, ptr %16, align 4, !tbaa !9
  switch i32 %1218, label %1414 [
    i32 2, label %1219
    i32 4, label %1268
    i32 8, label %1317
    i32 16, label %1366
  ]

1219:                                             ; preds = %1217
  br label %1220

1220:                                             ; preds = %1219
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #5
  %1221 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1221, ptr %99, align 4, !tbaa !9
  br label %1222

1222:                                             ; preds = %1262, %1220
  %1223 = load i32, ptr %99, align 4, !tbaa !9
  %1224 = load i32, ptr %22, align 4, !tbaa !9
  %1225 = icmp slt i32 %1223, %1224
  br i1 %1225, label %1226, label %1265

1226:                                             ; preds = %1222
  %1227 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1227, ptr %100, align 4, !tbaa !9
  br label %1228

1228:                                             ; preds = %1258, %1226
  %1229 = load i32, ptr %100, align 4, !tbaa !9
  %1230 = load i32, ptr %20, align 4, !tbaa !9
  %1231 = icmp slt i32 %1229, %1230
  br i1 %1231, label %1232, label %1261

1232:                                             ; preds = %1228
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #5
  %1233 = load ptr, ptr %15, align 8, !tbaa !5
  %1234 = load i32, ptr %99, align 4, !tbaa !9
  %1235 = sext i32 %1234 to i64
  %1236 = load i32, ptr %17, align 4, !tbaa !9
  %1237 = zext i32 %1236 to i64
  %1238 = mul i64 %1235, %1237
  %1239 = load i32, ptr %100, align 4, !tbaa !9
  %1240 = sext i32 %1239 to i64
  %1241 = add i64 %1238, %1240
  %1242 = mul i64 2, %1241
  %1243 = getelementptr inbounds i8, ptr %1233, i64 %1242
  store ptr %1243, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #5
  %1244 = load ptr, ptr %14, align 8, !tbaa !5
  %1245 = load i32, ptr %99, align 4, !tbaa !9
  %1246 = sext i32 %1245 to i64
  %1247 = load i32, ptr %18, align 4, !tbaa !9
  %1248 = zext i32 %1247 to i64
  %1249 = mul i64 %1246, %1248
  %1250 = load i32, ptr %100, align 4, !tbaa !9
  %1251 = sext i32 %1250 to i64
  %1252 = add i64 %1249, %1251
  %1253 = mul i64 2, %1252
  %1254 = getelementptr inbounds i8, ptr %1244, i64 %1253
  store ptr %1254, ptr %102, align 8, !tbaa !5
  %1255 = load ptr, ptr %101, align 8, !tbaa !5
  %1256 = load i16, ptr %1255, align 2, !tbaa !20
  %1257 = load ptr, ptr %102, align 8, !tbaa !5
  store i16 %1256, ptr %1257, align 2, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #5
  br label %1258

1258:                                             ; preds = %1232
  %1259 = load i32, ptr %100, align 4, !tbaa !9
  %1260 = add nsw i32 %1259, 1
  store i32 %1260, ptr %100, align 4, !tbaa !9
  br label %1228, !llvm.loop !65

1261:                                             ; preds = %1228
  br label %1262

1262:                                             ; preds = %1261
  %1263 = load i32, ptr %99, align 4, !tbaa !9
  %1264 = add nsw i32 %1263, 1
  store i32 %1264, ptr %99, align 4, !tbaa !9
  br label %1222, !llvm.loop !66

1265:                                             ; preds = %1222
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #5
  br label %1266

1266:                                             ; preds = %1265
  br label %1267

1267:                                             ; preds = %1266
  br label %1517

1268:                                             ; preds = %1217
  br label %1269

1269:                                             ; preds = %1268
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #5
  %1270 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1270, ptr %103, align 4, !tbaa !9
  br label %1271

1271:                                             ; preds = %1311, %1269
  %1272 = load i32, ptr %103, align 4, !tbaa !9
  %1273 = load i32, ptr %22, align 4, !tbaa !9
  %1274 = icmp slt i32 %1272, %1273
  br i1 %1274, label %1275, label %1314

1275:                                             ; preds = %1271
  %1276 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1276, ptr %104, align 4, !tbaa !9
  br label %1277

1277:                                             ; preds = %1307, %1275
  %1278 = load i32, ptr %104, align 4, !tbaa !9
  %1279 = load i32, ptr %20, align 4, !tbaa !9
  %1280 = icmp slt i32 %1278, %1279
  br i1 %1280, label %1281, label %1310

1281:                                             ; preds = %1277
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #5
  %1282 = load ptr, ptr %15, align 8, !tbaa !5
  %1283 = load i32, ptr %103, align 4, !tbaa !9
  %1284 = sext i32 %1283 to i64
  %1285 = load i32, ptr %17, align 4, !tbaa !9
  %1286 = zext i32 %1285 to i64
  %1287 = mul i64 %1284, %1286
  %1288 = load i32, ptr %104, align 4, !tbaa !9
  %1289 = sext i32 %1288 to i64
  %1290 = add i64 %1287, %1289
  %1291 = mul i64 4, %1290
  %1292 = getelementptr inbounds i8, ptr %1282, i64 %1291
  store ptr %1292, ptr %105, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #5
  %1293 = load ptr, ptr %14, align 8, !tbaa !5
  %1294 = load i32, ptr %103, align 4, !tbaa !9
  %1295 = sext i32 %1294 to i64
  %1296 = load i32, ptr %18, align 4, !tbaa !9
  %1297 = zext i32 %1296 to i64
  %1298 = mul i64 %1295, %1297
  %1299 = load i32, ptr %104, align 4, !tbaa !9
  %1300 = sext i32 %1299 to i64
  %1301 = add i64 %1298, %1300
  %1302 = mul i64 4, %1301
  %1303 = getelementptr inbounds i8, ptr %1293, i64 %1302
  store ptr %1303, ptr %106, align 8, !tbaa !5
  %1304 = load ptr, ptr %105, align 8, !tbaa !5
  %1305 = load float, ptr %1304, align 4, !tbaa !24
  %1306 = load ptr, ptr %106, align 8, !tbaa !5
  store float %1305, ptr %1306, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #5
  br label %1307

1307:                                             ; preds = %1281
  %1308 = load i32, ptr %104, align 4, !tbaa !9
  %1309 = add nsw i32 %1308, 1
  store i32 %1309, ptr %104, align 4, !tbaa !9
  br label %1277, !llvm.loop !67

1310:                                             ; preds = %1277
  br label %1311

1311:                                             ; preds = %1310
  %1312 = load i32, ptr %103, align 4, !tbaa !9
  %1313 = add nsw i32 %1312, 1
  store i32 %1313, ptr %103, align 4, !tbaa !9
  br label %1271, !llvm.loop !68

1314:                                             ; preds = %1271
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #5
  br label %1315

1315:                                             ; preds = %1314
  br label %1316

1316:                                             ; preds = %1315
  br label %1517

1317:                                             ; preds = %1217
  br label %1318

1318:                                             ; preds = %1317
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #5
  %1319 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1319, ptr %107, align 4, !tbaa !9
  br label %1320

1320:                                             ; preds = %1360, %1318
  %1321 = load i32, ptr %107, align 4, !tbaa !9
  %1322 = load i32, ptr %22, align 4, !tbaa !9
  %1323 = icmp slt i32 %1321, %1322
  br i1 %1323, label %1324, label %1363

1324:                                             ; preds = %1320
  %1325 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1325, ptr %108, align 4, !tbaa !9
  br label %1326

1326:                                             ; preds = %1356, %1324
  %1327 = load i32, ptr %108, align 4, !tbaa !9
  %1328 = load i32, ptr %20, align 4, !tbaa !9
  %1329 = icmp slt i32 %1327, %1328
  br i1 %1329, label %1330, label %1359

1330:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #5
  %1331 = load ptr, ptr %15, align 8, !tbaa !5
  %1332 = load i32, ptr %107, align 4, !tbaa !9
  %1333 = sext i32 %1332 to i64
  %1334 = load i32, ptr %17, align 4, !tbaa !9
  %1335 = zext i32 %1334 to i64
  %1336 = mul i64 %1333, %1335
  %1337 = load i32, ptr %108, align 4, !tbaa !9
  %1338 = sext i32 %1337 to i64
  %1339 = add i64 %1336, %1338
  %1340 = mul i64 8, %1339
  %1341 = getelementptr inbounds i8, ptr %1331, i64 %1340
  store ptr %1341, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #5
  %1342 = load ptr, ptr %14, align 8, !tbaa !5
  %1343 = load i32, ptr %107, align 4, !tbaa !9
  %1344 = sext i32 %1343 to i64
  %1345 = load i32, ptr %18, align 4, !tbaa !9
  %1346 = zext i32 %1345 to i64
  %1347 = mul i64 %1344, %1346
  %1348 = load i32, ptr %108, align 4, !tbaa !9
  %1349 = sext i32 %1348 to i64
  %1350 = add i64 %1347, %1349
  %1351 = mul i64 8, %1350
  %1352 = getelementptr inbounds i8, ptr %1342, i64 %1351
  store ptr %1352, ptr %110, align 8, !tbaa !5
  %1353 = load ptr, ptr %109, align 8, !tbaa !5
  %1354 = load double, ptr %1353, align 8, !tbaa !28
  %1355 = load ptr, ptr %110, align 8, !tbaa !5
  store double %1354, ptr %1355, align 8, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #5
  br label %1356

1356:                                             ; preds = %1330
  %1357 = load i32, ptr %108, align 4, !tbaa !9
  %1358 = add nsw i32 %1357, 1
  store i32 %1358, ptr %108, align 4, !tbaa !9
  br label %1326, !llvm.loop !69

1359:                                             ; preds = %1326
  br label %1360

1360:                                             ; preds = %1359
  %1361 = load i32, ptr %107, align 4, !tbaa !9
  %1362 = add nsw i32 %1361, 1
  store i32 %1362, ptr %107, align 4, !tbaa !9
  br label %1320, !llvm.loop !70

1363:                                             ; preds = %1320
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #5
  br label %1364

1364:                                             ; preds = %1363
  br label %1365

1365:                                             ; preds = %1364
  br label %1517

1366:                                             ; preds = %1217
  br label %1367

1367:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 4, ptr %111) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #5
  %1368 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1368, ptr %111, align 4, !tbaa !9
  br label %1369

1369:                                             ; preds = %1408, %1367
  %1370 = load i32, ptr %111, align 4, !tbaa !9
  %1371 = load i32, ptr %22, align 4, !tbaa !9
  %1372 = icmp slt i32 %1370, %1371
  br i1 %1372, label %1373, label %1411

1373:                                             ; preds = %1369
  %1374 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1374, ptr %112, align 4, !tbaa !9
  br label %1375

1375:                                             ; preds = %1404, %1373
  %1376 = load i32, ptr %112, align 4, !tbaa !9
  %1377 = load i32, ptr %20, align 4, !tbaa !9
  %1378 = icmp slt i32 %1376, %1377
  br i1 %1378, label %1379, label %1407

1379:                                             ; preds = %1375
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #5
  %1380 = load ptr, ptr %15, align 8, !tbaa !5
  %1381 = load i32, ptr %111, align 4, !tbaa !9
  %1382 = sext i32 %1381 to i64
  %1383 = load i32, ptr %17, align 4, !tbaa !9
  %1384 = zext i32 %1383 to i64
  %1385 = mul i64 %1382, %1384
  %1386 = load i32, ptr %112, align 4, !tbaa !9
  %1387 = sext i32 %1386 to i64
  %1388 = add i64 %1385, %1387
  %1389 = mul i64 16, %1388
  %1390 = getelementptr inbounds i8, ptr %1380, i64 %1389
  store ptr %1390, ptr %113, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #5
  %1391 = load ptr, ptr %14, align 8, !tbaa !5
  %1392 = load i32, ptr %111, align 4, !tbaa !9
  %1393 = sext i32 %1392 to i64
  %1394 = load i32, ptr %18, align 4, !tbaa !9
  %1395 = zext i32 %1394 to i64
  %1396 = mul i64 %1393, %1395
  %1397 = load i32, ptr %112, align 4, !tbaa !9
  %1398 = sext i32 %1397 to i64
  %1399 = add i64 %1396, %1398
  %1400 = mul i64 16, %1399
  %1401 = getelementptr inbounds i8, ptr %1391, i64 %1400
  store ptr %1401, ptr %114, align 8, !tbaa !5
  %1402 = load ptr, ptr %114, align 8, !tbaa !5
  %1403 = load ptr, ptr %113, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1402, ptr align 8 %1403, i64 16, i1 false), !tbaa.struct !32
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #5
  br label %1404

1404:                                             ; preds = %1379
  %1405 = load i32, ptr %112, align 4, !tbaa !9
  %1406 = add nsw i32 %1405, 1
  store i32 %1406, ptr %112, align 4, !tbaa !9
  br label %1375, !llvm.loop !71

1407:                                             ; preds = %1375
  br label %1408

1408:                                             ; preds = %1407
  %1409 = load i32, ptr %111, align 4, !tbaa !9
  %1410 = add nsw i32 %1409, 1
  store i32 %1410, ptr %111, align 4, !tbaa !9
  br label %1369, !llvm.loop !72

1411:                                             ; preds = %1369
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %111) #5
  br label %1412

1412:                                             ; preds = %1411
  br label %1413

1413:                                             ; preds = %1412
  br label %1517

1414:                                             ; preds = %1217
  call void @llvm.lifetime.start.p0(i64 4, ptr %115) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %116) #5
  %1415 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1415, ptr %115, align 4, !tbaa !9
  br label %1416

1416:                                             ; preds = %1513, %1414
  %1417 = load i32, ptr %115, align 4, !tbaa !9
  %1418 = load i32, ptr %22, align 4, !tbaa !9
  %1419 = icmp slt i32 %1417, %1418
  br i1 %1419, label %1420, label %1516

1420:                                             ; preds = %1416
  %1421 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %1421, ptr %116, align 4, !tbaa !9
  br label %1422

1422:                                             ; preds = %1509, %1420
  %1423 = load i32, ptr %116, align 4, !tbaa !9
  %1424 = load i32, ptr %20, align 4, !tbaa !9
  %1425 = icmp slt i32 %1423, %1424
  br i1 %1425, label %1426, label %1512

1426:                                             ; preds = %1422
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #5
  %1427 = load ptr, ptr %15, align 8, !tbaa !5
  %1428 = load i32, ptr %16, align 4, !tbaa !9
  %1429 = zext i32 %1428 to i64
  %1430 = load i32, ptr %115, align 4, !tbaa !9
  %1431 = sext i32 %1430 to i64
  %1432 = load i32, ptr %17, align 4, !tbaa !9
  %1433 = zext i32 %1432 to i64
  %1434 = mul i64 %1431, %1433
  %1435 = load i32, ptr %116, align 4, !tbaa !9
  %1436 = sext i32 %1435 to i64
  %1437 = add i64 %1434, %1436
  %1438 = mul i64 %1429, %1437
  %1439 = getelementptr inbounds i8, ptr %1427, i64 %1438
  store ptr %1439, ptr %117, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #5
  %1440 = load ptr, ptr %14, align 8, !tbaa !5
  %1441 = load i32, ptr %16, align 4, !tbaa !9
  %1442 = zext i32 %1441 to i64
  %1443 = load i32, ptr %115, align 4, !tbaa !9
  %1444 = sext i32 %1443 to i64
  %1445 = load i32, ptr %18, align 4, !tbaa !9
  %1446 = zext i32 %1445 to i64
  %1447 = mul i64 %1444, %1446
  %1448 = load i32, ptr %116, align 4, !tbaa !9
  %1449 = sext i32 %1448 to i64
  %1450 = add i64 %1447, %1449
  %1451 = mul i64 %1442, %1450
  %1452 = getelementptr inbounds i8, ptr %1440, i64 %1451
  store ptr %1452, ptr %118, align 8, !tbaa !5
  br label %1453

1453:                                             ; preds = %1426
  call void @llvm.lifetime.start.p0(i64 1, ptr %119) #5
  %1454 = load i32, ptr %16, align 4, !tbaa !9
  %1455 = trunc i32 %1454 to i8
  %1456 = sext i8 %1455 to i32
  %1457 = icmp eq i32 -128, %1456
  br i1 %1457, label %1463, label %1458

1458:                                             ; preds = %1453
  %1459 = load i32, ptr %16, align 4, !tbaa !9
  %1460 = trunc i32 %1459 to i8
  %1461 = sext i8 %1460 to i32
  %1462 = icmp slt i32 -128, %1461
  br i1 %1462, label %1463, label %1482

1463:                                             ; preds = %1458, %1453
  %1464 = load i32, ptr %16, align 4, !tbaa !9
  %1465 = zext i32 %1464 to i64
  %1466 = mul i64 1, %1465
  %1467 = icmp ult i64 %1466, 127
  br i1 %1467, label %1468, label %1472

1468:                                             ; preds = %1463
  %1469 = load i32, ptr %16, align 4, !tbaa !9
  %1470 = zext i32 %1469 to i64
  %1471 = mul i64 1, %1470
  br label %1473

1472:                                             ; preds = %1463
  br label %1473

1473:                                             ; preds = %1472, %1468
  %1474 = phi i64 [ %1471, %1468 ], [ 127, %1472 ]
  %1475 = icmp ule i64 %1474, 127
  br i1 %1475, label %1476, label %1482

1476:                                             ; preds = %1473
  %1477 = load i32, ptr %16, align 4, !tbaa !9
  %1478 = uitofp i32 %1477 to double
  %1479 = fcmp ole double 0.000000e+00, %1478
  br i1 %1479, label %1481, label %1480

1480:                                             ; preds = %1476
  br i1 true, label %1481, label %1482

1481:                                             ; preds = %1480, %1476
  br label %1483

1482:                                             ; preds = %1480, %1473, %1458
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 202, ptr noundef @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #4
  unreachable

1483:                                             ; preds = %1481
  %1484 = load i32, ptr %16, align 4, !tbaa !9
  %1485 = trunc i32 %1484 to i8
  store i8 %1485, ptr %119, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #5
  %1486 = load ptr, ptr %118, align 8, !tbaa !5
  store ptr %1486, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #5
  store i8 0, ptr %121, align 1, !tbaa !11
  br label %1487

1487:                                             ; preds = %1503, %1483
  %1488 = load i8, ptr %121, align 1, !tbaa !11
  %1489 = sext i8 %1488 to i32
  %1490 = load i8, ptr %119, align 1, !tbaa !11
  %1491 = sext i8 %1490 to i32
  %1492 = icmp slt i32 %1489, %1491
  br i1 %1492, label %1493, label %1506

1493:                                             ; preds = %1487
  %1494 = load ptr, ptr %117, align 8, !tbaa !5
  %1495 = load i8, ptr %121, align 1, !tbaa !11
  %1496 = sext i8 %1495 to i64
  %1497 = getelementptr inbounds i8, ptr %1494, i64 %1496
  %1498 = load i8, ptr %1497, align 1, !tbaa !11
  %1499 = load ptr, ptr %120, align 8, !tbaa !5
  %1500 = load i8, ptr %121, align 1, !tbaa !11
  %1501 = sext i8 %1500 to i64
  %1502 = getelementptr inbounds i8, ptr %1499, i64 %1501
  store i8 %1498, ptr %1502, align 1, !tbaa !11
  br label %1503

1503:                                             ; preds = %1493
  %1504 = load i8, ptr %121, align 1, !tbaa !11
  %1505 = add i8 %1504, 1
  store i8 %1505, ptr %121, align 1, !tbaa !11
  br label %1487, !llvm.loop !73

1506:                                             ; preds = %1487
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #5
  br label %1507

1507:                                             ; preds = %1506
  br label %1508

1508:                                             ; preds = %1507
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #5
  br label %1509

1509:                                             ; preds = %1508
  %1510 = load i32, ptr %116, align 4, !tbaa !9
  %1511 = add nsw i32 %1510, 1
  store i32 %1511, ptr %116, align 4, !tbaa !9
  br label %1422, !llvm.loop !74

1512:                                             ; preds = %1422
  br label %1513

1513:                                             ; preds = %1512
  %1514 = load i32, ptr %115, align 4, !tbaa !9
  %1515 = add nsw i32 %1514, 1
  store i32 %1515, ptr %115, align 4, !tbaa !9
  br label %1416, !llvm.loop !75

1516:                                             ; preds = %1416
  call void @llvm.lifetime.end.p0(i64 4, ptr %116) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %115) #5
  br label %1517

1517:                                             ; preds = %1516, %1413, %1365, %1316, %1267
  br label %1518

1518:                                             ; preds = %1517
  br label %1519

1519:                                             ; preds = %1518
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  br label %1520

1520:                                             ; preds = %1519
  ret void
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { noreturn nounwind }
attributes #5 = { 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 = !{!7, !7, i64 0}
!12 = !{!13, !6, i64 32}
!13 = !{!"libxsmm_meltw_unary_param", !14, i64 0, !15, i64 32, !15, i64 80}
!14 = !{!"libxsmm_matrix_op_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"libxsmm_matrix_arg", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!16 = !{!13, !6, i64 80}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!21, !21, i64 0}
!21 = !{!"short", !7, i64 0}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = !{!29, !29, i64 0}
!29 = !{!"double", !7, i64 0}
!30 = distinct !{!30, !18}
!31 = distinct !{!31, !18}
!32 = !{i64 0, i64 16, !11}
!33 = distinct !{!33, !18}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18, !36}
!36 = !{!"llvm.loop.unroll.count", i32 4}
!37 = distinct !{!37, !18}
!38 = distinct !{!38, !18}
!39 = distinct !{!39, !18}
!40 = distinct !{!40, !18}
!41 = distinct !{!41, !18}
!42 = distinct !{!42, !18}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18}
!45 = distinct !{!45, !18}
!46 = distinct !{!46, !18}
!47 = distinct !{!47, !18}
!48 = distinct !{!48, !18}
!49 = distinct !{!49, !18, !36}
!50 = distinct !{!50, !18}
!51 = distinct !{!51, !18}
!52 = distinct !{!52, !18}
!53 = distinct !{!53, !18}
!54 = distinct !{!54, !18}
!55 = distinct !{!55, !18}
!56 = distinct !{!56, !18}
!57 = distinct !{!57, !18}
!58 = distinct !{!58, !18}
!59 = distinct !{!59, !18}
!60 = distinct !{!60, !18}
!61 = distinct !{!61, !18, !36}
!62 = distinct !{!62, !18}
!63 = distinct !{!63, !18}
!64 = distinct !{!64, !18}
!65 = distinct !{!65, !18}
!66 = distinct !{!66, !18}
!67 = distinct !{!67, !18}
!68 = distinct !{!68, !18}
!69 = distinct !{!69, !18}
!70 = distinct !{!70, !18}
!71 = distinct !{!71, !18}
!72 = distinct !{!72, !18}
!73 = distinct !{!73, !18, !36}
!74 = distinct !{!74, !18}
!75 = distinct !{!75, !18}


; 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_meltw_unary_param = type { %struct.libxsmm_matrix_op_arg, %struct.libxsmm_matrix_arg, %struct.libxsmm_matrix_arg }
%struct.libxsmm_matrix_op_arg = type { ptr, ptr, ptr, ptr }
%struct.libxsmm_matrix_arg = type { ptr, ptr, ptr, ptr, ptr, ptr }

@.str.9 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_matcopy_internal = external hidden unnamed_addr constant [199 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [56 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_matcopy_internal(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, i32 noundef %10, i64 %11) local_unnamed_addr #2 {
  %13 = alloca %struct.libxsmm_meltw_unary_param, align 8
  %14 = inttoptr i64 %11 to ptr
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %15, label %16

15:                                               ; preds = %12
  tail call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.9, i32 noundef 200, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #5
  unreachable

16:                                               ; preds = %12
  %17 = icmp ne i32 %10, 0
  %18 = icmp ne i32 %9, 0
  %or.cond = and i1 %18, %17
  br i1 %or.cond, label %20, label %19

19:                                               ; preds = %16
  tail call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.9, i32 noundef 202, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_matcopy_internal) #5
  unreachable

20:                                               ; preds = %16
  %.not548 = icmp eq i64 %11, 0
  %21 = sub nsw i32 %8, %10
  %.not549706 = icmp slt i32 %21, %7
  br i1 %.not548, label %.preheader617, label %.preheader620

.preheader620:                                    ; preds = %20
  br i1 %.not549706, label %.loopexit618, label %.preheader619.lr.ph

.preheader619.lr.ph:                              ; preds = %.preheader620
  %22 = sub nsw i32 %6, %9
  %.not556622 = icmp slt i32 %22, %5
  %23 = zext i32 %2 to i64
  %24 = zext i32 %3 to i64
  %25 = zext i32 %4 to i64
  %26 = getelementptr inbounds i8, ptr %13, i64 32
  %27 = getelementptr inbounds i8, ptr %13, i64 80
  br i1 %.not556622, label %.loopexit618, label %.preheader619

.preheader617:                                    ; preds = %20
  br i1 %.not549706, label %.loopexit618, label %.preheader616.lr.ph

.preheader616.lr.ph:                              ; preds = %.preheader617
  %28 = sub nsw i32 %6, %9
  %.not550649 = icmp slt i32 %28, %5
  %29 = add i32 %2, -2
  %30 = tail call i32 @llvm.fshl.i32(i32 %29, i32 %29, i32 31)
  %31 = zext i32 %3 to i64
  %32 = zext i32 %4 to i64
  %33 = zext i32 %2 to i64
  %sext = shl i32 %2, 24
  %34 = ashr exact i32 %sext, 24
  %35 = icmp slt i32 %34, 1
  br i1 %.not550649, label %.loopexit618, label %.preheader616.preheader

.preheader616.preheader:                          ; preds = %.preheader616.lr.ph
  %36 = add i32 %9, %5
  %37 = add i32 %10, %7
  %38 = add i32 %10, -1
  %39 = zext i32 %38 to i64
  %40 = mul nuw i64 %32, %39
  %41 = add i32 %9, -1
  %42 = zext i32 %41 to i64
  %43 = add i64 %40, %42
  %44 = shl i64 %43, 1
  %45 = getelementptr i8, ptr %0, i64 %44
  %scevgep1196 = getelementptr i8, ptr %45, i64 2
  %46 = mul nuw i64 %31, %39
  %47 = add i64 %46, %42
  %48 = shl i64 %47, 1
  %49 = getelementptr i8, ptr %1, i64 %48
  %scevgep1199 = getelementptr i8, ptr %49, i64 2
  %50 = zext i32 %9 to i64
  %51 = add i32 %10, -1
  %52 = zext i32 %51 to i64
  %53 = mul nuw i64 %32, %52
  %54 = add i32 %9, -1
  %55 = zext i32 %54 to i64
  %56 = add i64 %53, %55
  %57 = shl i64 %56, 2
  %58 = getelementptr i8, ptr %0, i64 %57
  %scevgep1204 = getelementptr i8, ptr %58, i64 4
  %59 = mul nuw i64 %31, %52
  %60 = add i64 %59, %55
  %61 = shl i64 %60, 2
  %62 = getelementptr i8, ptr %1, i64 %61
  %scevgep1207 = getelementptr i8, ptr %62, i64 4
  %63 = zext i32 %9 to i64
  %64 = add i32 %10, -1
  %65 = zext i32 %64 to i64
  %66 = mul nuw i64 %32, %65
  %67 = add i32 %9, -1
  %68 = zext i32 %67 to i64
  %69 = add i64 %66, %68
  %70 = shl i64 %69, 3
  %71 = getelementptr i8, ptr %0, i64 %70
  %scevgep1229 = getelementptr i8, ptr %71, i64 8
  %72 = mul nuw i64 %31, %65
  %73 = add i64 %72, %68
  %74 = shl i64 %73, 3
  %75 = getelementptr i8, ptr %1, i64 %74
  %scevgep1232 = getelementptr i8, ptr %75, i64 8
  %76 = zext i32 %9 to i64
  %77 = add i32 %9, %5
  %78 = add i32 %77, -1
  %xtraiter = and i32 %9, 1
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  %79 = icmp eq i32 %41, 0
  %min.iters.check1239 = icmp ult i32 %9, 4
  %n.vec1242 = and i64 %76, 4294967292
  %cmp.n1251 = icmp eq i64 %n.vec1242, %76
  %min.iters.check1214 = icmp ult i32 %9, 8
  %n.vec1217 = and i64 %63, 4294967288
  %cmp.n1226 = icmp eq i64 %n.vec1217, %63
  %min.iters.check = icmp ult i32 %9, 16
  %n.vec = and i64 %50, 4294967280
  %cmp.n = icmp eq i64 %n.vec, %50
  br label %.preheader616

.preheader619:                                    ; preds = %.preheader619.lr.ph, %._crit_edge
  %.0494625 = phi i32 [ %92, %._crit_edge ], [ %7, %.preheader619.lr.ph ]
  %80 = sext i32 %.0494625 to i64
  %81 = mul nsw i64 %80, %24
  %82 = mul nsw i64 %80, %25
  br label %83

83:                                               ; preds = %.preheader619, %83
  %.1496623 = phi i32 [ %5, %.preheader619 ], [ %91, %83 ]
  %84 = sext i32 %.1496623 to i64
  %85 = add nsw i64 %81, %84
  %86 = mul i64 %85, %23
  %87 = getelementptr inbounds i8, ptr %1, i64 %86
  %88 = add nsw i64 %82, %84
  %89 = mul i64 %88, %23
  %90 = getelementptr inbounds i8, ptr %0, i64 %89
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %13) #6
  store ptr %87, ptr %26, align 8, !tbaa !5
  store ptr %90, ptr %27, align 8, !tbaa !12
  call void %14(ptr noundef nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %13) #6
  %91 = add i32 %.1496623, %9
  %.not556 = icmp sgt i32 %91, %22
  br i1 %.not556, label %._crit_edge, label %83, !llvm.loop !13

._crit_edge:                                      ; preds = %83
  %92 = add i32 %.0494625, %10
  %.not551 = icmp sgt i32 %92, %21
  br i1 %.not551, label %.loopexit618, label %.preheader619, !llvm.loop !15

.preheader616:                                    ; preds = %.preheader616.preheader, %._crit_edge657
  %indvars.iv878 = phi i32 [ %37, %.preheader616.preheader ], [ %indvars.iv.next879, %._crit_edge657 ]
  %.1707 = phi i32 [ %7, %.preheader616.preheader ], [ %103, %._crit_edge657 ]
  %93 = sext i32 %.1707 to i64
  %94 = mul nsw i64 %32, %93
  %95 = mul nsw i64 %31, %93
  %96 = sext i32 %.1707 to i64
  %97 = mul nsw i64 %32, %96
  %98 = mul nsw i64 %31, %96
  %99 = sext i32 %.1707 to i64
  %100 = mul nsw i64 %32, %99
  %101 = mul nsw i64 %31, %99
  %102 = sext i32 %.1707 to i64
  %103 = add i32 %.1707, %10
  %104 = icmp slt i32 %.1707, %103
  switch i32 %30, label %.lr.ph.split [
    i32 0, label %.lr.ph.split.us
    i32 1, label %.lr.ph.split.us664
    i32 3, label %.lr.ph.split.us674
    i32 7, label %.lr.ph.split.us684
  ]

.lr.ph.split.us:                                  ; preds = %.preheader616
  br i1 %104, label %.preheader608.us.us, label %.preheader608.us

.preheader608.us.us:                              ; preds = %.lr.ph.split.us, %..loopexit609_crit_edge.us.us
  %indvar1511 = phi i32 [ %indvar.next1512, %..loopexit609_crit_edge.us.us ], [ 0, %.lr.ph.split.us ]
  %indvars.iv912 = phi i32 [ %indvars.iv.next913, %..loopexit609_crit_edge.us.us ], [ %36, %.lr.ph.split.us ]
  %.3650.us.us = phi i32 [ %113, %..loopexit609_crit_edge.us.us ], [ %5, %.lr.ph.split.us ]
  %105 = mul i32 %indvar1511, %9
  %106 = add i32 %78, %105
  %107 = sext i32 %.3650.us.us to i64
  %108 = add i64 %100, %107
  %109 = shl i64 %108, 1
  %scevgep = getelementptr i8, ptr %0, i64 %109
  %scevgep1197 = getelementptr i8, ptr %scevgep1196, i64 %109
  %110 = add i64 %101, %107
  %111 = shl i64 %110, 1
  %scevgep1198 = getelementptr i8, ptr %1, i64 %111
  %scevgep1200 = getelementptr i8, ptr %scevgep1199, i64 %111
  %112 = sext i32 %.3650.us.us to i64
  %113 = add i32 %.3650.us.us, %9
  %114 = icmp slt i32 %.3650.us.us, %113
  br i1 %114, label %.preheader602.us.us.us.preheader, label %..loopexit609_crit_edge.us.us

.preheader602.us.us.us.preheader:                 ; preds = %.preheader608.us.us
  %bound0 = icmp ult ptr %scevgep, %scevgep1200
  %bound1 = icmp ult ptr %scevgep1198, %scevgep1197
  %found.conflict = and i1 %bound0, %bound1
  %ind.end = add nsw i64 %n.vec, %112
  br label %.preheader602.us.us.us

..loopexit609_crit_edge.us.us:                    ; preds = %._crit_edge637.us.us.us, %.preheader608.us.us
  %.not550.us.us = icmp sgt i32 %113, %28
  %indvars.iv.next913 = add i32 %indvars.iv912, %9
  %indvar.next1512 = add i32 %indvar1511, 1
  br i1 %.not550.us.us, label %._crit_edge657, label %.preheader608.us.us, !llvm.loop !16

.preheader602.us.us.us:                           ; preds = %.preheader602.us.us.us.preheader, %._crit_edge637.us.us.us
  %indvars.iv916 = phi i64 [ %indvars.iv.next917, %._crit_edge637.us.us.us ], [ %102, %.preheader602.us.us.us.preheader ]
  %115 = mul nsw i64 %indvars.iv916, %31
  %116 = mul nsw i64 %indvars.iv916, %32
  %brmerge1559 = select i1 %min.iters.check, i1 true, i1 %found.conflict
  br i1 %brmerge1559, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader602.us.us.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader602.us.us.us ]
  %offset.idx = add i64 %index, %112
  %117 = add nsw i64 %115, %offset.idx
  %118 = shl i64 %117, 1
  %119 = getelementptr inbounds i8, ptr %1, i64 %118
  %120 = add nsw i64 %116, %offset.idx
  %121 = shl i64 %120, 1
  %122 = getelementptr inbounds i8, ptr %0, i64 %121
  %123 = getelementptr inbounds i8, ptr %119, i64 16
  %wide.load = load <8 x i16>, ptr %119, align 2, !tbaa !17, !alias.scope !19
  %wide.load1201 = load <8 x i16>, ptr %123, align 2, !tbaa !17, !alias.scope !19
  %124 = getelementptr inbounds i8, ptr %122, i64 16
  store <8 x i16> %wide.load, ptr %122, align 2, !tbaa !17, !alias.scope !22, !noalias !19
  store <8 x i16> %wide.load1201, ptr %124, align 2, !tbaa !17, !alias.scope !22, !noalias !19
  %index.next = add nuw i64 %index, 16
  %125 = icmp eq i64 %index.next, %n.vec
  br i1 %125, label %middle.block, label %vector.body, !llvm.loop !24

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge637.us.us.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %.preheader602.us.us.us, %middle.block
  %indvars.iv909.ph = phi i64 [ %112, %.preheader602.us.us.us ], [ %ind.end, %middle.block ]
  %126 = trunc i64 %indvars.iv909.ph to i32
  %127 = sub i32 %indvars.iv912, %126
  %xtraiter1513 = and i32 %127, 1
  %lcmp.mod1514.not = icmp eq i32 %xtraiter1513, 0
  br i1 %lcmp.mod1514.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %128 = add nsw i64 %115, %indvars.iv909.ph
  %129 = shl i64 %128, 1
  %130 = getelementptr inbounds i8, ptr %1, i64 %129
  %131 = add nsw i64 %116, %indvars.iv909.ph
  %132 = shl i64 %131, 1
  %133 = getelementptr inbounds i8, ptr %0, i64 %132
  %134 = load i16, ptr %130, align 2, !tbaa !17
  store i16 %134, ptr %133, align 2, !tbaa !17
  %indvars.iv.next910.prol = add nsw i64 %indvars.iv909.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv909.unr = phi i64 [ %indvars.iv909.ph, %scalar.ph.preheader ], [ %indvars.iv.next910.prol, %scalar.ph.prol ]
  %135 = icmp eq i32 %106, %126
  br i1 %135, label %._crit_edge637.us.us.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv909 = phi i64 [ %indvars.iv.next910.1, %scalar.ph ], [ %indvars.iv909.unr, %scalar.ph.prol.loopexit ]
  %136 = add nsw i64 %115, %indvars.iv909
  %137 = shl i64 %136, 1
  %138 = getelementptr inbounds i8, ptr %1, i64 %137
  %139 = add nsw i64 %116, %indvars.iv909
  %140 = shl i64 %139, 1
  %141 = getelementptr inbounds i8, ptr %0, i64 %140
  %142 = load i16, ptr %138, align 2, !tbaa !17
  store i16 %142, ptr %141, align 2, !tbaa !17
  %indvars.iv.next910 = add nsw i64 %indvars.iv909, 1
  %143 = add nsw i64 %115, %indvars.iv.next910
  %144 = shl i64 %143, 1
  %145 = getelementptr inbounds i8, ptr %1, i64 %144
  %146 = add nsw i64 %116, %indvars.iv.next910
  %147 = shl i64 %146, 1
  %148 = getelementptr inbounds i8, ptr %0, i64 %147
  %149 = load i16, ptr %145, align 2, !tbaa !17
  store i16 %149, ptr %148, align 2, !tbaa !17
  %indvars.iv.next910.1 = add nsw i64 %indvars.iv909, 2
  %lftr.wideiv914.1 = trunc i64 %indvars.iv.next910.1 to i32
  %exitcond915.not.1 = icmp eq i32 %indvars.iv912, %lftr.wideiv914.1
  br i1 %exitcond915.not.1, label %._crit_edge637.us.us.us, label %scalar.ph, !llvm.loop !27

._crit_edge637.us.us.us:                          ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next917 = add nsw i64 %indvars.iv916, 1
  %lftr.wideiv919 = trunc i64 %indvars.iv.next917 to i32
  %exitcond920.not = icmp eq i32 %indvars.iv878, %lftr.wideiv919
  br i1 %exitcond920.not, label %..loopexit609_crit_edge.us.us, label %.preheader602.us.us.us, !llvm.loop !28

.preheader608.us:                                 ; preds = %.lr.ph.split.us, %.preheader608.us
  %.3650.us = phi i32 [ %150, %.preheader608.us ], [ %5, %.lr.ph.split.us ]
  %150 = add i32 %.3650.us, %9
  %.not550.us = icmp sgt i32 %150, %28
  br i1 %.not550.us, label %._crit_edge657, label %.preheader608.us, !llvm.loop !16

.lr.ph.split.us664:                               ; preds = %.preheader616
  br i1 %104, label %.preheader610.us.us, label %.preheader610.us

.preheader610.us.us:                              ; preds = %.lr.ph.split.us664, %..loopexit611_crit_edge.us.us
  %indvar1507 = phi i32 [ %indvar.next1508, %..loopexit611_crit_edge.us.us ], [ 0, %.lr.ph.split.us664 ]
  %indvars.iv899 = phi i32 [ %indvars.iv.next900, %..loopexit611_crit_edge.us.us ], [ %36, %.lr.ph.split.us664 ]
  %.3650.us665.us = phi i32 [ %159, %..loopexit611_crit_edge.us.us ], [ %5, %.lr.ph.split.us664 ]
  %151 = mul i32 %indvar1507, %9
  %152 = add i32 %78, %151
  %153 = sext i32 %.3650.us665.us to i64
  %154 = add i64 %97, %153
  %155 = shl i64 %154, 2
  %scevgep1203 = getelementptr i8, ptr %0, i64 %155
  %scevgep1205 = getelementptr i8, ptr %scevgep1204, i64 %155
  %156 = add i64 %98, %153
  %157 = shl i64 %156, 2
  %scevgep1206 = getelementptr i8, ptr %1, i64 %157
  %scevgep1208 = getelementptr i8, ptr %scevgep1207, i64 %157
  %158 = sext i32 %.3650.us665.us to i64
  %159 = add i32 %.3650.us665.us, %9
  %160 = icmp slt i32 %.3650.us665.us, %159
  br i1 %160, label %.preheader603.us.us.us.preheader, label %..loopexit611_crit_edge.us.us

.preheader603.us.us.us.preheader:                 ; preds = %.preheader610.us.us
  %bound01209 = icmp ult ptr %scevgep1203, %scevgep1208
  %bound11210 = icmp ult ptr %scevgep1206, %scevgep1205
  %found.conflict1211 = and i1 %bound01209, %bound11210
  %ind.end1218 = add nsw i64 %n.vec1217, %158
  br label %.preheader603.us.us.us

..loopexit611_crit_edge.us.us:                    ; preds = %._crit_edge634.us.us.us, %.preheader610.us.us
  %.not550.us667.us = icmp sgt i32 %159, %28
  %indvars.iv.next900 = add i32 %indvars.iv899, %9
  %indvar.next1508 = add i32 %indvar1507, 1
  br i1 %.not550.us667.us, label %._crit_edge657, label %.preheader610.us.us, !llvm.loop !16

.preheader603.us.us.us:                           ; preds = %.preheader603.us.us.us.preheader, %._crit_edge634.us.us.us
  %indvars.iv903 = phi i64 [ %indvars.iv.next904, %._crit_edge634.us.us.us ], [ %102, %.preheader603.us.us.us.preheader ]
  %161 = mul nsw i64 %indvars.iv903, %31
  %162 = mul nsw i64 %indvars.iv903, %32
  %brmerge1560 = select i1 %min.iters.check1214, i1 true, i1 %found.conflict1211
  br i1 %brmerge1560, label %scalar.ph1213.preheader, label %vector.body1220

vector.body1220:                                  ; preds = %.preheader603.us.us.us, %vector.body1220
  %index1221 = phi i64 [ %index.next1225, %vector.body1220 ], [ 0, %.preheader603.us.us.us ]
  %offset.idx1222 = add i64 %index1221, %158
  %163 = add nsw i64 %161, %offset.idx1222
  %164 = shl i64 %163, 2
  %165 = getelementptr inbounds i8, ptr %1, i64 %164
  %166 = add nsw i64 %162, %offset.idx1222
  %167 = shl i64 %166, 2
  %168 = getelementptr inbounds i8, ptr %0, i64 %167
  %169 = getelementptr inbounds i8, ptr %165, i64 16
  %wide.load1223 = load <4 x float>, ptr %165, align 4, !tbaa !29, !alias.scope !31
  %wide.load1224 = load <4 x float>, ptr %169, align 4, !tbaa !29, !alias.scope !31
  %170 = getelementptr inbounds i8, ptr %168, i64 16
  store <4 x float> %wide.load1223, ptr %168, align 4, !tbaa !29, !alias.scope !34, !noalias !31
  store <4 x float> %wide.load1224, ptr %170, align 4, !tbaa !29, !alias.scope !34, !noalias !31
  %index.next1225 = add nuw i64 %index1221, 8
  %171 = icmp eq i64 %index.next1225, %n.vec1217
  br i1 %171, label %middle.block1212, label %vector.body1220, !llvm.loop !36

middle.block1212:                                 ; preds = %vector.body1220
  br i1 %cmp.n1226, label %._crit_edge634.us.us.us, label %scalar.ph1213.preheader

scalar.ph1213.preheader:                          ; preds = %.preheader603.us.us.us, %middle.block1212
  %indvars.iv896.ph = phi i64 [ %158, %.preheader603.us.us.us ], [ %ind.end1218, %middle.block1212 ]
  %172 = trunc i64 %indvars.iv896.ph to i32
  %173 = sub i32 %indvars.iv899, %172
  %xtraiter1509 = and i32 %173, 1
  %lcmp.mod1510.not = icmp eq i32 %xtraiter1509, 0
  br i1 %lcmp.mod1510.not, label %scalar.ph1213.prol.loopexit, label %scalar.ph1213.prol

scalar.ph1213.prol:                               ; preds = %scalar.ph1213.preheader
  %174 = add nsw i64 %161, %indvars.iv896.ph
  %175 = shl i64 %174, 2
  %176 = getelementptr inbounds i8, ptr %1, i64 %175
  %177 = add nsw i64 %162, %indvars.iv896.ph
  %178 = shl i64 %177, 2
  %179 = getelementptr inbounds i8, ptr %0, i64 %178
  %180 = load float, ptr %176, align 4, !tbaa !29
  store float %180, ptr %179, align 4, !tbaa !29
  %indvars.iv.next897.prol = add nsw i64 %indvars.iv896.ph, 1
  br label %scalar.ph1213.prol.loopexit

scalar.ph1213.prol.loopexit:                      ; preds = %scalar.ph1213.prol, %scalar.ph1213.preheader
  %indvars.iv896.unr = phi i64 [ %indvars.iv896.ph, %scalar.ph1213.preheader ], [ %indvars.iv.next897.prol, %scalar.ph1213.prol ]
  %181 = icmp eq i32 %152, %172
  br i1 %181, label %._crit_edge634.us.us.us, label %scalar.ph1213

scalar.ph1213:                                    ; preds = %scalar.ph1213.prol.loopexit, %scalar.ph1213
  %indvars.iv896 = phi i64 [ %indvars.iv.next897.1, %scalar.ph1213 ], [ %indvars.iv896.unr, %scalar.ph1213.prol.loopexit ]
  %182 = add nsw i64 %161, %indvars.iv896
  %183 = shl i64 %182, 2
  %184 = getelementptr inbounds i8, ptr %1, i64 %183
  %185 = add nsw i64 %162, %indvars.iv896
  %186 = shl i64 %185, 2
  %187 = getelementptr inbounds i8, ptr %0, i64 %186
  %188 = load float, ptr %184, align 4, !tbaa !29
  store float %188, ptr %187, align 4, !tbaa !29
  %indvars.iv.next897 = add nsw i64 %indvars.iv896, 1
  %189 = add nsw i64 %161, %indvars.iv.next897
  %190 = shl i64 %189, 2
  %191 = getelementptr inbounds i8, ptr %1, i64 %190
  %192 = add nsw i64 %162, %indvars.iv.next897
  %193 = shl i64 %192, 2
  %194 = getelementptr inbounds i8, ptr %0, i64 %193
  %195 = load float, ptr %191, align 4, !tbaa !29
  store float %195, ptr %194, align 4, !tbaa !29
  %indvars.iv.next897.1 = add nsw i64 %indvars.iv896, 2
  %lftr.wideiv901.1 = trunc i64 %indvars.iv.next897.1 to i32
  %exitcond902.not.1 = icmp eq i32 %indvars.iv899, %lftr.wideiv901.1
  br i1 %exitcond902.not.1, label %._crit_edge634.us.us.us, label %scalar.ph1213, !llvm.loop !37

._crit_edge634.us.us.us:                          ; preds = %scalar.ph1213.prol.loopexit, %scalar.ph1213, %middle.block1212
  %indvars.iv.next904 = add nsw i64 %indvars.iv903, 1
  %lftr.wideiv906 = trunc i64 %indvars.iv.next904 to i32
  %exitcond907.not = icmp eq i32 %indvars.iv878, %lftr.wideiv906
  br i1 %exitcond907.not, label %..loopexit611_crit_edge.us.us, label %.preheader603.us.us.us, !llvm.loop !38

.preheader610.us:                                 ; preds = %.lr.ph.split.us664, %.preheader610.us
  %.3650.us665 = phi i32 [ %196, %.preheader610.us ], [ %5, %.lr.ph.split.us664 ]
  %196 = add i32 %.3650.us665, %9
  %.not550.us667 = icmp sgt i32 %196, %28
  br i1 %.not550.us667, label %._crit_edge657, label %.preheader610.us, !llvm.loop !16

.lr.ph.split.us674:                               ; preds = %.preheader616
  br i1 %104, label %.preheader612.us.us, label %.preheader612.us

.preheader612.us.us:                              ; preds = %.lr.ph.split.us674, %..loopexit613_crit_edge.us.us
  %indvar = phi i32 [ %indvar.next, %..loopexit613_crit_edge.us.us ], [ 0, %.lr.ph.split.us674 ]
  %indvars.iv886 = phi i32 [ %indvars.iv.next887, %..loopexit613_crit_edge.us.us ], [ %36, %.lr.ph.split.us674 ]
  %.3650.us675.us = phi i32 [ %205, %..loopexit613_crit_edge.us.us ], [ %5, %.lr.ph.split.us674 ]
  %197 = mul i32 %indvar, %9
  %198 = add i32 %78, %197
  %199 = sext i32 %.3650.us675.us to i64
  %200 = add i64 %94, %199
  %201 = shl i64 %200, 3
  %scevgep1228 = getelementptr i8, ptr %0, i64 %201
  %scevgep1230 = getelementptr i8, ptr %scevgep1229, i64 %201
  %202 = add i64 %95, %199
  %203 = shl i64 %202, 3
  %scevgep1231 = getelementptr i8, ptr %1, i64 %203
  %scevgep1233 = getelementptr i8, ptr %scevgep1232, i64 %203
  %204 = sext i32 %.3650.us675.us to i64
  %205 = add i32 %.3650.us675.us, %9
  %206 = icmp slt i32 %.3650.us675.us, %205
  br i1 %206, label %.preheader604.us.us.us.preheader, label %..loopexit613_crit_edge.us.us

.preheader604.us.us.us.preheader:                 ; preds = %.preheader612.us.us
  %bound01234 = icmp ult ptr %scevgep1228, %scevgep1233
  %bound11235 = icmp ult ptr %scevgep1231, %scevgep1230
  %found.conflict1236 = and i1 %bound01234, %bound11235
  %ind.end1243 = add nsw i64 %n.vec1242, %204
  br label %.preheader604.us.us.us

..loopexit613_crit_edge.us.us:                    ; preds = %._crit_edge631.us.us.us, %.preheader612.us.us
  %.not550.us677.us = icmp sgt i32 %205, %28
  %indvars.iv.next887 = add i32 %indvars.iv886, %9
  %indvar.next = add i32 %indvar, 1
  br i1 %.not550.us677.us, label %._crit_edge657, label %.preheader612.us.us, !llvm.loop !16

.preheader604.us.us.us:                           ; preds = %.preheader604.us.us.us.preheader, %._crit_edge631.us.us.us
  %indvars.iv890 = phi i64 [ %indvars.iv.next891, %._crit_edge631.us.us.us ], [ %102, %.preheader604.us.us.us.preheader ]
  %207 = mul nsw i64 %indvars.iv890, %31
  %208 = mul nsw i64 %indvars.iv890, %32
  %brmerge1561 = select i1 %min.iters.check1239, i1 true, i1 %found.conflict1236
  br i1 %brmerge1561, label %scalar.ph1238.preheader, label %vector.body1245

vector.body1245:                                  ; preds = %.preheader604.us.us.us, %vector.body1245
  %index1246 = phi i64 [ %index.next1250, %vector.body1245 ], [ 0, %.preheader604.us.us.us ]
  %offset.idx1247 = add i64 %index1246, %204
  %209 = add nsw i64 %207, %offset.idx1247
  %210 = shl i64 %209, 3
  %211 = getelementptr inbounds i8, ptr %1, i64 %210
  %212 = add nsw i64 %208, %offset.idx1247
  %213 = shl i64 %212, 3
  %214 = getelementptr inbounds i8, ptr %0, i64 %213
  %215 = getelementptr inbounds i8, ptr %211, i64 16
  %wide.load1248 = load <2 x double>, ptr %211, align 8, !tbaa !39, !alias.scope !41
  %wide.load1249 = load <2 x double>, ptr %215, align 8, !tbaa !39, !alias.scope !41
  %216 = getelementptr inbounds i8, ptr %214, i64 16
  store <2 x double> %wide.load1248, ptr %214, align 8, !tbaa !39, !alias.scope !44, !noalias !41
  store <2 x double> %wide.load1249, ptr %216, align 8, !tbaa !39, !alias.scope !44, !noalias !41
  %index.next1250 = add nuw i64 %index1246, 4
  %217 = icmp eq i64 %index.next1250, %n.vec1242
  br i1 %217, label %middle.block1237, label %vector.body1245, !llvm.loop !46

middle.block1237:                                 ; preds = %vector.body1245
  br i1 %cmp.n1251, label %._crit_edge631.us.us.us, label %scalar.ph1238.preheader

scalar.ph1238.preheader:                          ; preds = %.preheader604.us.us.us, %middle.block1237
  %indvars.iv883.ph = phi i64 [ %204, %.preheader604.us.us.us ], [ %ind.end1243, %middle.block1237 ]
  %218 = trunc i64 %indvars.iv883.ph to i32
  %219 = sub i32 %indvars.iv886, %218
  %xtraiter1505 = and i32 %219, 1
  %lcmp.mod1506.not = icmp eq i32 %xtraiter1505, 0
  br i1 %lcmp.mod1506.not, label %scalar.ph1238.prol.loopexit, label %scalar.ph1238.prol

scalar.ph1238.prol:                               ; preds = %scalar.ph1238.preheader
  %220 = add nsw i64 %207, %indvars.iv883.ph
  %221 = shl i64 %220, 3
  %222 = getelementptr inbounds i8, ptr %1, i64 %221
  %223 = add nsw i64 %208, %indvars.iv883.ph
  %224 = shl i64 %223, 3
  %225 = getelementptr inbounds i8, ptr %0, i64 %224
  %226 = load double, ptr %222, align 8, !tbaa !39
  store double %226, ptr %225, align 8, !tbaa !39
  %indvars.iv.next884.prol = add nsw i64 %indvars.iv883.ph, 1
  br label %scalar.ph1238.prol.loopexit

scalar.ph1238.prol.loopexit:                      ; preds = %scalar.ph1238.prol, %scalar.ph1238.preheader
  %indvars.iv883.unr = phi i64 [ %indvars.iv883.ph, %scalar.ph1238.preheader ], [ %indvars.iv.next884.prol, %scalar.ph1238.prol ]
  %227 = icmp eq i32 %198, %218
  br i1 %227, label %._crit_edge631.us.us.us, label %scalar.ph1238

scalar.ph1238:                                    ; preds = %scalar.ph1238.prol.loopexit, %scalar.ph1238
  %indvars.iv883 = phi i64 [ %indvars.iv.next884.1, %scalar.ph1238 ], [ %indvars.iv883.unr, %scalar.ph1238.prol.loopexit ]
  %228 = add nsw i64 %207, %indvars.iv883
  %229 = shl i64 %228, 3
  %230 = getelementptr inbounds i8, ptr %1, i64 %229
  %231 = add nsw i64 %208, %indvars.iv883
  %232 = shl i64 %231, 3
  %233 = getelementptr inbounds i8, ptr %0, i64 %232
  %234 = load double, ptr %230, align 8, !tbaa !39
  store double %234, ptr %233, align 8, !tbaa !39
  %indvars.iv.next884 = add nsw i64 %indvars.iv883, 1
  %235 = add nsw i64 %207, %indvars.iv.next884
  %236 = shl i64 %235, 3
  %237 = getelementptr inbounds i8, ptr %1, i64 %236
  %238 = add nsw i64 %208, %indvars.iv.next884
  %239 = shl i64 %238, 3
  %240 = getelementptr inbounds i8, ptr %0, i64 %239
  %241 = load double, ptr %237, align 8, !tbaa !39
  store double %241, ptr %240, align 8, !tbaa !39
  %indvars.iv.next884.1 = add nsw i64 %indvars.iv883, 2
  %lftr.wideiv888.1 = trunc i64 %indvars.iv.next884.1 to i32
  %exitcond889.not.1 = icmp eq i32 %indvars.iv886, %lftr.wideiv888.1
  br i1 %exitcond889.not.1, label %._crit_edge631.us.us.us, label %scalar.ph1238, !llvm.loop !47

._crit_edge631.us.us.us:                          ; preds = %scalar.ph1238.prol.loopexit, %scalar.ph1238, %middle.block1237
  %indvars.iv.next891 = add nsw i64 %indvars.iv890, 1
  %lftr.wideiv893 = trunc i64 %indvars.iv.next891 to i32
  %exitcond894.not = icmp eq i32 %indvars.iv878, %lftr.wideiv893
  br i1 %exitcond894.not, label %..loopexit613_crit_edge.us.us, label %.preheader604.us.us.us, !llvm.loop !48

.preheader612.us:                                 ; preds = %.lr.ph.split.us674, %.preheader612.us
  %.3650.us675 = phi i32 [ %242, %.preheader612.us ], [ %5, %.lr.ph.split.us674 ]
  %242 = add i32 %.3650.us675, %9
  %.not550.us677 = icmp sgt i32 %242, %28
  br i1 %.not550.us677, label %._crit_edge657, label %.preheader612.us, !llvm.loop !16

.lr.ph.split.us684:                               ; preds = %.preheader616
  br i1 %104, label %.preheader614.us.us, label %.preheader614.us

.preheader614.us.us:                              ; preds = %.lr.ph.split.us684, %..loopexit615_crit_edge.us.us
  %indvars.iv873 = phi i32 [ %indvars.iv.next874, %..loopexit615_crit_edge.us.us ], [ %36, %.lr.ph.split.us684 ]
  %.3650.us685.us = phi i32 [ %244, %..loopexit615_crit_edge.us.us ], [ %5, %.lr.ph.split.us684 ]
  %243 = sext i32 %.3650.us685.us to i64
  %244 = add i32 %.3650.us685.us, %9
  %245 = icmp slt i32 %.3650.us685.us, %244
  br i1 %245, label %.preheader605.us.us.us.preheader, label %..loopexit615_crit_edge.us.us

.preheader605.us.us.us.preheader:                 ; preds = %.preheader614.us.us
  %indvars.iv.next.prol = add nsw i64 %243, 1
  br label %.preheader605.us.us.us

..loopexit615_crit_edge.us.us:                    ; preds = %._crit_edge628.us.us.us, %.preheader614.us.us
  %.not550.us687.us = icmp sgt i32 %244, %28
  %indvars.iv.next874 = add i32 %indvars.iv873, %9
  br i1 %.not550.us687.us, label %._crit_edge657, label %.preheader614.us.us, !llvm.loop !16

.preheader605.us.us.us:                           ; preds = %.preheader605.us.us.us.preheader, %._crit_edge628.us.us.us
  %indvars.iv875 = phi i64 [ %indvars.iv.next876, %._crit_edge628.us.us.us ], [ %102, %.preheader605.us.us.us.preheader ]
  %246 = mul nsw i64 %indvars.iv875, %31
  %247 = mul nsw i64 %indvars.iv875, %32
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.loopexit.unr-lcssa

.prol.loopexit.unr-lcssa:                         ; preds = %.preheader605.us.us.us
  %248 = add nsw i64 %246, %243
  %249 = shl i64 %248, 4
  %250 = getelementptr inbounds i8, ptr %1, i64 %249
  %251 = add nsw i64 %247, %243
  %252 = shl i64 %251, 4
  %253 = getelementptr inbounds i8, ptr %0, i64 %252
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %253, ptr noundef nonnull align 8 dereferenceable(16) %250, i64 16, i1 false), !tbaa.struct !49
  br label %.prol.loopexit

.prol.loopexit:                                   ; preds = %.prol.loopexit.unr-lcssa, %.preheader605.us.us.us
  %indvars.iv.unr = phi i64 [ %243, %.preheader605.us.us.us ], [ %indvars.iv.next.prol, %.prol.loopexit.unr-lcssa ]
  br i1 %79, label %._crit_edge628.us.us.us, label %.preheader605.us.us.us.new

.preheader605.us.us.us.new:                       ; preds = %.prol.loopexit, %.preheader605.us.us.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader605.us.us.us.new ], [ %indvars.iv.unr, %.prol.loopexit ]
  %254 = add nsw i64 %246, %indvars.iv
  %255 = shl i64 %254, 4
  %256 = getelementptr inbounds i8, ptr %1, i64 %255
  %257 = add nsw i64 %247, %indvars.iv
  %258 = shl i64 %257, 4
  %259 = getelementptr inbounds i8, ptr %0, i64 %258
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %259, ptr noundef nonnull align 8 dereferenceable(16) %256, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %260 = add nsw i64 %246, %indvars.iv.next
  %261 = shl i64 %260, 4
  %262 = getelementptr inbounds i8, ptr %1, i64 %261
  %263 = add nsw i64 %247, %indvars.iv.next
  %264 = shl i64 %263, 4
  %265 = getelementptr inbounds i8, ptr %0, i64 %264
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %265, ptr noundef nonnull align 8 dereferenceable(16) %262, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next.1 = add nsw i64 %indvars.iv, 2
  %lftr.wideiv.1 = trunc i64 %indvars.iv.next.1 to i32
  %exitcond.not.1 = icmp eq i32 %indvars.iv873, %lftr.wideiv.1
  br i1 %exitcond.not.1, label %._crit_edge628.us.us.us, label %.preheader605.us.us.us.new, !llvm.loop !51

._crit_edge628.us.us.us:                          ; preds = %.preheader605.us.us.us.new, %.prol.loopexit
  %indvars.iv.next876 = add nsw i64 %indvars.iv875, 1
  %lftr.wideiv880 = trunc i64 %indvars.iv.next876 to i32
  %exitcond881.not = icmp eq i32 %indvars.iv878, %lftr.wideiv880
  br i1 %exitcond881.not, label %..loopexit615_crit_edge.us.us, label %.preheader605.us.us.us, !llvm.loop !52

.preheader614.us:                                 ; preds = %.lr.ph.split.us684, %.preheader614.us
  %.3650.us685 = phi i32 [ %266, %.preheader614.us ], [ %5, %.lr.ph.split.us684 ]
  %266 = add i32 %.3650.us685, %9
  %.not550.us687 = icmp sgt i32 %266, %28
  br i1 %.not550.us687, label %._crit_edge657, label %.preheader614.us, !llvm.loop !16

.lr.ph.split:                                     ; preds = %.preheader616
  br i1 %104, label %.preheader606.us, label %.preheader606

.preheader606.us:                                 ; preds = %.lr.ph.split, %..loopexit607_crit_edge.us
  %indvars.iv924 = phi i32 [ %indvars.iv.next925, %..loopexit607_crit_edge.us ], [ %36, %.lr.ph.split ]
  %.3650.us694 = phi i32 [ %268, %..loopexit607_crit_edge.us ], [ %5, %.lr.ph.split ]
  %267 = sext i32 %.3650.us694 to i64
  %268 = add i32 %.3650.us694, %9
  %269 = icmp sge i32 %.3650.us694, %268
  %brmerge = select i1 %269, i1 true, i1 %35
  br i1 %brmerge, label %..loopexit607_crit_edge.us, label %.preheader601.us.us.us

..loopexit607_crit_edge.us:                       ; preds = %._crit_edge644.split.us.us.us.us, %.preheader606.us
  %.not550.us697 = icmp sgt i32 %268, %28
  %indvars.iv.next925 = add i32 %indvars.iv924, %9
  br i1 %.not550.us697, label %._crit_edge657, label %.preheader606.us, !llvm.loop !16

.preheader601.us.us.us:                           ; preds = %.preheader606.us, %._crit_edge644.split.us.us.us.us
  %indvars.iv928 = phi i64 [ %indvars.iv.next929, %._crit_edge644.split.us.us.us.us ], [ %102, %.preheader606.us ]
  %270 = mul nsw i64 %indvars.iv928, %31
  %271 = mul nsw i64 %indvars.iv928, %32
  br label %.lr.ph.us.us.us.us

.lr.ph.us.us.us.us:                               ; preds = %._crit_edge641.us.us.us.us, %.preheader601.us.us.us
  %indvars.iv921 = phi i64 [ %indvars.iv.next922, %._crit_edge641.us.us.us.us ], [ %267, %.preheader601.us.us.us ]
  %272 = add nsw i64 %270, %indvars.iv921
  %273 = mul i64 %272, %33
  %274 = getelementptr inbounds i8, ptr %1, i64 %273
  %275 = add nsw i64 %271, %indvars.iv921
  %276 = mul i64 %275, %33
  %277 = getelementptr inbounds i8, ptr %0, i64 %276
  br label %278

278:                                              ; preds = %302, %.lr.ph.us.us.us.us
  %.0519639.us.us.us.us = phi i8 [ 0, %.lr.ph.us.us.us.us ], [ %307, %302 ]
  %279 = zext nneg i8 %.0519639.us.us.us.us to i64
  %280 = getelementptr inbounds i8, ptr %274, i64 %279
  %281 = load i8, ptr %280, align 1, !tbaa !50
  %282 = getelementptr inbounds i8, ptr %277, i64 %279
  store i8 %281, ptr %282, align 1, !tbaa !50
  %283 = or disjoint i8 %.0519639.us.us.us.us, 1
  %284 = zext nneg i8 %283 to i32
  %285 = icmp sgt i32 %34, %284
  br i1 %285, label %286, label %._crit_edge641.us.us.us.us, !llvm.loop !53

286:                                              ; preds = %278
  %287 = zext nneg i8 %283 to i64
  %288 = getelementptr inbounds i8, ptr %274, i64 %287
  %289 = load i8, ptr %288, align 1, !tbaa !50
  %290 = getelementptr inbounds i8, ptr %277, i64 %287
  store i8 %289, ptr %290, align 1, !tbaa !50
  %291 = or disjoint i8 %.0519639.us.us.us.us, 2
  %292 = zext nneg i8 %291 to i32
  %293 = icmp ugt i32 %34, %292
  br i1 %293, label %294, label %._crit_edge641.us.us.us.us, !llvm.loop !53

294:                                              ; preds = %286
  %295 = zext nneg i8 %291 to i64
  %296 = getelementptr inbounds i8, ptr %274, i64 %295
  %297 = load i8, ptr %296, align 1, !tbaa !50
  %298 = getelementptr inbounds i8, ptr %277, i64 %295
  store i8 %297, ptr %298, align 1, !tbaa !50
  %299 = or disjoint i8 %.0519639.us.us.us.us, 3
  %300 = zext nneg i8 %299 to i32
  %301 = icmp ugt i32 %34, %300
  br i1 %301, label %302, label %._crit_edge641.us.us.us.us, !llvm.loop !53

302:                                              ; preds = %294
  %303 = zext nneg i8 %299 to i64
  %304 = getelementptr inbounds i8, ptr %274, i64 %303
  %305 = load i8, ptr %304, align 1, !tbaa !50
  %306 = getelementptr inbounds i8, ptr %277, i64 %303
  store i8 %305, ptr %306, align 1, !tbaa !50
  %307 = add nuw nsw i8 %.0519639.us.us.us.us, 4
  %308 = zext nneg i8 %307 to i32
  %309 = icmp ugt i32 %34, %308
  br i1 %309, label %278, label %._crit_edge641.us.us.us.us, !llvm.loop !55

._crit_edge641.us.us.us.us:                       ; preds = %302, %294, %286, %278
  %indvars.iv.next922 = add nsw i64 %indvars.iv921, 1
  %lftr.wideiv926 = trunc i64 %indvars.iv.next922 to i32
  %exitcond927.not = icmp eq i32 %indvars.iv924, %lftr.wideiv926
  br i1 %exitcond927.not, label %._crit_edge644.split.us.us.us.us, label %.lr.ph.us.us.us.us, !llvm.loop !57

._crit_edge644.split.us.us.us.us:                 ; preds = %._crit_edge641.us.us.us.us
  %indvars.iv.next929 = add nsw i64 %indvars.iv928, 1
  %lftr.wideiv931 = trunc i64 %indvars.iv.next929 to i32
  %exitcond932.not = icmp eq i32 %indvars.iv878, %lftr.wideiv931
  br i1 %exitcond932.not, label %..loopexit607_crit_edge.us, label %.preheader601.us.us.us, !llvm.loop !58

.preheader606:                                    ; preds = %.lr.ph.split, %.preheader606
  %.3650 = phi i32 [ %310, %.preheader606 ], [ %5, %.lr.ph.split ]
  %310 = add i32 %.3650, %9
  %.not550 = icmp sgt i32 %310, %28
  br i1 %.not550, label %._crit_edge657, label %.preheader606, !llvm.loop !16

._crit_edge657:                                   ; preds = %.preheader614.us, %..loopexit615_crit_edge.us.us, %.preheader612.us, %..loopexit613_crit_edge.us.us, %.preheader610.us, %..loopexit611_crit_edge.us.us, %.preheader608.us, %..loopexit609_crit_edge.us.us, %.preheader606, %..loopexit607_crit_edge.us
  %.us-phi663 = phi i32 [ %268, %..loopexit607_crit_edge.us ], [ %310, %.preheader606 ], [ %113, %..loopexit609_crit_edge.us.us ], [ %150, %.preheader608.us ], [ %159, %..loopexit611_crit_edge.us.us ], [ %196, %.preheader610.us ], [ %205, %..loopexit613_crit_edge.us.us ], [ %242, %.preheader612.us ], [ %244, %..loopexit615_crit_edge.us.us ], [ %266, %.preheader614.us ]
  %.not549 = icmp sgt i32 %103, %21
  %indvars.iv.next879 = add i32 %indvars.iv878, %10
  br i1 %.not549, label %.loopexit618, label %.preheader616, !llvm.loop !59

.loopexit618:                                     ; preds = %._crit_edge, %._crit_edge657, %.preheader616.lr.ph, %.preheader619.lr.ph, %.preheader620, %.preheader617
  %.4 = phi i32 [ %5, %.preheader620 ], [ %5, %.preheader617 ], [ %5, %.preheader619.lr.ph ], [ %5, %.preheader616.lr.ph ], [ %.us-phi663, %._crit_edge657 ], [ %91, %._crit_edge ]
  %.not552737 = icmp slt i32 %21, %7
  br i1 %.not552737, label %.preheader585, label %.lr.ph

.lr.ph:                                           ; preds = %.loopexit618
  %311 = add i32 %2, -2
  %312 = call i32 @llvm.fshl.i32(i32 %311, i32 %311, i32 31)
  %313 = icmp sge i32 %.4, %6
  %314 = zext i32 %3 to i64
  %315 = zext i32 %4 to i64
  %316 = zext i32 %2 to i64
  %sext555 = shl i32 %2, 24
  %317 = ashr exact i32 %sext555, 24
  %318 = icmp sgt i32 %317, 0
  %319 = sext i32 %.4 to i64
  %320 = add i32 %10, %7
  %wide.trip.count = sext i32 %6 to i64
  %wide.trip.count949 = sext i32 %6 to i64
  %wide.trip.count960 = sext i32 %6 to i64
  %wide.trip.count971 = sext i32 %6 to i64
  %wide.trip.count981 = sext i32 %6 to i64
  %321 = add i32 %10, -1
  %322 = zext i32 %321 to i64
  %323 = mul nuw i64 %315, %322
  %324 = shl i64 %323, 1
  %scevgep1254 = getelementptr i8, ptr %0, i64 %324
  %325 = mul nuw i64 %314, %322
  %326 = shl i64 %325, 1
  %scevgep1257 = getelementptr i8, ptr %1, i64 %326
  %327 = sub nsw i64 %wide.trip.count, %319
  %328 = add i32 %10, -1
  %329 = zext i32 %328 to i64
  %330 = mul nuw i64 %315, %329
  %331 = shl i64 %330, 2
  %scevgep1279 = getelementptr i8, ptr %0, i64 %331
  %332 = mul nuw i64 %314, %329
  %333 = shl i64 %332, 2
  %scevgep1282 = getelementptr i8, ptr %1, i64 %333
  %334 = sub nsw i64 %wide.trip.count, %319
  %335 = add i32 %10, -1
  %336 = zext i32 %335 to i64
  %337 = mul nuw i64 %315, %336
  %338 = shl i64 %337, 3
  %scevgep1304 = getelementptr i8, ptr %0, i64 %338
  %339 = mul nuw i64 %314, %336
  %340 = shl i64 %339, 3
  %scevgep1307 = getelementptr i8, ptr %1, i64 %340
  %341 = sub nsw i64 %wide.trip.count, %319
  %342 = sub nsw i64 %wide.trip.count, %319
  %xtraiter1517 = and i64 %342, 1
  %lcmp.mod1518.not = icmp eq i64 %xtraiter1517, 0
  %indvars.iv.next935.prol = add nsw i64 %319, 1
  %343 = add nsw i64 %wide.trip.count, -1
  %344 = icmp eq i64 %343, %319
  %min.iters.check1314 = icmp ult i64 %341, 4
  %n.vec1317 = and i64 %341, -4
  %ind.end1318 = add nsw i64 %n.vec1317, %319
  %cmp.n1326 = icmp eq i64 %341, %n.vec1317
  %345 = add nsw i64 %wide.trip.count, -1
  %min.iters.check1289 = icmp ult i64 %334, 8
  %n.vec1292 = and i64 %334, -8
  %ind.end1293 = add nsw i64 %n.vec1292, %319
  %cmp.n1301 = icmp eq i64 %334, %n.vec1292
  %346 = add nsw i64 %wide.trip.count, -1
  %min.iters.check1264 = icmp ult i64 %327, 16
  %n.vec1267 = and i64 %327, -16
  %ind.end1268 = add nsw i64 %n.vec1267, %319
  %cmp.n1276 = icmp eq i64 %327, %n.vec1267
  %347 = add nsw i64 %wide.trip.count, -1
  br label %414

.preheader585:                                    ; preds = %.loopexit592, %.loopexit618
  %.2.lcssa = phi i32 [ %7, %.loopexit618 ], [ %449, %.loopexit592 ]
  %348 = sub nsw i32 %6, %9
  %349 = icmp sgt i32 %348, %5
  %350 = add i32 %2, -2
  %351 = call i32 @llvm.fshl.i32(i32 %350, i32 %350, i32 31)
  br i1 %349, label %.lr.ph781, label %._crit_edge782

.lr.ph781:                                        ; preds = %.preheader585
  %352 = icmp slt i32 %.2.lcssa, %8
  %353 = zext i32 %3 to i64
  %354 = zext i32 %4 to i64
  %355 = zext i32 %2 to i64
  %sext554 = shl i32 %2, 24
  %356 = ashr exact i32 %sext554, 24
  %357 = icmp sgt i32 %356, 0
  %358 = add i32 %9, %5
  %359 = sext i32 %.2.lcssa to i64
  %wide.trip.count999 = sext i32 %8 to i64
  %wide.trip.count1010 = sext i32 %8 to i64
  %wide.trip.count1021 = sext i32 %8 to i64
  %wide.trip.count1032 = sext i32 %8 to i64
  %wide.trip.count1042 = sext i32 %8 to i64
  %360 = mul nsw i64 %359, %354
  %361 = xor i64 %359, -1
  %362 = add nsw i64 %361, %wide.trip.count999
  %363 = mul i64 %362, %354
  %364 = add i32 %9, -1
  %365 = zext i32 %364 to i64
  %366 = add i64 %363, %365
  %367 = shl i64 %366, 1
  %368 = getelementptr i8, ptr %0, i64 %367
  %scevgep1329 = getelementptr i8, ptr %368, i64 2
  %369 = mul nsw i64 %359, %353
  %370 = mul i64 %362, %353
  %371 = add i64 %370, %365
  %372 = shl i64 %371, 1
  %373 = getelementptr i8, ptr %1, i64 %372
  %scevgep1332 = getelementptr i8, ptr %373, i64 2
  %374 = add i32 %9, -1
  %375 = zext i32 %374 to i64
  %376 = add nuw nsw i64 %375, 1
  %377 = mul nsw i64 %359, %354
  %378 = xor i64 %359, -1
  %379 = add nsw i64 %378, %wide.trip.count999
  %380 = mul i64 %379, %354
  %381 = add i32 %9, -1
  %382 = zext i32 %381 to i64
  %383 = add i64 %380, %382
  %384 = shl i64 %383, 2
  %385 = getelementptr i8, ptr %0, i64 %384
  %scevgep1354 = getelementptr i8, ptr %385, i64 4
  %386 = mul nsw i64 %359, %353
  %387 = mul i64 %379, %353
  %388 = add i64 %387, %382
  %389 = shl i64 %388, 2
  %390 = getelementptr i8, ptr %1, i64 %389
  %scevgep1357 = getelementptr i8, ptr %390, i64 4
  %391 = add i32 %9, -1
  %392 = zext i32 %391 to i64
  %393 = add nuw nsw i64 %392, 1
  %394 = mul nsw i64 %359, %354
  %395 = xor i64 %359, -1
  %396 = add nsw i64 %395, %wide.trip.count999
  %397 = mul i64 %396, %354
  %398 = add i32 %9, -1
  %399 = zext i32 %398 to i64
  %400 = add i64 %397, %399
  %401 = shl i64 %400, 3
  %402 = getelementptr i8, ptr %0, i64 %401
  %scevgep1379 = getelementptr i8, ptr %402, i64 8
  %403 = mul nsw i64 %359, %353
  %404 = mul i64 %396, %353
  %405 = add i64 %404, %399
  %406 = shl i64 %405, 3
  %407 = getelementptr i8, ptr %1, i64 %406
  %scevgep1382 = getelementptr i8, ptr %407, i64 8
  %408 = add i32 %9, -1
  %409 = zext i32 %408 to i64
  %410 = add nuw nsw i64 %409, 1
  %411 = add i32 %9, %5
  %412 = add i32 %411, -1
  %xtraiter1527 = and i32 %9, 1
  %lcmp.mod1528.not = icmp eq i32 %xtraiter1527, 0
  %413 = icmp eq i32 %364, 0
  %min.iters.check1389 = icmp ult i32 %408, 3
  %n.vec1392 = and i64 %410, 8589934588
  %cmp.n1401 = icmp eq i64 %410, %n.vec1392
  %min.iters.check1364 = icmp ult i32 %391, 7
  %n.vec1367 = and i64 %393, 8589934584
  %cmp.n1376 = icmp eq i64 %393, %n.vec1367
  %min.iters.check1339 = icmp ult i32 %374, 15
  %n.vec1342 = and i64 %376, 8589934576
  %cmp.n1351 = icmp eq i64 %376, %n.vec1342
  br label %613

414:                                              ; preds = %.lr.ph, %.loopexit592
  %indvars.iv941 = phi i32 [ %320, %.lr.ph ], [ %indvars.iv.next942, %.loopexit592 ]
  %.2738 = phi i32 [ %7, %.lr.ph ], [ %449, %.loopexit592 ]
  %415 = sext i32 %.2738 to i64
  %416 = mul nsw i64 %315, %415
  %417 = add i64 %416, %319
  %418 = shl i64 %417, 3
  %scevgep1303 = getelementptr i8, ptr %0, i64 %418
  %419 = add i64 %416, %wide.trip.count
  %420 = shl i64 %419, 3
  %scevgep1305 = getelementptr i8, ptr %scevgep1304, i64 %420
  %421 = mul nsw i64 %314, %415
  %422 = add i64 %421, %319
  %423 = shl i64 %422, 3
  %scevgep1306 = getelementptr i8, ptr %1, i64 %423
  %424 = add i64 %421, %wide.trip.count
  %425 = shl i64 %424, 3
  %scevgep1308 = getelementptr i8, ptr %scevgep1307, i64 %425
  %426 = sext i32 %.2738 to i64
  %427 = mul nsw i64 %315, %426
  %428 = add i64 %427, %319
  %429 = shl i64 %428, 2
  %scevgep1278 = getelementptr i8, ptr %0, i64 %429
  %430 = add i64 %427, %wide.trip.count
  %431 = shl i64 %430, 2
  %scevgep1280 = getelementptr i8, ptr %scevgep1279, i64 %431
  %432 = mul nsw i64 %314, %426
  %433 = add i64 %432, %319
  %434 = shl i64 %433, 2
  %scevgep1281 = getelementptr i8, ptr %1, i64 %434
  %435 = add i64 %432, %wide.trip.count
  %436 = shl i64 %435, 2
  %scevgep1283 = getelementptr i8, ptr %scevgep1282, i64 %436
  %437 = sext i32 %.2738 to i64
  %438 = mul nsw i64 %315, %437
  %439 = add i64 %438, %319
  %440 = shl i64 %439, 1
  %scevgep1253 = getelementptr i8, ptr %0, i64 %440
  %441 = add i64 %438, %wide.trip.count
  %442 = shl i64 %441, 1
  %scevgep1255 = getelementptr i8, ptr %scevgep1254, i64 %442
  %443 = mul nsw i64 %314, %437
  %444 = add i64 %443, %319
  %445 = shl i64 %444, 1
  %scevgep1256 = getelementptr i8, ptr %1, i64 %445
  %446 = add i64 %443, %wide.trip.count
  %447 = shl i64 %446, 1
  %scevgep1258 = getelementptr i8, ptr %scevgep1257, i64 %447
  %448 = sext i32 %.2738 to i64
  %449 = add i32 %.2738, %10
  %450 = icmp sge i32 %.2738, %449
  %brmerge1151 = or i1 %450, %313
  switch i32 %312, label %.preheader591 [
    i32 0, label %.preheader593
    i32 1, label %.preheader595
    i32 3, label %.preheader597
    i32 7, label %.preheader599
  ]

.preheader599:                                    ; preds = %414
  br i1 %brmerge1151, label %.loopexit592, label %.preheader590.us

.preheader590.us:                                 ; preds = %.preheader599, %._crit_edge716.us
  %indvars.iv938 = phi i64 [ %indvars.iv.next939, %._crit_edge716.us ], [ %448, %.preheader599 ]
  %451 = mul nsw i64 %indvars.iv938, %314
  %452 = mul nsw i64 %indvars.iv938, %315
  br i1 %lcmp.mod1518.not, label %.prol.loopexit1516, label %.prol.loopexit1516.unr-lcssa

.prol.loopexit1516.unr-lcssa:                     ; preds = %.preheader590.us
  %453 = add nsw i64 %451, %319
  %454 = shl i64 %453, 4
  %455 = getelementptr inbounds i8, ptr %1, i64 %454
  %456 = add nsw i64 %452, %319
  %457 = shl i64 %456, 4
  %458 = getelementptr inbounds i8, ptr %0, i64 %457
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %458, ptr noundef nonnull align 8 dereferenceable(16) %455, i64 16, i1 false), !tbaa.struct !49
  br label %.prol.loopexit1516

.prol.loopexit1516:                               ; preds = %.prol.loopexit1516.unr-lcssa, %.preheader590.us
  %indvars.iv934.unr = phi i64 [ %319, %.preheader590.us ], [ %indvars.iv.next935.prol, %.prol.loopexit1516.unr-lcssa ]
  br i1 %344, label %._crit_edge716.us, label %.preheader590.us.new

.preheader590.us.new:                             ; preds = %.prol.loopexit1516, %.preheader590.us.new
  %indvars.iv934 = phi i64 [ %indvars.iv.next935.1, %.preheader590.us.new ], [ %indvars.iv934.unr, %.prol.loopexit1516 ]
  %459 = add nsw i64 %451, %indvars.iv934
  %460 = shl i64 %459, 4
  %461 = getelementptr inbounds i8, ptr %1, i64 %460
  %462 = add nsw i64 %452, %indvars.iv934
  %463 = shl i64 %462, 4
  %464 = getelementptr inbounds i8, ptr %0, i64 %463
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %464, ptr noundef nonnull align 8 dereferenceable(16) %461, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next935 = add nsw i64 %indvars.iv934, 1
  %465 = add nsw i64 %451, %indvars.iv.next935
  %466 = shl i64 %465, 4
  %467 = getelementptr inbounds i8, ptr %1, i64 %466
  %468 = add nsw i64 %452, %indvars.iv.next935
  %469 = shl i64 %468, 4
  %470 = getelementptr inbounds i8, ptr %0, i64 %469
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %470, ptr noundef nonnull align 8 dereferenceable(16) %467, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next935.1 = add nsw i64 %indvars.iv934, 2
  %exitcond937.not.1 = icmp eq i64 %indvars.iv.next935.1, %wide.trip.count
  br i1 %exitcond937.not.1, label %._crit_edge716.us, label %.preheader590.us.new, !llvm.loop !60

._crit_edge716.us:                                ; preds = %.preheader590.us.new, %.prol.loopexit1516
  %indvars.iv.next939 = add nsw i64 %indvars.iv938, 1
  %lftr.wideiv943 = trunc i64 %indvars.iv.next939 to i32
  %exitcond944.not = icmp eq i32 %indvars.iv941, %lftr.wideiv943
  br i1 %exitcond944.not, label %.loopexit592, label %.preheader590.us, !llvm.loop !61

.preheader597:                                    ; preds = %414
  br i1 %brmerge1151, label %.loopexit592, label %.preheader589.us.preheader

.preheader589.us.preheader:                       ; preds = %.preheader597
  %bound01309 = icmp ult ptr %scevgep1303, %scevgep1308
  %bound11310 = icmp ult ptr %scevgep1306, %scevgep1305
  %found.conflict1311 = and i1 %bound01309, %bound11310
  br label %.preheader589.us

.preheader589.us:                                 ; preds = %.preheader589.us.preheader, %._crit_edge719.us
  %indvars.iv951 = phi i64 [ %indvars.iv.next952, %._crit_edge719.us ], [ %448, %.preheader589.us.preheader ]
  %471 = mul nsw i64 %indvars.iv951, %314
  %472 = mul nsw i64 %indvars.iv951, %315
  %brmerge1562 = select i1 %min.iters.check1314, i1 true, i1 %found.conflict1311
  br i1 %brmerge1562, label %scalar.ph1313.preheader, label %vector.body1320

vector.body1320:                                  ; preds = %.preheader589.us, %vector.body1320
  %index1321 = phi i64 [ %index.next1325, %vector.body1320 ], [ 0, %.preheader589.us ]
  %offset.idx1322 = add i64 %index1321, %319
  %473 = add nsw i64 %471, %offset.idx1322
  %474 = shl i64 %473, 3
  %475 = getelementptr inbounds i8, ptr %1, i64 %474
  %476 = add nsw i64 %472, %offset.idx1322
  %477 = shl i64 %476, 3
  %478 = getelementptr inbounds i8, ptr %0, i64 %477
  %479 = getelementptr inbounds i8, ptr %475, i64 16
  %wide.load1323 = load <2 x double>, ptr %475, align 8, !tbaa !39, !alias.scope !62
  %wide.load1324 = load <2 x double>, ptr %479, align 8, !tbaa !39, !alias.scope !62
  %480 = getelementptr inbounds i8, ptr %478, i64 16
  store <2 x double> %wide.load1323, ptr %478, align 8, !tbaa !39, !alias.scope !65, !noalias !62
  store <2 x double> %wide.load1324, ptr %480, align 8, !tbaa !39, !alias.scope !65, !noalias !62
  %index.next1325 = add nuw i64 %index1321, 4
  %481 = icmp eq i64 %index.next1325, %n.vec1317
  br i1 %481, label %middle.block1312, label %vector.body1320, !llvm.loop !67

middle.block1312:                                 ; preds = %vector.body1320
  br i1 %cmp.n1326, label %._crit_edge719.us, label %scalar.ph1313.preheader

scalar.ph1313.preheader:                          ; preds = %.preheader589.us, %middle.block1312
  %indvars.iv946.ph = phi i64 [ %319, %.preheader589.us ], [ %ind.end1318, %middle.block1312 ]
  %482 = sub nsw i64 %wide.trip.count, %indvars.iv946.ph
  %xtraiter1519 = and i64 %482, 1
  %lcmp.mod1520.not = icmp eq i64 %xtraiter1519, 0
  br i1 %lcmp.mod1520.not, label %scalar.ph1313.prol.loopexit, label %scalar.ph1313.prol

scalar.ph1313.prol:                               ; preds = %scalar.ph1313.preheader
  %483 = add nsw i64 %471, %indvars.iv946.ph
  %484 = shl i64 %483, 3
  %485 = getelementptr inbounds i8, ptr %1, i64 %484
  %486 = add nsw i64 %472, %indvars.iv946.ph
  %487 = shl i64 %486, 3
  %488 = getelementptr inbounds i8, ptr %0, i64 %487
  %489 = load double, ptr %485, align 8, !tbaa !39
  store double %489, ptr %488, align 8, !tbaa !39
  %indvars.iv.next947.prol = add nsw i64 %indvars.iv946.ph, 1
  br label %scalar.ph1313.prol.loopexit

scalar.ph1313.prol.loopexit:                      ; preds = %scalar.ph1313.prol, %scalar.ph1313.preheader
  %indvars.iv946.unr = phi i64 [ %indvars.iv946.ph, %scalar.ph1313.preheader ], [ %indvars.iv.next947.prol, %scalar.ph1313.prol ]
  %490 = icmp eq i64 %indvars.iv946.ph, %345
  br i1 %490, label %._crit_edge719.us, label %scalar.ph1313

scalar.ph1313:                                    ; preds = %scalar.ph1313.prol.loopexit, %scalar.ph1313
  %indvars.iv946 = phi i64 [ %indvars.iv.next947.1, %scalar.ph1313 ], [ %indvars.iv946.unr, %scalar.ph1313.prol.loopexit ]
  %491 = add nsw i64 %471, %indvars.iv946
  %492 = shl i64 %491, 3
  %493 = getelementptr inbounds i8, ptr %1, i64 %492
  %494 = add nsw i64 %472, %indvars.iv946
  %495 = shl i64 %494, 3
  %496 = getelementptr inbounds i8, ptr %0, i64 %495
  %497 = load double, ptr %493, align 8, !tbaa !39
  store double %497, ptr %496, align 8, !tbaa !39
  %indvars.iv.next947 = add nsw i64 %indvars.iv946, 1
  %498 = add nsw i64 %471, %indvars.iv.next947
  %499 = shl i64 %498, 3
  %500 = getelementptr inbounds i8, ptr %1, i64 %499
  %501 = add nsw i64 %472, %indvars.iv.next947
  %502 = shl i64 %501, 3
  %503 = getelementptr inbounds i8, ptr %0, i64 %502
  %504 = load double, ptr %500, align 8, !tbaa !39
  store double %504, ptr %503, align 8, !tbaa !39
  %indvars.iv.next947.1 = add nsw i64 %indvars.iv946, 2
  %exitcond950.not.1 = icmp eq i64 %indvars.iv.next947.1, %wide.trip.count949
  br i1 %exitcond950.not.1, label %._crit_edge719.us, label %scalar.ph1313, !llvm.loop !68

._crit_edge719.us:                                ; preds = %scalar.ph1313.prol.loopexit, %scalar.ph1313, %middle.block1312
  %indvars.iv.next952 = add nsw i64 %indvars.iv951, 1
  %lftr.wideiv954 = trunc i64 %indvars.iv.next952 to i32
  %exitcond955.not = icmp eq i32 %indvars.iv941, %lftr.wideiv954
  br i1 %exitcond955.not, label %.loopexit592, label %.preheader589.us, !llvm.loop !69

.preheader595:                                    ; preds = %414
  br i1 %brmerge1151, label %.loopexit592, label %.preheader588.us.preheader

.preheader588.us.preheader:                       ; preds = %.preheader595
  %bound01284 = icmp ult ptr %scevgep1278, %scevgep1283
  %bound11285 = icmp ult ptr %scevgep1281, %scevgep1280
  %found.conflict1286 = and i1 %bound01284, %bound11285
  br label %.preheader588.us

.preheader588.us:                                 ; preds = %.preheader588.us.preheader, %._crit_edge722.us
  %indvars.iv962 = phi i64 [ %indvars.iv.next963, %._crit_edge722.us ], [ %448, %.preheader588.us.preheader ]
  %505 = mul nsw i64 %indvars.iv962, %314
  %506 = mul nsw i64 %indvars.iv962, %315
  %brmerge1563 = select i1 %min.iters.check1289, i1 true, i1 %found.conflict1286
  br i1 %brmerge1563, label %scalar.ph1288.preheader, label %vector.body1295

vector.body1295:                                  ; preds = %.preheader588.us, %vector.body1295
  %index1296 = phi i64 [ %index.next1300, %vector.body1295 ], [ 0, %.preheader588.us ]
  %offset.idx1297 = add i64 %index1296, %319
  %507 = add nsw i64 %505, %offset.idx1297
  %508 = shl i64 %507, 2
  %509 = getelementptr inbounds i8, ptr %1, i64 %508
  %510 = add nsw i64 %506, %offset.idx1297
  %511 = shl i64 %510, 2
  %512 = getelementptr inbounds i8, ptr %0, i64 %511
  %513 = getelementptr inbounds i8, ptr %509, i64 16
  %wide.load1298 = load <4 x float>, ptr %509, align 4, !tbaa !29, !alias.scope !70
  %wide.load1299 = load <4 x float>, ptr %513, align 4, !tbaa !29, !alias.scope !70
  %514 = getelementptr inbounds i8, ptr %512, i64 16
  store <4 x float> %wide.load1298, ptr %512, align 4, !tbaa !29, !alias.scope !73, !noalias !70
  store <4 x float> %wide.load1299, ptr %514, align 4, !tbaa !29, !alias.scope !73, !noalias !70
  %index.next1300 = add nuw i64 %index1296, 8
  %515 = icmp eq i64 %index.next1300, %n.vec1292
  br i1 %515, label %middle.block1287, label %vector.body1295, !llvm.loop !75

middle.block1287:                                 ; preds = %vector.body1295
  br i1 %cmp.n1301, label %._crit_edge722.us, label %scalar.ph1288.preheader

scalar.ph1288.preheader:                          ; preds = %.preheader588.us, %middle.block1287
  %indvars.iv957.ph = phi i64 [ %319, %.preheader588.us ], [ %ind.end1293, %middle.block1287 ]
  %516 = sub nsw i64 %wide.trip.count, %indvars.iv957.ph
  %xtraiter1521 = and i64 %516, 1
  %lcmp.mod1522.not = icmp eq i64 %xtraiter1521, 0
  br i1 %lcmp.mod1522.not, label %scalar.ph1288.prol.loopexit, label %scalar.ph1288.prol

scalar.ph1288.prol:                               ; preds = %scalar.ph1288.preheader
  %517 = add nsw i64 %505, %indvars.iv957.ph
  %518 = shl i64 %517, 2
  %519 = getelementptr inbounds i8, ptr %1, i64 %518
  %520 = add nsw i64 %506, %indvars.iv957.ph
  %521 = shl i64 %520, 2
  %522 = getelementptr inbounds i8, ptr %0, i64 %521
  %523 = load float, ptr %519, align 4, !tbaa !29
  store float %523, ptr %522, align 4, !tbaa !29
  %indvars.iv.next958.prol = add nsw i64 %indvars.iv957.ph, 1
  br label %scalar.ph1288.prol.loopexit

scalar.ph1288.prol.loopexit:                      ; preds = %scalar.ph1288.prol, %scalar.ph1288.preheader
  %indvars.iv957.unr = phi i64 [ %indvars.iv957.ph, %scalar.ph1288.preheader ], [ %indvars.iv.next958.prol, %scalar.ph1288.prol ]
  %524 = icmp eq i64 %indvars.iv957.ph, %346
  br i1 %524, label %._crit_edge722.us, label %scalar.ph1288

scalar.ph1288:                                    ; preds = %scalar.ph1288.prol.loopexit, %scalar.ph1288
  %indvars.iv957 = phi i64 [ %indvars.iv.next958.1, %scalar.ph1288 ], [ %indvars.iv957.unr, %scalar.ph1288.prol.loopexit ]
  %525 = add nsw i64 %505, %indvars.iv957
  %526 = shl i64 %525, 2
  %527 = getelementptr inbounds i8, ptr %1, i64 %526
  %528 = add nsw i64 %506, %indvars.iv957
  %529 = shl i64 %528, 2
  %530 = getelementptr inbounds i8, ptr %0, i64 %529
  %531 = load float, ptr %527, align 4, !tbaa !29
  store float %531, ptr %530, align 4, !tbaa !29
  %indvars.iv.next958 = add nsw i64 %indvars.iv957, 1
  %532 = add nsw i64 %505, %indvars.iv.next958
  %533 = shl i64 %532, 2
  %534 = getelementptr inbounds i8, ptr %1, i64 %533
  %535 = add nsw i64 %506, %indvars.iv.next958
  %536 = shl i64 %535, 2
  %537 = getelementptr inbounds i8, ptr %0, i64 %536
  %538 = load float, ptr %534, align 4, !tbaa !29
  store float %538, ptr %537, align 4, !tbaa !29
  %indvars.iv.next958.1 = add nsw i64 %indvars.iv957, 2
  %exitcond961.not.1 = icmp eq i64 %indvars.iv.next958.1, %wide.trip.count960
  br i1 %exitcond961.not.1, label %._crit_edge722.us, label %scalar.ph1288, !llvm.loop !76

._crit_edge722.us:                                ; preds = %scalar.ph1288.prol.loopexit, %scalar.ph1288, %middle.block1287
  %indvars.iv.next963 = add nsw i64 %indvars.iv962, 1
  %lftr.wideiv965 = trunc i64 %indvars.iv.next963 to i32
  %exitcond966.not = icmp eq i32 %indvars.iv941, %lftr.wideiv965
  br i1 %exitcond966.not, label %.loopexit592, label %.preheader588.us, !llvm.loop !77

.preheader593:                                    ; preds = %414
  br i1 %brmerge1151, label %.loopexit592, label %.preheader587.us.preheader

.preheader587.us.preheader:                       ; preds = %.preheader593
  %bound01259 = icmp ult ptr %scevgep1253, %scevgep1258
  %bound11260 = icmp ult ptr %scevgep1256, %scevgep1255
  %found.conflict1261 = and i1 %bound01259, %bound11260
  br label %.preheader587.us

.preheader587.us:                                 ; preds = %.preheader587.us.preheader, %._crit_edge725.us
  %indvars.iv973 = phi i64 [ %indvars.iv.next974, %._crit_edge725.us ], [ %448, %.preheader587.us.preheader ]
  %539 = mul nsw i64 %indvars.iv973, %314
  %540 = mul nsw i64 %indvars.iv973, %315
  %brmerge1564 = select i1 %min.iters.check1264, i1 true, i1 %found.conflict1261
  br i1 %brmerge1564, label %scalar.ph1263.preheader, label %vector.body1270

vector.body1270:                                  ; preds = %.preheader587.us, %vector.body1270
  %index1271 = phi i64 [ %index.next1275, %vector.body1270 ], [ 0, %.preheader587.us ]
  %offset.idx1272 = add i64 %index1271, %319
  %541 = add nsw i64 %539, %offset.idx1272
  %542 = shl i64 %541, 1
  %543 = getelementptr inbounds i8, ptr %1, i64 %542
  %544 = add nsw i64 %540, %offset.idx1272
  %545 = shl i64 %544, 1
  %546 = getelementptr inbounds i8, ptr %0, i64 %545
  %547 = getelementptr inbounds i8, ptr %543, i64 16
  %wide.load1273 = load <8 x i16>, ptr %543, align 2, !tbaa !17, !alias.scope !78
  %wide.load1274 = load <8 x i16>, ptr %547, align 2, !tbaa !17, !alias.scope !78
  %548 = getelementptr inbounds i8, ptr %546, i64 16
  store <8 x i16> %wide.load1273, ptr %546, align 2, !tbaa !17, !alias.scope !81, !noalias !78
  store <8 x i16> %wide.load1274, ptr %548, align 2, !tbaa !17, !alias.scope !81, !noalias !78
  %index.next1275 = add nuw i64 %index1271, 16
  %549 = icmp eq i64 %index.next1275, %n.vec1267
  br i1 %549, label %middle.block1262, label %vector.body1270, !llvm.loop !83

middle.block1262:                                 ; preds = %vector.body1270
  br i1 %cmp.n1276, label %._crit_edge725.us, label %scalar.ph1263.preheader

scalar.ph1263.preheader:                          ; preds = %.preheader587.us, %middle.block1262
  %indvars.iv968.ph = phi i64 [ %319, %.preheader587.us ], [ %ind.end1268, %middle.block1262 ]
  %550 = sub nsw i64 %wide.trip.count, %indvars.iv968.ph
  %xtraiter1523 = and i64 %550, 1
  %lcmp.mod1524.not = icmp eq i64 %xtraiter1523, 0
  br i1 %lcmp.mod1524.not, label %scalar.ph1263.prol.loopexit, label %scalar.ph1263.prol

scalar.ph1263.prol:                               ; preds = %scalar.ph1263.preheader
  %551 = add nsw i64 %539, %indvars.iv968.ph
  %552 = shl i64 %551, 1
  %553 = getelementptr inbounds i8, ptr %1, i64 %552
  %554 = add nsw i64 %540, %indvars.iv968.ph
  %555 = shl i64 %554, 1
  %556 = getelementptr inbounds i8, ptr %0, i64 %555
  %557 = load i16, ptr %553, align 2, !tbaa !17
  store i16 %557, ptr %556, align 2, !tbaa !17
  %indvars.iv.next969.prol = add nsw i64 %indvars.iv968.ph, 1
  br label %scalar.ph1263.prol.loopexit

scalar.ph1263.prol.loopexit:                      ; preds = %scalar.ph1263.prol, %scalar.ph1263.preheader
  %indvars.iv968.unr = phi i64 [ %indvars.iv968.ph, %scalar.ph1263.preheader ], [ %indvars.iv.next969.prol, %scalar.ph1263.prol ]
  %558 = icmp eq i64 %indvars.iv968.ph, %347
  br i1 %558, label %._crit_edge725.us, label %scalar.ph1263

scalar.ph1263:                                    ; preds = %scalar.ph1263.prol.loopexit, %scalar.ph1263
  %indvars.iv968 = phi i64 [ %indvars.iv.next969.1, %scalar.ph1263 ], [ %indvars.iv968.unr, %scalar.ph1263.prol.loopexit ]
  %559 = add nsw i64 %539, %indvars.iv968
  %560 = shl i64 %559, 1
  %561 = getelementptr inbounds i8, ptr %1, i64 %560
  %562 = add nsw i64 %540, %indvars.iv968
  %563 = shl i64 %562, 1
  %564 = getelementptr inbounds i8, ptr %0, i64 %563
  %565 = load i16, ptr %561, align 2, !tbaa !17
  store i16 %565, ptr %564, align 2, !tbaa !17
  %indvars.iv.next969 = add nsw i64 %indvars.iv968, 1
  %566 = add nsw i64 %539, %indvars.iv.next969
  %567 = shl i64 %566, 1
  %568 = getelementptr inbounds i8, ptr %1, i64 %567
  %569 = add nsw i64 %540, %indvars.iv.next969
  %570 = shl i64 %569, 1
  %571 = getelementptr inbounds i8, ptr %0, i64 %570
  %572 = load i16, ptr %568, align 2, !tbaa !17
  store i16 %572, ptr %571, align 2, !tbaa !17
  %indvars.iv.next969.1 = add nsw i64 %indvars.iv968, 2
  %exitcond972.not.1 = icmp eq i64 %indvars.iv.next969.1, %wide.trip.count971
  br i1 %exitcond972.not.1, label %._crit_edge725.us, label %scalar.ph1263, !llvm.loop !84

._crit_edge725.us:                                ; preds = %scalar.ph1263.prol.loopexit, %scalar.ph1263, %middle.block1262
  %indvars.iv.next974 = add nsw i64 %indvars.iv973, 1
  %lftr.wideiv976 = trunc i64 %indvars.iv.next974 to i32
  %exitcond977.not = icmp eq i32 %indvars.iv941, %lftr.wideiv976
  br i1 %exitcond977.not, label %.loopexit592, label %.preheader587.us, !llvm.loop !85

.preheader591:                                    ; preds = %414
  br i1 %brmerge1151, label %.loopexit592, label %.preheader586.us

.preheader586.us:                                 ; preds = %.preheader591, %._crit_edge732.us
  %indvars.iv983 = phi i64 [ %indvars.iv.next984, %._crit_edge732.us ], [ %448, %.preheader591 ]
  %573 = mul nsw i64 %indvars.iv983, %314
  %574 = mul nsw i64 %indvars.iv983, %315
  br i1 %318, label %.lr.ph.us.us, label %._crit_edge732.us

._crit_edge732.us:                                ; preds = %._crit_edge729.us.us, %.preheader586.us
  %indvars.iv.next984 = add nsw i64 %indvars.iv983, 1
  %lftr.wideiv986 = trunc i64 %indvars.iv.next984 to i32
  %exitcond987.not = icmp eq i32 %indvars.iv941, %lftr.wideiv986
  br i1 %exitcond987.not, label %.loopexit592, label %.preheader586.us, !llvm.loop !86

.lr.ph.us.us:                                     ; preds = %.preheader586.us, %._crit_edge729.us.us
  %indvars.iv978 = phi i64 [ %indvars.iv.next979, %._crit_edge729.us.us ], [ %319, %.preheader586.us ]
  %575 = add nsw i64 %573, %indvars.iv978
  %576 = mul i64 %575, %316
  %577 = getelementptr inbounds i8, ptr %1, i64 %576
  %578 = add nsw i64 %574, %indvars.iv978
  %579 = mul i64 %578, %316
  %580 = getelementptr inbounds i8, ptr %0, i64 %579
  br label %581

581:                                              ; preds = %605, %.lr.ph.us.us
  %.0538727.us.us = phi i8 [ 0, %.lr.ph.us.us ], [ %610, %605 ]
  %582 = zext nneg i8 %.0538727.us.us to i64
  %583 = getelementptr inbounds i8, ptr %577, i64 %582
  %584 = load i8, ptr %583, align 1, !tbaa !50
  %585 = getelementptr inbounds i8, ptr %580, i64 %582
  store i8 %584, ptr %585, align 1, !tbaa !50
  %586 = or disjoint i8 %.0538727.us.us, 1
  %587 = zext nneg i8 %586 to i32
  %588 = icmp sgt i32 %317, %587
  br i1 %588, label %589, label %._crit_edge729.us.us, !llvm.loop !87

589:                                              ; preds = %581
  %590 = zext nneg i8 %586 to i64
  %591 = getelementptr inbounds i8, ptr %577, i64 %590
  %592 = load i8, ptr %591, align 1, !tbaa !50
  %593 = getelementptr inbounds i8, ptr %580, i64 %590
  store i8 %592, ptr %593, align 1, !tbaa !50
  %594 = or disjoint i8 %.0538727.us.us, 2
  %595 = zext nneg i8 %594 to i32
  %596 = icmp ugt i32 %317, %595
  br i1 %596, label %597, label %._crit_edge729.us.us, !llvm.loop !87

597:                                              ; preds = %589
  %598 = zext nneg i8 %594 to i64
  %599 = getelementptr inbounds i8, ptr %577, i64 %598
  %600 = load i8, ptr %599, align 1, !tbaa !50
  %601 = getelementptr inbounds i8, ptr %580, i64 %598
  store i8 %600, ptr %601, align 1, !tbaa !50
  %602 = or disjoint i8 %.0538727.us.us, 3
  %603 = zext nneg i8 %602 to i32
  %604 = icmp ugt i32 %317, %603
  br i1 %604, label %605, label %._crit_edge729.us.us, !llvm.loop !87

605:                                              ; preds = %597
  %606 = zext nneg i8 %602 to i64
  %607 = getelementptr inbounds i8, ptr %577, i64 %606
  %608 = load i8, ptr %607, align 1, !tbaa !50
  %609 = getelementptr inbounds i8, ptr %580, i64 %606
  store i8 %608, ptr %609, align 1, !tbaa !50
  %610 = add nuw nsw i8 %.0538727.us.us, 4
  %611 = zext nneg i8 %610 to i32
  %612 = icmp ugt i32 %317, %611
  br i1 %612, label %581, label %._crit_edge729.us.us, !llvm.loop !88

._crit_edge729.us.us:                             ; preds = %605, %597, %589, %581
  %indvars.iv.next979 = add nsw i64 %indvars.iv978, 1
  %exitcond982.not = icmp eq i64 %indvars.iv.next979, %wide.trip.count981
  br i1 %exitcond982.not, label %._crit_edge732.us, label %.lr.ph.us.us, !llvm.loop !89

.loopexit592:                                     ; preds = %._crit_edge716.us, %._crit_edge719.us, %._crit_edge722.us, %._crit_edge725.us, %._crit_edge732.us, %.preheader591, %.preheader593, %.preheader595, %.preheader597, %.preheader599
  %.not552 = icmp sgt i32 %449, %21
  %indvars.iv.next942 = add i32 %indvars.iv941, %10
  br i1 %.not552, label %.preheader585, label %414, !llvm.loop !90

613:                                              ; preds = %.lr.ph781, %.loopexit576
  %indvar1529 = phi i32 [ 0, %.lr.ph781 ], [ %indvar.next1530, %.loopexit576 ]
  %indvars.iv992 = phi i32 [ %358, %.lr.ph781 ], [ %indvars.iv.next993, %.loopexit576 ]
  %.5774 = phi i32 [ %5, %.lr.ph781 ], [ %803, %.loopexit576 ]
  %614 = mul i32 %indvar1529, %9
  %615 = add i32 %412, %614
  %616 = mul i32 %indvar1529, %9
  %617 = add i32 %412, %616
  %618 = mul i32 %indvar1529, %9
  %619 = add i32 %412, %618
  %620 = sext i32 %.5774 to i64
  %621 = add i64 %394, %620
  %622 = shl i64 %621, 3
  %scevgep1378 = getelementptr i8, ptr %0, i64 %622
  %scevgep1380 = getelementptr i8, ptr %scevgep1379, i64 %622
  %623 = add i64 %403, %620
  %624 = shl i64 %623, 3
  %scevgep1381 = getelementptr i8, ptr %1, i64 %624
  %scevgep1383 = getelementptr i8, ptr %scevgep1382, i64 %624
  %625 = sext i32 %.5774 to i64
  %626 = add i64 %377, %625
  %627 = shl i64 %626, 2
  %scevgep1353 = getelementptr i8, ptr %0, i64 %627
  %scevgep1355 = getelementptr i8, ptr %scevgep1354, i64 %627
  %628 = add i64 %386, %625
  %629 = shl i64 %628, 2
  %scevgep1356 = getelementptr i8, ptr %1, i64 %629
  %scevgep1358 = getelementptr i8, ptr %scevgep1357, i64 %629
  %630 = sext i32 %.5774 to i64
  %631 = add i64 %360, %630
  %632 = shl i64 %631, 1
  %scevgep1328 = getelementptr i8, ptr %0, i64 %632
  %scevgep1330 = getelementptr i8, ptr %scevgep1329, i64 %632
  %633 = add i64 %369, %630
  %634 = shl i64 %633, 1
  %scevgep1331 = getelementptr i8, ptr %1, i64 %634
  %scevgep1333 = getelementptr i8, ptr %scevgep1332, i64 %634
  %635 = sext i32 %.5774 to i64
  %636 = add i32 %.5774, %9
  %637 = icmp slt i32 %.5774, %636
  %or.cond1161 = and i1 %352, %637
  switch i32 %351, label %.preheader575 [
    i32 0, label %.preheader577
    i32 1, label %.preheader579
    i32 3, label %.preheader581
    i32 7, label %.preheader583
  ]

.preheader583:                                    ; preds = %613
  br i1 %or.cond1161, label %.preheader574.us.preheader, label %.loopexit576

.preheader574.us.preheader:                       ; preds = %.preheader583
  %indvars.iv.next990.prol = add nsw i64 %635, 1
  br label %.preheader574.us

.preheader574.us:                                 ; preds = %.preheader574.us.preheader, %._crit_edge749.us
  %indvars.iv996 = phi i64 [ %indvars.iv.next997, %._crit_edge749.us ], [ %359, %.preheader574.us.preheader ]
  %638 = mul nsw i64 %indvars.iv996, %353
  %639 = mul nsw i64 %indvars.iv996, %354
  br i1 %lcmp.mod1528.not, label %.prol.loopexit1526, label %.prol.loopexit1526.unr-lcssa

.prol.loopexit1526.unr-lcssa:                     ; preds = %.preheader574.us
  %640 = add nsw i64 %638, %635
  %641 = shl i64 %640, 4
  %642 = getelementptr inbounds i8, ptr %1, i64 %641
  %643 = add nsw i64 %639, %635
  %644 = shl i64 %643, 4
  %645 = getelementptr inbounds i8, ptr %0, i64 %644
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %645, ptr noundef nonnull align 8 dereferenceable(16) %642, i64 16, i1 false), !tbaa.struct !49
  br label %.prol.loopexit1526

.prol.loopexit1526:                               ; preds = %.prol.loopexit1526.unr-lcssa, %.preheader574.us
  %indvars.iv989.unr = phi i64 [ %635, %.preheader574.us ], [ %indvars.iv.next990.prol, %.prol.loopexit1526.unr-lcssa ]
  br i1 %413, label %._crit_edge749.us, label %.preheader574.us.new

.preheader574.us.new:                             ; preds = %.prol.loopexit1526, %.preheader574.us.new
  %indvars.iv989 = phi i64 [ %indvars.iv.next990.1, %.preheader574.us.new ], [ %indvars.iv989.unr, %.prol.loopexit1526 ]
  %646 = add nsw i64 %638, %indvars.iv989
  %647 = shl i64 %646, 4
  %648 = getelementptr inbounds i8, ptr %1, i64 %647
  %649 = add nsw i64 %639, %indvars.iv989
  %650 = shl i64 %649, 4
  %651 = getelementptr inbounds i8, ptr %0, i64 %650
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %651, ptr noundef nonnull align 8 dereferenceable(16) %648, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next990 = add nsw i64 %indvars.iv989, 1
  %652 = add nsw i64 %638, %indvars.iv.next990
  %653 = shl i64 %652, 4
  %654 = getelementptr inbounds i8, ptr %1, i64 %653
  %655 = add nsw i64 %639, %indvars.iv.next990
  %656 = shl i64 %655, 4
  %657 = getelementptr inbounds i8, ptr %0, i64 %656
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %657, ptr noundef nonnull align 8 dereferenceable(16) %654, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next990.1 = add nsw i64 %indvars.iv989, 2
  %lftr.wideiv994.1 = trunc i64 %indvars.iv.next990.1 to i32
  %exitcond995.not.1 = icmp eq i32 %indvars.iv992, %lftr.wideiv994.1
  br i1 %exitcond995.not.1, label %._crit_edge749.us, label %.preheader574.us.new, !llvm.loop !91

._crit_edge749.us:                                ; preds = %.preheader574.us.new, %.prol.loopexit1526
  %indvars.iv.next997 = add nsw i64 %indvars.iv996, 1
  %exitcond1000.not = icmp eq i64 %indvars.iv.next997, %wide.trip.count999
  br i1 %exitcond1000.not, label %.loopexit576, label %.preheader574.us, !llvm.loop !92

.preheader581:                                    ; preds = %613
  br i1 %or.cond1161, label %.preheader573.us.preheader, label %.loopexit576

.preheader573.us.preheader:                       ; preds = %.preheader581
  %bound01384 = icmp ult ptr %scevgep1378, %scevgep1383
  %bound11385 = icmp ult ptr %scevgep1381, %scevgep1380
  %found.conflict1386 = and i1 %bound01384, %bound11385
  %ind.end1393 = add nsw i64 %n.vec1392, %635
  br label %.preheader573.us

.preheader573.us:                                 ; preds = %.preheader573.us.preheader, %._crit_edge753.us
  %indvars.iv1007 = phi i64 [ %indvars.iv.next1008, %._crit_edge753.us ], [ %359, %.preheader573.us.preheader ]
  %658 = mul nsw i64 %indvars.iv1007, %353
  %659 = mul nsw i64 %indvars.iv1007, %354
  %brmerge1565 = select i1 %min.iters.check1389, i1 true, i1 %found.conflict1386
  br i1 %brmerge1565, label %scalar.ph1388.preheader, label %vector.body1395

vector.body1395:                                  ; preds = %.preheader573.us, %vector.body1395
  %index1396 = phi i64 [ %index.next1400, %vector.body1395 ], [ 0, %.preheader573.us ]
  %offset.idx1397 = add i64 %index1396, %635
  %660 = add nsw i64 %658, %offset.idx1397
  %661 = shl i64 %660, 3
  %662 = getelementptr inbounds i8, ptr %1, i64 %661
  %663 = add nsw i64 %659, %offset.idx1397
  %664 = shl i64 %663, 3
  %665 = getelementptr inbounds i8, ptr %0, i64 %664
  %666 = getelementptr inbounds i8, ptr %662, i64 16
  %wide.load1398 = load <2 x double>, ptr %662, align 8, !tbaa !39, !alias.scope !93
  %wide.load1399 = load <2 x double>, ptr %666, align 8, !tbaa !39, !alias.scope !93
  %667 = getelementptr inbounds i8, ptr %665, i64 16
  store <2 x double> %wide.load1398, ptr %665, align 8, !tbaa !39, !alias.scope !96, !noalias !93
  store <2 x double> %wide.load1399, ptr %667, align 8, !tbaa !39, !alias.scope !96, !noalias !93
  %index.next1400 = add nuw i64 %index1396, 4
  %668 = icmp eq i64 %index.next1400, %n.vec1392
  br i1 %668, label %middle.block1387, label %vector.body1395, !llvm.loop !98

middle.block1387:                                 ; preds = %vector.body1395
  br i1 %cmp.n1401, label %._crit_edge753.us, label %scalar.ph1388.preheader

scalar.ph1388.preheader:                          ; preds = %.preheader573.us, %middle.block1387
  %indvars.iv1002.ph = phi i64 [ %635, %.preheader573.us ], [ %ind.end1393, %middle.block1387 ]
  %669 = trunc i64 %indvars.iv1002.ph to i32
  %670 = sub i32 %indvars.iv992, %669
  %xtraiter1531 = and i32 %670, 1
  %lcmp.mod1532.not = icmp eq i32 %xtraiter1531, 0
  br i1 %lcmp.mod1532.not, label %scalar.ph1388.prol.loopexit, label %scalar.ph1388.prol

scalar.ph1388.prol:                               ; preds = %scalar.ph1388.preheader
  %671 = add nsw i64 %658, %indvars.iv1002.ph
  %672 = shl i64 %671, 3
  %673 = getelementptr inbounds i8, ptr %1, i64 %672
  %674 = add nsw i64 %659, %indvars.iv1002.ph
  %675 = shl i64 %674, 3
  %676 = getelementptr inbounds i8, ptr %0, i64 %675
  %677 = load double, ptr %673, align 8, !tbaa !39
  store double %677, ptr %676, align 8, !tbaa !39
  %indvars.iv.next1003.prol = add nsw i64 %indvars.iv1002.ph, 1
  br label %scalar.ph1388.prol.loopexit

scalar.ph1388.prol.loopexit:                      ; preds = %scalar.ph1388.prol, %scalar.ph1388.preheader
  %indvars.iv1002.unr = phi i64 [ %indvars.iv1002.ph, %scalar.ph1388.preheader ], [ %indvars.iv.next1003.prol, %scalar.ph1388.prol ]
  %678 = icmp eq i32 %619, %669
  br i1 %678, label %._crit_edge753.us, label %scalar.ph1388

scalar.ph1388:                                    ; preds = %scalar.ph1388.prol.loopexit, %scalar.ph1388
  %indvars.iv1002 = phi i64 [ %indvars.iv.next1003.1, %scalar.ph1388 ], [ %indvars.iv1002.unr, %scalar.ph1388.prol.loopexit ]
  %679 = add nsw i64 %658, %indvars.iv1002
  %680 = shl i64 %679, 3
  %681 = getelementptr inbounds i8, ptr %1, i64 %680
  %682 = add nsw i64 %659, %indvars.iv1002
  %683 = shl i64 %682, 3
  %684 = getelementptr inbounds i8, ptr %0, i64 %683
  %685 = load double, ptr %681, align 8, !tbaa !39
  store double %685, ptr %684, align 8, !tbaa !39
  %indvars.iv.next1003 = add nsw i64 %indvars.iv1002, 1
  %686 = add nsw i64 %658, %indvars.iv.next1003
  %687 = shl i64 %686, 3
  %688 = getelementptr inbounds i8, ptr %1, i64 %687
  %689 = add nsw i64 %659, %indvars.iv.next1003
  %690 = shl i64 %689, 3
  %691 = getelementptr inbounds i8, ptr %0, i64 %690
  %692 = load double, ptr %688, align 8, !tbaa !39
  store double %692, ptr %691, align 8, !tbaa !39
  %indvars.iv.next1003.1 = add nsw i64 %indvars.iv1002, 2
  %lftr.wideiv1005.1 = trunc i64 %indvars.iv.next1003.1 to i32
  %exitcond1006.not.1 = icmp eq i32 %indvars.iv992, %lftr.wideiv1005.1
  br i1 %exitcond1006.not.1, label %._crit_edge753.us, label %scalar.ph1388, !llvm.loop !99

._crit_edge753.us:                                ; preds = %scalar.ph1388.prol.loopexit, %scalar.ph1388, %middle.block1387
  %indvars.iv.next1008 = add nsw i64 %indvars.iv1007, 1
  %exitcond1011.not = icmp eq i64 %indvars.iv.next1008, %wide.trip.count1010
  br i1 %exitcond1011.not, label %.loopexit576, label %.preheader573.us, !llvm.loop !100

.preheader579:                                    ; preds = %613
  br i1 %or.cond1161, label %.preheader572.us.preheader, label %.loopexit576

.preheader572.us.preheader:                       ; preds = %.preheader579
  %bound01359 = icmp ult ptr %scevgep1353, %scevgep1358
  %bound11360 = icmp ult ptr %scevgep1356, %scevgep1355
  %found.conflict1361 = and i1 %bound01359, %bound11360
  %ind.end1368 = add nsw i64 %n.vec1367, %635
  br label %.preheader572.us

.preheader572.us:                                 ; preds = %.preheader572.us.preheader, %._crit_edge757.us
  %indvars.iv1018 = phi i64 [ %indvars.iv.next1019, %._crit_edge757.us ], [ %359, %.preheader572.us.preheader ]
  %693 = mul nsw i64 %indvars.iv1018, %353
  %694 = mul nsw i64 %indvars.iv1018, %354
  %brmerge1566 = select i1 %min.iters.check1364, i1 true, i1 %found.conflict1361
  br i1 %brmerge1566, label %scalar.ph1363.preheader, label %vector.body1370

vector.body1370:                                  ; preds = %.preheader572.us, %vector.body1370
  %index1371 = phi i64 [ %index.next1375, %vector.body1370 ], [ 0, %.preheader572.us ]
  %offset.idx1372 = add i64 %index1371, %635
  %695 = add nsw i64 %693, %offset.idx1372
  %696 = shl i64 %695, 2
  %697 = getelementptr inbounds i8, ptr %1, i64 %696
  %698 = add nsw i64 %694, %offset.idx1372
  %699 = shl i64 %698, 2
  %700 = getelementptr inbounds i8, ptr %0, i64 %699
  %701 = getelementptr inbounds i8, ptr %697, i64 16
  %wide.load1373 = load <4 x float>, ptr %697, align 4, !tbaa !29, !alias.scope !101
  %wide.load1374 = load <4 x float>, ptr %701, align 4, !tbaa !29, !alias.scope !101
  %702 = getelementptr inbounds i8, ptr %700, i64 16
  store <4 x float> %wide.load1373, ptr %700, align 4, !tbaa !29, !alias.scope !104, !noalias !101
  store <4 x float> %wide.load1374, ptr %702, align 4, !tbaa !29, !alias.scope !104, !noalias !101
  %index.next1375 = add nuw i64 %index1371, 8
  %703 = icmp eq i64 %index.next1375, %n.vec1367
  br i1 %703, label %middle.block1362, label %vector.body1370, !llvm.loop !106

middle.block1362:                                 ; preds = %vector.body1370
  br i1 %cmp.n1376, label %._crit_edge757.us, label %scalar.ph1363.preheader

scalar.ph1363.preheader:                          ; preds = %.preheader572.us, %middle.block1362
  %indvars.iv1013.ph = phi i64 [ %635, %.preheader572.us ], [ %ind.end1368, %middle.block1362 ]
  %704 = trunc i64 %indvars.iv1013.ph to i32
  %705 = sub i32 %indvars.iv992, %704
  %xtraiter1533 = and i32 %705, 1
  %lcmp.mod1534.not = icmp eq i32 %xtraiter1533, 0
  br i1 %lcmp.mod1534.not, label %scalar.ph1363.prol.loopexit, label %scalar.ph1363.prol

scalar.ph1363.prol:                               ; preds = %scalar.ph1363.preheader
  %706 = add nsw i64 %693, %indvars.iv1013.ph
  %707 = shl i64 %706, 2
  %708 = getelementptr inbounds i8, ptr %1, i64 %707
  %709 = add nsw i64 %694, %indvars.iv1013.ph
  %710 = shl i64 %709, 2
  %711 = getelementptr inbounds i8, ptr %0, i64 %710
  %712 = load float, ptr %708, align 4, !tbaa !29
  store float %712, ptr %711, align 4, !tbaa !29
  %indvars.iv.next1014.prol = add nsw i64 %indvars.iv1013.ph, 1
  br label %scalar.ph1363.prol.loopexit

scalar.ph1363.prol.loopexit:                      ; preds = %scalar.ph1363.prol, %scalar.ph1363.preheader
  %indvars.iv1013.unr = phi i64 [ %indvars.iv1013.ph, %scalar.ph1363.preheader ], [ %indvars.iv.next1014.prol, %scalar.ph1363.prol ]
  %713 = icmp eq i32 %617, %704
  br i1 %713, label %._crit_edge757.us, label %scalar.ph1363

scalar.ph1363:                                    ; preds = %scalar.ph1363.prol.loopexit, %scalar.ph1363
  %indvars.iv1013 = phi i64 [ %indvars.iv.next1014.1, %scalar.ph1363 ], [ %indvars.iv1013.unr, %scalar.ph1363.prol.loopexit ]
  %714 = add nsw i64 %693, %indvars.iv1013
  %715 = shl i64 %714, 2
  %716 = getelementptr inbounds i8, ptr %1, i64 %715
  %717 = add nsw i64 %694, %indvars.iv1013
  %718 = shl i64 %717, 2
  %719 = getelementptr inbounds i8, ptr %0, i64 %718
  %720 = load float, ptr %716, align 4, !tbaa !29
  store float %720, ptr %719, align 4, !tbaa !29
  %indvars.iv.next1014 = add nsw i64 %indvars.iv1013, 1
  %721 = add nsw i64 %693, %indvars.iv.next1014
  %722 = shl i64 %721, 2
  %723 = getelementptr inbounds i8, ptr %1, i64 %722
  %724 = add nsw i64 %694, %indvars.iv.next1014
  %725 = shl i64 %724, 2
  %726 = getelementptr inbounds i8, ptr %0, i64 %725
  %727 = load float, ptr %723, align 4, !tbaa !29
  store float %727, ptr %726, align 4, !tbaa !29
  %indvars.iv.next1014.1 = add nsw i64 %indvars.iv1013, 2
  %lftr.wideiv1016.1 = trunc i64 %indvars.iv.next1014.1 to i32
  %exitcond1017.not.1 = icmp eq i32 %indvars.iv992, %lftr.wideiv1016.1
  br i1 %exitcond1017.not.1, label %._crit_edge757.us, label %scalar.ph1363, !llvm.loop !107

._crit_edge757.us:                                ; preds = %scalar.ph1363.prol.loopexit, %scalar.ph1363, %middle.block1362
  %indvars.iv.next1019 = add nsw i64 %indvars.iv1018, 1
  %exitcond1022.not = icmp eq i64 %indvars.iv.next1019, %wide.trip.count1021
  br i1 %exitcond1022.not, label %.loopexit576, label %.preheader572.us, !llvm.loop !108

.preheader577:                                    ; preds = %613
  br i1 %or.cond1161, label %.preheader571.us.preheader, label %.loopexit576

.preheader571.us.preheader:                       ; preds = %.preheader577
  %bound01334 = icmp ult ptr %scevgep1328, %scevgep1333
  %bound11335 = icmp ult ptr %scevgep1331, %scevgep1330
  %found.conflict1336 = and i1 %bound01334, %bound11335
  %ind.end1343 = add nsw i64 %n.vec1342, %635
  br label %.preheader571.us

.preheader571.us:                                 ; preds = %.preheader571.us.preheader, %._crit_edge761.us
  %indvars.iv1029 = phi i64 [ %indvars.iv.next1030, %._crit_edge761.us ], [ %359, %.preheader571.us.preheader ]
  %728 = mul nsw i64 %indvars.iv1029, %353
  %729 = mul nsw i64 %indvars.iv1029, %354
  %brmerge1567 = select i1 %min.iters.check1339, i1 true, i1 %found.conflict1336
  br i1 %brmerge1567, label %scalar.ph1338.preheader, label %vector.body1345

vector.body1345:                                  ; preds = %.preheader571.us, %vector.body1345
  %index1346 = phi i64 [ %index.next1350, %vector.body1345 ], [ 0, %.preheader571.us ]
  %offset.idx1347 = add i64 %index1346, %635
  %730 = add nsw i64 %728, %offset.idx1347
  %731 = shl i64 %730, 1
  %732 = getelementptr inbounds i8, ptr %1, i64 %731
  %733 = add nsw i64 %729, %offset.idx1347
  %734 = shl i64 %733, 1
  %735 = getelementptr inbounds i8, ptr %0, i64 %734
  %736 = getelementptr inbounds i8, ptr %732, i64 16
  %wide.load1348 = load <8 x i16>, ptr %732, align 2, !tbaa !17, !alias.scope !109
  %wide.load1349 = load <8 x i16>, ptr %736, align 2, !tbaa !17, !alias.scope !109
  %737 = getelementptr inbounds i8, ptr %735, i64 16
  store <8 x i16> %wide.load1348, ptr %735, align 2, !tbaa !17, !alias.scope !112, !noalias !109
  store <8 x i16> %wide.load1349, ptr %737, align 2, !tbaa !17, !alias.scope !112, !noalias !109
  %index.next1350 = add nuw i64 %index1346, 16
  %738 = icmp eq i64 %index.next1350, %n.vec1342
  br i1 %738, label %middle.block1337, label %vector.body1345, !llvm.loop !114

middle.block1337:                                 ; preds = %vector.body1345
  br i1 %cmp.n1351, label %._crit_edge761.us, label %scalar.ph1338.preheader

scalar.ph1338.preheader:                          ; preds = %.preheader571.us, %middle.block1337
  %indvars.iv1024.ph = phi i64 [ %635, %.preheader571.us ], [ %ind.end1343, %middle.block1337 ]
  %739 = trunc i64 %indvars.iv1024.ph to i32
  %740 = sub i32 %indvars.iv992, %739
  %xtraiter1535 = and i32 %740, 1
  %lcmp.mod1536.not = icmp eq i32 %xtraiter1535, 0
  br i1 %lcmp.mod1536.not, label %scalar.ph1338.prol.loopexit, label %scalar.ph1338.prol

scalar.ph1338.prol:                               ; preds = %scalar.ph1338.preheader
  %741 = add nsw i64 %728, %indvars.iv1024.ph
  %742 = shl i64 %741, 1
  %743 = getelementptr inbounds i8, ptr %1, i64 %742
  %744 = add nsw i64 %729, %indvars.iv1024.ph
  %745 = shl i64 %744, 1
  %746 = getelementptr inbounds i8, ptr %0, i64 %745
  %747 = load i16, ptr %743, align 2, !tbaa !17
  store i16 %747, ptr %746, align 2, !tbaa !17
  %indvars.iv.next1025.prol = add nsw i64 %indvars.iv1024.ph, 1
  br label %scalar.ph1338.prol.loopexit

scalar.ph1338.prol.loopexit:                      ; preds = %scalar.ph1338.prol, %scalar.ph1338.preheader
  %indvars.iv1024.unr = phi i64 [ %indvars.iv1024.ph, %scalar.ph1338.preheader ], [ %indvars.iv.next1025.prol, %scalar.ph1338.prol ]
  %748 = icmp eq i32 %615, %739
  br i1 %748, label %._crit_edge761.us, label %scalar.ph1338

scalar.ph1338:                                    ; preds = %scalar.ph1338.prol.loopexit, %scalar.ph1338
  %indvars.iv1024 = phi i64 [ %indvars.iv.next1025.1, %scalar.ph1338 ], [ %indvars.iv1024.unr, %scalar.ph1338.prol.loopexit ]
  %749 = add nsw i64 %728, %indvars.iv1024
  %750 = shl i64 %749, 1
  %751 = getelementptr inbounds i8, ptr %1, i64 %750
  %752 = add nsw i64 %729, %indvars.iv1024
  %753 = shl i64 %752, 1
  %754 = getelementptr inbounds i8, ptr %0, i64 %753
  %755 = load i16, ptr %751, align 2, !tbaa !17
  store i16 %755, ptr %754, align 2, !tbaa !17
  %indvars.iv.next1025 = add nsw i64 %indvars.iv1024, 1
  %756 = add nsw i64 %728, %indvars.iv.next1025
  %757 = shl i64 %756, 1
  %758 = getelementptr inbounds i8, ptr %1, i64 %757
  %759 = add nsw i64 %729, %indvars.iv.next1025
  %760 = shl i64 %759, 1
  %761 = getelementptr inbounds i8, ptr %0, i64 %760
  %762 = load i16, ptr %758, align 2, !tbaa !17
  store i16 %762, ptr %761, align 2, !tbaa !17
  %indvars.iv.next1025.1 = add nsw i64 %indvars.iv1024, 2
  %lftr.wideiv1027.1 = trunc i64 %indvars.iv.next1025.1 to i32
  %exitcond1028.not.1 = icmp eq i32 %indvars.iv992, %lftr.wideiv1027.1
  br i1 %exitcond1028.not.1, label %._crit_edge761.us, label %scalar.ph1338, !llvm.loop !115

._crit_edge761.us:                                ; preds = %scalar.ph1338.prol.loopexit, %scalar.ph1338, %middle.block1337
  %indvars.iv.next1030 = add nsw i64 %indvars.iv1029, 1
  %exitcond1033.not = icmp eq i64 %indvars.iv.next1030, %wide.trip.count1032
  br i1 %exitcond1033.not, label %.loopexit576, label %.preheader571.us, !llvm.loop !116

.preheader575:                                    ; preds = %613
  br i1 %or.cond1161, label %.preheader570.us, label %.loopexit576

.preheader570.us:                                 ; preds = %.preheader575, %._crit_edge769.us
  %indvars.iv1039 = phi i64 [ %indvars.iv.next1040, %._crit_edge769.us ], [ %359, %.preheader575 ]
  %763 = mul nsw i64 %indvars.iv1039, %353
  %764 = mul nsw i64 %indvars.iv1039, %354
  br i1 %357, label %.lr.ph765.us.us, label %._crit_edge769.us

._crit_edge769.us:                                ; preds = %._crit_edge766.us.us, %.preheader570.us
  %indvars.iv.next1040 = add nsw i64 %indvars.iv1039, 1
  %exitcond1043.not = icmp eq i64 %indvars.iv.next1040, %wide.trip.count1042
  br i1 %exitcond1043.not, label %.loopexit576, label %.preheader570.us, !llvm.loop !117

.lr.ph765.us.us:                                  ; preds = %.preheader570.us, %._crit_edge766.us.us
  %indvars.iv1034 = phi i64 [ %indvars.iv.next1035, %._crit_edge766.us.us ], [ %635, %.preheader570.us ]
  %765 = add nsw i64 %763, %indvars.iv1034
  %766 = mul i64 %765, %355
  %767 = getelementptr inbounds i8, ptr %1, i64 %766
  %768 = add nsw i64 %764, %indvars.iv1034
  %769 = mul i64 %768, %355
  %770 = getelementptr inbounds i8, ptr %0, i64 %769
  br label %771

771:                                              ; preds = %795, %.lr.ph765.us.us
  %.0518763.us.us = phi i8 [ 0, %.lr.ph765.us.us ], [ %800, %795 ]
  %772 = zext nneg i8 %.0518763.us.us to i64
  %773 = getelementptr inbounds i8, ptr %767, i64 %772
  %774 = load i8, ptr %773, align 1, !tbaa !50
  %775 = getelementptr inbounds i8, ptr %770, i64 %772
  store i8 %774, ptr %775, align 1, !tbaa !50
  %776 = or disjoint i8 %.0518763.us.us, 1
  %777 = zext nneg i8 %776 to i32
  %778 = icmp sgt i32 %356, %777
  br i1 %778, label %779, label %._crit_edge766.us.us, !llvm.loop !118

779:                                              ; preds = %771
  %780 = zext nneg i8 %776 to i64
  %781 = getelementptr inbounds i8, ptr %767, i64 %780
  %782 = load i8, ptr %781, align 1, !tbaa !50
  %783 = getelementptr inbounds i8, ptr %770, i64 %780
  store i8 %782, ptr %783, align 1, !tbaa !50
  %784 = or disjoint i8 %.0518763.us.us, 2
  %785 = zext nneg i8 %784 to i32
  %786 = icmp ugt i32 %356, %785
  br i1 %786, label %787, label %._crit_edge766.us.us, !llvm.loop !118

787:                                              ; preds = %779
  %788 = zext nneg i8 %784 to i64
  %789 = getelementptr inbounds i8, ptr %767, i64 %788
  %790 = load i8, ptr %789, align 1, !tbaa !50
  %791 = getelementptr inbounds i8, ptr %770, i64 %788
  store i8 %790, ptr %791, align 1, !tbaa !50
  %792 = or disjoint i8 %.0518763.us.us, 3
  %793 = zext nneg i8 %792 to i32
  %794 = icmp ugt i32 %356, %793
  br i1 %794, label %795, label %._crit_edge766.us.us, !llvm.loop !118

795:                                              ; preds = %787
  %796 = zext nneg i8 %792 to i64
  %797 = getelementptr inbounds i8, ptr %767, i64 %796
  %798 = load i8, ptr %797, align 1, !tbaa !50
  %799 = getelementptr inbounds i8, ptr %770, i64 %796
  store i8 %798, ptr %799, align 1, !tbaa !50
  %800 = add nuw nsw i8 %.0518763.us.us, 4
  %801 = zext nneg i8 %800 to i32
  %802 = icmp ugt i32 %356, %801
  br i1 %802, label %771, label %._crit_edge766.us.us, !llvm.loop !119

._crit_edge766.us.us:                             ; preds = %795, %787, %779, %771
  %indvars.iv.next1035 = add nsw i64 %indvars.iv1034, 1
  %lftr.wideiv1037 = trunc i64 %indvars.iv.next1035 to i32
  %exitcond1038.not = icmp eq i32 %indvars.iv992, %lftr.wideiv1037
  br i1 %exitcond1038.not, label %._crit_edge769.us, label %.lr.ph765.us.us, !llvm.loop !120

.loopexit576:                                     ; preds = %._crit_edge749.us, %._crit_edge753.us, %._crit_edge757.us, %._crit_edge761.us, %._crit_edge769.us, %.preheader583, %.preheader581, %.preheader579, %.preheader577, %.preheader575
  %803 = add i32 %.5774, %9
  %804 = icmp slt i32 %803, %348
  %indvars.iv.next993 = add i32 %indvars.iv992, %9
  %indvar.next1530 = add i32 %indvar1529, 1
  br i1 %804, label %613, label %._crit_edge782, !llvm.loop !121

._crit_edge782:                                   ; preds = %.loopexit576, %.preheader585
  %.5.lcssa = phi i32 [ %5, %.preheader585 ], [ %803, %.loopexit576 ]
  %805 = icmp slt i32 %.2.lcssa, %8
  switch i32 %351, label %.preheader557 [
    i32 0, label %.preheader559
    i32 1, label %.preheader562
    i32 3, label %.preheader565
    i32 7, label %.preheader568
  ]

.preheader568:                                    ; preds = %._crit_edge782
  br i1 %805, label %.preheader567.lr.ph, label %.loopexit

.preheader567.lr.ph:                              ; preds = %.preheader568
  %806 = icmp slt i32 %.5.lcssa, %6
  %807 = zext i32 %3 to i64
  %808 = zext i32 %4 to i64
  br i1 %806, label %.preheader567.us.preheader, label %.loopexit

.preheader567.us.preheader:                       ; preds = %.preheader567.lr.ph
  %809 = sext i32 %.5.lcssa to i64
  %810 = sext i32 %.2.lcssa to i64
  %wide.trip.count1053 = sext i32 %8 to i64
  %wide.trip.count1048 = sext i32 %6 to i64
  %811 = sub nsw i64 %wide.trip.count1048, %809
  %xtraiter1539 = and i64 %811, 1
  %lcmp.mod1540.not = icmp eq i64 %xtraiter1539, 0
  %indvars.iv.next1046.prol = add nsw i64 %809, 1
  %812 = add nsw i64 %wide.trip.count1048, -1
  %813 = icmp eq i64 %812, %809
  br label %.preheader567.us

.preheader567.us:                                 ; preds = %.preheader567.us.preheader, %._crit_edge786.us
  %indvars.iv1050 = phi i64 [ %810, %.preheader567.us.preheader ], [ %indvars.iv.next1051, %._crit_edge786.us ]
  %814 = mul nsw i64 %indvars.iv1050, %807
  %815 = mul nsw i64 %indvars.iv1050, %808
  br i1 %lcmp.mod1540.not, label %.prol.loopexit1538, label %.prol.loopexit1538.unr-lcssa

.prol.loopexit1538.unr-lcssa:                     ; preds = %.preheader567.us
  %816 = add nsw i64 %814, %809
  %817 = shl i64 %816, 4
  %818 = getelementptr inbounds i8, ptr %1, i64 %817
  %819 = add nsw i64 %815, %809
  %820 = shl i64 %819, 4
  %821 = getelementptr inbounds i8, ptr %0, i64 %820
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %821, ptr noundef nonnull align 8 dereferenceable(16) %818, i64 16, i1 false), !tbaa.struct !49
  br label %.prol.loopexit1538

.prol.loopexit1538:                               ; preds = %.prol.loopexit1538.unr-lcssa, %.preheader567.us
  %indvars.iv1045.unr = phi i64 [ %809, %.preheader567.us ], [ %indvars.iv.next1046.prol, %.prol.loopexit1538.unr-lcssa ]
  br i1 %813, label %._crit_edge786.us, label %.preheader567.us.new

.preheader567.us.new:                             ; preds = %.prol.loopexit1538, %.preheader567.us.new
  %indvars.iv1045 = phi i64 [ %indvars.iv.next1046.1, %.preheader567.us.new ], [ %indvars.iv1045.unr, %.prol.loopexit1538 ]
  %822 = add nsw i64 %814, %indvars.iv1045
  %823 = shl i64 %822, 4
  %824 = getelementptr inbounds i8, ptr %1, i64 %823
  %825 = add nsw i64 %815, %indvars.iv1045
  %826 = shl i64 %825, 4
  %827 = getelementptr inbounds i8, ptr %0, i64 %826
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %827, ptr noundef nonnull align 8 dereferenceable(16) %824, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next1046 = add nsw i64 %indvars.iv1045, 1
  %828 = add nsw i64 %814, %indvars.iv.next1046
  %829 = shl i64 %828, 4
  %830 = getelementptr inbounds i8, ptr %1, i64 %829
  %831 = add nsw i64 %815, %indvars.iv.next1046
  %832 = shl i64 %831, 4
  %833 = getelementptr inbounds i8, ptr %0, i64 %832
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %833, ptr noundef nonnull align 8 dereferenceable(16) %830, i64 16, i1 false), !tbaa.struct !49
  %indvars.iv.next1046.1 = add nsw i64 %indvars.iv1045, 2
  %exitcond1049.not.1 = icmp eq i64 %indvars.iv.next1046.1, %wide.trip.count1048
  br i1 %exitcond1049.not.1, label %._crit_edge786.us, label %.preheader567.us.new, !llvm.loop !122

._crit_edge786.us:                                ; preds = %.preheader567.us.new, %.prol.loopexit1538
  %indvars.iv.next1051 = add nsw i64 %indvars.iv1050, 1
  %exitcond1054.not = icmp eq i64 %indvars.iv.next1051, %wide.trip.count1053
  br i1 %exitcond1054.not, label %.loopexit, label %.preheader567.us, !llvm.loop !123

.preheader565:                                    ; preds = %._crit_edge782
  br i1 %805, label %.preheader564.lr.ph, label %.loopexit

.preheader564.lr.ph:                              ; preds = %.preheader565
  %834 = icmp slt i32 %.5.lcssa, %6
  %835 = zext i32 %3 to i64
  %836 = zext i32 %4 to i64
  br i1 %834, label %.preheader564.us.preheader, label %.loopexit

.preheader564.us.preheader:                       ; preds = %.preheader564.lr.ph
  %837 = sext i32 %.5.lcssa to i64
  %838 = sext i32 %.2.lcssa to i64
  %wide.trip.count1064 = sext i32 %8 to i64
  %wide.trip.count1059 = sext i32 %6 to i64
  %839 = mul nsw i64 %838, %836
  %840 = add i64 %839, %837
  %841 = shl i64 %840, 3
  %scevgep1403 = getelementptr i8, ptr %0, i64 %841
  %842 = xor i64 %838, -1
  %843 = add nsw i64 %842, %wide.trip.count1064
  %844 = mul i64 %843, %836
  %845 = add i64 %839, %wide.trip.count1059
  %846 = add i64 %844, %845
  %847 = shl i64 %846, 3
  %scevgep1404 = getelementptr i8, ptr %0, i64 %847
  %848 = mul nsw i64 %838, %835
  %849 = add i64 %848, %837
  %850 = shl i64 %849, 3
  %scevgep1405 = getelementptr i8, ptr %1, i64 %850
  %851 = mul i64 %843, %835
  %852 = add i64 %848, %wide.trip.count1059
  %853 = add i64 %851, %852
  %854 = shl i64 %853, 3
  %scevgep1406 = getelementptr i8, ptr %1, i64 %854
  %855 = sub nsw i64 %wide.trip.count1059, %837
  %min.iters.check1412 = icmp ult i64 %855, 4
  %bound01407 = icmp ult ptr %scevgep1403, %scevgep1406
  %bound11408 = icmp ult ptr %scevgep1405, %scevgep1404
  %found.conflict1409 = and i1 %bound01407, %bound11408
  %n.vec1415 = and i64 %855, -4
  %ind.end1416 = add nsw i64 %n.vec1415, %837
  %cmp.n1424 = icmp eq i64 %855, %n.vec1415
  %856 = add nsw i64 %wide.trip.count1059, -1
  br label %.preheader564.us

.preheader564.us:                                 ; preds = %.preheader564.us.preheader, %._crit_edge790.us
  %indvars.iv1061 = phi i64 [ %838, %.preheader564.us.preheader ], [ %indvars.iv.next1062, %._crit_edge790.us ]
  %857 = mul nsw i64 %indvars.iv1061, %835
  %858 = mul nsw i64 %indvars.iv1061, %836
  %brmerge1568 = select i1 %min.iters.check1412, i1 true, i1 %found.conflict1409
  br i1 %brmerge1568, label %scalar.ph1411.preheader, label %vector.body1418

vector.body1418:                                  ; preds = %.preheader564.us, %vector.body1418
  %index1419 = phi i64 [ %index.next1423, %vector.body1418 ], [ 0, %.preheader564.us ]
  %offset.idx1420 = add i64 %index1419, %837
  %859 = add nsw i64 %857, %offset.idx1420
  %860 = shl i64 %859, 3
  %861 = getelementptr inbounds i8, ptr %1, i64 %860
  %862 = add nsw i64 %858, %offset.idx1420
  %863 = shl i64 %862, 3
  %864 = getelementptr inbounds i8, ptr %0, i64 %863
  %865 = getelementptr inbounds i8, ptr %861, i64 16
  %wide.load1421 = load <2 x double>, ptr %861, align 8, !tbaa !39, !alias.scope !124
  %wide.load1422 = load <2 x double>, ptr %865, align 8, !tbaa !39, !alias.scope !124
  %866 = getelementptr inbounds i8, ptr %864, i64 16
  store <2 x double> %wide.load1421, ptr %864, align 8, !tbaa !39, !alias.scope !127, !noalias !124
  store <2 x double> %wide.load1422, ptr %866, align 8, !tbaa !39, !alias.scope !127, !noalias !124
  %index.next1423 = add nuw i64 %index1419, 4
  %867 = icmp eq i64 %index.next1423, %n.vec1415
  br i1 %867, label %middle.block1410, label %vector.body1418, !llvm.loop !129

middle.block1410:                                 ; preds = %vector.body1418
  br i1 %cmp.n1424, label %._crit_edge790.us, label %scalar.ph1411.preheader

scalar.ph1411.preheader:                          ; preds = %.preheader564.us, %middle.block1410
  %indvars.iv1056.ph = phi i64 [ %837, %.preheader564.us ], [ %ind.end1416, %middle.block1410 ]
  %868 = sub nsw i64 %wide.trip.count1059, %indvars.iv1056.ph
  %xtraiter1541 = and i64 %868, 1
  %lcmp.mod1542.not = icmp eq i64 %xtraiter1541, 0
  br i1 %lcmp.mod1542.not, label %scalar.ph1411.prol.loopexit, label %scalar.ph1411.prol

scalar.ph1411.prol:                               ; preds = %scalar.ph1411.preheader
  %869 = add nsw i64 %857, %indvars.iv1056.ph
  %870 = shl i64 %869, 3
  %871 = getelementptr inbounds i8, ptr %1, i64 %870
  %872 = add nsw i64 %858, %indvars.iv1056.ph
  %873 = shl i64 %872, 3
  %874 = getelementptr inbounds i8, ptr %0, i64 %873
  %875 = load double, ptr %871, align 8, !tbaa !39
  store double %875, ptr %874, align 8, !tbaa !39
  %indvars.iv.next1057.prol = add nsw i64 %indvars.iv1056.ph, 1
  br label %scalar.ph1411.prol.loopexit

scalar.ph1411.prol.loopexit:                      ; preds = %scalar.ph1411.prol, %scalar.ph1411.preheader
  %indvars.iv1056.unr = phi i64 [ %indvars.iv1056.ph, %scalar.ph1411.preheader ], [ %indvars.iv.next1057.prol, %scalar.ph1411.prol ]
  %876 = icmp eq i64 %indvars.iv1056.ph, %856
  br i1 %876, label %._crit_edge790.us, label %scalar.ph1411

scalar.ph1411:                                    ; preds = %scalar.ph1411.prol.loopexit, %scalar.ph1411
  %indvars.iv1056 = phi i64 [ %indvars.iv.next1057.1, %scalar.ph1411 ], [ %indvars.iv1056.unr, %scalar.ph1411.prol.loopexit ]
  %877 = add nsw i64 %857, %indvars.iv1056
  %878 = shl i64 %877, 3
  %879 = getelementptr inbounds i8, ptr %1, i64 %878
  %880 = add nsw i64 %858, %indvars.iv1056
  %881 = shl i64 %880, 3
  %882 = getelementptr inbounds i8, ptr %0, i64 %881
  %883 = load double, ptr %879, align 8, !tbaa !39
  store double %883, ptr %882, align 8, !tbaa !39
  %indvars.iv.next1057 = add nsw i64 %indvars.iv1056, 1
  %884 = add nsw i64 %857, %indvars.iv.next1057
  %885 = shl i64 %884, 3
  %886 = getelementptr inbounds i8, ptr %1, i64 %885
  %887 = add nsw i64 %858, %indvars.iv.next1057
  %888 = shl i64 %887, 3
  %889 = getelementptr inbounds i8, ptr %0, i64 %888
  %890 = load double, ptr %886, align 8, !tbaa !39
  store double %890, ptr %889, align 8, !tbaa !39
  %indvars.iv.next1057.1 = add nsw i64 %indvars.iv1056, 2
  %exitcond1060.not.1 = icmp eq i64 %indvars.iv.next1057.1, %wide.trip.count1059
  br i1 %exitcond1060.not.1, label %._crit_edge790.us, label %scalar.ph1411, !llvm.loop !130

._crit_edge790.us:                                ; preds = %scalar.ph1411.prol.loopexit, %scalar.ph1411, %middle.block1410
  %indvars.iv.next1062 = add nsw i64 %indvars.iv1061, 1
  %exitcond1065.not = icmp eq i64 %indvars.iv.next1062, %wide.trip.count1064
  br i1 %exitcond1065.not, label %.loopexit, label %.preheader564.us, !llvm.loop !131

.preheader562:                                    ; preds = %._crit_edge782
  br i1 %805, label %.preheader561.lr.ph, label %.loopexit

.preheader561.lr.ph:                              ; preds = %.preheader562
  %891 = icmp slt i32 %.5.lcssa, %6
  %892 = zext i32 %3 to i64
  %893 = zext i32 %4 to i64
  br i1 %891, label %.preheader561.us.preheader, label %.loopexit

.preheader561.us.preheader:                       ; preds = %.preheader561.lr.ph
  %894 = sext i32 %.5.lcssa to i64
  %895 = sext i32 %.2.lcssa to i64
  %wide.trip.count1075 = sext i32 %8 to i64
  %wide.trip.count1070 = sext i32 %6 to i64
  %896 = mul nsw i64 %895, %893
  %897 = add i64 %896, %894
  %898 = shl i64 %897, 2
  %scevgep1426 = getelementptr i8, ptr %0, i64 %898
  %899 = xor i64 %895, -1
  %900 = add nsw i64 %899, %wide.trip.count1075
  %901 = mul i64 %900, %893
  %902 = add i64 %896, %wide.trip.count1070
  %903 = add i64 %901, %902
  %904 = shl i64 %903, 2
  %scevgep1427 = getelementptr i8, ptr %0, i64 %904
  %905 = mul nsw i64 %895, %892
  %906 = add i64 %905, %894
  %907 = shl i64 %906, 2
  %scevgep1428 = getelementptr i8, ptr %1, i64 %907
  %908 = mul i64 %900, %892
  %909 = add i64 %905, %wide.trip.count1070
  %910 = add i64 %908, %909
  %911 = shl i64 %910, 2
  %scevgep1429 = getelementptr i8, ptr %1, i64 %911
  %912 = sub nsw i64 %wide.trip.count1070, %894
  %min.iters.check1435 = icmp ult i64 %912, 8
  %bound01430 = icmp ult ptr %scevgep1426, %scevgep1429
  %bound11431 = icmp ult ptr %scevgep1428, %scevgep1427
  %found.conflict1432 = and i1 %bound01430, %bound11431
  %n.vec1438 = and i64 %912, -8
  %ind.end1439 = add nsw i64 %n.vec1438, %894
  %cmp.n1447 = icmp eq i64 %912, %n.vec1438
  %913 = add nsw i64 %wide.trip.count1070, -1
  br label %.preheader561.us

.preheader561.us:                                 ; preds = %.preheader561.us.preheader, %._crit_edge794.us
  %indvars.iv1072 = phi i64 [ %895, %.preheader561.us.preheader ], [ %indvars.iv.next1073, %._crit_edge794.us ]
  %914 = mul nsw i64 %indvars.iv1072, %892
  %915 = mul nsw i64 %indvars.iv1072, %893
  %brmerge1569 = select i1 %min.iters.check1435, i1 true, i1 %found.conflict1432
  br i1 %brmerge1569, label %scalar.ph1434.preheader, label %vector.body1441

vector.body1441:                                  ; preds = %.preheader561.us, %vector.body1441
  %index1442 = phi i64 [ %index.next1446, %vector.body1441 ], [ 0, %.preheader561.us ]
  %offset.idx1443 = add i64 %index1442, %894
  %916 = add nsw i64 %914, %offset.idx1443
  %917 = shl i64 %916, 2
  %918 = getelementptr inbounds i8, ptr %1, i64 %917
  %919 = add nsw i64 %915, %offset.idx1443
  %920 = shl i64 %919, 2
  %921 = getelementptr inbounds i8, ptr %0, i64 %920
  %922 = getelementptr inbounds i8, ptr %918, i64 16
  %wide.load1444 = load <4 x float>, ptr %918, align 4, !tbaa !29, !alias.scope !132
  %wide.load1445 = load <4 x float>, ptr %922, align 4, !tbaa !29, !alias.scope !132
  %923 = getelementptr inbounds i8, ptr %921, i64 16
  store <4 x float> %wide.load1444, ptr %921, align 4, !tbaa !29, !alias.scope !135, !noalias !132
  store <4 x float> %wide.load1445, ptr %923, align 4, !tbaa !29, !alias.scope !135, !noalias !132
  %index.next1446 = add nuw i64 %index1442, 8
  %924 = icmp eq i64 %index.next1446, %n.vec1438
  br i1 %924, label %middle.block1433, label %vector.body1441, !llvm.loop !137

middle.block1433:                                 ; preds = %vector.body1441
  br i1 %cmp.n1447, label %._crit_edge794.us, label %scalar.ph1434.preheader

scalar.ph1434.preheader:                          ; preds = %.preheader561.us, %middle.block1433
  %indvars.iv1067.ph = phi i64 [ %894, %.preheader561.us ], [ %ind.end1439, %middle.block1433 ]
  %925 = sub nsw i64 %wide.trip.count1070, %indvars.iv1067.ph
  %xtraiter1543 = and i64 %925, 1
  %lcmp.mod1544.not = icmp eq i64 %xtraiter1543, 0
  br i1 %lcmp.mod1544.not, label %scalar.ph1434.prol.loopexit, label %scalar.ph1434.prol

scalar.ph1434.prol:                               ; preds = %scalar.ph1434.preheader
  %926 = add nsw i64 %914, %indvars.iv1067.ph
  %927 = shl i64 %926, 2
  %928 = getelementptr inbounds i8, ptr %1, i64 %927
  %929 = add nsw i64 %915, %indvars.iv1067.ph
  %930 = shl i64 %929, 2
  %931 = getelementptr inbounds i8, ptr %0, i64 %930
  %932 = load float, ptr %928, align 4, !tbaa !29
  store float %932, ptr %931, align 4, !tbaa !29
  %indvars.iv.next1068.prol = add nsw i64 %indvars.iv1067.ph, 1
  br label %scalar.ph1434.prol.loopexit

scalar.ph1434.prol.loopexit:                      ; preds = %scalar.ph1434.prol, %scalar.ph1434.preheader
  %indvars.iv1067.unr = phi i64 [ %indvars.iv1067.ph, %scalar.ph1434.preheader ], [ %indvars.iv.next1068.prol, %scalar.ph1434.prol ]
  %933 = icmp eq i64 %indvars.iv1067.ph, %913
  br i1 %933, label %._crit_edge794.us, label %scalar.ph1434

scalar.ph1434:                                    ; preds = %scalar.ph1434.prol.loopexit, %scalar.ph1434
  %indvars.iv1067 = phi i64 [ %indvars.iv.next1068.1, %scalar.ph1434 ], [ %indvars.iv1067.unr, %scalar.ph1434.prol.loopexit ]
  %934 = add nsw i64 %914, %indvars.iv1067
  %935 = shl i64 %934, 2
  %936 = getelementptr inbounds i8, ptr %1, i64 %935
  %937 = add nsw i64 %915, %indvars.iv1067
  %938 = shl i64 %937, 2
  %939 = getelementptr inbounds i8, ptr %0, i64 %938
  %940 = load float, ptr %936, align 4, !tbaa !29
  store float %940, ptr %939, align 4, !tbaa !29
  %indvars.iv.next1068 = add nsw i64 %indvars.iv1067, 1
  %941 = add nsw i64 %914, %indvars.iv.next1068
  %942 = shl i64 %941, 2
  %943 = getelementptr inbounds i8, ptr %1, i64 %942
  %944 = add nsw i64 %915, %indvars.iv.next1068
  %945 = shl i64 %944, 2
  %946 = getelementptr inbounds i8, ptr %0, i64 %945
  %947 = load float, ptr %943, align 4, !tbaa !29
  store float %947, ptr %946, align 4, !tbaa !29
  %indvars.iv.next1068.1 = add nsw i64 %indvars.iv1067, 2
  %exitcond1071.not.1 = icmp eq i64 %indvars.iv.next1068.1, %wide.trip.count1070
  br i1 %exitcond1071.not.1, label %._crit_edge794.us, label %scalar.ph1434, !llvm.loop !138

._crit_edge794.us:                                ; preds = %scalar.ph1434.prol.loopexit, %scalar.ph1434, %middle.block1433
  %indvars.iv.next1073 = add nsw i64 %indvars.iv1072, 1
  %exitcond1076.not = icmp eq i64 %indvars.iv.next1073, %wide.trip.count1075
  br i1 %exitcond1076.not, label %.loopexit, label %.preheader561.us, !llvm.loop !139

.preheader559:                                    ; preds = %._crit_edge782
  br i1 %805, label %.preheader558.lr.ph, label %.loopexit

.preheader558.lr.ph:                              ; preds = %.preheader559
  %948 = icmp slt i32 %.5.lcssa, %6
  %949 = zext i32 %3 to i64
  %950 = zext i32 %4 to i64
  br i1 %948, label %.preheader558.us.preheader, label %.loopexit

.preheader558.us.preheader:                       ; preds = %.preheader558.lr.ph
  %951 = sext i32 %.5.lcssa to i64
  %952 = sext i32 %.2.lcssa to i64
  %wide.trip.count1086 = sext i32 %8 to i64
  %wide.trip.count1081 = sext i32 %6 to i64
  %953 = mul nsw i64 %952, %950
  %954 = add i64 %953, %951
  %955 = shl i64 %954, 1
  %scevgep1449 = getelementptr i8, ptr %0, i64 %955
  %956 = xor i64 %952, -1
  %957 = add nsw i64 %956, %wide.trip.count1086
  %958 = mul i64 %957, %950
  %959 = add i64 %953, %wide.trip.count1081
  %960 = add i64 %958, %959
  %961 = shl i64 %960, 1
  %scevgep1450 = getelementptr i8, ptr %0, i64 %961
  %962 = mul nsw i64 %952, %949
  %963 = add i64 %962, %951
  %964 = shl i64 %963, 1
  %scevgep1451 = getelementptr i8, ptr %1, i64 %964
  %965 = mul i64 %957, %949
  %966 = add i64 %962, %wide.trip.count1081
  %967 = add i64 %965, %966
  %968 = shl i64 %967, 1
  %scevgep1452 = getelementptr i8, ptr %1, i64 %968
  %969 = sub nsw i64 %wide.trip.count1081, %951
  %min.iters.check1458 = icmp ult i64 %969, 16
  %bound01453 = icmp ult ptr %scevgep1449, %scevgep1452
  %bound11454 = icmp ult ptr %scevgep1451, %scevgep1450
  %found.conflict1455 = and i1 %bound01453, %bound11454
  %n.vec1461 = and i64 %969, -16
  %ind.end1462 = add nsw i64 %n.vec1461, %951
  %cmp.n1470 = icmp eq i64 %969, %n.vec1461
  %970 = add nsw i64 %wide.trip.count1081, -1
  br label %.preheader558.us

.preheader558.us:                                 ; preds = %.preheader558.us.preheader, %._crit_edge798.us
  %indvars.iv1083 = phi i64 [ %952, %.preheader558.us.preheader ], [ %indvars.iv.next1084, %._crit_edge798.us ]
  %971 = mul nsw i64 %indvars.iv1083, %949
  %972 = mul nsw i64 %indvars.iv1083, %950
  %brmerge1570 = select i1 %min.iters.check1458, i1 true, i1 %found.conflict1455
  br i1 %brmerge1570, label %scalar.ph1457.preheader, label %vector.body1464

vector.body1464:                                  ; preds = %.preheader558.us, %vector.body1464
  %index1465 = phi i64 [ %index.next1469, %vector.body1464 ], [ 0, %.preheader558.us ]
  %offset.idx1466 = add i64 %index1465, %951
  %973 = add nsw i64 %971, %offset.idx1466
  %974 = shl i64 %973, 1
  %975 = getelementptr inbounds i8, ptr %1, i64 %974
  %976 = add nsw i64 %972, %offset.idx1466
  %977 = shl i64 %976, 1
  %978 = getelementptr inbounds i8, ptr %0, i64 %977
  %979 = getelementptr inbounds i8, ptr %975, i64 16
  %wide.load1467 = load <8 x i16>, ptr %975, align 2, !tbaa !17, !alias.scope !140
  %wide.load1468 = load <8 x i16>, ptr %979, align 2, !tbaa !17, !alias.scope !140
  %980 = getelementptr inbounds i8, ptr %978, i64 16
  store <8 x i16> %wide.load1467, ptr %978, align 2, !tbaa !17, !alias.scope !143, !noalias !140
  store <8 x i16> %wide.load1468, ptr %980, align 2, !tbaa !17, !alias.scope !143, !noalias !140
  %index.next1469 = add nuw i64 %index1465, 16
  %981 = icmp eq i64 %index.next1469, %n.vec1461
  br i1 %981, label %middle.block1456, label %vector.body1464, !llvm.loop !145

middle.block1456:                                 ; preds = %vector.body1464
  br i1 %cmp.n1470, label %._crit_edge798.us, label %scalar.ph1457.preheader

scalar.ph1457.preheader:                          ; preds = %.preheader558.us, %middle.block1456
  %indvars.iv1078.ph = phi i64 [ %951, %.preheader558.us ], [ %ind.end1462, %middle.block1456 ]
  %982 = sub nsw i64 %wide.trip.count1081, %indvars.iv1078.ph
  %xtraiter1545 = and i64 %982, 1
  %lcmp.mod1546.not = icmp eq i64 %xtraiter1545, 0
  br i1 %lcmp.mod1546.not, label %scalar.ph1457.prol.loopexit, label %scalar.ph1457.prol

scalar.ph1457.prol:                               ; preds = %scalar.ph1457.preheader
  %983 = add nsw i64 %971, %indvars.iv1078.ph
  %984 = shl i64 %983, 1
  %985 = getelementptr inbounds i8, ptr %1, i64 %984
  %986 = add nsw i64 %972, %indvars.iv1078.ph
  %987 = shl i64 %986, 1
  %988 = getelementptr inbounds i8, ptr %0, i64 %987
  %989 = load i16, ptr %985, align 2, !tbaa !17
  store i16 %989, ptr %988, align 2, !tbaa !17
  %indvars.iv.next1079.prol = add nsw i64 %indvars.iv1078.ph, 1
  br label %scalar.ph1457.prol.loopexit

scalar.ph1457.prol.loopexit:                      ; preds = %scalar.ph1457.prol, %scalar.ph1457.preheader
  %indvars.iv1078.unr = phi i64 [ %indvars.iv1078.ph, %scalar.ph1457.preheader ], [ %indvars.iv.next1079.prol, %scalar.ph1457.prol ]
  %990 = icmp eq i64 %indvars.iv1078.ph, %970
  br i1 %990, label %._crit_edge798.us, label %scalar.ph1457

scalar.ph1457:                                    ; preds = %scalar.ph1457.prol.loopexit, %scalar.ph1457
  %indvars.iv1078 = phi i64 [ %indvars.iv.next1079.1, %scalar.ph1457 ], [ %indvars.iv1078.unr, %scalar.ph1457.prol.loopexit ]
  %991 = add nsw i64 %971, %indvars.iv1078
  %992 = shl i64 %991, 1
  %993 = getelementptr inbounds i8, ptr %1, i64 %992
  %994 = add nsw i64 %972, %indvars.iv1078
  %995 = shl i64 %994, 1
  %996 = getelementptr inbounds i8, ptr %0, i64 %995
  %997 = load i16, ptr %993, align 2, !tbaa !17
  store i16 %997, ptr %996, align 2, !tbaa !17
  %indvars.iv.next1079 = add nsw i64 %indvars.iv1078, 1
  %998 = add nsw i64 %971, %indvars.iv.next1079
  %999 = shl i64 %998, 1
  %1000 = getelementptr inbounds i8, ptr %1, i64 %999
  %1001 = add nsw i64 %972, %indvars.iv.next1079
  %1002 = shl i64 %1001, 1
  %1003 = getelementptr inbounds i8, ptr %0, i64 %1002
  %1004 = load i16, ptr %1000, align 2, !tbaa !17
  store i16 %1004, ptr %1003, align 2, !tbaa !17
  %indvars.iv.next1079.1 = add nsw i64 %indvars.iv1078, 2
  %exitcond1082.not.1 = icmp eq i64 %indvars.iv.next1079.1, %wide.trip.count1081
  br i1 %exitcond1082.not.1, label %._crit_edge798.us, label %scalar.ph1457, !llvm.loop !146

._crit_edge798.us:                                ; preds = %scalar.ph1457.prol.loopexit, %scalar.ph1457, %middle.block1456
  %indvars.iv.next1084 = add nsw i64 %indvars.iv1083, 1
  %exitcond1087.not = icmp eq i64 %indvars.iv.next1084, %wide.trip.count1086
  br i1 %exitcond1087.not, label %.loopexit, label %.preheader558.us, !llvm.loop !147

.preheader557:                                    ; preds = %._crit_edge782
  br i1 %805, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader557
  %1005 = icmp slt i32 %.5.lcssa, %6
  %1006 = zext i32 %2 to i64
  %1007 = zext i32 %3 to i64
  %1008 = zext i32 %4 to i64
  %sext553 = shl i32 %2, 24
  %1009 = ashr exact i32 %sext553, 24
  %1010 = icmp sgt i32 %1009, 0
  br i1 %1005, label %.preheader.us.preheader, label %.loopexit

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %1011 = sext i32 %.5.lcssa to i64
  %1012 = sext i32 %.2.lcssa to i64
  %wide.trip.count1096 = sext i32 %8 to i64
  %wide.trip.count1091 = sext i32 %6 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge806.us
  %indvars.iv1093 = phi i64 [ %1012, %.preheader.us.preheader ], [ %indvars.iv.next1094, %._crit_edge806.us ]
  %1013 = mul nsw i64 %indvars.iv1093, %1007
  %1014 = mul nsw i64 %indvars.iv1093, %1008
  br i1 %1010, label %.lr.ph802.us.us, label %._crit_edge806.us

._crit_edge806.us:                                ; preds = %._crit_edge803.us.us, %.preheader.us
  %indvars.iv.next1094 = add nsw i64 %indvars.iv1093, 1
  %exitcond1097.not = icmp eq i64 %indvars.iv.next1094, %wide.trip.count1096
  br i1 %exitcond1097.not, label %.loopexit, label %.preheader.us, !llvm.loop !148

.lr.ph802.us.us:                                  ; preds = %.preheader.us, %._crit_edge803.us.us
  %indvars.iv1088 = phi i64 [ %indvars.iv.next1089, %._crit_edge803.us.us ], [ %1011, %.preheader.us ]
  %1015 = add nsw i64 %1013, %indvars.iv1088
  %1016 = mul i64 %1015, %1006
  %1017 = getelementptr inbounds i8, ptr %1, i64 %1016
  %1018 = add nsw i64 %1014, %indvars.iv1088
  %1019 = mul i64 %1018, %1006
  %1020 = getelementptr inbounds i8, ptr %0, i64 %1019
  br label %1021

1021:                                             ; preds = %1045, %.lr.ph802.us.us
  %.0800.us.us = phi i8 [ 0, %.lr.ph802.us.us ], [ %1050, %1045 ]
  %1022 = zext nneg i8 %.0800.us.us to i64
  %1023 = getelementptr inbounds i8, ptr %1017, i64 %1022
  %1024 = load i8, ptr %1023, align 1, !tbaa !50
  %1025 = getelementptr inbounds i8, ptr %1020, i64 %1022
  store i8 %1024, ptr %1025, align 1, !tbaa !50
  %1026 = or disjoint i8 %.0800.us.us, 1
  %1027 = zext nneg i8 %1026 to i32
  %1028 = icmp sgt i32 %1009, %1027
  br i1 %1028, label %1029, label %._crit_edge803.us.us, !llvm.loop !149

1029:                                             ; preds = %1021
  %1030 = zext nneg i8 %1026 to i64
  %1031 = getelementptr inbounds i8, ptr %1017, i64 %1030
  %1032 = load i8, ptr %1031, align 1, !tbaa !50
  %1033 = getelementptr inbounds i8, ptr %1020, i64 %1030
  store i8 %1032, ptr %1033, align 1, !tbaa !50
  %1034 = or disjoint i8 %.0800.us.us, 2
  %1035 = zext nneg i8 %1034 to i32
  %1036 = icmp ugt i32 %1009, %1035
  br i1 %1036, label %1037, label %._crit_edge803.us.us, !llvm.loop !149

1037:                                             ; preds = %1029
  %1038 = zext nneg i8 %1034 to i64
  %1039 = getelementptr inbounds i8, ptr %1017, i64 %1038
  %1040 = load i8, ptr %1039, align 1, !tbaa !50
  %1041 = getelementptr inbounds i8, ptr %1020, i64 %1038
  store i8 %1040, ptr %1041, align 1, !tbaa !50
  %1042 = or disjoint i8 %.0800.us.us, 3
  %1043 = zext nneg i8 %1042 to i32
  %1044 = icmp ugt i32 %1009, %1043
  br i1 %1044, label %1045, label %._crit_edge803.us.us, !llvm.loop !149

1045:                                             ; preds = %1037
  %1046 = zext nneg i8 %1042 to i64
  %1047 = getelementptr inbounds i8, ptr %1017, i64 %1046
  %1048 = load i8, ptr %1047, align 1, !tbaa !50
  %1049 = getelementptr inbounds i8, ptr %1020, i64 %1046
  store i8 %1048, ptr %1049, align 1, !tbaa !50
  %1050 = add nuw nsw i8 %.0800.us.us, 4
  %1051 = zext nneg i8 %1050 to i32
  %1052 = icmp ugt i32 %1009, %1051
  br i1 %1052, label %1021, label %._crit_edge803.us.us, !llvm.loop !150

._crit_edge803.us.us:                             ; preds = %1045, %1037, %1029, %1021
  %indvars.iv.next1089 = add nsw i64 %indvars.iv1088, 1
  %exitcond1092.not = icmp eq i64 %indvars.iv.next1089, %wide.trip.count1091
  br i1 %exitcond1092.not, label %._crit_edge806.us, label %.lr.ph802.us.us, !llvm.loop !151

.loopexit:                                        ; preds = %._crit_edge786.us, %._crit_edge790.us, %._crit_edge794.us, %._crit_edge798.us, %._crit_edge806.us, %.preheader.lr.ph, %.preheader558.lr.ph, %.preheader561.lr.ph, %.preheader564.lr.ph, %.preheader567.lr.ph, %.preheader568, %.preheader565, %.preheader562, %.preheader559, %.preheader557
  ret void
}

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.fshl.i32(i32, i32, i32) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { noreturn nounwind }
attributes #6 = { 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, !8, i64 32}
!6 = !{!"libxsmm_meltw_unary_param", !7, i64 0, !11, i64 32, !11, i64 80}
!7 = !{!"libxsmm_matrix_op_arg", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"libxsmm_matrix_arg", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40}
!12 = !{!6, !8, i64 80}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = !{!18, !18, i64 0}
!18 = !{!"short", !9, i64 0}
!19 = !{!20}
!20 = distinct !{!20, !21}
!21 = distinct !{!21, !"LVerDomain"}
!22 = !{!23}
!23 = distinct !{!23, !21}
!24 = distinct !{!24, !14, !25, !26}
!25 = !{!"llvm.loop.isvectorized", i32 1}
!26 = !{!"llvm.loop.unroll.runtime.disable"}
!27 = distinct !{!27, !14, !25}
!28 = distinct !{!28, !14}
!29 = !{!30, !30, i64 0}
!30 = !{!"float", !9, i64 0}
!31 = !{!32}
!32 = distinct !{!32, !33}
!33 = distinct !{!33, !"LVerDomain"}
!34 = !{!35}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !14, !25, !26}
!37 = distinct !{!37, !14, !25}
!38 = distinct !{!38, !14}
!39 = !{!40, !40, i64 0}
!40 = !{!"double", !9, i64 0}
!41 = !{!42}
!42 = distinct !{!42, !43}
!43 = distinct !{!43, !"LVerDomain"}
!44 = !{!45}
!45 = distinct !{!45, !43}
!46 = distinct !{!46, !14, !25, !26}
!47 = distinct !{!47, !14, !25}
!48 = distinct !{!48, !14}
!49 = !{i64 0, i64 16, !50}
!50 = !{!9, !9, i64 0}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}
!53 = distinct !{!53, !14, !54}
!54 = !{!"llvm.loop.unroll.count", i32 4}
!55 = distinct !{!55, !14, !56}
!56 = !{!"llvm.loop.unroll.disable"}
!57 = distinct !{!57, !14}
!58 = distinct !{!58, !14}
!59 = distinct !{!59, !14}
!60 = distinct !{!60, !14}
!61 = distinct !{!61, !14}
!62 = !{!63}
!63 = distinct !{!63, !64}
!64 = distinct !{!64, !"LVerDomain"}
!65 = !{!66}
!66 = distinct !{!66, !64}
!67 = distinct !{!67, !14, !25, !26}
!68 = distinct !{!68, !14, !25}
!69 = distinct !{!69, !14}
!70 = !{!71}
!71 = distinct !{!71, !72}
!72 = distinct !{!72, !"LVerDomain"}
!73 = !{!74}
!74 = distinct !{!74, !72}
!75 = distinct !{!75, !14, !25, !26}
!76 = distinct !{!76, !14, !25}
!77 = distinct !{!77, !14}
!78 = !{!79}
!79 = distinct !{!79, !80}
!80 = distinct !{!80, !"LVerDomain"}
!81 = !{!82}
!82 = distinct !{!82, !80}
!83 = distinct !{!83, !14, !25, !26}
!84 = distinct !{!84, !14, !25}
!85 = distinct !{!85, !14}
!86 = distinct !{!86, !14}
!87 = distinct !{!87, !14, !54}
!88 = distinct !{!88, !14, !56}
!89 = distinct !{!89, !14}
!90 = distinct !{!90, !14}
!91 = distinct !{!91, !14}
!92 = distinct !{!92, !14}
!93 = !{!94}
!94 = distinct !{!94, !95}
!95 = distinct !{!95, !"LVerDomain"}
!96 = !{!97}
!97 = distinct !{!97, !95}
!98 = distinct !{!98, !14, !25, !26}
!99 = distinct !{!99, !14, !25}
!100 = distinct !{!100, !14}
!101 = !{!102}
!102 = distinct !{!102, !103}
!103 = distinct !{!103, !"LVerDomain"}
!104 = !{!105}
!105 = distinct !{!105, !103}
!106 = distinct !{!106, !14, !25, !26}
!107 = distinct !{!107, !14, !25}
!108 = distinct !{!108, !14}
!109 = !{!110}
!110 = distinct !{!110, !111}
!111 = distinct !{!111, !"LVerDomain"}
!112 = !{!113}
!113 = distinct !{!113, !111}
!114 = distinct !{!114, !14, !25, !26}
!115 = distinct !{!115, !14, !25}
!116 = distinct !{!116, !14}
!117 = distinct !{!117, !14}
!118 = distinct !{!118, !14, !54}
!119 = distinct !{!119, !14, !56}
!120 = distinct !{!120, !14}
!121 = distinct !{!121, !14}
!122 = distinct !{!122, !14}
!123 = distinct !{!123, !14}
!124 = !{!125}
!125 = distinct !{!125, !126}
!126 = distinct !{!126, !"LVerDomain"}
!127 = !{!128}
!128 = distinct !{!128, !126}
!129 = distinct !{!129, !14, !25, !26}
!130 = distinct !{!130, !14, !25}
!131 = distinct !{!131, !14}
!132 = !{!133}
!133 = distinct !{!133, !134}
!134 = distinct !{!134, !"LVerDomain"}
!135 = !{!136}
!136 = distinct !{!136, !134}
!137 = distinct !{!137, !14, !25, !26}
!138 = distinct !{!138, !14, !25}
!139 = distinct !{!139, !14}
!140 = !{!141}
!141 = distinct !{!141, !142}
!142 = distinct !{!142, !"LVerDomain"}
!143 = !{!144}
!144 = distinct !{!144, !142}
!145 = distinct !{!145, !14, !25, !26}
!146 = distinct !{!146, !14, !25}
!147 = distinct !{!147, !14}
!148 = distinct !{!148, !14}
!149 = distinct !{!149, !14, !54}
!150 = distinct !{!150, !14, !56}
!151 = distinct !{!151, !14}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass