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

@.str.9 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [260 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [60 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_itrans_scratch = external hidden unnamed_addr constant [126 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: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_itrans_scratch(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) #3 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca i8, align 1
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i8, align 1
  %59 = alloca ptr, align 8
  %60 = alloca i8, align 1
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store i32 %2, ptr %10, align 4, !tbaa !9
  store i32 %3, ptr %11, align 4, !tbaa !9
  store i32 %4, ptr %12, align 4, !tbaa !9
  store i32 %5, ptr %13, align 4, !tbaa !9
  store i32 %6, ptr %14, align 4, !tbaa !9
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  %62 = icmp ne ptr null, %61
  br i1 %62, label %63, label %75

63:                                               ; preds = %7
  %64 = load i32, ptr %10, align 4, !tbaa !9
  %65 = icmp ult i32 0, %64
  br i1 %65, label %66, label %75

66:                                               ; preds = %63
  %67 = load i32, ptr %11, align 4, !tbaa !9
  %68 = load i32, ptr %13, align 4, !tbaa !9
  %69 = icmp sle i32 %67, %68
  br i1 %69, label %70, label %75

70:                                               ; preds = %66
  %71 = load i32, ptr %12, align 4, !tbaa !9
  %72 = load i32, ptr %14, align 4, !tbaa !9
  %73 = icmp sle i32 %71, %72
  br i1 %73, label %74, label %75

74:                                               ; preds = %70
  br label %76

75:                                               ; preds = %70, %66, %63, %7
  call void @__assert_fail(ptr noundef @.str.53, ptr noundef @.str.9, i32 noundef 513, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_scratch) #4
  unreachable

76:                                               ; preds = %74
  br label %77

77:                                               ; preds = %76
  %78 = load i32, ptr %10, align 4, !tbaa !9
  switch i32 %78, label %262 [
    i32 2, label %79
    i32 4, label %125
    i32 8, label %171
    i32 16, label %217
  ]

79:                                               ; preds = %77
  br label %80

80:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %81

81:                                               ; preds = %120, %80
  %82 = load i32, ptr %15, align 4, !tbaa !9
  %83 = load i32, ptr %12, align 4, !tbaa !9
  %84 = icmp slt i32 %82, %83
  br i1 %84, label %85, label %123

85:                                               ; preds = %81
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %86

86:                                               ; preds = %116, %85
  %87 = load i32, ptr %16, align 4, !tbaa !9
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = icmp slt i32 %87, %88
  br i1 %89, label %90, label %119

90:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %91 = load ptr, ptr %8, align 8, !tbaa !5
  %92 = load i32, ptr %15, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = load i32, ptr %13, align 4, !tbaa !9
  %95 = sext i32 %94 to i64
  %96 = mul i64 %93, %95
  %97 = load i32, ptr %16, align 4, !tbaa !9
  %98 = sext i32 %97 to i64
  %99 = add i64 %96, %98
  %100 = mul i64 2, %99
  %101 = getelementptr inbounds i8, ptr %91, i64 %100
  store ptr %101, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %102 = load ptr, ptr %9, align 8, !tbaa !5
  %103 = load i32, ptr %15, align 4, !tbaa !9
  %104 = sext i32 %103 to i64
  %105 = load i32, ptr %11, align 4, !tbaa !9
  %106 = sext i32 %105 to i64
  %107 = mul i64 %104, %106
  %108 = load i32, ptr %16, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = add i64 %107, %109
  %111 = mul i64 2, %110
  %112 = getelementptr inbounds i8, ptr %102, i64 %111
  store ptr %112, ptr %18, align 8, !tbaa !5
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = load i16, ptr %113, align 2, !tbaa !11
  %115 = load ptr, ptr %18, align 8, !tbaa !5
  store i16 %114, ptr %115, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %116

116:                                              ; preds = %90
  %117 = load i32, ptr %16, align 4, !tbaa !9
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr %16, align 4, !tbaa !9
  br label %86, !llvm.loop !13

119:                                              ; preds = %86
  br label %120

120:                                              ; preds = %119
  %121 = load i32, ptr %15, align 4, !tbaa !9
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %15, align 4, !tbaa !9
  br label %81, !llvm.loop !15

123:                                              ; preds = %81
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %124

124:                                              ; preds = %123
  br label %363

125:                                              ; preds = %77
  br label %126

126:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %127

127:                                              ; preds = %166, %126
  %128 = load i32, ptr %19, align 4, !tbaa !9
  %129 = load i32, ptr %12, align 4, !tbaa !9
  %130 = icmp slt i32 %128, %129
  br i1 %130, label %131, label %169

131:                                              ; preds = %127
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %132

132:                                              ; preds = %162, %131
  %133 = load i32, ptr %20, align 4, !tbaa !9
  %134 = load i32, ptr %11, align 4, !tbaa !9
  %135 = icmp slt i32 %133, %134
  br i1 %135, label %136, label %165

136:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = load i32, ptr %19, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = load i32, ptr %13, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = mul i64 %139, %141
  %143 = load i32, ptr %20, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = add i64 %142, %144
  %146 = mul i64 4, %145
  %147 = getelementptr inbounds i8, ptr %137, i64 %146
  store ptr %147, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %148 = load ptr, ptr %9, align 8, !tbaa !5
  %149 = load i32, ptr %19, align 4, !tbaa !9
  %150 = sext i32 %149 to i64
  %151 = load i32, ptr %11, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = mul i64 %150, %152
  %154 = load i32, ptr %20, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = add i64 %153, %155
  %157 = mul i64 4, %156
  %158 = getelementptr inbounds i8, ptr %148, i64 %157
  store ptr %158, ptr %22, align 8, !tbaa !5
  %159 = load ptr, ptr %21, align 8, !tbaa !5
  %160 = load float, ptr %159, align 4, !tbaa !16
  %161 = load ptr, ptr %22, align 8, !tbaa !5
  store float %160, ptr %161, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %162

162:                                              ; preds = %136
  %163 = load i32, ptr %20, align 4, !tbaa !9
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %20, align 4, !tbaa !9
  br label %132, !llvm.loop !18

165:                                              ; preds = %132
  br label %166

166:                                              ; preds = %165
  %167 = load i32, ptr %19, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %19, align 4, !tbaa !9
  br label %127, !llvm.loop !19

169:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %170

170:                                              ; preds = %169
  br label %363

171:                                              ; preds = %77
  br label %172

172:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %212, %172
  %174 = load i32, ptr %23, align 4, !tbaa !9
  %175 = load i32, ptr %12, align 4, !tbaa !9
  %176 = icmp slt i32 %174, %175
  br i1 %176, label %177, label %215

177:                                              ; preds = %173
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %178

178:                                              ; preds = %208, %177
  %179 = load i32, ptr %24, align 4, !tbaa !9
  %180 = load i32, ptr %11, align 4, !tbaa !9
  %181 = icmp slt i32 %179, %180
  br i1 %181, label %182, label %211

182:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %183 = load ptr, ptr %8, align 8, !tbaa !5
  %184 = load i32, ptr %23, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = load i32, ptr %13, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = mul i64 %185, %187
  %189 = load i32, ptr %24, align 4, !tbaa !9
  %190 = sext i32 %189 to i64
  %191 = add i64 %188, %190
  %192 = mul i64 8, %191
  %193 = getelementptr inbounds i8, ptr %183, i64 %192
  store ptr %193, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %194 = load ptr, ptr %9, align 8, !tbaa !5
  %195 = load i32, ptr %23, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = load i32, ptr %11, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = mul i64 %196, %198
  %200 = load i32, ptr %24, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = add i64 %199, %201
  %203 = mul i64 8, %202
  %204 = getelementptr inbounds i8, ptr %194, i64 %203
  store ptr %204, ptr %26, align 8, !tbaa !5
  %205 = load ptr, ptr %25, align 8, !tbaa !5
  %206 = load double, ptr %205, align 8, !tbaa !20
  %207 = load ptr, ptr %26, align 8, !tbaa !5
  store double %206, ptr %207, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %208

208:                                              ; preds = %182
  %209 = load i32, ptr %24, align 4, !tbaa !9
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %24, align 4, !tbaa !9
  br label %178, !llvm.loop !22

211:                                              ; preds = %178
  br label %212

212:                                              ; preds = %211
  %213 = load i32, ptr %23, align 4, !tbaa !9
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %23, align 4, !tbaa !9
  br label %173, !llvm.loop !23

215:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %216

216:                                              ; preds = %215
  br label %363

217:                                              ; preds = %77
  br label %218

218:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %257, %218
  %220 = load i32, ptr %27, align 4, !tbaa !9
  %221 = load i32, ptr %12, align 4, !tbaa !9
  %222 = icmp slt i32 %220, %221
  br i1 %222, label %223, label %260

223:                                              ; preds = %219
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %253, %223
  %225 = load i32, ptr %28, align 4, !tbaa !9
  %226 = load i32, ptr %11, align 4, !tbaa !9
  %227 = icmp slt i32 %225, %226
  br i1 %227, label %228, label %256

228:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = load i32, ptr %27, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = load i32, ptr %13, align 4, !tbaa !9
  %233 = sext i32 %232 to i64
  %234 = mul i64 %231, %233
  %235 = load i32, ptr %28, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = add i64 %234, %236
  %238 = mul i64 16, %237
  %239 = getelementptr inbounds i8, ptr %229, i64 %238
  store ptr %239, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = load i32, ptr %27, align 4, !tbaa !9
  %242 = sext i32 %241 to i64
  %243 = load i32, ptr %11, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = mul i64 %242, %244
  %246 = load i32, ptr %28, align 4, !tbaa !9
  %247 = sext i32 %246 to i64
  %248 = add i64 %245, %247
  %249 = mul i64 16, %248
  %250 = getelementptr inbounds i8, ptr %240, i64 %249
  store ptr %250, ptr %30, align 8, !tbaa !5
  %251 = load ptr, ptr %30, align 8, !tbaa !5
  %252 = load ptr, ptr %29, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %251, ptr align 8 %252, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %253

253:                                              ; preds = %228
  %254 = load i32, ptr %28, align 4, !tbaa !9
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %28, align 4, !tbaa !9
  br label %224, !llvm.loop !26

256:                                              ; preds = %224
  br label %257

257:                                              ; preds = %256
  %258 = load i32, ptr %27, align 4, !tbaa !9
  %259 = add nsw i32 %258, 1
  store i32 %259, ptr %27, align 4, !tbaa !9
  br label %219, !llvm.loop !27

260:                                              ; preds = %219
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %261

261:                                              ; preds = %260
  br label %363

262:                                              ; preds = %77
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %263

263:                                              ; preds = %359, %262
  %264 = load i32, ptr %31, align 4, !tbaa !9
  %265 = load i32, ptr %12, align 4, !tbaa !9
  %266 = icmp slt i32 %264, %265
  br i1 %266, label %267, label %362

267:                                              ; preds = %263
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %268

268:                                              ; preds = %355, %267
  %269 = load i32, ptr %32, align 4, !tbaa !9
  %270 = load i32, ptr %11, align 4, !tbaa !9
  %271 = icmp slt i32 %269, %270
  br i1 %271, label %272, label %358

272:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = load i32, ptr %10, align 4, !tbaa !9
  %275 = zext i32 %274 to i64
  %276 = load i32, ptr %31, align 4, !tbaa !9
  %277 = sext i32 %276 to i64
  %278 = load i32, ptr %13, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = mul i64 %277, %279
  %281 = load i32, ptr %32, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = add i64 %280, %282
  %284 = mul i64 %275, %283
  %285 = getelementptr inbounds i8, ptr %273, i64 %284
  store ptr %285, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %286 = load ptr, ptr %9, align 8, !tbaa !5
  %287 = load i32, ptr %10, align 4, !tbaa !9
  %288 = zext i32 %287 to i64
  %289 = load i32, ptr %31, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = load i32, ptr %11, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = mul i64 %290, %292
  %294 = load i32, ptr %32, align 4, !tbaa !9
  %295 = sext i32 %294 to i64
  %296 = add i64 %293, %295
  %297 = mul i64 %288, %296
  %298 = getelementptr inbounds i8, ptr %286, i64 %297
  store ptr %298, ptr %34, align 8, !tbaa !5
  br label %299

299:                                              ; preds = %272
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #5
  %300 = load i32, ptr %10, align 4, !tbaa !9
  %301 = trunc i32 %300 to i8
  %302 = sext i8 %301 to i32
  %303 = icmp eq i32 -128, %302
  br i1 %303, label %309, label %304

304:                                              ; preds = %299
  %305 = load i32, ptr %10, align 4, !tbaa !9
  %306 = trunc i32 %305 to i8
  %307 = sext i8 %306 to i32
  %308 = icmp slt i32 -128, %307
  br i1 %308, label %309, label %328

309:                                              ; preds = %304, %299
  %310 = load i32, ptr %10, align 4, !tbaa !9
  %311 = zext i32 %310 to i64
  %312 = mul i64 1, %311
  %313 = icmp ult i64 %312, 127
  br i1 %313, label %314, label %318

314:                                              ; preds = %309
  %315 = load i32, ptr %10, align 4, !tbaa !9
  %316 = zext i32 %315 to i64
  %317 = mul i64 1, %316
  br label %319

318:                                              ; preds = %309
  br label %319

319:                                              ; preds = %318, %314
  %320 = phi i64 [ %317, %314 ], [ 127, %318 ]
  %321 = icmp ule i64 %320, 127
  br i1 %321, label %322, label %328

322:                                              ; preds = %319
  %323 = load i32, ptr %10, align 4, !tbaa !9
  %324 = uitofp i32 %323 to double
  %325 = fcmp ole double 0.000000e+00, %324
  br i1 %325, label %327, label %326

326:                                              ; preds = %322
  br i1 true, label %327, label %328

327:                                              ; preds = %326, %322
  br label %329

328:                                              ; preds = %326, %319, %304
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 514, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_scratch) #4
  unreachable

329:                                              ; preds = %327
  %330 = load i32, ptr %10, align 4, !tbaa !9
  %331 = trunc i32 %330 to i8
  store i8 %331, ptr %35, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %332 = load ptr, ptr %34, align 8, !tbaa !5
  store ptr %332, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #5
  store i8 0, ptr %37, align 1, !tbaa !25
  br label %333

333:                                              ; preds = %349, %329
  %334 = load i8, ptr %37, align 1, !tbaa !25
  %335 = sext i8 %334 to i32
  %336 = load i8, ptr %35, align 1, !tbaa !25
  %337 = sext i8 %336 to i32
  %338 = icmp slt i32 %335, %337
  br i1 %338, label %339, label %352

339:                                              ; preds = %333
  %340 = load ptr, ptr %33, align 8, !tbaa !5
  %341 = load i8, ptr %37, align 1, !tbaa !25
  %342 = sext i8 %341 to i64
  %343 = getelementptr inbounds i8, ptr %340, i64 %342
  %344 = load i8, ptr %343, align 1, !tbaa !25
  %345 = load ptr, ptr %36, align 8, !tbaa !5
  %346 = load i8, ptr %37, align 1, !tbaa !25
  %347 = sext i8 %346 to i64
  %348 = getelementptr inbounds i8, ptr %345, i64 %347
  store i8 %344, ptr %348, align 1, !tbaa !25
  br label %349

349:                                              ; preds = %339
  %350 = load i8, ptr %37, align 1, !tbaa !25
  %351 = add i8 %350, 1
  store i8 %351, ptr %37, align 1, !tbaa !25
  br label %333, !llvm.loop !28

352:                                              ; preds = %333
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #5
  br label %353

353:                                              ; preds = %352
  br label %354

354:                                              ; preds = %353
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %355

355:                                              ; preds = %354
  %356 = load i32, ptr %32, align 4, !tbaa !9
  %357 = add nsw i32 %356, 1
  store i32 %357, ptr %32, align 4, !tbaa !9
  br label %268, !llvm.loop !30

358:                                              ; preds = %268
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %31, align 4, !tbaa !9
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %31, align 4, !tbaa !9
  br label %263, !llvm.loop !31

362:                                              ; preds = %263
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %363

363:                                              ; preds = %362, %261, %216, %170, %124
  br label %364

364:                                              ; preds = %363
  br label %365

365:                                              ; preds = %364
  %366 = load i32, ptr %10, align 4, !tbaa !9
  switch i32 %366, label %550 [
    i32 2, label %367
    i32 4, label %413
    i32 8, label %459
    i32 16, label %505
  ]

367:                                              ; preds = %365
  br label %368

368:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %408, %368
  %370 = load i32, ptr %38, align 4, !tbaa !9
  %371 = load i32, ptr %11, align 4, !tbaa !9
  %372 = icmp slt i32 %370, %371
  br i1 %372, label %373, label %411

373:                                              ; preds = %369
  store i32 0, ptr %39, align 4, !tbaa !9
  br label %374

374:                                              ; preds = %404, %373
  %375 = load i32, ptr %39, align 4, !tbaa !9
  %376 = load i32, ptr %12, align 4, !tbaa !9
  %377 = icmp slt i32 %375, %376
  br i1 %377, label %378, label %407

378:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %379 = load ptr, ptr %9, align 8, !tbaa !5
  %380 = load i32, ptr %39, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = load i32, ptr %11, align 4, !tbaa !9
  %383 = sext i32 %382 to i64
  %384 = mul i64 %381, %383
  %385 = load i32, ptr %38, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = add i64 %384, %386
  %388 = mul i64 2, %387
  %389 = getelementptr inbounds i8, ptr %379, i64 %388
  store ptr %389, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %390 = load ptr, ptr %8, align 8, !tbaa !5
  %391 = load i32, ptr %38, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = load i32, ptr %14, align 4, !tbaa !9
  %394 = sext i32 %393 to i64
  %395 = mul i64 %392, %394
  %396 = load i32, ptr %39, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = add i64 %395, %397
  %399 = mul i64 2, %398
  %400 = getelementptr inbounds i8, ptr %390, i64 %399
  store ptr %400, ptr %41, align 8, !tbaa !5
  %401 = load ptr, ptr %40, align 8, !tbaa !5
  %402 = load i16, ptr %401, align 2, !tbaa !11
  %403 = load ptr, ptr %41, align 8, !tbaa !5
  store i16 %402, ptr %403, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %404

404:                                              ; preds = %378
  %405 = load i32, ptr %39, align 4, !tbaa !9
  %406 = add nsw i32 %405, 1
  store i32 %406, ptr %39, align 4, !tbaa !9
  br label %374, !llvm.loop !32

407:                                              ; preds = %374
  br label %408

408:                                              ; preds = %407
  %409 = load i32, ptr %38, align 4, !tbaa !9
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %38, align 4, !tbaa !9
  br label %369, !llvm.loop !33

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

412:                                              ; preds = %411
  br label %651

413:                                              ; preds = %365
  br label %414

414:                                              ; preds = %413
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %415

415:                                              ; preds = %454, %414
  %416 = load i32, ptr %42, align 4, !tbaa !9
  %417 = load i32, ptr %11, align 4, !tbaa !9
  %418 = icmp slt i32 %416, %417
  br i1 %418, label %419, label %457

419:                                              ; preds = %415
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %420

420:                                              ; preds = %450, %419
  %421 = load i32, ptr %43, align 4, !tbaa !9
  %422 = load i32, ptr %12, align 4, !tbaa !9
  %423 = icmp slt i32 %421, %422
  br i1 %423, label %424, label %453

424:                                              ; preds = %420
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %425 = load ptr, ptr %9, align 8, !tbaa !5
  %426 = load i32, ptr %43, align 4, !tbaa !9
  %427 = sext i32 %426 to i64
  %428 = load i32, ptr %11, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = mul i64 %427, %429
  %431 = load i32, ptr %42, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = add i64 %430, %432
  %434 = mul i64 4, %433
  %435 = getelementptr inbounds i8, ptr %425, i64 %434
  store ptr %435, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = load i32, ptr %42, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = load i32, ptr %14, align 4, !tbaa !9
  %440 = sext i32 %439 to i64
  %441 = mul i64 %438, %440
  %442 = load i32, ptr %43, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = add i64 %441, %443
  %445 = mul i64 4, %444
  %446 = getelementptr inbounds i8, ptr %436, i64 %445
  store ptr %446, ptr %45, align 8, !tbaa !5
  %447 = load ptr, ptr %44, align 8, !tbaa !5
  %448 = load float, ptr %447, align 4, !tbaa !16
  %449 = load ptr, ptr %45, align 8, !tbaa !5
  store float %448, ptr %449, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  br label %450

450:                                              ; preds = %424
  %451 = load i32, ptr %43, align 4, !tbaa !9
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %43, align 4, !tbaa !9
  br label %420, !llvm.loop !34

453:                                              ; preds = %420
  br label %454

454:                                              ; preds = %453
  %455 = load i32, ptr %42, align 4, !tbaa !9
  %456 = add nsw i32 %455, 1
  store i32 %456, ptr %42, align 4, !tbaa !9
  br label %415, !llvm.loop !35

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

458:                                              ; preds = %457
  br label %651

459:                                              ; preds = %365
  br label %460

460:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  store i32 0, ptr %46, align 4, !tbaa !9
  br label %461

461:                                              ; preds = %500, %460
  %462 = load i32, ptr %46, align 4, !tbaa !9
  %463 = load i32, ptr %11, align 4, !tbaa !9
  %464 = icmp slt i32 %462, %463
  br i1 %464, label %465, label %503

465:                                              ; preds = %461
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %496, %465
  %467 = load i32, ptr %47, align 4, !tbaa !9
  %468 = load i32, ptr %12, align 4, !tbaa !9
  %469 = icmp slt i32 %467, %468
  br i1 %469, label %470, label %499

470:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %471 = load ptr, ptr %9, align 8, !tbaa !5
  %472 = load i32, ptr %47, align 4, !tbaa !9
  %473 = sext i32 %472 to i64
  %474 = load i32, ptr %11, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = mul i64 %473, %475
  %477 = load i32, ptr %46, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = add i64 %476, %478
  %480 = mul i64 8, %479
  %481 = getelementptr inbounds i8, ptr %471, i64 %480
  store ptr %481, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %482 = load ptr, ptr %8, align 8, !tbaa !5
  %483 = load i32, ptr %46, align 4, !tbaa !9
  %484 = sext i32 %483 to i64
  %485 = load i32, ptr %14, align 4, !tbaa !9
  %486 = sext i32 %485 to i64
  %487 = mul i64 %484, %486
  %488 = load i32, ptr %47, align 4, !tbaa !9
  %489 = sext i32 %488 to i64
  %490 = add i64 %487, %489
  %491 = mul i64 8, %490
  %492 = getelementptr inbounds i8, ptr %482, i64 %491
  store ptr %492, ptr %49, align 8, !tbaa !5
  %493 = load ptr, ptr %48, align 8, !tbaa !5
  %494 = load double, ptr %493, align 8, !tbaa !20
  %495 = load ptr, ptr %49, align 8, !tbaa !5
  store double %494, ptr %495, align 8, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %496

496:                                              ; preds = %470
  %497 = load i32, ptr %47, align 4, !tbaa !9
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %47, align 4, !tbaa !9
  br label %466, !llvm.loop !36

499:                                              ; preds = %466
  br label %500

500:                                              ; preds = %499
  %501 = load i32, ptr %46, align 4, !tbaa !9
  %502 = add nsw i32 %501, 1
  store i32 %502, ptr %46, align 4, !tbaa !9
  br label %461, !llvm.loop !37

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

504:                                              ; preds = %503
  br label %651

505:                                              ; preds = %365
  br label %506

506:                                              ; preds = %505
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  store i32 0, ptr %50, align 4, !tbaa !9
  br label %507

507:                                              ; preds = %545, %506
  %508 = load i32, ptr %50, align 4, !tbaa !9
  %509 = load i32, ptr %11, align 4, !tbaa !9
  %510 = icmp slt i32 %508, %509
  br i1 %510, label %511, label %548

511:                                              ; preds = %507
  store i32 0, ptr %51, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %541, %511
  %513 = load i32, ptr %51, align 4, !tbaa !9
  %514 = load i32, ptr %12, align 4, !tbaa !9
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %544

516:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %517 = load ptr, ptr %9, align 8, !tbaa !5
  %518 = load i32, ptr %51, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = load i32, ptr %11, align 4, !tbaa !9
  %521 = sext i32 %520 to i64
  %522 = mul i64 %519, %521
  %523 = load i32, ptr %50, align 4, !tbaa !9
  %524 = sext i32 %523 to i64
  %525 = add i64 %522, %524
  %526 = mul i64 16, %525
  %527 = getelementptr inbounds i8, ptr %517, i64 %526
  store ptr %527, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %528 = load ptr, ptr %8, align 8, !tbaa !5
  %529 = load i32, ptr %50, align 4, !tbaa !9
  %530 = sext i32 %529 to i64
  %531 = load i32, ptr %14, align 4, !tbaa !9
  %532 = sext i32 %531 to i64
  %533 = mul i64 %530, %532
  %534 = load i32, ptr %51, align 4, !tbaa !9
  %535 = sext i32 %534 to i64
  %536 = add i64 %533, %535
  %537 = mul i64 16, %536
  %538 = getelementptr inbounds i8, ptr %528, i64 %537
  store ptr %538, ptr %53, align 8, !tbaa !5
  %539 = load ptr, ptr %53, align 8, !tbaa !5
  %540 = load ptr, ptr %52, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %539, ptr align 8 %540, i64 16, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  br label %541

541:                                              ; preds = %516
  %542 = load i32, ptr %51, align 4, !tbaa !9
  %543 = add nsw i32 %542, 1
  store i32 %543, ptr %51, align 4, !tbaa !9
  br label %512, !llvm.loop !38

544:                                              ; preds = %512
  br label %545

545:                                              ; preds = %544
  %546 = load i32, ptr %50, align 4, !tbaa !9
  %547 = add nsw i32 %546, 1
  store i32 %547, ptr %50, align 4, !tbaa !9
  br label %507, !llvm.loop !39

548:                                              ; preds = %507
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  br label %549

549:                                              ; preds = %548
  br label %651

550:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %551

551:                                              ; preds = %647, %550
  %552 = load i32, ptr %54, align 4, !tbaa !9
  %553 = load i32, ptr %11, align 4, !tbaa !9
  %554 = icmp slt i32 %552, %553
  br i1 %554, label %555, label %650

555:                                              ; preds = %551
  store i32 0, ptr %55, align 4, !tbaa !9
  br label %556

556:                                              ; preds = %643, %555
  %557 = load i32, ptr %55, align 4, !tbaa !9
  %558 = load i32, ptr %12, align 4, !tbaa !9
  %559 = icmp slt i32 %557, %558
  br i1 %559, label %560, label %646

560:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %561 = load ptr, ptr %9, align 8, !tbaa !5
  %562 = load i32, ptr %10, align 4, !tbaa !9
  %563 = zext i32 %562 to i64
  %564 = load i32, ptr %55, align 4, !tbaa !9
  %565 = sext i32 %564 to i64
  %566 = load i32, ptr %11, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = mul i64 %565, %567
  %569 = load i32, ptr %54, align 4, !tbaa !9
  %570 = sext i32 %569 to i64
  %571 = add i64 %568, %570
  %572 = mul i64 %563, %571
  %573 = getelementptr inbounds i8, ptr %561, i64 %572
  store ptr %573, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  %574 = load ptr, ptr %8, align 8, !tbaa !5
  %575 = load i32, ptr %10, align 4, !tbaa !9
  %576 = zext i32 %575 to i64
  %577 = load i32, ptr %54, align 4, !tbaa !9
  %578 = sext i32 %577 to i64
  %579 = load i32, ptr %14, align 4, !tbaa !9
  %580 = sext i32 %579 to i64
  %581 = mul i64 %578, %580
  %582 = load i32, ptr %55, align 4, !tbaa !9
  %583 = sext i32 %582 to i64
  %584 = add i64 %581, %583
  %585 = mul i64 %576, %584
  %586 = getelementptr inbounds i8, ptr %574, i64 %585
  store ptr %586, ptr %57, align 8, !tbaa !5
  br label %587

587:                                              ; preds = %560
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #5
  %588 = load i32, ptr %10, align 4, !tbaa !9
  %589 = trunc i32 %588 to i8
  %590 = sext i8 %589 to i32
  %591 = icmp eq i32 -128, %590
  br i1 %591, label %597, label %592

592:                                              ; preds = %587
  %593 = load i32, ptr %10, align 4, !tbaa !9
  %594 = trunc i32 %593 to i8
  %595 = sext i8 %594 to i32
  %596 = icmp slt i32 -128, %595
  br i1 %596, label %597, label %616

597:                                              ; preds = %592, %587
  %598 = load i32, ptr %10, align 4, !tbaa !9
  %599 = zext i32 %598 to i64
  %600 = mul i64 1, %599
  %601 = icmp ult i64 %600, 127
  br i1 %601, label %602, label %606

602:                                              ; preds = %597
  %603 = load i32, ptr %10, align 4, !tbaa !9
  %604 = zext i32 %603 to i64
  %605 = mul i64 1, %604
  br label %607

606:                                              ; preds = %597
  br label %607

607:                                              ; preds = %606, %602
  %608 = phi i64 [ %605, %602 ], [ 127, %606 ]
  %609 = icmp ule i64 %608, 127
  br i1 %609, label %610, label %616

610:                                              ; preds = %607
  %611 = load i32, ptr %10, align 4, !tbaa !9
  %612 = uitofp i32 %611 to double
  %613 = fcmp ole double 0.000000e+00, %612
  br i1 %613, label %615, label %614

614:                                              ; preds = %610
  br i1 true, label %615, label %616

615:                                              ; preds = %614, %610
  br label %617

616:                                              ; preds = %614, %607, %592
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.9, i32 noundef 515, ptr noundef @__PRETTY_FUNCTION__.libxsmm_itrans_scratch) #4
  unreachable

617:                                              ; preds = %615
  %618 = load i32, ptr %10, align 4, !tbaa !9
  %619 = trunc i32 %618 to i8
  store i8 %619, ptr %58, align 1, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %620 = load ptr, ptr %57, align 8, !tbaa !5
  store ptr %620, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #5
  store i8 0, ptr %60, align 1, !tbaa !25
  br label %621

621:                                              ; preds = %637, %617
  %622 = load i8, ptr %60, align 1, !tbaa !25
  %623 = sext i8 %622 to i32
  %624 = load i8, ptr %58, align 1, !tbaa !25
  %625 = sext i8 %624 to i32
  %626 = icmp slt i32 %623, %625
  br i1 %626, label %627, label %640

627:                                              ; preds = %621
  %628 = load ptr, ptr %56, align 8, !tbaa !5
  %629 = load i8, ptr %60, align 1, !tbaa !25
  %630 = sext i8 %629 to i64
  %631 = getelementptr inbounds i8, ptr %628, i64 %630
  %632 = load i8, ptr %631, align 1, !tbaa !25
  %633 = load ptr, ptr %59, align 8, !tbaa !5
  %634 = load i8, ptr %60, align 1, !tbaa !25
  %635 = sext i8 %634 to i64
  %636 = getelementptr inbounds i8, ptr %633, i64 %635
  store i8 %632, ptr %636, align 1, !tbaa !25
  br label %637

637:                                              ; preds = %627
  %638 = load i8, ptr %60, align 1, !tbaa !25
  %639 = add i8 %638, 1
  store i8 %639, ptr %60, align 1, !tbaa !25
  br label %621, !llvm.loop !40

640:                                              ; preds = %621
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #5
  br label %641

641:                                              ; preds = %640
  br label %642

642:                                              ; preds = %641
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  br label %643

643:                                              ; preds = %642
  %644 = load i32, ptr %55, align 4, !tbaa !9
  %645 = add nsw i32 %644, 1
  store i32 %645, ptr %55, align 4, !tbaa !9
  br label %556, !llvm.loop !41

646:                                              ; preds = %556
  br label %647

647:                                              ; preds = %646
  %648 = load i32, ptr %54, align 4, !tbaa !9
  %649 = add nsw i32 %648, 1
  store i32 %649, ptr %54, align 4, !tbaa !9
  br label %551, !llvm.loop !42

650:                                              ; preds = %551
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  br label %651

651:                                              ; preds = %650, %549, %504, %458, %412
  br label %652

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"short", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!17, !17, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = !{i64 0, i64 16, !25}
!25 = !{!7, !7, i64 0}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14, !29}
!29 = !{!"llvm.loop.unroll.count", i32 4}
!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, !29}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !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.53 = external hidden unnamed_addr constant [60 x i8], align 1
@__PRETTY_FUNCTION__.libxsmm_itrans_scratch = external hidden unnamed_addr constant [126 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: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
define dso_local void @libxsmm_itrans_scratch(ptr noundef %0, ptr nocapture noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #2 {
  %8 = icmp eq ptr %0, null
  %9 = icmp eq i32 %2, 0
  %or.cond.not231 = or i1 %8, %9
  %.not = icmp sgt i32 %3, %5
  %or.cond227 = or i1 %or.cond.not231, %.not
  %.not225 = icmp sgt i32 %4, %6
  %or.cond228 = or i1 %or.cond227, %.not225
  br i1 %or.cond228, label %10, label %11

10:                                               ; preds = %7
  tail call void @__assert_fail(ptr noundef nonnull @.str.53, ptr noundef nonnull @.str.9, i32 noundef 513, ptr noundef nonnull @__PRETTY_FUNCTION__.libxsmm_itrans_scratch) #4
  unreachable

11:                                               ; preds = %7
  %12 = add i32 %2, -2
  %13 = tail call i32 @llvm.fshl.i32(i32 %12, i32 %12, i32 31)
  %14 = icmp sgt i32 %4, 0
  switch i32 %13, label %.preheader246 [
    i32 0, label %.preheader249
    i32 1, label %.preheader252
    i32 3, label %.preheader255
    i32 7, label %.preheader258
  ]

.preheader258:                                    ; preds = %11
  br i1 %14, label %.preheader257.lr.ph, label %.preheader243

.preheader257.lr.ph:                              ; preds = %.preheader258
  %15 = icmp sgt i32 %3, 0
  %16 = sext i32 %5 to i64
  %17 = zext i32 %3 to i64
  br i1 %15, label %.preheader257.us.preheader, label %.loopexit

.preheader257.us.preheader:                       ; preds = %.preheader257.lr.ph
  %wide.trip.count327 = zext nneg i32 %4 to i64
  %xtraiter = and i64 %17, 1
  %18 = icmp eq i32 %3, 1
  %unroll_iter = and i64 %17, 2147483646
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader257.us

.preheader257.us:                                 ; preds = %.preheader257.us.preheader, %._crit_edge.us
  %indvars.iv324 = phi i64 [ 0, %.preheader257.us.preheader ], [ %indvars.iv.next325, %._crit_edge.us ]
  %19 = mul nsw i64 %indvars.iv324, %16
  %20 = mul nuw nsw i64 %indvars.iv324, %17
  br i1 %18, label %._crit_edge.us.unr-lcssa, label %.preheader257.us.new

.preheader257.us.new:                             ; preds = %.preheader257.us, %.preheader257.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader257.us.new ], [ 0, %.preheader257.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader257.us.new ], [ 0, %.preheader257.us ]
  %21 = add nsw i64 %19, %indvars.iv
  %22 = shl i64 %21, 4
  %23 = getelementptr inbounds i8, ptr %0, i64 %22
  %24 = add nuw nsw i64 %20, %indvars.iv
  %25 = shl i64 %24, 4
  %26 = getelementptr inbounds i8, ptr %1, i64 %25
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %26, ptr noundef nonnull align 8 dereferenceable(16) %23, i64 16, i1 false), !tbaa.struct !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %27 = add nsw i64 %19, %indvars.iv.next
  %28 = shl i64 %27, 4
  %29 = getelementptr inbounds i8, ptr %0, i64 %28
  %30 = add nuw nsw i64 %20, %indvars.iv.next
  %31 = shl i64 %30, 4
  %32 = getelementptr inbounds i8, ptr %1, i64 %31
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef nonnull align 8 dereferenceable(16) %29, i64 16, i1 false), !tbaa.struct !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader257.us.new, !llvm.loop !9

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader257.us.new, %.preheader257.us
  %indvars.iv.unr = phi i64 [ 0, %.preheader257.us ], [ %indvars.iv.next.1, %.preheader257.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %33 = add nsw i64 %19, %indvars.iv.unr
  %34 = shl i64 %33, 4
  %35 = getelementptr inbounds i8, ptr %0, i64 %34
  %36 = add nuw nsw i64 %20, %indvars.iv.unr
  %37 = shl i64 %36, 4
  %38 = getelementptr inbounds i8, ptr %1, i64 %37
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(16) %35, i64 16, i1 false), !tbaa.struct !5
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %indvars.iv.next325 = add nuw nsw i64 %indvars.iv324, 1
  %exitcond328.not = icmp eq i64 %indvars.iv.next325, %wide.trip.count327
  br i1 %exitcond328.not, label %.loopexit247, label %.preheader257.us, !llvm.loop !11

.preheader255:                                    ; preds = %11
  br i1 %14, label %.preheader254.lr.ph, label %.preheader240

.preheader254.lr.ph:                              ; preds = %.preheader255
  %39 = icmp sgt i32 %3, 0
  %40 = sext i32 %5 to i64
  %41 = zext i32 %3 to i64
  br i1 %39, label %.preheader254.us.preheader, label %.loopexit

.preheader254.us.preheader:                       ; preds = %.preheader254.lr.ph
  %wide.trip.count338 = zext nneg i32 %4 to i64
  %42 = mul nuw nsw i64 %wide.trip.count338, %41
  %43 = shl i64 %42, 3
  %scevgep = getelementptr i8, ptr %1, i64 %43
  %44 = add nuw nsw i64 %wide.trip.count338, 2305843009213693951
  %45 = mul i64 %44, %40
  %46 = add i64 %45, %41
  %47 = shl i64 %46, 3
  %scevgep444 = getelementptr i8, ptr %0, i64 %47
  %min.iters.check = icmp ult i32 %3, 4
  %bound0 = icmp ugt ptr %scevgep444, %1
  %bound1 = icmp ugt ptr %scevgep, %0
  %found.conflict = and i1 %bound0, %bound1
  %n.vec = and i64 %41, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %41
  %xtraiter492 = and i64 %41, 1
  %lcmp.mod493.not = icmp eq i64 %xtraiter492, 0
  %48 = add nsw i64 %41, -1
  br label %.preheader254.us

.preheader254.us:                                 ; preds = %.preheader254.us.preheader, %._crit_edge.us264
  %indvars.iv335 = phi i64 [ 0, %.preheader254.us.preheader ], [ %indvars.iv.next336, %._crit_edge.us264 ]
  %49 = mul nsw i64 %indvars.iv335, %40
  %50 = mul nuw nsw i64 %indvars.iv335, %41
  %brmerge = select i1 %min.iters.check, i1 true, i1 %found.conflict
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.preheader254.us, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.preheader254.us ]
  %51 = add nsw i64 %49, %index
  %52 = shl i64 %51, 3
  %53 = getelementptr inbounds i8, ptr %0, i64 %52
  %54 = add nuw nsw i64 %50, %index
  %55 = shl i64 %54, 3
  %56 = getelementptr inbounds i8, ptr %1, i64 %55
  %57 = getelementptr inbounds i8, ptr %53, i64 16
  %wide.load = load <2 x double>, ptr %53, align 8, !tbaa !12, !alias.scope !14
  %wide.load445 = load <2 x double>, ptr %57, align 8, !tbaa !12, !alias.scope !14
  %58 = getelementptr inbounds i8, ptr %56, i64 16
  store <2 x double> %wide.load, ptr %56, align 8, !tbaa !12, !alias.scope !17, !noalias !14
  store <2 x double> %wide.load445, ptr %58, align 8, !tbaa !12, !alias.scope !17, !noalias !14
  %index.next = add nuw i64 %index, 4
  %59 = icmp eq i64 %index.next, %n.vec
  br i1 %59, label %middle.block, label %vector.body, !llvm.loop !19

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

scalar.ph.preheader:                              ; preds = %.preheader254.us, %middle.block
  %indvars.iv330.ph = phi i64 [ 0, %.preheader254.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod493.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %60 = add nsw i64 %49, %indvars.iv330.ph
  %61 = shl i64 %60, 3
  %62 = getelementptr inbounds i8, ptr %0, i64 %61
  %63 = add nuw nsw i64 %50, %indvars.iv330.ph
  %64 = shl i64 %63, 3
  %65 = getelementptr inbounds i8, ptr %1, i64 %64
  %66 = load double, ptr %62, align 8, !tbaa !12
  store double %66, ptr %65, align 8, !tbaa !12
  %indvars.iv.next331.prol = or disjoint i64 %indvars.iv330.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv330.unr = phi i64 [ %indvars.iv330.ph, %scalar.ph.preheader ], [ %indvars.iv.next331.prol, %scalar.ph.prol ]
  %67 = icmp eq i64 %indvars.iv330.ph, %48
  br i1 %67, label %._crit_edge.us264, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv330 = phi i64 [ %indvars.iv.next331.1, %scalar.ph ], [ %indvars.iv330.unr, %scalar.ph.prol.loopexit ]
  %68 = add nsw i64 %49, %indvars.iv330
  %69 = shl i64 %68, 3
  %70 = getelementptr inbounds i8, ptr %0, i64 %69
  %71 = add nuw nsw i64 %50, %indvars.iv330
  %72 = shl i64 %71, 3
  %73 = getelementptr inbounds i8, ptr %1, i64 %72
  %74 = load double, ptr %70, align 8, !tbaa !12
  store double %74, ptr %73, align 8, !tbaa !12
  %indvars.iv.next331 = add nuw nsw i64 %indvars.iv330, 1
  %75 = add nsw i64 %49, %indvars.iv.next331
  %76 = shl i64 %75, 3
  %77 = getelementptr inbounds i8, ptr %0, i64 %76
  %78 = add nuw nsw i64 %50, %indvars.iv.next331
  %79 = shl i64 %78, 3
  %80 = getelementptr inbounds i8, ptr %1, i64 %79
  %81 = load double, ptr %77, align 8, !tbaa !12
  store double %81, ptr %80, align 8, !tbaa !12
  %indvars.iv.next331.1 = add nuw nsw i64 %indvars.iv330, 2
  %exitcond334.not.1 = icmp eq i64 %indvars.iv.next331.1, %41
  br i1 %exitcond334.not.1, label %._crit_edge.us264, label %scalar.ph, !llvm.loop !22

._crit_edge.us264:                                ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %exitcond339.not = icmp eq i64 %indvars.iv.next336, %wide.trip.count338
  br i1 %exitcond339.not, label %.loopexit247, label %.preheader254.us, !llvm.loop !23

.preheader252:                                    ; preds = %11
  br i1 %14, label %.preheader251.lr.ph, label %.preheader237

.preheader251.lr.ph:                              ; preds = %.preheader252
  %82 = icmp sgt i32 %3, 0
  %83 = sext i32 %5 to i64
  %84 = zext i32 %3 to i64
  br i1 %82, label %.preheader251.us.preheader, label %.loopexit

.preheader251.us.preheader:                       ; preds = %.preheader251.lr.ph
  %wide.trip.count349 = zext nneg i32 %4 to i64
  %85 = mul nuw nsw i64 %wide.trip.count349, %84
  %86 = shl nuw i64 %85, 2
  %scevgep447 = getelementptr i8, ptr %1, i64 %86
  %87 = add nuw nsw i64 %wide.trip.count349, 4611686018427387903
  %88 = mul i64 %87, %83
  %89 = add i64 %88, %84
  %90 = shl i64 %89, 2
  %scevgep448 = getelementptr i8, ptr %0, i64 %90
  %min.iters.check454 = icmp ult i32 %3, 8
  %bound0449 = icmp ugt ptr %scevgep448, %1
  %bound1450 = icmp ugt ptr %scevgep447, %0
  %found.conflict451 = and i1 %bound0449, %bound1450
  %n.vec457 = and i64 %84, 2147483640
  %cmp.n464 = icmp eq i64 %n.vec457, %84
  %xtraiter494 = and i64 %84, 1
  %lcmp.mod495.not = icmp eq i64 %xtraiter494, 0
  %91 = add nsw i64 %84, -1
  br label %.preheader251.us

.preheader251.us:                                 ; preds = %.preheader251.us.preheader, %._crit_edge.us267
  %indvars.iv346 = phi i64 [ 0, %.preheader251.us.preheader ], [ %indvars.iv.next347, %._crit_edge.us267 ]
  %92 = mul nsw i64 %indvars.iv346, %83
  %93 = mul nuw nsw i64 %indvars.iv346, %84
  %brmerge518 = select i1 %min.iters.check454, i1 true, i1 %found.conflict451
  br i1 %brmerge518, label %scalar.ph453.preheader, label %vector.body459

vector.body459:                                   ; preds = %.preheader251.us, %vector.body459
  %index460 = phi i64 [ %index.next463, %vector.body459 ], [ 0, %.preheader251.us ]
  %94 = add nsw i64 %92, %index460
  %95 = shl i64 %94, 2
  %96 = getelementptr inbounds i8, ptr %0, i64 %95
  %97 = add nuw nsw i64 %93, %index460
  %98 = shl i64 %97, 2
  %99 = getelementptr inbounds i8, ptr %1, i64 %98
  %100 = getelementptr inbounds i8, ptr %96, i64 16
  %wide.load461 = load <4 x float>, ptr %96, align 4, !tbaa !24, !alias.scope !26
  %wide.load462 = load <4 x float>, ptr %100, align 4, !tbaa !24, !alias.scope !26
  %101 = getelementptr inbounds i8, ptr %99, i64 16
  store <4 x float> %wide.load461, ptr %99, align 4, !tbaa !24, !alias.scope !29, !noalias !26
  store <4 x float> %wide.load462, ptr %101, align 4, !tbaa !24, !alias.scope !29, !noalias !26
  %index.next463 = add nuw i64 %index460, 8
  %102 = icmp eq i64 %index.next463, %n.vec457
  br i1 %102, label %middle.block452, label %vector.body459, !llvm.loop !31

middle.block452:                                  ; preds = %vector.body459
  br i1 %cmp.n464, label %._crit_edge.us267, label %scalar.ph453.preheader

scalar.ph453.preheader:                           ; preds = %.preheader251.us, %middle.block452
  %indvars.iv341.ph = phi i64 [ 0, %.preheader251.us ], [ %n.vec457, %middle.block452 ]
  br i1 %lcmp.mod495.not, label %scalar.ph453.prol.loopexit, label %scalar.ph453.prol

scalar.ph453.prol:                                ; preds = %scalar.ph453.preheader
  %103 = add nsw i64 %92, %indvars.iv341.ph
  %104 = shl i64 %103, 2
  %105 = getelementptr inbounds i8, ptr %0, i64 %104
  %106 = add nuw nsw i64 %93, %indvars.iv341.ph
  %107 = shl i64 %106, 2
  %108 = getelementptr inbounds i8, ptr %1, i64 %107
  %109 = load float, ptr %105, align 4, !tbaa !24
  store float %109, ptr %108, align 4, !tbaa !24
  %indvars.iv.next342.prol = or disjoint i64 %indvars.iv341.ph, 1
  br label %scalar.ph453.prol.loopexit

scalar.ph453.prol.loopexit:                       ; preds = %scalar.ph453.prol, %scalar.ph453.preheader
  %indvars.iv341.unr = phi i64 [ %indvars.iv341.ph, %scalar.ph453.preheader ], [ %indvars.iv.next342.prol, %scalar.ph453.prol ]
  %110 = icmp eq i64 %indvars.iv341.ph, %91
  br i1 %110, label %._crit_edge.us267, label %scalar.ph453

scalar.ph453:                                     ; preds = %scalar.ph453.prol.loopexit, %scalar.ph453
  %indvars.iv341 = phi i64 [ %indvars.iv.next342.1, %scalar.ph453 ], [ %indvars.iv341.unr, %scalar.ph453.prol.loopexit ]
  %111 = add nsw i64 %92, %indvars.iv341
  %112 = shl i64 %111, 2
  %113 = getelementptr inbounds i8, ptr %0, i64 %112
  %114 = add nuw nsw i64 %93, %indvars.iv341
  %115 = shl i64 %114, 2
  %116 = getelementptr inbounds i8, ptr %1, i64 %115
  %117 = load float, ptr %113, align 4, !tbaa !24
  store float %117, ptr %116, align 4, !tbaa !24
  %indvars.iv.next342 = add nuw nsw i64 %indvars.iv341, 1
  %118 = add nsw i64 %92, %indvars.iv.next342
  %119 = shl i64 %118, 2
  %120 = getelementptr inbounds i8, ptr %0, i64 %119
  %121 = add nuw nsw i64 %93, %indvars.iv.next342
  %122 = shl i64 %121, 2
  %123 = getelementptr inbounds i8, ptr %1, i64 %122
  %124 = load float, ptr %120, align 4, !tbaa !24
  store float %124, ptr %123, align 4, !tbaa !24
  %indvars.iv.next342.1 = add nuw nsw i64 %indvars.iv341, 2
  %exitcond345.not.1 = icmp eq i64 %indvars.iv.next342.1, %84
  br i1 %exitcond345.not.1, label %._crit_edge.us267, label %scalar.ph453, !llvm.loop !32

._crit_edge.us267:                                ; preds = %scalar.ph453.prol.loopexit, %scalar.ph453, %middle.block452
  %indvars.iv.next347 = add nuw nsw i64 %indvars.iv346, 1
  %exitcond350.not = icmp eq i64 %indvars.iv.next347, %wide.trip.count349
  br i1 %exitcond350.not, label %.loopexit247, label %.preheader251.us, !llvm.loop !33

.preheader249:                                    ; preds = %11
  br i1 %14, label %.preheader248.lr.ph, label %.preheader234

.preheader248.lr.ph:                              ; preds = %.preheader249
  %125 = icmp sgt i32 %3, 0
  %126 = sext i32 %5 to i64
  %127 = zext i32 %3 to i64
  br i1 %125, label %.preheader248.us.preheader, label %.loopexit

.preheader248.us.preheader:                       ; preds = %.preheader248.lr.ph
  %wide.trip.count360 = zext nneg i32 %4 to i64
  %128 = mul nuw nsw i64 %wide.trip.count360, %127
  %129 = shl nuw nsw i64 %128, 1
  %scevgep466 = getelementptr i8, ptr %1, i64 %129
  %130 = add nuw i64 %wide.trip.count360, 9223372036854775807
  %131 = mul i64 %130, %126
  %132 = add i64 %131, %127
  %133 = shl i64 %132, 1
  %scevgep467 = getelementptr i8, ptr %0, i64 %133
  %min.iters.check473 = icmp ult i32 %3, 16
  %bound0468 = icmp ugt ptr %scevgep467, %1
  %bound1469 = icmp ugt ptr %scevgep466, %0
  %found.conflict470 = and i1 %bound0468, %bound1469
  %n.vec476 = and i64 %127, 2147483632
  %cmp.n483 = icmp eq i64 %n.vec476, %127
  %xtraiter496 = and i64 %127, 1
  %lcmp.mod497.not = icmp eq i64 %xtraiter496, 0
  %134 = add nsw i64 %127, -1
  br label %.preheader248.us

.preheader248.us:                                 ; preds = %.preheader248.us.preheader, %._crit_edge.us270
  %indvars.iv357 = phi i64 [ 0, %.preheader248.us.preheader ], [ %indvars.iv.next358, %._crit_edge.us270 ]
  %135 = mul nsw i64 %indvars.iv357, %126
  %136 = mul nuw nsw i64 %indvars.iv357, %127
  %brmerge519 = select i1 %min.iters.check473, i1 true, i1 %found.conflict470
  br i1 %brmerge519, label %scalar.ph472.preheader, label %vector.body478

vector.body478:                                   ; preds = %.preheader248.us, %vector.body478
  %index479 = phi i64 [ %index.next482, %vector.body478 ], [ 0, %.preheader248.us ]
  %137 = add nsw i64 %135, %index479
  %138 = shl i64 %137, 1
  %139 = getelementptr inbounds i8, ptr %0, i64 %138
  %140 = add nuw nsw i64 %136, %index479
  %141 = shl nuw i64 %140, 1
  %142 = getelementptr inbounds i8, ptr %1, i64 %141
  %143 = getelementptr inbounds i8, ptr %139, i64 16
  %wide.load480 = load <8 x i16>, ptr %139, align 2, !tbaa !34, !alias.scope !36
  %wide.load481 = load <8 x i16>, ptr %143, align 2, !tbaa !34, !alias.scope !36
  %144 = getelementptr inbounds i8, ptr %142, i64 16
  store <8 x i16> %wide.load480, ptr %142, align 2, !tbaa !34, !alias.scope !39, !noalias !36
  store <8 x i16> %wide.load481, ptr %144, align 2, !tbaa !34, !alias.scope !39, !noalias !36
  %index.next482 = add nuw i64 %index479, 16
  %145 = icmp eq i64 %index.next482, %n.vec476
  br i1 %145, label %middle.block471, label %vector.body478, !llvm.loop !41

middle.block471:                                  ; preds = %vector.body478
  br i1 %cmp.n483, label %._crit_edge.us270, label %scalar.ph472.preheader

scalar.ph472.preheader:                           ; preds = %.preheader248.us, %middle.block471
  %indvars.iv352.ph = phi i64 [ 0, %.preheader248.us ], [ %n.vec476, %middle.block471 ]
  br i1 %lcmp.mod497.not, label %scalar.ph472.prol.loopexit, label %scalar.ph472.prol

scalar.ph472.prol:                                ; preds = %scalar.ph472.preheader
  %146 = add nsw i64 %135, %indvars.iv352.ph
  %147 = shl i64 %146, 1
  %148 = getelementptr inbounds i8, ptr %0, i64 %147
  %149 = add nuw nsw i64 %136, %indvars.iv352.ph
  %150 = shl nuw i64 %149, 1
  %151 = getelementptr inbounds i8, ptr %1, i64 %150
  %152 = load i16, ptr %148, align 2, !tbaa !34
  store i16 %152, ptr %151, align 2, !tbaa !34
  %indvars.iv.next353.prol = or disjoint i64 %indvars.iv352.ph, 1
  br label %scalar.ph472.prol.loopexit

scalar.ph472.prol.loopexit:                       ; preds = %scalar.ph472.prol, %scalar.ph472.preheader
  %indvars.iv352.unr = phi i64 [ %indvars.iv352.ph, %scalar.ph472.preheader ], [ %indvars.iv.next353.prol, %scalar.ph472.prol ]
  %153 = icmp eq i64 %indvars.iv352.ph, %134
  br i1 %153, label %._crit_edge.us270, label %scalar.ph472

scalar.ph472:                                     ; preds = %scalar.ph472.prol.loopexit, %scalar.ph472
  %indvars.iv352 = phi i64 [ %indvars.iv.next353.1, %scalar.ph472 ], [ %indvars.iv352.unr, %scalar.ph472.prol.loopexit ]
  %154 = add nsw i64 %135, %indvars.iv352
  %155 = shl i64 %154, 1
  %156 = getelementptr inbounds i8, ptr %0, i64 %155
  %157 = add nuw nsw i64 %136, %indvars.iv352
  %158 = shl nuw i64 %157, 1
  %159 = getelementptr inbounds i8, ptr %1, i64 %158
  %160 = load i16, ptr %156, align 2, !tbaa !34
  store i16 %160, ptr %159, align 2, !tbaa !34
  %indvars.iv.next353 = add nuw nsw i64 %indvars.iv352, 1
  %161 = add nsw i64 %135, %indvars.iv.next353
  %162 = shl i64 %161, 1
  %163 = getelementptr inbounds i8, ptr %0, i64 %162
  %164 = add nuw nsw i64 %136, %indvars.iv.next353
  %165 = shl nuw i64 %164, 1
  %166 = getelementptr inbounds i8, ptr %1, i64 %165
  %167 = load i16, ptr %163, align 2, !tbaa !34
  store i16 %167, ptr %166, align 2, !tbaa !34
  %indvars.iv.next353.1 = add nuw nsw i64 %indvars.iv352, 2
  %exitcond356.not.1 = icmp eq i64 %indvars.iv.next353.1, %127
  br i1 %exitcond356.not.1, label %._crit_edge.us270, label %scalar.ph472, !llvm.loop !42

._crit_edge.us270:                                ; preds = %scalar.ph472.prol.loopexit, %scalar.ph472, %middle.block471
  %indvars.iv.next358 = add nuw nsw i64 %indvars.iv357, 1
  %exitcond361.not = icmp eq i64 %indvars.iv.next358, %wide.trip.count360
  br i1 %exitcond361.not, label %.loopexit247, label %.preheader248.us, !llvm.loop !43

.preheader246:                                    ; preds = %11
  br i1 %14, label %.preheader245.lr.ph, label %.loopexit247

.preheader245.lr.ph:                              ; preds = %.preheader246
  %168 = icmp sgt i32 %3, 0
  %169 = zext i32 %2 to i64
  %170 = sext i32 %5 to i64
  %171 = sext i32 %3 to i64
  %sext226 = shl i32 %2, 24
  %172 = ashr exact i32 %sext226, 24
  %173 = icmp sgt i32 %172, 0
  br i1 %168, label %.preheader245.us.preheader, label %.loopexit247

.preheader245.us.preheader:                       ; preds = %.preheader245.lr.ph
  %wide.trip.count370 = zext nneg i32 %4 to i64
  %wide.trip.count365 = zext nneg i32 %3 to i64
  br label %.preheader245.us

.preheader245.us:                                 ; preds = %.preheader245.us.preheader, %._crit_edge274.us
  %indvars.iv367 = phi i64 [ 0, %.preheader245.us.preheader ], [ %indvars.iv.next368, %._crit_edge274.us ]
  %174 = mul nsw i64 %indvars.iv367, %170
  %175 = mul nuw nsw i64 %indvars.iv367, %171
  br i1 %173, label %.lr.ph.us.us, label %._crit_edge274.us

._crit_edge274.us:                                ; preds = %._crit_edge.us275.us, %.preheader245.us
  %indvars.iv.next368 = add nuw nsw i64 %indvars.iv367, 1
  %exitcond371.not = icmp eq i64 %indvars.iv.next368, %wide.trip.count370
  br i1 %exitcond371.not, label %.loopexit247, label %.preheader245.us, !llvm.loop !44

.lr.ph.us.us:                                     ; preds = %.preheader245.us, %._crit_edge.us275.us
  %indvars.iv362 = phi i64 [ %indvars.iv.next363, %._crit_edge.us275.us ], [ 0, %.preheader245.us ]
  %176 = add nsw i64 %174, %indvars.iv362
  %177 = mul i64 %176, %169
  %178 = getelementptr inbounds i8, ptr %0, i64 %177
  %179 = add nuw nsw i64 %175, %indvars.iv362
  %180 = mul i64 %179, %169
  %181 = getelementptr inbounds i8, ptr %1, i64 %180
  br label %182

182:                                              ; preds = %206, %.lr.ph.us.us
  %.0214271.us.us = phi i8 [ 0, %.lr.ph.us.us ], [ %211, %206 ]
  %183 = zext nneg i8 %.0214271.us.us to i64
  %184 = getelementptr inbounds i8, ptr %178, i64 %183
  %185 = load i8, ptr %184, align 1, !tbaa !6
  %186 = getelementptr inbounds i8, ptr %181, i64 %183
  store i8 %185, ptr %186, align 1, !tbaa !6
  %187 = or disjoint i8 %.0214271.us.us, 1
  %188 = zext nneg i8 %187 to i32
  %189 = icmp sgt i32 %172, %188
  br i1 %189, label %190, label %._crit_edge.us275.us, !llvm.loop !45

190:                                              ; preds = %182
  %191 = zext nneg i8 %187 to i64
  %192 = getelementptr inbounds i8, ptr %178, i64 %191
  %193 = load i8, ptr %192, align 1, !tbaa !6
  %194 = getelementptr inbounds i8, ptr %181, i64 %191
  store i8 %193, ptr %194, align 1, !tbaa !6
  %195 = or disjoint i8 %.0214271.us.us, 2
  %196 = zext nneg i8 %195 to i32
  %197 = icmp ugt i32 %172, %196
  br i1 %197, label %198, label %._crit_edge.us275.us, !llvm.loop !45

198:                                              ; preds = %190
  %199 = zext nneg i8 %195 to i64
  %200 = getelementptr inbounds i8, ptr %178, i64 %199
  %201 = load i8, ptr %200, align 1, !tbaa !6
  %202 = getelementptr inbounds i8, ptr %181, i64 %199
  store i8 %201, ptr %202, align 1, !tbaa !6
  %203 = or disjoint i8 %.0214271.us.us, 3
  %204 = zext nneg i8 %203 to i32
  %205 = icmp ugt i32 %172, %204
  br i1 %205, label %206, label %._crit_edge.us275.us, !llvm.loop !45

206:                                              ; preds = %198
  %207 = zext nneg i8 %203 to i64
  %208 = getelementptr inbounds i8, ptr %178, i64 %207
  %209 = load i8, ptr %208, align 1, !tbaa !6
  %210 = getelementptr inbounds i8, ptr %181, i64 %207
  store i8 %209, ptr %210, align 1, !tbaa !6
  %211 = add nuw nsw i8 %.0214271.us.us, 4
  %212 = zext nneg i8 %211 to i32
  %213 = icmp ugt i32 %172, %212
  br i1 %213, label %182, label %._crit_edge.us275.us, !llvm.loop !47

._crit_edge.us275.us:                             ; preds = %206, %198, %190, %182
  %indvars.iv.next363 = add nuw nsw i64 %indvars.iv362, 1
  %exitcond366.not = icmp eq i64 %indvars.iv.next363, %wide.trip.count365
  br i1 %exitcond366.not, label %._crit_edge274.us, label %.lr.ph.us.us, !llvm.loop !49

.loopexit247:                                     ; preds = %._crit_edge.us, %._crit_edge.us264, %._crit_edge.us267, %._crit_edge.us270, %._crit_edge274.us, %.preheader245.lr.ph, %.preheader246
  switch i32 %13, label %.preheader232 [
    i32 0, label %.preheader234
    i32 1, label %.preheader237
    i32 3, label %.preheader240
    i32 7, label %.preheader243
  ]

.preheader243:                                    ; preds = %.preheader258, %.loopexit247
  %214 = icmp sgt i32 %3, 0
  br i1 %214, label %.preheader242.lr.ph, label %.loopexit

.preheader242.lr.ph:                              ; preds = %.preheader243
  %215 = icmp sgt i32 %4, 0
  %216 = zext nneg i32 %3 to i64
  %217 = sext i32 %6 to i64
  br i1 %215, label %.preheader242.us.preheader, label %.loopexit

.preheader242.us.preheader:                       ; preds = %.preheader242.lr.ph
  %wide.trip.count375 = zext nneg i32 %4 to i64
  %xtraiter499 = and i64 %wide.trip.count375, 1
  %218 = icmp eq i32 %4, 1
  %unroll_iter501 = and i64 %wide.trip.count375, 2147483646
  %lcmp.mod500.not = icmp eq i64 %xtraiter499, 0
  br label %.preheader242.us

.preheader242.us:                                 ; preds = %.preheader242.us.preheader, %._crit_edge.us282
  %indvars.iv377 = phi i64 [ 0, %.preheader242.us.preheader ], [ %indvars.iv.next378, %._crit_edge.us282 ]
  %219 = mul nsw i64 %indvars.iv377, %217
  br i1 %218, label %._crit_edge.us282.unr-lcssa, label %.preheader242.us.new

.preheader242.us.new:                             ; preds = %.preheader242.us, %.preheader242.us.new
  %indvars.iv372 = phi i64 [ %indvars.iv.next373.1, %.preheader242.us.new ], [ 0, %.preheader242.us ]
  %niter502 = phi i64 [ %niter502.next.1, %.preheader242.us.new ], [ 0, %.preheader242.us ]
  %220 = mul nuw nsw i64 %indvars.iv372, %216
  %221 = add nuw nsw i64 %220, %indvars.iv377
  %222 = shl i64 %221, 4
  %223 = getelementptr inbounds i8, ptr %1, i64 %222
  %224 = add nsw i64 %219, %indvars.iv372
  %225 = shl i64 %224, 4
  %226 = getelementptr inbounds i8, ptr %0, i64 %225
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %226, ptr noundef nonnull align 8 dereferenceable(16) %223, i64 16, i1 false), !tbaa.struct !5
  %indvars.iv.next373 = or disjoint i64 %indvars.iv372, 1
  %227 = mul nuw nsw i64 %indvars.iv.next373, %216
  %228 = add nuw nsw i64 %227, %indvars.iv377
  %229 = shl i64 %228, 4
  %230 = getelementptr inbounds i8, ptr %1, i64 %229
  %231 = add nsw i64 %219, %indvars.iv.next373
  %232 = shl i64 %231, 4
  %233 = getelementptr inbounds i8, ptr %0, i64 %232
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %233, ptr noundef nonnull align 8 dereferenceable(16) %230, i64 16, i1 false), !tbaa.struct !5
  %indvars.iv.next373.1 = add nuw nsw i64 %indvars.iv372, 2
  %niter502.next.1 = add i64 %niter502, 2
  %niter502.ncmp.1 = icmp eq i64 %niter502.next.1, %unroll_iter501
  br i1 %niter502.ncmp.1, label %._crit_edge.us282.unr-lcssa, label %.preheader242.us.new, !llvm.loop !50

._crit_edge.us282.unr-lcssa:                      ; preds = %.preheader242.us.new, %.preheader242.us
  %indvars.iv372.unr = phi i64 [ 0, %.preheader242.us ], [ %indvars.iv.next373.1, %.preheader242.us.new ]
  br i1 %lcmp.mod500.not, label %._crit_edge.us282, label %._crit_edge.us282.epilog-lcssa

._crit_edge.us282.epilog-lcssa:                   ; preds = %._crit_edge.us282.unr-lcssa
  %234 = mul nuw nsw i64 %indvars.iv372.unr, %216
  %235 = add nuw nsw i64 %234, %indvars.iv377
  %236 = shl i64 %235, 4
  %237 = getelementptr inbounds i8, ptr %1, i64 %236
  %238 = add nsw i64 %219, %indvars.iv372.unr
  %239 = shl i64 %238, 4
  %240 = getelementptr inbounds i8, ptr %0, i64 %239
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %240, ptr noundef nonnull align 8 dereferenceable(16) %237, i64 16, i1 false), !tbaa.struct !5
  br label %._crit_edge.us282

._crit_edge.us282:                                ; preds = %._crit_edge.us282.unr-lcssa, %._crit_edge.us282.epilog-lcssa
  %indvars.iv.next378 = add nuw nsw i64 %indvars.iv377, 1
  %exitcond381.not = icmp eq i64 %indvars.iv.next378, %216
  br i1 %exitcond381.not, label %.loopexit, label %.preheader242.us, !llvm.loop !51

.preheader240:                                    ; preds = %.preheader255, %.loopexit247
  %241 = icmp sgt i32 %3, 0
  br i1 %241, label %.preheader239.lr.ph, label %.loopexit

.preheader239.lr.ph:                              ; preds = %.preheader240
  %242 = icmp sgt i32 %4, 0
  %243 = zext nneg i32 %3 to i64
  %244 = sext i32 %6 to i64
  br i1 %242, label %.preheader239.us.preheader, label %.loopexit

.preheader239.us.preheader:                       ; preds = %.preheader239.lr.ph
  %wide.trip.count385 = zext nneg i32 %4 to i64
  %xtraiter504 = and i64 %wide.trip.count385, 1
  %245 = icmp eq i32 %4, 1
  %unroll_iter506 = and i64 %wide.trip.count385, 2147483646
  %lcmp.mod505.not = icmp eq i64 %xtraiter504, 0
  br label %.preheader239.us

.preheader239.us:                                 ; preds = %.preheader239.us.preheader, %._crit_edge.us285
  %indvars.iv387 = phi i64 [ 0, %.preheader239.us.preheader ], [ %indvars.iv.next388, %._crit_edge.us285 ]
  %246 = mul nsw i64 %indvars.iv387, %244
  br i1 %245, label %._crit_edge.us285.unr-lcssa, label %.preheader239.us.new

.preheader239.us.new:                             ; preds = %.preheader239.us, %.preheader239.us.new
  %indvars.iv382 = phi i64 [ %indvars.iv.next383.1, %.preheader239.us.new ], [ 0, %.preheader239.us ]
  %niter507 = phi i64 [ %niter507.next.1, %.preheader239.us.new ], [ 0, %.preheader239.us ]
  %247 = mul nuw nsw i64 %indvars.iv382, %243
  %248 = add nuw nsw i64 %247, %indvars.iv387
  %249 = shl i64 %248, 3
  %250 = getelementptr inbounds i8, ptr %1, i64 %249
  %251 = add nsw i64 %246, %indvars.iv382
  %252 = shl i64 %251, 3
  %253 = getelementptr inbounds i8, ptr %0, i64 %252
  %254 = load double, ptr %250, align 8, !tbaa !12
  store double %254, ptr %253, align 8, !tbaa !12
  %indvars.iv.next383 = or disjoint i64 %indvars.iv382, 1
  %255 = mul nuw nsw i64 %indvars.iv.next383, %243
  %256 = add nuw nsw i64 %255, %indvars.iv387
  %257 = shl i64 %256, 3
  %258 = getelementptr inbounds i8, ptr %1, i64 %257
  %259 = add nsw i64 %246, %indvars.iv.next383
  %260 = shl i64 %259, 3
  %261 = getelementptr inbounds i8, ptr %0, i64 %260
  %262 = load double, ptr %258, align 8, !tbaa !12
  store double %262, ptr %261, align 8, !tbaa !12
  %indvars.iv.next383.1 = add nuw nsw i64 %indvars.iv382, 2
  %niter507.next.1 = add i64 %niter507, 2
  %niter507.ncmp.1 = icmp eq i64 %niter507.next.1, %unroll_iter506
  br i1 %niter507.ncmp.1, label %._crit_edge.us285.unr-lcssa, label %.preheader239.us.new, !llvm.loop !52

._crit_edge.us285.unr-lcssa:                      ; preds = %.preheader239.us.new, %.preheader239.us
  %indvars.iv382.unr = phi i64 [ 0, %.preheader239.us ], [ %indvars.iv.next383.1, %.preheader239.us.new ]
  br i1 %lcmp.mod505.not, label %._crit_edge.us285, label %._crit_edge.us285.epilog-lcssa

._crit_edge.us285.epilog-lcssa:                   ; preds = %._crit_edge.us285.unr-lcssa
  %263 = mul nuw nsw i64 %indvars.iv382.unr, %243
  %264 = add nuw nsw i64 %263, %indvars.iv387
  %265 = shl i64 %264, 3
  %266 = getelementptr inbounds i8, ptr %1, i64 %265
  %267 = add nsw i64 %246, %indvars.iv382.unr
  %268 = shl i64 %267, 3
  %269 = getelementptr inbounds i8, ptr %0, i64 %268
  %270 = load double, ptr %266, align 8, !tbaa !12
  store double %270, ptr %269, align 8, !tbaa !12
  br label %._crit_edge.us285

._crit_edge.us285:                                ; preds = %._crit_edge.us285.unr-lcssa, %._crit_edge.us285.epilog-lcssa
  %indvars.iv.next388 = add nuw nsw i64 %indvars.iv387, 1
  %exitcond391.not = icmp eq i64 %indvars.iv.next388, %243
  br i1 %exitcond391.not, label %.loopexit, label %.preheader239.us, !llvm.loop !53

.preheader237:                                    ; preds = %.preheader252, %.loopexit247
  %271 = icmp sgt i32 %3, 0
  br i1 %271, label %.preheader236.lr.ph, label %.loopexit

.preheader236.lr.ph:                              ; preds = %.preheader237
  %272 = icmp sgt i32 %4, 0
  %273 = zext nneg i32 %3 to i64
  %274 = sext i32 %6 to i64
  br i1 %272, label %.preheader236.us.preheader, label %.loopexit

.preheader236.us.preheader:                       ; preds = %.preheader236.lr.ph
  %wide.trip.count395 = zext nneg i32 %4 to i64
  %xtraiter509 = and i64 %wide.trip.count395, 1
  %275 = icmp eq i32 %4, 1
  %unroll_iter511 = and i64 %wide.trip.count395, 2147483646
  %lcmp.mod510.not = icmp eq i64 %xtraiter509, 0
  br label %.preheader236.us

.preheader236.us:                                 ; preds = %.preheader236.us.preheader, %._crit_edge.us288
  %indvars.iv397 = phi i64 [ 0, %.preheader236.us.preheader ], [ %indvars.iv.next398, %._crit_edge.us288 ]
  %276 = mul nsw i64 %indvars.iv397, %274
  br i1 %275, label %._crit_edge.us288.unr-lcssa, label %.preheader236.us.new

.preheader236.us.new:                             ; preds = %.preheader236.us, %.preheader236.us.new
  %indvars.iv392 = phi i64 [ %indvars.iv.next393.1, %.preheader236.us.new ], [ 0, %.preheader236.us ]
  %niter512 = phi i64 [ %niter512.next.1, %.preheader236.us.new ], [ 0, %.preheader236.us ]
  %277 = mul nuw nsw i64 %indvars.iv392, %273
  %278 = add nuw nsw i64 %277, %indvars.iv397
  %279 = shl i64 %278, 2
  %280 = getelementptr inbounds i8, ptr %1, i64 %279
  %281 = add nsw i64 %276, %indvars.iv392
  %282 = shl i64 %281, 2
  %283 = getelementptr inbounds i8, ptr %0, i64 %282
  %284 = load float, ptr %280, align 4, !tbaa !24
  store float %284, ptr %283, align 4, !tbaa !24
  %indvars.iv.next393 = or disjoint i64 %indvars.iv392, 1
  %285 = mul nuw nsw i64 %indvars.iv.next393, %273
  %286 = add nuw nsw i64 %285, %indvars.iv397
  %287 = shl i64 %286, 2
  %288 = getelementptr inbounds i8, ptr %1, i64 %287
  %289 = add nsw i64 %276, %indvars.iv.next393
  %290 = shl i64 %289, 2
  %291 = getelementptr inbounds i8, ptr %0, i64 %290
  %292 = load float, ptr %288, align 4, !tbaa !24
  store float %292, ptr %291, align 4, !tbaa !24
  %indvars.iv.next393.1 = add nuw nsw i64 %indvars.iv392, 2
  %niter512.next.1 = add i64 %niter512, 2
  %niter512.ncmp.1 = icmp eq i64 %niter512.next.1, %unroll_iter511
  br i1 %niter512.ncmp.1, label %._crit_edge.us288.unr-lcssa, label %.preheader236.us.new, !llvm.loop !54

._crit_edge.us288.unr-lcssa:                      ; preds = %.preheader236.us.new, %.preheader236.us
  %indvars.iv392.unr = phi i64 [ 0, %.preheader236.us ], [ %indvars.iv.next393.1, %.preheader236.us.new ]
  br i1 %lcmp.mod510.not, label %._crit_edge.us288, label %._crit_edge.us288.epilog-lcssa

._crit_edge.us288.epilog-lcssa:                   ; preds = %._crit_edge.us288.unr-lcssa
  %293 = mul nuw nsw i64 %indvars.iv392.unr, %273
  %294 = add nuw nsw i64 %293, %indvars.iv397
  %295 = shl i64 %294, 2
  %296 = getelementptr inbounds i8, ptr %1, i64 %295
  %297 = add nsw i64 %276, %indvars.iv392.unr
  %298 = shl i64 %297, 2
  %299 = getelementptr inbounds i8, ptr %0, i64 %298
  %300 = load float, ptr %296, align 4, !tbaa !24
  store float %300, ptr %299, align 4, !tbaa !24
  br label %._crit_edge.us288

._crit_edge.us288:                                ; preds = %._crit_edge.us288.unr-lcssa, %._crit_edge.us288.epilog-lcssa
  %indvars.iv.next398 = add nuw nsw i64 %indvars.iv397, 1
  %exitcond401.not = icmp eq i64 %indvars.iv.next398, %273
  br i1 %exitcond401.not, label %.loopexit, label %.preheader236.us, !llvm.loop !55

.preheader234:                                    ; preds = %.preheader249, %.loopexit247
  %301 = icmp sgt i32 %3, 0
  br i1 %301, label %.preheader233.lr.ph, label %.loopexit

.preheader233.lr.ph:                              ; preds = %.preheader234
  %302 = icmp sgt i32 %4, 0
  %303 = zext nneg i32 %3 to i64
  %304 = sext i32 %6 to i64
  br i1 %302, label %.preheader233.us.preheader, label %.loopexit

.preheader233.us.preheader:                       ; preds = %.preheader233.lr.ph
  %wide.trip.count405 = zext nneg i32 %4 to i64
  %xtraiter514 = and i64 %wide.trip.count405, 1
  %305 = icmp eq i32 %4, 1
  %unroll_iter516 = and i64 %wide.trip.count405, 2147483646
  %lcmp.mod515.not = icmp eq i64 %xtraiter514, 0
  br label %.preheader233.us

.preheader233.us:                                 ; preds = %.preheader233.us.preheader, %._crit_edge.us291
  %indvars.iv407 = phi i64 [ 0, %.preheader233.us.preheader ], [ %indvars.iv.next408, %._crit_edge.us291 ]
  %306 = mul nsw i64 %indvars.iv407, %304
  br i1 %305, label %._crit_edge.us291.unr-lcssa, label %.preheader233.us.new

.preheader233.us.new:                             ; preds = %.preheader233.us, %.preheader233.us.new
  %indvars.iv402 = phi i64 [ %indvars.iv.next403.1, %.preheader233.us.new ], [ 0, %.preheader233.us ]
  %niter517 = phi i64 [ %niter517.next.1, %.preheader233.us.new ], [ 0, %.preheader233.us ]
  %307 = mul nuw nsw i64 %indvars.iv402, %303
  %308 = add nuw nsw i64 %307, %indvars.iv407
  %309 = shl nuw i64 %308, 1
  %310 = getelementptr inbounds i8, ptr %1, i64 %309
  %311 = add nsw i64 %306, %indvars.iv402
  %312 = shl i64 %311, 1
  %313 = getelementptr inbounds i8, ptr %0, i64 %312
  %314 = load i16, ptr %310, align 2, !tbaa !34
  store i16 %314, ptr %313, align 2, !tbaa !34
  %indvars.iv.next403 = or disjoint i64 %indvars.iv402, 1
  %315 = mul nuw nsw i64 %indvars.iv.next403, %303
  %316 = add nuw nsw i64 %315, %indvars.iv407
  %317 = shl nuw i64 %316, 1
  %318 = getelementptr inbounds i8, ptr %1, i64 %317
  %319 = add nsw i64 %306, %indvars.iv.next403
  %320 = shl i64 %319, 1
  %321 = getelementptr inbounds i8, ptr %0, i64 %320
  %322 = load i16, ptr %318, align 2, !tbaa !34
  store i16 %322, ptr %321, align 2, !tbaa !34
  %indvars.iv.next403.1 = add nuw nsw i64 %indvars.iv402, 2
  %niter517.next.1 = add i64 %niter517, 2
  %niter517.ncmp.1 = icmp eq i64 %niter517.next.1, %unroll_iter516
  br i1 %niter517.ncmp.1, label %._crit_edge.us291.unr-lcssa, label %.preheader233.us.new, !llvm.loop !56

._crit_edge.us291.unr-lcssa:                      ; preds = %.preheader233.us.new, %.preheader233.us
  %indvars.iv402.unr = phi i64 [ 0, %.preheader233.us ], [ %indvars.iv.next403.1, %.preheader233.us.new ]
  br i1 %lcmp.mod515.not, label %._crit_edge.us291, label %._crit_edge.us291.epilog-lcssa

._crit_edge.us291.epilog-lcssa:                   ; preds = %._crit_edge.us291.unr-lcssa
  %323 = mul nuw nsw i64 %indvars.iv402.unr, %303
  %324 = add nuw nsw i64 %323, %indvars.iv407
  %325 = shl nuw i64 %324, 1
  %326 = getelementptr inbounds i8, ptr %1, i64 %325
  %327 = add nsw i64 %306, %indvars.iv402.unr
  %328 = shl i64 %327, 1
  %329 = getelementptr inbounds i8, ptr %0, i64 %328
  %330 = load i16, ptr %326, align 2, !tbaa !34
  store i16 %330, ptr %329, align 2, !tbaa !34
  br label %._crit_edge.us291

._crit_edge.us291:                                ; preds = %._crit_edge.us291.unr-lcssa, %._crit_edge.us291.epilog-lcssa
  %indvars.iv.next408 = add nuw nsw i64 %indvars.iv407, 1
  %exitcond411.not = icmp eq i64 %indvars.iv.next408, %303
  br i1 %exitcond411.not, label %.loopexit, label %.preheader233.us, !llvm.loop !57

.preheader232:                                    ; preds = %.loopexit247
  %331 = icmp sgt i32 %3, 0
  br i1 %331, label %.preheader.lr.ph, label %.loopexit

.preheader.lr.ph:                                 ; preds = %.preheader232
  %332 = icmp sgt i32 %4, 0
  %333 = zext i32 %2 to i64
  %334 = zext nneg i32 %3 to i64
  %335 = sext i32 %6 to i64
  %sext = shl i32 %2, 24
  %336 = ashr exact i32 %sext, 24
  %337 = icmp sgt i32 %336, 0
  br i1 %332, label %.preheader.us.preheader, label %.loopexit

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %wide.trip.count415 = zext nneg i32 %4 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge295.us
  %indvars.iv417 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next418, %._crit_edge295.us ]
  %338 = mul nsw i64 %indvars.iv417, %335
  br i1 %337, label %.lr.ph.us.us301, label %._crit_edge295.us

._crit_edge295.us:                                ; preds = %._crit_edge.us296.us, %.preheader.us
  %indvars.iv.next418 = add nuw nsw i64 %indvars.iv417, 1
  %exitcond421.not = icmp eq i64 %indvars.iv.next418, %334
  br i1 %exitcond421.not, label %.loopexit, label %.preheader.us, !llvm.loop !58

.lr.ph.us.us301:                                  ; preds = %.preheader.us, %._crit_edge.us296.us
  %indvars.iv412 = phi i64 [ %indvars.iv.next413, %._crit_edge.us296.us ], [ 0, %.preheader.us ]
  %339 = mul nuw nsw i64 %indvars.iv412, %334
  %340 = add nuw nsw i64 %339, %indvars.iv417
  %341 = mul i64 %340, %333
  %342 = getelementptr inbounds i8, ptr %1, i64 %341
  %343 = add nsw i64 %338, %indvars.iv412
  %344 = mul i64 %343, %333
  %345 = getelementptr inbounds i8, ptr %0, i64 %344
  br label %346

346:                                              ; preds = %370, %.lr.ph.us.us301
  %.0292.us.us = phi i8 [ 0, %.lr.ph.us.us301 ], [ %375, %370 ]
  %347 = zext nneg i8 %.0292.us.us to i64
  %348 = getelementptr inbounds i8, ptr %342, i64 %347
  %349 = load i8, ptr %348, align 1, !tbaa !6
  %350 = getelementptr inbounds i8, ptr %345, i64 %347
  store i8 %349, ptr %350, align 1, !tbaa !6
  %351 = or disjoint i8 %.0292.us.us, 1
  %352 = zext nneg i8 %351 to i32
  %353 = icmp sgt i32 %336, %352
  br i1 %353, label %354, label %._crit_edge.us296.us, !llvm.loop !59

354:                                              ; preds = %346
  %355 = zext nneg i8 %351 to i64
  %356 = getelementptr inbounds i8, ptr %342, i64 %355
  %357 = load i8, ptr %356, align 1, !tbaa !6
  %358 = getelementptr inbounds i8, ptr %345, i64 %355
  store i8 %357, ptr %358, align 1, !tbaa !6
  %359 = or disjoint i8 %.0292.us.us, 2
  %360 = zext nneg i8 %359 to i32
  %361 = icmp ugt i32 %336, %360
  br i1 %361, label %362, label %._crit_edge.us296.us, !llvm.loop !59

362:                                              ; preds = %354
  %363 = zext nneg i8 %359 to i64
  %364 = getelementptr inbounds i8, ptr %342, i64 %363
  %365 = load i8, ptr %364, align 1, !tbaa !6
  %366 = getelementptr inbounds i8, ptr %345, i64 %363
  store i8 %365, ptr %366, align 1, !tbaa !6
  %367 = or disjoint i8 %.0292.us.us, 3
  %368 = zext nneg i8 %367 to i32
  %369 = icmp ugt i32 %336, %368
  br i1 %369, label %370, label %._crit_edge.us296.us, !llvm.loop !59

370:                                              ; preds = %362
  %371 = zext nneg i8 %367 to i64
  %372 = getelementptr inbounds i8, ptr %342, i64 %371
  %373 = load i8, ptr %372, align 1, !tbaa !6
  %374 = getelementptr inbounds i8, ptr %345, i64 %371
  store i8 %373, ptr %374, align 1, !tbaa !6
  %375 = add nuw nsw i8 %.0292.us.us, 4
  %376 = zext nneg i8 %375 to i32
  %377 = icmp ugt i32 %336, %376
  br i1 %377, label %346, label %._crit_edge.us296.us, !llvm.loop !60

._crit_edge.us296.us:                             ; preds = %370, %362, %354, %346
  %indvars.iv.next413 = add nuw nsw i64 %indvars.iv412, 1
  %exitcond416.not = icmp eq i64 %indvars.iv.next413, %wide.trip.count415
  br i1 %exitcond416.not, label %._crit_edge295.us, label %.lr.ph.us.us301, !llvm.loop !61

.loopexit:                                        ; preds = %._crit_edge.us282, %._crit_edge.us285, %._crit_edge.us288, %._crit_edge.us291, %._crit_edge295.us, %.preheader248.lr.ph, %.preheader251.lr.ph, %.preheader254.lr.ph, %.preheader257.lr.ph, %.preheader.lr.ph, %.preheader233.lr.ph, %.preheader236.lr.ph, %.preheader239.lr.ph, %.preheader242.lr.ph, %.preheader243, %.preheader240, %.preheader237, %.preheader234, %.preheader232
  ret void
}

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

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{i64 0, i64 16, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = !{!15}
!15 = distinct !{!15, !16}
!16 = distinct !{!16, !"LVerDomain"}
!17 = !{!18}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !10, !20, !21}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = distinct !{!22, !10, !20}
!23 = distinct !{!23, !10}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = !{!27}
!27 = distinct !{!27, !28}
!28 = distinct !{!28, !"LVerDomain"}
!29 = !{!30}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !10, !20, !21}
!32 = distinct !{!32, !10, !20}
!33 = distinct !{!33, !10}
!34 = !{!35, !35, i64 0}
!35 = !{!"short", !7, i64 0}
!36 = !{!37}
!37 = distinct !{!37, !38}
!38 = distinct !{!38, !"LVerDomain"}
!39 = !{!40}
!40 = distinct !{!40, !38}
!41 = distinct !{!41, !10, !20, !21}
!42 = distinct !{!42, !10, !20}
!43 = distinct !{!43, !10}
!44 = distinct !{!44, !10}
!45 = distinct !{!45, !10, !46}
!46 = !{!"llvm.loop.unroll.count", i32 4}
!47 = distinct !{!47, !10, !48}
!48 = !{!"llvm.loop.unroll.disable"}
!49 = distinct !{!49, !10}
!50 = distinct !{!50, !10}
!51 = distinct !{!51, !10}
!52 = distinct !{!52, !10}
!53 = distinct !{!53, !10}
!54 = distinct !{!54, !10}
!55 = distinct !{!55, !10}
!56 = distinct !{!56, !10}
!57 = distinct !{!57, !10}
!58 = distinct !{!58, !10}
!59 = distinct !{!59, !10, !46}
!60 = distinct !{!60, !10, !48}
!61 = distinct !{!61, !10}


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