; LLVM IR from scandum/blitsort :: src (bench)

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

; 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: 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: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #1

; Function Attrs: nounwind uwtable
define dso_local void @trinity_rotation8(ptr noundef %0, ptr noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i8, align 1
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i64 %2, ptr %8, align 8, !tbaa !9
  store i64 %3, ptr %9, align 8, !tbaa !9
  store i64 %4, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #3
  %24 = load i64, ptr %9, align 8, !tbaa !9
  %25 = load i64, ptr %10, align 8, !tbaa !9
  %26 = sub i64 %24, %25
  store i64 %26, ptr %13, align 8, !tbaa !9
  %27 = load i64, ptr %8, align 8, !tbaa !9
  %28 = icmp ugt i64 %27, 65536
  br i1 %28, label %29, label %30

29:                                               ; preds = %5
  store i64 65536, ptr %8, align 8, !tbaa !9
  br label %30

30:                                               ; preds = %29, %5
  %31 = load i64, ptr %10, align 8, !tbaa !9
  %32 = load i64, ptr %13, align 8, !tbaa !9
  %33 = icmp ult i64 %31, %32
  br i1 %33, label %34, label %177

34:                                               ; preds = %30
  %35 = load i64, ptr %10, align 8, !tbaa !9
  %36 = load i64, ptr %8, align 8, !tbaa !9
  %37 = icmp ule i64 %35, %36
  br i1 %37, label %38, label %55

38:                                               ; preds = %34
  %39 = load ptr, ptr %7, align 8, !tbaa !5
  %40 = load ptr, ptr %6, align 8, !tbaa !5
  %41 = load i64, ptr %10, align 8, !tbaa !9
  %42 = mul i64 %41, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %39, ptr align 1 %40, i64 %42, i1 false)
  %43 = load ptr, ptr %6, align 8, !tbaa !5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = load i64, ptr %10, align 8, !tbaa !9
  %46 = getelementptr inbounds i8, ptr %44, i64 %45
  %47 = load i64, ptr %13, align 8, !tbaa !9
  %48 = mul i64 %47, 1
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %43, ptr align 1 %46, i64 %48, i1 false)
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = load i64, ptr %13, align 8, !tbaa !9
  %51 = getelementptr inbounds i8, ptr %49, i64 %50
  %52 = load ptr, ptr %7, align 8, !tbaa !5
  %53 = load i64, ptr %10, align 8, !tbaa !9
  %54 = mul i64 %53, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %51, ptr align 1 %52, i64 %54, i1 false)
  br label %176

55:                                               ; preds = %34
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %56, ptr %14, align 8, !tbaa !5
  %57 = load ptr, ptr %14, align 8, !tbaa !5
  %58 = load i64, ptr %10, align 8, !tbaa !9
  %59 = getelementptr inbounds i8, ptr %57, i64 %58
  store ptr %59, ptr %15, align 8, !tbaa !5
  %60 = load i64, ptr %13, align 8, !tbaa !9
  %61 = load i64, ptr %10, align 8, !tbaa !9
  %62 = sub i64 %60, %61
  store i64 %62, ptr %12, align 8, !tbaa !9
  %63 = load i64, ptr %12, align 8, !tbaa !9
  %64 = load i64, ptr %8, align 8, !tbaa !9
  %65 = icmp ule i64 %63, %64
  br i1 %65, label %66, label %99

66:                                               ; preds = %55
  %67 = load i64, ptr %12, align 8, !tbaa !9
  %68 = icmp ugt i64 %67, 3
  br i1 %68, label %69, label %99

69:                                               ; preds = %66
  %70 = load ptr, ptr %14, align 8, !tbaa !5
  %71 = load i64, ptr %13, align 8, !tbaa !9
  %72 = getelementptr inbounds i8, ptr %70, i64 %71
  store ptr %72, ptr %16, align 8, !tbaa !5
  %73 = load ptr, ptr %16, align 8, !tbaa !5
  %74 = load i64, ptr %10, align 8, !tbaa !9
  %75 = getelementptr inbounds i8, ptr %73, i64 %74
  store ptr %75, ptr %17, align 8, !tbaa !5
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = load ptr, ptr %15, align 8, !tbaa !5
  %78 = load i64, ptr %12, align 8, !tbaa !9
  %79 = mul i64 %78, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %76, ptr align 1 %77, i64 %79, i1 false)
  br label %80

80:                                               ; preds = %84, %69
  %81 = load i64, ptr %10, align 8, !tbaa !9
  %82 = add i64 %81, -1
  store i64 %82, ptr %10, align 8, !tbaa !9
  %83 = icmp ne i64 %81, 0
  br i1 %83, label %84, label %94

84:                                               ; preds = %80
  %85 = load ptr, ptr %17, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i32 -1
  store ptr %86, ptr %17, align 8, !tbaa !5
  %87 = load i8, ptr %86, align 1, !tbaa !11
  %88 = load ptr, ptr %16, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i32 -1
  store ptr %89, ptr %16, align 8, !tbaa !5
  store i8 %87, ptr %89, align 1, !tbaa !11
  %90 = load ptr, ptr %15, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i32 -1
  store ptr %91, ptr %15, align 8, !tbaa !5
  %92 = load i8, ptr %91, align 1, !tbaa !11
  %93 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 %92, ptr %93, align 1, !tbaa !11
  br label %80, !llvm.loop !12

94:                                               ; preds = %80
  %95 = load ptr, ptr %14, align 8, !tbaa !5
  %96 = load ptr, ptr %7, align 8, !tbaa !5
  %97 = load i64, ptr %12, align 8, !tbaa !9
  %98 = mul i64 %97, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %95, ptr align 1 %96, i64 %98, i1 false)
  br label %175

99:                                               ; preds = %66, %55
  %100 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %100, ptr %16, align 8, !tbaa !5
  %101 = load ptr, ptr %16, align 8, !tbaa !5
  %102 = load i64, ptr %13, align 8, !tbaa !9
  %103 = getelementptr inbounds i8, ptr %101, i64 %102
  store ptr %103, ptr %17, align 8, !tbaa !5
  %104 = load i64, ptr %10, align 8, !tbaa !9
  %105 = udiv i64 %104, 2
  store i64 %105, ptr %12, align 8, !tbaa !9
  br label %106

106:                                              ; preds = %110, %99
  %107 = load i64, ptr %12, align 8, !tbaa !9
  %108 = add i64 %107, -1
  store i64 %108, ptr %12, align 8, !tbaa !9
  %109 = icmp ne i64 %107, 0
  br i1 %109, label %110, label %128

110:                                              ; preds = %106
  %111 = load ptr, ptr %15, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i32 -1
  store ptr %112, ptr %15, align 8, !tbaa !5
  %113 = load i8, ptr %112, align 1, !tbaa !11
  store i8 %113, ptr %11, align 1, !tbaa !11
  %114 = load ptr, ptr %14, align 8, !tbaa !5
  %115 = load i8, ptr %114, align 1, !tbaa !11
  %116 = load ptr, ptr %15, align 8, !tbaa !5
  store i8 %115, ptr %116, align 1, !tbaa !11
  %117 = load ptr, ptr %16, align 8, !tbaa !5
  %118 = load i8, ptr %117, align 1, !tbaa !11
  %119 = load ptr, ptr %14, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %119, i32 1
  store ptr %120, ptr %14, align 8, !tbaa !5
  store i8 %118, ptr %119, align 1, !tbaa !11
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = getelementptr inbounds i8, ptr %121, i32 -1
  store ptr %122, ptr %17, align 8, !tbaa !5
  %123 = load i8, ptr %122, align 1, !tbaa !11
  %124 = load ptr, ptr %16, align 8, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %124, i32 1
  store ptr %125, ptr %16, align 8, !tbaa !5
  store i8 %123, ptr %124, align 1, !tbaa !11
  %126 = load i8, ptr %11, align 1, !tbaa !11
  %127 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 %126, ptr %127, align 1, !tbaa !11
  br label %106, !llvm.loop !14

128:                                              ; preds = %106
  %129 = load ptr, ptr %17, align 8, !tbaa !5
  %130 = load ptr, ptr %16, align 8, !tbaa !5
  %131 = ptrtoint ptr %129 to i64
  %132 = ptrtoint ptr %130 to i64
  %133 = sub i64 %131, %132
  %134 = sdiv i64 %133, 2
  store i64 %134, ptr %12, align 8, !tbaa !9
  br label %135

135:                                              ; preds = %139, %128
  %136 = load i64, ptr %12, align 8, !tbaa !9
  %137 = add i64 %136, -1
  store i64 %137, ptr %12, align 8, !tbaa !9
  %138 = icmp ne i64 %136, 0
  br i1 %138, label %139, label %153

139:                                              ; preds = %135
  %140 = load ptr, ptr %16, align 8, !tbaa !5
  %141 = load i8, ptr %140, align 1, !tbaa !11
  store i8 %141, ptr %11, align 1, !tbaa !11
  %142 = load ptr, ptr %17, align 8, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %142, i32 -1
  store ptr %143, ptr %17, align 8, !tbaa !5
  %144 = load i8, ptr %143, align 1, !tbaa !11
  %145 = load ptr, ptr %16, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %145, i32 1
  store ptr %146, ptr %16, align 8, !tbaa !5
  store i8 %144, ptr %145, align 1, !tbaa !11
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = load i8, ptr %147, align 1, !tbaa !11
  %149 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 %148, ptr %149, align 1, !tbaa !11
  %150 = load i8, ptr %11, align 1, !tbaa !11
  %151 = load ptr, ptr %14, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i32 1
  store ptr %152, ptr %14, align 8, !tbaa !5
  store i8 %150, ptr %151, align 1, !tbaa !11
  br label %135, !llvm.loop !15

153:                                              ; preds = %135
  %154 = load ptr, ptr %17, align 8, !tbaa !5
  %155 = load ptr, ptr %14, align 8, !tbaa !5
  %156 = ptrtoint ptr %154 to i64
  %157 = ptrtoint ptr %155 to i64
  %158 = sub i64 %156, %157
  %159 = sdiv i64 %158, 2
  store i64 %159, ptr %12, align 8, !tbaa !9
  br label %160

160:                                              ; preds = %164, %153
  %161 = load i64, ptr %12, align 8, !tbaa !9
  %162 = add i64 %161, -1
  store i64 %162, ptr %12, align 8, !tbaa !9
  %163 = icmp ne i64 %161, 0
  br i1 %163, label %164, label %174

164:                                              ; preds = %160
  %165 = load ptr, ptr %14, align 8, !tbaa !5
  %166 = load i8, ptr %165, align 1, !tbaa !11
  store i8 %166, ptr %11, align 1, !tbaa !11
  %167 = load ptr, ptr %17, align 8, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %167, i32 -1
  store ptr %168, ptr %17, align 8, !tbaa !5
  %169 = load i8, ptr %168, align 1, !tbaa !11
  %170 = load ptr, ptr %14, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i32 1
  store ptr %171, ptr %14, align 8, !tbaa !5
  store i8 %169, ptr %170, align 1, !tbaa !11
  %172 = load i8, ptr %11, align 1, !tbaa !11
  %173 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 %172, ptr %173, align 1, !tbaa !11
  br label %160, !llvm.loop !16

174:                                              ; preds = %160
  br label %175

175:                                              ; preds = %174, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  br label %176

176:                                              ; preds = %175, %38
  br label %348

177:                                              ; preds = %30
  %178 = load i64, ptr %13, align 8, !tbaa !9
  %179 = load i64, ptr %10, align 8, !tbaa !9
  %180 = icmp ult i64 %178, %179
  br i1 %180, label %181, label %327

181:                                              ; preds = %177
  %182 = load i64, ptr %13, align 8, !tbaa !9
  %183 = load i64, ptr %8, align 8, !tbaa !9
  %184 = icmp ule i64 %182, %183
  br i1 %184, label %185, label %202

185:                                              ; preds = %181
  %186 = load ptr, ptr %7, align 8, !tbaa !5
  %187 = load ptr, ptr %6, align 8, !tbaa !5
  %188 = load i64, ptr %10, align 8, !tbaa !9
  %189 = getelementptr inbounds i8, ptr %187, i64 %188
  %190 = load i64, ptr %13, align 8, !tbaa !9
  %191 = mul i64 %190, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %186, ptr align 1 %189, i64 %191, i1 false)
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = load i64, ptr %13, align 8, !tbaa !9
  %194 = getelementptr inbounds i8, ptr %192, i64 %193
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = load i64, ptr %10, align 8, !tbaa !9
  %197 = mul i64 %196, 1
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %194, ptr align 1 %195, i64 %197, i1 false)
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  %200 = load i64, ptr %13, align 8, !tbaa !9
  %201 = mul i64 %200, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %198, ptr align 1 %199, i64 %201, i1 false)
  br label %326

202:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %203, ptr %18, align 8, !tbaa !5
  %204 = load ptr, ptr %18, align 8, !tbaa !5
  %205 = load i64, ptr %10, align 8, !tbaa !9
  %206 = getelementptr inbounds i8, ptr %204, i64 %205
  store ptr %206, ptr %19, align 8, !tbaa !5
  %207 = load i64, ptr %10, align 8, !tbaa !9
  %208 = load i64, ptr %13, align 8, !tbaa !9
  %209 = sub i64 %207, %208
  store i64 %209, ptr %12, align 8, !tbaa !9
  %210 = load i64, ptr %12, align 8, !tbaa !9
  %211 = load i64, ptr %8, align 8, !tbaa !9
  %212 = icmp ule i64 %210, %211
  br i1 %212, label %213, label %249

213:                                              ; preds = %202
  %214 = load i64, ptr %12, align 8, !tbaa !9
  %215 = icmp ugt i64 %214, 3
  br i1 %215, label %216, label %249

216:                                              ; preds = %213
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = load i64, ptr %13, align 8, !tbaa !9
  %219 = getelementptr inbounds i8, ptr %217, i64 %218
  store ptr %219, ptr %20, align 8, !tbaa !5
  %220 = load ptr, ptr %20, align 8, !tbaa !5
  %221 = load i64, ptr %10, align 8, !tbaa !9
  %222 = getelementptr inbounds i8, ptr %220, i64 %221
  store ptr %222, ptr %21, align 8, !tbaa !5
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = load ptr, ptr %20, align 8, !tbaa !5
  %225 = load i64, ptr %12, align 8, !tbaa !9
  %226 = mul i64 %225, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %223, ptr align 1 %224, i64 %226, i1 false)
  br label %227

227:                                              ; preds = %231, %216
  %228 = load i64, ptr %13, align 8, !tbaa !9
  %229 = add i64 %228, -1
  store i64 %229, ptr %13, align 8, !tbaa !9
  %230 = icmp ne i64 %228, 0
  br i1 %230, label %231, label %241

231:                                              ; preds = %227
  %232 = load ptr, ptr %18, align 8, !tbaa !5
  %233 = load i8, ptr %232, align 1, !tbaa !11
  %234 = load ptr, ptr %20, align 8, !tbaa !5
  %235 = getelementptr inbounds i8, ptr %234, i32 1
  store ptr %235, ptr %20, align 8, !tbaa !5
  store i8 %233, ptr %234, align 1, !tbaa !11
  %236 = load ptr, ptr %19, align 8, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %236, i32 1
  store ptr %237, ptr %19, align 8, !tbaa !5
  %238 = load i8, ptr %236, align 1, !tbaa !11
  %239 = load ptr, ptr %18, align 8, !tbaa !5
  %240 = getelementptr inbounds i8, ptr %239, i32 1
  store ptr %240, ptr %18, align 8, !tbaa !5
  store i8 %238, ptr %239, align 1, !tbaa !11
  br label %227, !llvm.loop !17

241:                                              ; preds = %227
  %242 = load ptr, ptr %21, align 8, !tbaa !5
  %243 = load i64, ptr %12, align 8, !tbaa !9
  %244 = sub i64 0, %243
  %245 = getelementptr inbounds i8, ptr %242, i64 %244
  %246 = load ptr, ptr %7, align 8, !tbaa !5
  %247 = load i64, ptr %12, align 8, !tbaa !9
  %248 = mul i64 %247, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %245, ptr align 1 %246, i64 %248, i1 false)
  br label %325

249:                                              ; preds = %213, %202
  %250 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %250, ptr %20, align 8, !tbaa !5
  %251 = load ptr, ptr %20, align 8, !tbaa !5
  %252 = load i64, ptr %13, align 8, !tbaa !9
  %253 = getelementptr inbounds i8, ptr %251, i64 %252
  store ptr %253, ptr %21, align 8, !tbaa !5
  %254 = load i64, ptr %13, align 8, !tbaa !9
  %255 = udiv i64 %254, 2
  store i64 %255, ptr %12, align 8, !tbaa !9
  br label %256

256:                                              ; preds = %260, %249
  %257 = load i64, ptr %12, align 8, !tbaa !9
  %258 = add i64 %257, -1
  store i64 %258, ptr %12, align 8, !tbaa !9
  %259 = icmp ne i64 %257, 0
  br i1 %259, label %260, label %278

260:                                              ; preds = %256
  %261 = load ptr, ptr %19, align 8, !tbaa !5
  %262 = getelementptr inbounds i8, ptr %261, i32 -1
  store ptr %262, ptr %19, align 8, !tbaa !5
  %263 = load i8, ptr %262, align 1, !tbaa !11
  store i8 %263, ptr %11, align 1, !tbaa !11
  %264 = load ptr, ptr %18, align 8, !tbaa !5
  %265 = load i8, ptr %264, align 1, !tbaa !11
  %266 = load ptr, ptr %19, align 8, !tbaa !5
  store i8 %265, ptr %266, align 1, !tbaa !11
  %267 = load ptr, ptr %20, align 8, !tbaa !5
  %268 = load i8, ptr %267, align 1, !tbaa !11
  %269 = load ptr, ptr %18, align 8, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %269, i32 1
  store ptr %270, ptr %18, align 8, !tbaa !5
  store i8 %268, ptr %269, align 1, !tbaa !11
  %271 = load ptr, ptr %21, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i32 -1
  store ptr %272, ptr %21, align 8, !tbaa !5
  %273 = load i8, ptr %272, align 1, !tbaa !11
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i32 1
  store ptr %275, ptr %20, align 8, !tbaa !5
  store i8 %273, ptr %274, align 1, !tbaa !11
  %276 = load i8, ptr %11, align 1, !tbaa !11
  %277 = load ptr, ptr %21, align 8, !tbaa !5
  store i8 %276, ptr %277, align 1, !tbaa !11
  br label %256, !llvm.loop !18

278:                                              ; preds = %256
  %279 = load ptr, ptr %19, align 8, !tbaa !5
  %280 = load ptr, ptr %18, align 8, !tbaa !5
  %281 = ptrtoint ptr %279 to i64
  %282 = ptrtoint ptr %280 to i64
  %283 = sub i64 %281, %282
  %284 = sdiv i64 %283, 2
  store i64 %284, ptr %12, align 8, !tbaa !9
  br label %285

285:                                              ; preds = %289, %278
  %286 = load i64, ptr %12, align 8, !tbaa !9
  %287 = add i64 %286, -1
  store i64 %287, ptr %12, align 8, !tbaa !9
  %288 = icmp ne i64 %286, 0
  br i1 %288, label %289, label %303

289:                                              ; preds = %285
  %290 = load ptr, ptr %19, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i32 -1
  store ptr %291, ptr %19, align 8, !tbaa !5
  %292 = load i8, ptr %291, align 1, !tbaa !11
  store i8 %292, ptr %11, align 1, !tbaa !11
  %293 = load ptr, ptr %18, align 8, !tbaa !5
  %294 = load i8, ptr %293, align 1, !tbaa !11
  %295 = load ptr, ptr %19, align 8, !tbaa !5
  store i8 %294, ptr %295, align 1, !tbaa !11
  %296 = load ptr, ptr %21, align 8, !tbaa !5
  %297 = getelementptr inbounds i8, ptr %296, i32 -1
  store ptr %297, ptr %21, align 8, !tbaa !5
  %298 = load i8, ptr %297, align 1, !tbaa !11
  %299 = load ptr, ptr %18, align 8, !tbaa !5
  %300 = getelementptr inbounds i8, ptr %299, i32 1
  store ptr %300, ptr %18, align 8, !tbaa !5
  store i8 %298, ptr %299, align 1, !tbaa !11
  %301 = load i8, ptr %11, align 1, !tbaa !11
  %302 = load ptr, ptr %21, align 8, !tbaa !5
  store i8 %301, ptr %302, align 1, !tbaa !11
  br label %285, !llvm.loop !19

303:                                              ; preds = %285
  %304 = load ptr, ptr %21, align 8, !tbaa !5
  %305 = load ptr, ptr %18, align 8, !tbaa !5
  %306 = ptrtoint ptr %304 to i64
  %307 = ptrtoint ptr %305 to i64
  %308 = sub i64 %306, %307
  %309 = sdiv i64 %308, 2
  store i64 %309, ptr %12, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %314, %303
  %311 = load i64, ptr %12, align 8, !tbaa !9
  %312 = add i64 %311, -1
  store i64 %312, ptr %12, align 8, !tbaa !9
  %313 = icmp ne i64 %311, 0
  br i1 %313, label %314, label %324

314:                                              ; preds = %310
  %315 = load ptr, ptr %18, align 8, !tbaa !5
  %316 = load i8, ptr %315, align 1, !tbaa !11
  store i8 %316, ptr %11, align 1, !tbaa !11
  %317 = load ptr, ptr %21, align 8, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %317, i32 -1
  store ptr %318, ptr %21, align 8, !tbaa !5
  %319 = load i8, ptr %318, align 1, !tbaa !11
  %320 = load ptr, ptr %18, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %320, i32 1
  store ptr %321, ptr %18, align 8, !tbaa !5
  store i8 %319, ptr %320, align 1, !tbaa !11
  %322 = load i8, ptr %11, align 1, !tbaa !11
  %323 = load ptr, ptr %21, align 8, !tbaa !5
  store i8 %322, ptr %323, align 1, !tbaa !11
  br label %310, !llvm.loop !20

324:                                              ; preds = %310
  br label %325

325:                                              ; preds = %324, %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  br label %326

326:                                              ; preds = %325, %185
  br label %347

327:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  %328 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %328, ptr %22, align 8, !tbaa !5
  %329 = load ptr, ptr %22, align 8, !tbaa !5
  %330 = load i64, ptr %10, align 8, !tbaa !9
  %331 = getelementptr inbounds i8, ptr %329, i64 %330
  store ptr %331, ptr %23, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %336, %327
  %333 = load i64, ptr %10, align 8, !tbaa !9
  %334 = add i64 %333, -1
  store i64 %334, ptr %10, align 8, !tbaa !9
  %335 = icmp ne i64 %333, 0
  br i1 %335, label %336, label %346

336:                                              ; preds = %332
  %337 = load ptr, ptr %22, align 8, !tbaa !5
  %338 = load i8, ptr %337, align 1, !tbaa !11
  store i8 %338, ptr %11, align 1, !tbaa !11
  %339 = load ptr, ptr %23, align 8, !tbaa !5
  %340 = load i8, ptr %339, align 1, !tbaa !11
  %341 = load ptr, ptr %22, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i32 1
  store ptr %342, ptr %22, align 8, !tbaa !5
  store i8 %340, ptr %341, align 1, !tbaa !11
  %343 = load i8, ptr %11, align 1, !tbaa !11
  %344 = load ptr, ptr %23, align 8, !tbaa !5
  %345 = getelementptr inbounds i8, ptr %344, i32 1
  store ptr %345, ptr %23, align 8, !tbaa !5
  store i8 %343, ptr %344, align 1, !tbaa !11
  br label %332, !llvm.loop !21

346:                                              ; preds = %332
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  br label %347

347:                                              ; preds = %346, %326
  br label %348

348:                                              ; preds = %347, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #3
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = { 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 = !{!"long", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = distinct !{!17, !13}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}


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

; Function Attrs: 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) #0

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

; Function Attrs: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @trinity_rotation8(ptr noundef %0, ptr nocapture noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4) local_unnamed_addr #1 {
  %6 = sub i64 %3, %4
  %spec.store.select = tail call i64 @llvm.umin.i64(i64 %2, i64 65536)
  %7 = icmp ugt i64 %6, %4
  br i1 %7, label %8, label %174

8:                                                ; preds = %5
  %.not195 = icmp ult i64 %spec.store.select, %4
  br i1 %.not195, label %12, label %9

9:                                                ; preds = %8
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1, ptr align 1 %0, i64 %4, i1 false)
  %10 = getelementptr inbounds i8, ptr %0, i64 %4
  tail call void @llvm.memmove.p0.p0.i64(ptr align 1 %0, ptr align 1 %10, i64 %6, i1 false)
  %11 = getelementptr inbounds i8, ptr %0, i64 %6
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %11, ptr align 1 %1, i64 %4, i1 false)
  br label %.loopexit

12:                                               ; preds = %8
  %13 = getelementptr i8, ptr %0, i64 %4
  %14 = sub i64 %6, %4
  %15 = icmp ule i64 %14, %spec.store.select
  %16 = icmp ugt i64 %14, 3
  %or.cond = and i1 %15, %16
  br i1 %or.cond, label %iter.check644, label %71

iter.check644:                                    ; preds = %12
  %17 = getelementptr i8, ptr %0, i64 %6
  %18 = getelementptr i8, ptr %0, i64 %3
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1, ptr nonnull align 1 %13, i64 %14, i1 false)
  %min.iters.check642 = icmp ult i64 %4, 4
  br i1 %min.iters.check642, label %vec.epilog.scalar.ph667.preheader, label %vector.scevcheck617

vector.scevcheck617:                              ; preds = %iter.check644
  %19 = xor i64 %4, -1
  %20 = getelementptr i8, ptr %0, i64 %19
  %scevgep618 = getelementptr i8, ptr %20, i64 %3
  %21 = sub i64 1, %4
  %22 = getelementptr i8, ptr %scevgep618, i64 %21
  %23 = icmp ugt ptr %22, %scevgep618
  %24 = getelementptr i8, ptr %0, i64 %3
  %scevgep622 = getelementptr i8, ptr %24, i64 -1
  %25 = sub i64 1, %4
  %26 = getelementptr i8, ptr %scevgep622, i64 %25
  %27 = icmp ugt ptr %26, %scevgep622
  %28 = getelementptr i8, ptr %0, i64 %4
  %scevgep626 = getelementptr i8, ptr %28, i64 -1
  %29 = sub i64 1, %4
  %30 = getelementptr i8, ptr %scevgep626, i64 %29
  %31 = icmp ugt ptr %30, %scevgep626
  %32 = or i1 %23, %27
  %33 = or i1 %32, %31
  br i1 %33, label %vec.epilog.scalar.ph667.preheader, label %vector.memcheck630

vector.memcheck630:                               ; preds = %vector.scevcheck617
  %scevgep631 = getelementptr i8, ptr %0, i64 %14
  %bound0633 = icmp ult ptr %scevgep631, %13
  %bound1634 = icmp ugt ptr %17, %0
  %found.conflict635 = and i1 %bound0633, %bound1634
  %bound0636 = icmp ult ptr %17, %13
  %bound1637 = icmp ugt ptr %18, %0
  %found.conflict638 = and i1 %bound0636, %bound1637
  %conflict.rdx639 = or i1 %found.conflict635, %found.conflict638
  br i1 %conflict.rdx639, label %vec.epilog.scalar.ph667.preheader, label %vector.main.loop.iter.check646

vector.main.loop.iter.check646:                   ; preds = %vector.memcheck630
  %min.iters.check645 = icmp ult i64 %4, 16
  br i1 %min.iters.check645, label %vec.epilog.ph668, label %vector.ph647

vector.ph647:                                     ; preds = %vector.main.loop.iter.check646
  %n.vec649 = and i64 %4, -16
  %invariant.gep779 = getelementptr i8, ptr %18, i64 -16
  %invariant.gep781 = getelementptr i8, ptr %17, i64 -16
  %invariant.gep783 = getelementptr i8, ptr %13, i64 -16
  br label %vector.body650

vector.body650:                                   ; preds = %vector.body650, %vector.ph647
  %index651 = phi i64 [ 0, %vector.ph647 ], [ %index.next664, %vector.body650 ]
  %offset.idx652 = sub i64 0, %index651
  %offset.idx654 = sub i64 0, %index651
  %offset.idx656 = sub i64 0, %index651
  %gep780 = getelementptr i8, ptr %invariant.gep779, i64 %offset.idx652
  %wide.load658 = load <16 x i8>, ptr %gep780, align 1, !tbaa !5, !alias.scope !8, !noalias !11
  %gep782 = getelementptr i8, ptr %invariant.gep781, i64 %offset.idx654
  store <16 x i8> %wide.load658, ptr %gep782, align 1, !tbaa !5, !alias.scope !13, !noalias !15
  %gep784 = getelementptr i8, ptr %invariant.gep783, i64 %offset.idx656
  %wide.load661 = load <16 x i8>, ptr %gep784, align 1, !tbaa !5, !alias.scope !11
  store <16 x i8> %wide.load661, ptr %gep780, align 1, !tbaa !5, !alias.scope !8, !noalias !11
  %index.next664 = add nuw i64 %index651, 16
  %34 = icmp eq i64 %index.next664, %n.vec649
  br i1 %34, label %middle.block640, label %vector.body650, !llvm.loop !16

middle.block640:                                  ; preds = %vector.body650
  %cmp.n665 = icmp eq i64 %n.vec649, %4
  br i1 %cmp.n665, label %.loopexit703, label %vec.epilog.iter.check669

vec.epilog.iter.check669:                         ; preds = %middle.block640
  %ind.end685 = and i64 %4, 15
  %35 = sub i64 0, %n.vec649
  %ind.end682 = getelementptr i8, ptr %13, i64 %35
  %36 = sub i64 0, %n.vec649
  %ind.end679 = getelementptr i8, ptr %17, i64 %36
  %37 = sub i64 0, %n.vec649
  %ind.end676 = getelementptr i8, ptr %18, i64 %37
  %n.vec.remaining670 = and i64 %4, 12
  %min.epilog.iters.check671 = icmp eq i64 %n.vec.remaining670, 0
  br i1 %min.epilog.iters.check671, label %vec.epilog.scalar.ph667.preheader, label %vec.epilog.ph668

vec.epilog.ph668:                                 ; preds = %vector.main.loop.iter.check646, %vec.epilog.iter.check669
  %vec.epilog.resume.val672 = phi i64 [ %n.vec649, %vec.epilog.iter.check669 ], [ 0, %vector.main.loop.iter.check646 ]
  %n.vec674 = and i64 %4, -4
  %38 = sub i64 0, %n.vec674
  %ind.end675 = getelementptr i8, ptr %18, i64 %38
  %39 = sub i64 0, %n.vec674
  %ind.end678 = getelementptr i8, ptr %17, i64 %39
  %40 = sub i64 0, %n.vec674
  %ind.end681 = getelementptr i8, ptr %13, i64 %40
  %ind.end684 = and i64 %4, 3
  %invariant.gep785 = getelementptr i8, ptr %18, i64 -4
  %invariant.gep787 = getelementptr i8, ptr %17, i64 -4
  %invariant.gep789 = getelementptr i8, ptr %13, i64 -4
  br label %vec.epilog.vector.body687

vec.epilog.vector.body687:                        ; preds = %vec.epilog.vector.body687, %vec.epilog.ph668
  %index688 = phi i64 [ %vec.epilog.resume.val672, %vec.epilog.ph668 ], [ %index.next701, %vec.epilog.vector.body687 ]
  %offset.idx689 = sub i64 0, %index688
  %offset.idx691 = sub i64 0, %index688
  %offset.idx693 = sub i64 0, %index688
  %gep786 = getelementptr i8, ptr %invariant.gep785, i64 %offset.idx689
  %wide.load695 = load <4 x i8>, ptr %gep786, align 1, !tbaa !5, !alias.scope !20, !noalias !23
  %gep788 = getelementptr i8, ptr %invariant.gep787, i64 %offset.idx691
  store <4 x i8> %wide.load695, ptr %gep788, align 1, !tbaa !5, !alias.scope !25, !noalias !27
  %gep790 = getelementptr i8, ptr %invariant.gep789, i64 %offset.idx693
  %wide.load698 = load <4 x i8>, ptr %gep790, align 1, !tbaa !5, !alias.scope !23
  store <4 x i8> %wide.load698, ptr %gep786, align 1, !tbaa !5, !alias.scope !20, !noalias !23
  %index.next701 = add nuw i64 %index688, 4
  %41 = icmp eq i64 %index.next701, %n.vec674
  br i1 %41, label %vec.epilog.middle.block666, label %vec.epilog.vector.body687, !llvm.loop !28

vec.epilog.middle.block666:                       ; preds = %vec.epilog.vector.body687
  %cmp.n702 = icmp eq i64 %n.vec674, %4
  br i1 %cmp.n702, label %.loopexit703, label %vec.epilog.scalar.ph667.preheader

vec.epilog.scalar.ph667.preheader:                ; preds = %vec.epilog.middle.block666, %vector.memcheck630, %vector.scevcheck617, %iter.check644, %vec.epilog.iter.check669
  %.0165266.ph = phi ptr [ %18, %iter.check644 ], [ %18, %vector.memcheck630 ], [ %18, %vector.scevcheck617 ], [ %ind.end676, %vec.epilog.iter.check669 ], [ %ind.end675, %vec.epilog.middle.block666 ]
  %.0169265.ph = phi ptr [ %17, %iter.check644 ], [ %17, %vector.memcheck630 ], [ %17, %vector.scevcheck617 ], [ %ind.end679, %vec.epilog.iter.check669 ], [ %ind.end678, %vec.epilog.middle.block666 ]
  %.0172264.ph = phi ptr [ %13, %iter.check644 ], [ %13, %vector.memcheck630 ], [ %13, %vector.scevcheck617 ], [ %ind.end682, %vec.epilog.iter.check669 ], [ %ind.end681, %vec.epilog.middle.block666 ]
  %.0182263.ph = phi i64 [ %4, %iter.check644 ], [ %4, %vector.memcheck630 ], [ %4, %vector.scevcheck617 ], [ %ind.end685, %vec.epilog.iter.check669 ], [ %ind.end684, %vec.epilog.middle.block666 ]
  %42 = add i64 %.0182263.ph, -1
  %xtraiter740 = and i64 %.0182263.ph, 3
  %lcmp.mod741.not = icmp eq i64 %xtraiter740, 0
  br i1 %lcmp.mod741.not, label %vec.epilog.scalar.ph667.prol.loopexit, label %vec.epilog.scalar.ph667.prol

vec.epilog.scalar.ph667.prol:                     ; preds = %vec.epilog.scalar.ph667.preheader, %vec.epilog.scalar.ph667.prol
  %.0165266.prol = phi ptr [ %44, %vec.epilog.scalar.ph667.prol ], [ %.0165266.ph, %vec.epilog.scalar.ph667.preheader ]
  %.0169265.prol = phi ptr [ %46, %vec.epilog.scalar.ph667.prol ], [ %.0169265.ph, %vec.epilog.scalar.ph667.preheader ]
  %.0172264.prol = phi ptr [ %47, %vec.epilog.scalar.ph667.prol ], [ %.0172264.ph, %vec.epilog.scalar.ph667.preheader ]
  %.0182263.prol = phi i64 [ %43, %vec.epilog.scalar.ph667.prol ], [ %.0182263.ph, %vec.epilog.scalar.ph667.preheader ]
  %prol.iter742 = phi i64 [ %prol.iter742.next, %vec.epilog.scalar.ph667.prol ], [ 0, %vec.epilog.scalar.ph667.preheader ]
  %43 = add i64 %.0182263.prol, -1
  %44 = getelementptr inbounds i8, ptr %.0165266.prol, i64 -1
  %45 = load i8, ptr %44, align 1, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %.0169265.prol, i64 -1
  store i8 %45, ptr %46, align 1, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %.0172264.prol, i64 -1
  %48 = load i8, ptr %47, align 1, !tbaa !5
  store i8 %48, ptr %44, align 1, !tbaa !5
  %prol.iter742.next = add i64 %prol.iter742, 1
  %prol.iter742.cmp.not = icmp eq i64 %prol.iter742.next, %xtraiter740
  br i1 %prol.iter742.cmp.not, label %vec.epilog.scalar.ph667.prol.loopexit, label %vec.epilog.scalar.ph667.prol, !llvm.loop !29

vec.epilog.scalar.ph667.prol.loopexit:            ; preds = %vec.epilog.scalar.ph667.prol, %vec.epilog.scalar.ph667.preheader
  %.0165266.unr = phi ptr [ %.0165266.ph, %vec.epilog.scalar.ph667.preheader ], [ %44, %vec.epilog.scalar.ph667.prol ]
  %.0169265.unr = phi ptr [ %.0169265.ph, %vec.epilog.scalar.ph667.preheader ], [ %46, %vec.epilog.scalar.ph667.prol ]
  %.0172264.unr = phi ptr [ %.0172264.ph, %vec.epilog.scalar.ph667.preheader ], [ %47, %vec.epilog.scalar.ph667.prol ]
  %.0182263.unr = phi i64 [ %.0182263.ph, %vec.epilog.scalar.ph667.preheader ], [ %43, %vec.epilog.scalar.ph667.prol ]
  %49 = icmp ult i64 %42, 3
  br i1 %49, label %.loopexit703, label %vec.epilog.scalar.ph667

vec.epilog.scalar.ph667:                          ; preds = %vec.epilog.scalar.ph667.prol.loopexit, %vec.epilog.scalar.ph667
  %.0165266 = phi ptr [ %66, %vec.epilog.scalar.ph667 ], [ %.0165266.unr, %vec.epilog.scalar.ph667.prol.loopexit ]
  %.0169265 = phi ptr [ %68, %vec.epilog.scalar.ph667 ], [ %.0169265.unr, %vec.epilog.scalar.ph667.prol.loopexit ]
  %.0172264 = phi ptr [ %69, %vec.epilog.scalar.ph667 ], [ %.0172264.unr, %vec.epilog.scalar.ph667.prol.loopexit ]
  %.0182263 = phi i64 [ %65, %vec.epilog.scalar.ph667 ], [ %.0182263.unr, %vec.epilog.scalar.ph667.prol.loopexit ]
  %50 = getelementptr inbounds i8, ptr %.0165266, i64 -1
  %51 = load i8, ptr %50, align 1, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %.0169265, i64 -1
  store i8 %51, ptr %52, align 1, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %.0172264, i64 -1
  %54 = load i8, ptr %53, align 1, !tbaa !5
  store i8 %54, ptr %50, align 1, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %.0165266, i64 -2
  %56 = load i8, ptr %55, align 1, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %.0169265, i64 -2
  store i8 %56, ptr %57, align 1, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %.0172264, i64 -2
  %59 = load i8, ptr %58, align 1, !tbaa !5
  store i8 %59, ptr %55, align 1, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %.0165266, i64 -3
  %61 = load i8, ptr %60, align 1, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %.0169265, i64 -3
  store i8 %61, ptr %62, align 1, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %.0172264, i64 -3
  %64 = load i8, ptr %63, align 1, !tbaa !5
  store i8 %64, ptr %60, align 1, !tbaa !5
  %65 = add i64 %.0182263, -4
  %66 = getelementptr inbounds i8, ptr %.0165266, i64 -4
  %67 = load i8, ptr %66, align 1, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %.0169265, i64 -4
  store i8 %67, ptr %68, align 1, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %.0172264, i64 -4
  %70 = load i8, ptr %69, align 1, !tbaa !5
  store i8 %70, ptr %66, align 1, !tbaa !5
  %.not199.3 = icmp eq i64 %65, 0
  br i1 %.not199.3, label %.loopexit703, label %vec.epilog.scalar.ph667, !llvm.loop !31

.loopexit703:                                     ; preds = %vec.epilog.scalar.ph667.prol.loopexit, %vec.epilog.scalar.ph667, %vec.epilog.middle.block666, %middle.block640
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %0, ptr align 1 %1, i64 %14, i1 false)
  br label %.loopexit

71:                                               ; preds = %12
  %72 = getelementptr i8, ptr %0, i64 %3
  %.not196235 = icmp ult i64 %4, 2
  br i1 %.not196235, label %._crit_edge243, label %.lr.ph242.preheader

.lr.ph242.preheader:                              ; preds = %71
  %73 = lshr i64 %4, 1
  %min.iters.check538 = icmp ult i64 %4, 96
  br i1 %min.iters.check538, label %.lr.ph242.preheader711, label %vector.scevcheck502

vector.scevcheck502:                              ; preds = %.lr.ph242.preheader
  %74 = getelementptr i8, ptr %0, i64 %4
  %scevgep503 = getelementptr i8, ptr %74, i64 -1
  %75 = sub nsw i64 1, %73
  %76 = getelementptr i8, ptr %scevgep503, i64 %75
  %77 = icmp ugt ptr %76, %scevgep503
  %78 = getelementptr i8, ptr %0, i64 %3
  %scevgep507 = getelementptr i8, ptr %78, i64 -1
  %79 = sub nsw i64 1, %73
  %80 = getelementptr i8, ptr %scevgep507, i64 %79
  %81 = icmp ugt ptr %80, %scevgep507
  %82 = or i1 %77, %81
  br i1 %82, label %.lr.ph242.preheader711, label %vector.memcheck511

vector.memcheck511:                               ; preds = %vector.scevcheck502
  %scevgep512 = getelementptr i8, ptr %0, i64 %73
  %83 = getelementptr i8, ptr %0, i64 %73
  %scevgep513 = getelementptr i8, ptr %83, i64 %4
  %84 = sub i64 %4, %73
  %scevgep514 = getelementptr i8, ptr %0, i64 %84
  %85 = sub i64 %3, %73
  %scevgep515 = getelementptr i8, ptr %0, i64 %85
  %bound0516 = icmp ugt ptr %scevgep513, %0
  %bound1517 = icmp ult ptr %13, %scevgep512
  %found.conflict518 = and i1 %bound0516, %bound1517
  %bound0519 = icmp ugt ptr %13, %0
  %bound1520 = icmp ult ptr %scevgep514, %scevgep512
  %found.conflict521 = and i1 %bound0519, %bound1520
  %conflict.rdx522 = or i1 %found.conflict518, %found.conflict521
  %bound0523 = icmp ugt ptr %72, %0
  %bound1524 = icmp ult ptr %scevgep515, %scevgep512
  %found.conflict525 = and i1 %bound0523, %bound1524
  %conflict.rdx526 = or i1 %conflict.rdx522, %found.conflict525
  %bound0528 = icmp ult ptr %13, %72
  %bound1529 = icmp ult ptr %scevgep515, %scevgep513
  %found.conflict530 = and i1 %bound0528, %bound1529
  %conflict.rdx531 = or i1 %conflict.rdx526, %found.conflict530
  %bound0532 = icmp ult ptr %scevgep514, %72
  %bound1533 = icmp ult ptr %scevgep515, %13
  %found.conflict534 = and i1 %bound0532, %bound1533
  %conflict.rdx535 = or i1 %conflict.rdx531, %found.conflict534
  br i1 %conflict.rdx535, label %.lr.ph242.preheader711, label %vector.ph539

vector.ph539:                                     ; preds = %vector.memcheck511
  %n.vec541 = and i64 %73, 9223372036854775792
  %86 = sub nsw i64 0, %n.vec541
  %ind.end542 = getelementptr i8, ptr %72, i64 %86
  %ind.end544 = getelementptr i8, ptr %13, i64 %n.vec541
  %87 = sub nsw i64 0, %n.vec541
  %ind.end546 = getelementptr i8, ptr %13, i64 %87
  %ind.end548 = getelementptr i8, ptr %0, i64 %n.vec541
  %ind.end550 = and i64 %73, 15
  %invariant.gep773 = getelementptr i8, ptr %13, i64 -16
  %invariant.gep775 = getelementptr i8, ptr %72, i64 -16
  br label %vector.body552

vector.body552:                                   ; preds = %vector.body552, %vector.ph539
  %index553 = phi i64 [ 0, %vector.ph539 ], [ %index.next568, %vector.body552 ]
  %offset.idx554 = sub i64 0, %index553
  %next.gep556 = getelementptr i8, ptr %13, i64 %index553
  %offset.idx557 = sub i64 0, %index553
  %next.gep559 = getelementptr i8, ptr %0, i64 %index553
  %gep774 = getelementptr i8, ptr %invariant.gep773, i64 %offset.idx557
  %wide.load560 = load <16 x i8>, ptr %gep774, align 1, !tbaa !5, !alias.scope !32, !noalias !35
  %wide.load562 = load <16 x i8>, ptr %next.gep559, align 1, !tbaa !5, !alias.scope !37, !noalias !39
  %reverse563 = shufflevector <16 x i8> %wide.load562, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse563, ptr %gep774, align 1, !tbaa !5, !alias.scope !32, !noalias !35
  %wide.load564 = load <16 x i8>, ptr %next.gep556, align 1, !tbaa !5, !alias.scope !41, !noalias !42
  store <16 x i8> %wide.load564, ptr %next.gep559, align 1, !tbaa !5, !alias.scope !37, !noalias !39
  %gep776 = getelementptr i8, ptr %invariant.gep775, i64 %offset.idx554
  %wide.load565 = load <16 x i8>, ptr %gep776, align 1, !tbaa !5, !alias.scope !35
  %reverse566 = shufflevector <16 x i8> %wide.load565, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse566, ptr %next.gep556, align 1, !tbaa !5, !alias.scope !41, !noalias !42
  store <16 x i8> %wide.load560, ptr %gep776, align 1, !tbaa !5, !alias.scope !35
  %index.next568 = add nuw i64 %index553, 16
  %88 = icmp eq i64 %index.next568, %n.vec541
  br i1 %88, label %middle.block536, label %vector.body552, !llvm.loop !43

middle.block536:                                  ; preds = %vector.body552
  %cmp.n569 = icmp eq i64 %73, %n.vec541
  br i1 %cmp.n569, label %._crit_edge243, label %.lr.ph242.preheader711

.lr.ph242.preheader711:                           ; preds = %middle.block536, %vector.memcheck511, %vector.scevcheck502, %.lr.ph242.preheader
  %.1166240.ph = phi ptr [ %72, %vector.memcheck511 ], [ %72, %vector.scevcheck502 ], [ %72, %.lr.ph242.preheader ], [ %ind.end542, %middle.block536 ]
  %.1170239.ph = phi ptr [ %13, %vector.memcheck511 ], [ %13, %vector.scevcheck502 ], [ %13, %.lr.ph242.preheader ], [ %ind.end544, %middle.block536 ]
  %.1173238.ph = phi ptr [ %13, %vector.memcheck511 ], [ %13, %vector.scevcheck502 ], [ %13, %.lr.ph242.preheader ], [ %ind.end546, %middle.block536 ]
  %.0174237.ph = phi ptr [ %0, %vector.memcheck511 ], [ %0, %vector.scevcheck502 ], [ %0, %.lr.ph242.preheader ], [ %ind.end548, %middle.block536 ]
  %.0178236.ph = phi i64 [ %73, %vector.memcheck511 ], [ %73, %vector.scevcheck502 ], [ %73, %.lr.ph242.preheader ], [ %ind.end550, %middle.block536 ]
  %xtraiter731 = and i64 %.0178236.ph, 1
  %lcmp.mod732.not = icmp eq i64 %xtraiter731, 0
  br i1 %lcmp.mod732.not, label %.lr.ph242.prol.loopexit, label %.lr.ph242.prol

.lr.ph242.prol:                                   ; preds = %.lr.ph242.preheader711
  %89 = add nsw i64 %.0178236.ph, -1
  %90 = getelementptr inbounds i8, ptr %.1173238.ph, i64 -1
  %91 = load i8, ptr %90, align 1, !tbaa !5
  %92 = load i8, ptr %.0174237.ph, align 1, !tbaa !5
  store i8 %92, ptr %90, align 1, !tbaa !5
  %93 = load i8, ptr %.1170239.ph, align 1, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %.0174237.ph, i64 1
  store i8 %93, ptr %.0174237.ph, align 1, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %.1166240.ph, i64 -1
  %96 = load i8, ptr %95, align 1, !tbaa !5
  %97 = getelementptr inbounds i8, ptr %.1170239.ph, i64 1
  store i8 %96, ptr %.1170239.ph, align 1, !tbaa !5
  store i8 %91, ptr %95, align 1, !tbaa !5
  br label %.lr.ph242.prol.loopexit

.lr.ph242.prol.loopexit:                          ; preds = %.lr.ph242.prol, %.lr.ph242.preheader711
  %.lcssa714.unr = phi ptr [ poison, %.lr.ph242.preheader711 ], [ %94, %.lr.ph242.prol ]
  %.lcssa713.unr = phi ptr [ poison, %.lr.ph242.preheader711 ], [ %95, %.lr.ph242.prol ]
  %.lcssa712.unr = phi ptr [ poison, %.lr.ph242.preheader711 ], [ %97, %.lr.ph242.prol ]
  %.1166240.unr = phi ptr [ %.1166240.ph, %.lr.ph242.preheader711 ], [ %95, %.lr.ph242.prol ]
  %.1170239.unr = phi ptr [ %.1170239.ph, %.lr.ph242.preheader711 ], [ %97, %.lr.ph242.prol ]
  %.1173238.unr = phi ptr [ %.1173238.ph, %.lr.ph242.preheader711 ], [ %90, %.lr.ph242.prol ]
  %.0174237.unr = phi ptr [ %.0174237.ph, %.lr.ph242.preheader711 ], [ %94, %.lr.ph242.prol ]
  %.0178236.unr = phi i64 [ %.0178236.ph, %.lr.ph242.preheader711 ], [ %89, %.lr.ph242.prol ]
  %98 = icmp eq i64 %.0178236.ph, 1
  br i1 %98, label %._crit_edge243, label %.lr.ph242

.lr.ph242:                                        ; preds = %.lr.ph242.prol.loopexit, %.lr.ph242
  %.1166240 = phi ptr [ %113, %.lr.ph242 ], [ %.1166240.unr, %.lr.ph242.prol.loopexit ]
  %.1170239 = phi ptr [ %115, %.lr.ph242 ], [ %.1170239.unr, %.lr.ph242.prol.loopexit ]
  %.1173238 = phi ptr [ %108, %.lr.ph242 ], [ %.1173238.unr, %.lr.ph242.prol.loopexit ]
  %.0174237 = phi ptr [ %112, %.lr.ph242 ], [ %.0174237.unr, %.lr.ph242.prol.loopexit ]
  %.0178236 = phi i64 [ %107, %.lr.ph242 ], [ %.0178236.unr, %.lr.ph242.prol.loopexit ]
  %99 = getelementptr inbounds i8, ptr %.1173238, i64 -1
  %100 = load i8, ptr %99, align 1, !tbaa !5
  %101 = load i8, ptr %.0174237, align 1, !tbaa !5
  store i8 %101, ptr %99, align 1, !tbaa !5
  %102 = load i8, ptr %.1170239, align 1, !tbaa !5
  %103 = getelementptr inbounds i8, ptr %.0174237, i64 1
  store i8 %102, ptr %.0174237, align 1, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %.1166240, i64 -1
  %105 = load i8, ptr %104, align 1, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %.1170239, i64 1
  store i8 %105, ptr %.1170239, align 1, !tbaa !5
  store i8 %100, ptr %104, align 1, !tbaa !5
  %107 = add nsw i64 %.0178236, -2
  %108 = getelementptr inbounds i8, ptr %.1173238, i64 -2
  %109 = load i8, ptr %108, align 1, !tbaa !5
  %110 = load i8, ptr %103, align 1, !tbaa !5
  store i8 %110, ptr %108, align 1, !tbaa !5
  %111 = load i8, ptr %106, align 1, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %.0174237, i64 2
  store i8 %111, ptr %103, align 1, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %.1166240, i64 -2
  %114 = load i8, ptr %113, align 1, !tbaa !5
  %115 = getelementptr inbounds i8, ptr %.1170239, i64 2
  store i8 %114, ptr %106, align 1, !tbaa !5
  store i8 %109, ptr %113, align 1, !tbaa !5
  %.not196.1 = icmp eq i64 %107, 0
  br i1 %.not196.1, label %._crit_edge243, label %.lr.ph242, !llvm.loop !44

._crit_edge243:                                   ; preds = %.lr.ph242.prol.loopexit, %.lr.ph242, %middle.block536, %71
  %.0174.lcssa = phi ptr [ %0, %71 ], [ %ind.end548, %middle.block536 ], [ %.lcssa714.unr, %.lr.ph242.prol.loopexit ], [ %112, %.lr.ph242 ]
  %.1170.lcssa = phi ptr [ %13, %71 ], [ %ind.end544, %middle.block536 ], [ %.lcssa712.unr, %.lr.ph242.prol.loopexit ], [ %115, %.lr.ph242 ]
  %.1166.lcssa = phi ptr [ %72, %71 ], [ %ind.end542, %middle.block536 ], [ %.lcssa713.unr, %.lr.ph242.prol.loopexit ], [ %113, %.lr.ph242 ]
  %116 = ptrtoint ptr %.1166.lcssa to i64
  %117 = ptrtoint ptr %.1170.lcssa to i64
  %118 = sub i64 %116, %117
  %.off268 = add i64 %118, 1
  %.not197247 = icmp ult i64 %.off268, 3
  br i1 %.not197247, label %._crit_edge254, label %.lr.ph253.preheader

.lr.ph253.preheader:                              ; preds = %._crit_edge243
  %119 = sdiv i64 %118, 2
  %min.iters.check592 = icmp ult i64 %119, 32
  %scevgep571 = getelementptr i8, ptr %.1166.lcssa, i64 -1
  %120 = sub nsw i64 1, %119
  %121 = getelementptr i8, ptr %scevgep571, i64 %120
  %122 = icmp ugt ptr %121, %scevgep571
  %or.cond707 = select i1 %min.iters.check592, i1 true, i1 %122
  br i1 %or.cond707, label %.lr.ph253.preheader708, label %vector.memcheck575

vector.memcheck575:                               ; preds = %.lr.ph253.preheader
  %scevgep576 = getelementptr i8, ptr %.1170.lcssa, i64 %119
  %scevgep577 = getelementptr i8, ptr %.0174.lcssa, i64 %119
  %123 = sub nsw i64 0, %119
  %scevgep578 = getelementptr i8, ptr %.1166.lcssa, i64 %123
  %bound0579 = icmp ult ptr %.1170.lcssa, %scevgep577
  %bound1580 = icmp ult ptr %.0174.lcssa, %scevgep576
  %found.conflict581 = and i1 %bound0579, %bound1580
  %bound0582 = icmp ult ptr %.1170.lcssa, %.1166.lcssa
  %bound1583 = icmp ult ptr %scevgep578, %scevgep576
  %found.conflict584 = and i1 %bound0582, %bound1583
  %conflict.rdx585 = or i1 %found.conflict581, %found.conflict584
  %bound0586 = icmp ult ptr %.0174.lcssa, %.1166.lcssa
  %bound1587 = icmp ult ptr %scevgep578, %scevgep577
  %found.conflict588 = and i1 %bound0586, %bound1587
  %conflict.rdx589 = or i1 %conflict.rdx585, %found.conflict588
  br i1 %conflict.rdx589, label %.lr.ph253.preheader708, label %vector.ph593

vector.ph593:                                     ; preds = %vector.memcheck575
  %n.vec595 = and i64 %119, -16
  %124 = sub nsw i64 0, %n.vec595
  %ind.end596 = getelementptr i8, ptr %.1166.lcssa, i64 %124
  %ind.end598 = getelementptr i8, ptr %.1170.lcssa, i64 %n.vec595
  %ind.end600 = getelementptr i8, ptr %.0174.lcssa, i64 %n.vec595
  %ind.end602 = and i64 %119, 15
  %invariant.gep777 = getelementptr i8, ptr %.1166.lcssa, i64 -16
  br label %vector.body604

vector.body604:                                   ; preds = %vector.body604, %vector.ph593
  %index605 = phi i64 [ 0, %vector.ph593 ], [ %index.next615, %vector.body604 ]
  %offset.idx606 = sub i64 0, %index605
  %next.gep608 = getelementptr i8, ptr %.1170.lcssa, i64 %index605
  %next.gep609 = getelementptr i8, ptr %.0174.lcssa, i64 %index605
  %wide.load610 = load <16 x i8>, ptr %next.gep608, align 1, !tbaa !5, !alias.scope !45, !noalias !48
  %gep778 = getelementptr i8, ptr %invariant.gep777, i64 %offset.idx606
  %wide.load611 = load <16 x i8>, ptr %gep778, align 1, !tbaa !5, !alias.scope !51
  %reverse612 = shufflevector <16 x i8> %wide.load611, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse612, ptr %next.gep608, align 1, !tbaa !5, !alias.scope !45, !noalias !48
  %wide.load613 = load <16 x i8>, ptr %next.gep609, align 1, !tbaa !5, !alias.scope !52, !noalias !51
  %reverse614 = shufflevector <16 x i8> %wide.load613, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse614, ptr %gep778, align 1, !tbaa !5, !alias.scope !51
  store <16 x i8> %wide.load610, ptr %next.gep609, align 1, !tbaa !5, !alias.scope !52, !noalias !51
  %index.next615 = add nuw i64 %index605, 16
  %125 = icmp eq i64 %index.next615, %n.vec595
  br i1 %125, label %middle.block590, label %vector.body604, !llvm.loop !53

middle.block590:                                  ; preds = %vector.body604
  %cmp.n616 = icmp eq i64 %119, %n.vec595
  br i1 %cmp.n616, label %._crit_edge254.loopexit, label %.lr.ph253.preheader708

.lr.ph253.preheader708:                           ; preds = %middle.block590, %vector.memcheck575, %.lr.ph253.preheader
  %.2167251.ph = phi ptr [ %.1166.lcssa, %vector.memcheck575 ], [ %.1166.lcssa, %.lr.ph253.preheader ], [ %ind.end596, %middle.block590 ]
  %.2171250.ph = phi ptr [ %.1170.lcssa, %vector.memcheck575 ], [ %.1170.lcssa, %.lr.ph253.preheader ], [ %ind.end598, %middle.block590 ]
  %.1175249.ph = phi ptr [ %.0174.lcssa, %vector.memcheck575 ], [ %.0174.lcssa, %.lr.ph253.preheader ], [ %ind.end600, %middle.block590 ]
  %.1179248.ph = phi i64 [ %119, %vector.memcheck575 ], [ %119, %.lr.ph253.preheader ], [ %ind.end602, %middle.block590 ]
  %xtraiter734 = and i64 %.1179248.ph, 1
  %lcmp.mod735.not = icmp eq i64 %xtraiter734, 0
  br i1 %lcmp.mod735.not, label %.lr.ph253.prol.loopexit, label %.lr.ph253.prol

.lr.ph253.prol:                                   ; preds = %.lr.ph253.preheader708
  %126 = add nsw i64 %.1179248.ph, -1
  %127 = load i8, ptr %.2171250.ph, align 1, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %.2167251.ph, i64 -1
  %129 = load i8, ptr %128, align 1, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %.2171250.ph, i64 1
  store i8 %129, ptr %.2171250.ph, align 1, !tbaa !5
  %131 = load i8, ptr %.1175249.ph, align 1, !tbaa !5
  store i8 %131, ptr %128, align 1, !tbaa !5
  %132 = getelementptr inbounds i8, ptr %.1175249.ph, i64 1
  store i8 %127, ptr %.1175249.ph, align 1, !tbaa !5
  br label %.lr.ph253.prol.loopexit

.lr.ph253.prol.loopexit:                          ; preds = %.lr.ph253.prol, %.lr.ph253.preheader708
  %.lcssa710.unr = phi ptr [ poison, %.lr.ph253.preheader708 ], [ %128, %.lr.ph253.prol ]
  %.lcssa709.unr = phi ptr [ poison, %.lr.ph253.preheader708 ], [ %132, %.lr.ph253.prol ]
  %.2167251.unr = phi ptr [ %.2167251.ph, %.lr.ph253.preheader708 ], [ %128, %.lr.ph253.prol ]
  %.2171250.unr = phi ptr [ %.2171250.ph, %.lr.ph253.preheader708 ], [ %130, %.lr.ph253.prol ]
  %.1175249.unr = phi ptr [ %.1175249.ph, %.lr.ph253.preheader708 ], [ %132, %.lr.ph253.prol ]
  %.1179248.unr = phi i64 [ %.1179248.ph, %.lr.ph253.preheader708 ], [ %126, %.lr.ph253.prol ]
  %133 = icmp eq i64 %.1179248.ph, 1
  br i1 %133, label %._crit_edge254.loopexit, label %.lr.ph253

.lr.ph253:                                        ; preds = %.lr.ph253.prol.loopexit, %.lr.ph253
  %.2167251 = phi ptr [ %142, %.lr.ph253 ], [ %.2167251.unr, %.lr.ph253.prol.loopexit ]
  %.2171250 = phi ptr [ %144, %.lr.ph253 ], [ %.2171250.unr, %.lr.ph253.prol.loopexit ]
  %.1175249 = phi ptr [ %146, %.lr.ph253 ], [ %.1175249.unr, %.lr.ph253.prol.loopexit ]
  %.1179248 = phi i64 [ %140, %.lr.ph253 ], [ %.1179248.unr, %.lr.ph253.prol.loopexit ]
  %134 = load i8, ptr %.2171250, align 1, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %.2167251, i64 -1
  %136 = load i8, ptr %135, align 1, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %.2171250, i64 1
  store i8 %136, ptr %.2171250, align 1, !tbaa !5
  %138 = load i8, ptr %.1175249, align 1, !tbaa !5
  store i8 %138, ptr %135, align 1, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %.1175249, i64 1
  store i8 %134, ptr %.1175249, align 1, !tbaa !5
  %140 = add i64 %.1179248, -2
  %141 = load i8, ptr %137, align 1, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %.2167251, i64 -2
  %143 = load i8, ptr %142, align 1, !tbaa !5
  %144 = getelementptr inbounds i8, ptr %.2171250, i64 2
  store i8 %143, ptr %137, align 1, !tbaa !5
  %145 = load i8, ptr %139, align 1, !tbaa !5
  store i8 %145, ptr %142, align 1, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %.1175249, i64 2
  store i8 %141, ptr %139, align 1, !tbaa !5
  %.not197.1 = icmp eq i64 %140, 0
  br i1 %.not197.1, label %._crit_edge254.loopexit, label %.lr.ph253, !llvm.loop !54

._crit_edge254.loopexit:                          ; preds = %.lr.ph253.prol.loopexit, %.lr.ph253, %middle.block590
  %.lcssa296 = phi ptr [ %ind.end596, %middle.block590 ], [ %.lcssa710.unr, %.lr.ph253.prol.loopexit ], [ %142, %.lr.ph253 ]
  %.lcssa = phi ptr [ %ind.end600, %middle.block590 ], [ %.lcssa709.unr, %.lr.ph253.prol.loopexit ], [ %146, %.lr.ph253 ]
  %.pre = ptrtoint ptr %.lcssa296 to i64
  br label %._crit_edge254

._crit_edge254:                                   ; preds = %._crit_edge254.loopexit, %._crit_edge243
  %.pre-phi = phi i64 [ %.pre, %._crit_edge254.loopexit ], [ %116, %._crit_edge243 ]
  %.1175.lcssa = phi ptr [ %.lcssa, %._crit_edge254.loopexit ], [ %.0174.lcssa, %._crit_edge243 ]
  %.2167.lcssa = phi ptr [ %.lcssa296, %._crit_edge254.loopexit ], [ %.1166.lcssa, %._crit_edge243 ]
  %147 = ptrtoint ptr %.1175.lcssa to i64
  %148 = sub i64 %.pre-phi, %147
  %.off269 = add i64 %148, 1
  %.not198257 = icmp ult i64 %.off269, 3
  br i1 %.not198257, label %.loopexit, label %.lr.ph262.preheader

.lr.ph262.preheader:                              ; preds = %._crit_edge254
  %149 = sdiv i64 %148, 2
  %150 = add nsw i64 %149, -1
  %xtraiter737 = and i64 %149, 3
  %lcmp.mod738.not = icmp eq i64 %xtraiter737, 0
  br i1 %lcmp.mod738.not, label %.lr.ph262.prol.loopexit, label %.lr.ph262.prol

.lr.ph262.prol:                                   ; preds = %.lr.ph262.preheader, %.lr.ph262.prol
  %.3168260.prol = phi ptr [ %153, %.lr.ph262.prol ], [ %.2167.lcssa, %.lr.ph262.preheader ]
  %.2176259.prol = phi ptr [ %155, %.lr.ph262.prol ], [ %.1175.lcssa, %.lr.ph262.preheader ]
  %.2180258.prol = phi i64 [ %151, %.lr.ph262.prol ], [ %149, %.lr.ph262.preheader ]
  %prol.iter739 = phi i64 [ %prol.iter739.next, %.lr.ph262.prol ], [ 0, %.lr.ph262.preheader ]
  %151 = add i64 %.2180258.prol, -1
  %152 = load i8, ptr %.2176259.prol, align 1, !tbaa !5
  %153 = getelementptr inbounds i8, ptr %.3168260.prol, i64 -1
  %154 = load i8, ptr %153, align 1, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %.2176259.prol, i64 1
  store i8 %154, ptr %.2176259.prol, align 1, !tbaa !5
  store i8 %152, ptr %153, align 1, !tbaa !5
  %prol.iter739.next = add i64 %prol.iter739, 1
  %prol.iter739.cmp.not = icmp eq i64 %prol.iter739.next, %xtraiter737
  br i1 %prol.iter739.cmp.not, label %.lr.ph262.prol.loopexit, label %.lr.ph262.prol, !llvm.loop !55

.lr.ph262.prol.loopexit:                          ; preds = %.lr.ph262.prol, %.lr.ph262.preheader
  %.3168260.unr = phi ptr [ %.2167.lcssa, %.lr.ph262.preheader ], [ %153, %.lr.ph262.prol ]
  %.2176259.unr = phi ptr [ %.1175.lcssa, %.lr.ph262.preheader ], [ %155, %.lr.ph262.prol ]
  %.2180258.unr = phi i64 [ %149, %.lr.ph262.preheader ], [ %151, %.lr.ph262.prol ]
  %156 = icmp ult i64 %150, 3
  br i1 %156, label %.loopexit, label %.lr.ph262

.lr.ph262:                                        ; preds = %.lr.ph262.prol.loopexit, %.lr.ph262
  %.3168260 = phi ptr [ %171, %.lr.ph262 ], [ %.3168260.unr, %.lr.ph262.prol.loopexit ]
  %.2176259 = phi ptr [ %173, %.lr.ph262 ], [ %.2176259.unr, %.lr.ph262.prol.loopexit ]
  %.2180258 = phi i64 [ %169, %.lr.ph262 ], [ %.2180258.unr, %.lr.ph262.prol.loopexit ]
  %157 = load i8, ptr %.2176259, align 1, !tbaa !5
  %158 = getelementptr inbounds i8, ptr %.3168260, i64 -1
  %159 = load i8, ptr %158, align 1, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %.2176259, i64 1
  store i8 %159, ptr %.2176259, align 1, !tbaa !5
  store i8 %157, ptr %158, align 1, !tbaa !5
  %161 = load i8, ptr %160, align 1, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %.3168260, i64 -2
  %163 = load i8, ptr %162, align 1, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %.2176259, i64 2
  store i8 %163, ptr %160, align 1, !tbaa !5
  store i8 %161, ptr %162, align 1, !tbaa !5
  %165 = load i8, ptr %164, align 1, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %.3168260, i64 -3
  %167 = load i8, ptr %166, align 1, !tbaa !5
  %168 = getelementptr inbounds i8, ptr %.2176259, i64 3
  store i8 %167, ptr %164, align 1, !tbaa !5
  store i8 %165, ptr %166, align 1, !tbaa !5
  %169 = add i64 %.2180258, -4
  %170 = load i8, ptr %168, align 1, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %.3168260, i64 -4
  %172 = load i8, ptr %171, align 1, !tbaa !5
  %173 = getelementptr inbounds i8, ptr %.2176259, i64 4
  store i8 %172, ptr %168, align 1, !tbaa !5
  store i8 %170, ptr %171, align 1, !tbaa !5
  %.not198.3 = icmp eq i64 %169, 0
  br i1 %.not198.3, label %.loopexit, label %.lr.ph262, !llvm.loop !56

174:                                              ; preds = %5
  %175 = icmp ult i64 %6, %4
  br i1 %175, label %176, label %332

176:                                              ; preds = %174
  %.not190 = icmp ugt i64 %6, %spec.store.select
  %177 = getelementptr i8, ptr %0, i64 %4
  br i1 %.not190, label %180, label %178

178:                                              ; preds = %176
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1, ptr nonnull align 1 %177, i64 %6, i1 false)
  %179 = getelementptr inbounds i8, ptr %0, i64 %6
  tail call void @llvm.memmove.p0.p0.i64(ptr align 1 %179, ptr align 1 %0, i64 %4, i1 false)
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %0, ptr align 1 %1, i64 %6, i1 false)
  br label %.loopexit

180:                                              ; preds = %176
  %181 = sub i64 %4, %6
  %182 = icmp ule i64 %181, %spec.store.select
  %183 = icmp ugt i64 %181, 3
  %or.cond3 = and i1 %182, %183
  br i1 %or.cond3, label %iter.check452, label %224

iter.check452:                                    ; preds = %180
  %184 = getelementptr i8, ptr %0, i64 %6
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1, ptr nonnull align 1 %184, i64 %181, i1 false)
  %min.iters.check450 = icmp ult i64 %6, 8
  br i1 %min.iters.check450, label %vec.epilog.scalar.ph473.preheader, label %vector.memcheck437

vector.memcheck437:                               ; preds = %iter.check452
  %185 = sub i64 %3, %4
  %186 = shl i64 %185, 1
  %scevgep438 = getelementptr i8, ptr %0, i64 %186
  %scevgep439 = getelementptr i8, ptr %0, i64 %3
  %bound0441 = icmp ult ptr %184, %scevgep439
  %bound1442 = icmp ult ptr %177, %scevgep438
  %found.conflict443 = and i1 %bound0441, %bound1442
  %bound0444 = icmp ugt ptr %scevgep439, %0
  %bound1445 = icmp ult ptr %177, %184
  %found.conflict446 = and i1 %bound0444, %bound1445
  %conflict.rdx447 = or i1 %found.conflict443, %found.conflict446
  br i1 %conflict.rdx447, label %vec.epilog.scalar.ph473.preheader, label %vector.main.loop.iter.check454

vector.main.loop.iter.check454:                   ; preds = %vector.memcheck437
  %min.iters.check453 = icmp ult i64 %6, 32
  br i1 %min.iters.check453, label %vec.epilog.ph474, label %vector.ph455

vector.ph455:                                     ; preds = %vector.main.loop.iter.check454
  %n.vec457 = and i64 %6, -32
  br label %vector.body458

vector.body458:                                   ; preds = %vector.body458, %vector.ph455
  %index459 = phi i64 [ 0, %vector.ph455 ], [ %index.next470, %vector.body458 ]
  %next.gep460 = getelementptr i8, ptr %184, i64 %index459
  %next.gep462 = getelementptr i8, ptr %177, i64 %index459
  %next.gep464 = getelementptr i8, ptr %0, i64 %index459
  %187 = getelementptr i8, ptr %next.gep464, i64 16
  %wide.load466 = load <16 x i8>, ptr %next.gep464, align 1, !tbaa !5, !alias.scope !57, !noalias !60
  %wide.load467 = load <16 x i8>, ptr %187, align 1, !tbaa !5, !alias.scope !57, !noalias !60
  %188 = getelementptr i8, ptr %next.gep460, i64 16
  store <16 x i8> %wide.load466, ptr %next.gep460, align 1, !tbaa !5, !alias.scope !62, !noalias !64
  store <16 x i8> %wide.load467, ptr %188, align 1, !tbaa !5, !alias.scope !62, !noalias !64
  %189 = getelementptr i8, ptr %next.gep462, i64 16
  %wide.load468 = load <16 x i8>, ptr %next.gep462, align 1, !tbaa !5, !alias.scope !60
  %wide.load469 = load <16 x i8>, ptr %189, align 1, !tbaa !5, !alias.scope !60
  store <16 x i8> %wide.load468, ptr %next.gep464, align 1, !tbaa !5, !alias.scope !57, !noalias !60
  store <16 x i8> %wide.load469, ptr %187, align 1, !tbaa !5, !alias.scope !57, !noalias !60
  %index.next470 = add nuw i64 %index459, 32
  %190 = icmp eq i64 %index.next470, %n.vec457
  br i1 %190, label %middle.block448, label %vector.body458, !llvm.loop !65

middle.block448:                                  ; preds = %vector.body458
  %cmp.n471 = icmp eq i64 %6, %n.vec457
  br i1 %cmp.n471, label %.loopexit704, label %vec.epilog.iter.check475

vec.epilog.iter.check475:                         ; preds = %middle.block448
  %ind.end491 = and i64 %6, 31
  %ind.end488 = getelementptr i8, ptr %0, i64 %n.vec457
  %ind.end485 = getelementptr i8, ptr %177, i64 %n.vec457
  %ind.end482 = getelementptr i8, ptr %184, i64 %n.vec457
  %n.vec.remaining476 = and i64 %6, 24
  %min.epilog.iters.check477 = icmp eq i64 %n.vec.remaining476, 0
  br i1 %min.epilog.iters.check477, label %vec.epilog.scalar.ph473.preheader, label %vec.epilog.ph474

vec.epilog.ph474:                                 ; preds = %vector.main.loop.iter.check454, %vec.epilog.iter.check475
  %vec.epilog.resume.val478 = phi i64 [ %n.vec457, %vec.epilog.iter.check475 ], [ 0, %vector.main.loop.iter.check454 ]
  %n.vec480 = and i64 %6, -8
  %ind.end481 = getelementptr i8, ptr %184, i64 %n.vec480
  %ind.end484 = getelementptr i8, ptr %177, i64 %n.vec480
  %ind.end487 = getelementptr i8, ptr %0, i64 %n.vec480
  %ind.end490 = and i64 %6, 7
  br label %vec.epilog.vector.body493

vec.epilog.vector.body493:                        ; preds = %vec.epilog.vector.body493, %vec.epilog.ph474
  %index494 = phi i64 [ %vec.epilog.resume.val478, %vec.epilog.ph474 ], [ %index.next500, %vec.epilog.vector.body493 ]
  %next.gep495 = getelementptr i8, ptr %184, i64 %index494
  %next.gep496 = getelementptr i8, ptr %177, i64 %index494
  %next.gep497 = getelementptr i8, ptr %0, i64 %index494
  %wide.load498 = load <8 x i8>, ptr %next.gep497, align 1, !tbaa !5, !alias.scope !66, !noalias !69
  store <8 x i8> %wide.load498, ptr %next.gep495, align 1, !tbaa !5, !alias.scope !71, !noalias !73
  %wide.load499 = load <8 x i8>, ptr %next.gep496, align 1, !tbaa !5, !alias.scope !69
  store <8 x i8> %wide.load499, ptr %next.gep497, align 1, !tbaa !5, !alias.scope !66, !noalias !69
  %index.next500 = add nuw i64 %index494, 8
  %191 = icmp eq i64 %index.next500, %n.vec480
  br i1 %191, label %vec.epilog.middle.block472, label %vec.epilog.vector.body493, !llvm.loop !74

vec.epilog.middle.block472:                       ; preds = %vec.epilog.vector.body493
  %cmp.n501 = icmp eq i64 %6, %n.vec480
  br i1 %cmp.n501, label %.loopexit704, label %vec.epilog.scalar.ph473.preheader

vec.epilog.scalar.ph473.preheader:                ; preds = %vec.epilog.middle.block472, %vector.memcheck437, %iter.check452, %vec.epilog.iter.check475
  %.0157234.ph = phi ptr [ %184, %iter.check452 ], [ %184, %vector.memcheck437 ], [ %ind.end482, %vec.epilog.iter.check475 ], [ %ind.end481, %vec.epilog.middle.block472 ]
  %.0159233.ph = phi ptr [ %177, %iter.check452 ], [ %177, %vector.memcheck437 ], [ %ind.end485, %vec.epilog.iter.check475 ], [ %ind.end484, %vec.epilog.middle.block472 ]
  %.0162232.ph = phi ptr [ %0, %iter.check452 ], [ %0, %vector.memcheck437 ], [ %ind.end488, %vec.epilog.iter.check475 ], [ %ind.end487, %vec.epilog.middle.block472 ]
  %.0177231.ph = phi i64 [ %6, %iter.check452 ], [ %6, %vector.memcheck437 ], [ %ind.end491, %vec.epilog.iter.check475 ], [ %ind.end490, %vec.epilog.middle.block472 ]
  %192 = add i64 %.0177231.ph, -1
  %xtraiter728 = and i64 %.0177231.ph, 3
  %lcmp.mod729.not = icmp eq i64 %xtraiter728, 0
  br i1 %lcmp.mod729.not, label %vec.epilog.scalar.ph473.prol.loopexit, label %vec.epilog.scalar.ph473.prol

vec.epilog.scalar.ph473.prol:                     ; preds = %vec.epilog.scalar.ph473.preheader, %vec.epilog.scalar.ph473.prol
  %.0157234.prol = phi ptr [ %195, %vec.epilog.scalar.ph473.prol ], [ %.0157234.ph, %vec.epilog.scalar.ph473.preheader ]
  %.0159233.prol = phi ptr [ %196, %vec.epilog.scalar.ph473.prol ], [ %.0159233.ph, %vec.epilog.scalar.ph473.preheader ]
  %.0162232.prol = phi ptr [ %198, %vec.epilog.scalar.ph473.prol ], [ %.0162232.ph, %vec.epilog.scalar.ph473.preheader ]
  %.0177231.prol = phi i64 [ %193, %vec.epilog.scalar.ph473.prol ], [ %.0177231.ph, %vec.epilog.scalar.ph473.preheader ]
  %prol.iter730 = phi i64 [ %prol.iter730.next, %vec.epilog.scalar.ph473.prol ], [ 0, %vec.epilog.scalar.ph473.preheader ]
  %193 = add i64 %.0177231.prol, -1
  %194 = load i8, ptr %.0162232.prol, align 1, !tbaa !5
  %195 = getelementptr inbounds i8, ptr %.0157234.prol, i64 1
  store i8 %194, ptr %.0157234.prol, align 1, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %.0159233.prol, i64 1
  %197 = load i8, ptr %.0159233.prol, align 1, !tbaa !5
  %198 = getelementptr inbounds i8, ptr %.0162232.prol, i64 1
  store i8 %197, ptr %.0162232.prol, align 1, !tbaa !5
  %prol.iter730.next = add i64 %prol.iter730, 1
  %prol.iter730.cmp.not = icmp eq i64 %prol.iter730.next, %xtraiter728
  br i1 %prol.iter730.cmp.not, label %vec.epilog.scalar.ph473.prol.loopexit, label %vec.epilog.scalar.ph473.prol, !llvm.loop !75

vec.epilog.scalar.ph473.prol.loopexit:            ; preds = %vec.epilog.scalar.ph473.prol, %vec.epilog.scalar.ph473.preheader
  %.0157234.unr = phi ptr [ %.0157234.ph, %vec.epilog.scalar.ph473.preheader ], [ %195, %vec.epilog.scalar.ph473.prol ]
  %.0159233.unr = phi ptr [ %.0159233.ph, %vec.epilog.scalar.ph473.preheader ], [ %196, %vec.epilog.scalar.ph473.prol ]
  %.0162232.unr = phi ptr [ %.0162232.ph, %vec.epilog.scalar.ph473.preheader ], [ %198, %vec.epilog.scalar.ph473.prol ]
  %.0177231.unr = phi i64 [ %.0177231.ph, %vec.epilog.scalar.ph473.preheader ], [ %193, %vec.epilog.scalar.ph473.prol ]
  %199 = icmp ult i64 %192, 3
  br i1 %199, label %.loopexit704, label %vec.epilog.scalar.ph473

vec.epilog.scalar.ph473:                          ; preds = %vec.epilog.scalar.ph473.prol.loopexit, %vec.epilog.scalar.ph473
  %.0157234 = phi ptr [ %217, %vec.epilog.scalar.ph473 ], [ %.0157234.unr, %vec.epilog.scalar.ph473.prol.loopexit ]
  %.0159233 = phi ptr [ %218, %vec.epilog.scalar.ph473 ], [ %.0159233.unr, %vec.epilog.scalar.ph473.prol.loopexit ]
  %.0162232 = phi ptr [ %220, %vec.epilog.scalar.ph473 ], [ %.0162232.unr, %vec.epilog.scalar.ph473.prol.loopexit ]
  %.0177231 = phi i64 [ %215, %vec.epilog.scalar.ph473 ], [ %.0177231.unr, %vec.epilog.scalar.ph473.prol.loopexit ]
  %200 = load i8, ptr %.0162232, align 1, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %.0157234, i64 1
  store i8 %200, ptr %.0157234, align 1, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %.0159233, i64 1
  %203 = load i8, ptr %.0159233, align 1, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %.0162232, i64 1
  store i8 %203, ptr %.0162232, align 1, !tbaa !5
  %205 = load i8, ptr %204, align 1, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %.0157234, i64 2
  store i8 %205, ptr %201, align 1, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %.0159233, i64 2
  %208 = load i8, ptr %202, align 1, !tbaa !5
  %209 = getelementptr inbounds i8, ptr %.0162232, i64 2
  store i8 %208, ptr %204, align 1, !tbaa !5
  %210 = load i8, ptr %209, align 1, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %.0157234, i64 3
  store i8 %210, ptr %206, align 1, !tbaa !5
  %212 = getelementptr inbounds i8, ptr %.0159233, i64 3
  %213 = load i8, ptr %207, align 1, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %.0162232, i64 3
  store i8 %213, ptr %209, align 1, !tbaa !5
  %215 = add i64 %.0177231, -4
  %216 = load i8, ptr %214, align 1, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %.0157234, i64 4
  store i8 %216, ptr %211, align 1, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %.0159233, i64 4
  %219 = load i8, ptr %212, align 1, !tbaa !5
  %220 = getelementptr inbounds i8, ptr %.0162232, i64 4
  store i8 %219, ptr %214, align 1, !tbaa !5
  %.not194.3 = icmp eq i64 %215, 0
  br i1 %.not194.3, label %.loopexit704, label %vec.epilog.scalar.ph473, !llvm.loop !76

.loopexit704:                                     ; preds = %vec.epilog.scalar.ph473.prol.loopexit, %vec.epilog.scalar.ph473, %vec.epilog.middle.block472, %middle.block448
  %221 = getelementptr inbounds i8, ptr %0, i64 %3
  %222 = sub i64 0, %181
  %223 = getelementptr inbounds i8, ptr %221, i64 %222
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %223, ptr align 1 %1, i64 %181, i1 false)
  br label %.loopexit

224:                                              ; preds = %180
  %225 = getelementptr i8, ptr %0, i64 %3
  %.not191206 = icmp ult i64 %6, 2
  br i1 %.not191206, label %._crit_edge, label %.lr.ph212.preheader

.lr.ph212.preheader:                              ; preds = %224
  %226 = lshr i64 %6, 1
  %min.iters.check353 = icmp ult i64 %6, 96
  br i1 %min.iters.check353, label %.lr.ph212.preheader719, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph212.preheader
  %227 = getelementptr i8, ptr %0, i64 %4
  %scevgep = getelementptr i8, ptr %227, i64 -1
  %228 = sub nsw i64 1, %226
  %229 = getelementptr i8, ptr %scevgep, i64 %228
  %230 = icmp ugt ptr %229, %scevgep
  %231 = getelementptr i8, ptr %0, i64 %3
  %scevgep328 = getelementptr i8, ptr %231, i64 -1
  %232 = sub nsw i64 1, %226
  %233 = getelementptr i8, ptr %scevgep328, i64 %232
  %234 = icmp ugt ptr %233, %scevgep328
  %235 = or i1 %230, %234
  br i1 %235, label %.lr.ph212.preheader719, label %vector.memcheck

vector.memcheck:                                  ; preds = %vector.scevcheck
  %scevgep332 = getelementptr i8, ptr %0, i64 %226
  %236 = getelementptr i8, ptr %0, i64 %226
  %scevgep333 = getelementptr i8, ptr %236, i64 %4
  %237 = sub i64 %4, %226
  %scevgep334 = getelementptr i8, ptr %0, i64 %237
  %238 = sub i64 %3, %226
  %scevgep335 = getelementptr i8, ptr %0, i64 %238
  %bound0 = icmp ugt ptr %scevgep333, %0
  %bound1 = icmp ult ptr %177, %scevgep332
  %found.conflict = and i1 %bound0, %bound1
  %bound0336 = icmp ugt ptr %177, %0
  %bound1337 = icmp ult ptr %scevgep334, %scevgep332
  %found.conflict338 = and i1 %bound0336, %bound1337
  %conflict.rdx = or i1 %found.conflict, %found.conflict338
  %bound0339 = icmp ugt ptr %225, %0
  %bound1340 = icmp ult ptr %scevgep335, %scevgep332
  %found.conflict341 = and i1 %bound0339, %bound1340
  %conflict.rdx342 = or i1 %conflict.rdx, %found.conflict341
  %bound0344 = icmp ult ptr %177, %225
  %bound1345 = icmp ult ptr %scevgep335, %scevgep333
  %found.conflict346 = and i1 %bound0344, %bound1345
  %conflict.rdx347 = or i1 %conflict.rdx342, %found.conflict346
  %bound0348 = icmp ult ptr %scevgep334, %225
  %bound1349 = icmp ult ptr %scevgep335, %177
  %found.conflict350 = and i1 %bound0348, %bound1349
  %conflict.rdx351 = or i1 %conflict.rdx347, %found.conflict350
  br i1 %conflict.rdx351, label %.lr.ph212.preheader719, label %vector.ph354

vector.ph354:                                     ; preds = %vector.memcheck
  %n.vec356 = and i64 %226, 9223372036854775792
  %239 = sub nsw i64 0, %n.vec356
  %ind.end357 = getelementptr i8, ptr %225, i64 %239
  %ind.end359 = getelementptr i8, ptr %177, i64 %n.vec356
  %240 = sub nsw i64 0, %n.vec356
  %ind.end361 = getelementptr i8, ptr %177, i64 %240
  %ind.end363 = getelementptr i8, ptr %0, i64 %n.vec356
  %ind.end365 = and i64 %226, 15
  %invariant.gep = getelementptr i8, ptr %177, i64 -16
  %invariant.gep767 = getelementptr i8, ptr %225, i64 -16
  br label %vector.body367

vector.body367:                                   ; preds = %vector.body367, %vector.ph354
  %index368 = phi i64 [ 0, %vector.ph354 ], [ %index.next381, %vector.body367 ]
  %offset.idx = sub i64 0, %index368
  %next.gep370 = getelementptr i8, ptr %177, i64 %index368
  %offset.idx371 = sub i64 0, %index368
  %next.gep373 = getelementptr i8, ptr %0, i64 %index368
  %gep = getelementptr i8, ptr %invariant.gep, i64 %offset.idx371
  %wide.load374 = load <16 x i8>, ptr %gep, align 1, !tbaa !5, !alias.scope !77, !noalias !80
  %wide.load375 = load <16 x i8>, ptr %next.gep373, align 1, !tbaa !5, !alias.scope !82, !noalias !84
  %reverse376 = shufflevector <16 x i8> %wide.load375, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse376, ptr %gep, align 1, !tbaa !5, !alias.scope !77, !noalias !80
  %wide.load377 = load <16 x i8>, ptr %next.gep370, align 1, !tbaa !5, !alias.scope !86, !noalias !87
  store <16 x i8> %wide.load377, ptr %next.gep373, align 1, !tbaa !5, !alias.scope !82, !noalias !84
  %gep768 = getelementptr i8, ptr %invariant.gep767, i64 %offset.idx
  %wide.load378 = load <16 x i8>, ptr %gep768, align 1, !tbaa !5, !alias.scope !80
  %reverse379 = shufflevector <16 x i8> %wide.load378, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse379, ptr %next.gep370, align 1, !tbaa !5, !alias.scope !86, !noalias !87
  store <16 x i8> %wide.load374, ptr %gep768, align 1, !tbaa !5, !alias.scope !80
  %index.next381 = add nuw i64 %index368, 16
  %241 = icmp eq i64 %index.next381, %n.vec356
  br i1 %241, label %middle.block352, label %vector.body367, !llvm.loop !88

middle.block352:                                  ; preds = %vector.body367
  %cmp.n382 = icmp eq i64 %226, %n.vec356
  br i1 %cmp.n382, label %._crit_edge, label %.lr.ph212.preheader719

.lr.ph212.preheader719:                           ; preds = %middle.block352, %vector.memcheck, %vector.scevcheck, %.lr.ph212.preheader
  %.0156211.ph = phi ptr [ %225, %vector.memcheck ], [ %225, %vector.scevcheck ], [ %225, %.lr.ph212.preheader ], [ %ind.end357, %middle.block352 ]
  %.1158210.ph = phi ptr [ %177, %vector.memcheck ], [ %177, %vector.scevcheck ], [ %177, %.lr.ph212.preheader ], [ %ind.end359, %middle.block352 ]
  %.1160209.ph = phi ptr [ %177, %vector.memcheck ], [ %177, %vector.scevcheck ], [ %177, %.lr.ph212.preheader ], [ %ind.end361, %middle.block352 ]
  %.1163208.ph = phi ptr [ %0, %vector.memcheck ], [ %0, %vector.scevcheck ], [ %0, %.lr.ph212.preheader ], [ %ind.end363, %middle.block352 ]
  %.3181207.ph = phi i64 [ %226, %vector.memcheck ], [ %226, %vector.scevcheck ], [ %226, %.lr.ph212.preheader ], [ %ind.end365, %middle.block352 ]
  %xtraiter = and i64 %.3181207.ph, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph212.prol.loopexit, label %.lr.ph212.prol

.lr.ph212.prol:                                   ; preds = %.lr.ph212.preheader719
  %242 = add nsw i64 %.3181207.ph, -1
  %243 = getelementptr inbounds i8, ptr %.1160209.ph, i64 -1
  %244 = load i8, ptr %243, align 1, !tbaa !5
  %245 = load i8, ptr %.1163208.ph, align 1, !tbaa !5
  store i8 %245, ptr %243, align 1, !tbaa !5
  %246 = load i8, ptr %.1158210.ph, align 1, !tbaa !5
  %247 = getelementptr inbounds i8, ptr %.1163208.ph, i64 1
  store i8 %246, ptr %.1163208.ph, align 1, !tbaa !5
  %248 = getelementptr inbounds i8, ptr %.0156211.ph, i64 -1
  %249 = load i8, ptr %248, align 1, !tbaa !5
  %250 = getelementptr inbounds i8, ptr %.1158210.ph, i64 1
  store i8 %249, ptr %.1158210.ph, align 1, !tbaa !5
  store i8 %244, ptr %248, align 1, !tbaa !5
  br label %.lr.ph212.prol.loopexit

.lr.ph212.prol.loopexit:                          ; preds = %.lr.ph212.prol, %.lr.ph212.preheader719
  %.lcssa722.unr = phi ptr [ poison, %.lr.ph212.preheader719 ], [ %243, %.lr.ph212.prol ]
  %.lcssa721.unr = phi ptr [ poison, %.lr.ph212.preheader719 ], [ %247, %.lr.ph212.prol ]
  %.lcssa720.unr = phi ptr [ poison, %.lr.ph212.preheader719 ], [ %248, %.lr.ph212.prol ]
  %.0156211.unr = phi ptr [ %.0156211.ph, %.lr.ph212.preheader719 ], [ %248, %.lr.ph212.prol ]
  %.1158210.unr = phi ptr [ %.1158210.ph, %.lr.ph212.preheader719 ], [ %250, %.lr.ph212.prol ]
  %.1160209.unr = phi ptr [ %.1160209.ph, %.lr.ph212.preheader719 ], [ %243, %.lr.ph212.prol ]
  %.1163208.unr = phi ptr [ %.1163208.ph, %.lr.ph212.preheader719 ], [ %247, %.lr.ph212.prol ]
  %.3181207.unr = phi i64 [ %.3181207.ph, %.lr.ph212.preheader719 ], [ %242, %.lr.ph212.prol ]
  %251 = icmp eq i64 %.3181207.ph, 1
  br i1 %251, label %._crit_edge, label %.lr.ph212

.lr.ph212:                                        ; preds = %.lr.ph212.prol.loopexit, %.lr.ph212
  %.0156211 = phi ptr [ %266, %.lr.ph212 ], [ %.0156211.unr, %.lr.ph212.prol.loopexit ]
  %.1158210 = phi ptr [ %268, %.lr.ph212 ], [ %.1158210.unr, %.lr.ph212.prol.loopexit ]
  %.1160209 = phi ptr [ %261, %.lr.ph212 ], [ %.1160209.unr, %.lr.ph212.prol.loopexit ]
  %.1163208 = phi ptr [ %265, %.lr.ph212 ], [ %.1163208.unr, %.lr.ph212.prol.loopexit ]
  %.3181207 = phi i64 [ %260, %.lr.ph212 ], [ %.3181207.unr, %.lr.ph212.prol.loopexit ]
  %252 = getelementptr inbounds i8, ptr %.1160209, i64 -1
  %253 = load i8, ptr %252, align 1, !tbaa !5
  %254 = load i8, ptr %.1163208, align 1, !tbaa !5
  store i8 %254, ptr %252, align 1, !tbaa !5
  %255 = load i8, ptr %.1158210, align 1, !tbaa !5
  %256 = getelementptr inbounds i8, ptr %.1163208, i64 1
  store i8 %255, ptr %.1163208, align 1, !tbaa !5
  %257 = getelementptr inbounds i8, ptr %.0156211, i64 -1
  %258 = load i8, ptr %257, align 1, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %.1158210, i64 1
  store i8 %258, ptr %.1158210, align 1, !tbaa !5
  store i8 %253, ptr %257, align 1, !tbaa !5
  %260 = add i64 %.3181207, -2
  %261 = getelementptr inbounds i8, ptr %.1160209, i64 -2
  %262 = load i8, ptr %261, align 1, !tbaa !5
  %263 = load i8, ptr %256, align 1, !tbaa !5
  store i8 %263, ptr %261, align 1, !tbaa !5
  %264 = load i8, ptr %259, align 1, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %.1163208, i64 2
  store i8 %264, ptr %256, align 1, !tbaa !5
  %266 = getelementptr inbounds i8, ptr %.0156211, i64 -2
  %267 = load i8, ptr %266, align 1, !tbaa !5
  %268 = getelementptr inbounds i8, ptr %.1158210, i64 2
  store i8 %267, ptr %259, align 1, !tbaa !5
  store i8 %262, ptr %266, align 1, !tbaa !5
  %.not191.1 = icmp eq i64 %260, 0
  br i1 %.not191.1, label %._crit_edge, label %.lr.ph212, !llvm.loop !89

._crit_edge:                                      ; preds = %.lr.ph212.prol.loopexit, %.lr.ph212, %middle.block352, %224
  %.1163.lcssa = phi ptr [ %0, %224 ], [ %ind.end363, %middle.block352 ], [ %.lcssa721.unr, %.lr.ph212.prol.loopexit ], [ %265, %.lr.ph212 ]
  %.1160.lcssa = phi ptr [ %177, %224 ], [ %ind.end361, %middle.block352 ], [ %.lcssa722.unr, %.lr.ph212.prol.loopexit ], [ %261, %.lr.ph212 ]
  %.0156.lcssa = phi ptr [ %225, %224 ], [ %ind.end357, %middle.block352 ], [ %.lcssa720.unr, %.lr.ph212.prol.loopexit ], [ %266, %.lr.ph212 ]
  %269 = ptrtoint ptr %.1160.lcssa to i64
  %270 = ptrtoint ptr %.1163.lcssa to i64
  %271 = sub i64 %269, %270
  %.off = add i64 %271, 1
  %.not192215 = icmp ult i64 %.off, 3
  br i1 %.not192215, label %._crit_edge222, label %.lr.ph221.preheader

.lr.ph221.preheader:                              ; preds = %._crit_edge
  %272 = sdiv i64 %271, 2
  %min.iters.check409 = icmp ult i64 %272, 32
  br i1 %min.iters.check409, label %.lr.ph221.preheader716, label %vector.scevcheck383

vector.scevcheck383:                              ; preds = %.lr.ph221.preheader
  %scevgep384 = getelementptr i8, ptr %.1160.lcssa, i64 -1
  %273 = sub nsw i64 1, %272
  %274 = getelementptr i8, ptr %scevgep384, i64 %273
  %275 = icmp ugt ptr %274, %scevgep384
  %scevgep388 = getelementptr i8, ptr %.0156.lcssa, i64 -1
  %276 = sub nsw i64 1, %272
  %277 = getelementptr i8, ptr %scevgep388, i64 %276
  %278 = icmp ugt ptr %277, %scevgep388
  %279 = or i1 %275, %278
  br i1 %279, label %.lr.ph221.preheader716, label %vector.memcheck392

vector.memcheck392:                               ; preds = %vector.scevcheck383
  %scevgep393 = getelementptr i8, ptr %.1163.lcssa, i64 %272
  %280 = sub nsw i64 0, %272
  %scevgep394 = getelementptr i8, ptr %.1160.lcssa, i64 %280
  %scevgep395 = getelementptr i8, ptr %.0156.lcssa, i64 %280
  %bound0396 = icmp ult ptr %.1163.lcssa, %.1160.lcssa
  %bound1397 = icmp ult ptr %scevgep394, %scevgep393
  %found.conflict398 = and i1 %bound0396, %bound1397
  %bound0399 = icmp ult ptr %.1163.lcssa, %.0156.lcssa
  %bound1400 = icmp ult ptr %scevgep395, %scevgep393
  %found.conflict401 = and i1 %bound0399, %bound1400
  %conflict.rdx402 = or i1 %found.conflict398, %found.conflict401
  %bound0403 = icmp ult ptr %scevgep394, %.0156.lcssa
  %bound1404 = icmp ult ptr %scevgep395, %.1160.lcssa
  %found.conflict405 = and i1 %bound0403, %bound1404
  %conflict.rdx406 = or i1 %conflict.rdx402, %found.conflict405
  br i1 %conflict.rdx406, label %.lr.ph221.preheader716, label %vector.ph410

vector.ph410:                                     ; preds = %vector.memcheck392
  %n.vec412 = and i64 %272, -16
  %281 = sub nsw i64 0, %n.vec412
  %ind.end413 = getelementptr i8, ptr %.0156.lcssa, i64 %281
  %282 = sub nsw i64 0, %n.vec412
  %ind.end415 = getelementptr i8, ptr %.1160.lcssa, i64 %282
  %ind.end417 = getelementptr i8, ptr %.1163.lcssa, i64 %n.vec412
  %ind.end419 = and i64 %272, 15
  %invariant.gep769 = getelementptr i8, ptr %.1160.lcssa, i64 -16
  %invariant.gep771 = getelementptr i8, ptr %.0156.lcssa, i64 -16
  br label %vector.body421

vector.body421:                                   ; preds = %vector.body421, %vector.ph410
  %index422 = phi i64 [ 0, %vector.ph410 ], [ %index.next435, %vector.body421 ]
  %offset.idx423 = sub i64 0, %index422
  %offset.idx425 = sub i64 0, %index422
  %next.gep427 = getelementptr i8, ptr %.1163.lcssa, i64 %index422
  %gep770 = getelementptr i8, ptr %invariant.gep769, i64 %offset.idx425
  %wide.load428 = load <16 x i8>, ptr %gep770, align 1, !tbaa !5, !alias.scope !90, !noalias !93
  %wide.load430 = load <16 x i8>, ptr %next.gep427, align 1, !tbaa !5, !alias.scope !95, !noalias !97
  %reverse431 = shufflevector <16 x i8> %wide.load430, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse431, ptr %gep770, align 1, !tbaa !5, !alias.scope !90, !noalias !93
  %gep772 = getelementptr i8, ptr %invariant.gep771, i64 %offset.idx423
  %wide.load432 = load <16 x i8>, ptr %gep772, align 1, !tbaa !5, !alias.scope !93
  %reverse433 = shufflevector <16 x i8> %wide.load432, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  store <16 x i8> %reverse433, ptr %next.gep427, align 1, !tbaa !5, !alias.scope !95, !noalias !97
  store <16 x i8> %wide.load428, ptr %gep772, align 1, !tbaa !5, !alias.scope !93
  %index.next435 = add nuw i64 %index422, 16
  %283 = icmp eq i64 %index.next435, %n.vec412
  br i1 %283, label %middle.block407, label %vector.body421, !llvm.loop !98

middle.block407:                                  ; preds = %vector.body421
  %cmp.n436 = icmp eq i64 %272, %n.vec412
  br i1 %cmp.n436, label %._crit_edge222.loopexit, label %.lr.ph221.preheader716

.lr.ph221.preheader716:                           ; preds = %middle.block407, %vector.memcheck392, %vector.scevcheck383, %.lr.ph221.preheader
  %.1219.ph = phi ptr [ %.0156.lcssa, %vector.memcheck392 ], [ %.0156.lcssa, %vector.scevcheck383 ], [ %.0156.lcssa, %.lr.ph221.preheader ], [ %ind.end413, %middle.block407 ]
  %.2161218.ph = phi ptr [ %.1160.lcssa, %vector.memcheck392 ], [ %.1160.lcssa, %vector.scevcheck383 ], [ %.1160.lcssa, %.lr.ph221.preheader ], [ %ind.end415, %middle.block407 ]
  %.2164217.ph = phi ptr [ %.1163.lcssa, %vector.memcheck392 ], [ %.1163.lcssa, %vector.scevcheck383 ], [ %.1163.lcssa, %.lr.ph221.preheader ], [ %ind.end417, %middle.block407 ]
  %.4216.ph = phi i64 [ %272, %vector.memcheck392 ], [ %272, %vector.scevcheck383 ], [ %272, %.lr.ph221.preheader ], [ %ind.end419, %middle.block407 ]
  %xtraiter724 = and i64 %.4216.ph, 1
  %lcmp.mod725.not = icmp eq i64 %xtraiter724, 0
  br i1 %lcmp.mod725.not, label %.lr.ph221.prol.loopexit, label %.lr.ph221.prol

.lr.ph221.prol:                                   ; preds = %.lr.ph221.preheader716
  %284 = add nsw i64 %.4216.ph, -1
  %285 = getelementptr inbounds i8, ptr %.2161218.ph, i64 -1
  %286 = load i8, ptr %285, align 1, !tbaa !5
  %287 = load i8, ptr %.2164217.ph, align 1, !tbaa !5
  store i8 %287, ptr %285, align 1, !tbaa !5
  %288 = getelementptr inbounds i8, ptr %.1219.ph, i64 -1
  %289 = load i8, ptr %288, align 1, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %.2164217.ph, i64 1
  store i8 %289, ptr %.2164217.ph, align 1, !tbaa !5
  store i8 %286, ptr %288, align 1, !tbaa !5
  br label %.lr.ph221.prol.loopexit

.lr.ph221.prol.loopexit:                          ; preds = %.lr.ph221.prol, %.lr.ph221.preheader716
  %.lcssa718.unr = phi ptr [ poison, %.lr.ph221.preheader716 ], [ %288, %.lr.ph221.prol ]
  %.lcssa717.unr = phi ptr [ poison, %.lr.ph221.preheader716 ], [ %290, %.lr.ph221.prol ]
  %.1219.unr = phi ptr [ %.1219.ph, %.lr.ph221.preheader716 ], [ %288, %.lr.ph221.prol ]
  %.2161218.unr = phi ptr [ %.2161218.ph, %.lr.ph221.preheader716 ], [ %285, %.lr.ph221.prol ]
  %.2164217.unr = phi ptr [ %.2164217.ph, %.lr.ph221.preheader716 ], [ %290, %.lr.ph221.prol ]
  %.4216.unr = phi i64 [ %.4216.ph, %.lr.ph221.preheader716 ], [ %284, %.lr.ph221.prol ]
  %291 = icmp eq i64 %.4216.ph, 1
  br i1 %291, label %._crit_edge222.loopexit, label %.lr.ph221

.lr.ph221:                                        ; preds = %.lr.ph221.prol.loopexit, %.lr.ph221
  %.1219 = phi ptr [ %302, %.lr.ph221 ], [ %.1219.unr, %.lr.ph221.prol.loopexit ]
  %.2161218 = phi ptr [ %299, %.lr.ph221 ], [ %.2161218.unr, %.lr.ph221.prol.loopexit ]
  %.2164217 = phi ptr [ %304, %.lr.ph221 ], [ %.2164217.unr, %.lr.ph221.prol.loopexit ]
  %.4216 = phi i64 [ %298, %.lr.ph221 ], [ %.4216.unr, %.lr.ph221.prol.loopexit ]
  %292 = getelementptr inbounds i8, ptr %.2161218, i64 -1
  %293 = load i8, ptr %292, align 1, !tbaa !5
  %294 = load i8, ptr %.2164217, align 1, !tbaa !5
  store i8 %294, ptr %292, align 1, !tbaa !5
  %295 = getelementptr inbounds i8, ptr %.1219, i64 -1
  %296 = load i8, ptr %295, align 1, !tbaa !5
  %297 = getelementptr inbounds i8, ptr %.2164217, i64 1
  store i8 %296, ptr %.2164217, align 1, !tbaa !5
  store i8 %293, ptr %295, align 1, !tbaa !5
  %298 = add i64 %.4216, -2
  %299 = getelementptr inbounds i8, ptr %.2161218, i64 -2
  %300 = load i8, ptr %299, align 1, !tbaa !5
  %301 = load i8, ptr %297, align 1, !tbaa !5
  store i8 %301, ptr %299, align 1, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %.1219, i64 -2
  %303 = load i8, ptr %302, align 1, !tbaa !5
  %304 = getelementptr inbounds i8, ptr %.2164217, i64 2
  store i8 %303, ptr %297, align 1, !tbaa !5
  store i8 %300, ptr %302, align 1, !tbaa !5
  %.not192.1 = icmp eq i64 %298, 0
  br i1 %.not192.1, label %._crit_edge222.loopexit, label %.lr.ph221, !llvm.loop !99

._crit_edge222.loopexit:                          ; preds = %.lr.ph221.prol.loopexit, %.lr.ph221, %middle.block407
  %.lcssa301 = phi ptr [ %ind.end413, %middle.block407 ], [ %.lcssa718.unr, %.lr.ph221.prol.loopexit ], [ %302, %.lr.ph221 ]
  %.lcssa300 = phi ptr [ %ind.end417, %middle.block407 ], [ %.lcssa717.unr, %.lr.ph221.prol.loopexit ], [ %304, %.lr.ph221 ]
  %.pre281 = ptrtoint ptr %.lcssa300 to i64
  br label %._crit_edge222

._crit_edge222:                                   ; preds = %._crit_edge222.loopexit, %._crit_edge
  %.pre-phi282 = phi i64 [ %.pre281, %._crit_edge222.loopexit ], [ %270, %._crit_edge ]
  %.2164.lcssa = phi ptr [ %.lcssa300, %._crit_edge222.loopexit ], [ %.1163.lcssa, %._crit_edge ]
  %.1.lcssa = phi ptr [ %.lcssa301, %._crit_edge222.loopexit ], [ %.0156.lcssa, %._crit_edge ]
  %305 = ptrtoint ptr %.1.lcssa to i64
  %306 = sub i64 %305, %.pre-phi282
  %.off267 = add i64 %306, 1
  %.not193225 = icmp ult i64 %.off267, 3
  br i1 %.not193225, label %.loopexit, label %.lr.ph230.preheader

.lr.ph230.preheader:                              ; preds = %._crit_edge222
  %307 = sdiv i64 %306, 2
  %308 = add nsw i64 %307, -1
  %xtraiter726 = and i64 %307, 3
  %lcmp.mod727.not = icmp eq i64 %xtraiter726, 0
  br i1 %lcmp.mod727.not, label %.lr.ph230.prol.loopexit, label %.lr.ph230.prol

.lr.ph230.prol:                                   ; preds = %.lr.ph230.preheader, %.lr.ph230.prol
  %.2228.prol = phi ptr [ %311, %.lr.ph230.prol ], [ %.1.lcssa, %.lr.ph230.preheader ]
  %.3227.prol = phi ptr [ %313, %.lr.ph230.prol ], [ %.2164.lcssa, %.lr.ph230.preheader ]
  %.5226.prol = phi i64 [ %309, %.lr.ph230.prol ], [ %307, %.lr.ph230.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph230.prol ], [ 0, %.lr.ph230.preheader ]
  %309 = add i64 %.5226.prol, -1
  %310 = load i8, ptr %.3227.prol, align 1, !tbaa !5
  %311 = getelementptr inbounds i8, ptr %.2228.prol, i64 -1
  %312 = load i8, ptr %311, align 1, !tbaa !5
  %313 = getelementptr inbounds i8, ptr %.3227.prol, i64 1
  store i8 %312, ptr %.3227.prol, align 1, !tbaa !5
  store i8 %310, ptr %311, align 1, !tbaa !5
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter726
  br i1 %prol.iter.cmp.not, label %.lr.ph230.prol.loopexit, label %.lr.ph230.prol, !llvm.loop !100

.lr.ph230.prol.loopexit:                          ; preds = %.lr.ph230.prol, %.lr.ph230.preheader
  %.2228.unr = phi ptr [ %.1.lcssa, %.lr.ph230.preheader ], [ %311, %.lr.ph230.prol ]
  %.3227.unr = phi ptr [ %.2164.lcssa, %.lr.ph230.preheader ], [ %313, %.lr.ph230.prol ]
  %.5226.unr = phi i64 [ %307, %.lr.ph230.preheader ], [ %309, %.lr.ph230.prol ]
  %314 = icmp ult i64 %308, 3
  br i1 %314, label %.loopexit, label %.lr.ph230

.lr.ph230:                                        ; preds = %.lr.ph230.prol.loopexit, %.lr.ph230
  %.2228 = phi ptr [ %329, %.lr.ph230 ], [ %.2228.unr, %.lr.ph230.prol.loopexit ]
  %.3227 = phi ptr [ %331, %.lr.ph230 ], [ %.3227.unr, %.lr.ph230.prol.loopexit ]
  %.5226 = phi i64 [ %327, %.lr.ph230 ], [ %.5226.unr, %.lr.ph230.prol.loopexit ]
  %315 = load i8, ptr %.3227, align 1, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %.2228, i64 -1
  %317 = load i8, ptr %316, align 1, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %.3227, i64 1
  store i8 %317, ptr %.3227, align 1, !tbaa !5
  store i8 %315, ptr %316, align 1, !tbaa !5
  %319 = load i8, ptr %318, align 1, !tbaa !5
  %320 = getelementptr inbounds i8, ptr %.2228, i64 -2
  %321 = load i8, ptr %320, align 1, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %.3227, i64 2
  store i8 %321, ptr %318, align 1, !tbaa !5
  store i8 %319, ptr %320, align 1, !tbaa !5
  %323 = load i8, ptr %322, align 1, !tbaa !5
  %324 = getelementptr inbounds i8, ptr %.2228, i64 -3
  %325 = load i8, ptr %324, align 1, !tbaa !5
  %326 = getelementptr inbounds i8, ptr %.3227, i64 3
  store i8 %325, ptr %322, align 1, !tbaa !5
  store i8 %323, ptr %324, align 1, !tbaa !5
  %327 = add i64 %.5226, -4
  %328 = load i8, ptr %326, align 1, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %.2228, i64 -4
  %330 = load i8, ptr %329, align 1, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %.3227, i64 4
  store i8 %330, ptr %326, align 1, !tbaa !5
  store i8 %328, ptr %329, align 1, !tbaa !5
  %.not193.3 = icmp eq i64 %327, 0
  br i1 %.not193.3, label %.loopexit, label %.lr.ph230, !llvm.loop !101

332:                                              ; preds = %174
  %.not202 = icmp eq i64 %4, 0
  br i1 %.not202, label %.loopexit, label %iter.check

iter.check:                                       ; preds = %332
  %333 = getelementptr i8, ptr %0, i64 %4
  %min.iters.check = icmp ult i64 %4, 8
  br i1 %min.iters.check, label %.lr.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check305 = icmp ult i64 %4, 32
  br i1 %min.iters.check305, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %4, -32
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %next.gep = getelementptr i8, ptr %333, i64 %index
  %next.gep307 = getelementptr i8, ptr %0, i64 %index
  %334 = getelementptr i8, ptr %next.gep307, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep307, align 1, !tbaa !5
  %wide.load309 = load <16 x i8>, ptr %334, align 1, !tbaa !5
  %335 = getelementptr i8, ptr %next.gep, i64 16
  %wide.load310 = load <16 x i8>, ptr %next.gep, align 1, !tbaa !5
  %wide.load311 = load <16 x i8>, ptr %335, align 1, !tbaa !5
  store <16 x i8> %wide.load310, ptr %next.gep307, align 1, !tbaa !5
  store <16 x i8> %wide.load311, ptr %334, align 1, !tbaa !5
  store <16 x i8> %wide.load, ptr %next.gep, align 1, !tbaa !5
  store <16 x i8> %wide.load309, ptr %335, align 1, !tbaa !5
  %index.next = add nuw i64 %index, 32
  %336 = icmp eq i64 %index.next, %n.vec
  br i1 %336, label %middle.block, label %vector.body, !llvm.loop !102

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %4
  br i1 %cmp.n, label %.loopexit, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block
  %ind.end319 = and i64 %4, 31
  %ind.end316 = getelementptr i8, ptr %0, i64 %n.vec
  %ind.end314 = getelementptr i8, ptr %333, i64 %n.vec
  %n.vec.remaining = and i64 %4, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec313 = and i64 %4, -8
  %ind.end = getelementptr i8, ptr %333, i64 %n.vec313
  %ind.end315 = getelementptr i8, ptr %0, i64 %n.vec313
  %ind.end318 = and i64 %4, 7
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index321 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next326, %vec.epilog.vector.body ]
  %next.gep322 = getelementptr i8, ptr %333, i64 %index321
  %next.gep323 = getelementptr i8, ptr %0, i64 %index321
  %wide.load324 = load <8 x i8>, ptr %next.gep323, align 1, !tbaa !5
  %wide.load325 = load <8 x i8>, ptr %next.gep322, align 1, !tbaa !5
  store <8 x i8> %wide.load325, ptr %next.gep323, align 1, !tbaa !5
  store <8 x i8> %wide.load324, ptr %next.gep322, align 1, !tbaa !5
  %index.next326 = add nuw i64 %index321, 8
  %337 = icmp eq i64 %index.next326, %n.vec313
  br i1 %337, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !103

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n327 = icmp eq i64 %n.vec313, %4
  br i1 %cmp.n327, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0205.ph = phi ptr [ %333, %iter.check ], [ %ind.end314, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  %.0155204.ph = phi ptr [ %0, %iter.check ], [ %ind.end316, %vec.epilog.iter.check ], [ %ind.end315, %vec.epilog.middle.block ]
  %.1183203.ph = phi i64 [ %4, %iter.check ], [ %ind.end319, %vec.epilog.iter.check ], [ %ind.end318, %vec.epilog.middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %.0205 = phi ptr [ %342, %.lr.ph ], [ %.0205.ph, %.lr.ph.preheader ]
  %.0155204 = phi ptr [ %341, %.lr.ph ], [ %.0155204.ph, %.lr.ph.preheader ]
  %.1183203 = phi i64 [ %338, %.lr.ph ], [ %.1183203.ph, %.lr.ph.preheader ]
  %338 = add i64 %.1183203, -1
  %339 = load i8, ptr %.0155204, align 1, !tbaa !5
  %340 = load i8, ptr %.0205, align 1, !tbaa !5
  %341 = getelementptr inbounds i8, ptr %.0155204, i64 1
  store i8 %340, ptr %.0155204, align 1, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %.0205, i64 1
  store i8 %339, ptr %.0205, align 1, !tbaa !5
  %.not = icmp eq i64 %338, 0
  br i1 %.not, label %.loopexit, label %.lr.ph, !llvm.loop !104

.loopexit:                                        ; preds = %.lr.ph, %.lr.ph230.prol.loopexit, %.lr.ph230, %.lr.ph262.prol.loopexit, %.lr.ph262, %middle.block, %vec.epilog.middle.block, %332, %._crit_edge222, %._crit_edge254, %.loopexit704, %.loopexit703, %178, %9
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #2

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9}
!9 = distinct !{!9, !10}
!10 = distinct !{!10, !"LVerDomain"}
!11 = !{!12}
!12 = distinct !{!12, !10}
!13 = !{!14}
!14 = distinct !{!14, !10}
!15 = !{!9, !12}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = !{!21}
!21 = distinct !{!21, !22}
!22 = distinct !{!22, !"LVerDomain"}
!23 = !{!24}
!24 = distinct !{!24, !22}
!25 = !{!26}
!26 = distinct !{!26, !22}
!27 = !{!21, !24}
!28 = distinct !{!28, !17, !18, !19}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.unroll.disable"}
!31 = distinct !{!31, !17, !18}
!32 = !{!33}
!33 = distinct !{!33, !34}
!34 = distinct !{!34, !"LVerDomain"}
!35 = !{!36}
!36 = distinct !{!36, !34}
!37 = !{!38}
!38 = distinct !{!38, !34}
!39 = !{!40, !33, !36}
!40 = distinct !{!40, !34}
!41 = !{!40}
!42 = !{!33, !36}
!43 = distinct !{!43, !17, !18, !19}
!44 = distinct !{!44, !17, !18}
!45 = !{!46}
!46 = distinct !{!46, !47}
!47 = distinct !{!47, !"LVerDomain"}
!48 = !{!49, !50}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !47}
!51 = !{!50}
!52 = !{!49}
!53 = distinct !{!53, !17, !18, !19}
!54 = distinct !{!54, !17, !18}
!55 = distinct !{!55, !30}
!56 = distinct !{!56, !17}
!57 = !{!58}
!58 = distinct !{!58, !59}
!59 = distinct !{!59, !"LVerDomain"}
!60 = !{!61}
!61 = distinct !{!61, !59}
!62 = !{!63}
!63 = distinct !{!63, !59}
!64 = !{!58, !61}
!65 = distinct !{!65, !17, !18, !19}
!66 = !{!67}
!67 = distinct !{!67, !68}
!68 = distinct !{!68, !"LVerDomain"}
!69 = !{!70}
!70 = distinct !{!70, !68}
!71 = !{!72}
!72 = distinct !{!72, !68}
!73 = !{!67, !70}
!74 = distinct !{!74, !17, !18, !19}
!75 = distinct !{!75, !30}
!76 = distinct !{!76, !17, !18}
!77 = !{!78}
!78 = distinct !{!78, !79}
!79 = distinct !{!79, !"LVerDomain"}
!80 = !{!81}
!81 = distinct !{!81, !79}
!82 = !{!83}
!83 = distinct !{!83, !79}
!84 = !{!85, !78, !81}
!85 = distinct !{!85, !79}
!86 = !{!85}
!87 = !{!78, !81}
!88 = distinct !{!88, !17, !18, !19}
!89 = distinct !{!89, !17, !18}
!90 = !{!91}
!91 = distinct !{!91, !92}
!92 = distinct !{!92, !"LVerDomain"}
!93 = !{!94}
!94 = distinct !{!94, !92}
!95 = !{!96}
!96 = distinct !{!96, !92}
!97 = !{!91, !94}
!98 = distinct !{!98, !17, !18, !19}
!99 = distinct !{!99, !17, !18}
!100 = distinct !{!100, !30}
!101 = distinct !{!101, !17}
!102 = distinct !{!102, !17, !18, !19}
!103 = distinct !{!103, !17, !18, !19}
!104 = distinct !{!104, !17, !19, !18}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass