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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @schwaemm_128_128_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 [8 x i32], align 16
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %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 i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca i32, align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = 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 32, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %51 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %51, ptr %21, align 8, !tbaa !5
  %52 = load ptr, ptr %13, align 8, !tbaa !5
  %53 = load i64, ptr %15, align 8, !tbaa !9
  %54 = icmp ult i64 %53, 16
  br i1 %54, label %55, label %56

55:                                               ; preds = %9
  store i32 -1, ptr %10, align 4
  store i32 1, ptr %22, align 4
  br label %388

56:                                               ; preds = %9
  %57 = load i64, ptr %15, align 8, !tbaa !9
  %58 = sub i64 %57, 16
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %58, ptr %59, align 8, !tbaa !9
  %60 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %61 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %60, ptr align 1 %61, i64 16, i1 false)
  %62 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %63 = getelementptr inbounds i8, ptr %62, i64 16
  %64 = load ptr, ptr %19, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %63, ptr align 1 %64, i64 16, i1 false)
  %65 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  call void @sparkle_256(ptr noundef %65, i32 noundef 10)
  %66 = load i64, ptr %17, align 8, !tbaa !9
  %67 = icmp ugt i64 %66, 0
  br i1 %67, label %68, label %72

68:                                               ; preds = %56
  %69 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %70 = load ptr, ptr %16, align 8, !tbaa !5
  %71 = load i64, ptr %17, align 8, !tbaa !9
  call void @schwaemm_128_128_authenticate(ptr noundef %69, ptr noundef %70, i64 noundef %71)
  br label %72

72:                                               ; preds = %68, %56
  %73 = load i64, ptr %15, align 8, !tbaa !9
  %74 = sub i64 %73, 16
  store i64 %74, ptr %15, align 8, !tbaa !9
  %75 = load i64, ptr %15, align 8, !tbaa !9
  %76 = icmp ugt i64 %75, 0
  br i1 %76, label %77, label %357

77:                                               ; preds = %72
  br label %78

78:                                               ; preds = %161, %77
  %79 = load i64, ptr %15, align 8, !tbaa !9
  %80 = icmp ugt i64 %79, 16
  br i1 %80, label %81, label %169

81:                                               ; preds = %78
  br label %82

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  %83 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %83, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %84 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %84, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %85 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %85, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 16, ptr %26, align 4, !tbaa !11
  br label %86

86:                                               ; preds = %89, %82
  %87 = load i32, ptr %26, align 4, !tbaa !11
  %88 = icmp ugt i32 %87, 0
  br i1 %88, label %89, label %104

89:                                               ; preds = %86
  %90 = load ptr, ptr %24, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i32 1
  store ptr %91, ptr %24, align 8, !tbaa !5
  %92 = load i8, ptr %90, align 1, !tbaa !13
  %93 = zext i8 %92 to i32
  %94 = load ptr, ptr %25, align 8, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %94, i32 1
  store ptr %95, ptr %25, align 8, !tbaa !5
  %96 = load i8, ptr %94, align 1, !tbaa !13
  %97 = zext i8 %96 to i32
  %98 = xor i32 %93, %97
  %99 = trunc i32 %98 to i8
  %100 = load ptr, ptr %23, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i32 1
  store ptr %101, ptr %23, align 8, !tbaa !5
  store i8 %99, ptr %100, align 1, !tbaa !13
  %102 = load i32, ptr %26, align 4, !tbaa !11
  %103 = add i32 %102, -1
  store i32 %103, ptr %26, align 4, !tbaa !11
  br label %86, !llvm.loop !14

104:                                              ; preds = %86
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  br label %105

105:                                              ; preds = %104
  br label %106

106:                                              ; preds = %105
  br label %107

107:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %108 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %109 = load i32, ptr %108, align 16, !tbaa !11
  store i32 %109, ptr %27, align 4, !tbaa !11
  %110 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %111 = load i32, ptr %110, align 8, !tbaa !11
  %112 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 4
  %113 = load i32, ptr %112, align 16, !tbaa !11
  %114 = xor i32 %111, %113
  %115 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store i32 %114, ptr %115, align 16, !tbaa !11
  %116 = load i32, ptr %27, align 4, !tbaa !11
  %117 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 6
  %118 = load i32, ptr %117, align 8, !tbaa !11
  %119 = xor i32 %116, %118
  %120 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %121 = load i32, ptr %120, align 8, !tbaa !11
  %122 = xor i32 %121, %119
  store i32 %122, ptr %120, align 8, !tbaa !11
  %123 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  %124 = load i32, ptr %123, align 4, !tbaa !11
  store i32 %124, ptr %27, align 4, !tbaa !11
  %125 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %126 = load i32, ptr %125, align 4, !tbaa !11
  %127 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 5
  %128 = load i32, ptr %127, align 4, !tbaa !11
  %129 = xor i32 %126, %128
  %130 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  store i32 %129, ptr %130, align 4, !tbaa !11
  %131 = load i32, ptr %27, align 4, !tbaa !11
  %132 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 7
  %133 = load i32, ptr %132, align 4, !tbaa !11
  %134 = xor i32 %131, %133
  %135 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %136 = load i32, ptr %135, align 4, !tbaa !11
  %137 = xor i32 %136, %134
  store i32 %137, ptr %135, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %138

138:                                              ; preds = %107
  br label %139

139:                                              ; preds = %138
  br label %140

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %141 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %141, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  %142 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %142, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  store i32 16, ptr %30, align 4, !tbaa !11
  br label %143

143:                                              ; preds = %146, %140
  %144 = load i32, ptr %30, align 4, !tbaa !11
  %145 = icmp ugt i32 %144, 0
  br i1 %145, label %146, label %159

146:                                              ; preds = %143
  %147 = load ptr, ptr %29, align 8, !tbaa !5
  %148 = getelementptr inbounds i8, ptr %147, i32 1
  store ptr %148, ptr %29, align 8, !tbaa !5
  %149 = load i8, ptr %147, align 1, !tbaa !13
  %150 = zext i8 %149 to i32
  %151 = load ptr, ptr %28, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i32 1
  store ptr %152, ptr %28, align 8, !tbaa !5
  %153 = load i8, ptr %151, align 1, !tbaa !13
  %154 = zext i8 %153 to i32
  %155 = xor i32 %154, %150
  %156 = trunc i32 %155 to i8
  store i8 %156, ptr %151, align 1, !tbaa !13
  %157 = load i32, ptr %30, align 4, !tbaa !11
  %158 = add i32 %157, -1
  store i32 %158, ptr %30, align 4, !tbaa !11
  br label %143, !llvm.loop !16

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

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  %162 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  call void @sparkle_256(ptr noundef %162, i32 noundef 7)
  %163 = load ptr, ptr %14, align 8, !tbaa !5
  %164 = getelementptr inbounds i8, ptr %163, i64 16
  store ptr %164, ptr %14, align 8, !tbaa !5
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 16
  store ptr %166, ptr %11, align 8, !tbaa !5
  %167 = load i64, ptr %15, align 8, !tbaa !9
  %168 = sub i64 %167, 16
  store i64 %168, ptr %15, align 8, !tbaa !9
  br label %78, !llvm.loop !17

169:                                              ; preds = %78
  %170 = load i64, ptr %15, align 8, !tbaa !9
  %171 = icmp eq i64 %170, 16
  br i1 %171, label %172, label %256

172:                                              ; preds = %169
  br label %173

173:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %174, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %175 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %175, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %176 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %176, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 16, ptr %34, align 4, !tbaa !11
  br label %177

177:                                              ; preds = %180, %173
  %178 = load i32, ptr %34, align 4, !tbaa !11
  %179 = icmp ugt i32 %178, 0
  br i1 %179, label %180, label %195

180:                                              ; preds = %177
  %181 = load ptr, ptr %32, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %181, i32 1
  store ptr %182, ptr %32, align 8, !tbaa !5
  %183 = load i8, ptr %181, align 1, !tbaa !13
  %184 = zext i8 %183 to i32
  %185 = load ptr, ptr %33, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %185, i32 1
  store ptr %186, ptr %33, align 8, !tbaa !5
  %187 = load i8, ptr %185, align 1, !tbaa !13
  %188 = zext i8 %187 to i32
  %189 = xor i32 %184, %188
  %190 = trunc i32 %189 to i8
  %191 = load ptr, ptr %31, align 8, !tbaa !5
  %192 = getelementptr inbounds i8, ptr %191, i32 1
  store ptr %192, ptr %31, align 8, !tbaa !5
  store i8 %190, ptr %191, align 1, !tbaa !13
  %193 = load i32, ptr %34, align 4, !tbaa !11
  %194 = add i32 %193, -1
  store i32 %194, ptr %34, align 4, !tbaa !11
  br label %177, !llvm.loop !18

195:                                              ; preds = %177
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %196

196:                                              ; preds = %195
  br label %197

197:                                              ; preds = %196
  %198 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 7
  %199 = load i32, ptr %198, align 4, !tbaa !11
  %200 = xor i32 %199, 117440512
  store i32 %200, ptr %198, align 4, !tbaa !11
  br label %201

201:                                              ; preds = %197
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %202 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %203 = load i32, ptr %202, align 16, !tbaa !11
  store i32 %203, ptr %35, align 4, !tbaa !11
  %204 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %205 = load i32, ptr %204, align 8, !tbaa !11
  %206 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 4
  %207 = load i32, ptr %206, align 16, !tbaa !11
  %208 = xor i32 %205, %207
  %209 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store i32 %208, ptr %209, align 16, !tbaa !11
  %210 = load i32, ptr %35, align 4, !tbaa !11
  %211 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 6
  %212 = load i32, ptr %211, align 8, !tbaa !11
  %213 = xor i32 %210, %212
  %214 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %215 = load i32, ptr %214, align 8, !tbaa !11
  %216 = xor i32 %215, %213
  store i32 %216, ptr %214, align 8, !tbaa !11
  %217 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  %218 = load i32, ptr %217, align 4, !tbaa !11
  store i32 %218, ptr %35, align 4, !tbaa !11
  %219 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %220 = load i32, ptr %219, align 4, !tbaa !11
  %221 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 5
  %222 = load i32, ptr %221, align 4, !tbaa !11
  %223 = xor i32 %220, %222
  %224 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  store i32 %223, ptr %224, align 4, !tbaa !11
  %225 = load i32, ptr %35, align 4, !tbaa !11
  %226 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 7
  %227 = load i32, ptr %226, align 4, !tbaa !11
  %228 = xor i32 %225, %227
  %229 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = xor i32 %230, %228
  store i32 %231, ptr %229, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %232

232:                                              ; preds = %201
  br label %233

233:                                              ; preds = %232
  br label %234

234:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %235 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %235, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %236 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %236, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  store i32 16, ptr %38, align 4, !tbaa !11
  br label %237

237:                                              ; preds = %240, %234
  %238 = load i32, ptr %38, align 4, !tbaa !11
  %239 = icmp ugt i32 %238, 0
  br i1 %239, label %240, label %253

240:                                              ; preds = %237
  %241 = load ptr, ptr %37, align 8, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %241, i32 1
  store ptr %242, ptr %37, align 8, !tbaa !5
  %243 = load i8, ptr %241, align 1, !tbaa !13
  %244 = zext i8 %243 to i32
  %245 = load ptr, ptr %36, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %245, i32 1
  store ptr %246, ptr %36, align 8, !tbaa !5
  %247 = load i8, ptr %245, align 1, !tbaa !13
  %248 = zext i8 %247 to i32
  %249 = xor i32 %248, %244
  %250 = trunc i32 %249 to i8
  store i8 %250, ptr %245, align 1, !tbaa !13
  %251 = load i32, ptr %38, align 4, !tbaa !11
  %252 = add i32 %251, -1
  store i32 %252, ptr %38, align 4, !tbaa !11
  br label %237, !llvm.loop !19

253:                                              ; preds = %237
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  br label %254

254:                                              ; preds = %253
  br label %255

255:                                              ; preds = %254
  br label %352

256:                                              ; preds = %169
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #4
  %257 = load i64, ptr %15, align 8, !tbaa !9
  %258 = trunc i64 %257 to i32
  store i32 %258, ptr %39, align 4, !tbaa !11
  br label %259

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  %260 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %260, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %261 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %261, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %262, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  %263 = load i32, ptr %39, align 4, !tbaa !11
  store i32 %263, ptr %43, align 4, !tbaa !11
  br label %264

264:                                              ; preds = %267, %259
  %265 = load i32, ptr %43, align 4, !tbaa !11
  %266 = icmp ugt i32 %265, 0
  br i1 %266, label %267, label %282

267:                                              ; preds = %264
  %268 = load ptr, ptr %41, align 8, !tbaa !5
  %269 = getelementptr inbounds i8, ptr %268, i32 1
  store ptr %269, ptr %41, align 8, !tbaa !5
  %270 = load i8, ptr %268, align 1, !tbaa !13
  %271 = zext i8 %270 to i32
  %272 = load ptr, ptr %42, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %272, i32 1
  store ptr %273, ptr %42, align 8, !tbaa !5
  %274 = load i8, ptr %272, align 1, !tbaa !13
  %275 = zext i8 %274 to i32
  %276 = xor i32 %271, %275
  %277 = trunc i32 %276 to i8
  %278 = load ptr, ptr %40, align 8, !tbaa !5
  %279 = getelementptr inbounds i8, ptr %278, i32 1
  store ptr %279, ptr %40, align 8, !tbaa !5
  store i8 %277, ptr %278, align 1, !tbaa !13
  %280 = load i32, ptr %43, align 4, !tbaa !11
  %281 = add i32 %280, -1
  store i32 %281, ptr %43, align 4, !tbaa !11
  br label %264, !llvm.loop !20

282:                                              ; preds = %264
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283
  %285 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 7
  %286 = load i32, ptr %285, align 4, !tbaa !11
  %287 = xor i32 %286, 100663296
  store i32 %287, ptr %285, align 4, !tbaa !11
  br label %288

288:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  %289 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %290 = load i32, ptr %289, align 16, !tbaa !11
  store i32 %290, ptr %44, align 4, !tbaa !11
  %291 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %292 = load i32, ptr %291, align 8, !tbaa !11
  %293 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 4
  %294 = load i32, ptr %293, align 16, !tbaa !11
  %295 = xor i32 %292, %294
  %296 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store i32 %295, ptr %296, align 16, !tbaa !11
  %297 = load i32, ptr %44, align 4, !tbaa !11
  %298 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 6
  %299 = load i32, ptr %298, align 8, !tbaa !11
  %300 = xor i32 %297, %299
  %301 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 2
  %302 = load i32, ptr %301, align 8, !tbaa !11
  %303 = xor i32 %302, %300
  store i32 %303, ptr %301, align 8, !tbaa !11
  %304 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  %305 = load i32, ptr %304, align 4, !tbaa !11
  store i32 %305, ptr %44, align 4, !tbaa !11
  %306 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %307 = load i32, ptr %306, align 4, !tbaa !11
  %308 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 5
  %309 = load i32, ptr %308, align 4, !tbaa !11
  %310 = xor i32 %307, %309
  %311 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 1
  store i32 %310, ptr %311, align 4, !tbaa !11
  %312 = load i32, ptr %44, align 4, !tbaa !11
  %313 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 7
  %314 = load i32, ptr %313, align 4, !tbaa !11
  %315 = xor i32 %312, %314
  %316 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 3
  %317 = load i32, ptr %316, align 4, !tbaa !11
  %318 = xor i32 %317, %315
  store i32 %318, ptr %316, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  br label %319

319:                                              ; preds = %288
  br label %320

320:                                              ; preds = %319
  br label %321

321:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  %322 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  store ptr %322, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  %323 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %323, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  %324 = load i32, ptr %39, align 4, !tbaa !11
  store i32 %324, ptr %47, align 4, !tbaa !11
  br label %325

325:                                              ; preds = %328, %321
  %326 = load i32, ptr %47, align 4, !tbaa !11
  %327 = icmp ugt i32 %326, 0
  br i1 %327, label %328, label %341

328:                                              ; preds = %325
  %329 = load ptr, ptr %46, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %329, i32 1
  store ptr %330, ptr %46, align 8, !tbaa !5
  %331 = load i8, ptr %329, align 1, !tbaa !13
  %332 = zext i8 %331 to i32
  %333 = load ptr, ptr %45, align 8, !tbaa !5
  %334 = getelementptr inbounds i8, ptr %333, i32 1
  store ptr %334, ptr %45, align 8, !tbaa !5
  %335 = load i8, ptr %333, align 1, !tbaa !13
  %336 = zext i8 %335 to i32
  %337 = xor i32 %336, %332
  %338 = trunc i32 %337 to i8
  store i8 %338, ptr %333, align 1, !tbaa !13
  %339 = load i32, ptr %47, align 4, !tbaa !11
  %340 = add i32 %339, -1
  store i32 %340, ptr %47, align 4, !tbaa !11
  br label %325, !llvm.loop !21

341:                                              ; preds = %325
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  br label %342

342:                                              ; preds = %341
  br label %343

343:                                              ; preds = %342
  %344 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %345 = load i32, ptr %39, align 4, !tbaa !11
  %346 = zext i32 %345 to i64
  %347 = getelementptr inbounds i8, ptr %344, i64 %346
  %348 = load i8, ptr %347, align 1, !tbaa !13
  %349 = zext i8 %348 to i32
  %350 = xor i32 %349, 128
  %351 = trunc i32 %350 to i8
  store i8 %351, ptr %347, align 1, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #4
  br label %352

352:                                              ; preds = %343, %255
  %353 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  call void @sparkle_256(ptr noundef %353, i32 noundef 10)
  %354 = load i64, ptr %15, align 8, !tbaa !9
  %355 = load ptr, ptr %14, align 8, !tbaa !5
  %356 = getelementptr inbounds i8, ptr %355, i64 %354
  store ptr %356, ptr %14, align 8, !tbaa !5
  br label %357

357:                                              ; preds = %352, %72
  br label %358

358:                                              ; preds = %357
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  %359 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %360 = getelementptr inbounds i8, ptr %359, i64 16
  store ptr %360, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  %361 = load ptr, ptr %19, align 8, !tbaa !5
  store ptr %361, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  store i32 16, ptr %50, align 4, !tbaa !11
  br label %362

362:                                              ; preds = %365, %358
  %363 = load i32, ptr %50, align 4, !tbaa !11
  %364 = icmp ugt i32 %363, 0
  br i1 %364, label %365, label %378

365:                                              ; preds = %362
  %366 = load ptr, ptr %49, align 8, !tbaa !5
  %367 = getelementptr inbounds i8, ptr %366, i32 1
  store ptr %367, ptr %49, align 8, !tbaa !5
  %368 = load i8, ptr %366, align 1, !tbaa !13
  %369 = zext i8 %368 to i32
  %370 = load ptr, ptr %48, align 8, !tbaa !5
  %371 = getelementptr inbounds i8, ptr %370, i32 1
  store ptr %371, ptr %48, align 8, !tbaa !5
  %372 = load i8, ptr %370, align 1, !tbaa !13
  %373 = zext i8 %372 to i32
  %374 = xor i32 %373, %369
  %375 = trunc i32 %374 to i8
  store i8 %375, ptr %370, align 1, !tbaa !13
  %376 = load i32, ptr %50, align 4, !tbaa !11
  %377 = add i32 %376, -1
  store i32 %377, ptr %50, align 4, !tbaa !11
  br label %362, !llvm.loop !22

378:                                              ; preds = %362
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379
  %381 = load ptr, ptr %21, align 8, !tbaa !5
  %382 = load ptr, ptr %12, align 8, !tbaa !5
  %383 = load i64, ptr %382, align 8, !tbaa !9
  %384 = getelementptr inbounds [8 x i32], ptr %20, i64 0, i64 0
  %385 = getelementptr inbounds i8, ptr %384, i64 16
  %386 = load ptr, ptr %14, align 8, !tbaa !5
  %387 = call i32 @aead_check_tag(ptr noundef %381, i64 noundef %383, ptr noundef %385, ptr noundef %386, i32 noundef 16)
  store i32 %387, ptr %10, align 4
  store i32 1, ptr %22, align 4
  br label %388

388:                                              ; preds = %380, %55
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #4
  %389 = load i32, ptr %10, align 4
  ret i32 %389
}

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

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

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

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

declare void @sparkle_256(ptr noundef, i32 noundef) #3

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

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: readwrite) }
attributes #3 = { "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 = { 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}


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

; Function Attrs: nounwind uwtable
define dso_local i32 @schwaemm_128_128_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 nocapture noundef readonly %7, ptr nocapture noundef readonly %8) local_unnamed_addr #0 {
  %10 = alloca [8 x i32], align 16
  %11 = ptrtoint ptr %10 to i64
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #4
  %12 = icmp ult i64 %4, 16
  br i1 %12, label %435, label %13

13:                                               ; preds = %9
  %14 = add i64 %4, -16
  store i64 %14, ptr %1, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %10, ptr noundef nonnull align 1 dereferenceable(16) %7, i64 16, i1 false)
  %15 = getelementptr inbounds i8, ptr %10, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %15, ptr noundef nonnull align 1 dereferenceable(16) %8, i64 16, i1 false)
  call void @sparkle_256(ptr noundef nonnull %10, i32 noundef 10) #4
  %.not = icmp eq i64 %6, 0
  br i1 %.not, label %17, label %16

16:                                               ; preds = %13
  call void @schwaemm_128_128_authenticate(ptr noundef nonnull %10, ptr noundef %5, i64 noundef %6)
  br label %17

17:                                               ; preds = %16, %13
  %.not103 = icmp eq i64 %14, 0
  br i1 %.not103, label %429, label %.preheader112

.preheader112:                                    ; preds = %17
  %18 = icmp ugt i64 %14, 16
  br i1 %18, label %.preheader111.lr.ph, label %._crit_edge

.preheader111.lr.ph:                              ; preds = %.preheader112
  %19 = getelementptr inbounds i8, ptr %10, i64 8
  %20 = getelementptr inbounds i8, ptr %10, i64 24
  %21 = getelementptr inbounds i8, ptr %10, i64 4
  %22 = getelementptr inbounds i8, ptr %10, i64 12
  %23 = getelementptr inbounds i8, ptr %10, i64 20
  %24 = getelementptr inbounds i8, ptr %10, i64 28
  %25 = getelementptr inbounds i8, ptr %10, i64 1
  %26 = getelementptr inbounds i8, ptr %10, i64 2
  %27 = getelementptr inbounds i8, ptr %10, i64 3
  %28 = getelementptr inbounds i8, ptr %10, i64 4
  %29 = getelementptr inbounds i8, ptr %10, i64 5
  %30 = getelementptr inbounds i8, ptr %10, i64 6
  %31 = getelementptr inbounds i8, ptr %10, i64 7
  %32 = getelementptr inbounds i8, ptr %10, i64 8
  %33 = getelementptr inbounds i8, ptr %10, i64 9
  %34 = getelementptr inbounds i8, ptr %10, i64 10
  %35 = getelementptr inbounds i8, ptr %10, i64 11
  %36 = getelementptr inbounds i8, ptr %10, i64 12
  %37 = getelementptr inbounds i8, ptr %10, i64 13
  %38 = getelementptr inbounds i8, ptr %10, i64 14
  %39 = getelementptr inbounds i8, ptr %10, i64 15
  br label %.preheader111

.preheader111:                                    ; preds = %.preheader111.lr.ph, %.preheader111
  %.083122 = phi ptr [ %0, %.preheader111.lr.ph ], [ %167, %.preheader111 ]
  %.087121 = phi ptr [ %3, %.preheader111.lr.ph ], [ %166, %.preheader111 ]
  %.095120 = phi i64 [ %14, %.preheader111.lr.ph ], [ %168, %.preheader111 ]
  %40 = load i8, ptr %10, align 16, !tbaa !9
  %41 = getelementptr inbounds i8, ptr %.087121, i64 1
  %42 = load i8, ptr %.087121, align 1, !tbaa !9
  %43 = xor i8 %42, %40
  %44 = getelementptr inbounds i8, ptr %.083122, i64 1
  store i8 %43, ptr %.083122, align 1, !tbaa !9
  %45 = load i8, ptr %25, align 1, !tbaa !9
  %46 = getelementptr inbounds i8, ptr %.087121, i64 2
  %47 = load i8, ptr %41, align 1, !tbaa !9
  %48 = xor i8 %47, %45
  %49 = getelementptr inbounds i8, ptr %.083122, i64 2
  store i8 %48, ptr %44, align 1, !tbaa !9
  %50 = load i8, ptr %26, align 2, !tbaa !9
  %51 = getelementptr inbounds i8, ptr %.087121, i64 3
  %52 = load i8, ptr %46, align 1, !tbaa !9
  %53 = xor i8 %52, %50
  %54 = getelementptr inbounds i8, ptr %.083122, i64 3
  store i8 %53, ptr %49, align 1, !tbaa !9
  %55 = load i8, ptr %27, align 1, !tbaa !9
  %56 = getelementptr inbounds i8, ptr %.087121, i64 4
  %57 = load i8, ptr %51, align 1, !tbaa !9
  %58 = xor i8 %57, %55
  %59 = getelementptr inbounds i8, ptr %.083122, i64 4
  store i8 %58, ptr %54, align 1, !tbaa !9
  %60 = load i8, ptr %28, align 4, !tbaa !9
  %61 = getelementptr inbounds i8, ptr %.087121, i64 5
  %62 = load i8, ptr %56, align 1, !tbaa !9
  %63 = xor i8 %62, %60
  %64 = getelementptr inbounds i8, ptr %.083122, i64 5
  store i8 %63, ptr %59, align 1, !tbaa !9
  %65 = load i8, ptr %29, align 1, !tbaa !9
  %66 = getelementptr inbounds i8, ptr %.087121, i64 6
  %67 = load i8, ptr %61, align 1, !tbaa !9
  %68 = xor i8 %67, %65
  %69 = getelementptr inbounds i8, ptr %.083122, i64 6
  store i8 %68, ptr %64, align 1, !tbaa !9
  %70 = load i8, ptr %30, align 2, !tbaa !9
  %71 = getelementptr inbounds i8, ptr %.087121, i64 7
  %72 = load i8, ptr %66, align 1, !tbaa !9
  %73 = xor i8 %72, %70
  %74 = getelementptr inbounds i8, ptr %.083122, i64 7
  store i8 %73, ptr %69, align 1, !tbaa !9
  %75 = load i8, ptr %31, align 1, !tbaa !9
  %76 = getelementptr inbounds i8, ptr %.087121, i64 8
  %77 = load i8, ptr %71, align 1, !tbaa !9
  %78 = xor i8 %77, %75
  %79 = getelementptr inbounds i8, ptr %.083122, i64 8
  store i8 %78, ptr %74, align 1, !tbaa !9
  %80 = load i8, ptr %32, align 8, !tbaa !9
  %81 = getelementptr inbounds i8, ptr %.087121, i64 9
  %82 = load i8, ptr %76, align 1, !tbaa !9
  %83 = xor i8 %82, %80
  %84 = getelementptr inbounds i8, ptr %.083122, i64 9
  store i8 %83, ptr %79, align 1, !tbaa !9
  %85 = load i8, ptr %33, align 1, !tbaa !9
  %86 = getelementptr inbounds i8, ptr %.087121, i64 10
  %87 = load i8, ptr %81, align 1, !tbaa !9
  %88 = xor i8 %87, %85
  %89 = getelementptr inbounds i8, ptr %.083122, i64 10
  store i8 %88, ptr %84, align 1, !tbaa !9
  %90 = load i8, ptr %34, align 2, !tbaa !9
  %91 = getelementptr inbounds i8, ptr %.087121, i64 11
  %92 = load i8, ptr %86, align 1, !tbaa !9
  %93 = xor i8 %92, %90
  %94 = getelementptr inbounds i8, ptr %.083122, i64 11
  store i8 %93, ptr %89, align 1, !tbaa !9
  %95 = load i8, ptr %35, align 1, !tbaa !9
  %96 = getelementptr inbounds i8, ptr %.087121, i64 12
  %97 = load i8, ptr %91, align 1, !tbaa !9
  %98 = xor i8 %97, %95
  %99 = getelementptr inbounds i8, ptr %.083122, i64 12
  store i8 %98, ptr %94, align 1, !tbaa !9
  %100 = load i8, ptr %36, align 4, !tbaa !9
  %101 = getelementptr inbounds i8, ptr %.087121, i64 13
  %102 = load i8, ptr %96, align 1, !tbaa !9
  %103 = xor i8 %102, %100
  %104 = getelementptr inbounds i8, ptr %.083122, i64 13
  store i8 %103, ptr %99, align 1, !tbaa !9
  %105 = load i8, ptr %37, align 1, !tbaa !9
  %106 = getelementptr inbounds i8, ptr %.087121, i64 14
  %107 = load i8, ptr %101, align 1, !tbaa !9
  %108 = xor i8 %107, %105
  %109 = getelementptr inbounds i8, ptr %.083122, i64 14
  store i8 %108, ptr %104, align 1, !tbaa !9
  %110 = load i8, ptr %38, align 2, !tbaa !9
  %111 = getelementptr inbounds i8, ptr %.087121, i64 15
  %112 = load i8, ptr %106, align 1, !tbaa !9
  %113 = xor i8 %112, %110
  %114 = getelementptr inbounds i8, ptr %.083122, i64 15
  store i8 %113, ptr %109, align 1, !tbaa !9
  %115 = load i8, ptr %39, align 1, !tbaa !9
  %116 = load i8, ptr %111, align 1, !tbaa !9
  %117 = xor i8 %116, %115
  store i8 %117, ptr %114, align 1, !tbaa !9
  %118 = load i32, ptr %10, align 16, !tbaa !10
  %119 = load i32, ptr %19, align 8, !tbaa !10
  %120 = load i32, ptr %15, align 16, !tbaa !10
  %121 = load i32, ptr %20, align 8, !tbaa !10
  %122 = xor i32 %118, %121
  %123 = xor i32 %122, %119
  store i32 %123, ptr %19, align 8, !tbaa !10
  %124 = load i32, ptr %21, align 4, !tbaa !10
  %125 = load i32, ptr %22, align 4, !tbaa !10
  %126 = load i32, ptr %23, align 4, !tbaa !10
  %127 = xor i32 %126, %125
  store i32 %127, ptr %21, align 4, !tbaa !10
  %128 = load i32, ptr %24, align 4, !tbaa !10
  %129 = xor i32 %124, %128
  %130 = xor i32 %129, %125
  %131 = xor i32 %120, %119
  %132 = lshr i32 %131, 8
  %133 = lshr i32 %131, 16
  %134 = lshr i32 %131, 24
  %135 = insertelement <4 x i32> poison, i32 %131, i64 0
  %136 = insertelement <4 x i32> %135, i32 %132, i64 1
  %137 = insertelement <4 x i32> %136, i32 %133, i64 2
  %138 = insertelement <4 x i32> %137, i32 %134, i64 3
  %139 = trunc <4 x i32> %138 to <4 x i8>
  %140 = trunc i32 %127 to i8
  %141 = lshr i32 %127, 8
  %142 = trunc i32 %141 to i8
  %143 = lshr i32 %127, 16
  %144 = trunc i32 %143 to i8
  %145 = load <16 x i8>, ptr %31, align 1
  %146 = load i8, ptr %35, align 1, !tbaa !9
  %147 = trunc i32 %130 to i8
  %148 = lshr i32 %130, 8
  %149 = trunc i32 %148 to i8
  %150 = lshr i32 %130, 16
  %151 = trunc i32 %150 to i8
  %152 = lshr i32 %130, 24
  %153 = trunc nuw i32 %152 to i8
  %154 = load <16 x i8>, ptr %.083122, align 1, !tbaa !9
  %155 = shufflevector <4 x i8> %139, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %156 = insertelement <16 x i8> %155, i8 %140, i64 4
  %157 = insertelement <16 x i8> %156, i8 %142, i64 5
  %158 = insertelement <16 x i8> %157, i8 %144, i64 6
  %159 = shufflevector <16 x i8> %158, <16 x i8> %145, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %160 = insertelement <16 x i8> %159, i8 %146, i64 11
  %161 = insertelement <16 x i8> %160, i8 %147, i64 12
  %162 = insertelement <16 x i8> %161, i8 %149, i64 13
  %163 = insertelement <16 x i8> %162, i8 %151, i64 14
  %164 = insertelement <16 x i8> %163, i8 %153, i64 15
  %165 = xor <16 x i8> %154, %164
  store <16 x i8> %165, ptr %10, align 16, !tbaa !9
  call void @sparkle_256(ptr noundef nonnull %10, i32 noundef 7) #4
  %166 = getelementptr inbounds i8, ptr %.087121, i64 16
  %167 = getelementptr inbounds i8, ptr %.083122, i64 16
  %168 = add i64 %.095120, -16
  %169 = icmp ugt i64 %168, 16
  br i1 %169, label %.preheader111, label %._crit_edge, !llvm.loop !12

._crit_edge:                                      ; preds = %.preheader111, %.preheader112
  %.095.lcssa = phi i64 [ %14, %.preheader112 ], [ %168, %.preheader111 ]
  %.087.lcssa = phi ptr [ %3, %.preheader112 ], [ %166, %.preheader111 ]
  %.083.lcssa = phi ptr [ %0, %.preheader112 ], [ %167, %.preheader111 ]
  %.083.lcssa155 = ptrtoint ptr %.083.lcssa to i64
  %.087.lcssa156 = ptrtoint ptr %.087.lcssa to i64
  %170 = icmp eq i64 %.095.lcssa, 16
  br i1 %170, label %.preheader.preheader, label %iter.check

.preheader.preheader:                             ; preds = %._crit_edge
  %171 = getelementptr inbounds i8, ptr %10, i64 1
  %172 = load i8, ptr %10, align 16, !tbaa !9
  %173 = getelementptr inbounds i8, ptr %.087.lcssa, i64 1
  %174 = load i8, ptr %.087.lcssa, align 1, !tbaa !9
  %175 = xor i8 %174, %172
  %176 = getelementptr inbounds i8, ptr %.083.lcssa, i64 1
  store i8 %175, ptr %.083.lcssa, align 1, !tbaa !9
  %177 = getelementptr inbounds i8, ptr %10, i64 2
  %178 = load i8, ptr %171, align 1, !tbaa !9
  %179 = getelementptr inbounds i8, ptr %.087.lcssa, i64 2
  %180 = load i8, ptr %173, align 1, !tbaa !9
  %181 = xor i8 %180, %178
  %182 = getelementptr inbounds i8, ptr %.083.lcssa, i64 2
  store i8 %181, ptr %176, align 1, !tbaa !9
  %183 = getelementptr inbounds i8, ptr %10, i64 3
  %184 = load i8, ptr %177, align 2, !tbaa !9
  %185 = getelementptr inbounds i8, ptr %.087.lcssa, i64 3
  %186 = load i8, ptr %179, align 1, !tbaa !9
  %187 = xor i8 %186, %184
  %188 = getelementptr inbounds i8, ptr %.083.lcssa, i64 3
  store i8 %187, ptr %182, align 1, !tbaa !9
  %189 = getelementptr inbounds i8, ptr %10, i64 4
  %190 = load i8, ptr %183, align 1, !tbaa !9
  %191 = getelementptr inbounds i8, ptr %.087.lcssa, i64 4
  %192 = load i8, ptr %185, align 1, !tbaa !9
  %193 = xor i8 %192, %190
  %194 = getelementptr inbounds i8, ptr %.083.lcssa, i64 4
  store i8 %193, ptr %188, align 1, !tbaa !9
  %195 = getelementptr inbounds i8, ptr %10, i64 5
  %196 = load i8, ptr %189, align 4, !tbaa !9
  %197 = getelementptr inbounds i8, ptr %.087.lcssa, i64 5
  %198 = load i8, ptr %191, align 1, !tbaa !9
  %199 = xor i8 %198, %196
  %200 = getelementptr inbounds i8, ptr %.083.lcssa, i64 5
  store i8 %199, ptr %194, align 1, !tbaa !9
  %201 = getelementptr inbounds i8, ptr %10, i64 6
  %202 = load i8, ptr %195, align 1, !tbaa !9
  %203 = getelementptr inbounds i8, ptr %.087.lcssa, i64 6
  %204 = load i8, ptr %197, align 1, !tbaa !9
  %205 = xor i8 %204, %202
  %206 = getelementptr inbounds i8, ptr %.083.lcssa, i64 6
  store i8 %205, ptr %200, align 1, !tbaa !9
  %207 = getelementptr inbounds i8, ptr %10, i64 7
  %208 = load i8, ptr %201, align 2, !tbaa !9
  %209 = getelementptr inbounds i8, ptr %.087.lcssa, i64 7
  %210 = load i8, ptr %203, align 1, !tbaa !9
  %211 = xor i8 %210, %208
  %212 = getelementptr inbounds i8, ptr %.083.lcssa, i64 7
  store i8 %211, ptr %206, align 1, !tbaa !9
  %213 = getelementptr inbounds i8, ptr %10, i64 8
  %214 = load i8, ptr %207, align 1, !tbaa !9
  %215 = getelementptr inbounds i8, ptr %.087.lcssa, i64 8
  %216 = load i8, ptr %209, align 1, !tbaa !9
  %217 = xor i8 %216, %214
  %218 = getelementptr inbounds i8, ptr %.083.lcssa, i64 8
  store i8 %217, ptr %212, align 1, !tbaa !9
  %219 = getelementptr inbounds i8, ptr %10, i64 9
  %220 = load i8, ptr %213, align 8, !tbaa !9
  %221 = getelementptr inbounds i8, ptr %.087.lcssa, i64 9
  %222 = load i8, ptr %215, align 1, !tbaa !9
  %223 = xor i8 %222, %220
  %224 = getelementptr inbounds i8, ptr %.083.lcssa, i64 9
  store i8 %223, ptr %218, align 1, !tbaa !9
  %225 = getelementptr inbounds i8, ptr %10, i64 10
  %226 = load i8, ptr %219, align 1, !tbaa !9
  %227 = getelementptr inbounds i8, ptr %.087.lcssa, i64 10
  %228 = load i8, ptr %221, align 1, !tbaa !9
  %229 = xor i8 %228, %226
  %230 = getelementptr inbounds i8, ptr %.083.lcssa, i64 10
  store i8 %229, ptr %224, align 1, !tbaa !9
  %231 = getelementptr inbounds i8, ptr %10, i64 11
  %232 = load i8, ptr %225, align 2, !tbaa !9
  %233 = getelementptr inbounds i8, ptr %.087.lcssa, i64 11
  %234 = load i8, ptr %227, align 1, !tbaa !9
  %235 = xor i8 %234, %232
  %236 = getelementptr inbounds i8, ptr %.083.lcssa, i64 11
  store i8 %235, ptr %230, align 1, !tbaa !9
  %237 = getelementptr inbounds i8, ptr %10, i64 12
  %238 = load i8, ptr %231, align 1, !tbaa !9
  %239 = getelementptr inbounds i8, ptr %.087.lcssa, i64 12
  %240 = load i8, ptr %233, align 1, !tbaa !9
  %241 = xor i8 %240, %238
  %242 = getelementptr inbounds i8, ptr %.083.lcssa, i64 12
  store i8 %241, ptr %236, align 1, !tbaa !9
  %243 = getelementptr inbounds i8, ptr %10, i64 13
  %244 = load i8, ptr %237, align 4, !tbaa !9
  %245 = getelementptr inbounds i8, ptr %.087.lcssa, i64 13
  %246 = load i8, ptr %239, align 1, !tbaa !9
  %247 = xor i8 %246, %244
  %248 = getelementptr inbounds i8, ptr %.083.lcssa, i64 13
  store i8 %247, ptr %242, align 1, !tbaa !9
  %249 = getelementptr inbounds i8, ptr %10, i64 14
  %250 = load i8, ptr %243, align 1, !tbaa !9
  %251 = getelementptr inbounds i8, ptr %.087.lcssa, i64 14
  %252 = load i8, ptr %245, align 1, !tbaa !9
  %253 = xor i8 %252, %250
  %254 = getelementptr inbounds i8, ptr %.083.lcssa, i64 14
  store i8 %253, ptr %248, align 1, !tbaa !9
  %255 = getelementptr inbounds i8, ptr %10, i64 15
  %256 = load i8, ptr %249, align 2, !tbaa !9
  %257 = getelementptr inbounds i8, ptr %.087.lcssa, i64 15
  %258 = load i8, ptr %251, align 1, !tbaa !9
  %259 = xor i8 %258, %256
  %260 = getelementptr inbounds i8, ptr %.083.lcssa, i64 15
  store i8 %259, ptr %254, align 1, !tbaa !9
  %261 = load i8, ptr %255, align 1, !tbaa !9
  %262 = load i8, ptr %257, align 1, !tbaa !9
  %263 = xor i8 %262, %261
  store i8 %263, ptr %260, align 1, !tbaa !9
  %264 = getelementptr inbounds i8, ptr %10, i64 28
  %265 = load i32, ptr %264, align 4, !tbaa !10
  %266 = xor i32 %265, 117440512
  store i32 %266, ptr %264, align 4, !tbaa !10
  %267 = load i32, ptr %10, align 16, !tbaa !10
  %268 = getelementptr inbounds i8, ptr %10, i64 8
  %269 = load i32, ptr %268, align 8, !tbaa !10
  %270 = load i32, ptr %15, align 16, !tbaa !10
  %271 = getelementptr inbounds i8, ptr %10, i64 24
  %272 = load i32, ptr %271, align 8, !tbaa !10
  %273 = xor i32 %267, %272
  %274 = xor i32 %273, %269
  store i32 %274, ptr %268, align 8, !tbaa !10
  %275 = getelementptr inbounds i8, ptr %10, i64 4
  %276 = load i32, ptr %275, align 4, !tbaa !10
  %277 = getelementptr inbounds i8, ptr %10, i64 12
  %278 = load i32, ptr %277, align 4, !tbaa !10
  %279 = getelementptr inbounds i8, ptr %10, i64 20
  %280 = load i32, ptr %279, align 4, !tbaa !10
  %281 = xor i32 %280, %278
  store i32 %281, ptr %275, align 4, !tbaa !10
  %282 = xor i32 %276, %266
  %283 = xor i32 %282, %278
  store i32 %283, ptr %277, align 4, !tbaa !10
  %284 = xor i32 %270, %269
  store i32 %284, ptr %10, align 16, !tbaa !10
  %285 = lshr i32 %284, 8
  %286 = lshr i32 %284, 16
  %287 = lshr i32 %284, 24
  %288 = insertelement <4 x i32> poison, i32 %284, i64 0
  %289 = insertelement <4 x i32> %288, i32 %285, i64 1
  %290 = insertelement <4 x i32> %289, i32 %286, i64 2
  %291 = insertelement <4 x i32> %290, i32 %287, i64 3
  %292 = trunc <4 x i32> %291 to <4 x i8>
  %293 = trunc i32 %281 to i8
  %294 = lshr i32 %281, 8
  %295 = trunc i32 %294 to i8
  %296 = lshr i32 %281, 16
  %297 = trunc i32 %296 to i8
  %298 = load <16 x i8>, ptr %207, align 1
  %299 = load i8, ptr %231, align 1, !tbaa !9
  %300 = trunc i32 %283 to i8
  %301 = lshr i32 %283, 8
  %302 = trunc i32 %301 to i8
  %303 = lshr i32 %283, 16
  %304 = trunc i32 %303 to i8
  %305 = lshr i32 %283, 24
  %306 = trunc nuw i32 %305 to i8
  %307 = load <16 x i8>, ptr %.083.lcssa, align 1, !tbaa !9
  %308 = shufflevector <4 x i8> %292, <4 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %309 = insertelement <16 x i8> %308, i8 %293, i64 4
  %310 = insertelement <16 x i8> %309, i8 %295, i64 5
  %311 = insertelement <16 x i8> %310, i8 %297, i64 6
  %312 = shufflevector <16 x i8> %311, <16 x i8> %298, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
  %313 = insertelement <16 x i8> %312, i8 %299, i64 11
  %314 = insertelement <16 x i8> %313, i8 %300, i64 12
  %315 = insertelement <16 x i8> %314, i8 %302, i64 13
  %316 = insertelement <16 x i8> %315, i8 %304, i64 14
  %317 = insertelement <16 x i8> %316, i8 %306, i64 15
  %318 = xor <16 x i8> %307, %317
  store <16 x i8> %318, ptr %10, align 16, !tbaa !9
  br label %.loopexit

iter.check:                                       ; preds = %._crit_edge
  %319 = trunc nuw i64 %.095.lcssa to i32
  %320 = add nuw nsw i64 %.095.lcssa, 4294967295
  %321 = and i64 %320, 4294967295
  %322 = add nuw nsw i64 %321, 1
  %min.iters.check = icmp ult i64 %321, 7
  br i1 %min.iters.check, label %.lr.ph.preheader, label %vector.memcheck

vector.memcheck:                                  ; preds = %iter.check
  %323 = sub i64 %.083.lcssa155, %11
  %diff.check = icmp ult i64 %323, 32
  %324 = sub i64 %.083.lcssa155, %.087.lcssa156
  %diff.check157 = icmp ult i64 %324, 32
  %conflict.rdx = or i1 %diff.check, %diff.check157
  br i1 %conflict.rdx, label %.lr.ph.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %vector.memcheck
  %min.iters.check158 = icmp ult i64 %321, 31
  br i1 %min.iters.check158, label %vec.epilog.ph, label %vector.ph

vector.ph:                                        ; preds = %vector.main.loop.iter.check
  %n.vec = and i64 %322, 8589934560
  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 %.087.lcssa, i64 %index
  %next.gep160 = getelementptr i8, ptr %10, i64 %index
  %next.gep162 = getelementptr i8, ptr %.083.lcssa, i64 %index
  %325 = getelementptr i8, ptr %next.gep160, i64 16
  %wide.load = load <16 x i8>, ptr %next.gep160, align 16, !tbaa !9
  %wide.load164 = load <16 x i8>, ptr %325, align 16, !tbaa !9
  %326 = getelementptr i8, ptr %next.gep, i64 16
  %wide.load165 = load <16 x i8>, ptr %next.gep, align 1, !tbaa !9
  %wide.load166 = load <16 x i8>, ptr %326, align 1, !tbaa !9
  %327 = xor <16 x i8> %wide.load165, %wide.load
  %328 = xor <16 x i8> %wide.load166, %wide.load164
  %329 = getelementptr i8, ptr %next.gep162, i64 16
  store <16 x i8> %327, ptr %next.gep162, align 1, !tbaa !9
  store <16 x i8> %328, ptr %329, align 1, !tbaa !9
  %index.next = add nuw i64 %index, 32
  %330 = icmp eq i64 %index.next, %n.vec
  br i1 %330, label %middle.block, label %vector.body, !llvm.loop !14

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

vec.epilog.iter.check:                            ; preds = %middle.block
  %ind.end178 = getelementptr i8, ptr %.083.lcssa, i64 %n.vec
  %ind.end175 = getelementptr i8, ptr %10, i64 %n.vec
  %ind.end172 = getelementptr i8, ptr %.087.lcssa, i64 %n.vec
  %.cast169 = trunc i64 %n.vec to i32
  %ind.end170 = sub i32 %319, %.cast169
  %n.vec.remaining = and i64 %322, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  br i1 %min.epilog.iters.check, label %.lr.ph.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  %n.vec168 = and i64 %322, 8589934584
  %.cast = trunc i64 %n.vec168 to i32
  %ind.end = sub i32 %319, %.cast
  %ind.end171 = getelementptr i8, ptr %.087.lcssa, i64 %n.vec168
  %ind.end174 = getelementptr i8, ptr %10, i64 %n.vec168
  %ind.end177 = getelementptr i8, ptr %.083.lcssa, i64 %n.vec168
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %vec.epilog.vector.body, %vec.epilog.ph
  %index180 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next186, %vec.epilog.vector.body ]
  %next.gep181 = getelementptr i8, ptr %.087.lcssa, i64 %index180
  %next.gep182 = getelementptr i8, ptr %10, i64 %index180
  %next.gep183 = getelementptr i8, ptr %.083.lcssa, i64 %index180
  %wide.load184 = load <8 x i8>, ptr %next.gep182, align 8, !tbaa !9
  %wide.load185 = load <8 x i8>, ptr %next.gep181, align 1, !tbaa !9
  %331 = xor <8 x i8> %wide.load185, %wide.load184
  store <8 x i8> %331, ptr %next.gep183, align 1, !tbaa !9
  %index.next186 = add nuw i64 %index180, 8
  %332 = icmp eq i64 %index.next186, %n.vec168
  br i1 %332, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !17

vec.epilog.middle.block:                          ; preds = %vec.epilog.vector.body
  %cmp.n187 = icmp eq i64 %322, %n.vec168
  br i1 %cmp.n187, label %iter.check193, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %vec.epilog.middle.block, %vector.memcheck, %iter.check, %vec.epilog.iter.check
  %.079129.ph = phi i32 [ %319, %iter.check ], [ %319, %vector.memcheck ], [ %ind.end170, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  %.080128.ph = phi ptr [ %.087.lcssa, %iter.check ], [ %.087.lcssa, %vector.memcheck ], [ %ind.end172, %vec.epilog.iter.check ], [ %ind.end171, %vec.epilog.middle.block ]
  %.081127.ph = phi ptr [ %10, %iter.check ], [ %10, %vector.memcheck ], [ %ind.end175, %vec.epilog.iter.check ], [ %ind.end174, %vec.epilog.middle.block ]
  %.082126.ph = phi ptr [ %.083.lcssa, %iter.check ], [ %.083.lcssa, %vector.memcheck ], [ %ind.end178, %vec.epilog.iter.check ], [ %ind.end177, %vec.epilog.middle.block ]
  %333 = add nsw i32 %.079129.ph, -1
  %xtraiter = and i32 %.079129.ph, 3
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph.prol.loopexit, label %.lr.ph.prol

.lr.ph.prol:                                      ; preds = %.lr.ph.preheader, %.lr.ph.prol
  %.079129.prol = phi i32 [ %340, %.lr.ph.prol ], [ %.079129.ph, %.lr.ph.preheader ]
  %.080128.prol = phi ptr [ %336, %.lr.ph.prol ], [ %.080128.ph, %.lr.ph.preheader ]
  %.081127.prol = phi ptr [ %334, %.lr.ph.prol ], [ %.081127.ph, %.lr.ph.preheader ]
  %.082126.prol = phi ptr [ %339, %.lr.ph.prol ], [ %.082126.ph, %.lr.ph.preheader ]
  %prol.iter = phi i32 [ %prol.iter.next, %.lr.ph.prol ], [ 0, %.lr.ph.preheader ]
  %334 = getelementptr inbounds i8, ptr %.081127.prol, i64 1
  %335 = load i8, ptr %.081127.prol, align 1, !tbaa !9
  %336 = getelementptr inbounds i8, ptr %.080128.prol, i64 1
  %337 = load i8, ptr %.080128.prol, align 1, !tbaa !9
  %338 = xor i8 %337, %335
  %339 = getelementptr inbounds i8, ptr %.082126.prol, i64 1
  store i8 %338, ptr %.082126.prol, align 1, !tbaa !9
  %340 = add nsw i32 %.079129.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.ph.prol.loopexit, label %.lr.ph.prol, !llvm.loop !18

.lr.ph.prol.loopexit:                             ; preds = %.lr.ph.prol, %.lr.ph.preheader
  %.079129.unr = phi i32 [ %.079129.ph, %.lr.ph.preheader ], [ %340, %.lr.ph.prol ]
  %.080128.unr = phi ptr [ %.080128.ph, %.lr.ph.preheader ], [ %336, %.lr.ph.prol ]
  %.081127.unr = phi ptr [ %.081127.ph, %.lr.ph.preheader ], [ %334, %.lr.ph.prol ]
  %.082126.unr = phi ptr [ %.082126.ph, %.lr.ph.preheader ], [ %339, %.lr.ph.prol ]
  %341 = icmp ult i32 %333, 3
  br i1 %341, label %iter.check193, label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.prol.loopexit, %.lr.ph
  %.079129 = phi i32 [ %366, %.lr.ph ], [ %.079129.unr, %.lr.ph.prol.loopexit ]
  %.080128 = phi ptr [ %362, %.lr.ph ], [ %.080128.unr, %.lr.ph.prol.loopexit ]
  %.081127 = phi ptr [ %360, %.lr.ph ], [ %.081127.unr, %.lr.ph.prol.loopexit ]
  %.082126 = phi ptr [ %365, %.lr.ph ], [ %.082126.unr, %.lr.ph.prol.loopexit ]
  %342 = getelementptr inbounds i8, ptr %.081127, i64 1
  %343 = load i8, ptr %.081127, align 1, !tbaa !9
  %344 = getelementptr inbounds i8, ptr %.080128, i64 1
  %345 = load i8, ptr %.080128, align 1, !tbaa !9
  %346 = xor i8 %345, %343
  %347 = getelementptr inbounds i8, ptr %.082126, i64 1
  store i8 %346, ptr %.082126, align 1, !tbaa !9
  %348 = getelementptr inbounds i8, ptr %.081127, i64 2
  %349 = load i8, ptr %342, align 1, !tbaa !9
  %350 = getelementptr inbounds i8, ptr %.080128, i64 2
  %351 = load i8, ptr %344, align 1, !tbaa !9
  %352 = xor i8 %351, %349
  %353 = getelementptr inbounds i8, ptr %.082126, i64 2
  store i8 %352, ptr %347, align 1, !tbaa !9
  %354 = getelementptr inbounds i8, ptr %.081127, i64 3
  %355 = load i8, ptr %348, align 1, !tbaa !9
  %356 = getelementptr inbounds i8, ptr %.080128, i64 3
  %357 = load i8, ptr %350, align 1, !tbaa !9
  %358 = xor i8 %357, %355
  %359 = getelementptr inbounds i8, ptr %.082126, i64 3
  store i8 %358, ptr %353, align 1, !tbaa !9
  %360 = getelementptr inbounds i8, ptr %.081127, i64 4
  %361 = load i8, ptr %354, align 1, !tbaa !9
  %362 = getelementptr inbounds i8, ptr %.080128, i64 4
  %363 = load i8, ptr %356, align 1, !tbaa !9
  %364 = xor i8 %363, %361
  %365 = getelementptr inbounds i8, ptr %.082126, i64 4
  store i8 %364, ptr %359, align 1, !tbaa !9
  %366 = add nsw i32 %.079129, -4
  %.not104.3 = icmp eq i32 %366, 0
  br i1 %.not104.3, label %iter.check193, label %.lr.ph, !llvm.loop !20

iter.check193:                                    ; preds = %.lr.ph.prol.loopexit, %.lr.ph, %vec.epilog.middle.block, %middle.block
  %367 = getelementptr inbounds i8, ptr %10, i64 28
  %368 = load i32, ptr %367, align 4, !tbaa !10
  %369 = xor i32 %368, 100663296
  store i32 %369, ptr %367, align 4, !tbaa !10
  %370 = getelementptr inbounds i8, ptr %10, i64 8
  %371 = getelementptr inbounds i8, ptr %10, i64 24
  %372 = load i32, ptr %371, align 8, !tbaa !10
  %373 = load <4 x i32>, ptr %15, align 16
  %374 = load <2 x i32>, ptr %10, align 16, !tbaa !10
  %375 = insertelement <2 x i32> poison, i32 %372, i64 0
  %376 = insertelement <2 x i32> %375, i32 %369, i64 1
  %377 = xor <2 x i32> %374, %376
  %378 = load <2 x i32>, ptr %370, align 8, !tbaa !10
  %379 = shufflevector <2 x i32> %378, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
  %380 = shufflevector <2 x i32> %377, <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
  %381 = shufflevector <4 x i32> %373, <4 x i32> %380, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
  %382 = xor <4 x i32> %381, %379
  store <4 x i32> %382, ptr %10, align 16, !tbaa !10
  %383 = add nuw nsw i64 %.095.lcssa, 4294967295
  %384 = and i64 %383, 4294967295
  %385 = add nuw nsw i64 %384, 1
  %min.iters.check191 = icmp ult i64 %384, 7
  br i1 %min.iters.check191, label %.lr.ph137.preheader, label %vector.memcheck188

vector.memcheck188:                               ; preds = %iter.check193
  %386 = add nuw nsw i64 %.095.lcssa, 4294967295
  %387 = and i64 %386, 4294967295
  %388 = add nuw nsw i64 %387, 1
  %scevgep = getelementptr i8, ptr %10, i64 %388
  %scevgep189 = getelementptr i8, ptr %.083.lcssa, i64 %388
  %bound0 = icmp ult ptr %10, %scevgep189
  %bound1 = icmp ult ptr %.083.lcssa, %scevgep
  %found.conflict = and i1 %bound0, %bound1
  br i1 %found.conflict, label %.lr.ph137.preheader, label %vector.main.loop.iter.check195

vector.main.loop.iter.check195:                   ; preds = %vector.memcheck188
  %min.iters.check194 = icmp ult i64 %384, 31
  br i1 %min.iters.check194, label %vec.epilog.ph213, label %vector.ph196

vector.ph196:                                     ; preds = %vector.main.loop.iter.check195
  %n.vec198 = and i64 %385, 8589934560
  br label %vector.body199

vector.body199:                                   ; preds = %vector.body199, %vector.ph196
  %index200 = phi i64 [ 0, %vector.ph196 ], [ %index.next209, %vector.body199 ]
  %next.gep201 = getelementptr i8, ptr %.083.lcssa, i64 %index200
  %next.gep203 = getelementptr i8, ptr %10, i64 %index200
  %389 = getelementptr i8, ptr %next.gep201, i64 16
  %wide.load205 = load <16 x i8>, ptr %next.gep201, align 1, !tbaa !9, !alias.scope !21
  %wide.load206 = load <16 x i8>, ptr %389, align 1, !tbaa !9, !alias.scope !21
  %390 = getelementptr i8, ptr %next.gep203, i64 16
  %wide.load207 = load <16 x i8>, ptr %next.gep203, align 16, !tbaa !9, !alias.scope !24, !noalias !21
  %wide.load208 = load <16 x i8>, ptr %390, align 16, !tbaa !9, !alias.scope !24, !noalias !21
  %391 = xor <16 x i8> %wide.load207, %wide.load205
  %392 = xor <16 x i8> %wide.load208, %wide.load206
  store <16 x i8> %391, ptr %next.gep203, align 16, !tbaa !9, !alias.scope !24, !noalias !21
  store <16 x i8> %392, ptr %390, align 16, !tbaa !9, !alias.scope !24, !noalias !21
  %index.next209 = add nuw i64 %index200, 32
  %393 = icmp eq i64 %index.next209, %n.vec198
  br i1 %393, label %middle.block190, label %vector.body199, !llvm.loop !26

middle.block190:                                  ; preds = %vector.body199
  %cmp.n210 = icmp eq i64 %385, %n.vec198
  br i1 %cmp.n210, label %._crit_edge138, label %vec.epilog.iter.check214

vec.epilog.iter.check214:                         ; preds = %middle.block190
  %ind.end229 = getelementptr i8, ptr %10, i64 %n.vec198
  %ind.end226 = getelementptr i8, ptr %.083.lcssa, i64 %n.vec198
  %.cast222 = trunc i64 %n.vec198 to i32
  %ind.end223 = sub i32 %319, %.cast222
  %n.vec.remaining215 = and i64 %385, 24
  %min.epilog.iters.check216 = icmp eq i64 %n.vec.remaining215, 0
  br i1 %min.epilog.iters.check216, label %.lr.ph137.preheader, label %vec.epilog.ph213

vec.epilog.ph213:                                 ; preds = %vector.main.loop.iter.check195, %vec.epilog.iter.check214
  %vec.epilog.resume.val217 = phi i64 [ %n.vec198, %vec.epilog.iter.check214 ], [ 0, %vector.main.loop.iter.check195 ]
  %n.vec219 = and i64 %385, 8589934584
  %.cast220 = trunc i64 %n.vec219 to i32
  %ind.end221 = sub i32 %319, %.cast220
  %ind.end225 = getelementptr i8, ptr %.083.lcssa, i64 %n.vec219
  %ind.end228 = getelementptr i8, ptr %10, i64 %n.vec219
  br label %vec.epilog.vector.body231

vec.epilog.vector.body231:                        ; preds = %vec.epilog.vector.body231, %vec.epilog.ph213
  %index232 = phi i64 [ %vec.epilog.resume.val217, %vec.epilog.ph213 ], [ %index.next237, %vec.epilog.vector.body231 ]
  %next.gep233 = getelementptr i8, ptr %.083.lcssa, i64 %index232
  %next.gep234 = getelementptr i8, ptr %10, i64 %index232
  %wide.load235 = load <8 x i8>, ptr %next.gep233, align 1, !tbaa !9, !alias.scope !27
  %wide.load236 = load <8 x i8>, ptr %next.gep234, align 8, !tbaa !9, !alias.scope !30, !noalias !27
  %394 = xor <8 x i8> %wide.load236, %wide.load235
  store <8 x i8> %394, ptr %next.gep234, align 8, !tbaa !9, !alias.scope !30, !noalias !27
  %index.next237 = add nuw i64 %index232, 8
  %395 = icmp eq i64 %index.next237, %n.vec219
  br i1 %395, label %vec.epilog.middle.block211, label %vec.epilog.vector.body231, !llvm.loop !32

vec.epilog.middle.block211:                       ; preds = %vec.epilog.vector.body231
  %cmp.n238 = icmp eq i64 %385, %n.vec219
  br i1 %cmp.n238, label %._crit_edge138, label %.lr.ph137.preheader

.lr.ph137.preheader:                              ; preds = %vec.epilog.middle.block211, %vector.memcheck188, %iter.check193, %vec.epilog.iter.check214
  %.075135.ph = phi i32 [ %319, %iter.check193 ], [ %319, %vector.memcheck188 ], [ %ind.end223, %vec.epilog.iter.check214 ], [ %ind.end221, %vec.epilog.middle.block211 ]
  %.076134.ph = phi ptr [ %.083.lcssa, %iter.check193 ], [ %.083.lcssa, %vector.memcheck188 ], [ %ind.end226, %vec.epilog.iter.check214 ], [ %ind.end225, %vec.epilog.middle.block211 ]
  %.077133.ph = phi ptr [ %10, %iter.check193 ], [ %10, %vector.memcheck188 ], [ %ind.end229, %vec.epilog.iter.check214 ], [ %ind.end228, %vec.epilog.middle.block211 ]
  %396 = add nsw i32 %.075135.ph, -1
  %xtraiter241 = and i32 %.075135.ph, 3
  %lcmp.mod242.not = icmp eq i32 %xtraiter241, 0
  br i1 %lcmp.mod242.not, label %.lr.ph137.prol.loopexit, label %.lr.ph137.prol

.lr.ph137.prol:                                   ; preds = %.lr.ph137.preheader, %.lr.ph137.prol
  %.075135.prol = phi i32 [ %402, %.lr.ph137.prol ], [ %.075135.ph, %.lr.ph137.preheader ]
  %.076134.prol = phi ptr [ %397, %.lr.ph137.prol ], [ %.076134.ph, %.lr.ph137.preheader ]
  %.077133.prol = phi ptr [ %399, %.lr.ph137.prol ], [ %.077133.ph, %.lr.ph137.preheader ]
  %prol.iter243 = phi i32 [ %prol.iter243.next, %.lr.ph137.prol ], [ 0, %.lr.ph137.preheader ]
  %397 = getelementptr inbounds i8, ptr %.076134.prol, i64 1
  %398 = load i8, ptr %.076134.prol, align 1, !tbaa !9
  %399 = getelementptr inbounds i8, ptr %.077133.prol, i64 1
  %400 = load i8, ptr %.077133.prol, align 1, !tbaa !9
  %401 = xor i8 %400, %398
  store i8 %401, ptr %.077133.prol, align 1, !tbaa !9
  %402 = add nsw i32 %.075135.prol, -1
  %prol.iter243.next = add i32 %prol.iter243, 1
  %prol.iter243.cmp.not = icmp eq i32 %prol.iter243.next, %xtraiter241
  br i1 %prol.iter243.cmp.not, label %.lr.ph137.prol.loopexit, label %.lr.ph137.prol, !llvm.loop !33

.lr.ph137.prol.loopexit:                          ; preds = %.lr.ph137.prol, %.lr.ph137.preheader
  %.075135.unr = phi i32 [ %.075135.ph, %.lr.ph137.preheader ], [ %402, %.lr.ph137.prol ]
  %.076134.unr = phi ptr [ %.076134.ph, %.lr.ph137.preheader ], [ %397, %.lr.ph137.prol ]
  %.077133.unr = phi ptr [ %.077133.ph, %.lr.ph137.preheader ], [ %399, %.lr.ph137.prol ]
  %403 = icmp ult i32 %396, 3
  br i1 %403, label %._crit_edge138, label %.lr.ph137

.lr.ph137:                                        ; preds = %.lr.ph137.prol.loopexit, %.lr.ph137
  %.075135 = phi i32 [ %424, %.lr.ph137 ], [ %.075135.unr, %.lr.ph137.prol.loopexit ]
  %.076134 = phi ptr [ %419, %.lr.ph137 ], [ %.076134.unr, %.lr.ph137.prol.loopexit ]
  %.077133 = phi ptr [ %421, %.lr.ph137 ], [ %.077133.unr, %.lr.ph137.prol.loopexit ]
  %404 = getelementptr inbounds i8, ptr %.076134, i64 1
  %405 = load i8, ptr %.076134, align 1, !tbaa !9
  %406 = getelementptr inbounds i8, ptr %.077133, i64 1
  %407 = load i8, ptr %.077133, align 1, !tbaa !9
  %408 = xor i8 %407, %405
  store i8 %408, ptr %.077133, align 1, !tbaa !9
  %409 = getelementptr inbounds i8, ptr %.076134, i64 2
  %410 = load i8, ptr %404, align 1, !tbaa !9
  %411 = getelementptr inbounds i8, ptr %.077133, i64 2
  %412 = load i8, ptr %406, align 1, !tbaa !9
  %413 = xor i8 %412, %410
  store i8 %413, ptr %406, align 1, !tbaa !9
  %414 = getelementptr inbounds i8, ptr %.076134, i64 3
  %415 = load i8, ptr %409, align 1, !tbaa !9
  %416 = getelementptr inbounds i8, ptr %.077133, i64 3
  %417 = load i8, ptr %411, align 1, !tbaa !9
  %418 = xor i8 %417, %415
  store i8 %418, ptr %411, align 1, !tbaa !9
  %419 = getelementptr inbounds i8, ptr %.076134, i64 4
  %420 = load i8, ptr %414, align 1, !tbaa !9
  %421 = getelementptr inbounds i8, ptr %.077133, i64 4
  %422 = load i8, ptr %416, align 1, !tbaa !9
  %423 = xor i8 %422, %420
  store i8 %423, ptr %416, align 1, !tbaa !9
  %424 = add nsw i32 %.075135, -4
  %.not105.3 = icmp eq i32 %424, 0
  br i1 %.not105.3, label %._crit_edge138, label %.lr.ph137, !llvm.loop !34

._crit_edge138:                                   ; preds = %.lr.ph137.prol.loopexit, %.lr.ph137, %vec.epilog.middle.block211, %middle.block190
  %425 = getelementptr inbounds i8, ptr %10, i64 %.095.lcssa
  %426 = load i8, ptr %425, align 1, !tbaa !9
  %427 = xor i8 %426, -128
  store i8 %427, ptr %425, align 1, !tbaa !9
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.preheader, %._crit_edge138
  call void @sparkle_256(ptr noundef nonnull %10, i32 noundef 10) #4
  %428 = getelementptr inbounds i8, ptr %.087.lcssa, i64 %.095.lcssa
  br label %429

429:                                              ; preds = %17, %.loopexit
  %.1 = phi ptr [ %428, %.loopexit ], [ %3, %17 ]
  %430 = load <16 x i8>, ptr %8, align 1, !tbaa !9
  %431 = load <16 x i8>, ptr %15, align 16, !tbaa !9
  %432 = xor <16 x i8> %431, %430
  store <16 x i8> %432, ptr %15, align 16, !tbaa !9
  %433 = load i64, ptr %1, align 8, !tbaa !5
  %434 = call i32 @aead_check_tag(ptr noundef %0, i64 noundef %433, ptr noundef nonnull %15, ptr noundef %.1, i32 noundef 16) #4
  br label %435

435:                                              ; preds = %9, %429
  %.078 = phi i32 [ %434, %429 ], [ -1, %9 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #4
  ret i32 %.078
}

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

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

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

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

declare void @sparkle_256(ptr noundef, i32 noundef) local_unnamed_addr #3

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

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: readwrite) }
attributes #3 = { "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 = { 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 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13, !15, !16}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !13, !15, !16}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !13, !15}
!21 = !{!22}
!22 = distinct !{!22, !23}
!23 = distinct !{!23, !"LVerDomain"}
!24 = !{!25}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !13, !15, !16}
!27 = !{!28}
!28 = distinct !{!28, !29}
!29 = distinct !{!29, !"LVerDomain"}
!30 = !{!31}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !13, !15, !16}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !13, !15}


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