; LLVM IR from rweather/lightweight-crypto :: src/combined (lotus-locus)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.gift64n_key_schedule_t = type { [4 x i32], [8 x i32] }

; Function Attrs: nounwind uwtable
define dso_local i32 @lotus_aead_decrypt(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i64 noundef %4, ptr noundef %5, i64 noundef %6, ptr noundef %7, ptr noundef %8) #0 {
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %struct.gift64n_key_schedule_t, align 4
  %21 = alloca [16 x i8], align 16
  %22 = alloca [8 x i8], align 1
  %23 = alloca [8 x i8], align 1
  %24 = alloca [8 x i8], align 1
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i32, align 4
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca i32, align 4
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca i32, align 4
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca i32, align 4
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca ptr, align 8
  %68 = alloca i32, align 4
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca i32, align 4
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca i32, align 4
  %75 = alloca ptr, align 8
  %76 = alloca ptr, align 8
  %77 = alloca i32, align 4
  %78 = alloca ptr, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i32, align 4
  %81 = alloca ptr, align 8
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca i32, align 4
  %85 = alloca ptr, align 8
  %86 = alloca ptr, align 8
  %87 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store i64 %4, ptr %15, align 8, !tbaa !9
  store ptr %5, ptr %16, align 8, !tbaa !5
  store i64 %6, ptr %17, align 8, !tbaa !9
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 48, ptr %20) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %88 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %88, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %89 = load ptr, ptr %13, align 8, !tbaa !5
  %90 = load i64, ptr %15, align 8, !tbaa !9
  %91 = icmp ult i64 %90, 8
  br i1 %91, label %92, label %93

92:                                               ; preds = %9
  store i32 -1, ptr %10, align 4
  store i32 1, ptr %27, align 4
  br label %605

93:                                               ; preds = %9
  %94 = load i64, ptr %15, align 8, !tbaa !9
  %95 = sub i64 %94, 8
  %96 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %95, ptr %96, align 8, !tbaa !9
  %97 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  %98 = load ptr, ptr %19, align 8, !tbaa !5
  %99 = load ptr, ptr %18, align 8, !tbaa !5
  %100 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  call void @lotus_or_locus_init(ptr noundef %20, ptr noundef %97, ptr noundef %98, ptr noundef %99, ptr noundef %100)
  %101 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %101, i8 0, i64 16, i1 false)
  %102 = load i64, ptr %17, align 8, !tbaa !9
  %103 = icmp ugt i64 %102, 0
  br i1 %103, label %104, label %110

104:                                              ; preds = %93
  %105 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  %106 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  %107 = getelementptr inbounds i8, ptr %106, i64 8
  %108 = load ptr, ptr %16, align 8, !tbaa !5
  %109 = load i64, ptr %17, align 8, !tbaa !9
  call void @lotus_or_locus_process_ad(ptr noundef %20, ptr noundef %105, ptr noundef %107, ptr noundef %108, i64 noundef %109)
  br label %110

110:                                              ; preds = %104, %93
  %111 = load i64, ptr %15, align 8, !tbaa !9
  %112 = sub i64 %111, 8
  store i64 %112, ptr %15, align 8, !tbaa !9
  %113 = load i64, ptr %15, align 8, !tbaa !9
  %114 = icmp ugt i64 %113, 0
  br i1 %114, label %115, label %593

115:                                              ; preds = %110
  br label %116

116:                                              ; preds = %270, %115
  %117 = load i64, ptr %15, align 8, !tbaa !9
  %118 = icmp ugt i64 %117, 16
  br i1 %118, label %119, label %277

119:                                              ; preds = %116
  call void @lotus_or_locus_mul_2(ptr noundef %20)
  br label %120

120:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %121 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  store ptr %121, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %122 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %122, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %123 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  store ptr %123, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  store i32 8, ptr %31, align 4, !tbaa !11
  br label %124

124:                                              ; preds = %127, %120
  %125 = load i32, ptr %31, align 4, !tbaa !11
  %126 = icmp ugt i32 %125, 0
  br i1 %126, label %127, label %142

127:                                              ; preds = %124
  %128 = load ptr, ptr %29, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i32 1
  store ptr %129, ptr %29, align 8, !tbaa !5
  %130 = load i8, ptr %128, align 1, !tbaa !13
  %131 = zext i8 %130 to i32
  %132 = load ptr, ptr %30, align 8, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %132, i32 1
  store ptr %133, ptr %30, align 8, !tbaa !5
  %134 = load i8, ptr %132, align 1, !tbaa !13
  %135 = zext i8 %134 to i32
  %136 = xor i32 %131, %135
  %137 = trunc i32 %136 to i8
  %138 = load ptr, ptr %28, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i32 1
  store ptr %139, ptr %28, align 8, !tbaa !5
  store i8 %137, ptr %138, align 1, !tbaa !13
  %140 = load i32, ptr %31, align 4, !tbaa !11
  %141 = add i32 %140, -1
  store i32 %141, ptr %31, align 4, !tbaa !11
  br label %124, !llvm.loop !14

142:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %143

143:                                              ; preds = %142
  br label %144

144:                                              ; preds = %143
  %145 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %146 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %145, ptr noundef %146, i16 noundef zeroext 21845)
  br label %147

147:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  %148 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %148, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %149 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %149, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  store i32 8, ptr %34, align 4, !tbaa !11
  br label %150

150:                                              ; preds = %153, %147
  %151 = load i32, ptr %34, align 4, !tbaa !11
  %152 = icmp ugt i32 %151, 0
  br i1 %152, label %153, label %166

153:                                              ; preds = %150
  %154 = load ptr, ptr %33, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %154, i32 1
  store ptr %155, ptr %33, align 8, !tbaa !5
  %156 = load i8, ptr %154, align 1, !tbaa !13
  %157 = zext i8 %156 to i32
  %158 = load ptr, ptr %32, align 8, !tbaa !5
  %159 = getelementptr inbounds i8, ptr %158, i32 1
  store ptr %159, ptr %32, align 8, !tbaa !5
  %160 = load i8, ptr %158, align 1, !tbaa !13
  %161 = zext i8 %160 to i32
  %162 = xor i32 %161, %157
  %163 = trunc i32 %162 to i8
  store i8 %163, ptr %158, align 1, !tbaa !13
  %164 = load i32, ptr %34, align 4, !tbaa !11
  %165 = add i32 %164, -1
  store i32 %165, ptr %34, align 4, !tbaa !11
  br label %150, !llvm.loop !16

166:                                              ; preds = %150
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %167

167:                                              ; preds = %166
  br label %168

168:                                              ; preds = %167
  %169 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %170 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %169, ptr noundef %170, i16 noundef zeroext 21845)
  br label %171

171:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %172 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %172, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %173 = load ptr, ptr %14, align 8, !tbaa !5
  %174 = getelementptr inbounds i8, ptr %173, i64 8
  store ptr %174, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  store i32 8, ptr %37, align 4, !tbaa !11
  br label %175

175:                                              ; preds = %178, %171
  %176 = load i32, ptr %37, align 4, !tbaa !11
  %177 = icmp ugt i32 %176, 0
  br i1 %177, label %178, label %191

178:                                              ; preds = %175
  %179 = load ptr, ptr %36, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %179, i32 1
  store ptr %180, ptr %36, align 8, !tbaa !5
  %181 = load i8, ptr %179, align 1, !tbaa !13
  %182 = zext i8 %181 to i32
  %183 = load ptr, ptr %35, align 8, !tbaa !5
  %184 = getelementptr inbounds i8, ptr %183, i32 1
  store ptr %184, ptr %35, align 8, !tbaa !5
  %185 = load i8, ptr %183, align 1, !tbaa !13
  %186 = zext i8 %185 to i32
  %187 = xor i32 %186, %182
  %188 = trunc i32 %187 to i8
  store i8 %188, ptr %183, align 1, !tbaa !13
  %189 = load i32, ptr %37, align 4, !tbaa !11
  %190 = add i32 %189, -1
  store i32 %190, ptr %37, align 4, !tbaa !11
  br label %175, !llvm.loop !17

191:                                              ; preds = %175
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  br label %194

194:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %195 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %195, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %196 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %196, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %197 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  store ptr %197, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 8, ptr %41, align 4, !tbaa !11
  br label %198

198:                                              ; preds = %201, %194
  %199 = load i32, ptr %41, align 4, !tbaa !11
  %200 = icmp ugt i32 %199, 0
  br i1 %200, label %201, label %216

201:                                              ; preds = %198
  %202 = load ptr, ptr %39, align 8, !tbaa !5
  %203 = getelementptr inbounds i8, ptr %202, i32 1
  store ptr %203, ptr %39, align 8, !tbaa !5
  %204 = load i8, ptr %202, align 1, !tbaa !13
  %205 = zext i8 %204 to i32
  %206 = load ptr, ptr %40, align 8, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %206, i32 1
  store ptr %207, ptr %40, align 8, !tbaa !5
  %208 = load i8, ptr %206, align 1, !tbaa !13
  %209 = zext i8 %208 to i32
  %210 = xor i32 %205, %209
  %211 = trunc i32 %210 to i8
  %212 = load ptr, ptr %38, align 8, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %212, i32 1
  store ptr %213, ptr %38, align 8, !tbaa !5
  store i8 %211, ptr %212, align 1, !tbaa !13
  %214 = load i32, ptr %41, align 4, !tbaa !11
  %215 = add i32 %214, -1
  store i32 %215, ptr %41, align 4, !tbaa !11
  br label %198, !llvm.loop !18

216:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %217

217:                                              ; preds = %216
  br label %218

218:                                              ; preds = %217
  %219 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %220 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %219, ptr noundef %220, i16 noundef zeroext -19276)
  br label %221

221:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %222 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %222, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %223 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %223, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  store i32 8, ptr %44, align 4, !tbaa !11
  br label %224

224:                                              ; preds = %227, %221
  %225 = load i32, ptr %44, align 4, !tbaa !11
  %226 = icmp ugt i32 %225, 0
  br i1 %226, label %227, label %240

227:                                              ; preds = %224
  %228 = load ptr, ptr %43, align 8, !tbaa !5
  %229 = getelementptr inbounds i8, ptr %228, i32 1
  store ptr %229, ptr %43, align 8, !tbaa !5
  %230 = load i8, ptr %228, align 1, !tbaa !13
  %231 = zext i8 %230 to i32
  %232 = load ptr, ptr %42, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %232, i32 1
  store ptr %233, ptr %42, align 8, !tbaa !5
  %234 = load i8, ptr %232, align 1, !tbaa !13
  %235 = zext i8 %234 to i32
  %236 = xor i32 %235, %231
  %237 = trunc i32 %236 to i8
  store i8 %237, ptr %232, align 1, !tbaa !13
  %238 = load i32, ptr %44, align 4, !tbaa !11
  %239 = add i32 %238, -1
  store i32 %239, ptr %44, align 4, !tbaa !11
  br label %224, !llvm.loop !19

240:                                              ; preds = %224
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  %243 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %244 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %243, ptr noundef %244, i16 noundef zeroext -19276)
  br label %245

245:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %246 = load ptr, ptr %11, align 8, !tbaa !5
  %247 = getelementptr inbounds i8, ptr %246, i64 8
  store ptr %247, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %248 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  store ptr %248, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %249 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %249, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  store i32 8, ptr %48, align 4, !tbaa !11
  br label %250

250:                                              ; preds = %253, %245
  %251 = load i32, ptr %48, align 4, !tbaa !11
  %252 = icmp ugt i32 %251, 0
  br i1 %252, label %253, label %268

253:                                              ; preds = %250
  %254 = load ptr, ptr %46, align 8, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %254, i32 1
  store ptr %255, ptr %46, align 8, !tbaa !5
  %256 = load i8, ptr %254, align 1, !tbaa !13
  %257 = zext i8 %256 to i32
  %258 = load ptr, ptr %47, align 8, !tbaa !5
  %259 = getelementptr inbounds i8, ptr %258, i32 1
  store ptr %259, ptr %47, align 8, !tbaa !5
  %260 = load i8, ptr %258, align 1, !tbaa !13
  %261 = zext i8 %260 to i32
  %262 = xor i32 %257, %261
  %263 = trunc i32 %262 to i8
  %264 = load ptr, ptr %45, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i32 1
  store ptr %265, ptr %45, align 8, !tbaa !5
  store i8 %263, ptr %264, align 1, !tbaa !13
  %266 = load i32, ptr %48, align 4, !tbaa !11
  %267 = add i32 %266, -1
  store i32 %267, ptr %48, align 4, !tbaa !11
  br label %250, !llvm.loop !20

268:                                              ; preds = %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %14, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 16
  store ptr %272, ptr %14, align 8, !tbaa !5
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 16
  store ptr %274, ptr %11, align 8, !tbaa !5
  %275 = load i64, ptr %15, align 8, !tbaa !9
  %276 = sub i64 %275, 16
  store i64 %276, ptr %15, align 8, !tbaa !9
  br label %116, !llvm.loop !21

277:                                              ; preds = %116
  %278 = load i64, ptr %15, align 8, !tbaa !9
  %279 = trunc i64 %278 to i32
  store i32 %279, ptr %26, align 4, !tbaa !11
  call void @lotus_or_locus_mul_2(ptr noundef %20)
  %280 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  %281 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %280, ptr align 1 %281, i64 8, i1 false)
  %282 = load i32, ptr %26, align 4, !tbaa !11
  %283 = trunc i32 %282 to i8
  %284 = zext i8 %283 to i32
  %285 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  %286 = load i8, ptr %285, align 1, !tbaa !13
  %287 = zext i8 %286 to i32
  %288 = xor i32 %287, %284
  %289 = trunc i32 %288 to i8
  store i8 %289, ptr %285, align 1, !tbaa !13
  %290 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %291 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %290, ptr noundef %291, i16 noundef zeroext -13108)
  br label %292

292:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %293 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %293, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  %294 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %294, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  store i32 8, ptr %51, align 4, !tbaa !11
  br label %295

295:                                              ; preds = %298, %292
  %296 = load i32, ptr %51, align 4, !tbaa !11
  %297 = icmp ugt i32 %296, 0
  br i1 %297, label %298, label %311

298:                                              ; preds = %295
  %299 = load ptr, ptr %50, align 8, !tbaa !5
  %300 = getelementptr inbounds i8, ptr %299, i32 1
  store ptr %300, ptr %50, align 8, !tbaa !5
  %301 = load i8, ptr %299, align 1, !tbaa !13
  %302 = zext i8 %301 to i32
  %303 = load ptr, ptr %49, align 8, !tbaa !5
  %304 = getelementptr inbounds i8, ptr %303, i32 1
  store ptr %304, ptr %49, align 8, !tbaa !5
  %305 = load i8, ptr %303, align 1, !tbaa !13
  %306 = zext i8 %305 to i32
  %307 = xor i32 %306, %302
  %308 = trunc i32 %307 to i8
  store i8 %308, ptr %303, align 1, !tbaa !13
  %309 = load i32, ptr %51, align 4, !tbaa !11
  %310 = add i32 %309, -1
  store i32 %310, ptr %51, align 4, !tbaa !11
  br label %295, !llvm.loop !22

311:                                              ; preds = %295
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %312

312:                                              ; preds = %311
  br label %313

313:                                              ; preds = %312
  %314 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %315 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %314, ptr noundef %315, i16 noundef zeroext -13108)
  %316 = load i32, ptr %26, align 4, !tbaa !11
  %317 = icmp ule i32 %316, 8
  br i1 %317, label %318, label %414

318:                                              ; preds = %313
  br label %319

319:                                              ; preds = %318
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  %320 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %320, ptr %52, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  %321 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %321, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  %322 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %322, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  %323 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %323, ptr %55, align 4, !tbaa !11
  br label %324

324:                                              ; preds = %327, %319
  %325 = load i32, ptr %55, align 4, !tbaa !11
  %326 = icmp ugt i32 %325, 0
  br i1 %326, label %327, label %342

327:                                              ; preds = %324
  %328 = load ptr, ptr %53, align 8, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %328, i32 1
  store ptr %329, ptr %53, align 8, !tbaa !5
  %330 = load i8, ptr %328, align 1, !tbaa !13
  %331 = zext i8 %330 to i32
  %332 = load ptr, ptr %54, align 8, !tbaa !5
  %333 = getelementptr inbounds i8, ptr %332, i32 1
  store ptr %333, ptr %54, align 8, !tbaa !5
  %334 = load i8, ptr %332, align 1, !tbaa !13
  %335 = zext i8 %334 to i32
  %336 = xor i32 %331, %335
  %337 = trunc i32 %336 to i8
  %338 = load ptr, ptr %52, align 8, !tbaa !5
  %339 = getelementptr inbounds i8, ptr %338, i32 1
  store ptr %339, ptr %52, align 8, !tbaa !5
  store i8 %337, ptr %338, align 1, !tbaa !13
  %340 = load i32, ptr %55, align 4, !tbaa !11
  %341 = add i32 %340, -1
  store i32 %341, ptr %55, align 4, !tbaa !11
  br label %324, !llvm.loop !23

342:                                              ; preds = %324
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  br label %343

343:                                              ; preds = %342
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %346, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #6
  %347 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  store ptr %347, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %348 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %348, ptr %58, align 4, !tbaa !11
  br label %349

349:                                              ; preds = %352, %345
  %350 = load i32, ptr %58, align 4, !tbaa !11
  %351 = icmp ugt i32 %350, 0
  br i1 %351, label %352, label %365

352:                                              ; preds = %349
  %353 = load ptr, ptr %57, align 8, !tbaa !5
  %354 = getelementptr inbounds i8, ptr %353, i32 1
  store ptr %354, ptr %57, align 8, !tbaa !5
  %355 = load i8, ptr %353, align 1, !tbaa !13
  %356 = zext i8 %355 to i32
  %357 = load ptr, ptr %56, align 8, !tbaa !5
  %358 = getelementptr inbounds i8, ptr %357, i32 1
  store ptr %358, ptr %56, align 8, !tbaa !5
  %359 = load i8, ptr %357, align 1, !tbaa !13
  %360 = zext i8 %359 to i32
  %361 = xor i32 %360, %356
  %362 = trunc i32 %361 to i8
  store i8 %362, ptr %357, align 1, !tbaa !13
  %363 = load i32, ptr %58, align 4, !tbaa !11
  %364 = add i32 %363, -1
  store i32 %364, ptr %58, align 4, !tbaa !11
  br label %349, !llvm.loop !24

365:                                              ; preds = %349
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  br label %366

366:                                              ; preds = %365
  br label %367

367:                                              ; preds = %366
  br label %368

368:                                              ; preds = %367
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #6
  %369 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %369, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %370 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %370, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  %371 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %371, ptr %61, align 4, !tbaa !11
  br label %372

372:                                              ; preds = %375, %368
  %373 = load i32, ptr %61, align 4, !tbaa !11
  %374 = icmp ugt i32 %373, 0
  br i1 %374, label %375, label %388

375:                                              ; preds = %372
  %376 = load ptr, ptr %60, align 8, !tbaa !5
  %377 = getelementptr inbounds i8, ptr %376, i32 1
  store ptr %377, ptr %60, align 8, !tbaa !5
  %378 = load i8, ptr %376, align 1, !tbaa !13
  %379 = zext i8 %378 to i32
  %380 = load ptr, ptr %59, align 8, !tbaa !5
  %381 = getelementptr inbounds i8, ptr %380, i32 1
  store ptr %381, ptr %59, align 8, !tbaa !5
  %382 = load i8, ptr %380, align 1, !tbaa !13
  %383 = zext i8 %382 to i32
  %384 = xor i32 %383, %379
  %385 = trunc i32 %384 to i8
  store i8 %385, ptr %380, align 1, !tbaa !13
  %386 = load i32, ptr %61, align 4, !tbaa !11
  %387 = add i32 %386, -1
  store i32 %387, ptr %61, align 4, !tbaa !11
  br label %372, !llvm.loop !25

388:                                              ; preds = %372
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %389

389:                                              ; preds = %388
  br label %390

390:                                              ; preds = %389
  br label %391

391:                                              ; preds = %390
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %392 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %392, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  %393 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %393, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #6
  %394 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %394, ptr %64, align 4, !tbaa !11
  br label %395

395:                                              ; preds = %398, %391
  %396 = load i32, ptr %64, align 4, !tbaa !11
  %397 = icmp ugt i32 %396, 0
  br i1 %397, label %398, label %411

398:                                              ; preds = %395
  %399 = load ptr, ptr %63, align 8, !tbaa !5
  %400 = getelementptr inbounds i8, ptr %399, i32 1
  store ptr %400, ptr %63, align 8, !tbaa !5
  %401 = load i8, ptr %399, align 1, !tbaa !13
  %402 = zext i8 %401 to i32
  %403 = load ptr, ptr %62, align 8, !tbaa !5
  %404 = getelementptr inbounds i8, ptr %403, i32 1
  store ptr %404, ptr %62, align 8, !tbaa !5
  %405 = load i8, ptr %403, align 1, !tbaa !13
  %406 = zext i8 %405 to i32
  %407 = xor i32 %406, %402
  %408 = trunc i32 %407 to i8
  store i8 %408, ptr %403, align 1, !tbaa !13
  %409 = load i32, ptr %64, align 4, !tbaa !11
  %410 = add i32 %409, -1
  store i32 %410, ptr %64, align 4, !tbaa !11
  br label %395, !llvm.loop !26

411:                                              ; preds = %395
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  br label %412

412:                                              ; preds = %411
  br label %413

413:                                              ; preds = %412
  br label %588

414:                                              ; preds = %313
  br label %415

415:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #6
  %416 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %416, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  %417 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %417, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #6
  %418 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %418, ptr %67, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  store i32 8, ptr %68, align 4, !tbaa !11
  br label %419

419:                                              ; preds = %422, %415
  %420 = load i32, ptr %68, align 4, !tbaa !11
  %421 = icmp ugt i32 %420, 0
  br i1 %421, label %422, label %437

422:                                              ; preds = %419
  %423 = load ptr, ptr %66, align 8, !tbaa !5
  %424 = getelementptr inbounds i8, ptr %423, i32 1
  store ptr %424, ptr %66, align 8, !tbaa !5
  %425 = load i8, ptr %423, align 1, !tbaa !13
  %426 = zext i8 %425 to i32
  %427 = load ptr, ptr %67, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i32 1
  store ptr %428, ptr %67, align 8, !tbaa !5
  %429 = load i8, ptr %427, align 1, !tbaa !13
  %430 = zext i8 %429 to i32
  %431 = xor i32 %426, %430
  %432 = trunc i32 %431 to i8
  %433 = load ptr, ptr %65, align 8, !tbaa !5
  %434 = getelementptr inbounds i8, ptr %433, i32 1
  store ptr %434, ptr %65, align 8, !tbaa !5
  store i8 %432, ptr %433, align 1, !tbaa !13
  %435 = load i32, ptr %68, align 4, !tbaa !11
  %436 = add i32 %435, -1
  store i32 %436, ptr %68, align 4, !tbaa !11
  br label %419, !llvm.loop !27

437:                                              ; preds = %419
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %438

438:                                              ; preds = %437
  br label %439

439:                                              ; preds = %438
  br label %440

440:                                              ; preds = %439
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #6
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %441, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #6
  %442 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  store ptr %442, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #6
  store i32 8, ptr %71, align 4, !tbaa !11
  br label %443

443:                                              ; preds = %446, %440
  %444 = load i32, ptr %71, align 4, !tbaa !11
  %445 = icmp ugt i32 %444, 0
  br i1 %445, label %446, label %459

446:                                              ; preds = %443
  %447 = load ptr, ptr %70, align 8, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %447, i32 1
  store ptr %448, ptr %70, align 8, !tbaa !5
  %449 = load i8, ptr %447, align 1, !tbaa !13
  %450 = zext i8 %449 to i32
  %451 = load ptr, ptr %69, align 8, !tbaa !5
  %452 = getelementptr inbounds i8, ptr %451, i32 1
  store ptr %452, ptr %69, align 8, !tbaa !5
  %453 = load i8, ptr %451, align 1, !tbaa !13
  %454 = zext i8 %453 to i32
  %455 = xor i32 %454, %450
  %456 = trunc i32 %455 to i8
  store i8 %456, ptr %451, align 1, !tbaa !13
  %457 = load i32, ptr %71, align 4, !tbaa !11
  %458 = add i32 %457, -1
  store i32 %458, ptr %71, align 4, !tbaa !11
  br label %443, !llvm.loop !28

459:                                              ; preds = %443
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  br label %460

460:                                              ; preds = %459
  br label %461

461:                                              ; preds = %460
  br label %462

462:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #6
  %463 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %463, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #6
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %464, ptr %73, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #6
  store i32 8, ptr %74, align 4, !tbaa !11
  br label %465

465:                                              ; preds = %468, %462
  %466 = load i32, ptr %74, align 4, !tbaa !11
  %467 = icmp ugt i32 %466, 0
  br i1 %467, label %468, label %481

468:                                              ; preds = %465
  %469 = load ptr, ptr %73, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i32 1
  store ptr %470, ptr %73, align 8, !tbaa !5
  %471 = load i8, ptr %469, align 1, !tbaa !13
  %472 = zext i8 %471 to i32
  %473 = load ptr, ptr %72, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i32 1
  store ptr %474, ptr %72, align 8, !tbaa !5
  %475 = load i8, ptr %473, align 1, !tbaa !13
  %476 = zext i8 %475 to i32
  %477 = xor i32 %476, %472
  %478 = trunc i32 %477 to i8
  store i8 %478, ptr %473, align 1, !tbaa !13
  %479 = load i32, ptr %74, align 4, !tbaa !11
  %480 = add i32 %479, -1
  store i32 %480, ptr %74, align 4, !tbaa !11
  br label %465, !llvm.loop !29

481:                                              ; preds = %465
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #6
  br label %482

482:                                              ; preds = %481
  br label %483

483:                                              ; preds = %482
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = getelementptr inbounds i8, ptr %484, i64 8
  store ptr %485, ptr %14, align 8, !tbaa !5
  %486 = load ptr, ptr %11, align 8, !tbaa !5
  %487 = getelementptr inbounds i8, ptr %486, i64 8
  store ptr %487, ptr %11, align 8, !tbaa !5
  %488 = load i32, ptr %26, align 4, !tbaa !11
  %489 = sub i32 %488, 8
  store i32 %489, ptr %26, align 4, !tbaa !11
  %490 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %491 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %490, ptr noundef %491, i16 noundef zeroext 11565)
  br label %492

492:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #6
  %493 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %493, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #6
  %494 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %494, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #6
  store i32 8, ptr %77, align 4, !tbaa !11
  br label %495

495:                                              ; preds = %498, %492
  %496 = load i32, ptr %77, align 4, !tbaa !11
  %497 = icmp ugt i32 %496, 0
  br i1 %497, label %498, label %511

498:                                              ; preds = %495
  %499 = load ptr, ptr %76, align 8, !tbaa !5
  %500 = getelementptr inbounds i8, ptr %499, i32 1
  store ptr %500, ptr %76, align 8, !tbaa !5
  %501 = load i8, ptr %499, align 1, !tbaa !13
  %502 = zext i8 %501 to i32
  %503 = load ptr, ptr %75, align 8, !tbaa !5
  %504 = getelementptr inbounds i8, ptr %503, i32 1
  store ptr %504, ptr %75, align 8, !tbaa !5
  %505 = load i8, ptr %503, align 1, !tbaa !13
  %506 = zext i8 %505 to i32
  %507 = xor i32 %506, %502
  %508 = trunc i32 %507 to i8
  store i8 %508, ptr %503, align 1, !tbaa !13
  %509 = load i32, ptr %77, align 4, !tbaa !11
  %510 = add i32 %509, -1
  store i32 %510, ptr %77, align 4, !tbaa !11
  br label %495, !llvm.loop !30

511:                                              ; preds = %495
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #6
  br label %512

512:                                              ; preds = %511
  br label %513

513:                                              ; preds = %512
  %514 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  %515 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  call void @gift64t_encrypt(ptr noundef %20, ptr noundef %514, ptr noundef %515, i16 noundef zeroext 11565)
  br label %516

516:                                              ; preds = %513
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #6
  %517 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  store ptr %517, ptr %78, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #6
  %518 = getelementptr inbounds [8 x i8], ptr %24, i64 0, i64 0
  store ptr %518, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #6
  %519 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %519, ptr %80, align 4, !tbaa !11
  br label %520

520:                                              ; preds = %523, %516
  %521 = load i32, ptr %80, align 4, !tbaa !11
  %522 = icmp ugt i32 %521, 0
  br i1 %522, label %523, label %536

523:                                              ; preds = %520
  %524 = load ptr, ptr %79, align 8, !tbaa !5
  %525 = getelementptr inbounds i8, ptr %524, i32 1
  store ptr %525, ptr %79, align 8, !tbaa !5
  %526 = load i8, ptr %524, align 1, !tbaa !13
  %527 = zext i8 %526 to i32
  %528 = load ptr, ptr %78, align 8, !tbaa !5
  %529 = getelementptr inbounds i8, ptr %528, i32 1
  store ptr %529, ptr %78, align 8, !tbaa !5
  %530 = load i8, ptr %528, align 1, !tbaa !13
  %531 = zext i8 %530 to i32
  %532 = xor i32 %531, %527
  %533 = trunc i32 %532 to i8
  store i8 %533, ptr %528, align 1, !tbaa !13
  %534 = load i32, ptr %80, align 4, !tbaa !11
  %535 = add i32 %534, -1
  store i32 %535, ptr %80, align 4, !tbaa !11
  br label %520, !llvm.loop !31

536:                                              ; preds = %520
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #6
  br label %537

537:                                              ; preds = %536
  br label %538

538:                                              ; preds = %537
  br label %539

539:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #6
  %540 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %540, ptr %81, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #6
  %541 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  store ptr %541, ptr %82, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #6
  %542 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %542, ptr %83, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #6
  %543 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %543, ptr %84, align 4, !tbaa !11
  br label %544

544:                                              ; preds = %547, %539
  %545 = load i32, ptr %84, align 4, !tbaa !11
  %546 = icmp ugt i32 %545, 0
  br i1 %546, label %547, label %562

547:                                              ; preds = %544
  %548 = load ptr, ptr %82, align 8, !tbaa !5
  %549 = getelementptr inbounds i8, ptr %548, i32 1
  store ptr %549, ptr %82, align 8, !tbaa !5
  %550 = load i8, ptr %548, align 1, !tbaa !13
  %551 = zext i8 %550 to i32
  %552 = load ptr, ptr %83, align 8, !tbaa !5
  %553 = getelementptr inbounds i8, ptr %552, i32 1
  store ptr %553, ptr %83, align 8, !tbaa !5
  %554 = load i8, ptr %552, align 1, !tbaa !13
  %555 = zext i8 %554 to i32
  %556 = xor i32 %551, %555
  %557 = trunc i32 %556 to i8
  %558 = load ptr, ptr %81, align 8, !tbaa !5
  %559 = getelementptr inbounds i8, ptr %558, i32 1
  store ptr %559, ptr %81, align 8, !tbaa !5
  store i8 %557, ptr %558, align 1, !tbaa !13
  %560 = load i32, ptr %84, align 4, !tbaa !11
  %561 = add i32 %560, -1
  store i32 %561, ptr %84, align 4, !tbaa !11
  br label %544, !llvm.loop !32

562:                                              ; preds = %544
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #6
  br label %563

563:                                              ; preds = %562
  br label %564

564:                                              ; preds = %563
  br label %565

565:                                              ; preds = %564
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #6
  %566 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  store ptr %566, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #6
  %567 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %567, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #6
  %568 = load i32, ptr %26, align 4, !tbaa !11
  store i32 %568, ptr %87, align 4, !tbaa !11
  br label %569

569:                                              ; preds = %572, %565
  %570 = load i32, ptr %87, align 4, !tbaa !11
  %571 = icmp ugt i32 %570, 0
  br i1 %571, label %572, label %585

572:                                              ; preds = %569
  %573 = load ptr, ptr %86, align 8, !tbaa !5
  %574 = getelementptr inbounds i8, ptr %573, i32 1
  store ptr %574, ptr %86, align 8, !tbaa !5
  %575 = load i8, ptr %573, align 1, !tbaa !13
  %576 = zext i8 %575 to i32
  %577 = load ptr, ptr %85, align 8, !tbaa !5
  %578 = getelementptr inbounds i8, ptr %577, i32 1
  store ptr %578, ptr %85, align 8, !tbaa !5
  %579 = load i8, ptr %577, align 1, !tbaa !13
  %580 = zext i8 %579 to i32
  %581 = xor i32 %580, %576
  %582 = trunc i32 %581 to i8
  store i8 %582, ptr %577, align 1, !tbaa !13
  %583 = load i32, ptr %87, align 4, !tbaa !11
  %584 = add i32 %583, -1
  store i32 %584, ptr %87, align 4, !tbaa !11
  br label %569, !llvm.loop !33

585:                                              ; preds = %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #6
  br label %586

586:                                              ; preds = %585
  br label %587

587:                                              ; preds = %586
  br label %588

588:                                              ; preds = %587, %413
  %589 = load i32, ptr %26, align 4, !tbaa !11
  %590 = load ptr, ptr %14, align 8, !tbaa !5
  %591 = zext i32 %589 to i64
  %592 = getelementptr inbounds i8, ptr %590, i64 %591
  store ptr %592, ptr %14, align 8, !tbaa !5
  br label %593

593:                                              ; preds = %588, %110
  %594 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  %595 = getelementptr inbounds [8 x i8], ptr %22, i64 0, i64 0
  %596 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  %597 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  %598 = getelementptr inbounds i8, ptr %597, i64 8
  call void @lotus_or_locus_gen_tag(ptr noundef %20, ptr noundef %594, ptr noundef %595, ptr noundef %596, ptr noundef %598)
  %599 = load ptr, ptr %25, align 8, !tbaa !5
  %600 = load ptr, ptr %12, align 8, !tbaa !5
  %601 = load i64, ptr %600, align 8, !tbaa !9
  %602 = getelementptr inbounds [16 x i8], ptr %21, i64 0, i64 0
  %603 = load ptr, ptr %14, align 8, !tbaa !5
  %604 = call i32 @aead_check_tag(ptr noundef %599, i64 noundef %601, ptr noundef %602, ptr noundef %603, i32 noundef 8)
  store i32 %604, ptr %10, align 4
  store i32 1, ptr %27, align 4
  br label %605

605:                                              ; preds = %593, %92
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %20) #6
  %606 = load i32, ptr %10, align 4
  ret i32 %606
}

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

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_process_ad(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @lotus_or_locus_mul_2(ptr noundef) #3

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

declare void @gift64t_encrypt(ptr noundef, ptr noundef, ptr noundef, i16 noundef zeroext) #4

; 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) #5

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_gen_tag(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @aead_check_tag(ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = distinct !{!17, !15}
!18 = distinct !{!18, !15}
!19 = distinct !{!19, !15}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}
!24 = distinct !{!24, !15}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = distinct !{!30, !15}
!31 = distinct !{!31, !15}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}


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

%struct.gift64n_key_schedule_t = type { [4 x i32], [8 x i32] }

; Function Attrs: nounwind uwtable
define dso_local i32 @lotus_aead_decrypt(ptr noundef %0, ptr nocapture noundef %1, ptr nocapture noundef readnone %2, ptr noundef %3, i64 noundef %4, ptr noundef %5, i64 noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #0 {
  %10 = alloca %struct.gift64n_key_schedule_t, align 4
  %11 = alloca [16 x i8], align 16
  %12 = alloca [8 x i8], align 8
  %13 = alloca [8 x i8], align 8
  %14 = ptrtoint ptr %13 to i64
  %15 = alloca [8 x i8], align 8
  %16 = ptrtoint ptr %15 to i64
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %17 = icmp ult i64 %4, 8
  br i1 %17, label %434, label %18

18:                                               ; preds = %9
  %19 = add i64 %4, -8
  store i64 %19, ptr %1, align 8, !tbaa !5
  call void @lotus_or_locus_init(ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef %8, ptr noundef %7, ptr noundef nonnull %11)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %11, i8 0, i64 16, i1 false)
  %.not = icmp eq i64 %6, 0
  br i1 %.not, label %22, label %20

20:                                               ; preds = %18
  %21 = getelementptr inbounds i8, ptr %11, i64 8
  call void @lotus_or_locus_process_ad(ptr noundef nonnull %10, ptr noundef nonnull %12, ptr noundef nonnull %21, ptr noundef %5, i64 noundef %6)
  br label %22

22:                                               ; preds = %20, %18
  %.not197 = icmp eq i64 %19, 0
  br i1 %.not197, label %430, label %.preheader226

.preheader226:                                    ; preds = %22
  %23 = icmp ugt i64 %19, 16
  br i1 %23, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader226, %.lr.ph
  %.0189250 = phi ptr [ %44, %.lr.ph ], [ %0, %.preheader226 ]
  %.0190249 = phi ptr [ %43, %.lr.ph ], [ %3, %.preheader226 ]
  %.0191248 = phi i64 [ %45, %.lr.ph ], [ %19, %.preheader226 ]
  call void @lotus_or_locus_mul_2(ptr noundef nonnull %10)
  %24 = load <8 x i8>, ptr %.0190249, align 1, !tbaa !9
  %25 = load <8 x i8>, ptr %12, align 8, !tbaa !9
  %26 = xor <8 x i8> %25, %24
  store <8 x i8> %26, ptr %13, align 8, !tbaa !9
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %13, i16 noundef zeroext 21845) #5
  %27 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %28 = load <8 x i8>, ptr %11, align 16, !tbaa !9
  %29 = xor <8 x i8> %28, %27
  store <8 x i8> %29, ptr %11, align 16, !tbaa !9
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext 21845) #5
  %30 = getelementptr inbounds i8, ptr %.0190249, i64 8
  %31 = load <8 x i8>, ptr %30, align 1, !tbaa !9
  %32 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %33 = xor <8 x i8> %32, %31
  store <8 x i8> %33, ptr %15, align 8, !tbaa !9
  %34 = load <8 x i8>, ptr %12, align 8, !tbaa !9
  %35 = xor <8 x i8> %34, %33
  store <8 x i8> %35, ptr %.0189250, align 1, !tbaa !9
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext -19276) #5
  %36 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %37 = load <8 x i8>, ptr %11, align 16, !tbaa !9
  %38 = xor <8 x i8> %37, %36
  store <8 x i8> %38, ptr %11, align 16, !tbaa !9
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext -19276) #5
  %39 = getelementptr inbounds i8, ptr %.0189250, i64 8
  %40 = load <8 x i8>, ptr %13, align 8, !tbaa !9
  %41 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %42 = xor <8 x i8> %41, %40
  store <8 x i8> %42, ptr %39, align 1, !tbaa !9
  %43 = getelementptr inbounds i8, ptr %.0190249, i64 16
  %44 = getelementptr inbounds i8, ptr %.0189250, i64 16
  %45 = add i64 %.0191248, -16
  %46 = icmp ugt i64 %45, 16
  br i1 %46, label %.lr.ph, label %._crit_edge, !llvm.loop !10

._crit_edge:                                      ; preds = %.lr.ph, %.preheader226
  %.0191.lcssa = phi i64 [ %19, %.preheader226 ], [ %45, %.lr.ph ]
  %.0190.lcssa = phi ptr [ %3, %.preheader226 ], [ %43, %.lr.ph ]
  %.0189.lcssa = phi ptr [ %0, %.preheader226 ], [ %44, %.lr.ph ]
  %.0190.lcssa455 = ptrtoint ptr %.0190.lcssa to i64
  %.0189.lcssa344 = ptrtoint ptr %.0189.lcssa to i64
  %.0190.lcssa345 = ptrtoint ptr %.0190.lcssa to i64
  call void @lotus_or_locus_mul_2(ptr noundef nonnull %10)
  %47 = load i64, ptr %12, align 8
  store i64 %47, ptr %13, align 8
  %48 = xor i64 %47, %.0191.lcssa
  %49 = trunc i64 %48 to i8
  store i8 %49, ptr %13, align 8, !tbaa !9
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %13, i16 noundef zeroext -13108) #5
  %50 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %51 = load <8 x i8>, ptr %11, align 16, !tbaa !9
  %52 = xor <8 x i8> %51, %50
  store <8 x i8> %52, ptr %11, align 16, !tbaa !9
  %53 = trunc nuw i64 %.0191.lcssa to i32
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext -13108) #5
  %54 = icmp ult i64 %.0191.lcssa, 9
  br i1 %54, label %iter.check461, label %.preheader224.preheader

iter.check461:                                    ; preds = %._crit_edge
  %55 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %56 = and i64 %55, 4294967295
  %57 = add nuw nsw i64 %56, 1
  %min.iters.check459 = icmp ult i64 %56, 7
  br i1 %min.iters.check459, label %.lr.ph291.preheader, label %vector.memcheck453

vector.memcheck453:                               ; preds = %iter.check461
  %58 = sub i64 %.0189.lcssa344, %16
  %diff.check454 = icmp ult i64 %58, 32
  %59 = sub i64 %.0189.lcssa344, %.0190.lcssa455
  %diff.check456 = icmp ult i64 %59, 32
  %conflict.rdx457 = or i1 %diff.check454, %diff.check456
  br i1 %conflict.rdx457, label %.lr.ph291.preheader, label %vector.main.loop.iter.check463

vector.main.loop.iter.check463:                   ; preds = %vector.memcheck453
  %min.iters.check462 = icmp ult i64 %56, 31
  br i1 %min.iters.check462, label %vec.epilog.ph483, label %vector.ph464

vector.ph464:                                     ; preds = %vector.main.loop.iter.check463
  %n.vec466 = and i64 %57, 8589934560
  br label %vector.body467

vector.body467:                                   ; preds = %vector.body467, %vector.ph464
  %index468 = phi i64 [ 0, %vector.ph464 ], [ %index.next479, %vector.body467 ]
  %next.gep469 = getelementptr i8, ptr %.0190.lcssa, i64 %index468
  %next.gep471 = getelementptr i8, ptr %15, i64 %index468
  %next.gep473 = getelementptr i8, ptr %.0189.lcssa, i64 %index468
  %60 = getelementptr i8, ptr %next.gep471, i64 16
  %wide.load475 = load <16 x i8>, ptr %next.gep471, align 8, !tbaa !9
  %wide.load476 = load <16 x i8>, ptr %60, align 8, !tbaa !9
  %61 = getelementptr i8, ptr %next.gep469, i64 16
  %wide.load477 = load <16 x i8>, ptr %next.gep469, align 1, !tbaa !9
  %wide.load478 = load <16 x i8>, ptr %61, align 1, !tbaa !9
  %62 = xor <16 x i8> %wide.load477, %wide.load475
  %63 = xor <16 x i8> %wide.load478, %wide.load476
  %64 = getelementptr i8, ptr %next.gep473, i64 16
  store <16 x i8> %62, ptr %next.gep473, align 1, !tbaa !9
  store <16 x i8> %63, ptr %64, align 1, !tbaa !9
  %index.next479 = add nuw i64 %index468, 32
  %65 = icmp eq i64 %index.next479, %n.vec466
  br i1 %65, label %middle.block458, label %vector.body467, !llvm.loop !12

middle.block458:                                  ; preds = %vector.body467
  %cmp.n480 = icmp eq i64 %57, %n.vec466
  br i1 %cmp.n480, label %iter.check522, label %vec.epilog.iter.check484

vec.epilog.iter.check484:                         ; preds = %middle.block458
  %ind.end502 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec466
  %ind.end499 = getelementptr i8, ptr %15, i64 %n.vec466
  %ind.end496 = getelementptr i8, ptr %.0190.lcssa, i64 %n.vec466
  %.cast492 = trunc i64 %n.vec466 to i32
  %ind.end493 = sub i32 %53, %.cast492
  %n.vec.remaining485 = and i64 %57, 24
  %min.epilog.iters.check486 = icmp eq i64 %n.vec.remaining485, 0
  br i1 %min.epilog.iters.check486, label %.lr.ph291.preheader, label %vec.epilog.ph483

.lr.ph291.preheader:                              ; preds = %vec.epilog.middle.block481, %vector.memcheck453, %iter.check461, %vec.epilog.iter.check484
  %.0159290.ph = phi i32 [ %53, %iter.check461 ], [ %53, %vector.memcheck453 ], [ %ind.end493, %vec.epilog.iter.check484 ], [ %ind.end491, %vec.epilog.middle.block481 ]
  %.0160289.ph = phi ptr [ %.0190.lcssa, %iter.check461 ], [ %.0190.lcssa, %vector.memcheck453 ], [ %ind.end496, %vec.epilog.iter.check484 ], [ %ind.end495, %vec.epilog.middle.block481 ]
  %.0161288.ph = phi ptr [ %15, %iter.check461 ], [ %15, %vector.memcheck453 ], [ %ind.end499, %vec.epilog.iter.check484 ], [ %ind.end498, %vec.epilog.middle.block481 ]
  %.0162287.ph = phi ptr [ %.0189.lcssa, %iter.check461 ], [ %.0189.lcssa, %vector.memcheck453 ], [ %ind.end502, %vec.epilog.iter.check484 ], [ %ind.end501, %vec.epilog.middle.block481 ]
  %66 = add nsw i32 %.0159290.ph, -1
  %xtraiter684 = and i32 %.0159290.ph, 3
  %lcmp.mod685.not = icmp eq i32 %xtraiter684, 0
  br i1 %lcmp.mod685.not, label %.lr.ph291.prol.loopexit, label %.lr.ph291.prol

.lr.ph291.prol:                                   ; preds = %.lr.ph291.preheader, %.lr.ph291.prol
  %.0159290.prol = phi i32 [ %73, %.lr.ph291.prol ], [ %.0159290.ph, %.lr.ph291.preheader ]
  %.0160289.prol = phi ptr [ %69, %.lr.ph291.prol ], [ %.0160289.ph, %.lr.ph291.preheader ]
  %.0161288.prol = phi ptr [ %67, %.lr.ph291.prol ], [ %.0161288.ph, %.lr.ph291.preheader ]
  %.0162287.prol = phi ptr [ %72, %.lr.ph291.prol ], [ %.0162287.ph, %.lr.ph291.preheader ]
  %prol.iter686 = phi i32 [ %prol.iter686.next, %.lr.ph291.prol ], [ 0, %.lr.ph291.preheader ]
  %67 = getelementptr inbounds i8, ptr %.0161288.prol, i64 1
  %68 = load i8, ptr %.0161288.prol, align 1, !tbaa !9
  %69 = getelementptr inbounds i8, ptr %.0160289.prol, i64 1
  %70 = load i8, ptr %.0160289.prol, align 1, !tbaa !9
  %71 = xor i8 %70, %68
  %72 = getelementptr inbounds i8, ptr %.0162287.prol, i64 1
  store i8 %71, ptr %.0162287.prol, align 1, !tbaa !9
  %73 = add nsw i32 %.0159290.prol, -1
  %prol.iter686.next = add i32 %prol.iter686, 1
  %prol.iter686.cmp.not = icmp eq i32 %prol.iter686.next, %xtraiter684
  br i1 %prol.iter686.cmp.not, label %.lr.ph291.prol.loopexit, label %.lr.ph291.prol, !llvm.loop !15

.lr.ph291.prol.loopexit:                          ; preds = %.lr.ph291.prol, %.lr.ph291.preheader
  %.0159290.unr = phi i32 [ %.0159290.ph, %.lr.ph291.preheader ], [ %73, %.lr.ph291.prol ]
  %.0160289.unr = phi ptr [ %.0160289.ph, %.lr.ph291.preheader ], [ %69, %.lr.ph291.prol ]
  %.0161288.unr = phi ptr [ %.0161288.ph, %.lr.ph291.preheader ], [ %67, %.lr.ph291.prol ]
  %.0162287.unr = phi ptr [ %.0162287.ph, %.lr.ph291.preheader ], [ %72, %.lr.ph291.prol ]
  %74 = icmp ult i32 %66, 3
  br i1 %74, label %iter.check522, label %.lr.ph291

vec.epilog.ph483:                                 ; preds = %vector.main.loop.iter.check463, %vec.epilog.iter.check484
  %vec.epilog.resume.val487 = phi i64 [ %n.vec466, %vec.epilog.iter.check484 ], [ 0, %vector.main.loop.iter.check463 ]
  %n.vec489 = and i64 %57, 8589934584
  %.cast490 = trunc i64 %n.vec489 to i32
  %ind.end491 = sub i32 %53, %.cast490
  %ind.end495 = getelementptr i8, ptr %.0190.lcssa, i64 %n.vec489
  %ind.end498 = getelementptr i8, ptr %15, i64 %n.vec489
  %ind.end501 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec489
  br label %vec.epilog.vector.body504

vec.epilog.vector.body504:                        ; preds = %vec.epilog.vector.body504, %vec.epilog.ph483
  %index505 = phi i64 [ %vec.epilog.resume.val487, %vec.epilog.ph483 ], [ %index.next511, %vec.epilog.vector.body504 ]
  %next.gep506 = getelementptr i8, ptr %.0190.lcssa, i64 %index505
  %next.gep507 = getelementptr i8, ptr %15, i64 %index505
  %next.gep508 = getelementptr i8, ptr %.0189.lcssa, i64 %index505
  %wide.load509 = load <8 x i8>, ptr %next.gep507, align 8, !tbaa !9
  %wide.load510 = load <8 x i8>, ptr %next.gep506, align 1, !tbaa !9
  %75 = xor <8 x i8> %wide.load510, %wide.load509
  store <8 x i8> %75, ptr %next.gep508, align 1, !tbaa !9
  %index.next511 = add nuw i64 %index505, 8
  %76 = icmp eq i64 %index.next511, %n.vec489
  br i1 %76, label %vec.epilog.middle.block481, label %vec.epilog.vector.body504, !llvm.loop !17

vec.epilog.middle.block481:                       ; preds = %vec.epilog.vector.body504
  %cmp.n512 = icmp eq i64 %57, %n.vec489
  br i1 %cmp.n512, label %iter.check522, label %.lr.ph291.preheader

.preheader224.preheader:                          ; preds = %._crit_edge
  %77 = getelementptr inbounds i8, ptr %15, i64 7
  %78 = getelementptr inbounds i8, ptr %15, i64 6
  %79 = getelementptr inbounds i8, ptr %15, i64 5
  %80 = getelementptr inbounds i8, ptr %15, i64 4
  %81 = getelementptr inbounds i8, ptr %15, i64 3
  %82 = getelementptr inbounds i8, ptr %15, i64 2
  %83 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 1
  %84 = load i8, ptr %.0190.lcssa, align 1, !tbaa !9
  %85 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 1
  %86 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 2
  %87 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 2
  %88 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 3
  %89 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 3
  %90 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 4
  %91 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 4
  %92 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 5
  %93 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 5
  %94 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 6
  %95 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 6
  %96 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 7
  %97 = getelementptr inbounds i8, ptr %.0189.lcssa, i64 7
  %98 = getelementptr inbounds i8, ptr %12, i64 1
  %99 = getelementptr inbounds i8, ptr %12, i64 2
  %100 = getelementptr inbounds i8, ptr %12, i64 3
  %101 = getelementptr inbounds i8, ptr %12, i64 4
  %102 = getelementptr inbounds i8, ptr %12, i64 5
  %103 = getelementptr inbounds i8, ptr %12, i64 6
  %104 = getelementptr inbounds i8, ptr %12, i64 7
  %105 = load <2 x i8>, ptr %15, align 8, !tbaa !9
  %106 = extractelement <2 x i8> %105, i64 0
  %107 = xor i8 %84, %106
  store i8 %107, ptr %.0189.lcssa, align 1, !tbaa !9
  %108 = load i8, ptr %83, align 1, !tbaa !9
  %109 = extractelement <2 x i8> %105, i64 1
  %110 = xor i8 %108, %109
  store i8 %110, ptr %85, align 1, !tbaa !9
  %111 = load i8, ptr %82, align 2, !tbaa !9
  %112 = load i8, ptr %86, align 1, !tbaa !9
  %113 = xor i8 %112, %111
  store i8 %113, ptr %87, align 1, !tbaa !9
  %114 = load i8, ptr %81, align 1, !tbaa !9
  %115 = load i8, ptr %88, align 1, !tbaa !9
  %116 = xor i8 %115, %114
  store i8 %116, ptr %89, align 1, !tbaa !9
  %117 = load i8, ptr %80, align 4, !tbaa !9
  %118 = load i8, ptr %90, align 1, !tbaa !9
  %119 = xor i8 %118, %117
  store i8 %119, ptr %91, align 1, !tbaa !9
  %120 = load i8, ptr %79, align 1, !tbaa !9
  %121 = load i8, ptr %92, align 1, !tbaa !9
  %122 = xor i8 %121, %120
  store i8 %122, ptr %93, align 1, !tbaa !9
  %123 = load i8, ptr %78, align 2, !tbaa !9
  %124 = load i8, ptr %94, align 1, !tbaa !9
  %125 = xor i8 %124, %123
  store i8 %125, ptr %95, align 1, !tbaa !9
  %126 = load i8, ptr %77, align 1, !tbaa !9
  %127 = load i8, ptr %96, align 1, !tbaa !9
  %128 = xor i8 %127, %126
  store i8 %128, ptr %97, align 1, !tbaa !9
  %129 = load i8, ptr %12, align 8, !tbaa !9
  %130 = load i8, ptr %.0189.lcssa, align 1, !tbaa !9
  %131 = xor i8 %130, %129
  store i8 %131, ptr %.0189.lcssa, align 1, !tbaa !9
  %132 = load i8, ptr %98, align 1, !tbaa !9
  %133 = load i8, ptr %85, align 1, !tbaa !9
  %134 = xor i8 %133, %132
  store i8 %134, ptr %85, align 1, !tbaa !9
  %135 = load i8, ptr %99, align 2, !tbaa !9
  %136 = load i8, ptr %87, align 1, !tbaa !9
  %137 = xor i8 %136, %135
  store i8 %137, ptr %87, align 1, !tbaa !9
  %138 = load i8, ptr %100, align 1, !tbaa !9
  %139 = load i8, ptr %89, align 1, !tbaa !9
  %140 = xor i8 %139, %138
  store i8 %140, ptr %89, align 1, !tbaa !9
  %141 = load i8, ptr %101, align 4, !tbaa !9
  %142 = load i8, ptr %91, align 1, !tbaa !9
  %143 = xor i8 %142, %141
  store i8 %143, ptr %91, align 1, !tbaa !9
  %144 = load i8, ptr %102, align 1, !tbaa !9
  %145 = load i8, ptr %93, align 1, !tbaa !9
  %146 = xor i8 %145, %144
  store i8 %146, ptr %93, align 1, !tbaa !9
  %147 = load i8, ptr %103, align 2, !tbaa !9
  %148 = xor i8 %125, %147
  store i8 %148, ptr %95, align 1, !tbaa !9
  %149 = load i8, ptr %104, align 1, !tbaa !9
  %150 = load i8, ptr %97, align 1, !tbaa !9
  %151 = xor i8 %150, %149
  store i8 %151, ptr %97, align 1, !tbaa !9
  %152 = load <4 x i8>, ptr %.0189.lcssa, align 1, !tbaa !9
  %153 = load <4 x i8>, ptr %82, align 2
  %154 = shufflevector <2 x i8> %105, <2 x i8> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
  %155 = shufflevector <4 x i8> %154, <4 x i8> %153, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
  %156 = xor <4 x i8> %155, %152
  store <4 x i8> %156, ptr %15, align 8, !tbaa !9
  %157 = load i8, ptr %91, align 1, !tbaa !9
  %158 = load i8, ptr %80, align 4, !tbaa !9
  %159 = xor i8 %158, %157
  store i8 %159, ptr %80, align 4, !tbaa !9
  %160 = load i8, ptr %93, align 1, !tbaa !9
  %161 = load i8, ptr %79, align 1, !tbaa !9
  %162 = xor i8 %161, %160
  store i8 %162, ptr %79, align 1, !tbaa !9
  %163 = load i8, ptr %78, align 2, !tbaa !9
  %164 = xor i8 %163, %148
  store i8 %164, ptr %78, align 2, !tbaa !9
  %165 = xor i8 %126, %151
  store i8 %165, ptr %77, align 1, !tbaa !9
  %166 = getelementptr i8, ptr %.0189.lcssa, i64 8
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext 11565) #5
  %167 = load <8 x i8>, ptr %15, align 8, !tbaa !9
  %168 = load <8 x i8>, ptr %11, align 16, !tbaa !9
  %169 = xor <8 x i8> %168, %167
  store <8 x i8> %169, ptr %11, align 16, !tbaa !9
  %170 = getelementptr inbounds i8, ptr %.0190.lcssa, i64 8
  %171 = add nsw i32 %53, -8
  call void @gift64t_encrypt(ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %15, i16 noundef zeroext 11565) #5
  %cond309 = icmp eq i32 %171, 0
  br i1 %cond309, label %.loopexit, label %iter.check

iter.check:                                       ; preds = %.preheader224.preheader
  %172 = zext i32 %171 to i64
  %min.iters.check = icmp ult i32 %171, 8
  br i1 %min.iters.check, label %.lr.ph274.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  %min.iters.check320 = icmp ult i32 %171, 32
  br i1 %min.iters.check320, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %172, 4294967264
  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 %15, i64 %index
  %next.gep322 = getelementptr i8, ptr %13, i64 %index
  %173 = getelementptr i8, ptr %next.gep, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep, align 8, !tbaa !9
  %wide.load324 = load <16 x i8>, ptr %173, align 8, !tbaa !9
  %174 = getelementptr i8, ptr %next.gep322, i64 16
  %wide.load325 = load <16 x i8>, ptr %next.gep322, align 8, !tbaa !9
  %wide.load326 = load <16 x i8>, ptr %174, align 8, !tbaa !9
  %175 = xor <16 x i8> %wide.load325, %wide.load
  %176 = xor <16 x i8> %wide.load326, %wide.load324
  store <16 x i8> %175, ptr %next.gep322, align 8, !tbaa !9
  store <16 x i8> %176, ptr %174, align 8, !tbaa !9
  %index.next = add nuw i64 %index, 32
  %177 = icmp eq i64 %index.next, %n.vec
  br i1 %177, label %middle.block, label %vector.body, !llvm.loop !18

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

vec.epilog.iter.check:                            ; preds = %middle.block
  %ind.end335 = getelementptr i8, ptr %13, i64 %n.vec
  %ind.end332 = getelementptr i8, ptr %15, i64 %n.vec
  %.cast329 = trunc nuw i64 %n.vec to i32
  %ind.end330 = sub i32 %171, %.cast329
  %n.vec.remaining = and i64 %172, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph274.preheader, label %vec.epilog.ph

.lr.ph274.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %.0134272.ph = phi i32 [ %171, %iter.check ], [ %ind.end330, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  %.0135271.ph = phi ptr [ %15, %iter.check ], [ %ind.end332, %vec.epilog.iter.check ], [ %ind.end331, %vec.epilog.middle.block ]
  %.0136270.ph = phi ptr [ %13, %iter.check ], [ %ind.end335, %vec.epilog.iter.check ], [ %ind.end334, %vec.epilog.middle.block ]
  br label %.lr.ph274

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.vec328 = and i64 %172, 4294967288
  %.cast = trunc nuw i64 %n.vec328 to i32
  %ind.end = sub i32 %171, %.cast
  %ind.end331 = getelementptr i8, ptr %15, i64 %n.vec328
  %ind.end334 = getelementptr i8, ptr %13, i64 %n.vec328
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index337 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next342, %vec.epilog.vector.body ]
  %next.gep338 = getelementptr i8, ptr %15, i64 %index337
  %next.gep339 = getelementptr i8, ptr %13, i64 %index337
  %wide.load340 = load <8 x i8>, ptr %next.gep338, align 8, !tbaa !9
  %wide.load341 = load <8 x i8>, ptr %next.gep339, align 8, !tbaa !9
  %178 = xor <8 x i8> %wide.load341, %wide.load340
  store <8 x i8> %178, ptr %next.gep339, align 8, !tbaa !9
  %index.next342 = add nuw i64 %index337, 8
  %179 = icmp eq i64 %index.next342, %n.vec328
  br i1 %179, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !19

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n343 = icmp eq i64 %n.vec328, %172
  br i1 %cmp.n343, label %iter.check350, label %.lr.ph274.preheader

.lr.ph291:                                        ; preds = %.lr.ph291.prol.loopexit, %.lr.ph291
  %.0159290 = phi i32 [ %204, %.lr.ph291 ], [ %.0159290.unr, %.lr.ph291.prol.loopexit ]
  %.0160289 = phi ptr [ %200, %.lr.ph291 ], [ %.0160289.unr, %.lr.ph291.prol.loopexit ]
  %.0161288 = phi ptr [ %198, %.lr.ph291 ], [ %.0161288.unr, %.lr.ph291.prol.loopexit ]
  %.0162287 = phi ptr [ %203, %.lr.ph291 ], [ %.0162287.unr, %.lr.ph291.prol.loopexit ]
  %180 = getelementptr inbounds i8, ptr %.0161288, i64 1
  %181 = load i8, ptr %.0161288, align 1, !tbaa !9
  %182 = getelementptr inbounds i8, ptr %.0160289, i64 1
  %183 = load i8, ptr %.0160289, align 1, !tbaa !9
  %184 = xor i8 %183, %181
  %185 = getelementptr inbounds i8, ptr %.0162287, i64 1
  store i8 %184, ptr %.0162287, align 1, !tbaa !9
  %186 = getelementptr inbounds i8, ptr %.0161288, i64 2
  %187 = load i8, ptr %180, align 1, !tbaa !9
  %188 = getelementptr inbounds i8, ptr %.0160289, i64 2
  %189 = load i8, ptr %182, align 1, !tbaa !9
  %190 = xor i8 %189, %187
  %191 = getelementptr inbounds i8, ptr %.0162287, i64 2
  store i8 %190, ptr %185, align 1, !tbaa !9
  %192 = getelementptr inbounds i8, ptr %.0161288, i64 3
  %193 = load i8, ptr %186, align 1, !tbaa !9
  %194 = getelementptr inbounds i8, ptr %.0160289, i64 3
  %195 = load i8, ptr %188, align 1, !tbaa !9
  %196 = xor i8 %195, %193
  %197 = getelementptr inbounds i8, ptr %.0162287, i64 3
  store i8 %196, ptr %191, align 1, !tbaa !9
  %198 = getelementptr inbounds i8, ptr %.0161288, i64 4
  %199 = load i8, ptr %192, align 1, !tbaa !9
  %200 = getelementptr inbounds i8, ptr %.0160289, i64 4
  %201 = load i8, ptr %194, align 1, !tbaa !9
  %202 = xor i8 %201, %199
  %203 = getelementptr inbounds i8, ptr %.0162287, i64 4
  store i8 %202, ptr %197, align 1, !tbaa !9
  %204 = add nsw i32 %.0159290, -4
  %.not206.3 = icmp eq i32 %204, 0
  br i1 %.not206.3, label %iter.check522, label %.lr.ph291, !llvm.loop !20

iter.check522:                                    ; preds = %.lr.ph291.prol.loopexit, %.lr.ph291, %vec.epilog.middle.block481, %middle.block458
  %205 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %206 = and i64 %205, 4294967295
  %207 = add nuw nsw i64 %206, 1
  %min.iters.check520 = icmp ult i64 %206, 7
  br i1 %min.iters.check520, label %.lr.ph296.preheader, label %vector.memcheck513

vector.memcheck513:                               ; preds = %iter.check522
  %208 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %209 = and i64 %208, 4294967295
  %210 = add nuw nsw i64 %209, 1
  %scevgep514 = getelementptr i8, ptr %.0189.lcssa, i64 %210
  %scevgep515 = getelementptr i8, ptr %12, i64 %210
  %bound0516 = icmp ult ptr %.0189.lcssa, %scevgep515
  %bound1517 = icmp ult ptr %12, %scevgep514
  %found.conflict518 = and i1 %bound0516, %bound1517
  br i1 %found.conflict518, label %.lr.ph296.preheader, label %vector.main.loop.iter.check524

vector.main.loop.iter.check524:                   ; preds = %vector.memcheck513
  %min.iters.check523 = icmp ult i64 %206, 31
  br i1 %min.iters.check523, label %vec.epilog.ph542, label %vector.ph525

vector.ph525:                                     ; preds = %vector.main.loop.iter.check524
  %n.vec527 = and i64 %207, 8589934560
  br label %vector.body528

vector.body528:                                   ; preds = %vector.body528, %vector.ph525
  %index529 = phi i64 [ 0, %vector.ph525 ], [ %index.next538, %vector.body528 ]
  %next.gep530 = getelementptr i8, ptr %12, i64 %index529
  %next.gep532 = getelementptr i8, ptr %.0189.lcssa, i64 %index529
  %211 = getelementptr i8, ptr %next.gep530, i64 16
  %wide.load534 = load <16 x i8>, ptr %next.gep530, align 8, !tbaa !9, !alias.scope !21
  %wide.load535 = load <16 x i8>, ptr %211, align 8, !tbaa !9, !alias.scope !21
  %212 = getelementptr i8, ptr %next.gep532, i64 16
  %wide.load536 = load <16 x i8>, ptr %next.gep532, align 1, !tbaa !9, !alias.scope !24, !noalias !21
  %wide.load537 = load <16 x i8>, ptr %212, align 1, !tbaa !9, !alias.scope !24, !noalias !21
  %213 = xor <16 x i8> %wide.load536, %wide.load534
  %214 = xor <16 x i8> %wide.load537, %wide.load535
  store <16 x i8> %213, ptr %next.gep532, align 1, !tbaa !9, !alias.scope !24, !noalias !21
  store <16 x i8> %214, ptr %212, align 1, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next538 = add nuw i64 %index529, 32
  %215 = icmp eq i64 %index.next538, %n.vec527
  br i1 %215, label %middle.block519, label %vector.body528, !llvm.loop !26

middle.block519:                                  ; preds = %vector.body528
  %cmp.n539 = icmp eq i64 %207, %n.vec527
  br i1 %cmp.n539, label %iter.check577, label %vec.epilog.iter.check543

vec.epilog.iter.check543:                         ; preds = %middle.block519
  %ind.end558 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec527
  %ind.end555 = getelementptr i8, ptr %12, i64 %n.vec527
  %.cast551 = trunc i64 %n.vec527 to i32
  %ind.end552 = sub i32 %53, %.cast551
  %n.vec.remaining544 = and i64 %207, 24
  %min.epilog.iters.check545 = icmp eq i64 %n.vec.remaining544, 0
  br i1 %min.epilog.iters.check545, label %.lr.ph296.preheader, label %vec.epilog.ph542

vec.epilog.ph542:                                 ; preds = %vector.main.loop.iter.check524, %vec.epilog.iter.check543
  %vec.epilog.resume.val546 = phi i64 [ %n.vec527, %vec.epilog.iter.check543 ], [ 0, %vector.main.loop.iter.check524 ]
  %n.vec548 = and i64 %207, 8589934584
  %.cast549 = trunc i64 %n.vec548 to i32
  %ind.end550 = sub i32 %53, %.cast549
  %ind.end554 = getelementptr i8, ptr %12, i64 %n.vec548
  %ind.end557 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec548
  br label %vec.epilog.vector.body560

vec.epilog.vector.body560:                        ; preds = %vec.epilog.vector.body560, %vec.epilog.ph542
  %index561 = phi i64 [ %vec.epilog.resume.val546, %vec.epilog.ph542 ], [ %index.next566, %vec.epilog.vector.body560 ]
  %next.gep562 = getelementptr i8, ptr %12, i64 %index561
  %next.gep563 = getelementptr i8, ptr %.0189.lcssa, i64 %index561
  %wide.load564 = load <8 x i8>, ptr %next.gep562, align 8, !tbaa !9, !alias.scope !27
  %wide.load565 = load <8 x i8>, ptr %next.gep563, align 1, !tbaa !9, !alias.scope !30, !noalias !27
  %216 = xor <8 x i8> %wide.load565, %wide.load564
  store <8 x i8> %216, ptr %next.gep563, align 1, !tbaa !9, !alias.scope !30, !noalias !27
  %index.next566 = add nuw i64 %index561, 8
  %217 = icmp eq i64 %index.next566, %n.vec548
  br i1 %217, label %vec.epilog.middle.block540, label %vec.epilog.vector.body560, !llvm.loop !32

vec.epilog.middle.block540:                       ; preds = %vec.epilog.vector.body560
  %cmp.n567 = icmp eq i64 %207, %n.vec548
  br i1 %cmp.n567, label %iter.check577, label %.lr.ph296.preheader

.lr.ph296.preheader:                              ; preds = %vec.epilog.middle.block540, %vector.memcheck513, %iter.check522, %vec.epilog.iter.check543
  %.0156295.ph = phi i32 [ %53, %iter.check522 ], [ %53, %vector.memcheck513 ], [ %ind.end552, %vec.epilog.iter.check543 ], [ %ind.end550, %vec.epilog.middle.block540 ]
  %.0157294.ph = phi ptr [ %12, %iter.check522 ], [ %12, %vector.memcheck513 ], [ %ind.end555, %vec.epilog.iter.check543 ], [ %ind.end554, %vec.epilog.middle.block540 ]
  %.0158293.ph = phi ptr [ %.0189.lcssa, %iter.check522 ], [ %.0189.lcssa, %vector.memcheck513 ], [ %ind.end558, %vec.epilog.iter.check543 ], [ %ind.end557, %vec.epilog.middle.block540 ]
  %218 = add nsw i32 %.0156295.ph, -1
  %xtraiter687 = and i32 %.0156295.ph, 3
  %lcmp.mod688.not = icmp eq i32 %xtraiter687, 0
  br i1 %lcmp.mod688.not, label %.lr.ph296.prol.loopexit, label %.lr.ph296.prol

.lr.ph296.prol:                                   ; preds = %.lr.ph296.preheader, %.lr.ph296.prol
  %.0156295.prol = phi i32 [ %224, %.lr.ph296.prol ], [ %.0156295.ph, %.lr.ph296.preheader ]
  %.0157294.prol = phi ptr [ %219, %.lr.ph296.prol ], [ %.0157294.ph, %.lr.ph296.preheader ]
  %.0158293.prol = phi ptr [ %221, %.lr.ph296.prol ], [ %.0158293.ph, %.lr.ph296.preheader ]
  %prol.iter689 = phi i32 [ %prol.iter689.next, %.lr.ph296.prol ], [ 0, %.lr.ph296.preheader ]
  %219 = getelementptr inbounds i8, ptr %.0157294.prol, i64 1
  %220 = load i8, ptr %.0157294.prol, align 1, !tbaa !9
  %221 = getelementptr inbounds i8, ptr %.0158293.prol, i64 1
  %222 = load i8, ptr %.0158293.prol, align 1, !tbaa !9
  %223 = xor i8 %222, %220
  store i8 %223, ptr %.0158293.prol, align 1, !tbaa !9
  %224 = add nsw i32 %.0156295.prol, -1
  %prol.iter689.next = add i32 %prol.iter689, 1
  %prol.iter689.cmp.not = icmp eq i32 %prol.iter689.next, %xtraiter687
  br i1 %prol.iter689.cmp.not, label %.lr.ph296.prol.loopexit, label %.lr.ph296.prol, !llvm.loop !33

.lr.ph296.prol.loopexit:                          ; preds = %.lr.ph296.prol, %.lr.ph296.preheader
  %.0156295.unr = phi i32 [ %.0156295.ph, %.lr.ph296.preheader ], [ %224, %.lr.ph296.prol ]
  %.0157294.unr = phi ptr [ %.0157294.ph, %.lr.ph296.preheader ], [ %219, %.lr.ph296.prol ]
  %.0158293.unr = phi ptr [ %.0158293.ph, %.lr.ph296.preheader ], [ %221, %.lr.ph296.prol ]
  %225 = icmp ult i32 %218, 3
  br i1 %225, label %iter.check577, label %.lr.ph296

.lr.ph296:                                        ; preds = %.lr.ph296.prol.loopexit, %.lr.ph296
  %.0156295 = phi i32 [ %246, %.lr.ph296 ], [ %.0156295.unr, %.lr.ph296.prol.loopexit ]
  %.0157294 = phi ptr [ %241, %.lr.ph296 ], [ %.0157294.unr, %.lr.ph296.prol.loopexit ]
  %.0158293 = phi ptr [ %243, %.lr.ph296 ], [ %.0158293.unr, %.lr.ph296.prol.loopexit ]
  %226 = getelementptr inbounds i8, ptr %.0157294, i64 1
  %227 = load i8, ptr %.0157294, align 1, !tbaa !9
  %228 = getelementptr inbounds i8, ptr %.0158293, i64 1
  %229 = load i8, ptr %.0158293, align 1, !tbaa !9
  %230 = xor i8 %229, %227
  store i8 %230, ptr %.0158293, align 1, !tbaa !9
  %231 = getelementptr inbounds i8, ptr %.0157294, i64 2
  %232 = load i8, ptr %226, align 1, !tbaa !9
  %233 = getelementptr inbounds i8, ptr %.0158293, i64 2
  %234 = load i8, ptr %228, align 1, !tbaa !9
  %235 = xor i8 %234, %232
  store i8 %235, ptr %228, align 1, !tbaa !9
  %236 = getelementptr inbounds i8, ptr %.0157294, i64 3
  %237 = load i8, ptr %231, align 1, !tbaa !9
  %238 = getelementptr inbounds i8, ptr %.0158293, i64 3
  %239 = load i8, ptr %233, align 1, !tbaa !9
  %240 = xor i8 %239, %237
  store i8 %240, ptr %233, align 1, !tbaa !9
  %241 = getelementptr inbounds i8, ptr %.0157294, i64 4
  %242 = load i8, ptr %236, align 1, !tbaa !9
  %243 = getelementptr inbounds i8, ptr %.0158293, i64 4
  %244 = load i8, ptr %238, align 1, !tbaa !9
  %245 = xor i8 %244, %242
  store i8 %245, ptr %238, align 1, !tbaa !9
  %246 = add nsw i32 %.0156295, -4
  %.not207.3 = icmp eq i32 %246, 0
  br i1 %.not207.3, label %iter.check577, label %.lr.ph296, !llvm.loop !34

iter.check577:                                    ; preds = %.lr.ph296.prol.loopexit, %.lr.ph296, %vec.epilog.middle.block540, %middle.block519
  %247 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %248 = and i64 %247, 4294967295
  %249 = add nuw nsw i64 %248, 1
  %min.iters.check575 = icmp ult i64 %248, 7
  br i1 %min.iters.check575, label %.lr.ph301.preheader, label %vector.memcheck568

vector.memcheck568:                               ; preds = %iter.check577
  %250 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %251 = and i64 %250, 4294967295
  %252 = add nuw nsw i64 %251, 1
  %scevgep569 = getelementptr i8, ptr %15, i64 %252
  %scevgep570 = getelementptr i8, ptr %.0189.lcssa, i64 %252
  %bound0571 = icmp ult ptr %15, %scevgep570
  %bound1572 = icmp ult ptr %.0189.lcssa, %scevgep569
  %found.conflict573 = and i1 %bound0571, %bound1572
  br i1 %found.conflict573, label %.lr.ph301.preheader, label %vector.main.loop.iter.check579

vector.main.loop.iter.check579:                   ; preds = %vector.memcheck568
  %min.iters.check578 = icmp ult i64 %248, 31
  br i1 %min.iters.check578, label %vec.epilog.ph597, label %vector.ph580

vector.ph580:                                     ; preds = %vector.main.loop.iter.check579
  %n.vec582 = and i64 %249, 8589934560
  br label %vector.body583

vector.body583:                                   ; preds = %vector.body583, %vector.ph580
  %index584 = phi i64 [ 0, %vector.ph580 ], [ %index.next593, %vector.body583 ]
  %next.gep585 = getelementptr i8, ptr %.0189.lcssa, i64 %index584
  %next.gep587 = getelementptr i8, ptr %15, i64 %index584
  %253 = getelementptr i8, ptr %next.gep585, i64 16
  %wide.load589 = load <16 x i8>, ptr %next.gep585, align 1, !tbaa !9, !alias.scope !35
  %wide.load590 = load <16 x i8>, ptr %253, align 1, !tbaa !9, !alias.scope !35
  %254 = getelementptr i8, ptr %next.gep587, i64 16
  %wide.load591 = load <16 x i8>, ptr %next.gep587, align 8, !tbaa !9, !alias.scope !38, !noalias !35
  %wide.load592 = load <16 x i8>, ptr %254, align 8, !tbaa !9, !alias.scope !38, !noalias !35
  %255 = xor <16 x i8> %wide.load591, %wide.load589
  %256 = xor <16 x i8> %wide.load592, %wide.load590
  store <16 x i8> %255, ptr %next.gep587, align 8, !tbaa !9, !alias.scope !38, !noalias !35
  store <16 x i8> %256, ptr %254, align 8, !tbaa !9, !alias.scope !38, !noalias !35
  %index.next593 = add nuw i64 %index584, 32
  %257 = icmp eq i64 %index.next593, %n.vec582
  br i1 %257, label %middle.block574, label %vector.body583, !llvm.loop !40

middle.block574:                                  ; preds = %vector.body583
  %cmp.n594 = icmp eq i64 %249, %n.vec582
  br i1 %cmp.n594, label %iter.check632, label %vec.epilog.iter.check598

vec.epilog.iter.check598:                         ; preds = %middle.block574
  %ind.end613 = getelementptr i8, ptr %15, i64 %n.vec582
  %ind.end610 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec582
  %.cast606 = trunc i64 %n.vec582 to i32
  %ind.end607 = sub i32 %53, %.cast606
  %n.vec.remaining599 = and i64 %249, 24
  %min.epilog.iters.check600 = icmp eq i64 %n.vec.remaining599, 0
  br i1 %min.epilog.iters.check600, label %.lr.ph301.preheader, label %vec.epilog.ph597

vec.epilog.ph597:                                 ; preds = %vector.main.loop.iter.check579, %vec.epilog.iter.check598
  %vec.epilog.resume.val601 = phi i64 [ %n.vec582, %vec.epilog.iter.check598 ], [ 0, %vector.main.loop.iter.check579 ]
  %n.vec603 = and i64 %249, 8589934584
  %.cast604 = trunc i64 %n.vec603 to i32
  %ind.end605 = sub i32 %53, %.cast604
  %ind.end609 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec603
  %ind.end612 = getelementptr i8, ptr %15, i64 %n.vec603
  br label %vec.epilog.vector.body615

vec.epilog.vector.body615:                        ; preds = %vec.epilog.vector.body615, %vec.epilog.ph597
  %index616 = phi i64 [ %vec.epilog.resume.val601, %vec.epilog.ph597 ], [ %index.next621, %vec.epilog.vector.body615 ]
  %next.gep617 = getelementptr i8, ptr %.0189.lcssa, i64 %index616
  %next.gep618 = getelementptr i8, ptr %15, i64 %index616
  %wide.load619 = load <8 x i8>, ptr %next.gep617, align 1, !tbaa !9, !alias.scope !41
  %wide.load620 = load <8 x i8>, ptr %next.gep618, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  %258 = xor <8 x i8> %wide.load620, %wide.load619
  store <8 x i8> %258, ptr %next.gep618, align 8, !tbaa !9, !alias.scope !44, !noalias !41
  %index.next621 = add nuw i64 %index616, 8
  %259 = icmp eq i64 %index.next621, %n.vec603
  br i1 %259, label %vec.epilog.middle.block595, label %vec.epilog.vector.body615, !llvm.loop !46

vec.epilog.middle.block595:                       ; preds = %vec.epilog.vector.body615
  %cmp.n622 = icmp eq i64 %249, %n.vec603
  br i1 %cmp.n622, label %iter.check632, label %.lr.ph301.preheader

.lr.ph301.preheader:                              ; preds = %vec.epilog.middle.block595, %vector.memcheck568, %iter.check577, %vec.epilog.iter.check598
  %.0153300.ph = phi i32 [ %53, %iter.check577 ], [ %53, %vector.memcheck568 ], [ %ind.end607, %vec.epilog.iter.check598 ], [ %ind.end605, %vec.epilog.middle.block595 ]
  %.0154299.ph = phi ptr [ %.0189.lcssa, %iter.check577 ], [ %.0189.lcssa, %vector.memcheck568 ], [ %ind.end610, %vec.epilog.iter.check598 ], [ %ind.end609, %vec.epilog.middle.block595 ]
  %.0155298.ph = phi ptr [ %15, %iter.check577 ], [ %15, %vector.memcheck568 ], [ %ind.end613, %vec.epilog.iter.check598 ], [ %ind.end612, %vec.epilog.middle.block595 ]
  %260 = add nsw i32 %.0153300.ph, -1
  %xtraiter690 = and i32 %.0153300.ph, 3
  %lcmp.mod691.not = icmp eq i32 %xtraiter690, 0
  br i1 %lcmp.mod691.not, label %.lr.ph301.prol.loopexit, label %.lr.ph301.prol

.lr.ph301.prol:                                   ; preds = %.lr.ph301.preheader, %.lr.ph301.prol
  %.0153300.prol = phi i32 [ %266, %.lr.ph301.prol ], [ %.0153300.ph, %.lr.ph301.preheader ]
  %.0154299.prol = phi ptr [ %261, %.lr.ph301.prol ], [ %.0154299.ph, %.lr.ph301.preheader ]
  %.0155298.prol = phi ptr [ %263, %.lr.ph301.prol ], [ %.0155298.ph, %.lr.ph301.preheader ]
  %prol.iter692 = phi i32 [ %prol.iter692.next, %.lr.ph301.prol ], [ 0, %.lr.ph301.preheader ]
  %261 = getelementptr inbounds i8, ptr %.0154299.prol, i64 1
  %262 = load i8, ptr %.0154299.prol, align 1, !tbaa !9
  %263 = getelementptr inbounds i8, ptr %.0155298.prol, i64 1
  %264 = load i8, ptr %.0155298.prol, align 1, !tbaa !9
  %265 = xor i8 %264, %262
  store i8 %265, ptr %.0155298.prol, align 1, !tbaa !9
  %266 = add nsw i32 %.0153300.prol, -1
  %prol.iter692.next = add i32 %prol.iter692, 1
  %prol.iter692.cmp.not = icmp eq i32 %prol.iter692.next, %xtraiter690
  br i1 %prol.iter692.cmp.not, label %.lr.ph301.prol.loopexit, label %.lr.ph301.prol, !llvm.loop !47

.lr.ph301.prol.loopexit:                          ; preds = %.lr.ph301.prol, %.lr.ph301.preheader
  %.0153300.unr = phi i32 [ %.0153300.ph, %.lr.ph301.preheader ], [ %266, %.lr.ph301.prol ]
  %.0154299.unr = phi ptr [ %.0154299.ph, %.lr.ph301.preheader ], [ %261, %.lr.ph301.prol ]
  %.0155298.unr = phi ptr [ %.0155298.ph, %.lr.ph301.preheader ], [ %263, %.lr.ph301.prol ]
  %267 = icmp ult i32 %260, 3
  br i1 %267, label %iter.check632, label %.lr.ph301

.lr.ph301:                                        ; preds = %.lr.ph301.prol.loopexit, %.lr.ph301
  %.0153300 = phi i32 [ %288, %.lr.ph301 ], [ %.0153300.unr, %.lr.ph301.prol.loopexit ]
  %.0154299 = phi ptr [ %283, %.lr.ph301 ], [ %.0154299.unr, %.lr.ph301.prol.loopexit ]
  %.0155298 = phi ptr [ %285, %.lr.ph301 ], [ %.0155298.unr, %.lr.ph301.prol.loopexit ]
  %268 = getelementptr inbounds i8, ptr %.0154299, i64 1
  %269 = load i8, ptr %.0154299, align 1, !tbaa !9
  %270 = getelementptr inbounds i8, ptr %.0155298, i64 1
  %271 = load i8, ptr %.0155298, align 1, !tbaa !9
  %272 = xor i8 %271, %269
  store i8 %272, ptr %.0155298, align 1, !tbaa !9
  %273 = getelementptr inbounds i8, ptr %.0154299, i64 2
  %274 = load i8, ptr %268, align 1, !tbaa !9
  %275 = getelementptr inbounds i8, ptr %.0155298, i64 2
  %276 = load i8, ptr %270, align 1, !tbaa !9
  %277 = xor i8 %276, %274
  store i8 %277, ptr %270, align 1, !tbaa !9
  %278 = getelementptr inbounds i8, ptr %.0154299, i64 3
  %279 = load i8, ptr %273, align 1, !tbaa !9
  %280 = getelementptr inbounds i8, ptr %.0155298, i64 3
  %281 = load i8, ptr %275, align 1, !tbaa !9
  %282 = xor i8 %281, %279
  store i8 %282, ptr %275, align 1, !tbaa !9
  %283 = getelementptr inbounds i8, ptr %.0154299, i64 4
  %284 = load i8, ptr %278, align 1, !tbaa !9
  %285 = getelementptr inbounds i8, ptr %.0155298, i64 4
  %286 = load i8, ptr %280, align 1, !tbaa !9
  %287 = xor i8 %286, %284
  store i8 %287, ptr %280, align 1, !tbaa !9
  %288 = add nsw i32 %.0153300, -4
  %.not208.3 = icmp eq i32 %288, 0
  br i1 %.not208.3, label %iter.check632, label %.lr.ph301, !llvm.loop !48

iter.check632:                                    ; preds = %.lr.ph301.prol.loopexit, %.lr.ph301, %vec.epilog.middle.block595, %middle.block574
  %289 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %290 = and i64 %289, 4294967295
  %291 = add nuw nsw i64 %290, 1
  %min.iters.check630 = icmp ult i64 %290, 7
  br i1 %min.iters.check630, label %.lr.ph306.preheader, label %vector.memcheck623

vector.memcheck623:                               ; preds = %iter.check632
  %292 = add nuw nsw i64 %.0191.lcssa, 4294967295
  %293 = and i64 %292, 4294967295
  %294 = add nuw nsw i64 %293, 1
  %scevgep624 = getelementptr i8, ptr %11, i64 %294
  %scevgep625 = getelementptr i8, ptr %.0189.lcssa, i64 %294
  %bound0626 = icmp ult ptr %11, %scevgep625
  %bound1627 = icmp ult ptr %.0189.lcssa, %scevgep624
  %found.conflict628 = and i1 %bound0626, %bound1627
  br i1 %found.conflict628, label %.lr.ph306.preheader, label %vector.main.loop.iter.check634

vector.main.loop.iter.check634:                   ; preds = %vector.memcheck623
  %min.iters.check633 = icmp ult i64 %290, 31
  br i1 %min.iters.check633, label %vec.epilog.ph652, label %vector.ph635

vector.ph635:                                     ; preds = %vector.main.loop.iter.check634
  %n.vec637 = and i64 %291, 8589934560
  br label %vector.body638

vector.body638:                                   ; preds = %vector.body638, %vector.ph635
  %index639 = phi i64 [ 0, %vector.ph635 ], [ %index.next648, %vector.body638 ]
  %next.gep640 = getelementptr i8, ptr %.0189.lcssa, i64 %index639
  %next.gep642 = getelementptr i8, ptr %11, i64 %index639
  %295 = getelementptr i8, ptr %next.gep640, i64 16
  %wide.load644 = load <16 x i8>, ptr %next.gep640, align 1, !tbaa !9, !alias.scope !49
  %wide.load645 = load <16 x i8>, ptr %295, align 1, !tbaa !9, !alias.scope !49
  %296 = getelementptr i8, ptr %next.gep642, i64 16
  %wide.load646 = load <16 x i8>, ptr %next.gep642, align 16, !tbaa !9, !alias.scope !52, !noalias !49
  %wide.load647 = load <16 x i8>, ptr %296, align 16, !tbaa !9, !alias.scope !52, !noalias !49
  %297 = xor <16 x i8> %wide.load646, %wide.load644
  %298 = xor <16 x i8> %wide.load647, %wide.load645
  store <16 x i8> %297, ptr %next.gep642, align 16, !tbaa !9, !alias.scope !52, !noalias !49
  store <16 x i8> %298, ptr %296, align 16, !tbaa !9, !alias.scope !52, !noalias !49
  %index.next648 = add nuw i64 %index639, 32
  %299 = icmp eq i64 %index.next648, %n.vec637
  br i1 %299, label %middle.block629, label %vector.body638, !llvm.loop !54

middle.block629:                                  ; preds = %vector.body638
  %cmp.n649 = icmp eq i64 %291, %n.vec637
  br i1 %cmp.n649, label %.loopexit, label %vec.epilog.iter.check653

vec.epilog.iter.check653:                         ; preds = %middle.block629
  %ind.end668 = getelementptr i8, ptr %11, i64 %n.vec637
  %ind.end665 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec637
  %.cast661 = trunc i64 %n.vec637 to i32
  %ind.end662 = sub i32 %53, %.cast661
  %n.vec.remaining654 = and i64 %291, 24
  %min.epilog.iters.check655 = icmp eq i64 %n.vec.remaining654, 0
  br i1 %min.epilog.iters.check655, label %.lr.ph306.preheader, label %vec.epilog.ph652

vec.epilog.ph652:                                 ; preds = %vector.main.loop.iter.check634, %vec.epilog.iter.check653
  %vec.epilog.resume.val656 = phi i64 [ %n.vec637, %vec.epilog.iter.check653 ], [ 0, %vector.main.loop.iter.check634 ]
  %n.vec658 = and i64 %291, 8589934584
  %.cast659 = trunc i64 %n.vec658 to i32
  %ind.end660 = sub i32 %53, %.cast659
  %ind.end664 = getelementptr i8, ptr %.0189.lcssa, i64 %n.vec658
  %ind.end667 = getelementptr i8, ptr %11, i64 %n.vec658
  br label %vec.epilog.vector.body670

vec.epilog.vector.body670:                        ; preds = %vec.epilog.vector.body670, %vec.epilog.ph652
  %index671 = phi i64 [ %vec.epilog.resume.val656, %vec.epilog.ph652 ], [ %index.next676, %vec.epilog.vector.body670 ]
  %next.gep672 = getelementptr i8, ptr %.0189.lcssa, i64 %index671
  %next.gep673 = getelementptr i8, ptr %11, i64 %index671
  %wide.load674 = load <8 x i8>, ptr %next.gep672, align 1, !tbaa !9, !alias.scope !55
  %wide.load675 = load <8 x i8>, ptr %next.gep673, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %300 = xor <8 x i8> %wide.load675, %wide.load674
  store <8 x i8> %300, ptr %next.gep673, align 8, !tbaa !9, !alias.scope !58, !noalias !55
  %index.next676 = add nuw i64 %index671, 8
  %301 = icmp eq i64 %index.next676, %n.vec658
  br i1 %301, label %vec.epilog.middle.block650, label %vec.epilog.vector.body670, !llvm.loop !60

vec.epilog.middle.block650:                       ; preds = %vec.epilog.vector.body670
  %cmp.n677 = icmp eq i64 %291, %n.vec658
  br i1 %cmp.n677, label %.loopexit, label %.lr.ph306.preheader

.lr.ph306.preheader:                              ; preds = %vec.epilog.middle.block650, %vector.memcheck623, %iter.check632, %vec.epilog.iter.check653
  %.0150305.ph = phi i32 [ %53, %iter.check632 ], [ %53, %vector.memcheck623 ], [ %ind.end662, %vec.epilog.iter.check653 ], [ %ind.end660, %vec.epilog.middle.block650 ]
  %.0151304.ph = phi ptr [ %.0189.lcssa, %iter.check632 ], [ %.0189.lcssa, %vector.memcheck623 ], [ %ind.end665, %vec.epilog.iter.check653 ], [ %ind.end664, %vec.epilog.middle.block650 ]
  %.0152303.ph = phi ptr [ %11, %iter.check632 ], [ %11, %vector.memcheck623 ], [ %ind.end668, %vec.epilog.iter.check653 ], [ %ind.end667, %vec.epilog.middle.block650 ]
  %302 = add nsw i32 %.0150305.ph, -1
  %xtraiter693 = and i32 %.0150305.ph, 3
  %lcmp.mod694.not = icmp eq i32 %xtraiter693, 0
  br i1 %lcmp.mod694.not, label %.lr.ph306.prol.loopexit, label %.lr.ph306.prol

.lr.ph306.prol:                                   ; preds = %.lr.ph306.preheader, %.lr.ph306.prol
  %.0150305.prol = phi i32 [ %308, %.lr.ph306.prol ], [ %.0150305.ph, %.lr.ph306.preheader ]
  %.0151304.prol = phi ptr [ %303, %.lr.ph306.prol ], [ %.0151304.ph, %.lr.ph306.preheader ]
  %.0152303.prol = phi ptr [ %305, %.lr.ph306.prol ], [ %.0152303.ph, %.lr.ph306.preheader ]
  %prol.iter695 = phi i32 [ %prol.iter695.next, %.lr.ph306.prol ], [ 0, %.lr.ph306.preheader ]
  %303 = getelementptr inbounds i8, ptr %.0151304.prol, i64 1
  %304 = load i8, ptr %.0151304.prol, align 1, !tbaa !9
  %305 = getelementptr inbounds i8, ptr %.0152303.prol, i64 1
  %306 = load i8, ptr %.0152303.prol, align 1, !tbaa !9
  %307 = xor i8 %306, %304
  store i8 %307, ptr %.0152303.prol, align 1, !tbaa !9
  %308 = add nsw i32 %.0150305.prol, -1
  %prol.iter695.next = add i32 %prol.iter695, 1
  %prol.iter695.cmp.not = icmp eq i32 %prol.iter695.next, %xtraiter693
  br i1 %prol.iter695.cmp.not, label %.lr.ph306.prol.loopexit, label %.lr.ph306.prol, !llvm.loop !61

.lr.ph306.prol.loopexit:                          ; preds = %.lr.ph306.prol, %.lr.ph306.preheader
  %.0150305.unr = phi i32 [ %.0150305.ph, %.lr.ph306.preheader ], [ %308, %.lr.ph306.prol ]
  %.0151304.unr = phi ptr [ %.0151304.ph, %.lr.ph306.preheader ], [ %303, %.lr.ph306.prol ]
  %.0152303.unr = phi ptr [ %.0152303.ph, %.lr.ph306.preheader ], [ %305, %.lr.ph306.prol ]
  %309 = icmp ult i32 %302, 3
  br i1 %309, label %.loopexit, label %.lr.ph306

.lr.ph306:                                        ; preds = %.lr.ph306.prol.loopexit, %.lr.ph306
  %.0150305 = phi i32 [ %330, %.lr.ph306 ], [ %.0150305.unr, %.lr.ph306.prol.loopexit ]
  %.0151304 = phi ptr [ %325, %.lr.ph306 ], [ %.0151304.unr, %.lr.ph306.prol.loopexit ]
  %.0152303 = phi ptr [ %327, %.lr.ph306 ], [ %.0152303.unr, %.lr.ph306.prol.loopexit ]
  %310 = getelementptr inbounds i8, ptr %.0151304, i64 1
  %311 = load i8, ptr %.0151304, align 1, !tbaa !9
  %312 = getelementptr inbounds i8, ptr %.0152303, i64 1
  %313 = load i8, ptr %.0152303, align 1, !tbaa !9
  %314 = xor i8 %313, %311
  store i8 %314, ptr %.0152303, align 1, !tbaa !9
  %315 = getelementptr inbounds i8, ptr %.0151304, i64 2
  %316 = load i8, ptr %310, align 1, !tbaa !9
  %317 = getelementptr inbounds i8, ptr %.0152303, i64 2
  %318 = load i8, ptr %312, align 1, !tbaa !9
  %319 = xor i8 %318, %316
  store i8 %319, ptr %312, align 1, !tbaa !9
  %320 = getelementptr inbounds i8, ptr %.0151304, i64 3
  %321 = load i8, ptr %315, align 1, !tbaa !9
  %322 = getelementptr inbounds i8, ptr %.0152303, i64 3
  %323 = load i8, ptr %317, align 1, !tbaa !9
  %324 = xor i8 %323, %321
  store i8 %324, ptr %317, align 1, !tbaa !9
  %325 = getelementptr inbounds i8, ptr %.0151304, i64 4
  %326 = load i8, ptr %320, align 1, !tbaa !9
  %327 = getelementptr inbounds i8, ptr %.0152303, i64 4
  %328 = load i8, ptr %322, align 1, !tbaa !9
  %329 = xor i8 %328, %326
  store i8 %329, ptr %322, align 1, !tbaa !9
  %330 = add nsw i32 %.0150305, -4
  %.not209.3 = icmp eq i32 %330, 0
  br i1 %.not209.3, label %.loopexit, label %.lr.ph306, !llvm.loop !62

.lr.ph274:                                        ; preds = %.lr.ph274.preheader, %.lr.ph274
  %.0134272 = phi i32 [ %336, %.lr.ph274 ], [ %.0134272.ph, %.lr.ph274.preheader ]
  %.0135271 = phi ptr [ %331, %.lr.ph274 ], [ %.0135271.ph, %.lr.ph274.preheader ]
  %.0136270 = phi ptr [ %333, %.lr.ph274 ], [ %.0136270.ph, %.lr.ph274.preheader ]
  %331 = getelementptr inbounds i8, ptr %.0135271, i64 1
  %332 = load i8, ptr %.0135271, align 1, !tbaa !9
  %333 = getelementptr inbounds i8, ptr %.0136270, i64 1
  %334 = load i8, ptr %.0136270, align 1, !tbaa !9
  %335 = xor i8 %334, %332
  store i8 %335, ptr %.0136270, align 1, !tbaa !9
  %336 = add nsw i32 %.0134272, -1
  %.not203 = icmp eq i32 %336, 0
  br i1 %.not203, label %iter.check350, label %.lr.ph274, !llvm.loop !63

iter.check350:                                    ; preds = %.lr.ph274, %vec.epilog.middle.block, %middle.block
  %337 = add nuw nsw i64 %.0191.lcssa, 4294967287
  %338 = and i64 %337, 4294967295
  %339 = add nuw nsw i64 %338, 1
  %min.iters.check348 = icmp ult i64 %338, 7
  br i1 %min.iters.check348, label %.lr.ph280.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %iter.check350
  %340 = add i64 %.0189.lcssa344, 8
  %341 = sub i64 %340, %14
  %diff.check = icmp ult i64 %341, 32
  %342 = sub i64 %.0189.lcssa344, %.0190.lcssa345
  %diff.check346 = icmp ult i64 %342, 32
  %conflict.rdx = or i1 %diff.check, %diff.check346
  br i1 %conflict.rdx, label %.lr.ph280.preheader, label %vector.main.loop.iter.check352

vector.main.loop.iter.check352:                   ; preds = %vector.memcheck
  %min.iters.check351 = icmp ult i64 %338, 31
  br i1 %min.iters.check351, label %vec.epilog.ph372, label %vector.ph353

vector.ph353:                                     ; preds = %vector.main.loop.iter.check352
  %n.vec355 = and i64 %339, 8589934560
  br label %vector.body356

vector.body356:                                   ; preds = %vector.body356, %vector.ph353
  %index357 = phi i64 [ 0, %vector.ph353 ], [ %index.next368, %vector.body356 ]
  %next.gep358 = getelementptr i8, ptr %170, i64 %index357
  %next.gep360 = getelementptr i8, ptr %13, i64 %index357
  %next.gep362 = getelementptr i8, ptr %166, i64 %index357
  %343 = getelementptr i8, ptr %next.gep360, i64 16
  %wide.load364 = load <16 x i8>, ptr %next.gep360, align 8, !tbaa !9
  %wide.load365 = load <16 x i8>, ptr %343, align 8, !tbaa !9
  %344 = getelementptr i8, ptr %next.gep358, i64 16
  %wide.load366 = load <16 x i8>, ptr %next.gep358, align 1, !tbaa !9
  %wide.load367 = load <16 x i8>, ptr %344, align 1, !tbaa !9
  %345 = xor <16 x i8> %wide.load366, %wide.load364
  %346 = xor <16 x i8> %wide.load367, %wide.load365
  %347 = getelementptr i8, ptr %next.gep362, i64 16
  store <16 x i8> %345, ptr %next.gep362, align 1, !tbaa !9
  store <16 x i8> %346, ptr %347, align 1, !tbaa !9
  %index.next368 = add nuw i64 %index357, 32
  %348 = icmp eq i64 %index.next368, %n.vec355
  br i1 %348, label %middle.block347, label %vector.body356, !llvm.loop !64

middle.block347:                                  ; preds = %vector.body356
  %cmp.n369 = icmp eq i64 %339, %n.vec355
  br i1 %cmp.n369, label %iter.check407, label %vec.epilog.iter.check373

vec.epilog.iter.check373:                         ; preds = %middle.block347
  %ind.end391 = getelementptr i8, ptr %166, i64 %n.vec355
  %ind.end388 = getelementptr i8, ptr %13, i64 %n.vec355
  %ind.end385 = getelementptr i8, ptr %170, i64 %n.vec355
  %.cast381 = trunc i64 %n.vec355 to i32
  %ind.end382 = sub i32 %171, %.cast381
  %n.vec.remaining374 = and i64 %339, 24
  %min.epilog.iters.check375 = icmp eq i64 %n.vec.remaining374, 0
  br i1 %min.epilog.iters.check375, label %.lr.ph280.preheader, label %vec.epilog.ph372

vec.epilog.ph372:                                 ; preds = %vector.main.loop.iter.check352, %vec.epilog.iter.check373
  %vec.epilog.resume.val376 = phi i64 [ %n.vec355, %vec.epilog.iter.check373 ], [ 0, %vector.main.loop.iter.check352 ]
  %n.vec378 = and i64 %339, 8589934584
  %.cast379 = trunc i64 %n.vec378 to i32
  %ind.end380 = sub i32 %171, %.cast379
  %ind.end384 = getelementptr i8, ptr %170, i64 %n.vec378
  %ind.end387 = getelementptr i8, ptr %13, i64 %n.vec378
  %ind.end390 = getelementptr i8, ptr %166, i64 %n.vec378
  br label %vec.epilog.vector.body393

vec.epilog.vector.body393:                        ; preds = %vec.epilog.vector.body393, %vec.epilog.ph372
  %index394 = phi i64 [ %vec.epilog.resume.val376, %vec.epilog.ph372 ], [ %index.next400, %vec.epilog.vector.body393 ]
  %next.gep395 = getelementptr i8, ptr %170, i64 %index394
  %next.gep396 = getelementptr i8, ptr %13, i64 %index394
  %next.gep397 = getelementptr i8, ptr %166, i64 %index394
  %wide.load398 = load <8 x i8>, ptr %next.gep396, align 8, !tbaa !9
  %wide.load399 = load <8 x i8>, ptr %next.gep395, align 1, !tbaa !9
  %349 = xor <8 x i8> %wide.load399, %wide.load398
  store <8 x i8> %349, ptr %next.gep397, align 1, !tbaa !9
  %index.next400 = add nuw i64 %index394, 8
  %350 = icmp eq i64 %index.next400, %n.vec378
  br i1 %350, label %vec.epilog.middle.block370, label %vec.epilog.vector.body393, !llvm.loop !65

vec.epilog.middle.block370:                       ; preds = %vec.epilog.vector.body393
  %cmp.n401 = icmp eq i64 %339, %n.vec378
  br i1 %cmp.n401, label %iter.check407, label %.lr.ph280.preheader

.lr.ph280.preheader:                              ; preds = %vec.epilog.middle.block370, %vector.memcheck, %iter.check350, %vec.epilog.iter.check373
  %.0130279.ph = phi i32 [ %171, %iter.check350 ], [ %171, %vector.memcheck ], [ %ind.end382, %vec.epilog.iter.check373 ], [ %ind.end380, %vec.epilog.middle.block370 ]
  %.0131278.ph = phi ptr [ %170, %iter.check350 ], [ %170, %vector.memcheck ], [ %ind.end385, %vec.epilog.iter.check373 ], [ %ind.end384, %vec.epilog.middle.block370 ]
  %.0132277.ph = phi ptr [ %13, %iter.check350 ], [ %13, %vector.memcheck ], [ %ind.end388, %vec.epilog.iter.check373 ], [ %ind.end387, %vec.epilog.middle.block370 ]
  %.0133276.ph = phi ptr [ %166, %iter.check350 ], [ %166, %vector.memcheck ], [ %ind.end391, %vec.epilog.iter.check373 ], [ %ind.end390, %vec.epilog.middle.block370 ]
  %351 = add nsw i32 %.0130279.ph, -1
  %xtraiter = and i32 %.0130279.ph, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph280.prol.loopexit, label %.lr.ph280.prol

.lr.ph280.prol:                                   ; preds = %.lr.ph280.preheader, %.lr.ph280.prol
  %.0130279.prol = phi i32 [ %358, %.lr.ph280.prol ], [ %.0130279.ph, %.lr.ph280.preheader ]
  %.0131278.prol = phi ptr [ %354, %.lr.ph280.prol ], [ %.0131278.ph, %.lr.ph280.preheader ]
  %.0132277.prol = phi ptr [ %352, %.lr.ph280.prol ], [ %.0132277.ph, %.lr.ph280.preheader ]
  %.0133276.prol = phi ptr [ %357, %.lr.ph280.prol ], [ %.0133276.ph, %.lr.ph280.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph280.prol ], [ 0, %.lr.ph280.preheader ]
  %352 = getelementptr inbounds i8, ptr %.0132277.prol, i64 1
  %353 = load i8, ptr %.0132277.prol, align 1, !tbaa !9
  %354 = getelementptr inbounds i8, ptr %.0131278.prol, i64 1
  %355 = load i8, ptr %.0131278.prol, align 1, !tbaa !9
  %356 = xor i8 %355, %353
  %357 = getelementptr inbounds i8, ptr %.0133276.prol, i64 1
  store i8 %356, ptr %.0133276.prol, align 1, !tbaa !9
  %358 = add nsw i32 %.0130279.prol, -1
  %prol.iter.next = add i32 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i32 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph280.prol.loopexit, label %.lr.ph280.prol, !llvm.loop !66

.lr.ph280.prol.loopexit:                          ; preds = %.lr.ph280.prol, %.lr.ph280.preheader
  %.0130279.unr = phi i32 [ %.0130279.ph, %.lr.ph280.preheader ], [ %358, %.lr.ph280.prol ]
  %.0131278.unr = phi ptr [ %.0131278.ph, %.lr.ph280.preheader ], [ %354, %.lr.ph280.prol ]
  %.0132277.unr = phi ptr [ %.0132277.ph, %.lr.ph280.preheader ], [ %352, %.lr.ph280.prol ]
  %.0133276.unr = phi ptr [ %.0133276.ph, %.lr.ph280.preheader ], [ %357, %.lr.ph280.prol ]
  %359 = icmp ult i32 %351, 3
  br i1 %359, label %iter.check407, label %.lr.ph280

.lr.ph280:                                        ; preds = %.lr.ph280.prol.loopexit, %.lr.ph280
  %.0130279 = phi i32 [ %384, %.lr.ph280 ], [ %.0130279.unr, %.lr.ph280.prol.loopexit ]
  %.0131278 = phi ptr [ %380, %.lr.ph280 ], [ %.0131278.unr, %.lr.ph280.prol.loopexit ]
  %.0132277 = phi ptr [ %378, %.lr.ph280 ], [ %.0132277.unr, %.lr.ph280.prol.loopexit ]
  %.0133276 = phi ptr [ %383, %.lr.ph280 ], [ %.0133276.unr, %.lr.ph280.prol.loopexit ]
  %360 = getelementptr inbounds i8, ptr %.0132277, i64 1
  %361 = load i8, ptr %.0132277, align 1, !tbaa !9
  %362 = getelementptr inbounds i8, ptr %.0131278, i64 1
  %363 = load i8, ptr %.0131278, align 1, !tbaa !9
  %364 = xor i8 %363, %361
  %365 = getelementptr inbounds i8, ptr %.0133276, i64 1
  store i8 %364, ptr %.0133276, align 1, !tbaa !9
  %366 = getelementptr inbounds i8, ptr %.0132277, i64 2
  %367 = load i8, ptr %360, align 1, !tbaa !9
  %368 = getelementptr inbounds i8, ptr %.0131278, i64 2
  %369 = load i8, ptr %362, align 1, !tbaa !9
  %370 = xor i8 %369, %367
  %371 = getelementptr inbounds i8, ptr %.0133276, i64 2
  store i8 %370, ptr %365, align 1, !tbaa !9
  %372 = getelementptr inbounds i8, ptr %.0132277, i64 3
  %373 = load i8, ptr %366, align 1, !tbaa !9
  %374 = getelementptr inbounds i8, ptr %.0131278, i64 3
  %375 = load i8, ptr %368, align 1, !tbaa !9
  %376 = xor i8 %375, %373
  %377 = getelementptr inbounds i8, ptr %.0133276, i64 3
  store i8 %376, ptr %371, align 1, !tbaa !9
  %378 = getelementptr inbounds i8, ptr %.0132277, i64 4
  %379 = load i8, ptr %372, align 1, !tbaa !9
  %380 = getelementptr inbounds i8, ptr %.0131278, i64 4
  %381 = load i8, ptr %374, align 1, !tbaa !9
  %382 = xor i8 %381, %379
  %383 = getelementptr inbounds i8, ptr %.0133276, i64 4
  store i8 %382, ptr %377, align 1, !tbaa !9
  %384 = add nsw i32 %.0130279, -4
  %.not204.3 = icmp eq i32 %384, 0
  br i1 %.not204.3, label %iter.check407, label %.lr.ph280, !llvm.loop !67

iter.check407:                                    ; preds = %.lr.ph280.prol.loopexit, %.lr.ph280, %vec.epilog.middle.block370, %middle.block347
  %385 = add nuw nsw i64 %.0191.lcssa, 4294967287
  %386 = and i64 %385, 4294967295
  %387 = add nuw nsw i64 %386, 1
  %min.iters.check405 = icmp ult i64 %386, 7
  br i1 %min.iters.check405, label %.lr.ph285.preheader, label %vector.memcheck402

vector.memcheck402:                               ; preds = %iter.check407
  %388 = add nuw nsw i64 %.0191.lcssa, 4294967287
  %389 = and i64 %388, 4294967295
  %390 = getelementptr i8, ptr %11, i64 %389
  %scevgep = getelementptr i8, ptr %390, i64 1
  %391 = add nuw nsw i64 %389, 9
  %scevgep403 = getelementptr i8, ptr %.0189.lcssa, i64 %391
  %bound0 = icmp ult ptr %11, %scevgep403
  %bound1 = icmp ult ptr %166, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph285.preheader, label %vector.main.loop.iter.check409

vector.main.loop.iter.check409:                   ; preds = %vector.memcheck402
  %min.iters.check408 = icmp ult i64 %386, 31
  br i1 %min.iters.check408, label %vec.epilog.ph427, label %vector.ph410

vector.ph410:                                     ; preds = %vector.main.loop.iter.check409
  %n.vec412 = and i64 %387, 8589934560
  br label %vector.body413

vector.body413:                                   ; preds = %vector.body413, %vector.ph410
  %index414 = phi i64 [ 0, %vector.ph410 ], [ %index.next423, %vector.body413 ]
  %next.gep415 = getelementptr i8, ptr %166, i64 %index414
  %next.gep417 = getelementptr i8, ptr %11, i64 %index414
  %392 = getelementptr i8, ptr %next.gep415, i64 16
  %wide.load419 = load <16 x i8>, ptr %next.gep415, align 1, !tbaa !9, !alias.scope !68
  %wide.load420 = load <16 x i8>, ptr %392, align 1, !tbaa !9, !alias.scope !68
  %393 = getelementptr i8, ptr %next.gep417, i64 16
  %wide.load421 = load <16 x i8>, ptr %next.gep417, align 16, !tbaa !9, !alias.scope !71, !noalias !68
  %wide.load422 = load <16 x i8>, ptr %393, align 16, !tbaa !9, !alias.scope !71, !noalias !68
  %394 = xor <16 x i8> %wide.load421, %wide.load419
  %395 = xor <16 x i8> %wide.load422, %wide.load420
  store <16 x i8> %394, ptr %next.gep417, align 16, !tbaa !9, !alias.scope !71, !noalias !68
  store <16 x i8> %395, ptr %393, align 16, !tbaa !9, !alias.scope !71, !noalias !68
  %index.next423 = add nuw i64 %index414, 32
  %396 = icmp eq i64 %index.next423, %n.vec412
  br i1 %396, label %middle.block404, label %vector.body413, !llvm.loop !73

middle.block404:                                  ; preds = %vector.body413
  %cmp.n424 = icmp eq i64 %387, %n.vec412
  br i1 %cmp.n424, label %.loopexit, label %vec.epilog.iter.check428

vec.epilog.iter.check428:                         ; preds = %middle.block404
  %ind.end443 = getelementptr i8, ptr %11, i64 %n.vec412
  %ind.end440 = getelementptr i8, ptr %166, i64 %n.vec412
  %.cast436 = trunc i64 %n.vec412 to i32
  %ind.end437 = sub i32 %171, %.cast436
  %n.vec.remaining429 = and i64 %387, 24
  %min.epilog.iters.check430 = icmp eq i64 %n.vec.remaining429, 0
  br i1 %min.epilog.iters.check430, label %.lr.ph285.preheader, label %vec.epilog.ph427

vec.epilog.ph427:                                 ; preds = %vector.main.loop.iter.check409, %vec.epilog.iter.check428
  %vec.epilog.resume.val431 = phi i64 [ %n.vec412, %vec.epilog.iter.check428 ], [ 0, %vector.main.loop.iter.check409 ]
  %n.vec433 = and i64 %387, 8589934584
  %.cast434 = trunc i64 %n.vec433 to i32
  %ind.end435 = sub i32 %171, %.cast434
  %ind.end439 = getelementptr i8, ptr %166, i64 %n.vec433
  %ind.end442 = getelementptr i8, ptr %11, i64 %n.vec433
  br label %vec.epilog.vector.body445

vec.epilog.vector.body445:                        ; preds = %vec.epilog.vector.body445, %vec.epilog.ph427
  %index446 = phi i64 [ %vec.epilog.resume.val431, %vec.epilog.ph427 ], [ %index.next451, %vec.epilog.vector.body445 ]
  %next.gep447 = getelementptr i8, ptr %166, i64 %index446
  %next.gep448 = getelementptr i8, ptr %11, i64 %index446
  %wide.load449 = load <8 x i8>, ptr %next.gep447, align 1, !tbaa !9, !alias.scope !74
  %wide.load450 = load <8 x i8>, ptr %next.gep448, align 8, !tbaa !9, !alias.scope !77, !noalias !74
  %397 = xor <8 x i8> %wide.load450, %wide.load449
  store <8 x i8> %397, ptr %next.gep448, align 8, !tbaa !9, !alias.scope !77, !noalias !74
  %index.next451 = add nuw i64 %index446, 8
  %398 = icmp eq i64 %index.next451, %n.vec433
  br i1 %398, label %vec.epilog.middle.block425, label %vec.epilog.vector.body445, !llvm.loop !79

vec.epilog.middle.block425:                       ; preds = %vec.epilog.vector.body445
  %cmp.n452 = icmp eq i64 %387, %n.vec433
  br i1 %cmp.n452, label %.loopexit, label %.lr.ph285.preheader

.lr.ph285.preheader:                              ; preds = %vec.epilog.middle.block425, %vector.memcheck402, %iter.check407, %vec.epilog.iter.check428
  %.0284.ph = phi i32 [ %171, %iter.check407 ], [ %171, %vector.memcheck402 ], [ %ind.end437, %vec.epilog.iter.check428 ], [ %ind.end435, %vec.epilog.middle.block425 ]
  %.0128283.ph = phi ptr [ %166, %iter.check407 ], [ %166, %vector.memcheck402 ], [ %ind.end440, %vec.epilog.iter.check428 ], [ %ind.end439, %vec.epilog.middle.block425 ]
  %.0129282.ph = phi ptr [ %11, %iter.check407 ], [ %11, %vector.memcheck402 ], [ %ind.end443, %vec.epilog.iter.check428 ], [ %ind.end442, %vec.epilog.middle.block425 ]
  %399 = add nsw i32 %.0284.ph, -1
  %xtraiter681 = and i32 %.0284.ph, 3
  %lcmp.mod682.not = icmp eq i32 %xtraiter681, 0
  br i1 %lcmp.mod682.not, label %.lr.ph285.prol.loopexit, label %.lr.ph285.prol

.lr.ph285.prol:                                   ; preds = %.lr.ph285.preheader, %.lr.ph285.prol
  %.0284.prol = phi i32 [ %405, %.lr.ph285.prol ], [ %.0284.ph, %.lr.ph285.preheader ]
  %.0128283.prol = phi ptr [ %400, %.lr.ph285.prol ], [ %.0128283.ph, %.lr.ph285.preheader ]
  %.0129282.prol = phi ptr [ %402, %.lr.ph285.prol ], [ %.0129282.ph, %.lr.ph285.preheader ]
  %prol.iter683 = phi i32 [ %prol.iter683.next, %.lr.ph285.prol ], [ 0, %.lr.ph285.preheader ]
  %400 = getelementptr inbounds i8, ptr %.0128283.prol, i64 1
  %401 = load i8, ptr %.0128283.prol, align 1, !tbaa !9
  %402 = getelementptr inbounds i8, ptr %.0129282.prol, i64 1
  %403 = load i8, ptr %.0129282.prol, align 1, !tbaa !9
  %404 = xor i8 %403, %401
  store i8 %404, ptr %.0129282.prol, align 1, !tbaa !9
  %405 = add nsw i32 %.0284.prol, -1
  %prol.iter683.next = add i32 %prol.iter683, 1
  %prol.iter683.cmp.not = icmp eq i32 %prol.iter683.next, %xtraiter681
  br i1 %prol.iter683.cmp.not, label %.lr.ph285.prol.loopexit, label %.lr.ph285.prol, !llvm.loop !80

.lr.ph285.prol.loopexit:                          ; preds = %.lr.ph285.prol, %.lr.ph285.preheader
  %.0284.unr = phi i32 [ %.0284.ph, %.lr.ph285.preheader ], [ %405, %.lr.ph285.prol ]
  %.0128283.unr = phi ptr [ %.0128283.ph, %.lr.ph285.preheader ], [ %400, %.lr.ph285.prol ]
  %.0129282.unr = phi ptr [ %.0129282.ph, %.lr.ph285.preheader ], [ %402, %.lr.ph285.prol ]
  %406 = icmp ult i32 %399, 3
  br i1 %406, label %.loopexit, label %.lr.ph285

.lr.ph285:                                        ; preds = %.lr.ph285.prol.loopexit, %.lr.ph285
  %.0284 = phi i32 [ %427, %.lr.ph285 ], [ %.0284.unr, %.lr.ph285.prol.loopexit ]
  %.0128283 = phi ptr [ %422, %.lr.ph285 ], [ %.0128283.unr, %.lr.ph285.prol.loopexit ]
  %.0129282 = phi ptr [ %424, %.lr.ph285 ], [ %.0129282.unr, %.lr.ph285.prol.loopexit ]
  %407 = getelementptr inbounds i8, ptr %.0128283, i64 1
  %408 = load i8, ptr %.0128283, align 1, !tbaa !9
  %409 = getelementptr inbounds i8, ptr %.0129282, i64 1
  %410 = load i8, ptr %.0129282, align 1, !tbaa !9
  %411 = xor i8 %410, %408
  store i8 %411, ptr %.0129282, align 1, !tbaa !9
  %412 = getelementptr inbounds i8, ptr %.0128283, i64 2
  %413 = load i8, ptr %407, align 1, !tbaa !9
  %414 = getelementptr inbounds i8, ptr %.0129282, i64 2
  %415 = load i8, ptr %409, align 1, !tbaa !9
  %416 = xor i8 %415, %413
  store i8 %416, ptr %409, align 1, !tbaa !9
  %417 = getelementptr inbounds i8, ptr %.0128283, i64 3
  %418 = load i8, ptr %412, align 1, !tbaa !9
  %419 = getelementptr inbounds i8, ptr %.0129282, i64 3
  %420 = load i8, ptr %414, align 1, !tbaa !9
  %421 = xor i8 %420, %418
  store i8 %421, ptr %414, align 1, !tbaa !9
  %422 = getelementptr inbounds i8, ptr %.0128283, i64 4
  %423 = load i8, ptr %417, align 1, !tbaa !9
  %424 = getelementptr inbounds i8, ptr %.0129282, i64 4
  %425 = load i8, ptr %419, align 1, !tbaa !9
  %426 = xor i8 %425, %423
  store i8 %426, ptr %419, align 1, !tbaa !9
  %427 = add nsw i32 %.0284, -4
  %.not205.3 = icmp eq i32 %427, 0
  br i1 %.not205.3, label %.loopexit, label %.lr.ph285, !llvm.loop !81

.loopexit:                                        ; preds = %.lr.ph285.prol.loopexit, %.lr.ph285, %.lr.ph306.prol.loopexit, %.lr.ph306, %middle.block404, %vec.epilog.middle.block425, %middle.block629, %vec.epilog.middle.block650, %.preheader224.preheader
  %.1 = phi ptr [ %170, %.preheader224.preheader ], [ %.0190.lcssa, %vec.epilog.middle.block650 ], [ %.0190.lcssa, %middle.block629 ], [ %170, %vec.epilog.middle.block425 ], [ %170, %middle.block404 ], [ %.0190.lcssa, %.lr.ph306 ], [ %.0190.lcssa, %.lr.ph306.prol.loopexit ], [ %170, %.lr.ph285 ], [ %170, %.lr.ph285.prol.loopexit ]
  %.0187 = phi i32 [ 0, %.preheader224.preheader ], [ %53, %vec.epilog.middle.block650 ], [ %53, %middle.block629 ], [ %171, %vec.epilog.middle.block425 ], [ %171, %middle.block404 ], [ %53, %.lr.ph306 ], [ %53, %.lr.ph306.prol.loopexit ], [ %171, %.lr.ph285 ], [ %171, %.lr.ph285.prol.loopexit ]
  %428 = zext nneg i32 %.0187 to i64
  %429 = getelementptr inbounds i8, ptr %.1, i64 %428
  br label %430

430:                                              ; preds = %.loopexit, %22
  %.2 = phi ptr [ %429, %.loopexit ], [ %3, %22 ]
  %431 = getelementptr inbounds i8, ptr %11, i64 8
  call void @lotus_or_locus_gen_tag(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %11, ptr noundef nonnull %431)
  %432 = load i64, ptr %1, align 8, !tbaa !5
  %433 = call i32 @aead_check_tag(ptr noundef %0, i64 noundef %432, ptr noundef nonnull %11, ptr noundef %.2, i32 noundef 8) #5
  br label %434

434:                                              ; preds = %9, %430
  %.0188 = phi i32 [ %433, %430 ], [ -1, %9 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %10) #5
  ret i32 %.0188
}

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

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_process_ad(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @lotus_or_locus_mul_2(ptr noundef) local_unnamed_addr #3

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

declare void @gift64t_encrypt(ptr noundef, ptr noundef, ptr noundef, i16 noundef zeroext) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden void @lotus_or_locus_gen_tag(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @aead_check_tag(ptr noundef, i64 noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

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

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

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,VectorCombinePass