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

@.str.9 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_itrans_internal = external hidden unnamed_addr constant [241 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [61 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
declare dso_local void @libxsmm_itrans_scratch(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @libxsmm_itrans_scratch_jit(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i64) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_itrans_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, ptr noundef %9, i64 %10, i32 noundef %11, i32 noundef %12) #2 {
  %14 = alloca %union.libxsmm_xcopykernel, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %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 ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i8, align 1
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca i32, align 4
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %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 i8, align 1
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca i8, align 1
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca ptr, align 8
  %77 = alloca ptr, align 8
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca ptr, align 8
  %81 = alloca ptr, align 8
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca ptr, align 8
  %86 = alloca i8, align 1
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca ptr, align 8
  %90 = alloca ptr, align 8
  %91 = alloca i8, align 1
  %92 = getelementptr inbounds %union.libxsmm_xcopykernel, ptr %14, i32 0, i32 0
  %93 = inttoptr i64 %10 to ptr
  store ptr %93, ptr %92, align 8
  store ptr %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !5
  store i32 %2, ptr %17, align 4, !tbaa !9
  store i32 %3, ptr %18, align 4, !tbaa !9
  store i32 %4, ptr %19, align 4, !tbaa !9
  store i32 %5, ptr %20, align 4, !tbaa !9
  store i32 %6, ptr %21, align 4, !tbaa !9
  store i32 %7, ptr %22, align 4, !tbaa !9
  store i32 %8, ptr %23, align 4, !tbaa !9
  store ptr %9, ptr %24, align 8, !tbaa !5
  store i32 %11, ptr %25, align 4, !tbaa !9
  store i32 %12, ptr %26, align 4, !tbaa !9
  %94 = load ptr, ptr %24, align 8, !tbaa !5
  %95 = icmp ne ptr null, %94
  br i1 %95, label %96, label %976

96:                                               ; preds = %13
  %97 = load i32, ptr %23, align 4, !tbaa !9
  %98 = icmp ne i32 0, %97
  br i1 %98, label %99, label %541

99:                                               ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  %100 = load ptr, ptr %16, align 8, !tbaa !5
  %101 = icmp eq ptr null, %100
  br i1 %101, label %102, label %463

102:                                              ; preds = %99
  %103 = load i32, ptr %18, align 4, !tbaa !9
  %104 = load i32, ptr %19, align 4, !tbaa !9
  %105 = icmp eq i32 %103, %104
  br i1 %105, label %106, label %111

106:                                              ; preds = %102
  %107 = load i32, ptr %20, align 4, !tbaa !9
  %108 = load i32, ptr %21, align 4, !tbaa !9
  %109 = icmp eq i32 %107, %108
  br i1 %109, label %110, label %111

110:                                              ; preds = %106
  br label %112

111:                                              ; preds = %106, %102
  call void @__assert_fail(ptr noundef @.str.54, ptr noundef @.str.9, i32 noundef 542, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

112:                                              ; preds = %110
  %113 = load i32, ptr %25, align 4, !tbaa !9
  %114 = load i32, ptr %23, align 4, !tbaa !9
  %115 = mul nsw i32 %113, %114
  store i32 %115, ptr %27, align 4, !tbaa !9
  br label %116

116:                                              ; preds = %458, %112
  %117 = load i32, ptr %27, align 4, !tbaa !9
  %118 = load i32, ptr %26, align 4, !tbaa !9
  %119 = load i32, ptr %23, align 4, !tbaa !9
  %120 = mul nsw i32 %118, %119
  %121 = icmp slt i32 %117, %120
  br i1 %121, label %122, label %462

122:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  %123 = load ptr, ptr %15, align 8, !tbaa !5
  %124 = load ptr, ptr %24, align 8, !tbaa !5
  %125 = load i32, ptr %27, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i8, ptr %124, i64 %126
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = load i32, ptr %22, align 4, !tbaa !9
  %130 = sub nsw i32 %128, %129
  %131 = load i32, ptr %17, align 4, !tbaa !9
  %132 = mul i32 %130, %131
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds i8, ptr %123, i64 %133
  store ptr %134, ptr %28, align 8, !tbaa !5
  br label %135

135:                                              ; preds = %122
  %136 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %136, label %344 [
    i32 2, label %137
    i32 4, label %212
    i32 8, label %278
  ]

137:                                              ; preds = %135
  br label %138

138:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %139 = load ptr, ptr %28, align 8, !tbaa !5
  %140 = icmp ne ptr null, %139
  br i1 %140, label %141, label %146

141:                                              ; preds = %138
  %142 = load i32, ptr %18, align 4, !tbaa !9
  %143 = load i32, ptr %20, align 4, !tbaa !9
  %144 = icmp sle i32 %142, %143
  br i1 %144, label %145, label %146

145:                                              ; preds = %141
  br label %147

146:                                              ; preds = %141, %138
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 545, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

147:                                              ; preds = %145
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %206, %147
  %149 = load i32, ptr %29, align 4, !tbaa !9
  %150 = load i32, ptr %18, align 4, !tbaa !9
  %151 = icmp slt i32 %149, %150
  br i1 %151, label %152, label %209

152:                                              ; preds = %148
  store i32 0, ptr %30, align 4, !tbaa !9
  br label %153

153:                                              ; preds = %202, %152
  %154 = load i32, ptr %30, align 4, !tbaa !9
  %155 = load i32, ptr %29, align 4, !tbaa !9
  %156 = icmp slt i32 %154, %155
  br i1 %156, label %157, label %205

157:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  %158 = load ptr, ptr %28, align 8, !tbaa !5
  %159 = load i32, ptr %20, align 4, !tbaa !9
  %160 = sext i32 %159 to i64
  %161 = load i32, ptr %29, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = mul i64 %160, %162
  %164 = getelementptr inbounds i16, ptr %158, i64 %163
  %165 = load i32, ptr %30, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds i16, ptr %164, i64 %166
  store ptr %167, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  %168 = load ptr, ptr %28, align 8, !tbaa !5
  %169 = load i32, ptr %20, align 4, !tbaa !9
  %170 = sext i32 %169 to i64
  %171 = load i32, ptr %30, align 4, !tbaa !9
  %172 = sext i32 %171 to i64
  %173 = mul i64 %170, %172
  %174 = getelementptr inbounds i16, ptr %168, i64 %173
  %175 = load i32, ptr %29, align 4, !tbaa !9
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds i16, ptr %174, i64 %176
  store ptr %177, ptr %32, align 8, !tbaa !5
  %178 = load ptr, ptr %32, align 8, !tbaa !5
  %179 = load i16, ptr %178, align 2, !tbaa !11
  %180 = sext i16 %179 to i32
  %181 = load ptr, ptr %31, align 8, !tbaa !5
  %182 = load i16, ptr %181, align 2, !tbaa !11
  %183 = sext i16 %182 to i32
  %184 = xor i32 %183, %180
  %185 = trunc i32 %184 to i16
  store i16 %185, ptr %181, align 2, !tbaa !11
  %186 = load ptr, ptr %31, align 8, !tbaa !5
  %187 = load i16, ptr %186, align 2, !tbaa !11
  %188 = sext i16 %187 to i32
  %189 = load ptr, ptr %32, align 8, !tbaa !5
  %190 = load i16, ptr %189, align 2, !tbaa !11
  %191 = sext i16 %190 to i32
  %192 = xor i32 %191, %188
  %193 = trunc i32 %192 to i16
  store i16 %193, ptr %189, align 2, !tbaa !11
  %194 = load ptr, ptr %32, align 8, !tbaa !5
  %195 = load i16, ptr %194, align 2, !tbaa !11
  %196 = sext i16 %195 to i32
  %197 = load ptr, ptr %31, align 8, !tbaa !5
  %198 = load i16, ptr %197, align 2, !tbaa !11
  %199 = sext i16 %198 to i32
  %200 = xor i32 %199, %196
  %201 = trunc i32 %200 to i16
  store i16 %201, ptr %197, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  br label %202

202:                                              ; preds = %157
  %203 = load i32, ptr %30, align 4, !tbaa !9
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %30, align 4, !tbaa !9
  br label %153, !llvm.loop !13

205:                                              ; preds = %153
  br label %206

206:                                              ; preds = %205
  %207 = load i32, ptr %29, align 4, !tbaa !9
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %29, align 4, !tbaa !9
  br label %148, !llvm.loop !15

209:                                              ; preds = %148
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #3
  br label %210

210:                                              ; preds = %209
  br label %211

211:                                              ; preds = %210
  br label %455

212:                                              ; preds = %135
  br label %213

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  %214 = load ptr, ptr %28, align 8, !tbaa !5
  %215 = icmp ne ptr null, %214
  br i1 %215, label %216, label %221

216:                                              ; preds = %213
  %217 = load i32, ptr %18, align 4, !tbaa !9
  %218 = load i32, ptr %20, align 4, !tbaa !9
  %219 = icmp sle i32 %217, %218
  br i1 %219, label %220, label %221

220:                                              ; preds = %216
  br label %222

221:                                              ; preds = %216, %213
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 545, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

222:                                              ; preds = %220
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %223

223:                                              ; preds = %272, %222
  %224 = load i32, ptr %33, align 4, !tbaa !9
  %225 = load i32, ptr %18, align 4, !tbaa !9
  %226 = icmp slt i32 %224, %225
  br i1 %226, label %227, label %275

227:                                              ; preds = %223
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %268, %227
  %229 = load i32, ptr %34, align 4, !tbaa !9
  %230 = load i32, ptr %33, align 4, !tbaa !9
  %231 = icmp slt i32 %229, %230
  br i1 %231, label %232, label %271

232:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  %233 = load ptr, ptr %28, align 8, !tbaa !5
  %234 = load i32, ptr %20, align 4, !tbaa !9
  %235 = sext i32 %234 to i64
  %236 = load i32, ptr %33, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = mul i64 %235, %237
  %239 = getelementptr inbounds i32, ptr %233, i64 %238
  %240 = load i32, ptr %34, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %239, i64 %241
  store ptr %242, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  %243 = load ptr, ptr %28, align 8, !tbaa !5
  %244 = load i32, ptr %20, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = load i32, ptr %34, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = mul i64 %245, %247
  %249 = getelementptr inbounds i32, ptr %243, i64 %248
  %250 = load i32, ptr %33, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds i32, ptr %249, i64 %251
  store ptr %252, ptr %36, align 8, !tbaa !5
  %253 = load ptr, ptr %36, align 8, !tbaa !5
  %254 = load i32, ptr %253, align 4, !tbaa !9
  %255 = load ptr, ptr %35, align 8, !tbaa !5
  %256 = load i32, ptr %255, align 4, !tbaa !9
  %257 = xor i32 %256, %254
  store i32 %257, ptr %255, align 4, !tbaa !9
  %258 = load ptr, ptr %35, align 8, !tbaa !5
  %259 = load i32, ptr %258, align 4, !tbaa !9
  %260 = load ptr, ptr %36, align 8, !tbaa !5
  %261 = load i32, ptr %260, align 4, !tbaa !9
  %262 = xor i32 %261, %259
  store i32 %262, ptr %260, align 4, !tbaa !9
  %263 = load ptr, ptr %36, align 8, !tbaa !5
  %264 = load i32, ptr %263, align 4, !tbaa !9
  %265 = load ptr, ptr %35, align 8, !tbaa !5
  %266 = load i32, ptr %265, align 4, !tbaa !9
  %267 = xor i32 %266, %264
  store i32 %267, ptr %265, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  br label %268

268:                                              ; preds = %232
  %269 = load i32, ptr %34, align 4, !tbaa !9
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %34, align 4, !tbaa !9
  br label %228, !llvm.loop !16

271:                                              ; preds = %228
  br label %272

272:                                              ; preds = %271
  %273 = load i32, ptr %33, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %33, align 4, !tbaa !9
  br label %223, !llvm.loop !17

275:                                              ; preds = %223
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  br label %276

276:                                              ; preds = %275
  br label %277

277:                                              ; preds = %276
  br label %455

278:                                              ; preds = %135
  br label %279

279:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %280 = load ptr, ptr %28, align 8, !tbaa !5
  %281 = icmp ne ptr null, %280
  br i1 %281, label %282, label %287

282:                                              ; preds = %279
  %283 = load i32, ptr %18, align 4, !tbaa !9
  %284 = load i32, ptr %20, align 4, !tbaa !9
  %285 = icmp sle i32 %283, %284
  br i1 %285, label %286, label %287

286:                                              ; preds = %282
  br label %288

287:                                              ; preds = %282, %279
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 545, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

288:                                              ; preds = %286
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %338, %288
  %290 = load i32, ptr %37, align 4, !tbaa !9
  %291 = load i32, ptr %18, align 4, !tbaa !9
  %292 = icmp slt i32 %290, %291
  br i1 %292, label %293, label %341

293:                                              ; preds = %289
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %294

294:                                              ; preds = %334, %293
  %295 = load i32, ptr %38, align 4, !tbaa !9
  %296 = load i32, ptr %37, align 4, !tbaa !9
  %297 = icmp slt i32 %295, %296
  br i1 %297, label %298, label %337

298:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  %299 = load ptr, ptr %28, align 8, !tbaa !5
  %300 = load i32, ptr %20, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = load i32, ptr %37, align 4, !tbaa !9
  %303 = sext i32 %302 to i64
  %304 = mul i64 %301, %303
  %305 = getelementptr inbounds i64, ptr %299, i64 %304
  %306 = load i32, ptr %38, align 4, !tbaa !9
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i64, ptr %305, i64 %307
  store ptr %308, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  %309 = load ptr, ptr %28, align 8, !tbaa !5
  %310 = load i32, ptr %20, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = load i32, ptr %38, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = mul i64 %311, %313
  %315 = getelementptr inbounds i64, ptr %309, i64 %314
  %316 = load i32, ptr %37, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i64, ptr %315, i64 %317
  store ptr %318, ptr %40, align 8, !tbaa !5
  %319 = load ptr, ptr %40, align 8, !tbaa !5
  %320 = load i64, ptr %319, align 8, !tbaa !18
  %321 = load ptr, ptr %39, align 8, !tbaa !5
  %322 = load i64, ptr %321, align 8, !tbaa !18
  %323 = xor i64 %322, %320
  store i64 %323, ptr %321, align 8, !tbaa !18
  %324 = load ptr, ptr %39, align 8, !tbaa !5
  %325 = load i64, ptr %324, align 8, !tbaa !18
  %326 = load ptr, ptr %40, align 8, !tbaa !5
  %327 = load i64, ptr %326, align 8, !tbaa !18
  %328 = xor i64 %327, %325
  store i64 %328, ptr %326, align 8, !tbaa !18
  %329 = load ptr, ptr %40, align 8, !tbaa !5
  %330 = load i64, ptr %329, align 8, !tbaa !18
  %331 = load ptr, ptr %39, align 8, !tbaa !5
  %332 = load i64, ptr %331, align 8, !tbaa !18
  %333 = xor i64 %332, %330
  store i64 %333, ptr %331, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  br label %334

334:                                              ; preds = %298
  %335 = load i32, ptr %38, align 4, !tbaa !9
  %336 = add nsw i32 %335, 1
  store i32 %336, ptr %38, align 4, !tbaa !9
  br label %294, !llvm.loop !20

337:                                              ; preds = %294
  br label %338

338:                                              ; preds = %337
  %339 = load i32, ptr %37, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %37, align 4, !tbaa !9
  br label %289, !llvm.loop !21

341:                                              ; preds = %289
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  br label %455

344:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #3
  %345 = load i32, ptr %17, align 4, !tbaa !9
  %346 = trunc i32 %345 to i8
  store i8 %346, ptr %41, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %347 = load ptr, ptr %28, align 8, !tbaa !5
  %348 = icmp ne ptr null, %347
  br i1 %348, label %349, label %354

349:                                              ; preds = %344
  %350 = load i32, ptr %18, align 4, !tbaa !9
  %351 = load i32, ptr %20, align 4, !tbaa !9
  %352 = icmp sle i32 %350, %351
  br i1 %352, label %353, label %354

353:                                              ; preds = %349
  br label %355

354:                                              ; preds = %349, %344
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 545, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

355:                                              ; preds = %353
  %356 = load i32, ptr %17, align 4, !tbaa !9
  %357 = icmp ult i32 0, %356
  br i1 %357, label %358, label %362

358:                                              ; preds = %355
  %359 = load i32, ptr %17, align 4, !tbaa !9
  %360 = icmp ule i32 %359, 127
  br i1 %360, label %361, label %362

361:                                              ; preds = %358
  br label %363

362:                                              ; preds = %358, %355
  call void @__assert_fail(ptr noundef @.str.56, ptr noundef @.str.9, i32 noundef 545, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

363:                                              ; preds = %361
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %364

364:                                              ; preds = %451, %363
  %365 = load i32, ptr %42, align 4, !tbaa !9
  %366 = load i32, ptr %18, align 4, !tbaa !9
  %367 = icmp slt i32 %365, %366
  br i1 %367, label %368, label %454

368:                                              ; preds = %364
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %447, %368
  %370 = load i32, ptr %43, align 4, !tbaa !9
  %371 = load i32, ptr %42, align 4, !tbaa !9
  %372 = icmp slt i32 %370, %371
  br i1 %372, label %373, label %450

373:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  %374 = load ptr, ptr %28, align 8, !tbaa !5
  %375 = load i32, ptr %20, align 4, !tbaa !9
  %376 = load i32, ptr %42, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  %378 = load i32, ptr %43, align 4, !tbaa !9
  %379 = add nsw i32 %377, %378
  %380 = load i32, ptr %17, align 4, !tbaa !9
  %381 = mul i32 %379, %380
  %382 = zext i32 %381 to i64
  %383 = getelementptr inbounds i8, ptr %374, i64 %382
  store ptr %383, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  %384 = load ptr, ptr %28, align 8, !tbaa !5
  %385 = load i32, ptr %20, align 4, !tbaa !9
  %386 = load i32, ptr %43, align 4, !tbaa !9
  %387 = mul nsw i32 %385, %386
  %388 = load i32, ptr %42, align 4, !tbaa !9
  %389 = add nsw i32 %387, %388
  %390 = load i32, ptr %17, align 4, !tbaa !9
  %391 = mul i32 %389, %390
  %392 = zext i32 %391 to i64
  %393 = getelementptr inbounds i8, ptr %384, i64 %392
  store ptr %393, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #3
  store i8 0, ptr %46, align 1, !tbaa !22
  br label %394

394:                                              ; preds = %443, %373
  %395 = load i8, ptr %46, align 1, !tbaa !22
  %396 = sext i8 %395 to i32
  %397 = load i8, ptr %41, align 1, !tbaa !22
  %398 = sext i8 %397 to i32
  %399 = icmp slt i32 %396, %398
  br i1 %399, label %400, label %446

400:                                              ; preds = %394
  %401 = load ptr, ptr %45, align 8, !tbaa !5
  %402 = load i8, ptr %46, align 1, !tbaa !22
  %403 = sext i8 %402 to i64
  %404 = getelementptr inbounds i8, ptr %401, i64 %403
  %405 = load i8, ptr %404, align 1, !tbaa !22
  %406 = sext i8 %405 to i32
  %407 = load ptr, ptr %44, align 8, !tbaa !5
  %408 = load i8, ptr %46, align 1, !tbaa !22
  %409 = sext i8 %408 to i64
  %410 = getelementptr inbounds i8, ptr %407, i64 %409
  %411 = load i8, ptr %410, align 1, !tbaa !22
  %412 = sext i8 %411 to i32
  %413 = xor i32 %412, %406
  %414 = trunc i32 %413 to i8
  store i8 %414, ptr %410, align 1, !tbaa !22
  %415 = load ptr, ptr %44, align 8, !tbaa !5
  %416 = load i8, ptr %46, align 1, !tbaa !22
  %417 = sext i8 %416 to i64
  %418 = getelementptr inbounds i8, ptr %415, i64 %417
  %419 = load i8, ptr %418, align 1, !tbaa !22
  %420 = sext i8 %419 to i32
  %421 = load ptr, ptr %45, align 8, !tbaa !5
  %422 = load i8, ptr %46, align 1, !tbaa !22
  %423 = sext i8 %422 to i64
  %424 = getelementptr inbounds i8, ptr %421, i64 %423
  %425 = load i8, ptr %424, align 1, !tbaa !22
  %426 = sext i8 %425 to i32
  %427 = xor i32 %426, %420
  %428 = trunc i32 %427 to i8
  store i8 %428, ptr %424, align 1, !tbaa !22
  %429 = load ptr, ptr %45, align 8, !tbaa !5
  %430 = load i8, ptr %46, align 1, !tbaa !22
  %431 = sext i8 %430 to i64
  %432 = getelementptr inbounds i8, ptr %429, i64 %431
  %433 = load i8, ptr %432, align 1, !tbaa !22
  %434 = sext i8 %433 to i32
  %435 = load ptr, ptr %44, align 8, !tbaa !5
  %436 = load i8, ptr %46, align 1, !tbaa !22
  %437 = sext i8 %436 to i64
  %438 = getelementptr inbounds i8, ptr %435, i64 %437
  %439 = load i8, ptr %438, align 1, !tbaa !22
  %440 = sext i8 %439 to i32
  %441 = xor i32 %440, %434
  %442 = trunc i32 %441 to i8
  store i8 %442, ptr %438, align 1, !tbaa !22
  br label %443

443:                                              ; preds = %400
  %444 = load i8, ptr %46, align 1, !tbaa !22
  %445 = add i8 %444, 1
  store i8 %445, ptr %46, align 1, !tbaa !22
  br label %394, !llvm.loop !23

446:                                              ; preds = %394
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  br label %447

447:                                              ; preds = %446
  %448 = load i32, ptr %43, align 4, !tbaa !9
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %43, align 4, !tbaa !9
  br label %369, !llvm.loop !24

450:                                              ; preds = %369
  br label %451

451:                                              ; preds = %450
  %452 = load i32, ptr %42, align 4, !tbaa !9
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %42, align 4, !tbaa !9
  br label %364, !llvm.loop !25

454:                                              ; preds = %364
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #3
  br label %455

455:                                              ; preds = %454, %343, %277, %211
  br label %456

456:                                              ; preds = %455
  br label %457

457:                                              ; preds = %456
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  br label %458

458:                                              ; preds = %457
  %459 = load i32, ptr %23, align 4, !tbaa !9
  %460 = load i32, ptr %27, align 4, !tbaa !9
  %461 = add nsw i32 %460, %459
  store i32 %461, ptr %27, align 4, !tbaa !9
  br label %116, !llvm.loop !26

462:                                              ; preds = %116
  br label %540

463:                                              ; preds = %99
  %464 = load ptr, ptr %14, align 8, !tbaa !22
  %465 = icmp ne ptr null, %464
  br i1 %465, label %466, label %504

466:                                              ; preds = %463
  %467 = load i32, ptr %25, align 4, !tbaa !9
  %468 = load i32, ptr %23, align 4, !tbaa !9
  %469 = mul nsw i32 %467, %468
  store i32 %469, ptr %27, align 4, !tbaa !9
  br label %470

470:                                              ; preds = %499, %466
  %471 = load i32, ptr %27, align 4, !tbaa !9
  %472 = load i32, ptr %26, align 4, !tbaa !9
  %473 = load i32, ptr %23, align 4, !tbaa !9
  %474 = mul nsw i32 %472, %473
  %475 = icmp slt i32 %471, %474
  br i1 %475, label %476, label %503

476:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  %477 = load ptr, ptr %15, align 8, !tbaa !5
  %478 = load ptr, ptr %24, align 8, !tbaa !5
  %479 = load i32, ptr %27, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds i8, ptr %478, i64 %480
  %482 = load i32, ptr %481, align 4, !tbaa !9
  %483 = load i32, ptr %22, align 4, !tbaa !9
  %484 = sub nsw i32 %482, %483
  %485 = load i32, ptr %17, align 4, !tbaa !9
  %486 = mul i32 %484, %485
  %487 = zext i32 %486 to i64
  %488 = getelementptr inbounds i8, ptr %477, i64 %487
  store ptr %488, ptr %47, align 8, !tbaa !5
  %489 = load ptr, ptr %47, align 8, !tbaa !5
  %490 = load ptr, ptr %16, align 8, !tbaa !5
  %491 = load i32, ptr %17, align 4, !tbaa !9
  %492 = load i32, ptr %18, align 4, !tbaa !9
  %493 = load i32, ptr %19, align 4, !tbaa !9
  %494 = load i32, ptr %20, align 4, !tbaa !9
  %495 = load i32, ptr %21, align 4, !tbaa !9
  %496 = getelementptr inbounds %union.libxsmm_xcopykernel, ptr %14, i32 0, i32 0
  %497 = load ptr, ptr %496, align 8
  %498 = ptrtoint ptr %497 to i64
  call void @libxsmm_itrans_scratch_jit(ptr noundef %489, ptr noundef %490, i32 noundef %491, i32 noundef %492, i32 noundef %493, i32 noundef %494, i32 noundef %495, i64 %498)
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  br label %499

499:                                              ; preds = %476
  %500 = load i32, ptr %23, align 4, !tbaa !9
  %501 = load i32, ptr %27, align 4, !tbaa !9
  %502 = add nsw i32 %501, %500
  store i32 %502, ptr %27, align 4, !tbaa !9
  br label %470, !llvm.loop !27

503:                                              ; preds = %470
  br label %539

504:                                              ; preds = %463
  %505 = load i32, ptr %25, align 4, !tbaa !9
  %506 = load i32, ptr %23, align 4, !tbaa !9
  %507 = mul nsw i32 %505, %506
  store i32 %507, ptr %27, align 4, !tbaa !9
  br label %508

508:                                              ; preds = %534, %504
  %509 = load i32, ptr %27, align 4, !tbaa !9
  %510 = load i32, ptr %26, align 4, !tbaa !9
  %511 = load i32, ptr %23, align 4, !tbaa !9
  %512 = mul nsw i32 %510, %511
  %513 = icmp slt i32 %509, %512
  br i1 %513, label %514, label %538

514:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  %515 = load ptr, ptr %15, align 8, !tbaa !5
  %516 = load ptr, ptr %24, align 8, !tbaa !5
  %517 = load i32, ptr %27, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds i8, ptr %516, i64 %518
  %520 = load i32, ptr %519, align 4, !tbaa !9
  %521 = load i32, ptr %22, align 4, !tbaa !9
  %522 = sub nsw i32 %520, %521
  %523 = load i32, ptr %17, align 4, !tbaa !9
  %524 = mul i32 %522, %523
  %525 = zext i32 %524 to i64
  %526 = getelementptr inbounds i8, ptr %515, i64 %525
  store ptr %526, ptr %48, align 8, !tbaa !5
  %527 = load ptr, ptr %48, align 8, !tbaa !5
  %528 = load ptr, ptr %16, align 8, !tbaa !5
  %529 = load i32, ptr %17, align 4, !tbaa !9
  %530 = load i32, ptr %18, align 4, !tbaa !9
  %531 = load i32, ptr %19, align 4, !tbaa !9
  %532 = load i32, ptr %20, align 4, !tbaa !9
  %533 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_itrans_scratch(ptr noundef %527, ptr noundef %528, i32 noundef %529, i32 noundef %530, i32 noundef %531, i32 noundef %532, i32 noundef %533)
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  br label %534

534:                                              ; preds = %514
  %535 = load i32, ptr %23, align 4, !tbaa !9
  %536 = load i32, ptr %27, align 4, !tbaa !9
  %537 = add nsw i32 %536, %535
  store i32 %537, ptr %27, align 4, !tbaa !9
  br label %508, !llvm.loop !28

538:                                              ; preds = %508
  br label %539

539:                                              ; preds = %538, %503
  br label %540

540:                                              ; preds = %539, %462
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  br label %975

541:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  %542 = load ptr, ptr %24, align 8, !tbaa !5
  %543 = load i32, ptr %542, align 4, !tbaa !9
  %544 = sext i32 %543 to i64
  %545 = load i32, ptr %22, align 4, !tbaa !9
  %546 = sext i32 %545 to i64
  %547 = mul i64 %546, 8
  %548 = sub i64 %544, %547
  %549 = trunc i64 %548 to i32
  store i32 %549, ptr %49, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #3
  %550 = load ptr, ptr %15, align 8, !tbaa !5
  %551 = load i32, ptr %49, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = load i32, ptr %26, align 4, !tbaa !9
  %554 = sext i32 %553 to i64
  %555 = mul i64 %552, %554
  %556 = getelementptr inbounds i8, ptr %550, i64 %555
  store ptr %556, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #3
  %557 = load ptr, ptr %15, align 8, !tbaa !5
  %558 = load i32, ptr %25, align 4, !tbaa !9
  %559 = sext i32 %558 to i64
  %560 = load i32, ptr %49, align 4, !tbaa !9
  %561 = sext i32 %560 to i64
  %562 = mul i64 %559, %561
  %563 = getelementptr inbounds i8, ptr %557, i64 %562
  store ptr %563, ptr %51, align 8, !tbaa !5
  %564 = load ptr, ptr %16, align 8, !tbaa !5
  %565 = icmp eq ptr null, %564
  br i1 %565, label %566, label %917

566:                                              ; preds = %541
  %567 = load i32, ptr %18, align 4, !tbaa !9
  %568 = load i32, ptr %19, align 4, !tbaa !9
  %569 = icmp eq i32 %567, %568
  br i1 %569, label %570, label %575

570:                                              ; preds = %566
  %571 = load i32, ptr %20, align 4, !tbaa !9
  %572 = load i32, ptr %21, align 4, !tbaa !9
  %573 = icmp eq i32 %571, %572
  br i1 %573, label %574, label %575

574:                                              ; preds = %570
  br label %576

575:                                              ; preds = %570, %566
  call void @__assert_fail(ptr noundef @.str.54, ptr noundef @.str.9, i32 noundef 568, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

576:                                              ; preds = %574
  br label %577

577:                                              ; preds = %911, %576
  %578 = load ptr, ptr %51, align 8, !tbaa !5
  %579 = load ptr, ptr %50, align 8, !tbaa !5
  %580 = icmp ult ptr %578, %579
  br i1 %580, label %581, label %916

581:                                              ; preds = %577
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #3
  %582 = load ptr, ptr %51, align 8, !tbaa !5
  %583 = load ptr, ptr %582, align 8, !tbaa !5
  store ptr %583, ptr %52, align 8, !tbaa !5
  %584 = load ptr, ptr %52, align 8, !tbaa !5
  %585 = icmp ne ptr null, %584
  br i1 %585, label %586, label %910

586:                                              ; preds = %581
  br label %587

587:                                              ; preds = %586
  %588 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %588, label %796 [
    i32 2, label %589
    i32 4, label %664
    i32 8, label %730
  ]

589:                                              ; preds = %587
  br label %590

590:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #3
  %591 = load ptr, ptr %52, align 8, !tbaa !5
  %592 = icmp ne ptr null, %591
  br i1 %592, label %593, label %598

593:                                              ; preds = %590
  %594 = load i32, ptr %18, align 4, !tbaa !9
  %595 = load i32, ptr %20, align 4, !tbaa !9
  %596 = icmp sle i32 %594, %595
  br i1 %596, label %597, label %598

597:                                              ; preds = %593
  br label %599

598:                                              ; preds = %593, %590
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

599:                                              ; preds = %597
  store i32 0, ptr %53, align 4, !tbaa !9
  br label %600

600:                                              ; preds = %658, %599
  %601 = load i32, ptr %53, align 4, !tbaa !9
  %602 = load i32, ptr %18, align 4, !tbaa !9
  %603 = icmp slt i32 %601, %602
  br i1 %603, label %604, label %661

604:                                              ; preds = %600
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %605

605:                                              ; preds = %654, %604
  %606 = load i32, ptr %54, align 4, !tbaa !9
  %607 = load i32, ptr %53, align 4, !tbaa !9
  %608 = icmp slt i32 %606, %607
  br i1 %608, label %609, label %657

609:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #3
  %610 = load ptr, ptr %52, align 8, !tbaa !5
  %611 = load i32, ptr %20, align 4, !tbaa !9
  %612 = sext i32 %611 to i64
  %613 = load i32, ptr %53, align 4, !tbaa !9
  %614 = sext i32 %613 to i64
  %615 = mul i64 %612, %614
  %616 = getelementptr inbounds i16, ptr %610, i64 %615
  %617 = load i32, ptr %54, align 4, !tbaa !9
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds i16, ptr %616, i64 %618
  store ptr %619, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #3
  %620 = load ptr, ptr %52, align 8, !tbaa !5
  %621 = load i32, ptr %20, align 4, !tbaa !9
  %622 = sext i32 %621 to i64
  %623 = load i32, ptr %54, align 4, !tbaa !9
  %624 = sext i32 %623 to i64
  %625 = mul i64 %622, %624
  %626 = getelementptr inbounds i16, ptr %620, i64 %625
  %627 = load i32, ptr %53, align 4, !tbaa !9
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i16, ptr %626, i64 %628
  store ptr %629, ptr %56, align 8, !tbaa !5
  %630 = load ptr, ptr %56, align 8, !tbaa !5
  %631 = load i16, ptr %630, align 2, !tbaa !11
  %632 = sext i16 %631 to i32
  %633 = load ptr, ptr %55, align 8, !tbaa !5
  %634 = load i16, ptr %633, align 2, !tbaa !11
  %635 = sext i16 %634 to i32
  %636 = xor i32 %635, %632
  %637 = trunc i32 %636 to i16
  store i16 %637, ptr %633, align 2, !tbaa !11
  %638 = load ptr, ptr %55, align 8, !tbaa !5
  %639 = load i16, ptr %638, align 2, !tbaa !11
  %640 = sext i16 %639 to i32
  %641 = load ptr, ptr %56, align 8, !tbaa !5
  %642 = load i16, ptr %641, align 2, !tbaa !11
  %643 = sext i16 %642 to i32
  %644 = xor i32 %643, %640
  %645 = trunc i32 %644 to i16
  store i16 %645, ptr %641, align 2, !tbaa !11
  %646 = load ptr, ptr %56, align 8, !tbaa !5
  %647 = load i16, ptr %646, align 2, !tbaa !11
  %648 = sext i16 %647 to i32
  %649 = load ptr, ptr %55, align 8, !tbaa !5
  %650 = load i16, ptr %649, align 2, !tbaa !11
  %651 = sext i16 %650 to i32
  %652 = xor i32 %651, %648
  %653 = trunc i32 %652 to i16
  store i16 %653, ptr %649, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #3
  br label %654

654:                                              ; preds = %609
  %655 = load i32, ptr %54, align 4, !tbaa !9
  %656 = add nsw i32 %655, 1
  store i32 %656, ptr %54, align 4, !tbaa !9
  br label %605, !llvm.loop !29

657:                                              ; preds = %605
  br label %658

658:                                              ; preds = %657
  %659 = load i32, ptr %53, align 4, !tbaa !9
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %53, align 4, !tbaa !9
  br label %600, !llvm.loop !30

661:                                              ; preds = %600
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #3
  br label %662

662:                                              ; preds = %661
  br label %663

663:                                              ; preds = %662
  br label %907

664:                                              ; preds = %587
  br label %665

665:                                              ; preds = %664
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #3
  %666 = load ptr, ptr %52, align 8, !tbaa !5
  %667 = icmp ne ptr null, %666
  br i1 %667, label %668, label %673

668:                                              ; preds = %665
  %669 = load i32, ptr %18, align 4, !tbaa !9
  %670 = load i32, ptr %20, align 4, !tbaa !9
  %671 = icmp sle i32 %669, %670
  br i1 %671, label %672, label %673

672:                                              ; preds = %668
  br label %674

673:                                              ; preds = %668, %665
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

674:                                              ; preds = %672
  store i32 0, ptr %57, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %724, %674
  %676 = load i32, ptr %57, align 4, !tbaa !9
  %677 = load i32, ptr %18, align 4, !tbaa !9
  %678 = icmp slt i32 %676, %677
  br i1 %678, label %679, label %727

679:                                              ; preds = %675
  store i32 0, ptr %58, align 4, !tbaa !9
  br label %680

680:                                              ; preds = %720, %679
  %681 = load i32, ptr %58, align 4, !tbaa !9
  %682 = load i32, ptr %57, align 4, !tbaa !9
  %683 = icmp slt i32 %681, %682
  br i1 %683, label %684, label %723

684:                                              ; preds = %680
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #3
  %685 = load ptr, ptr %52, align 8, !tbaa !5
  %686 = load i32, ptr %20, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = load i32, ptr %57, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = mul i64 %687, %689
  %691 = getelementptr inbounds i32, ptr %685, i64 %690
  %692 = load i32, ptr %58, align 4, !tbaa !9
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds i32, ptr %691, i64 %693
  store ptr %694, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #3
  %695 = load ptr, ptr %52, align 8, !tbaa !5
  %696 = load i32, ptr %20, align 4, !tbaa !9
  %697 = sext i32 %696 to i64
  %698 = load i32, ptr %58, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = mul i64 %697, %699
  %701 = getelementptr inbounds i32, ptr %695, i64 %700
  %702 = load i32, ptr %57, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds i32, ptr %701, i64 %703
  store ptr %704, ptr %60, align 8, !tbaa !5
  %705 = load ptr, ptr %60, align 8, !tbaa !5
  %706 = load i32, ptr %705, align 4, !tbaa !9
  %707 = load ptr, ptr %59, align 8, !tbaa !5
  %708 = load i32, ptr %707, align 4, !tbaa !9
  %709 = xor i32 %708, %706
  store i32 %709, ptr %707, align 4, !tbaa !9
  %710 = load ptr, ptr %59, align 8, !tbaa !5
  %711 = load i32, ptr %710, align 4, !tbaa !9
  %712 = load ptr, ptr %60, align 8, !tbaa !5
  %713 = load i32, ptr %712, align 4, !tbaa !9
  %714 = xor i32 %713, %711
  store i32 %714, ptr %712, align 4, !tbaa !9
  %715 = load ptr, ptr %60, align 8, !tbaa !5
  %716 = load i32, ptr %715, align 4, !tbaa !9
  %717 = load ptr, ptr %59, align 8, !tbaa !5
  %718 = load i32, ptr %717, align 4, !tbaa !9
  %719 = xor i32 %718, %716
  store i32 %719, ptr %717, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #3
  br label %720

720:                                              ; preds = %684
  %721 = load i32, ptr %58, align 4, !tbaa !9
  %722 = add nsw i32 %721, 1
  store i32 %722, ptr %58, align 4, !tbaa !9
  br label %680, !llvm.loop !31

723:                                              ; preds = %680
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %57, align 4, !tbaa !9
  %726 = add nsw i32 %725, 1
  store i32 %726, ptr %57, align 4, !tbaa !9
  br label %675, !llvm.loop !32

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

728:                                              ; preds = %727
  br label %729

729:                                              ; preds = %728
  br label %907

730:                                              ; preds = %587
  br label %731

731:                                              ; preds = %730
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #3
  %732 = load ptr, ptr %52, align 8, !tbaa !5
  %733 = icmp ne ptr null, %732
  br i1 %733, label %734, label %739

734:                                              ; preds = %731
  %735 = load i32, ptr %18, align 4, !tbaa !9
  %736 = load i32, ptr %20, align 4, !tbaa !9
  %737 = icmp sle i32 %735, %736
  br i1 %737, label %738, label %739

738:                                              ; preds = %734
  br label %740

739:                                              ; preds = %734, %731
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

740:                                              ; preds = %738
  store i32 0, ptr %61, align 4, !tbaa !9
  br label %741

741:                                              ; preds = %790, %740
  %742 = load i32, ptr %61, align 4, !tbaa !9
  %743 = load i32, ptr %18, align 4, !tbaa !9
  %744 = icmp slt i32 %742, %743
  br i1 %744, label %745, label %793

745:                                              ; preds = %741
  store i32 0, ptr %62, align 4, !tbaa !9
  br label %746

746:                                              ; preds = %786, %745
  %747 = load i32, ptr %62, align 4, !tbaa !9
  %748 = load i32, ptr %61, align 4, !tbaa !9
  %749 = icmp slt i32 %747, %748
  br i1 %749, label %750, label %789

750:                                              ; preds = %746
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #3
  %751 = load ptr, ptr %52, align 8, !tbaa !5
  %752 = load i32, ptr %20, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = load i32, ptr %61, align 4, !tbaa !9
  %755 = sext i32 %754 to i64
  %756 = mul i64 %753, %755
  %757 = getelementptr inbounds i64, ptr %751, i64 %756
  %758 = load i32, ptr %62, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds i64, ptr %757, i64 %759
  store ptr %760, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #3
  %761 = load ptr, ptr %52, align 8, !tbaa !5
  %762 = load i32, ptr %20, align 4, !tbaa !9
  %763 = sext i32 %762 to i64
  %764 = load i32, ptr %62, align 4, !tbaa !9
  %765 = sext i32 %764 to i64
  %766 = mul i64 %763, %765
  %767 = getelementptr inbounds i64, ptr %761, i64 %766
  %768 = load i32, ptr %61, align 4, !tbaa !9
  %769 = sext i32 %768 to i64
  %770 = getelementptr inbounds i64, ptr %767, i64 %769
  store ptr %770, ptr %64, align 8, !tbaa !5
  %771 = load ptr, ptr %64, align 8, !tbaa !5
  %772 = load i64, ptr %771, align 8, !tbaa !18
  %773 = load ptr, ptr %63, align 8, !tbaa !5
  %774 = load i64, ptr %773, align 8, !tbaa !18
  %775 = xor i64 %774, %772
  store i64 %775, ptr %773, align 8, !tbaa !18
  %776 = load ptr, ptr %63, align 8, !tbaa !5
  %777 = load i64, ptr %776, align 8, !tbaa !18
  %778 = load ptr, ptr %64, align 8, !tbaa !5
  %779 = load i64, ptr %778, align 8, !tbaa !18
  %780 = xor i64 %779, %777
  store i64 %780, ptr %778, align 8, !tbaa !18
  %781 = load ptr, ptr %64, align 8, !tbaa !5
  %782 = load i64, ptr %781, align 8, !tbaa !18
  %783 = load ptr, ptr %63, align 8, !tbaa !5
  %784 = load i64, ptr %783, align 8, !tbaa !18
  %785 = xor i64 %784, %782
  store i64 %785, ptr %783, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #3
  br label %786

786:                                              ; preds = %750
  %787 = load i32, ptr %62, align 4, !tbaa !9
  %788 = add nsw i32 %787, 1
  store i32 %788, ptr %62, align 4, !tbaa !9
  br label %746, !llvm.loop !33

789:                                              ; preds = %746
  br label %790

790:                                              ; preds = %789
  %791 = load i32, ptr %61, align 4, !tbaa !9
  %792 = add nsw i32 %791, 1
  store i32 %792, ptr %61, align 4, !tbaa !9
  br label %741, !llvm.loop !34

793:                                              ; preds = %741
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #3
  br label %794

794:                                              ; preds = %793
  br label %795

795:                                              ; preds = %794
  br label %907

796:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 1, ptr %65) #3
  %797 = load i32, ptr %17, align 4, !tbaa !9
  %798 = trunc i32 %797 to i8
  store i8 %798, ptr %65, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #3
  %799 = load ptr, ptr %52, align 8, !tbaa !5
  %800 = icmp ne ptr null, %799
  br i1 %800, label %801, label %806

801:                                              ; preds = %796
  %802 = load i32, ptr %18, align 4, !tbaa !9
  %803 = load i32, ptr %20, align 4, !tbaa !9
  %804 = icmp sle i32 %802, %803
  br i1 %804, label %805, label %806

805:                                              ; preds = %801
  br label %807

806:                                              ; preds = %801, %796
  call void @__assert_fail(ptr noundef @.str.55, ptr noundef @.str.9, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

807:                                              ; preds = %805
  %808 = load i32, ptr %17, align 4, !tbaa !9
  %809 = icmp ult i32 0, %808
  br i1 %809, label %810, label %814

810:                                              ; preds = %807
  %811 = load i32, ptr %17, align 4, !tbaa !9
  %812 = icmp ule i32 %811, 127
  br i1 %812, label %813, label %814

813:                                              ; preds = %810
  br label %815

814:                                              ; preds = %810, %807
  call void @__assert_fail(ptr noundef @.str.56, ptr noundef @.str.9, i32 noundef 574, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

815:                                              ; preds = %813
  store i32 0, ptr %66, align 4, !tbaa !9
  br label %816

816:                                              ; preds = %903, %815
  %817 = load i32, ptr %66, align 4, !tbaa !9
  %818 = load i32, ptr %18, align 4, !tbaa !9
  %819 = icmp slt i32 %817, %818
  br i1 %819, label %820, label %906

820:                                              ; preds = %816
  store i32 0, ptr %67, align 4, !tbaa !9
  br label %821

821:                                              ; preds = %899, %820
  %822 = load i32, ptr %67, align 4, !tbaa !9
  %823 = load i32, ptr %66, align 4, !tbaa !9
  %824 = icmp slt i32 %822, %823
  br i1 %824, label %825, label %902

825:                                              ; preds = %821
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #3
  %826 = load ptr, ptr %52, align 8, !tbaa !5
  %827 = load i32, ptr %20, align 4, !tbaa !9
  %828 = load i32, ptr %66, align 4, !tbaa !9
  %829 = mul nsw i32 %827, %828
  %830 = load i32, ptr %67, align 4, !tbaa !9
  %831 = add nsw i32 %829, %830
  %832 = load i32, ptr %17, align 4, !tbaa !9
  %833 = mul i32 %831, %832
  %834 = zext i32 %833 to i64
  %835 = getelementptr inbounds i8, ptr %826, i64 %834
  store ptr %835, ptr %68, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #3
  %836 = load ptr, ptr %52, align 8, !tbaa !5
  %837 = load i32, ptr %20, align 4, !tbaa !9
  %838 = load i32, ptr %67, align 4, !tbaa !9
  %839 = mul nsw i32 %837, %838
  %840 = load i32, ptr %66, align 4, !tbaa !9
  %841 = add nsw i32 %839, %840
  %842 = load i32, ptr %17, align 4, !tbaa !9
  %843 = mul i32 %841, %842
  %844 = zext i32 %843 to i64
  %845 = getelementptr inbounds i8, ptr %836, i64 %844
  store ptr %845, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #3
  store i8 0, ptr %70, align 1, !tbaa !22
  br label %846

846:                                              ; preds = %895, %825
  %847 = load i8, ptr %70, align 1, !tbaa !22
  %848 = sext i8 %847 to i32
  %849 = load i8, ptr %65, align 1, !tbaa !22
  %850 = sext i8 %849 to i32
  %851 = icmp slt i32 %848, %850
  br i1 %851, label %852, label %898

852:                                              ; preds = %846
  %853 = load ptr, ptr %69, align 8, !tbaa !5
  %854 = load i8, ptr %70, align 1, !tbaa !22
  %855 = sext i8 %854 to i64
  %856 = getelementptr inbounds i8, ptr %853, i64 %855
  %857 = load i8, ptr %856, align 1, !tbaa !22
  %858 = sext i8 %857 to i32
  %859 = load ptr, ptr %68, align 8, !tbaa !5
  %860 = load i8, ptr %70, align 1, !tbaa !22
  %861 = sext i8 %860 to i64
  %862 = getelementptr inbounds i8, ptr %859, i64 %861
  %863 = load i8, ptr %862, align 1, !tbaa !22
  %864 = sext i8 %863 to i32
  %865 = xor i32 %864, %858
  %866 = trunc i32 %865 to i8
  store i8 %866, ptr %862, align 1, !tbaa !22
  %867 = load ptr, ptr %68, align 8, !tbaa !5
  %868 = load i8, ptr %70, align 1, !tbaa !22
  %869 = sext i8 %868 to i64
  %870 = getelementptr inbounds i8, ptr %867, i64 %869
  %871 = load i8, ptr %870, align 1, !tbaa !22
  %872 = sext i8 %871 to i32
  %873 = load ptr, ptr %69, align 8, !tbaa !5
  %874 = load i8, ptr %70, align 1, !tbaa !22
  %875 = sext i8 %874 to i64
  %876 = getelementptr inbounds i8, ptr %873, i64 %875
  %877 = load i8, ptr %876, align 1, !tbaa !22
  %878 = sext i8 %877 to i32
  %879 = xor i32 %878, %872
  %880 = trunc i32 %879 to i8
  store i8 %880, ptr %876, align 1, !tbaa !22
  %881 = load ptr, ptr %69, align 8, !tbaa !5
  %882 = load i8, ptr %70, align 1, !tbaa !22
  %883 = sext i8 %882 to i64
  %884 = getelementptr inbounds i8, ptr %881, i64 %883
  %885 = load i8, ptr %884, align 1, !tbaa !22
  %886 = sext i8 %885 to i32
  %887 = load ptr, ptr %68, align 8, !tbaa !5
  %888 = load i8, ptr %70, align 1, !tbaa !22
  %889 = sext i8 %888 to i64
  %890 = getelementptr inbounds i8, ptr %887, i64 %889
  %891 = load i8, ptr %890, align 1, !tbaa !22
  %892 = sext i8 %891 to i32
  %893 = xor i32 %892, %886
  %894 = trunc i32 %893 to i8
  store i8 %894, ptr %890, align 1, !tbaa !22
  br label %895

895:                                              ; preds = %852
  %896 = load i8, ptr %70, align 1, !tbaa !22
  %897 = add i8 %896, 1
  store i8 %897, ptr %70, align 1, !tbaa !22
  br label %846, !llvm.loop !35

898:                                              ; preds = %846
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #3
  br label %899

899:                                              ; preds = %898
  %900 = load i32, ptr %67, align 4, !tbaa !9
  %901 = add nsw i32 %900, 1
  store i32 %901, ptr %67, align 4, !tbaa !9
  br label %821, !llvm.loop !36

902:                                              ; preds = %821
  br label %903

903:                                              ; preds = %902
  %904 = load i32, ptr %66, align 4, !tbaa !9
  %905 = add nsw i32 %904, 1
  store i32 %905, ptr %66, align 4, !tbaa !9
  br label %816, !llvm.loop !37

906:                                              ; preds = %816
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %65) #3
  br label %907

907:                                              ; preds = %906, %795, %729, %663
  br label %908

908:                                              ; preds = %907
  br label %909

909:                                              ; preds = %908
  br label %910

910:                                              ; preds = %909, %581
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #3
  br label %911

911:                                              ; preds = %910
  %912 = load i32, ptr %49, align 4, !tbaa !9
  %913 = load ptr, ptr %51, align 8, !tbaa !5
  %914 = sext i32 %912 to i64
  %915 = getelementptr inbounds i8, ptr %913, i64 %914
  store ptr %915, ptr %51, align 8, !tbaa !5
  br label %577, !llvm.loop !38

916:                                              ; preds = %577
  br label %974

917:                                              ; preds = %541
  %918 = load ptr, ptr %14, align 8, !tbaa !22
  %919 = icmp ne ptr null, %918
  br i1 %919, label %920, label %948

920:                                              ; preds = %917
  br label %921

921:                                              ; preds = %942, %920
  %922 = load ptr, ptr %51, align 8, !tbaa !5
  %923 = load ptr, ptr %50, align 8, !tbaa !5
  %924 = icmp ult ptr %922, %923
  br i1 %924, label %925, label %947

925:                                              ; preds = %921
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #3
  %926 = load ptr, ptr %51, align 8, !tbaa !5
  %927 = load ptr, ptr %926, align 8, !tbaa !5
  store ptr %927, ptr %71, align 8, !tbaa !5
  %928 = load ptr, ptr %71, align 8, !tbaa !5
  %929 = icmp ne ptr null, %928
  br i1 %929, label %930, label %941

930:                                              ; preds = %925
  %931 = load ptr, ptr %71, align 8, !tbaa !5
  %932 = load ptr, ptr %16, align 8, !tbaa !5
  %933 = load i32, ptr %17, align 4, !tbaa !9
  %934 = load i32, ptr %18, align 4, !tbaa !9
  %935 = load i32, ptr %19, align 4, !tbaa !9
  %936 = load i32, ptr %20, align 4, !tbaa !9
  %937 = load i32, ptr %21, align 4, !tbaa !9
  %938 = getelementptr inbounds %union.libxsmm_xcopykernel, ptr %14, i32 0, i32 0
  %939 = load ptr, ptr %938, align 8
  %940 = ptrtoint ptr %939 to i64
  call void @libxsmm_itrans_scratch_jit(ptr noundef %931, ptr noundef %932, i32 noundef %933, i32 noundef %934, i32 noundef %935, i32 noundef %936, i32 noundef %937, i64 %940)
  br label %941

941:                                              ; preds = %930, %925
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #3
  br label %942

942:                                              ; preds = %941
  %943 = load i32, ptr %49, align 4, !tbaa !9
  %944 = load ptr, ptr %51, align 8, !tbaa !5
  %945 = sext i32 %943 to i64
  %946 = getelementptr inbounds i8, ptr %944, i64 %945
  store ptr %946, ptr %51, align 8, !tbaa !5
  br label %921, !llvm.loop !39

947:                                              ; preds = %921
  br label %973

948:                                              ; preds = %917
  br label %949

949:                                              ; preds = %967, %948
  %950 = load ptr, ptr %51, align 8, !tbaa !5
  %951 = load ptr, ptr %50, align 8, !tbaa !5
  %952 = icmp ult ptr %950, %951
  br i1 %952, label %953, label %972

953:                                              ; preds = %949
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #3
  %954 = load ptr, ptr %51, align 8, !tbaa !5
  %955 = load ptr, ptr %954, align 8, !tbaa !5
  store ptr %955, ptr %72, align 8, !tbaa !5
  %956 = load ptr, ptr %72, align 8, !tbaa !5
  %957 = icmp ne ptr null, %956
  br i1 %957, label %958, label %966

958:                                              ; preds = %953
  %959 = load ptr, ptr %72, align 8, !tbaa !5
  %960 = load ptr, ptr %16, align 8, !tbaa !5
  %961 = load i32, ptr %17, align 4, !tbaa !9
  %962 = load i32, ptr %18, align 4, !tbaa !9
  %963 = load i32, ptr %19, align 4, !tbaa !9
  %964 = load i32, ptr %20, align 4, !tbaa !9
  %965 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_itrans_scratch(ptr noundef %959, ptr noundef %960, i32 noundef %961, i32 noundef %962, i32 noundef %963, i32 noundef %964, i32 noundef %965)
  br label %966

966:                                              ; preds = %958, %953
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #3
  br label %967

967:                                              ; preds = %966
  %968 = load i32, ptr %49, align 4, !tbaa !9
  %969 = load ptr, ptr %51, align 8, !tbaa !5
  %970 = sext i32 %968 to i64
  %971 = getelementptr inbounds i8, ptr %969, i64 %970
  store ptr %971, ptr %51, align 8, !tbaa !5
  br label %949, !llvm.loop !40

972:                                              ; preds = %949
  br label %973

973:                                              ; preds = %972, %947
  br label %974

974:                                              ; preds = %973, %916
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  br label %975

975:                                              ; preds = %974, %540
  br label %1451

976:                                              ; preds = %13
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #3
  %977 = load ptr, ptr %16, align 8, !tbaa !5
  %978 = icmp eq ptr null, %977
  br i1 %978, label %979, label %1395

979:                                              ; preds = %976
  %980 = load i32, ptr %18, align 4, !tbaa !9
  %981 = load i32, ptr %19, align 4, !tbaa !9
  %982 = icmp eq i32 %980, %981
  br i1 %982, label %983, label %988

983:                                              ; preds = %979
  %984 = load i32, ptr %20, align 4, !tbaa !9
  %985 = load i32, ptr %21, align 4, !tbaa !9
  %986 = icmp eq i32 %984, %985
  br i1 %986, label %987, label %988

987:                                              ; preds = %983
  br label %989

988:                                              ; preds = %983, %979
  call void @__assert_fail(ptr noundef @.str.54, ptr noundef @.str.9, i32 noundef 602, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

989:                                              ; preds = %987
  %990 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %990, ptr %73, align 4, !tbaa !9
  br label %991

991:                                              ; preds = %1391, %989
  %992 = load i32, ptr %73, align 4, !tbaa !9
  %993 = load i32, ptr %26, align 4, !tbaa !9
  %994 = icmp slt i32 %992, %993
  br i1 %994, label %995, label %1394

995:                                              ; preds = %991
  br label %996

996:                                              ; preds = %995
  %997 = load i32, ptr %17, align 4, !tbaa !9
  switch i32 %997, label %1259 [
    i32 2, label %998
    i32 4, label %1091
    i32 8, label %1175
  ]

998:                                              ; preds = %996
  br label %999

999:                                              ; preds = %998
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #3
  %1000 = load ptr, ptr %15, align 8, !tbaa !5
  %1001 = load i32, ptr %73, align 4, !tbaa !9
  %1002 = sext i32 %1001 to i64
  %1003 = load i32, ptr %17, align 4, !tbaa !9
  %1004 = zext i32 %1003 to i64
  %1005 = mul i64 %1002, %1004
  %1006 = getelementptr inbounds i8, ptr %1000, i64 %1005
  %1007 = icmp ne ptr null, %1006
  br i1 %1007, label %1008, label %1013

1008:                                             ; preds = %999
  %1009 = load i32, ptr %18, align 4, !tbaa !9
  %1010 = load i32, ptr %20, align 4, !tbaa !9
  %1011 = icmp sle i32 %1009, %1010
  br i1 %1011, label %1012, label %1013

1012:                                             ; preds = %1008
  br label %1014

1013:                                             ; preds = %1008, %999
  call void @__assert_fail(ptr noundef @.str.57, ptr noundef @.str.9, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

1014:                                             ; preds = %1012
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %1015

1015:                                             ; preds = %1085, %1014
  %1016 = load i32, ptr %74, align 4, !tbaa !9
  %1017 = load i32, ptr %18, align 4, !tbaa !9
  %1018 = icmp slt i32 %1016, %1017
  br i1 %1018, label %1019, label %1088

1019:                                             ; preds = %1015
  store i32 0, ptr %75, align 4, !tbaa !9
  br label %1020

1020:                                             ; preds = %1081, %1019
  %1021 = load i32, ptr %75, align 4, !tbaa !9
  %1022 = load i32, ptr %74, align 4, !tbaa !9
  %1023 = icmp slt i32 %1021, %1022
  br i1 %1023, label %1024, label %1084

1024:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #3
  %1025 = load ptr, ptr %15, align 8, !tbaa !5
  %1026 = load i32, ptr %73, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = load i32, ptr %17, align 4, !tbaa !9
  %1029 = zext i32 %1028 to i64
  %1030 = mul i64 %1027, %1029
  %1031 = getelementptr inbounds i8, ptr %1025, i64 %1030
  %1032 = load i32, ptr %20, align 4, !tbaa !9
  %1033 = sext i32 %1032 to i64
  %1034 = load i32, ptr %74, align 4, !tbaa !9
  %1035 = sext i32 %1034 to i64
  %1036 = mul i64 %1033, %1035
  %1037 = getelementptr inbounds i16, ptr %1031, i64 %1036
  %1038 = load i32, ptr %75, align 4, !tbaa !9
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds i16, ptr %1037, i64 %1039
  store ptr %1040, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #3
  %1041 = load ptr, ptr %15, align 8, !tbaa !5
  %1042 = load i32, ptr %73, align 4, !tbaa !9
  %1043 = sext i32 %1042 to i64
  %1044 = load i32, ptr %17, align 4, !tbaa !9
  %1045 = zext i32 %1044 to i64
  %1046 = mul i64 %1043, %1045
  %1047 = getelementptr inbounds i8, ptr %1041, i64 %1046
  %1048 = load i32, ptr %20, align 4, !tbaa !9
  %1049 = sext i32 %1048 to i64
  %1050 = load i32, ptr %75, align 4, !tbaa !9
  %1051 = sext i32 %1050 to i64
  %1052 = mul i64 %1049, %1051
  %1053 = getelementptr inbounds i16, ptr %1047, i64 %1052
  %1054 = load i32, ptr %74, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds i16, ptr %1053, i64 %1055
  store ptr %1056, ptr %77, align 8, !tbaa !5
  %1057 = load ptr, ptr %77, align 8, !tbaa !5
  %1058 = load i16, ptr %1057, align 2, !tbaa !11
  %1059 = sext i16 %1058 to i32
  %1060 = load ptr, ptr %76, align 8, !tbaa !5
  %1061 = load i16, ptr %1060, align 2, !tbaa !11
  %1062 = sext i16 %1061 to i32
  %1063 = xor i32 %1062, %1059
  %1064 = trunc i32 %1063 to i16
  store i16 %1064, ptr %1060, align 2, !tbaa !11
  %1065 = load ptr, ptr %76, align 8, !tbaa !5
  %1066 = load i16, ptr %1065, align 2, !tbaa !11
  %1067 = sext i16 %1066 to i32
  %1068 = load ptr, ptr %77, align 8, !tbaa !5
  %1069 = load i16, ptr %1068, align 2, !tbaa !11
  %1070 = sext i16 %1069 to i32
  %1071 = xor i32 %1070, %1067
  %1072 = trunc i32 %1071 to i16
  store i16 %1072, ptr %1068, align 2, !tbaa !11
  %1073 = load ptr, ptr %77, align 8, !tbaa !5
  %1074 = load i16, ptr %1073, align 2, !tbaa !11
  %1075 = sext i16 %1074 to i32
  %1076 = load ptr, ptr %76, align 8, !tbaa !5
  %1077 = load i16, ptr %1076, align 2, !tbaa !11
  %1078 = sext i16 %1077 to i32
  %1079 = xor i32 %1078, %1075
  %1080 = trunc i32 %1079 to i16
  store i16 %1080, ptr %1076, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #3
  br label %1081

1081:                                             ; preds = %1024
  %1082 = load i32, ptr %75, align 4, !tbaa !9
  %1083 = add nsw i32 %1082, 1
  store i32 %1083, ptr %75, align 4, !tbaa !9
  br label %1020, !llvm.loop !41

1084:                                             ; preds = %1020
  br label %1085

1085:                                             ; preds = %1084
  %1086 = load i32, ptr %74, align 4, !tbaa !9
  %1087 = add nsw i32 %1086, 1
  store i32 %1087, ptr %74, align 4, !tbaa !9
  br label %1015, !llvm.loop !42

1088:                                             ; preds = %1015
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #3
  br label %1089

1089:                                             ; preds = %1088
  br label %1090

1090:                                             ; preds = %1089
  br label %1388

1091:                                             ; preds = %996
  br label %1092

1092:                                             ; preds = %1091
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #3
  %1093 = load ptr, ptr %15, align 8, !tbaa !5
  %1094 = load i32, ptr %73, align 4, !tbaa !9
  %1095 = sext i32 %1094 to i64
  %1096 = load i32, ptr %17, align 4, !tbaa !9
  %1097 = zext i32 %1096 to i64
  %1098 = mul i64 %1095, %1097
  %1099 = getelementptr inbounds i8, ptr %1093, i64 %1098
  %1100 = icmp ne ptr null, %1099
  br i1 %1100, label %1101, label %1106

1101:                                             ; preds = %1092
  %1102 = load i32, ptr %18, align 4, !tbaa !9
  %1103 = load i32, ptr %20, align 4, !tbaa !9
  %1104 = icmp sle i32 %1102, %1103
  br i1 %1104, label %1105, label %1106

1105:                                             ; preds = %1101
  br label %1107

1106:                                             ; preds = %1101, %1092
  call void @__assert_fail(ptr noundef @.str.57, ptr noundef @.str.9, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

1107:                                             ; preds = %1105
  store i32 0, ptr %78, align 4, !tbaa !9
  br label %1108

1108:                                             ; preds = %1169, %1107
  %1109 = load i32, ptr %78, align 4, !tbaa !9
  %1110 = load i32, ptr %18, align 4, !tbaa !9
  %1111 = icmp slt i32 %1109, %1110
  br i1 %1111, label %1112, label %1172

1112:                                             ; preds = %1108
  store i32 0, ptr %79, align 4, !tbaa !9
  br label %1113

1113:                                             ; preds = %1165, %1112
  %1114 = load i32, ptr %79, align 4, !tbaa !9
  %1115 = load i32, ptr %78, align 4, !tbaa !9
  %1116 = icmp slt i32 %1114, %1115
  br i1 %1116, label %1117, label %1168

1117:                                             ; preds = %1113
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #3
  %1118 = load ptr, ptr %15, align 8, !tbaa !5
  %1119 = load i32, ptr %73, align 4, !tbaa !9
  %1120 = sext i32 %1119 to i64
  %1121 = load i32, ptr %17, align 4, !tbaa !9
  %1122 = zext i32 %1121 to i64
  %1123 = mul i64 %1120, %1122
  %1124 = getelementptr inbounds i8, ptr %1118, i64 %1123
  %1125 = load i32, ptr %20, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = load i32, ptr %78, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = mul i64 %1126, %1128
  %1130 = getelementptr inbounds i32, ptr %1124, i64 %1129
  %1131 = load i32, ptr %79, align 4, !tbaa !9
  %1132 = sext i32 %1131 to i64
  %1133 = getelementptr inbounds i32, ptr %1130, i64 %1132
  store ptr %1133, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #3
  %1134 = load ptr, ptr %15, align 8, !tbaa !5
  %1135 = load i32, ptr %73, align 4, !tbaa !9
  %1136 = sext i32 %1135 to i64
  %1137 = load i32, ptr %17, align 4, !tbaa !9
  %1138 = zext i32 %1137 to i64
  %1139 = mul i64 %1136, %1138
  %1140 = getelementptr inbounds i8, ptr %1134, i64 %1139
  %1141 = load i32, ptr %20, align 4, !tbaa !9
  %1142 = sext i32 %1141 to i64
  %1143 = load i32, ptr %79, align 4, !tbaa !9
  %1144 = sext i32 %1143 to i64
  %1145 = mul i64 %1142, %1144
  %1146 = getelementptr inbounds i32, ptr %1140, i64 %1145
  %1147 = load i32, ptr %78, align 4, !tbaa !9
  %1148 = sext i32 %1147 to i64
  %1149 = getelementptr inbounds i32, ptr %1146, i64 %1148
  store ptr %1149, ptr %81, align 8, !tbaa !5
  %1150 = load ptr, ptr %81, align 8, !tbaa !5
  %1151 = load i32, ptr %1150, align 4, !tbaa !9
  %1152 = load ptr, ptr %80, align 8, !tbaa !5
  %1153 = load i32, ptr %1152, align 4, !tbaa !9
  %1154 = xor i32 %1153, %1151
  store i32 %1154, ptr %1152, align 4, !tbaa !9
  %1155 = load ptr, ptr %80, align 8, !tbaa !5
  %1156 = load i32, ptr %1155, align 4, !tbaa !9
  %1157 = load ptr, ptr %81, align 8, !tbaa !5
  %1158 = load i32, ptr %1157, align 4, !tbaa !9
  %1159 = xor i32 %1158, %1156
  store i32 %1159, ptr %1157, align 4, !tbaa !9
  %1160 = load ptr, ptr %81, align 8, !tbaa !5
  %1161 = load i32, ptr %1160, align 4, !tbaa !9
  %1162 = load ptr, ptr %80, align 8, !tbaa !5
  %1163 = load i32, ptr %1162, align 4, !tbaa !9
  %1164 = xor i32 %1163, %1161
  store i32 %1164, ptr %1162, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #3
  br label %1165

1165:                                             ; preds = %1117
  %1166 = load i32, ptr %79, align 4, !tbaa !9
  %1167 = add nsw i32 %1166, 1
  store i32 %1167, ptr %79, align 4, !tbaa !9
  br label %1113, !llvm.loop !43

1168:                                             ; preds = %1113
  br label %1169

1169:                                             ; preds = %1168
  %1170 = load i32, ptr %78, align 4, !tbaa !9
  %1171 = add nsw i32 %1170, 1
  store i32 %1171, ptr %78, align 4, !tbaa !9
  br label %1108, !llvm.loop !44

1172:                                             ; preds = %1108
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #3
  br label %1173

1173:                                             ; preds = %1172
  br label %1174

1174:                                             ; preds = %1173
  br label %1388

1175:                                             ; preds = %996
  br label %1176

1176:                                             ; preds = %1175
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #3
  %1177 = load ptr, ptr %15, align 8, !tbaa !5
  %1178 = load i32, ptr %73, align 4, !tbaa !9
  %1179 = sext i32 %1178 to i64
  %1180 = load i32, ptr %17, align 4, !tbaa !9
  %1181 = zext i32 %1180 to i64
  %1182 = mul i64 %1179, %1181
  %1183 = getelementptr inbounds i8, ptr %1177, i64 %1182
  %1184 = icmp ne ptr null, %1183
  br i1 %1184, label %1185, label %1190

1185:                                             ; preds = %1176
  %1186 = load i32, ptr %18, align 4, !tbaa !9
  %1187 = load i32, ptr %20, align 4, !tbaa !9
  %1188 = icmp sle i32 %1186, %1187
  br i1 %1188, label %1189, label %1190

1189:                                             ; preds = %1185
  br label %1191

1190:                                             ; preds = %1185, %1176
  call void @__assert_fail(ptr noundef @.str.57, ptr noundef @.str.9, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

1191:                                             ; preds = %1189
  store i32 0, ptr %82, align 4, !tbaa !9
  br label %1192

1192:                                             ; preds = %1253, %1191
  %1193 = load i32, ptr %82, align 4, !tbaa !9
  %1194 = load i32, ptr %18, align 4, !tbaa !9
  %1195 = icmp slt i32 %1193, %1194
  br i1 %1195, label %1196, label %1256

1196:                                             ; preds = %1192
  store i32 0, ptr %83, align 4, !tbaa !9
  br label %1197

1197:                                             ; preds = %1249, %1196
  %1198 = load i32, ptr %83, align 4, !tbaa !9
  %1199 = load i32, ptr %82, align 4, !tbaa !9
  %1200 = icmp slt i32 %1198, %1199
  br i1 %1200, label %1201, label %1252

1201:                                             ; preds = %1197
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #3
  %1202 = load ptr, ptr %15, align 8, !tbaa !5
  %1203 = load i32, ptr %73, align 4, !tbaa !9
  %1204 = sext i32 %1203 to i64
  %1205 = load i32, ptr %17, align 4, !tbaa !9
  %1206 = zext i32 %1205 to i64
  %1207 = mul i64 %1204, %1206
  %1208 = getelementptr inbounds i8, ptr %1202, i64 %1207
  %1209 = load i32, ptr %20, align 4, !tbaa !9
  %1210 = sext i32 %1209 to i64
  %1211 = load i32, ptr %82, align 4, !tbaa !9
  %1212 = sext i32 %1211 to i64
  %1213 = mul i64 %1210, %1212
  %1214 = getelementptr inbounds i64, ptr %1208, i64 %1213
  %1215 = load i32, ptr %83, align 4, !tbaa !9
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds i64, ptr %1214, i64 %1216
  store ptr %1217, ptr %84, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #3
  %1218 = load ptr, ptr %15, align 8, !tbaa !5
  %1219 = load i32, ptr %73, align 4, !tbaa !9
  %1220 = sext i32 %1219 to i64
  %1221 = load i32, ptr %17, align 4, !tbaa !9
  %1222 = zext i32 %1221 to i64
  %1223 = mul i64 %1220, %1222
  %1224 = getelementptr inbounds i8, ptr %1218, i64 %1223
  %1225 = load i32, ptr %20, align 4, !tbaa !9
  %1226 = sext i32 %1225 to i64
  %1227 = load i32, ptr %83, align 4, !tbaa !9
  %1228 = sext i32 %1227 to i64
  %1229 = mul i64 %1226, %1228
  %1230 = getelementptr inbounds i64, ptr %1224, i64 %1229
  %1231 = load i32, ptr %82, align 4, !tbaa !9
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds i64, ptr %1230, i64 %1232
  store ptr %1233, ptr %85, align 8, !tbaa !5
  %1234 = load ptr, ptr %85, align 8, !tbaa !5
  %1235 = load i64, ptr %1234, align 8, !tbaa !18
  %1236 = load ptr, ptr %84, align 8, !tbaa !5
  %1237 = load i64, ptr %1236, align 8, !tbaa !18
  %1238 = xor i64 %1237, %1235
  store i64 %1238, ptr %1236, align 8, !tbaa !18
  %1239 = load ptr, ptr %84, align 8, !tbaa !5
  %1240 = load i64, ptr %1239, align 8, !tbaa !18
  %1241 = load ptr, ptr %85, align 8, !tbaa !5
  %1242 = load i64, ptr %1241, align 8, !tbaa !18
  %1243 = xor i64 %1242, %1240
  store i64 %1243, ptr %1241, align 8, !tbaa !18
  %1244 = load ptr, ptr %85, align 8, !tbaa !5
  %1245 = load i64, ptr %1244, align 8, !tbaa !18
  %1246 = load ptr, ptr %84, align 8, !tbaa !5
  %1247 = load i64, ptr %1246, align 8, !tbaa !18
  %1248 = xor i64 %1247, %1245
  store i64 %1248, ptr %1246, align 8, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #3
  br label %1249

1249:                                             ; preds = %1201
  %1250 = load i32, ptr %83, align 4, !tbaa !9
  %1251 = add nsw i32 %1250, 1
  store i32 %1251, ptr %83, align 4, !tbaa !9
  br label %1197, !llvm.loop !45

1252:                                             ; preds = %1197
  br label %1253

1253:                                             ; preds = %1252
  %1254 = load i32, ptr %82, align 4, !tbaa !9
  %1255 = add nsw i32 %1254, 1
  store i32 %1255, ptr %82, align 4, !tbaa !9
  br label %1192, !llvm.loop !46

1256:                                             ; preds = %1192
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #3
  br label %1257

1257:                                             ; preds = %1256
  br label %1258

1258:                                             ; preds = %1257
  br label %1388

1259:                                             ; preds = %996
  call void @llvm.lifetime.start.p0(i64 1, ptr %86) #3
  %1260 = load i32, ptr %17, align 4, !tbaa !9
  %1261 = trunc i32 %1260 to i8
  store i8 %1261, ptr %86, align 1, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #3
  %1262 = load ptr, ptr %15, align 8, !tbaa !5
  %1263 = load i32, ptr %73, align 4, !tbaa !9
  %1264 = sext i32 %1263 to i64
  %1265 = load i32, ptr %17, align 4, !tbaa !9
  %1266 = zext i32 %1265 to i64
  %1267 = mul i64 %1264, %1266
  %1268 = getelementptr inbounds i8, ptr %1262, i64 %1267
  %1269 = icmp ne ptr null, %1268
  br i1 %1269, label %1270, label %1275

1270:                                             ; preds = %1259
  %1271 = load i32, ptr %18, align 4, !tbaa !9
  %1272 = load i32, ptr %20, align 4, !tbaa !9
  %1273 = icmp sle i32 %1271, %1272
  br i1 %1273, label %1274, label %1275

1274:                                             ; preds = %1270
  br label %1276

1275:                                             ; preds = %1270, %1259
  call void @__assert_fail(ptr noundef @.str.57, ptr noundef @.str.9, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

1276:                                             ; preds = %1274
  %1277 = load i32, ptr %17, align 4, !tbaa !9
  %1278 = icmp ult i32 0, %1277
  br i1 %1278, label %1279, label %1283

1279:                                             ; preds = %1276
  %1280 = load i32, ptr %17, align 4, !tbaa !9
  %1281 = icmp ule i32 %1280, 127
  br i1 %1281, label %1282, label %1283

1282:                                             ; preds = %1279
  br label %1284

1283:                                             ; preds = %1279, %1276
  call void @__assert_fail(ptr noundef @.str.56, ptr noundef @.str.9, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #4
  unreachable

1284:                                             ; preds = %1282
  store i32 0, ptr %87, align 4, !tbaa !9
  br label %1285

1285:                                             ; preds = %1384, %1284
  %1286 = load i32, ptr %87, align 4, !tbaa !9
  %1287 = load i32, ptr %18, align 4, !tbaa !9
  %1288 = icmp slt i32 %1286, %1287
  br i1 %1288, label %1289, label %1387

1289:                                             ; preds = %1285
  store i32 0, ptr %88, align 4, !tbaa !9
  br label %1290

1290:                                             ; preds = %1380, %1289
  %1291 = load i32, ptr %88, align 4, !tbaa !9
  %1292 = load i32, ptr %87, align 4, !tbaa !9
  %1293 = icmp slt i32 %1291, %1292
  br i1 %1293, label %1294, label %1383

1294:                                             ; preds = %1290
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #3
  %1295 = load ptr, ptr %15, align 8, !tbaa !5
  %1296 = load i32, ptr %73, align 4, !tbaa !9
  %1297 = sext i32 %1296 to i64
  %1298 = load i32, ptr %17, align 4, !tbaa !9
  %1299 = zext i32 %1298 to i64
  %1300 = mul i64 %1297, %1299
  %1301 = getelementptr inbounds i8, ptr %1295, i64 %1300
  %1302 = load i32, ptr %20, align 4, !tbaa !9
  %1303 = load i32, ptr %87, align 4, !tbaa !9
  %1304 = mul nsw i32 %1302, %1303
  %1305 = load i32, ptr %88, align 4, !tbaa !9
  %1306 = add nsw i32 %1304, %1305
  %1307 = load i32, ptr %17, align 4, !tbaa !9
  %1308 = mul i32 %1306, %1307
  %1309 = zext i32 %1308 to i64
  %1310 = getelementptr inbounds i8, ptr %1301, i64 %1309
  store ptr %1310, ptr %89, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #3
  %1311 = load ptr, ptr %15, align 8, !tbaa !5
  %1312 = load i32, ptr %73, align 4, !tbaa !9
  %1313 = sext i32 %1312 to i64
  %1314 = load i32, ptr %17, align 4, !tbaa !9
  %1315 = zext i32 %1314 to i64
  %1316 = mul i64 %1313, %1315
  %1317 = getelementptr inbounds i8, ptr %1311, i64 %1316
  %1318 = load i32, ptr %20, align 4, !tbaa !9
  %1319 = load i32, ptr %88, align 4, !tbaa !9
  %1320 = mul nsw i32 %1318, %1319
  %1321 = load i32, ptr %87, align 4, !tbaa !9
  %1322 = add nsw i32 %1320, %1321
  %1323 = load i32, ptr %17, align 4, !tbaa !9
  %1324 = mul i32 %1322, %1323
  %1325 = zext i32 %1324 to i64
  %1326 = getelementptr inbounds i8, ptr %1317, i64 %1325
  store ptr %1326, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #3
  store i8 0, ptr %91, align 1, !tbaa !22
  br label %1327

1327:                                             ; preds = %1376, %1294
  %1328 = load i8, ptr %91, align 1, !tbaa !22
  %1329 = sext i8 %1328 to i32
  %1330 = load i8, ptr %86, align 1, !tbaa !22
  %1331 = sext i8 %1330 to i32
  %1332 = icmp slt i32 %1329, %1331
  br i1 %1332, label %1333, label %1379

1333:                                             ; preds = %1327
  %1334 = load ptr, ptr %90, align 8, !tbaa !5
  %1335 = load i8, ptr %91, align 1, !tbaa !22
  %1336 = sext i8 %1335 to i64
  %1337 = getelementptr inbounds i8, ptr %1334, i64 %1336
  %1338 = load i8, ptr %1337, align 1, !tbaa !22
  %1339 = sext i8 %1338 to i32
  %1340 = load ptr, ptr %89, align 8, !tbaa !5
  %1341 = load i8, ptr %91, align 1, !tbaa !22
  %1342 = sext i8 %1341 to i64
  %1343 = getelementptr inbounds i8, ptr %1340, i64 %1342
  %1344 = load i8, ptr %1343, align 1, !tbaa !22
  %1345 = sext i8 %1344 to i32
  %1346 = xor i32 %1345, %1339
  %1347 = trunc i32 %1346 to i8
  store i8 %1347, ptr %1343, align 1, !tbaa !22
  %1348 = load ptr, ptr %89, align 8, !tbaa !5
  %1349 = load i8, ptr %91, align 1, !tbaa !22
  %1350 = sext i8 %1349 to i64
  %1351 = getelementptr inbounds i8, ptr %1348, i64 %1350
  %1352 = load i8, ptr %1351, align 1, !tbaa !22
  %1353 = sext i8 %1352 to i32
  %1354 = load ptr, ptr %90, align 8, !tbaa !5
  %1355 = load i8, ptr %91, align 1, !tbaa !22
  %1356 = sext i8 %1355 to i64
  %1357 = getelementptr inbounds i8, ptr %1354, i64 %1356
  %1358 = load i8, ptr %1357, align 1, !tbaa !22
  %1359 = sext i8 %1358 to i32
  %1360 = xor i32 %1359, %1353
  %1361 = trunc i32 %1360 to i8
  store i8 %1361, ptr %1357, align 1, !tbaa !22
  %1362 = load ptr, ptr %90, align 8, !tbaa !5
  %1363 = load i8, ptr %91, align 1, !tbaa !22
  %1364 = sext i8 %1363 to i64
  %1365 = getelementptr inbounds i8, ptr %1362, i64 %1364
  %1366 = load i8, ptr %1365, align 1, !tbaa !22
  %1367 = sext i8 %1366 to i32
  %1368 = load ptr, ptr %89, align 8, !tbaa !5
  %1369 = load i8, ptr %91, align 1, !tbaa !22
  %1370 = sext i8 %1369 to i64
  %1371 = getelementptr inbounds i8, ptr %1368, i64 %1370
  %1372 = load i8, ptr %1371, align 1, !tbaa !22
  %1373 = sext i8 %1372 to i32
  %1374 = xor i32 %1373, %1367
  %1375 = trunc i32 %1374 to i8
  store i8 %1375, ptr %1371, align 1, !tbaa !22
  br label %1376

1376:                                             ; preds = %1333
  %1377 = load i8, ptr %91, align 1, !tbaa !22
  %1378 = add i8 %1377, 1
  store i8 %1378, ptr %91, align 1, !tbaa !22
  br label %1327, !llvm.loop !47

1379:                                             ; preds = %1327
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #3
  br label %1380

1380:                                             ; preds = %1379
  %1381 = load i32, ptr %88, align 4, !tbaa !9
  %1382 = add nsw i32 %1381, 1
  store i32 %1382, ptr %88, align 4, !tbaa !9
  br label %1290, !llvm.loop !48

1383:                                             ; preds = %1290
  br label %1384

1384:                                             ; preds = %1383
  %1385 = load i32, ptr %87, align 4, !tbaa !9
  %1386 = add nsw i32 %1385, 1
  store i32 %1386, ptr %87, align 4, !tbaa !9
  br label %1285, !llvm.loop !49

1387:                                             ; preds = %1285
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %86) #3
  br label %1388

1388:                                             ; preds = %1387, %1258, %1174, %1090
  br label %1389

1389:                                             ; preds = %1388
  br label %1390

1390:                                             ; preds = %1389
  br label %1391

1391:                                             ; preds = %1390
  %1392 = load i32, ptr %73, align 4, !tbaa !9
  %1393 = add nsw i32 %1392, 1
  store i32 %1393, ptr %73, align 4, !tbaa !9
  br label %991, !llvm.loop !50

1394:                                             ; preds = %991
  br label %1450

1395:                                             ; preds = %976
  %1396 = load ptr, ptr %14, align 8, !tbaa !22
  %1397 = icmp ne ptr null, %1396
  br i1 %1397, label %1398, label %1425

1398:                                             ; preds = %1395
  %1399 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1399, ptr %73, align 4, !tbaa !9
  br label %1400

1400:                                             ; preds = %1421, %1398
  %1401 = load i32, ptr %73, align 4, !tbaa !9
  %1402 = load i32, ptr %26, align 4, !tbaa !9
  %1403 = icmp slt i32 %1401, %1402
  br i1 %1403, label %1404, label %1424

1404:                                             ; preds = %1400
  %1405 = load ptr, ptr %15, align 8, !tbaa !5
  %1406 = load i32, ptr %73, align 4, !tbaa !9
  %1407 = sext i32 %1406 to i64
  %1408 = load i32, ptr %17, align 4, !tbaa !9
  %1409 = zext i32 %1408 to i64
  %1410 = mul i64 %1407, %1409
  %1411 = getelementptr inbounds i8, ptr %1405, i64 %1410
  %1412 = load ptr, ptr %16, align 8, !tbaa !5
  %1413 = load i32, ptr %17, align 4, !tbaa !9
  %1414 = load i32, ptr %18, align 4, !tbaa !9
  %1415 = load i32, ptr %19, align 4, !tbaa !9
  %1416 = load i32, ptr %20, align 4, !tbaa !9
  %1417 = load i32, ptr %21, align 4, !tbaa !9
  %1418 = getelementptr inbounds %union.libxsmm_xcopykernel, ptr %14, i32 0, i32 0
  %1419 = load ptr, ptr %1418, align 8
  %1420 = ptrtoint ptr %1419 to i64
  call void @libxsmm_itrans_scratch_jit(ptr noundef %1411, ptr noundef %1412, i32 noundef %1413, i32 noundef %1414, i32 noundef %1415, i32 noundef %1416, i32 noundef %1417, i64 %1420)
  br label %1421

1421:                                             ; preds = %1404
  %1422 = load i32, ptr %73, align 4, !tbaa !9
  %1423 = add nsw i32 %1422, 1
  store i32 %1423, ptr %73, align 4, !tbaa !9
  br label %1400, !llvm.loop !51

1424:                                             ; preds = %1400
  br label %1449

1425:                                             ; preds = %1395
  %1426 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %1426, ptr %73, align 4, !tbaa !9
  br label %1427

1427:                                             ; preds = %1445, %1425
  %1428 = load i32, ptr %73, align 4, !tbaa !9
  %1429 = load i32, ptr %26, align 4, !tbaa !9
  %1430 = icmp slt i32 %1428, %1429
  br i1 %1430, label %1431, label %1448

1431:                                             ; preds = %1427
  %1432 = load ptr, ptr %15, align 8, !tbaa !5
  %1433 = load i32, ptr %73, align 4, !tbaa !9
  %1434 = sext i32 %1433 to i64
  %1435 = load i32, ptr %17, align 4, !tbaa !9
  %1436 = zext i32 %1435 to i64
  %1437 = mul i64 %1434, %1436
  %1438 = getelementptr inbounds i8, ptr %1432, i64 %1437
  %1439 = load ptr, ptr %16, align 8, !tbaa !5
  %1440 = load i32, ptr %17, align 4, !tbaa !9
  %1441 = load i32, ptr %18, align 4, !tbaa !9
  %1442 = load i32, ptr %19, align 4, !tbaa !9
  %1443 = load i32, ptr %20, align 4, !tbaa !9
  %1444 = load i32, ptr %21, align 4, !tbaa !9
  call void @libxsmm_itrans_scratch(ptr noundef %1438, ptr noundef %1439, i32 noundef %1440, i32 noundef %1441, i32 noundef %1442, i32 noundef %1443, i32 noundef %1444)
  br label %1445

1445:                                             ; preds = %1431
  %1446 = load i32, ptr %73, align 4, !tbaa !9
  %1447 = add nsw i32 %1446, 1
  store i32 %1447, ptr %73, align 4, !tbaa !9
  br label %1427, !llvm.loop !52

1448:                                             ; preds = %1427
  br label %1449

1449:                                             ; preds = %1448, %1424
  br label %1450

1450:                                             ; preds = %1449, %1394
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #3
  br label %1451

1451:                                             ; preds = %1450, %975
  ret void
}

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 = { nounwind }
attributes #4 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = !{!19, !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}
!44 = distinct !{!44, !14}
!45 = distinct !{!45, !14}
!46 = distinct !{!46, !14}
!47 = distinct !{!47, !14}
!48 = distinct !{!48, !14}
!49 = distinct !{!49, !14}
!50 = distinct !{!50, !14}
!51 = distinct !{!51, !14}
!52 = distinct !{!52, !14}


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

@.str.9 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [21 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_itrans_internal = external hidden unnamed_addr constant [241 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [61 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_itrans_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, ptr noundef readonly %9, i64 %10, i32 noundef %11, i32 noundef %12) local_unnamed_addr #1 {
  %.not = icmp eq ptr %9, null
  br i1 %.not, label %360, label %14

14:                                               ; preds = %13
  %.not556 = icmp eq i32 %8, 0
  br i1 %.not556, label %194, label %15

15:                                               ; preds = %14
  %16 = icmp eq ptr %1, null
  br i1 %16, label %17, label %168

17:                                               ; preds = %15
  %18 = icmp eq i32 %3, %4
  %19 = icmp eq i32 %5, %6
  %or.cond574 = and i1 %18, %19
  br i1 %or.cond574, label %21, label %20

20:                                               ; preds = %17
  tail call void @__assert_fail(ptr noundef nonnull @.str.54, ptr noundef nonnull @.str.9, i32 noundef 542, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

21:                                               ; preds = %17
  %22 = mul nsw i32 %11, %8
  %23 = mul nsw i32 %12, %8
  %24 = icmp slt i32 %22, %23
  br i1 %24, label %.lr.ph663, label %.loopexit596

.lr.ph663:                                        ; preds = %21
  %.not566 = icmp eq ptr %0, null
  %.not567 = icmp sgt i32 %3, %5
  %or.cond577 = or i1 %.not566, %.not567
  %25 = icmp sgt i32 %3, 0
  %26 = sext i32 %5 to i64
  %27 = add i32 %2, -1
  %or.cond = icmp ult i32 %27, 127
  %28 = sext i32 %22 to i64
  %29 = sext i32 %8 to i64
  %30 = sext i32 %23 to i64
  %wide.trip.count775 = zext nneg i32 %3 to i64
  %wide.trip.count784 = zext nneg i32 %3 to i64
  %wide.trip.count793 = zext nneg i32 %3 to i64
  %wide.trip.count802 = zext nneg i32 %3 to i64
  %31 = mul i32 %5, %2
  %32 = zext i32 %31 to i64
  %33 = zext i32 %2 to i64
  %34 = zext i32 %27 to i64
  %35 = add nuw nsw i64 %34, 1
  %scevgep931 = getelementptr i8, ptr %0, i64 %35
  %scevgep936 = getelementptr i8, ptr %0, i64 %35
  %ident.check987.not = icmp eq i32 %5, 1
  %ident.check970.not = icmp eq i32 %5, 1
  %ident.check.not = icmp eq i32 %5, 1
  %min.iters.check = icmp ult i32 %2, 8
  %min.iters.check939 = icmp ult i32 %2, 16
  %n.vec = and i32 %2, 112
  %36 = icmp eq i32 %n.vec, 16
  %37 = icmp eq i32 %n.vec, 32
  %38 = icmp eq i32 %n.vec, 48
  %39 = icmp eq i32 %n.vec, 64
  %40 = icmp eq i32 %n.vec, 80
  %41 = icmp eq i32 %n.vec, 96
  %cmp.n = icmp eq i32 %n.vec, %2
  %ind.end945 = trunc nuw nsw i32 %n.vec to i8
  %n.vec.remaining = and i32 %2, 8
  %min.epilog.iters.check.not.not = icmp eq i32 %n.vec.remaining, 0
  %n.vec944 = and i32 %2, 120
  %ind.end = trunc nuw nsw i32 %n.vec944 to i8
  %cmp.n953 = icmp eq i32 %n.vec944, %2
  br label %42

42:                                               ; preds = %.lr.ph663, %.loopexit624
  %indvars.iv804 = phi i64 [ %28, %.lr.ph663 ], [ %indvars.iv.next805, %.loopexit624 ]
  %43 = getelementptr inbounds i8, ptr %9, i64 %indvars.iv804
  %44 = load i32, ptr %43, align 4, !tbaa !5
  %45 = sub i32 %44, %7
  %46 = mul i32 %45, %2
  %47 = zext i32 %46 to i64
  %48 = getelementptr inbounds i8, ptr %0, i64 %47
  switch i32 %2, label %106 [
    i32 2, label %49
    i32 4, label %68
    i32 8, label %87
  ]

49:                                               ; preds = %42
  br i1 %or.cond577, label %50, label %.preheader625

.preheader625:                                    ; preds = %49
  br i1 %25, label %.preheader620, label %.loopexit624

50:                                               ; preds = %49
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 545, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader620:                                    ; preds = %.preheader625, %._crit_edge648
  %indvars.iv790 = phi i64 [ %indvars.iv.next791, %._crit_edge648 ], [ 0, %.preheader625 ]
  %.not732 = icmp eq i64 %indvars.iv790, 0
  br i1 %.not732, label %._crit_edge648, label %.lr.ph647

.lr.ph647:                                        ; preds = %.preheader620
  %51 = mul nsw i64 %indvars.iv790, %26
  %52 = getelementptr inbounds i16, ptr %48, i64 %51
  %invariant.gep649 = getelementptr i16, ptr %48, i64 %indvars.iv790
  %min.iters.check956 = icmp ugt i64 %indvars.iv790, 7
  %or.cond1212 = and i1 %min.iters.check956, %ident.check.not
  br i1 %or.cond1212, label %vector.ph957, label %scalar.ph.preheader

vector.ph957:                                     ; preds = %.lr.ph647
  %n.vec959 = and i64 %indvars.iv790, 9223372036854775800
  br label %vector.body961

vector.body961:                                   ; preds = %vector.body961, %vector.ph957
  %index962 = phi i64 [ 0, %vector.ph957 ], [ %index.next967, %vector.body961 ]
  %53 = getelementptr inbounds i16, ptr %52, i64 %index962
  %54 = getelementptr i16, ptr %invariant.gep649, i64 %index962
  %wide.load963 = load <8 x i16>, ptr %54, align 2, !tbaa !9
  %wide.load964 = load <8 x i16>, ptr %53, align 2, !tbaa !9
  %55 = xor <8 x i16> %wide.load964, %wide.load963
  store <8 x i16> %55, ptr %53, align 2, !tbaa !9
  %wide.load965 = load <8 x i16>, ptr %54, align 2, !tbaa !9
  %56 = xor <8 x i16> %wide.load965, %55
  store <8 x i16> %56, ptr %54, align 2, !tbaa !9
  %wide.load966 = load <8 x i16>, ptr %53, align 2, !tbaa !9
  %57 = xor <8 x i16> %wide.load966, %56
  store <8 x i16> %57, ptr %53, align 2, !tbaa !9
  %index.next967 = add nuw i64 %index962, 8
  %58 = icmp eq i64 %index.next967, %n.vec959
  br i1 %58, label %middle.block955, label %vector.body961, !llvm.loop !11

middle.block955:                                  ; preds = %vector.body961
  %cmp.n968 = icmp eq i64 %indvars.iv790, %n.vec959
  br i1 %cmp.n968, label %._crit_edge648, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block955, %.lr.ph647
  %indvars.iv786.ph = phi i64 [ 0, %.lr.ph647 ], [ %n.vec959, %middle.block955 ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv786 = phi i64 [ %indvars.iv.next787, %scalar.ph ], [ %indvars.iv786.ph, %scalar.ph.preheader ]
  %59 = getelementptr inbounds i16, ptr %52, i64 %indvars.iv786
  %60 = mul nsw i64 %indvars.iv786, %26
  %gep650 = getelementptr i16, ptr %invariant.gep649, i64 %60
  %61 = load i16, ptr %gep650, align 2, !tbaa !9
  %62 = load i16, ptr %59, align 2, !tbaa !9
  %63 = xor i16 %62, %61
  store i16 %63, ptr %59, align 2, !tbaa !9
  %64 = load i16, ptr %gep650, align 2, !tbaa !9
  %65 = xor i16 %64, %63
  store i16 %65, ptr %gep650, align 2, !tbaa !9
  %66 = load i16, ptr %59, align 2, !tbaa !9
  %67 = xor i16 %66, %65
  store i16 %67, ptr %59, align 2, !tbaa !9
  %indvars.iv.next787 = add nuw nsw i64 %indvars.iv786, 1
  %exitcond789.not = icmp eq i64 %indvars.iv.next787, %indvars.iv790
  br i1 %exitcond789.not, label %._crit_edge648, label %scalar.ph, !llvm.loop !15

._crit_edge648:                                   ; preds = %scalar.ph, %middle.block955, %.preheader620
  %indvars.iv.next791 = add nuw nsw i64 %indvars.iv790, 1
  %exitcond794.not = icmp eq i64 %indvars.iv.next791, %wide.trip.count793
  br i1 %exitcond794.not, label %.loopexit624, label %.preheader620, !llvm.loop !16

68:                                               ; preds = %42
  br i1 %or.cond577, label %69, label %.preheader627

.preheader627:                                    ; preds = %68
  br i1 %25, label %.preheader621, label %.loopexit624

69:                                               ; preds = %68
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 545, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader621:                                    ; preds = %.preheader627, %._crit_edge642
  %indvars.iv781 = phi i64 [ %indvars.iv.next782, %._crit_edge642 ], [ 0, %.preheader627 ]
  %.not731 = icmp eq i64 %indvars.iv781, 0
  br i1 %.not731, label %._crit_edge642, label %.lr.ph641

.lr.ph641:                                        ; preds = %.preheader621
  %70 = mul nsw i64 %indvars.iv781, %26
  %71 = getelementptr inbounds i32, ptr %48, i64 %70
  %invariant.gep643 = getelementptr i32, ptr %48, i64 %indvars.iv781
  %min.iters.check973 = icmp ugt i64 %indvars.iv781, 3
  %or.cond1213 = and i1 %min.iters.check973, %ident.check970.not
  br i1 %or.cond1213, label %vector.ph974, label %scalar.ph972.preheader

vector.ph974:                                     ; preds = %.lr.ph641
  %n.vec976 = and i64 %indvars.iv781, 9223372036854775804
  br label %vector.body978

vector.body978:                                   ; preds = %vector.body978, %vector.ph974
  %index979 = phi i64 [ 0, %vector.ph974 ], [ %index.next984, %vector.body978 ]
  %72 = getelementptr inbounds i32, ptr %71, i64 %index979
  %73 = getelementptr i32, ptr %invariant.gep643, i64 %index979
  %wide.load980 = load <4 x i32>, ptr %73, align 4, !tbaa !5
  %wide.load981 = load <4 x i32>, ptr %72, align 4, !tbaa !5
  %74 = xor <4 x i32> %wide.load981, %wide.load980
  store <4 x i32> %74, ptr %72, align 4, !tbaa !5
  %wide.load982 = load <4 x i32>, ptr %73, align 4, !tbaa !5
  %75 = xor <4 x i32> %wide.load982, %74
  store <4 x i32> %75, ptr %73, align 4, !tbaa !5
  %wide.load983 = load <4 x i32>, ptr %72, align 4, !tbaa !5
  %76 = xor <4 x i32> %wide.load983, %75
  store <4 x i32> %76, ptr %72, align 4, !tbaa !5
  %index.next984 = add nuw i64 %index979, 4
  %77 = icmp eq i64 %index.next984, %n.vec976
  br i1 %77, label %middle.block971, label %vector.body978, !llvm.loop !17

middle.block971:                                  ; preds = %vector.body978
  %cmp.n985 = icmp eq i64 %indvars.iv781, %n.vec976
  br i1 %cmp.n985, label %._crit_edge642, label %scalar.ph972.preheader

scalar.ph972.preheader:                           ; preds = %middle.block971, %.lr.ph641
  %indvars.iv777.ph = phi i64 [ 0, %.lr.ph641 ], [ %n.vec976, %middle.block971 ]
  br label %scalar.ph972

scalar.ph972:                                     ; preds = %scalar.ph972.preheader, %scalar.ph972
  %indvars.iv777 = phi i64 [ %indvars.iv.next778, %scalar.ph972 ], [ %indvars.iv777.ph, %scalar.ph972.preheader ]
  %78 = getelementptr inbounds i32, ptr %71, i64 %indvars.iv777
  %79 = mul nsw i64 %indvars.iv777, %26
  %gep644 = getelementptr i32, ptr %invariant.gep643, i64 %79
  %80 = load i32, ptr %gep644, align 4, !tbaa !5
  %81 = load i32, ptr %78, align 4, !tbaa !5
  %82 = xor i32 %81, %80
  store i32 %82, ptr %78, align 4, !tbaa !5
  %83 = load i32, ptr %gep644, align 4, !tbaa !5
  %84 = xor i32 %83, %82
  store i32 %84, ptr %gep644, align 4, !tbaa !5
  %85 = load i32, ptr %78, align 4, !tbaa !5
  %86 = xor i32 %85, %84
  store i32 %86, ptr %78, align 4, !tbaa !5
  %indvars.iv.next778 = add nuw nsw i64 %indvars.iv777, 1
  %exitcond780.not = icmp eq i64 %indvars.iv.next778, %indvars.iv781
  br i1 %exitcond780.not, label %._crit_edge642, label %scalar.ph972, !llvm.loop !18

._crit_edge642:                                   ; preds = %scalar.ph972, %middle.block971, %.preheader621
  %indvars.iv.next782 = add nuw nsw i64 %indvars.iv781, 1
  %exitcond785.not = icmp eq i64 %indvars.iv.next782, %wide.trip.count784
  br i1 %exitcond785.not, label %.loopexit624, label %.preheader621, !llvm.loop !19

87:                                               ; preds = %42
  br i1 %or.cond577, label %88, label %.preheader629

.preheader629:                                    ; preds = %87
  br i1 %25, label %.preheader622, label %.loopexit624

88:                                               ; preds = %87
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 545, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader622:                                    ; preds = %.preheader629, %._crit_edge
  %indvars.iv772 = phi i64 [ %indvars.iv.next773, %._crit_edge ], [ 0, %.preheader629 ]
  %.not730 = icmp eq i64 %indvars.iv772, 0
  br i1 %.not730, label %._crit_edge, label %.lr.ph638

.lr.ph638:                                        ; preds = %.preheader622
  %89 = mul nsw i64 %indvars.iv772, %26
  %90 = getelementptr inbounds i64, ptr %48, i64 %89
  %invariant.gep = getelementptr i64, ptr %48, i64 %indvars.iv772
  %min.iters.check990 = icmp ne i64 %indvars.iv772, 1
  %or.cond1214 = and i1 %min.iters.check990, %ident.check987.not
  br i1 %or.cond1214, label %vector.ph991, label %scalar.ph989.preheader

vector.ph991:                                     ; preds = %.lr.ph638
  %n.vec993 = and i64 %indvars.iv772, 9223372036854775806
  br label %vector.body995

vector.body995:                                   ; preds = %vector.body995, %vector.ph991
  %index996 = phi i64 [ 0, %vector.ph991 ], [ %index.next1001, %vector.body995 ]
  %91 = getelementptr inbounds i64, ptr %90, i64 %index996
  %92 = getelementptr i64, ptr %invariant.gep, i64 %index996
  %wide.load997 = load <2 x i64>, ptr %92, align 8, !tbaa !20
  %wide.load998 = load <2 x i64>, ptr %91, align 8, !tbaa !20
  %93 = xor <2 x i64> %wide.load998, %wide.load997
  store <2 x i64> %93, ptr %91, align 8, !tbaa !20
  %wide.load999 = load <2 x i64>, ptr %92, align 8, !tbaa !20
  %94 = xor <2 x i64> %wide.load999, %93
  store <2 x i64> %94, ptr %92, align 8, !tbaa !20
  %wide.load1000 = load <2 x i64>, ptr %91, align 8, !tbaa !20
  %95 = xor <2 x i64> %wide.load1000, %94
  store <2 x i64> %95, ptr %91, align 8, !tbaa !20
  %index.next1001 = add nuw i64 %index996, 2
  %96 = icmp eq i64 %index.next1001, %n.vec993
  br i1 %96, label %middle.block988, label %vector.body995, !llvm.loop !22

middle.block988:                                  ; preds = %vector.body995
  %cmp.n1002 = icmp eq i64 %indvars.iv772, %n.vec993
  br i1 %cmp.n1002, label %._crit_edge, label %scalar.ph989.preheader

scalar.ph989.preheader:                           ; preds = %middle.block988, %.lr.ph638
  %indvars.iv769.ph = phi i64 [ 0, %.lr.ph638 ], [ %n.vec993, %middle.block988 ]
  br label %scalar.ph989

scalar.ph989:                                     ; preds = %scalar.ph989.preheader, %scalar.ph989
  %indvars.iv769 = phi i64 [ %indvars.iv.next770, %scalar.ph989 ], [ %indvars.iv769.ph, %scalar.ph989.preheader ]
  %97 = getelementptr inbounds i64, ptr %90, i64 %indvars.iv769
  %98 = mul nsw i64 %indvars.iv769, %26
  %gep = getelementptr i64, ptr %invariant.gep, i64 %98
  %99 = load i64, ptr %gep, align 8, !tbaa !20
  %100 = load i64, ptr %97, align 8, !tbaa !20
  %101 = xor i64 %100, %99
  store i64 %101, ptr %97, align 8, !tbaa !20
  %102 = load i64, ptr %gep, align 8, !tbaa !20
  %103 = xor i64 %102, %101
  store i64 %103, ptr %gep, align 8, !tbaa !20
  %104 = load i64, ptr %97, align 8, !tbaa !20
  %105 = xor i64 %104, %103
  store i64 %105, ptr %97, align 8, !tbaa !20
  %indvars.iv.next770 = add nuw nsw i64 %indvars.iv769, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next770, %indvars.iv772
  br i1 %exitcond.not, label %._crit_edge, label %scalar.ph989, !llvm.loop !23

._crit_edge:                                      ; preds = %scalar.ph989, %middle.block988, %.preheader622
  %indvars.iv.next773 = add nuw nsw i64 %indvars.iv772, 1
  %exitcond776.not = icmp eq i64 %indvars.iv.next773, %wide.trip.count775
  br i1 %exitcond776.not, label %.loopexit624, label %.preheader622, !llvm.loop !24

106:                                              ; preds = %42
  br i1 %or.cond577, label %107, label %108

107:                                              ; preds = %106
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 545, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

108:                                              ; preds = %106
  br i1 %or.cond, label %.preheader623, label %166

.preheader623:                                    ; preds = %108
  br i1 %25, label %.preheader619.us.preheader, label %.loopexit624

.preheader619.us.preheader:                       ; preds = %.preheader623
  %scevgep = getelementptr i8, ptr %0, i64 %47
  %scevgep932 = getelementptr i8, ptr %scevgep931, i64 %47
  %scevgep934 = getelementptr i8, ptr %0, i64 %47
  %scevgep937 = getelementptr i8, ptr %scevgep936, i64 %47
  br label %.preheader619.us

.preheader619.us:                                 ; preds = %.preheader619.us.preheader, %._crit_edge658.split.us.us
  %indvars.iv799 = phi i64 [ %indvars.iv.next800, %._crit_edge658.split.us.us ], [ 0, %.preheader619.us.preheader ]
  %109 = mul i64 %indvars.iv799, %32
  %110 = mul i64 %indvars.iv799, %33
  %.not734 = icmp eq i64 %indvars.iv799, 0
  br i1 %.not734, label %._crit_edge658.split.us.us, label %.lr.ph657.us

._crit_edge658.split.us.us:                       ; preds = %._crit_edge655.us.us, %.preheader619.us
  %indvars.iv.next800 = add nuw nsw i64 %indvars.iv799, 1
  %exitcond803.not = icmp eq i64 %indvars.iv.next800, %wide.trip.count802
  br i1 %exitcond803.not, label %.loopexit624, label %.preheader619.us, !llvm.loop !25

.lr.ph657.us:                                     ; preds = %.preheader619.us
  %111 = mul nsw i64 %indvars.iv799, %26
  br label %iter.check

iter.check:                                       ; preds = %._crit_edge655.us.us, %.lr.ph657.us
  %indvars.iv795 = phi i64 [ %indvars.iv.next796, %._crit_edge655.us.us ], [ 0, %.lr.ph657.us ]
  %112 = add nsw i64 %indvars.iv795, %111
  %113 = trunc nsw i64 %112 to i32
  %114 = mul i32 %113, %2
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds i8, ptr %48, i64 %115
  %117 = mul nsw i64 %indvars.iv795, %26
  %118 = add nsw i64 %117, %indvars.iv799
  %119 = trunc nsw i64 %118 to i32
  %120 = mul i32 %119, %2
  %121 = zext i32 %120 to i64
  %122 = getelementptr inbounds i8, ptr %48, i64 %121
  br i1 %min.iters.check, label %vec.epilog.scalar.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %iter.check
  %123 = mul i64 %indvars.iv795, %32
  %124 = add i64 %110, %123
  %125 = and i64 %124, 4294967295
  %scevgep938 = getelementptr i8, ptr %scevgep937, i64 %125
  %scevgep935 = getelementptr i8, ptr %scevgep934, i64 %125
  %126 = mul i64 %indvars.iv795, %33
  %127 = add i64 %109, %126
  %128 = and i64 %127, 4294967295
  %scevgep933 = getelementptr i8, ptr %scevgep932, i64 %128
  %scevgep930 = getelementptr i8, ptr %scevgep, i64 %128
  %bound0 = icmp ult ptr %scevgep930, %scevgep938
  %bound1 = icmp ult ptr %scevgep935, %scevgep933
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %vec.epilog.scalar.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.memcheck
  br i1 %min.iters.check939, label %vec.epilog.ph, label %vector.body

vector.body:                                      ; preds = %vector.main.loop.iter.check
  %wide.load = load <16 x i8>, ptr %122, align 1, !tbaa !26, !alias.scope !27
  %wide.load940 = load <16 x i8>, ptr %116, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %129 = xor <16 x i8> %wide.load940, %wide.load
  store <16 x i8> %129, ptr %116, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940, ptr %122, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load, ptr %116, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %36, label %middle.block, label %vector.body.1, !llvm.loop !32

vector.body.1:                                    ; preds = %vector.body
  %130 = getelementptr inbounds i8, ptr %122, i64 16
  %wide.load.1 = load <16 x i8>, ptr %130, align 1, !tbaa !26, !alias.scope !27
  %131 = getelementptr inbounds i8, ptr %116, i64 16
  %wide.load940.1 = load <16 x i8>, ptr %131, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %132 = xor <16 x i8> %wide.load940.1, %wide.load.1
  store <16 x i8> %132, ptr %131, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.1, ptr %130, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.1, ptr %131, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %37, label %middle.block, label %vector.body.2, !llvm.loop !32

vector.body.2:                                    ; preds = %vector.body.1
  %133 = getelementptr inbounds i8, ptr %122, i64 32
  %wide.load.2 = load <16 x i8>, ptr %133, align 1, !tbaa !26, !alias.scope !27
  %134 = getelementptr inbounds i8, ptr %116, i64 32
  %wide.load940.2 = load <16 x i8>, ptr %134, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %135 = xor <16 x i8> %wide.load940.2, %wide.load.2
  store <16 x i8> %135, ptr %134, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.2, ptr %133, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.2, ptr %134, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %38, label %middle.block, label %vector.body.3, !llvm.loop !32

vector.body.3:                                    ; preds = %vector.body.2
  %136 = getelementptr inbounds i8, ptr %122, i64 48
  %wide.load.3 = load <16 x i8>, ptr %136, align 1, !tbaa !26, !alias.scope !27
  %137 = getelementptr inbounds i8, ptr %116, i64 48
  %wide.load940.3 = load <16 x i8>, ptr %137, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %138 = xor <16 x i8> %wide.load940.3, %wide.load.3
  store <16 x i8> %138, ptr %137, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.3, ptr %136, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.3, ptr %137, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %39, label %middle.block, label %vector.body.4, !llvm.loop !32

vector.body.4:                                    ; preds = %vector.body.3
  %139 = getelementptr inbounds i8, ptr %122, i64 64
  %wide.load.4 = load <16 x i8>, ptr %139, align 1, !tbaa !26, !alias.scope !27
  %140 = getelementptr inbounds i8, ptr %116, i64 64
  %wide.load940.4 = load <16 x i8>, ptr %140, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %141 = xor <16 x i8> %wide.load940.4, %wide.load.4
  store <16 x i8> %141, ptr %140, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.4, ptr %139, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.4, ptr %140, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %40, label %middle.block, label %vector.body.5, !llvm.loop !32

vector.body.5:                                    ; preds = %vector.body.4
  %142 = getelementptr inbounds i8, ptr %122, i64 80
  %wide.load.5 = load <16 x i8>, ptr %142, align 1, !tbaa !26, !alias.scope !27
  %143 = getelementptr inbounds i8, ptr %116, i64 80
  %wide.load940.5 = load <16 x i8>, ptr %143, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %144 = xor <16 x i8> %wide.load940.5, %wide.load.5
  store <16 x i8> %144, ptr %143, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.5, ptr %142, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.5, ptr %143, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br i1 %41, label %middle.block, label %vector.body.6, !llvm.loop !32

vector.body.6:                                    ; preds = %vector.body.5
  %145 = getelementptr inbounds i8, ptr %122, i64 96
  %wide.load.6 = load <16 x i8>, ptr %145, align 1, !tbaa !26, !alias.scope !27
  %146 = getelementptr inbounds i8, ptr %116, i64 96
  %wide.load940.6 = load <16 x i8>, ptr %146, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  %147 = xor <16 x i8> %wide.load940.6, %wide.load.6
  store <16 x i8> %147, ptr %146, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  store <16 x i8> %wide.load940.6, ptr %145, align 1, !tbaa !26, !alias.scope !27
  store <16 x i8> %wide.load.6, ptr %146, align 1, !tbaa !26, !alias.scope !30, !noalias !27
  br label %middle.block

middle.block:                                     ; preds = %vector.body.6, %vector.body.5, %vector.body.4, %vector.body.3, %vector.body.2, %vector.body.1, %vector.body
  br i1 %cmp.n, label %._crit_edge655.us.us, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  br i1 %min.epilog.iters.check.not.not, label %vec.epilog.scalar.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i32 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index946 = phi i32 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next952, %vec.epilog.vector.body ]
  %offset.idx947 = zext i32 %index946 to i64
  %sext1207 = shl i64 %offset.idx947, 56
  %148 = ashr exact i64 %sext1207, 56
  %149 = getelementptr inbounds i8, ptr %122, i64 %148
  %wide.load948 = load <8 x i8>, ptr %149, align 1, !tbaa !26, !alias.scope !33
  %150 = getelementptr inbounds i8, ptr %116, i64 %148
  %wide.load949 = load <8 x i8>, ptr %150, align 1, !tbaa !26, !alias.scope !36, !noalias !33
  %151 = xor <8 x i8> %wide.load949, %wide.load948
  store <8 x i8> %151, ptr %150, align 1, !tbaa !26, !alias.scope !36, !noalias !33
  store <8 x i8> %wide.load949, ptr %149, align 1, !tbaa !26, !alias.scope !33
  store <8 x i8> %wide.load948, ptr %150, align 1, !tbaa !26, !alias.scope !36, !noalias !33
  %index.next952 = add nuw i32 %index946, 8
  %152 = icmp eq i32 %index.next952, %n.vec944
  br i1 %152, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !38

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  br i1 %cmp.n953, label %._crit_edge655.us.us, label %vec.epilog.scalar.ph.preheader

vec.epilog.scalar.ph.preheader:                   ; preds = %vec.epilog.middle.block, %vector.memcheck, %iter.check, %vec.epilog.iter.check
  %.0511652.us.us.ph = phi i8 [ 0, %iter.check ], [ 0, %vector.memcheck ], [ %ind.end945, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %vec.epilog.scalar.ph

vec.epilog.scalar.ph:                             ; preds = %vec.epilog.scalar.ph.preheader, %vec.epilog.scalar.ph
  %.0511652.us.us = phi i8 [ %163, %vec.epilog.scalar.ph ], [ %.0511652.us.us.ph, %vec.epilog.scalar.ph.preheader ]
  %153 = sext i8 %.0511652.us.us to i64
  %154 = getelementptr inbounds i8, ptr %122, i64 %153
  %155 = load i8, ptr %154, align 1, !tbaa !26
  %156 = getelementptr inbounds i8, ptr %116, i64 %153
  %157 = load i8, ptr %156, align 1, !tbaa !26
  %158 = xor i8 %157, %155
  store i8 %158, ptr %156, align 1, !tbaa !26
  %159 = load i8, ptr %154, align 1, !tbaa !26
  %160 = xor i8 %159, %158
  store i8 %160, ptr %154, align 1, !tbaa !26
  %161 = load i8, ptr %156, align 1, !tbaa !26
  %162 = xor i8 %161, %160
  store i8 %162, ptr %156, align 1, !tbaa !26
  %163 = add i8 %.0511652.us.us, 1
  %164 = sext i8 %163 to i32
  %165 = icmp slt i32 %164, %2
  br i1 %165, label %vec.epilog.scalar.ph, label %._crit_edge655.us.us, !llvm.loop !39

._crit_edge655.us.us:                             ; preds = %vec.epilog.scalar.ph, %vec.epilog.middle.block, %middle.block
  %indvars.iv.next796 = add nuw nsw i64 %indvars.iv795, 1
  %exitcond798.not = icmp eq i64 %indvars.iv.next796, %indvars.iv799
  br i1 %exitcond798.not, label %._crit_edge658.split.us.us, label %iter.check, !llvm.loop !40

166:                                              ; preds = %108
  tail call void @__assert_fail(ptr noundef nonnull @.str.56, ptr noundef nonnull @.str.9, i32 noundef 545, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.loopexit624:                                     ; preds = %._crit_edge, %._crit_edge642, %._crit_edge648, %._crit_edge658.split.us.us, %.preheader629, %.preheader627, %.preheader625, %.preheader623
  %indvars.iv.next805 = add nsw i64 %indvars.iv804, %29
  %167 = icmp slt i64 %indvars.iv.next805, %30
  br i1 %167, label %42, label %.loopexit596, !llvm.loop !41

168:                                              ; preds = %15
  %.not565 = icmp eq i64 %10, 0
  %169 = mul nsw i32 %11, %8
  %170 = mul nsw i32 %12, %8
  %171 = icmp slt i32 %169, %170
  br i1 %.not565, label %183, label %172

172:                                              ; preds = %168
  br i1 %171, label %.lr.ph.preheader, label %.loopexit596

.lr.ph.preheader:                                 ; preds = %172
  %173 = sext i32 %169 to i64
  %174 = sext i32 %8 to i64
  %175 = sext i32 %170 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ %173, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %176 = getelementptr inbounds i8, ptr %9, i64 %indvars.iv
  %177 = load i32, ptr %176, align 4, !tbaa !5
  %178 = sub nsw i32 %177, %7
  %179 = mul i32 %178, %2
  %180 = zext i32 %179 to i64
  %181 = getelementptr inbounds i8, ptr %0, i64 %180
  tail call void @libxsmm_itrans_scratch_jit(ptr noundef %181, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i64 %10)
  %indvars.iv.next = add nsw i64 %indvars.iv, %174
  %182 = icmp slt i64 %indvars.iv.next, %175
  br i1 %182, label %.lr.ph, label %.loopexit596, !llvm.loop !42

183:                                              ; preds = %168
  br i1 %171, label %.lr.ph636.preheader, label %.loopexit596

.lr.ph636.preheader:                              ; preds = %183
  %184 = sext i32 %169 to i64
  %185 = sext i32 %8 to i64
  %186 = sext i32 %170 to i64
  br label %.lr.ph636

.lr.ph636:                                        ; preds = %.lr.ph636.preheader, %.lr.ph636
  %indvars.iv766 = phi i64 [ %184, %.lr.ph636.preheader ], [ %indvars.iv.next767, %.lr.ph636 ]
  %187 = getelementptr inbounds i8, ptr %9, i64 %indvars.iv766
  %188 = load i32, ptr %187, align 4, !tbaa !5
  %189 = sub nsw i32 %188, %7
  %190 = mul i32 %189, %2
  %191 = zext i32 %190 to i64
  %192 = getelementptr inbounds i8, ptr %0, i64 %191
  tail call void @libxsmm_itrans_scratch(ptr noundef %192, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6)
  %indvars.iv.next767 = add nsw i64 %indvars.iv766, %185
  %193 = icmp slt i64 %indvars.iv.next767, %186
  br i1 %193, label %.lr.ph636, label %.loopexit596, !llvm.loop !43

194:                                              ; preds = %14
  %195 = load i32, ptr %9, align 4, !tbaa !5
  %196 = shl i32 %7, 3
  %197 = sub i32 %195, %196
  %198 = sext i32 %197 to i64
  %199 = sext i32 %12 to i64
  %200 = mul nsw i64 %198, %199
  %201 = getelementptr inbounds i8, ptr %0, i64 %200
  %202 = sext i32 %11 to i64
  %203 = mul nsw i64 %198, %202
  %204 = getelementptr inbounds i8, ptr %0, i64 %203
  %205 = icmp eq ptr %1, null
  br i1 %205, label %206, label %348

206:                                              ; preds = %194
  %207 = icmp eq i32 %3, %4
  %208 = icmp eq i32 %5, %6
  %or.cond579 = and i1 %207, %208
  br i1 %or.cond579, label %.preheader613, label %224

.preheader613:                                    ; preds = %206
  %209 = icmp slt i64 %203, %200
  br i1 %209, label %.lr.ph696, label %.loopexit596

.lr.ph696:                                        ; preds = %.preheader613
  %.not561 = icmp sgt i32 %3, %5
  %210 = icmp sgt i32 %3, 0
  %211 = sext i32 %5 to i64
  %212 = add i32 %2, -1
  %or.cond3 = icmp ult i32 %212, 127
  %wide.trip.count814 = zext nneg i32 %3 to i64
  %wide.trip.count823 = zext nneg i32 %3 to i64
  %wide.trip.count832 = zext nneg i32 %3 to i64
  %wide.trip.count841 = zext nneg i32 %3 to i64
  %213 = mul i32 %5, %2
  %214 = zext i32 %213 to i64
  %215 = zext i32 %2 to i64
  %216 = zext i32 %212 to i64
  %217 = add nuw nsw i64 %216, 1
  %ident.check1089.not = icmp eq i32 %5, 1
  %ident.check1072.not = icmp eq i32 %5, 1
  %ident.check1055.not = icmp eq i32 %5, 1
  %min.iters.check1016 = icmp ult i32 %2, 8
  %min.iters.check1019 = icmp ult i32 %2, 16
  %n.vec1023 = and i32 %2, 112
  %218 = icmp eq i32 %n.vec1023, 16
  %219 = icmp eq i32 %n.vec1023, 32
  %220 = icmp eq i32 %n.vec1023, 48
  %221 = icmp eq i32 %n.vec1023, 64
  %222 = icmp eq i32 %n.vec1023, 80
  %223 = icmp eq i32 %n.vec1023, 96
  %cmp.n1032 = icmp eq i32 %n.vec1023, %2
  %ind.end1043 = trunc nuw nsw i32 %n.vec1023 to i8
  %n.vec.remaining1037 = and i32 %2, 8
  %min.epilog.iters.check1038.not.not = icmp eq i32 %n.vec.remaining1037, 0
  %n.vec1041 = and i32 %2, 120
  %ind.end1042 = trunc nuw nsw i32 %n.vec1041 to i8
  %cmp.n1053 = icmp eq i32 %n.vec1041, %2
  br label %225

224:                                              ; preds = %206
  tail call void @__assert_fail(ptr noundef nonnull @.str.54, ptr noundef nonnull @.str.9, i32 noundef 568, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

225:                                              ; preds = %.lr.ph696, %.loopexit606
  %.0512695 = phi ptr [ %204, %.lr.ph696 ], [ %346, %.loopexit606 ]
  %226 = load ptr, ptr %.0512695, align 8, !tbaa !44
  %.not560 = icmp eq ptr %226, null
  br i1 %.not560, label %.loopexit606, label %227

227:                                              ; preds = %225
  switch i32 %2, label %285 [
    i32 2, label %228
    i32 4, label %247
    i32 8, label %266
  ]

228:                                              ; preds = %227
  br i1 %.not561, label %229, label %.preheader607

.preheader607:                                    ; preds = %228
  br i1 %210, label %.preheader602, label %.loopexit606

229:                                              ; preds = %228
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader602:                                    ; preds = %.preheader607, %._crit_edge682
  %indvars.iv829 = phi i64 [ %indvars.iv.next830, %._crit_edge682 ], [ 0, %.preheader607 ]
  %.not737 = icmp eq i64 %indvars.iv829, 0
  br i1 %.not737, label %._crit_edge682, label %.lr.ph681

.lr.ph681:                                        ; preds = %.preheader602
  %230 = mul nsw i64 %indvars.iv829, %211
  %231 = getelementptr inbounds i16, ptr %226, i64 %230
  %invariant.gep683 = getelementptr i16, ptr %226, i64 %indvars.iv829
  %min.iters.check1058 = icmp ugt i64 %indvars.iv829, 7
  %or.cond1215 = and i1 %min.iters.check1058, %ident.check1055.not
  br i1 %or.cond1215, label %vector.ph1059, label %scalar.ph1057.preheader

vector.ph1059:                                    ; preds = %.lr.ph681
  %n.vec1061 = and i64 %indvars.iv829, 9223372036854775800
  br label %vector.body1063

vector.body1063:                                  ; preds = %vector.body1063, %vector.ph1059
  %index1064 = phi i64 [ 0, %vector.ph1059 ], [ %index.next1069, %vector.body1063 ]
  %232 = getelementptr inbounds i16, ptr %231, i64 %index1064
  %233 = getelementptr i16, ptr %invariant.gep683, i64 %index1064
  %wide.load1065 = load <8 x i16>, ptr %233, align 2, !tbaa !9
  %wide.load1066 = load <8 x i16>, ptr %232, align 2, !tbaa !9
  %234 = xor <8 x i16> %wide.load1066, %wide.load1065
  store <8 x i16> %234, ptr %232, align 2, !tbaa !9
  %wide.load1067 = load <8 x i16>, ptr %233, align 2, !tbaa !9
  %235 = xor <8 x i16> %wide.load1067, %234
  store <8 x i16> %235, ptr %233, align 2, !tbaa !9
  %wide.load1068 = load <8 x i16>, ptr %232, align 2, !tbaa !9
  %236 = xor <8 x i16> %wide.load1068, %235
  store <8 x i16> %236, ptr %232, align 2, !tbaa !9
  %index.next1069 = add nuw i64 %index1064, 8
  %237 = icmp eq i64 %index.next1069, %n.vec1061
  br i1 %237, label %middle.block1056, label %vector.body1063, !llvm.loop !46

middle.block1056:                                 ; preds = %vector.body1063
  %cmp.n1070 = icmp eq i64 %indvars.iv829, %n.vec1061
  br i1 %cmp.n1070, label %._crit_edge682, label %scalar.ph1057.preheader

scalar.ph1057.preheader:                          ; preds = %middle.block1056, %.lr.ph681
  %indvars.iv825.ph = phi i64 [ 0, %.lr.ph681 ], [ %n.vec1061, %middle.block1056 ]
  br label %scalar.ph1057

scalar.ph1057:                                    ; preds = %scalar.ph1057.preheader, %scalar.ph1057
  %indvars.iv825 = phi i64 [ %indvars.iv.next826, %scalar.ph1057 ], [ %indvars.iv825.ph, %scalar.ph1057.preheader ]
  %238 = getelementptr inbounds i16, ptr %231, i64 %indvars.iv825
  %239 = mul nsw i64 %indvars.iv825, %211
  %gep684 = getelementptr i16, ptr %invariant.gep683, i64 %239
  %240 = load i16, ptr %gep684, align 2, !tbaa !9
  %241 = load i16, ptr %238, align 2, !tbaa !9
  %242 = xor i16 %241, %240
  store i16 %242, ptr %238, align 2, !tbaa !9
  %243 = load i16, ptr %gep684, align 2, !tbaa !9
  %244 = xor i16 %243, %242
  store i16 %244, ptr %gep684, align 2, !tbaa !9
  %245 = load i16, ptr %238, align 2, !tbaa !9
  %246 = xor i16 %245, %244
  store i16 %246, ptr %238, align 2, !tbaa !9
  %indvars.iv.next826 = add nuw nsw i64 %indvars.iv825, 1
  %exitcond828.not = icmp eq i64 %indvars.iv.next826, %indvars.iv829
  br i1 %exitcond828.not, label %._crit_edge682, label %scalar.ph1057, !llvm.loop !47

._crit_edge682:                                   ; preds = %scalar.ph1057, %middle.block1056, %.preheader602
  %indvars.iv.next830 = add nuw nsw i64 %indvars.iv829, 1
  %exitcond833.not = icmp eq i64 %indvars.iv.next830, %wide.trip.count832
  br i1 %exitcond833.not, label %.loopexit606, label %.preheader602, !llvm.loop !48

247:                                              ; preds = %227
  br i1 %.not561, label %248, label %.preheader609

.preheader609:                                    ; preds = %247
  br i1 %210, label %.preheader603, label %.loopexit606

248:                                              ; preds = %247
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader603:                                    ; preds = %.preheader609, %._crit_edge676
  %indvars.iv820 = phi i64 [ %indvars.iv.next821, %._crit_edge676 ], [ 0, %.preheader609 ]
  %.not736 = icmp eq i64 %indvars.iv820, 0
  br i1 %.not736, label %._crit_edge676, label %.lr.ph675

.lr.ph675:                                        ; preds = %.preheader603
  %249 = mul nsw i64 %indvars.iv820, %211
  %250 = getelementptr inbounds i32, ptr %226, i64 %249
  %invariant.gep677 = getelementptr i32, ptr %226, i64 %indvars.iv820
  %min.iters.check1075 = icmp ugt i64 %indvars.iv820, 3
  %or.cond1216 = and i1 %min.iters.check1075, %ident.check1072.not
  br i1 %or.cond1216, label %vector.ph1076, label %scalar.ph1074.preheader

vector.ph1076:                                    ; preds = %.lr.ph675
  %n.vec1078 = and i64 %indvars.iv820, 9223372036854775804
  br label %vector.body1080

vector.body1080:                                  ; preds = %vector.body1080, %vector.ph1076
  %index1081 = phi i64 [ 0, %vector.ph1076 ], [ %index.next1086, %vector.body1080 ]
  %251 = getelementptr inbounds i32, ptr %250, i64 %index1081
  %252 = getelementptr i32, ptr %invariant.gep677, i64 %index1081
  %wide.load1082 = load <4 x i32>, ptr %252, align 4, !tbaa !5
  %wide.load1083 = load <4 x i32>, ptr %251, align 4, !tbaa !5
  %253 = xor <4 x i32> %wide.load1083, %wide.load1082
  store <4 x i32> %253, ptr %251, align 4, !tbaa !5
  %wide.load1084 = load <4 x i32>, ptr %252, align 4, !tbaa !5
  %254 = xor <4 x i32> %wide.load1084, %253
  store <4 x i32> %254, ptr %252, align 4, !tbaa !5
  %wide.load1085 = load <4 x i32>, ptr %251, align 4, !tbaa !5
  %255 = xor <4 x i32> %wide.load1085, %254
  store <4 x i32> %255, ptr %251, align 4, !tbaa !5
  %index.next1086 = add nuw i64 %index1081, 4
  %256 = icmp eq i64 %index.next1086, %n.vec1078
  br i1 %256, label %middle.block1073, label %vector.body1080, !llvm.loop !49

middle.block1073:                                 ; preds = %vector.body1080
  %cmp.n1087 = icmp eq i64 %indvars.iv820, %n.vec1078
  br i1 %cmp.n1087, label %._crit_edge676, label %scalar.ph1074.preheader

scalar.ph1074.preheader:                          ; preds = %middle.block1073, %.lr.ph675
  %indvars.iv816.ph = phi i64 [ 0, %.lr.ph675 ], [ %n.vec1078, %middle.block1073 ]
  br label %scalar.ph1074

scalar.ph1074:                                    ; preds = %scalar.ph1074.preheader, %scalar.ph1074
  %indvars.iv816 = phi i64 [ %indvars.iv.next817, %scalar.ph1074 ], [ %indvars.iv816.ph, %scalar.ph1074.preheader ]
  %257 = getelementptr inbounds i32, ptr %250, i64 %indvars.iv816
  %258 = mul nsw i64 %indvars.iv816, %211
  %gep678 = getelementptr i32, ptr %invariant.gep677, i64 %258
  %259 = load i32, ptr %gep678, align 4, !tbaa !5
  %260 = load i32, ptr %257, align 4, !tbaa !5
  %261 = xor i32 %260, %259
  store i32 %261, ptr %257, align 4, !tbaa !5
  %262 = load i32, ptr %gep678, align 4, !tbaa !5
  %263 = xor i32 %262, %261
  store i32 %263, ptr %gep678, align 4, !tbaa !5
  %264 = load i32, ptr %257, align 4, !tbaa !5
  %265 = xor i32 %264, %263
  store i32 %265, ptr %257, align 4, !tbaa !5
  %indvars.iv.next817 = add nuw nsw i64 %indvars.iv816, 1
  %exitcond819.not = icmp eq i64 %indvars.iv.next817, %indvars.iv820
  br i1 %exitcond819.not, label %._crit_edge676, label %scalar.ph1074, !llvm.loop !50

._crit_edge676:                                   ; preds = %scalar.ph1074, %middle.block1073, %.preheader603
  %indvars.iv.next821 = add nuw nsw i64 %indvars.iv820, 1
  %exitcond824.not = icmp eq i64 %indvars.iv.next821, %wide.trip.count823
  br i1 %exitcond824.not, label %.loopexit606, label %.preheader603, !llvm.loop !51

266:                                              ; preds = %227
  br i1 %.not561, label %267, label %.preheader611

.preheader611:                                    ; preds = %266
  br i1 %210, label %.preheader604, label %.loopexit606

267:                                              ; preds = %266
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader604:                                    ; preds = %.preheader611, %._crit_edge670
  %indvars.iv811 = phi i64 [ %indvars.iv.next812, %._crit_edge670 ], [ 0, %.preheader611 ]
  %.not735 = icmp eq i64 %indvars.iv811, 0
  br i1 %.not735, label %._crit_edge670, label %.lr.ph669

.lr.ph669:                                        ; preds = %.preheader604
  %268 = mul nsw i64 %indvars.iv811, %211
  %269 = getelementptr inbounds i64, ptr %226, i64 %268
  %invariant.gep671 = getelementptr i64, ptr %226, i64 %indvars.iv811
  %min.iters.check1092 = icmp ne i64 %indvars.iv811, 1
  %or.cond1217 = and i1 %min.iters.check1092, %ident.check1089.not
  br i1 %or.cond1217, label %vector.ph1093, label %scalar.ph1091.preheader

vector.ph1093:                                    ; preds = %.lr.ph669
  %n.vec1095 = and i64 %indvars.iv811, 9223372036854775806
  br label %vector.body1097

vector.body1097:                                  ; preds = %vector.body1097, %vector.ph1093
  %index1098 = phi i64 [ 0, %vector.ph1093 ], [ %index.next1103, %vector.body1097 ]
  %270 = getelementptr inbounds i64, ptr %269, i64 %index1098
  %271 = getelementptr i64, ptr %invariant.gep671, i64 %index1098
  %wide.load1099 = load <2 x i64>, ptr %271, align 8, !tbaa !20
  %wide.load1100 = load <2 x i64>, ptr %270, align 8, !tbaa !20
  %272 = xor <2 x i64> %wide.load1100, %wide.load1099
  store <2 x i64> %272, ptr %270, align 8, !tbaa !20
  %wide.load1101 = load <2 x i64>, ptr %271, align 8, !tbaa !20
  %273 = xor <2 x i64> %wide.load1101, %272
  store <2 x i64> %273, ptr %271, align 8, !tbaa !20
  %wide.load1102 = load <2 x i64>, ptr %270, align 8, !tbaa !20
  %274 = xor <2 x i64> %wide.load1102, %273
  store <2 x i64> %274, ptr %270, align 8, !tbaa !20
  %index.next1103 = add nuw i64 %index1098, 2
  %275 = icmp eq i64 %index.next1103, %n.vec1095
  br i1 %275, label %middle.block1090, label %vector.body1097, !llvm.loop !52

middle.block1090:                                 ; preds = %vector.body1097
  %cmp.n1104 = icmp eq i64 %indvars.iv811, %n.vec1095
  br i1 %cmp.n1104, label %._crit_edge670, label %scalar.ph1091.preheader

scalar.ph1091.preheader:                          ; preds = %middle.block1090, %.lr.ph669
  %indvars.iv807.ph = phi i64 [ 0, %.lr.ph669 ], [ %n.vec1095, %middle.block1090 ]
  br label %scalar.ph1091

scalar.ph1091:                                    ; preds = %scalar.ph1091.preheader, %scalar.ph1091
  %indvars.iv807 = phi i64 [ %indvars.iv.next808, %scalar.ph1091 ], [ %indvars.iv807.ph, %scalar.ph1091.preheader ]
  %276 = getelementptr inbounds i64, ptr %269, i64 %indvars.iv807
  %277 = mul nsw i64 %indvars.iv807, %211
  %gep672 = getelementptr i64, ptr %invariant.gep671, i64 %277
  %278 = load i64, ptr %gep672, align 8, !tbaa !20
  %279 = load i64, ptr %276, align 8, !tbaa !20
  %280 = xor i64 %279, %278
  store i64 %280, ptr %276, align 8, !tbaa !20
  %281 = load i64, ptr %gep672, align 8, !tbaa !20
  %282 = xor i64 %281, %280
  store i64 %282, ptr %gep672, align 8, !tbaa !20
  %283 = load i64, ptr %276, align 8, !tbaa !20
  %284 = xor i64 %283, %282
  store i64 %284, ptr %276, align 8, !tbaa !20
  %indvars.iv.next808 = add nuw nsw i64 %indvars.iv807, 1
  %exitcond810.not = icmp eq i64 %indvars.iv.next808, %indvars.iv811
  br i1 %exitcond810.not, label %._crit_edge670, label %scalar.ph1091, !llvm.loop !53

._crit_edge670:                                   ; preds = %scalar.ph1091, %middle.block1090, %.preheader604
  %indvars.iv.next812 = add nuw nsw i64 %indvars.iv811, 1
  %exitcond815.not = icmp eq i64 %indvars.iv.next812, %wide.trip.count814
  br i1 %exitcond815.not, label %.loopexit606, label %.preheader604, !llvm.loop !54

285:                                              ; preds = %227
  br i1 %.not561, label %286, label %287

286:                                              ; preds = %285
  tail call void @__assert_fail(ptr noundef nonnull @.str.55, ptr noundef nonnull @.str.9, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

287:                                              ; preds = %285
  br i1 %or.cond3, label %.preheader605, label %345

.preheader605:                                    ; preds = %287
  br i1 %210, label %.preheader601.us.preheader, label %.loopexit606

.preheader601.us.preheader:                       ; preds = %.preheader605
  %scevgep1006 = getelementptr i8, ptr %226, i64 %217
  %scevgep1009 = getelementptr i8, ptr %226, i64 %217
  br label %.preheader601.us

.preheader601.us:                                 ; preds = %.preheader601.us.preheader, %._crit_edge692.split.us.us
  %indvars.iv838 = phi i64 [ %indvars.iv.next839, %._crit_edge692.split.us.us ], [ 0, %.preheader601.us.preheader ]
  %288 = mul i64 %indvars.iv838, %214
  %289 = mul i64 %indvars.iv838, %215
  %.not739 = icmp eq i64 %indvars.iv838, 0
  br i1 %.not739, label %._crit_edge692.split.us.us, label %.lr.ph691.us

._crit_edge692.split.us.us:                       ; preds = %._crit_edge689.us.us, %.preheader601.us
  %indvars.iv.next839 = add nuw nsw i64 %indvars.iv838, 1
  %exitcond842.not = icmp eq i64 %indvars.iv.next839, %wide.trip.count841
  br i1 %exitcond842.not, label %.loopexit606, label %.preheader601.us, !llvm.loop !55

.lr.ph691.us:                                     ; preds = %.preheader601.us
  %290 = mul nsw i64 %indvars.iv838, %211
  br label %iter.check1018

iter.check1018:                                   ; preds = %._crit_edge689.us.us, %.lr.ph691.us
  %indvars.iv834 = phi i64 [ %indvars.iv.next835, %._crit_edge689.us.us ], [ 0, %.lr.ph691.us ]
  %291 = add nsw i64 %indvars.iv834, %290
  %292 = trunc nsw i64 %291 to i32
  %293 = mul i32 %292, %2
  %294 = zext i32 %293 to i64
  %295 = getelementptr inbounds i8, ptr %226, i64 %294
  %296 = mul nsw i64 %indvars.iv834, %211
  %297 = add nsw i64 %296, %indvars.iv838
  %298 = trunc nsw i64 %297 to i32
  %299 = mul i32 %298, %2
  %300 = zext i32 %299 to i64
  %301 = getelementptr inbounds i8, ptr %226, i64 %300
  br i1 %min.iters.check1016, label %vec.epilog.scalar.ph1034.preheader, label %vector.memcheck1004

vector.memcheck1004:                              ; preds = %iter.check1018
  %302 = mul i64 %indvars.iv834, %214
  %303 = add i64 %289, %302
  %304 = and i64 %303, 4294967295
  %scevgep1010 = getelementptr i8, ptr %scevgep1009, i64 %304
  %scevgep1008 = getelementptr i8, ptr %226, i64 %304
  %305 = mul i64 %indvars.iv834, %215
  %306 = add i64 %288, %305
  %307 = and i64 %306, 4294967295
  %scevgep1007 = getelementptr i8, ptr %scevgep1006, i64 %307
  %scevgep1005 = getelementptr i8, ptr %226, i64 %307
  %bound01011 = icmp ult ptr %scevgep1005, %scevgep1010
  %bound11012 = icmp ult ptr %scevgep1008, %scevgep1007
  %found.conflict1013 = and i1 %bound01011, %bound11012
  br i1 %found.conflict1013, label %vec.epilog.scalar.ph1034.preheader, label %vector.main.loop.iter.check1020

vector.main.loop.iter.check1020:                  ; preds = %vector.memcheck1004
  br i1 %min.iters.check1019, label %vec.epilog.ph1035, label %vector.body1024

vector.body1024:                                  ; preds = %vector.main.loop.iter.check1020
  %wide.load1027 = load <16 x i8>, ptr %301, align 1, !tbaa !26, !alias.scope !56
  %wide.load1028 = load <16 x i8>, ptr %295, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %308 = xor <16 x i8> %wide.load1028, %wide.load1027
  store <16 x i8> %308, ptr %295, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028, ptr %301, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027, ptr %295, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %218, label %middle.block1014, label %vector.body1024.1, !llvm.loop !61

vector.body1024.1:                                ; preds = %vector.body1024
  %309 = getelementptr inbounds i8, ptr %301, i64 16
  %wide.load1027.1 = load <16 x i8>, ptr %309, align 1, !tbaa !26, !alias.scope !56
  %310 = getelementptr inbounds i8, ptr %295, i64 16
  %wide.load1028.1 = load <16 x i8>, ptr %310, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %311 = xor <16 x i8> %wide.load1028.1, %wide.load1027.1
  store <16 x i8> %311, ptr %310, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.1, ptr %309, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.1, ptr %310, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %219, label %middle.block1014, label %vector.body1024.2, !llvm.loop !61

vector.body1024.2:                                ; preds = %vector.body1024.1
  %312 = getelementptr inbounds i8, ptr %301, i64 32
  %wide.load1027.2 = load <16 x i8>, ptr %312, align 1, !tbaa !26, !alias.scope !56
  %313 = getelementptr inbounds i8, ptr %295, i64 32
  %wide.load1028.2 = load <16 x i8>, ptr %313, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %314 = xor <16 x i8> %wide.load1028.2, %wide.load1027.2
  store <16 x i8> %314, ptr %313, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.2, ptr %312, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.2, ptr %313, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %220, label %middle.block1014, label %vector.body1024.3, !llvm.loop !61

vector.body1024.3:                                ; preds = %vector.body1024.2
  %315 = getelementptr inbounds i8, ptr %301, i64 48
  %wide.load1027.3 = load <16 x i8>, ptr %315, align 1, !tbaa !26, !alias.scope !56
  %316 = getelementptr inbounds i8, ptr %295, i64 48
  %wide.load1028.3 = load <16 x i8>, ptr %316, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %317 = xor <16 x i8> %wide.load1028.3, %wide.load1027.3
  store <16 x i8> %317, ptr %316, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.3, ptr %315, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.3, ptr %316, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %221, label %middle.block1014, label %vector.body1024.4, !llvm.loop !61

vector.body1024.4:                                ; preds = %vector.body1024.3
  %318 = getelementptr inbounds i8, ptr %301, i64 64
  %wide.load1027.4 = load <16 x i8>, ptr %318, align 1, !tbaa !26, !alias.scope !56
  %319 = getelementptr inbounds i8, ptr %295, i64 64
  %wide.load1028.4 = load <16 x i8>, ptr %319, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %320 = xor <16 x i8> %wide.load1028.4, %wide.load1027.4
  store <16 x i8> %320, ptr %319, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.4, ptr %318, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.4, ptr %319, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %222, label %middle.block1014, label %vector.body1024.5, !llvm.loop !61

vector.body1024.5:                                ; preds = %vector.body1024.4
  %321 = getelementptr inbounds i8, ptr %301, i64 80
  %wide.load1027.5 = load <16 x i8>, ptr %321, align 1, !tbaa !26, !alias.scope !56
  %322 = getelementptr inbounds i8, ptr %295, i64 80
  %wide.load1028.5 = load <16 x i8>, ptr %322, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %323 = xor <16 x i8> %wide.load1028.5, %wide.load1027.5
  store <16 x i8> %323, ptr %322, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.5, ptr %321, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.5, ptr %322, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br i1 %223, label %middle.block1014, label %vector.body1024.6, !llvm.loop !61

vector.body1024.6:                                ; preds = %vector.body1024.5
  %324 = getelementptr inbounds i8, ptr %301, i64 96
  %wide.load1027.6 = load <16 x i8>, ptr %324, align 1, !tbaa !26, !alias.scope !56
  %325 = getelementptr inbounds i8, ptr %295, i64 96
  %wide.load1028.6 = load <16 x i8>, ptr %325, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  %326 = xor <16 x i8> %wide.load1028.6, %wide.load1027.6
  store <16 x i8> %326, ptr %325, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  store <16 x i8> %wide.load1028.6, ptr %324, align 1, !tbaa !26, !alias.scope !56
  store <16 x i8> %wide.load1027.6, ptr %325, align 1, !tbaa !26, !alias.scope !59, !noalias !56
  br label %middle.block1014

middle.block1014:                                 ; preds = %vector.body1024.6, %vector.body1024.5, %vector.body1024.4, %vector.body1024.3, %vector.body1024.2, %vector.body1024.1, %vector.body1024
  br i1 %cmp.n1032, label %._crit_edge689.us.us, label %vec.epilog.iter.check1036

vec.epilog.iter.check1036:                        ; preds = %middle.block1014
  br i1 %min.epilog.iters.check1038.not.not, label %vec.epilog.scalar.ph1034.preheader, label %vec.epilog.ph1035

vec.epilog.ph1035:                                ; preds = %vector.main.loop.iter.check1020, %vec.epilog.iter.check1036
  %vec.epilog.resume.val1039 = phi i32 [ %n.vec1023, %vec.epilog.iter.check1036 ], [ 0, %vector.main.loop.iter.check1020 ]
  br label %vec.epilog.vector.body1045

vec.epilog.vector.body1045:                       ; preds = %vec.epilog.vector.body1045, %vec.epilog.ph1035
  %index1046 = phi i32 [ %vec.epilog.resume.val1039, %vec.epilog.ph1035 ], [ %index.next1052, %vec.epilog.vector.body1045 ]
  %offset.idx1047 = zext i32 %index1046 to i64
  %sext1209 = shl i64 %offset.idx1047, 56
  %327 = ashr exact i64 %sext1209, 56
  %328 = getelementptr inbounds i8, ptr %301, i64 %327
  %wide.load1048 = load <8 x i8>, ptr %328, align 1, !tbaa !26, !alias.scope !62
  %329 = getelementptr inbounds i8, ptr %295, i64 %327
  %wide.load1049 = load <8 x i8>, ptr %329, align 1, !tbaa !26, !alias.scope !65, !noalias !62
  %330 = xor <8 x i8> %wide.load1049, %wide.load1048
  store <8 x i8> %330, ptr %329, align 1, !tbaa !26, !alias.scope !65, !noalias !62
  store <8 x i8> %wide.load1049, ptr %328, align 1, !tbaa !26, !alias.scope !62
  store <8 x i8> %wide.load1048, ptr %329, align 1, !tbaa !26, !alias.scope !65, !noalias !62
  %index.next1052 = add nuw i32 %index1046, 8
  %331 = icmp eq i32 %index.next1052, %n.vec1041
  br i1 %331, label %vec.epilog.middle.block1033, label %vec.epilog.vector.body1045, !llvm.loop !67

vec.epilog.middle.block1033:                      ; preds = %vec.epilog.vector.body1045
  br i1 %cmp.n1053, label %._crit_edge689.us.us, label %vec.epilog.scalar.ph1034.preheader

vec.epilog.scalar.ph1034.preheader:               ; preds = %vec.epilog.middle.block1033, %vector.memcheck1004, %iter.check1018, %vec.epilog.iter.check1036
  %.0515686.us.us.ph = phi i8 [ 0, %iter.check1018 ], [ 0, %vector.memcheck1004 ], [ %ind.end1043, %vec.epilog.iter.check1036 ], [ %ind.end1042, %vec.epilog.middle.block1033 ]
  br label %vec.epilog.scalar.ph1034

vec.epilog.scalar.ph1034:                         ; preds = %vec.epilog.scalar.ph1034.preheader, %vec.epilog.scalar.ph1034
  %.0515686.us.us = phi i8 [ %342, %vec.epilog.scalar.ph1034 ], [ %.0515686.us.us.ph, %vec.epilog.scalar.ph1034.preheader ]
  %332 = sext i8 %.0515686.us.us to i64
  %333 = getelementptr inbounds i8, ptr %301, i64 %332
  %334 = load i8, ptr %333, align 1, !tbaa !26
  %335 = getelementptr inbounds i8, ptr %295, i64 %332
  %336 = load i8, ptr %335, align 1, !tbaa !26
  %337 = xor i8 %336, %334
  store i8 %337, ptr %335, align 1, !tbaa !26
  %338 = load i8, ptr %333, align 1, !tbaa !26
  %339 = xor i8 %338, %337
  store i8 %339, ptr %333, align 1, !tbaa !26
  %340 = load i8, ptr %335, align 1, !tbaa !26
  %341 = xor i8 %340, %339
  store i8 %341, ptr %335, align 1, !tbaa !26
  %342 = add i8 %.0515686.us.us, 1
  %343 = sext i8 %342 to i32
  %344 = icmp slt i32 %343, %2
  br i1 %344, label %vec.epilog.scalar.ph1034, label %._crit_edge689.us.us, !llvm.loop !68

._crit_edge689.us.us:                             ; preds = %vec.epilog.scalar.ph1034, %vec.epilog.middle.block1033, %middle.block1014
  %indvars.iv.next835 = add nuw nsw i64 %indvars.iv834, 1
  %exitcond837.not = icmp eq i64 %indvars.iv.next835, %indvars.iv838
  br i1 %exitcond837.not, label %._crit_edge692.split.us.us, label %iter.check1018, !llvm.loop !69

345:                                              ; preds = %287
  tail call void @__assert_fail(ptr noundef nonnull @.str.56, ptr noundef nonnull @.str.9, i32 noundef 574, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.loopexit606:                                     ; preds = %._crit_edge670, %._crit_edge676, %._crit_edge682, %._crit_edge692.split.us.us, %.preheader611, %.preheader609, %.preheader607, %.preheader605, %225
  %346 = getelementptr inbounds i8, ptr %.0512695, i64 %198
  %347 = icmp ult ptr %346, %201
  br i1 %347, label %225, label %.loopexit596, !llvm.loop !70

348:                                              ; preds = %194
  %.not557 = icmp eq i64 %10, 0
  %349 = icmp slt i64 %203, %200
  br i1 %.not557, label %.preheader615, label %.preheader617

.preheader617:                                    ; preds = %348
  br i1 %349, label %.lr.ph665, label %.loopexit596

.preheader615:                                    ; preds = %348
  br i1 %349, label %.lr.ph667, label %.loopexit596

.lr.ph665:                                        ; preds = %.preheader617, %352
  %.1513664 = phi ptr [ %353, %352 ], [ %204, %.preheader617 ]
  %350 = load ptr, ptr %.1513664, align 8, !tbaa !44
  %.not559 = icmp eq ptr %350, null
  br i1 %.not559, label %352, label %351

351:                                              ; preds = %.lr.ph665
  tail call void @libxsmm_itrans_scratch_jit(ptr noundef nonnull %350, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i64 %10)
  br label %352

352:                                              ; preds = %351, %.lr.ph665
  %353 = getelementptr inbounds i8, ptr %.1513664, i64 %198
  %354 = icmp ult ptr %353, %201
  br i1 %354, label %.lr.ph665, label %.loopexit596, !llvm.loop !71

.lr.ph667:                                        ; preds = %.preheader615, %357
  %.2514666 = phi ptr [ %358, %357 ], [ %204, %.preheader615 ]
  %355 = load ptr, ptr %.2514666, align 8, !tbaa !44
  %.not558 = icmp eq ptr %355, null
  br i1 %.not558, label %357, label %356

356:                                              ; preds = %.lr.ph667
  tail call void @libxsmm_itrans_scratch(ptr noundef nonnull %355, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6)
  br label %357

357:                                              ; preds = %356, %.lr.ph667
  %358 = getelementptr inbounds i8, ptr %.2514666, i64 %198
  %359 = icmp ult ptr %358, %201
  br i1 %359, label %.lr.ph667, label %.loopexit596, !llvm.loop !72

360:                                              ; preds = %13
  %361 = icmp eq ptr %1, null
  br i1 %361, label %362, label %514

362:                                              ; preds = %360
  %363 = icmp eq i32 %3, %4
  %364 = icmp eq i32 %5, %6
  %or.cond580 = and i1 %363, %364
  br i1 %or.cond580, label %.preheader595, label %385

.preheader595:                                    ; preds = %362
  %365 = icmp slt i32 %11, %12
  br i1 %365, label %.lr.ph729, label %.loopexit596

.lr.ph729:                                        ; preds = %.preheader595
  %.not548 = icmp eq ptr %0, null
  %.not549 = icmp sgt i32 %3, %5
  %or.cond583 = or i1 %.not548, %.not549
  %366 = icmp sgt i32 %3, 0
  %367 = sext i32 %5 to i64
  %368 = zext i32 %2 to i64
  %369 = add i32 %2, -1
  %or.cond5 = icmp ult i32 %369, 127
  %370 = sext i32 %11 to i64
  %wide.trip.count860 = zext nneg i32 %3 to i64
  %wide.trip.count870 = zext nneg i32 %3 to i64
  %wide.trip.count880 = zext nneg i32 %3 to i64
  %wide.trip.count890 = zext nneg i32 %3 to i64
  %371 = mul nsw i64 %370, %368
  %372 = mul i32 %5, %2
  %373 = zext i32 %372 to i64
  %374 = zext i32 %369 to i64
  %375 = getelementptr i8, ptr %0, i64 %371
  %376 = getelementptr i8, ptr %0, i64 %371
  %377 = getelementptr i8, ptr %376, i64 %374
  %378 = getelementptr i8, ptr %377, i64 1
  %ident.check1191.not = icmp eq i32 %5, 1
  %ident.check1174.not = icmp eq i32 %5, 1
  %ident.check1157.not = icmp eq i32 %5, 1
  %min.iters.check1118 = icmp ult i32 %2, 8
  %min.iters.check1121 = icmp ult i32 %2, 16
  %n.vec1125 = and i32 %2, 112
  %379 = icmp eq i32 %n.vec1125, 16
  %380 = icmp eq i32 %n.vec1125, 32
  %381 = icmp eq i32 %n.vec1125, 48
  %382 = icmp eq i32 %n.vec1125, 64
  %383 = icmp eq i32 %n.vec1125, 80
  %384 = icmp eq i32 %n.vec1125, 96
  %cmp.n1134 = icmp eq i32 %n.vec1125, %2
  %ind.end1145 = trunc nuw nsw i32 %n.vec1125 to i8
  %n.vec.remaining1139 = and i32 %2, 8
  %min.epilog.iters.check1140.not.not = icmp eq i32 %n.vec.remaining1139, 0
  %n.vec1143 = and i32 %2, 120
  %ind.end1144 = trunc nuw nsw i32 %n.vec1143 to i8
  %cmp.n1155 = icmp eq i32 %n.vec1143, %2
  br label %386

385:                                              ; preds = %362
  tail call void @__assert_fail(ptr noundef nonnull @.str.54, ptr noundef nonnull @.str.9, i32 noundef 602, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

386:                                              ; preds = %.lr.ph729, %.loopexit
  %indvar = phi i64 [ 0, %.lr.ph729 ], [ %indvar.next, %.loopexit ]
  %indvars.iv892 = phi i64 [ %370, %.lr.ph729 ], [ %indvars.iv.next893, %.loopexit ]
  %387 = mul i64 %indvar, %368
  %scevgep1107 = getelementptr i8, ptr %375, i64 %387
  %scevgep1109 = getelementptr i8, ptr %378, i64 %387
  switch i32 %2, label %451 [
    i32 2, label %388
    i32 4, label %409
    i32 8, label %430
  ]

388:                                              ; preds = %386
  %389 = shl nsw i64 %indvars.iv892, 1
  %390 = getelementptr inbounds i8, ptr %0, i64 %389
  br i1 %or.cond583, label %391, label %.preheader589

.preheader589:                                    ; preds = %388
  br i1 %366, label %.preheader585, label %.loopexit

391:                                              ; preds = %388
  tail call void @__assert_fail(ptr noundef nonnull @.str.57, ptr noundef nonnull @.str.9, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader585:                                    ; preds = %.preheader589, %._crit_edge715
  %indvars.iv877 = phi i64 [ %indvars.iv.next878, %._crit_edge715 ], [ 0, %.preheader589 ]
  %.not742 = icmp eq i64 %indvars.iv877, 0
  br i1 %.not742, label %._crit_edge715, label %.lr.ph714

.lr.ph714:                                        ; preds = %.preheader585
  %392 = mul nsw i64 %indvars.iv877, %367
  %393 = getelementptr inbounds i16, ptr %390, i64 %392
  %invariant.gep716 = getelementptr i16, ptr %390, i64 %indvars.iv877
  %min.iters.check1160 = icmp ugt i64 %indvars.iv877, 7
  %or.cond1218 = and i1 %min.iters.check1160, %ident.check1157.not
  br i1 %or.cond1218, label %vector.ph1161, label %scalar.ph1159.preheader

vector.ph1161:                                    ; preds = %.lr.ph714
  %n.vec1163 = and i64 %indvars.iv877, 9223372036854775800
  br label %vector.body1165

vector.body1165:                                  ; preds = %vector.body1165, %vector.ph1161
  %index1166 = phi i64 [ 0, %vector.ph1161 ], [ %index.next1171, %vector.body1165 ]
  %394 = getelementptr inbounds i16, ptr %393, i64 %index1166
  %395 = getelementptr i16, ptr %invariant.gep716, i64 %index1166
  %wide.load1167 = load <8 x i16>, ptr %395, align 2, !tbaa !9
  %wide.load1168 = load <8 x i16>, ptr %394, align 2, !tbaa !9
  %396 = xor <8 x i16> %wide.load1168, %wide.load1167
  store <8 x i16> %396, ptr %394, align 2, !tbaa !9
  %wide.load1169 = load <8 x i16>, ptr %395, align 2, !tbaa !9
  %397 = xor <8 x i16> %wide.load1169, %396
  store <8 x i16> %397, ptr %395, align 2, !tbaa !9
  %wide.load1170 = load <8 x i16>, ptr %394, align 2, !tbaa !9
  %398 = xor <8 x i16> %wide.load1170, %397
  store <8 x i16> %398, ptr %394, align 2, !tbaa !9
  %index.next1171 = add nuw i64 %index1166, 8
  %399 = icmp eq i64 %index.next1171, %n.vec1163
  br i1 %399, label %middle.block1158, label %vector.body1165, !llvm.loop !73

middle.block1158:                                 ; preds = %vector.body1165
  %cmp.n1172 = icmp eq i64 %indvars.iv877, %n.vec1163
  br i1 %cmp.n1172, label %._crit_edge715, label %scalar.ph1159.preheader

scalar.ph1159.preheader:                          ; preds = %middle.block1158, %.lr.ph714
  %indvars.iv872.ph = phi i64 [ 0, %.lr.ph714 ], [ %n.vec1163, %middle.block1158 ]
  br label %scalar.ph1159

scalar.ph1159:                                    ; preds = %scalar.ph1159.preheader, %scalar.ph1159
  %indvars.iv872 = phi i64 [ %indvars.iv.next873, %scalar.ph1159 ], [ %indvars.iv872.ph, %scalar.ph1159.preheader ]
  %400 = getelementptr inbounds i16, ptr %393, i64 %indvars.iv872
  %401 = mul nsw i64 %indvars.iv872, %367
  %gep717 = getelementptr i16, ptr %invariant.gep716, i64 %401
  %402 = load i16, ptr %gep717, align 2, !tbaa !9
  %403 = load i16, ptr %400, align 2, !tbaa !9
  %404 = xor i16 %403, %402
  store i16 %404, ptr %400, align 2, !tbaa !9
  %405 = load i16, ptr %gep717, align 2, !tbaa !9
  %406 = xor i16 %405, %404
  store i16 %406, ptr %gep717, align 2, !tbaa !9
  %407 = load i16, ptr %400, align 2, !tbaa !9
  %408 = xor i16 %407, %406
  store i16 %408, ptr %400, align 2, !tbaa !9
  %indvars.iv.next873 = add nuw nsw i64 %indvars.iv872, 1
  %exitcond876.not = icmp eq i64 %indvars.iv.next873, %indvars.iv877
  br i1 %exitcond876.not, label %._crit_edge715, label %scalar.ph1159, !llvm.loop !74

._crit_edge715:                                   ; preds = %scalar.ph1159, %middle.block1158, %.preheader585
  %indvars.iv.next878 = add nuw nsw i64 %indvars.iv877, 1
  %exitcond881.not = icmp eq i64 %indvars.iv.next878, %wide.trip.count880
  br i1 %exitcond881.not, label %.loopexit, label %.preheader585, !llvm.loop !75

409:                                              ; preds = %386
  %410 = shl nsw i64 %indvars.iv892, 2
  %411 = getelementptr inbounds i8, ptr %0, i64 %410
  br i1 %or.cond583, label %412, label %.preheader591

.preheader591:                                    ; preds = %409
  br i1 %366, label %.preheader586, label %.loopexit

412:                                              ; preds = %409
  tail call void @__assert_fail(ptr noundef nonnull @.str.57, ptr noundef nonnull @.str.9, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader586:                                    ; preds = %.preheader591, %._crit_edge709
  %indvars.iv867 = phi i64 [ %indvars.iv.next868, %._crit_edge709 ], [ 0, %.preheader591 ]
  %.not741 = icmp eq i64 %indvars.iv867, 0
  br i1 %.not741, label %._crit_edge709, label %.lr.ph708

.lr.ph708:                                        ; preds = %.preheader586
  %413 = mul nsw i64 %indvars.iv867, %367
  %414 = getelementptr inbounds i32, ptr %411, i64 %413
  %invariant.gep710 = getelementptr i32, ptr %411, i64 %indvars.iv867
  %min.iters.check1177 = icmp ugt i64 %indvars.iv867, 3
  %or.cond1219 = and i1 %min.iters.check1177, %ident.check1174.not
  br i1 %or.cond1219, label %vector.ph1178, label %scalar.ph1176.preheader

vector.ph1178:                                    ; preds = %.lr.ph708
  %n.vec1180 = and i64 %indvars.iv867, 9223372036854775804
  br label %vector.body1182

vector.body1182:                                  ; preds = %vector.body1182, %vector.ph1178
  %index1183 = phi i64 [ 0, %vector.ph1178 ], [ %index.next1188, %vector.body1182 ]
  %415 = getelementptr inbounds i32, ptr %414, i64 %index1183
  %416 = getelementptr i32, ptr %invariant.gep710, i64 %index1183
  %wide.load1184 = load <4 x i32>, ptr %416, align 4, !tbaa !5
  %wide.load1185 = load <4 x i32>, ptr %415, align 4, !tbaa !5
  %417 = xor <4 x i32> %wide.load1185, %wide.load1184
  store <4 x i32> %417, ptr %415, align 4, !tbaa !5
  %wide.load1186 = load <4 x i32>, ptr %416, align 4, !tbaa !5
  %418 = xor <4 x i32> %wide.load1186, %417
  store <4 x i32> %418, ptr %416, align 4, !tbaa !5
  %wide.load1187 = load <4 x i32>, ptr %415, align 4, !tbaa !5
  %419 = xor <4 x i32> %wide.load1187, %418
  store <4 x i32> %419, ptr %415, align 4, !tbaa !5
  %index.next1188 = add nuw i64 %index1183, 4
  %420 = icmp eq i64 %index.next1188, %n.vec1180
  br i1 %420, label %middle.block1175, label %vector.body1182, !llvm.loop !76

middle.block1175:                                 ; preds = %vector.body1182
  %cmp.n1189 = icmp eq i64 %indvars.iv867, %n.vec1180
  br i1 %cmp.n1189, label %._crit_edge709, label %scalar.ph1176.preheader

scalar.ph1176.preheader:                          ; preds = %middle.block1175, %.lr.ph708
  %indvars.iv862.ph = phi i64 [ 0, %.lr.ph708 ], [ %n.vec1180, %middle.block1175 ]
  br label %scalar.ph1176

scalar.ph1176:                                    ; preds = %scalar.ph1176.preheader, %scalar.ph1176
  %indvars.iv862 = phi i64 [ %indvars.iv.next863, %scalar.ph1176 ], [ %indvars.iv862.ph, %scalar.ph1176.preheader ]
  %421 = getelementptr inbounds i32, ptr %414, i64 %indvars.iv862
  %422 = mul nsw i64 %indvars.iv862, %367
  %gep711 = getelementptr i32, ptr %invariant.gep710, i64 %422
  %423 = load i32, ptr %gep711, align 4, !tbaa !5
  %424 = load i32, ptr %421, align 4, !tbaa !5
  %425 = xor i32 %424, %423
  store i32 %425, ptr %421, align 4, !tbaa !5
  %426 = load i32, ptr %gep711, align 4, !tbaa !5
  %427 = xor i32 %426, %425
  store i32 %427, ptr %gep711, align 4, !tbaa !5
  %428 = load i32, ptr %421, align 4, !tbaa !5
  %429 = xor i32 %428, %427
  store i32 %429, ptr %421, align 4, !tbaa !5
  %indvars.iv.next863 = add nuw nsw i64 %indvars.iv862, 1
  %exitcond866.not = icmp eq i64 %indvars.iv.next863, %indvars.iv867
  br i1 %exitcond866.not, label %._crit_edge709, label %scalar.ph1176, !llvm.loop !77

._crit_edge709:                                   ; preds = %scalar.ph1176, %middle.block1175, %.preheader586
  %indvars.iv.next868 = add nuw nsw i64 %indvars.iv867, 1
  %exitcond871.not = icmp eq i64 %indvars.iv.next868, %wide.trip.count870
  br i1 %exitcond871.not, label %.loopexit, label %.preheader586, !llvm.loop !78

430:                                              ; preds = %386
  %431 = shl nsw i64 %indvars.iv892, 3
  %432 = getelementptr inbounds i8, ptr %0, i64 %431
  br i1 %or.cond583, label %433, label %.preheader593

.preheader593:                                    ; preds = %430
  br i1 %366, label %.preheader587, label %.loopexit

433:                                              ; preds = %430
  tail call void @__assert_fail(ptr noundef nonnull @.str.57, ptr noundef nonnull @.str.9, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.preheader587:                                    ; preds = %.preheader593, %._crit_edge703
  %indvars.iv857 = phi i64 [ %indvars.iv.next858, %._crit_edge703 ], [ 0, %.preheader593 ]
  %.not740 = icmp eq i64 %indvars.iv857, 0
  br i1 %.not740, label %._crit_edge703, label %.lr.ph702

.lr.ph702:                                        ; preds = %.preheader587
  %434 = mul nsw i64 %indvars.iv857, %367
  %435 = getelementptr inbounds i64, ptr %432, i64 %434
  %invariant.gep704 = getelementptr i64, ptr %432, i64 %indvars.iv857
  %min.iters.check1194 = icmp ne i64 %indvars.iv857, 1
  %or.cond1220 = and i1 %min.iters.check1194, %ident.check1191.not
  br i1 %or.cond1220, label %vector.ph1195, label %scalar.ph1193.preheader

vector.ph1195:                                    ; preds = %.lr.ph702
  %n.vec1197 = and i64 %indvars.iv857, 9223372036854775806
  br label %vector.body1199

vector.body1199:                                  ; preds = %vector.body1199, %vector.ph1195
  %index1200 = phi i64 [ 0, %vector.ph1195 ], [ %index.next1205, %vector.body1199 ]
  %436 = getelementptr inbounds i64, ptr %435, i64 %index1200
  %437 = getelementptr i64, ptr %invariant.gep704, i64 %index1200
  %wide.load1201 = load <2 x i64>, ptr %437, align 8, !tbaa !20
  %wide.load1202 = load <2 x i64>, ptr %436, align 8, !tbaa !20
  %438 = xor <2 x i64> %wide.load1202, %wide.load1201
  store <2 x i64> %438, ptr %436, align 8, !tbaa !20
  %wide.load1203 = load <2 x i64>, ptr %437, align 8, !tbaa !20
  %439 = xor <2 x i64> %wide.load1203, %438
  store <2 x i64> %439, ptr %437, align 8, !tbaa !20
  %wide.load1204 = load <2 x i64>, ptr %436, align 8, !tbaa !20
  %440 = xor <2 x i64> %wide.load1204, %439
  store <2 x i64> %440, ptr %436, align 8, !tbaa !20
  %index.next1205 = add nuw i64 %index1200, 2
  %441 = icmp eq i64 %index.next1205, %n.vec1197
  br i1 %441, label %middle.block1192, label %vector.body1199, !llvm.loop !79

middle.block1192:                                 ; preds = %vector.body1199
  %cmp.n1206 = icmp eq i64 %indvars.iv857, %n.vec1197
  br i1 %cmp.n1206, label %._crit_edge703, label %scalar.ph1193.preheader

scalar.ph1193.preheader:                          ; preds = %middle.block1192, %.lr.ph702
  %indvars.iv852.ph = phi i64 [ 0, %.lr.ph702 ], [ %n.vec1197, %middle.block1192 ]
  br label %scalar.ph1193

scalar.ph1193:                                    ; preds = %scalar.ph1193.preheader, %scalar.ph1193
  %indvars.iv852 = phi i64 [ %indvars.iv.next853, %scalar.ph1193 ], [ %indvars.iv852.ph, %scalar.ph1193.preheader ]
  %442 = getelementptr inbounds i64, ptr %435, i64 %indvars.iv852
  %443 = mul nsw i64 %indvars.iv852, %367
  %gep705 = getelementptr i64, ptr %invariant.gep704, i64 %443
  %444 = load i64, ptr %gep705, align 8, !tbaa !20
  %445 = load i64, ptr %442, align 8, !tbaa !20
  %446 = xor i64 %445, %444
  store i64 %446, ptr %442, align 8, !tbaa !20
  %447 = load i64, ptr %gep705, align 8, !tbaa !20
  %448 = xor i64 %447, %446
  store i64 %448, ptr %gep705, align 8, !tbaa !20
  %449 = load i64, ptr %442, align 8, !tbaa !20
  %450 = xor i64 %449, %448
  store i64 %450, ptr %442, align 8, !tbaa !20
  %indvars.iv.next853 = add nuw nsw i64 %indvars.iv852, 1
  %exitcond856.not = icmp eq i64 %indvars.iv.next853, %indvars.iv857
  br i1 %exitcond856.not, label %._crit_edge703, label %scalar.ph1193, !llvm.loop !80

._crit_edge703:                                   ; preds = %scalar.ph1193, %middle.block1192, %.preheader587
  %indvars.iv.next858 = add nuw nsw i64 %indvars.iv857, 1
  %exitcond861.not = icmp eq i64 %indvars.iv.next858, %wide.trip.count860
  br i1 %exitcond861.not, label %.loopexit, label %.preheader587, !llvm.loop !81

451:                                              ; preds = %386
  %452 = mul nsw i64 %indvars.iv892, %368
  %453 = getelementptr inbounds i8, ptr %0, i64 %452
  br i1 %or.cond583, label %454, label %455

454:                                              ; preds = %451
  tail call void @__assert_fail(ptr noundef nonnull @.str.57, ptr noundef nonnull @.str.9, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

455:                                              ; preds = %451
  br i1 %or.cond5, label %.preheader588, label %513

.preheader588:                                    ; preds = %455
  br i1 %366, label %.preheader.us, label %.loopexit

.preheader.us:                                    ; preds = %.preheader588, %._crit_edge725.split.us.us
  %indvars.iv887 = phi i64 [ %indvars.iv.next888, %._crit_edge725.split.us.us ], [ 0, %.preheader588 ]
  %456 = mul i64 %indvars.iv887, %373
  %457 = mul i64 %indvars.iv887, %368
  %.not744 = icmp eq i64 %indvars.iv887, 0
  br i1 %.not744, label %._crit_edge725.split.us.us, label %.lr.ph724.us

._crit_edge725.split.us.us:                       ; preds = %._crit_edge722.us.us, %.preheader.us
  %indvars.iv.next888 = add nuw nsw i64 %indvars.iv887, 1
  %exitcond891.not = icmp eq i64 %indvars.iv.next888, %wide.trip.count890
  br i1 %exitcond891.not, label %.loopexit, label %.preheader.us, !llvm.loop !82

.lr.ph724.us:                                     ; preds = %.preheader.us
  %458 = mul nsw i64 %indvars.iv887, %367
  br label %iter.check1120

iter.check1120:                                   ; preds = %._crit_edge722.us.us, %.lr.ph724.us
  %indvars.iv882 = phi i64 [ %indvars.iv.next883, %._crit_edge722.us.us ], [ 0, %.lr.ph724.us ]
  %459 = add nsw i64 %indvars.iv882, %458
  %460 = trunc nsw i64 %459 to i32
  %461 = mul i32 %460, %2
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds i8, ptr %453, i64 %462
  %464 = mul nsw i64 %indvars.iv882, %367
  %465 = add nsw i64 %464, %indvars.iv887
  %466 = trunc nsw i64 %465 to i32
  %467 = mul i32 %466, %2
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds i8, ptr %453, i64 %468
  br i1 %min.iters.check1118, label %vec.epilog.scalar.ph1136.preheader, label %vector.memcheck1106

vector.memcheck1106:                              ; preds = %iter.check1120
  %470 = mul i64 %indvars.iv882, %373
  %471 = add i64 %457, %470
  %472 = and i64 %471, 4294967295
  %scevgep1112 = getelementptr i8, ptr %scevgep1109, i64 %472
  %scevgep1111 = getelementptr i8, ptr %scevgep1107, i64 %472
  %473 = mul i64 %indvars.iv882, %368
  %474 = add i64 %456, %473
  %475 = and i64 %474, 4294967295
  %scevgep1110 = getelementptr i8, ptr %scevgep1109, i64 %475
  %scevgep1108 = getelementptr i8, ptr %scevgep1107, i64 %475
  %bound01113 = icmp ult ptr %scevgep1108, %scevgep1112
  %bound11114 = icmp ult ptr %scevgep1111, %scevgep1110
  %found.conflict1115 = and i1 %bound01113, %bound11114
  br i1 %found.conflict1115, label %vec.epilog.scalar.ph1136.preheader, label %vector.main.loop.iter.check1122

vector.main.loop.iter.check1122:                  ; preds = %vector.memcheck1106
  br i1 %min.iters.check1121, label %vec.epilog.ph1137, label %vector.body1126

vector.body1126:                                  ; preds = %vector.main.loop.iter.check1122
  %wide.load1129 = load <16 x i8>, ptr %469, align 1, !tbaa !26, !alias.scope !83
  %wide.load1130 = load <16 x i8>, ptr %463, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %476 = xor <16 x i8> %wide.load1130, %wide.load1129
  store <16 x i8> %476, ptr %463, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130, ptr %469, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129, ptr %463, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %379, label %middle.block1116, label %vector.body1126.1, !llvm.loop !88

vector.body1126.1:                                ; preds = %vector.body1126
  %477 = getelementptr inbounds i8, ptr %469, i64 16
  %wide.load1129.1 = load <16 x i8>, ptr %477, align 1, !tbaa !26, !alias.scope !83
  %478 = getelementptr inbounds i8, ptr %463, i64 16
  %wide.load1130.1 = load <16 x i8>, ptr %478, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %479 = xor <16 x i8> %wide.load1130.1, %wide.load1129.1
  store <16 x i8> %479, ptr %478, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.1, ptr %477, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.1, ptr %478, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %380, label %middle.block1116, label %vector.body1126.2, !llvm.loop !88

vector.body1126.2:                                ; preds = %vector.body1126.1
  %480 = getelementptr inbounds i8, ptr %469, i64 32
  %wide.load1129.2 = load <16 x i8>, ptr %480, align 1, !tbaa !26, !alias.scope !83
  %481 = getelementptr inbounds i8, ptr %463, i64 32
  %wide.load1130.2 = load <16 x i8>, ptr %481, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %482 = xor <16 x i8> %wide.load1130.2, %wide.load1129.2
  store <16 x i8> %482, ptr %481, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.2, ptr %480, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.2, ptr %481, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %381, label %middle.block1116, label %vector.body1126.3, !llvm.loop !88

vector.body1126.3:                                ; preds = %vector.body1126.2
  %483 = getelementptr inbounds i8, ptr %469, i64 48
  %wide.load1129.3 = load <16 x i8>, ptr %483, align 1, !tbaa !26, !alias.scope !83
  %484 = getelementptr inbounds i8, ptr %463, i64 48
  %wide.load1130.3 = load <16 x i8>, ptr %484, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %485 = xor <16 x i8> %wide.load1130.3, %wide.load1129.3
  store <16 x i8> %485, ptr %484, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.3, ptr %483, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.3, ptr %484, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %382, label %middle.block1116, label %vector.body1126.4, !llvm.loop !88

vector.body1126.4:                                ; preds = %vector.body1126.3
  %486 = getelementptr inbounds i8, ptr %469, i64 64
  %wide.load1129.4 = load <16 x i8>, ptr %486, align 1, !tbaa !26, !alias.scope !83
  %487 = getelementptr inbounds i8, ptr %463, i64 64
  %wide.load1130.4 = load <16 x i8>, ptr %487, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %488 = xor <16 x i8> %wide.load1130.4, %wide.load1129.4
  store <16 x i8> %488, ptr %487, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.4, ptr %486, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.4, ptr %487, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %383, label %middle.block1116, label %vector.body1126.5, !llvm.loop !88

vector.body1126.5:                                ; preds = %vector.body1126.4
  %489 = getelementptr inbounds i8, ptr %469, i64 80
  %wide.load1129.5 = load <16 x i8>, ptr %489, align 1, !tbaa !26, !alias.scope !83
  %490 = getelementptr inbounds i8, ptr %463, i64 80
  %wide.load1130.5 = load <16 x i8>, ptr %490, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %491 = xor <16 x i8> %wide.load1130.5, %wide.load1129.5
  store <16 x i8> %491, ptr %490, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.5, ptr %489, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.5, ptr %490, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br i1 %384, label %middle.block1116, label %vector.body1126.6, !llvm.loop !88

vector.body1126.6:                                ; preds = %vector.body1126.5
  %492 = getelementptr inbounds i8, ptr %469, i64 96
  %wide.load1129.6 = load <16 x i8>, ptr %492, align 1, !tbaa !26, !alias.scope !83
  %493 = getelementptr inbounds i8, ptr %463, i64 96
  %wide.load1130.6 = load <16 x i8>, ptr %493, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  %494 = xor <16 x i8> %wide.load1130.6, %wide.load1129.6
  store <16 x i8> %494, ptr %493, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  store <16 x i8> %wide.load1130.6, ptr %492, align 1, !tbaa !26, !alias.scope !83
  store <16 x i8> %wide.load1129.6, ptr %493, align 1, !tbaa !26, !alias.scope !86, !noalias !83
  br label %middle.block1116

middle.block1116:                                 ; preds = %vector.body1126.6, %vector.body1126.5, %vector.body1126.4, %vector.body1126.3, %vector.body1126.2, %vector.body1126.1, %vector.body1126
  br i1 %cmp.n1134, label %._crit_edge722.us.us, label %vec.epilog.iter.check1138

vec.epilog.iter.check1138:                        ; preds = %middle.block1116
  br i1 %min.epilog.iters.check1140.not.not, label %vec.epilog.scalar.ph1136.preheader, label %vec.epilog.ph1137

vec.epilog.ph1137:                                ; preds = %vector.main.loop.iter.check1122, %vec.epilog.iter.check1138
  %vec.epilog.resume.val1141 = phi i32 [ %n.vec1125, %vec.epilog.iter.check1138 ], [ 0, %vector.main.loop.iter.check1122 ]
  br label %vec.epilog.vector.body1147

vec.epilog.vector.body1147:                       ; preds = %vec.epilog.vector.body1147, %vec.epilog.ph1137
  %index1148 = phi i32 [ %vec.epilog.resume.val1141, %vec.epilog.ph1137 ], [ %index.next1154, %vec.epilog.vector.body1147 ]
  %offset.idx1149 = zext i32 %index1148 to i64
  %sext1211 = shl i64 %offset.idx1149, 56
  %495 = ashr exact i64 %sext1211, 56
  %496 = getelementptr inbounds i8, ptr %469, i64 %495
  %wide.load1150 = load <8 x i8>, ptr %496, align 1, !tbaa !26, !alias.scope !89
  %497 = getelementptr inbounds i8, ptr %463, i64 %495
  %wide.load1151 = load <8 x i8>, ptr %497, align 1, !tbaa !26, !alias.scope !92, !noalias !89
  %498 = xor <8 x i8> %wide.load1151, %wide.load1150
  store <8 x i8> %498, ptr %497, align 1, !tbaa !26, !alias.scope !92, !noalias !89
  store <8 x i8> %wide.load1151, ptr %496, align 1, !tbaa !26, !alias.scope !89
  store <8 x i8> %wide.load1150, ptr %497, align 1, !tbaa !26, !alias.scope !92, !noalias !89
  %index.next1154 = add nuw i32 %index1148, 8
  %499 = icmp eq i32 %index.next1154, %n.vec1143
  br i1 %499, label %vec.epilog.middle.block1135, label %vec.epilog.vector.body1147, !llvm.loop !94

vec.epilog.middle.block1135:                      ; preds = %vec.epilog.vector.body1147
  br i1 %cmp.n1155, label %._crit_edge722.us.us, label %vec.epilog.scalar.ph1136.preheader

vec.epilog.scalar.ph1136.preheader:               ; preds = %vec.epilog.middle.block1135, %vector.memcheck1106, %iter.check1120, %vec.epilog.iter.check1138
  %.0719.us.us.ph = phi i8 [ 0, %iter.check1120 ], [ 0, %vector.memcheck1106 ], [ %ind.end1145, %vec.epilog.iter.check1138 ], [ %ind.end1144, %vec.epilog.middle.block1135 ]
  br label %vec.epilog.scalar.ph1136

vec.epilog.scalar.ph1136:                         ; preds = %vec.epilog.scalar.ph1136.preheader, %vec.epilog.scalar.ph1136
  %.0719.us.us = phi i8 [ %510, %vec.epilog.scalar.ph1136 ], [ %.0719.us.us.ph, %vec.epilog.scalar.ph1136.preheader ]
  %500 = sext i8 %.0719.us.us to i64
  %501 = getelementptr inbounds i8, ptr %469, i64 %500
  %502 = load i8, ptr %501, align 1, !tbaa !26
  %503 = getelementptr inbounds i8, ptr %463, i64 %500
  %504 = load i8, ptr %503, align 1, !tbaa !26
  %505 = xor i8 %504, %502
  store i8 %505, ptr %503, align 1, !tbaa !26
  %506 = load i8, ptr %501, align 1, !tbaa !26
  %507 = xor i8 %506, %505
  store i8 %507, ptr %501, align 1, !tbaa !26
  %508 = load i8, ptr %503, align 1, !tbaa !26
  %509 = xor i8 %508, %507
  store i8 %509, ptr %503, align 1, !tbaa !26
  %510 = add i8 %.0719.us.us, 1
  %511 = sext i8 %510 to i32
  %512 = icmp slt i32 %511, %2
  br i1 %512, label %vec.epilog.scalar.ph1136, label %._crit_edge722.us.us, !llvm.loop !95

._crit_edge722.us.us:                             ; preds = %vec.epilog.scalar.ph1136, %vec.epilog.middle.block1135, %middle.block1116
  %indvars.iv.next883 = add nuw nsw i64 %indvars.iv882, 1
  %exitcond886.not = icmp eq i64 %indvars.iv.next883, %indvars.iv887
  br i1 %exitcond886.not, label %._crit_edge725.split.us.us, label %iter.check1120, !llvm.loop !96

513:                                              ; preds = %455
  tail call void @__assert_fail(ptr noundef nonnull @.str.56, ptr noundef nonnull @.str.9, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_internal) #2
  unreachable

.loopexit:                                        ; preds = %._crit_edge703, %._crit_edge709, %._crit_edge715, %._crit_edge725.split.us.us, %.preheader593, %.preheader591, %.preheader589, %.preheader588
  %indvars.iv.next893 = add nsw i64 %indvars.iv892, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next893 to i32
  %exitcond895.not = icmp eq i32 %lftr.wideiv, %12
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond895.not, label %.loopexit596, label %386, !llvm.loop !97

514:                                              ; preds = %360
  %.not547 = icmp eq i64 %10, 0
  %515 = icmp slt i32 %11, %12
  br i1 %.not547, label %.preheader597, label %.preheader599

.preheader599:                                    ; preds = %514
  br i1 %515, label %.lr.ph698, label %.loopexit596

.lr.ph698:                                        ; preds = %.preheader599
  %516 = zext i32 %2 to i64
  %517 = sext i32 %11 to i64
  %wide.trip.count = sext i32 %12 to i64
  br label %520

.preheader597:                                    ; preds = %514
  br i1 %515, label %.lr.ph700, label %.loopexit596

.lr.ph700:                                        ; preds = %.preheader597
  %518 = zext i32 %2 to i64
  %519 = sext i32 %11 to i64
  %wide.trip.count850 = sext i32 %12 to i64
  br label %523

520:                                              ; preds = %.lr.ph698, %520
  %indvars.iv843 = phi i64 [ %517, %.lr.ph698 ], [ %indvars.iv.next844, %520 ]
  %521 = mul nsw i64 %indvars.iv843, %516
  %522 = getelementptr inbounds i8, ptr %0, i64 %521
  tail call void @libxsmm_itrans_scratch_jit(ptr noundef %522, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i64 %10)
  %indvars.iv.next844 = add nsw i64 %indvars.iv843, 1
  %exitcond846.not = icmp eq i64 %indvars.iv.next844, %wide.trip.count
  br i1 %exitcond846.not, label %.loopexit596, label %520, !llvm.loop !98

523:                                              ; preds = %.lr.ph700, %523
  %indvars.iv847 = phi i64 [ %519, %.lr.ph700 ], [ %indvars.iv.next848, %523 ]
  %524 = mul nsw i64 %indvars.iv847, %518
  %525 = getelementptr inbounds i8, ptr %0, i64 %524
  tail call void @libxsmm_itrans_scratch(ptr noundef %525, ptr noundef nonnull %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6)
  %indvars.iv.next848 = add nsw i64 %indvars.iv847, 1
  %exitcond851.not = icmp eq i64 %indvars.iv.next848, %wide.trip.count850
  br i1 %exitcond851.not, label %.loopexit596, label %523, !llvm.loop !99

.loopexit596:                                     ; preds = %.lr.ph, %.lr.ph636, %.loopexit624, %352, %357, %.loopexit606, %520, %523, %.loopexit, %172, %183, %21, %.preheader617, %.preheader615, %.preheader613, %.preheader599, %.preheader597, %.preheader595
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !13}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12, !13, !14}
!18 = distinct !{!18, !12, !13}
!19 = distinct !{!19, !12}
!20 = !{!21, !21, i64 0}
!21 = !{!"long", !7, i64 0}
!22 = distinct !{!22, !12, !13, !14}
!23 = distinct !{!23, !12, !13}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}
!26 = !{!7, !7, i64 0}
!27 = !{!28}
!28 = distinct !{!28, !29}
!29 = distinct !{!29, !"LVerDomain"}
!30 = !{!31}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !12, !13, !14}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !12, !13, !14}
!39 = distinct !{!39, !12, !13}
!40 = distinct !{!40, !12}
!41 = distinct !{!41, !12}
!42 = distinct !{!42, !12}
!43 = distinct !{!43, !12}
!44 = !{!45, !45, i64 0}
!45 = !{!"any pointer", !7, i64 0}
!46 = distinct !{!46, !12, !13, !14}
!47 = distinct !{!47, !12, !13}
!48 = distinct !{!48, !12}
!49 = distinct !{!49, !12, !13, !14}
!50 = distinct !{!50, !12, !13}
!51 = distinct !{!51, !12}
!52 = distinct !{!52, !12, !13, !14}
!53 = distinct !{!53, !12, !13}
!54 = distinct !{!54, !12}
!55 = distinct !{!55, !12}
!56 = !{!57}
!57 = distinct !{!57, !58}
!58 = distinct !{!58, !"LVerDomain"}
!59 = !{!60}
!60 = distinct !{!60, !58}
!61 = distinct !{!61, !12, !13, !14}
!62 = !{!63}
!63 = distinct !{!63, !64}
!64 = distinct !{!64, !"LVerDomain"}
!65 = !{!66}
!66 = distinct !{!66, !64}
!67 = distinct !{!67, !12, !13, !14}
!68 = distinct !{!68, !12, !13}
!69 = distinct !{!69, !12}
!70 = distinct !{!70, !12}
!71 = distinct !{!71, !12}
!72 = distinct !{!72, !12}
!73 = distinct !{!73, !12, !13, !14}
!74 = distinct !{!74, !12, !13}
!75 = distinct !{!75, !12}
!76 = distinct !{!76, !12, !13, !14}
!77 = distinct !{!77, !12, !13}
!78 = distinct !{!78, !12}
!79 = distinct !{!79, !12, !13, !14}
!80 = distinct !{!80, !12, !13}
!81 = distinct !{!81, !12}
!82 = distinct !{!82, !12}
!83 = !{!84}
!84 = distinct !{!84, !85}
!85 = distinct !{!85, !"LVerDomain"}
!86 = !{!87}
!87 = distinct !{!87, !85}
!88 = distinct !{!88, !12, !13, !14}
!89 = !{!90}
!90 = distinct !{!90, !91}
!91 = distinct !{!91, !"LVerDomain"}
!92 = !{!93}
!93 = distinct !{!93, !91}
!94 = distinct !{!94, !12, !13, !14}
!95 = distinct !{!95, !12, !13}
!96 = distinct !{!96, !12}
!97 = distinct !{!97, !12}
!98 = distinct !{!98, !12}
!99 = distinct !{!99, !12}


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