; LLVM IR from openssl/openssl :: crypto/rc2 (rc2_cbc)

; 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 void @RC2_cbc_encrypt(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4, i32 noundef %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca [2 x i64], align 16
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i64 %2, ptr %9, align 8, !tbaa !9
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  %21 = load i64, ptr %9, align 8, !tbaa !9
  store i64 %21, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #2
  %22 = load i32, ptr %12, align 4, !tbaa !11
  %23 = icmp ne i32 %22, 0
  br i1 %23, label %24, label %376

24:                                               ; preds = %6
  %25 = load ptr, ptr %11, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %25, i32 1
  store ptr %26, ptr %11, align 8, !tbaa !5
  %27 = load i8, ptr %25, align 1, !tbaa !13
  %28 = zext i8 %27 to i64
  store i64 %28, ptr %15, align 8, !tbaa !9
  %29 = load ptr, ptr %11, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %29, i32 1
  store ptr %30, ptr %11, align 8, !tbaa !5
  %31 = load i8, ptr %29, align 1, !tbaa !13
  %32 = zext i8 %31 to i64
  %33 = shl i64 %32, 8
  %34 = load i64, ptr %15, align 8, !tbaa !9
  %35 = or i64 %34, %33
  store i64 %35, ptr %15, align 8, !tbaa !9
  %36 = load ptr, ptr %11, align 8, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %36, i32 1
  store ptr %37, ptr %11, align 8, !tbaa !5
  %38 = load i8, ptr %36, align 1, !tbaa !13
  %39 = zext i8 %38 to i64
  %40 = shl i64 %39, 16
  %41 = load i64, ptr %15, align 8, !tbaa !9
  %42 = or i64 %41, %40
  store i64 %42, ptr %15, align 8, !tbaa !9
  %43 = load ptr, ptr %11, align 8, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %43, i32 1
  store ptr %44, ptr %11, align 8, !tbaa !5
  %45 = load i8, ptr %43, align 1, !tbaa !13
  %46 = zext i8 %45 to i64
  %47 = shl i64 %46, 24
  %48 = load i64, ptr %15, align 8, !tbaa !9
  %49 = or i64 %48, %47
  store i64 %49, ptr %15, align 8, !tbaa !9
  %50 = load ptr, ptr %11, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %50, i32 1
  store ptr %51, ptr %11, align 8, !tbaa !5
  %52 = load i8, ptr %50, align 1, !tbaa !13
  %53 = zext i8 %52 to i64
  store i64 %53, ptr %16, align 8, !tbaa !9
  %54 = load ptr, ptr %11, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %54, i32 1
  store ptr %55, ptr %11, align 8, !tbaa !5
  %56 = load i8, ptr %54, align 1, !tbaa !13
  %57 = zext i8 %56 to i64
  %58 = shl i64 %57, 8
  %59 = load i64, ptr %16, align 8, !tbaa !9
  %60 = or i64 %59, %58
  store i64 %60, ptr %16, align 8, !tbaa !9
  %61 = load ptr, ptr %11, align 8, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %61, i32 1
  store ptr %62, ptr %11, align 8, !tbaa !5
  %63 = load i8, ptr %61, align 1, !tbaa !13
  %64 = zext i8 %63 to i64
  %65 = shl i64 %64, 16
  %66 = load i64, ptr %16, align 8, !tbaa !9
  %67 = or i64 %66, %65
  store i64 %67, ptr %16, align 8, !tbaa !9
  %68 = load ptr, ptr %11, align 8, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %68, i32 1
  store ptr %69, ptr %11, align 8, !tbaa !5
  %70 = load i8, ptr %68, align 1, !tbaa !13
  %71 = zext i8 %70 to i64
  %72 = shl i64 %71, 24
  %73 = load i64, ptr %16, align 8, !tbaa !9
  %74 = or i64 %73, %72
  store i64 %74, ptr %16, align 8, !tbaa !9
  %75 = load ptr, ptr %11, align 8, !tbaa !5
  %76 = getelementptr inbounds i8, ptr %75, i64 -8
  store ptr %76, ptr %11, align 8, !tbaa !5
  %77 = load i64, ptr %19, align 8, !tbaa !9
  %78 = sub nsw i64 %77, 8
  store i64 %78, ptr %19, align 8, !tbaa !9
  br label %79

79:                                               ; preds = %195, %24
  %80 = load i64, ptr %19, align 8, !tbaa !9
  %81 = icmp sge i64 %80, 0
  br i1 %81, label %82, label %198

82:                                               ; preds = %79
  %83 = load ptr, ptr %7, align 8, !tbaa !5
  %84 = getelementptr inbounds i8, ptr %83, i32 1
  store ptr %84, ptr %7, align 8, !tbaa !5
  %85 = load i8, ptr %83, align 1, !tbaa !13
  %86 = zext i8 %85 to i64
  store i64 %86, ptr %13, align 8, !tbaa !9
  %87 = load ptr, ptr %7, align 8, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %87, i32 1
  store ptr %88, ptr %7, align 8, !tbaa !5
  %89 = load i8, ptr %87, align 1, !tbaa !13
  %90 = zext i8 %89 to i64
  %91 = shl i64 %90, 8
  %92 = load i64, ptr %13, align 8, !tbaa !9
  %93 = or i64 %92, %91
  store i64 %93, ptr %13, align 8, !tbaa !9
  %94 = load ptr, ptr %7, align 8, !tbaa !5
  %95 = getelementptr inbounds i8, ptr %94, i32 1
  store ptr %95, ptr %7, align 8, !tbaa !5
  %96 = load i8, ptr %94, align 1, !tbaa !13
  %97 = zext i8 %96 to i64
  %98 = shl i64 %97, 16
  %99 = load i64, ptr %13, align 8, !tbaa !9
  %100 = or i64 %99, %98
  store i64 %100, ptr %13, align 8, !tbaa !9
  %101 = load ptr, ptr %7, align 8, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %101, i32 1
  store ptr %102, ptr %7, align 8, !tbaa !5
  %103 = load i8, ptr %101, align 1, !tbaa !13
  %104 = zext i8 %103 to i64
  %105 = shl i64 %104, 24
  %106 = load i64, ptr %13, align 8, !tbaa !9
  %107 = or i64 %106, %105
  store i64 %107, ptr %13, align 8, !tbaa !9
  %108 = load ptr, ptr %7, align 8, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %108, i32 1
  store ptr %109, ptr %7, align 8, !tbaa !5
  %110 = load i8, ptr %108, align 1, !tbaa !13
  %111 = zext i8 %110 to i64
  store i64 %111, ptr %14, align 8, !tbaa !9
  %112 = load ptr, ptr %7, align 8, !tbaa !5
  %113 = getelementptr inbounds i8, ptr %112, i32 1
  store ptr %113, ptr %7, align 8, !tbaa !5
  %114 = load i8, ptr %112, align 1, !tbaa !13
  %115 = zext i8 %114 to i64
  %116 = shl i64 %115, 8
  %117 = load i64, ptr %14, align 8, !tbaa !9
  %118 = or i64 %117, %116
  store i64 %118, ptr %14, align 8, !tbaa !9
  %119 = load ptr, ptr %7, align 8, !tbaa !5
  %120 = getelementptr inbounds i8, ptr %119, i32 1
  store ptr %120, ptr %7, align 8, !tbaa !5
  %121 = load i8, ptr %119, align 1, !tbaa !13
  %122 = zext i8 %121 to i64
  %123 = shl i64 %122, 16
  %124 = load i64, ptr %14, align 8, !tbaa !9
  %125 = or i64 %124, %123
  store i64 %125, ptr %14, align 8, !tbaa !9
  %126 = load ptr, ptr %7, align 8, !tbaa !5
  %127 = getelementptr inbounds i8, ptr %126, i32 1
  store ptr %127, ptr %7, align 8, !tbaa !5
  %128 = load i8, ptr %126, align 1, !tbaa !13
  %129 = zext i8 %128 to i64
  %130 = shl i64 %129, 24
  %131 = load i64, ptr %14, align 8, !tbaa !9
  %132 = or i64 %131, %130
  store i64 %132, ptr %14, align 8, !tbaa !9
  %133 = load i64, ptr %15, align 8, !tbaa !9
  %134 = load i64, ptr %13, align 8, !tbaa !9
  %135 = xor i64 %134, %133
  store i64 %135, ptr %13, align 8, !tbaa !9
  %136 = load i64, ptr %16, align 8, !tbaa !9
  %137 = load i64, ptr %14, align 8, !tbaa !9
  %138 = xor i64 %137, %136
  store i64 %138, ptr %14, align 8, !tbaa !9
  %139 = load i64, ptr %13, align 8, !tbaa !9
  %140 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  store i64 %139, ptr %140, align 16, !tbaa !9
  %141 = load i64, ptr %14, align 8, !tbaa !9
  %142 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  store i64 %141, ptr %142, align 8, !tbaa !9
  %143 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %144 = load ptr, ptr %10, align 8, !tbaa !5
  call void @RC2_encrypt(ptr noundef %143, ptr noundef %144)
  %145 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %146 = load i64, ptr %145, align 16, !tbaa !9
  store i64 %146, ptr %15, align 8, !tbaa !9
  %147 = load i64, ptr %15, align 8, !tbaa !9
  %148 = and i64 %147, 255
  %149 = trunc i64 %148 to i8
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i32 1
  store ptr %151, ptr %8, align 8, !tbaa !5
  store i8 %149, ptr %150, align 1, !tbaa !13
  %152 = load i64, ptr %15, align 8, !tbaa !9
  %153 = lshr i64 %152, 8
  %154 = and i64 %153, 255
  %155 = trunc i64 %154 to i8
  %156 = load ptr, ptr %8, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i32 1
  store ptr %157, ptr %8, align 8, !tbaa !5
  store i8 %155, ptr %156, align 1, !tbaa !13
  %158 = load i64, ptr %15, align 8, !tbaa !9
  %159 = lshr i64 %158, 16
  %160 = and i64 %159, 255
  %161 = trunc i64 %160 to i8
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i32 1
  store ptr %163, ptr %8, align 8, !tbaa !5
  store i8 %161, ptr %162, align 1, !tbaa !13
  %164 = load i64, ptr %15, align 8, !tbaa !9
  %165 = lshr i64 %164, 24
  %166 = and i64 %165, 255
  %167 = trunc i64 %166 to i8
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = getelementptr inbounds i8, ptr %168, i32 1
  store ptr %169, ptr %8, align 8, !tbaa !5
  store i8 %167, ptr %168, align 1, !tbaa !13
  %170 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  %171 = load i64, ptr %170, align 8, !tbaa !9
  store i64 %171, ptr %16, align 8, !tbaa !9
  %172 = load i64, ptr %16, align 8, !tbaa !9
  %173 = and i64 %172, 255
  %174 = trunc i64 %173 to i8
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = getelementptr inbounds i8, ptr %175, i32 1
  store ptr %176, ptr %8, align 8, !tbaa !5
  store i8 %174, ptr %175, align 1, !tbaa !13
  %177 = load i64, ptr %16, align 8, !tbaa !9
  %178 = lshr i64 %177, 8
  %179 = and i64 %178, 255
  %180 = trunc i64 %179 to i8
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %181, i32 1
  store ptr %182, ptr %8, align 8, !tbaa !5
  store i8 %180, ptr %181, align 1, !tbaa !13
  %183 = load i64, ptr %16, align 8, !tbaa !9
  %184 = lshr i64 %183, 16
  %185 = and i64 %184, 255
  %186 = trunc i64 %185 to i8
  %187 = load ptr, ptr %8, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %187, i32 1
  store ptr %188, ptr %8, align 8, !tbaa !5
  store i8 %186, ptr %187, align 1, !tbaa !13
  %189 = load i64, ptr %16, align 8, !tbaa !9
  %190 = lshr i64 %189, 24
  %191 = and i64 %190, 255
  %192 = trunc i64 %191 to i8
  %193 = load ptr, ptr %8, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %193, i32 1
  store ptr %194, ptr %8, align 8, !tbaa !5
  store i8 %192, ptr %193, align 1, !tbaa !13
  br label %195

195:                                              ; preds = %82
  %196 = load i64, ptr %19, align 8, !tbaa !9
  %197 = sub nsw i64 %196, 8
  store i64 %197, ptr %19, align 8, !tbaa !9
  br label %79, !llvm.loop !14

198:                                              ; preds = %79
  %199 = load i64, ptr %19, align 8, !tbaa !9
  %200 = icmp ne i64 %199, -8
  br i1 %200, label %201, label %329

201:                                              ; preds = %198
  %202 = load i64, ptr %19, align 8, !tbaa !9
  %203 = add nsw i64 %202, 8
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds i8, ptr %204, i64 %203
  store ptr %205, ptr %7, align 8, !tbaa !5
  store i64 0, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  %206 = load i64, ptr %19, align 8, !tbaa !9
  %207 = add nsw i64 %206, 8
  switch i64 %207, label %266 [
    i64 8, label %208
    i64 7, label %214
    i64 6, label %222
    i64 5, label %230
    i64 4, label %237
    i64 3, label %243
    i64 2, label %251
    i64 1, label %259
  ]

208:                                              ; preds = %201
  %209 = load ptr, ptr %7, align 8, !tbaa !5
  %210 = getelementptr inbounds i8, ptr %209, i32 -1
  store ptr %210, ptr %7, align 8, !tbaa !5
  %211 = load i8, ptr %210, align 1, !tbaa !13
  %212 = zext i8 %211 to i64
  %213 = shl i64 %212, 24
  store i64 %213, ptr %14, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %208, %201
  %215 = load ptr, ptr %7, align 8, !tbaa !5
  %216 = getelementptr inbounds i8, ptr %215, i32 -1
  store ptr %216, ptr %7, align 8, !tbaa !5
  %217 = load i8, ptr %216, align 1, !tbaa !13
  %218 = zext i8 %217 to i64
  %219 = shl i64 %218, 16
  %220 = load i64, ptr %14, align 8, !tbaa !9
  %221 = or i64 %220, %219
  store i64 %221, ptr %14, align 8, !tbaa !9
  br label %222

222:                                              ; preds = %214, %201
  %223 = load ptr, ptr %7, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i32 -1
  store ptr %224, ptr %7, align 8, !tbaa !5
  %225 = load i8, ptr %224, align 1, !tbaa !13
  %226 = zext i8 %225 to i64
  %227 = shl i64 %226, 8
  %228 = load i64, ptr %14, align 8, !tbaa !9
  %229 = or i64 %228, %227
  store i64 %229, ptr %14, align 8, !tbaa !9
  br label %230

230:                                              ; preds = %222, %201
  %231 = load ptr, ptr %7, align 8, !tbaa !5
  %232 = getelementptr inbounds i8, ptr %231, i32 -1
  store ptr %232, ptr %7, align 8, !tbaa !5
  %233 = load i8, ptr %232, align 1, !tbaa !13
  %234 = zext i8 %233 to i64
  %235 = load i64, ptr %14, align 8, !tbaa !9
  %236 = or i64 %235, %234
  store i64 %236, ptr %14, align 8, !tbaa !9
  br label %237

237:                                              ; preds = %230, %201
  %238 = load ptr, ptr %7, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i32 -1
  store ptr %239, ptr %7, align 8, !tbaa !5
  %240 = load i8, ptr %239, align 1, !tbaa !13
  %241 = zext i8 %240 to i64
  %242 = shl i64 %241, 24
  store i64 %242, ptr %13, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %237, %201
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = getelementptr inbounds i8, ptr %244, i32 -1
  store ptr %245, ptr %7, align 8, !tbaa !5
  %246 = load i8, ptr %245, align 1, !tbaa !13
  %247 = zext i8 %246 to i64
  %248 = shl i64 %247, 16
  %249 = load i64, ptr %13, align 8, !tbaa !9
  %250 = or i64 %249, %248
  store i64 %250, ptr %13, align 8, !tbaa !9
  br label %251

251:                                              ; preds = %243, %201
  %252 = load ptr, ptr %7, align 8, !tbaa !5
  %253 = getelementptr inbounds i8, ptr %252, i32 -1
  store ptr %253, ptr %7, align 8, !tbaa !5
  %254 = load i8, ptr %253, align 1, !tbaa !13
  %255 = zext i8 %254 to i64
  %256 = shl i64 %255, 8
  %257 = load i64, ptr %13, align 8, !tbaa !9
  %258 = or i64 %257, %256
  store i64 %258, ptr %13, align 8, !tbaa !9
  br label %259

259:                                              ; preds = %251, %201
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %260, i32 -1
  store ptr %261, ptr %7, align 8, !tbaa !5
  %262 = load i8, ptr %261, align 1, !tbaa !13
  %263 = zext i8 %262 to i64
  %264 = load i64, ptr %13, align 8, !tbaa !9
  %265 = or i64 %264, %263
  store i64 %265, ptr %13, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %259, %201
  %267 = load i64, ptr %15, align 8, !tbaa !9
  %268 = load i64, ptr %13, align 8, !tbaa !9
  %269 = xor i64 %268, %267
  store i64 %269, ptr %13, align 8, !tbaa !9
  %270 = load i64, ptr %16, align 8, !tbaa !9
  %271 = load i64, ptr %14, align 8, !tbaa !9
  %272 = xor i64 %271, %270
  store i64 %272, ptr %14, align 8, !tbaa !9
  %273 = load i64, ptr %13, align 8, !tbaa !9
  %274 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  store i64 %273, ptr %274, align 16, !tbaa !9
  %275 = load i64, ptr %14, align 8, !tbaa !9
  %276 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  store i64 %275, ptr %276, align 8, !tbaa !9
  %277 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %278 = load ptr, ptr %10, align 8, !tbaa !5
  call void @RC2_encrypt(ptr noundef %277, ptr noundef %278)
  %279 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %280 = load i64, ptr %279, align 16, !tbaa !9
  store i64 %280, ptr %15, align 8, !tbaa !9
  %281 = load i64, ptr %15, align 8, !tbaa !9
  %282 = and i64 %281, 255
  %283 = trunc i64 %282 to i8
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds i8, ptr %284, i32 1
  store ptr %285, ptr %8, align 8, !tbaa !5
  store i8 %283, ptr %284, align 1, !tbaa !13
  %286 = load i64, ptr %15, align 8, !tbaa !9
  %287 = lshr i64 %286, 8
  %288 = and i64 %287, 255
  %289 = trunc i64 %288 to i8
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = getelementptr inbounds i8, ptr %290, i32 1
  store ptr %291, ptr %8, align 8, !tbaa !5
  store i8 %289, ptr %290, align 1, !tbaa !13
  %292 = load i64, ptr %15, align 8, !tbaa !9
  %293 = lshr i64 %292, 16
  %294 = and i64 %293, 255
  %295 = trunc i64 %294 to i8
  %296 = load ptr, ptr %8, align 8, !tbaa !5
  %297 = getelementptr inbounds i8, ptr %296, i32 1
  store ptr %297, ptr %8, align 8, !tbaa !5
  store i8 %295, ptr %296, align 1, !tbaa !13
  %298 = load i64, ptr %15, align 8, !tbaa !9
  %299 = lshr i64 %298, 24
  %300 = and i64 %299, 255
  %301 = trunc i64 %300 to i8
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = getelementptr inbounds i8, ptr %302, i32 1
  store ptr %303, ptr %8, align 8, !tbaa !5
  store i8 %301, ptr %302, align 1, !tbaa !13
  %304 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  %305 = load i64, ptr %304, align 8, !tbaa !9
  store i64 %305, ptr %16, align 8, !tbaa !9
  %306 = load i64, ptr %16, align 8, !tbaa !9
  %307 = and i64 %306, 255
  %308 = trunc i64 %307 to i8
  %309 = load ptr, ptr %8, align 8, !tbaa !5
  %310 = getelementptr inbounds i8, ptr %309, i32 1
  store ptr %310, ptr %8, align 8, !tbaa !5
  store i8 %308, ptr %309, align 1, !tbaa !13
  %311 = load i64, ptr %16, align 8, !tbaa !9
  %312 = lshr i64 %311, 8
  %313 = and i64 %312, 255
  %314 = trunc i64 %313 to i8
  %315 = load ptr, ptr %8, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i32 1
  store ptr %316, ptr %8, align 8, !tbaa !5
  store i8 %314, ptr %315, align 1, !tbaa !13
  %317 = load i64, ptr %16, align 8, !tbaa !9
  %318 = lshr i64 %317, 16
  %319 = and i64 %318, 255
  %320 = trunc i64 %319 to i8
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i32 1
  store ptr %322, ptr %8, align 8, !tbaa !5
  store i8 %320, ptr %321, align 1, !tbaa !13
  %323 = load i64, ptr %16, align 8, !tbaa !9
  %324 = lshr i64 %323, 24
  %325 = and i64 %324, 255
  %326 = trunc i64 %325 to i8
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds i8, ptr %327, i32 1
  store ptr %328, ptr %8, align 8, !tbaa !5
  store i8 %326, ptr %327, align 1, !tbaa !13
  br label %329

329:                                              ; preds = %266, %198
  %330 = load i64, ptr %15, align 8, !tbaa !9
  %331 = and i64 %330, 255
  %332 = trunc i64 %331 to i8
  %333 = load ptr, ptr %11, align 8, !tbaa !5
  %334 = getelementptr inbounds i8, ptr %333, i32 1
  store ptr %334, ptr %11, align 8, !tbaa !5
  store i8 %332, ptr %333, align 1, !tbaa !13
  %335 = load i64, ptr %15, align 8, !tbaa !9
  %336 = lshr i64 %335, 8
  %337 = and i64 %336, 255
  %338 = trunc i64 %337 to i8
  %339 = load ptr, ptr %11, align 8, !tbaa !5
  %340 = getelementptr inbounds i8, ptr %339, i32 1
  store ptr %340, ptr %11, align 8, !tbaa !5
  store i8 %338, ptr %339, align 1, !tbaa !13
  %341 = load i64, ptr %15, align 8, !tbaa !9
  %342 = lshr i64 %341, 16
  %343 = and i64 %342, 255
  %344 = trunc i64 %343 to i8
  %345 = load ptr, ptr %11, align 8, !tbaa !5
  %346 = getelementptr inbounds i8, ptr %345, i32 1
  store ptr %346, ptr %11, align 8, !tbaa !5
  store i8 %344, ptr %345, align 1, !tbaa !13
  %347 = load i64, ptr %15, align 8, !tbaa !9
  %348 = lshr i64 %347, 24
  %349 = and i64 %348, 255
  %350 = trunc i64 %349 to i8
  %351 = load ptr, ptr %11, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i32 1
  store ptr %352, ptr %11, align 8, !tbaa !5
  store i8 %350, ptr %351, align 1, !tbaa !13
  %353 = load i64, ptr %16, align 8, !tbaa !9
  %354 = and i64 %353, 255
  %355 = trunc i64 %354 to i8
  %356 = load ptr, ptr %11, align 8, !tbaa !5
  %357 = getelementptr inbounds i8, ptr %356, i32 1
  store ptr %357, ptr %11, align 8, !tbaa !5
  store i8 %355, ptr %356, align 1, !tbaa !13
  %358 = load i64, ptr %16, align 8, !tbaa !9
  %359 = lshr i64 %358, 8
  %360 = and i64 %359, 255
  %361 = trunc i64 %360 to i8
  %362 = load ptr, ptr %11, align 8, !tbaa !5
  %363 = getelementptr inbounds i8, ptr %362, i32 1
  store ptr %363, ptr %11, align 8, !tbaa !5
  store i8 %361, ptr %362, align 1, !tbaa !13
  %364 = load i64, ptr %16, align 8, !tbaa !9
  %365 = lshr i64 %364, 16
  %366 = and i64 %365, 255
  %367 = trunc i64 %366 to i8
  %368 = load ptr, ptr %11, align 8, !tbaa !5
  %369 = getelementptr inbounds i8, ptr %368, i32 1
  store ptr %369, ptr %11, align 8, !tbaa !5
  store i8 %367, ptr %368, align 1, !tbaa !13
  %370 = load i64, ptr %16, align 8, !tbaa !9
  %371 = lshr i64 %370, 24
  %372 = and i64 %371, 255
  %373 = trunc i64 %372 to i8
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = getelementptr inbounds i8, ptr %374, i32 1
  store ptr %375, ptr %11, align 8, !tbaa !5
  store i8 %373, ptr %374, align 1, !tbaa !13
  br label %728

376:                                              ; preds = %6
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i32 1
  store ptr %378, ptr %11, align 8, !tbaa !5
  %379 = load i8, ptr %377, align 1, !tbaa !13
  %380 = zext i8 %379 to i64
  store i64 %380, ptr %17, align 8, !tbaa !9
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = getelementptr inbounds i8, ptr %381, i32 1
  store ptr %382, ptr %11, align 8, !tbaa !5
  %383 = load i8, ptr %381, align 1, !tbaa !13
  %384 = zext i8 %383 to i64
  %385 = shl i64 %384, 8
  %386 = load i64, ptr %17, align 8, !tbaa !9
  %387 = or i64 %386, %385
  store i64 %387, ptr %17, align 8, !tbaa !9
  %388 = load ptr, ptr %11, align 8, !tbaa !5
  %389 = getelementptr inbounds i8, ptr %388, i32 1
  store ptr %389, ptr %11, align 8, !tbaa !5
  %390 = load i8, ptr %388, align 1, !tbaa !13
  %391 = zext i8 %390 to i64
  %392 = shl i64 %391, 16
  %393 = load i64, ptr %17, align 8, !tbaa !9
  %394 = or i64 %393, %392
  store i64 %394, ptr %17, align 8, !tbaa !9
  %395 = load ptr, ptr %11, align 8, !tbaa !5
  %396 = getelementptr inbounds i8, ptr %395, i32 1
  store ptr %396, ptr %11, align 8, !tbaa !5
  %397 = load i8, ptr %395, align 1, !tbaa !13
  %398 = zext i8 %397 to i64
  %399 = shl i64 %398, 24
  %400 = load i64, ptr %17, align 8, !tbaa !9
  %401 = or i64 %400, %399
  store i64 %401, ptr %17, align 8, !tbaa !9
  %402 = load ptr, ptr %11, align 8, !tbaa !5
  %403 = getelementptr inbounds i8, ptr %402, i32 1
  store ptr %403, ptr %11, align 8, !tbaa !5
  %404 = load i8, ptr %402, align 1, !tbaa !13
  %405 = zext i8 %404 to i64
  store i64 %405, ptr %18, align 8, !tbaa !9
  %406 = load ptr, ptr %11, align 8, !tbaa !5
  %407 = getelementptr inbounds i8, ptr %406, i32 1
  store ptr %407, ptr %11, align 8, !tbaa !5
  %408 = load i8, ptr %406, align 1, !tbaa !13
  %409 = zext i8 %408 to i64
  %410 = shl i64 %409, 8
  %411 = load i64, ptr %18, align 8, !tbaa !9
  %412 = or i64 %411, %410
  store i64 %412, ptr %18, align 8, !tbaa !9
  %413 = load ptr, ptr %11, align 8, !tbaa !5
  %414 = getelementptr inbounds i8, ptr %413, i32 1
  store ptr %414, ptr %11, align 8, !tbaa !5
  %415 = load i8, ptr %413, align 1, !tbaa !13
  %416 = zext i8 %415 to i64
  %417 = shl i64 %416, 16
  %418 = load i64, ptr %18, align 8, !tbaa !9
  %419 = or i64 %418, %417
  store i64 %419, ptr %18, align 8, !tbaa !9
  %420 = load ptr, ptr %11, align 8, !tbaa !5
  %421 = getelementptr inbounds i8, ptr %420, i32 1
  store ptr %421, ptr %11, align 8, !tbaa !5
  %422 = load i8, ptr %420, align 1, !tbaa !13
  %423 = zext i8 %422 to i64
  %424 = shl i64 %423, 24
  %425 = load i64, ptr %18, align 8, !tbaa !9
  %426 = or i64 %425, %424
  store i64 %426, ptr %18, align 8, !tbaa !9
  %427 = load ptr, ptr %11, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i64 -8
  store ptr %428, ptr %11, align 8, !tbaa !5
  %429 = load i64, ptr %19, align 8, !tbaa !9
  %430 = sub nsw i64 %429, 8
  store i64 %430, ptr %19, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %547, %376
  %432 = load i64, ptr %19, align 8, !tbaa !9
  %433 = icmp sge i64 %432, 0
  br i1 %433, label %434, label %550

434:                                              ; preds = %431
  %435 = load ptr, ptr %7, align 8, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %435, i32 1
  store ptr %436, ptr %7, align 8, !tbaa !5
  %437 = load i8, ptr %435, align 1, !tbaa !13
  %438 = zext i8 %437 to i64
  store i64 %438, ptr %13, align 8, !tbaa !9
  %439 = load ptr, ptr %7, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i32 1
  store ptr %440, ptr %7, align 8, !tbaa !5
  %441 = load i8, ptr %439, align 1, !tbaa !13
  %442 = zext i8 %441 to i64
  %443 = shl i64 %442, 8
  %444 = load i64, ptr %13, align 8, !tbaa !9
  %445 = or i64 %444, %443
  store i64 %445, ptr %13, align 8, !tbaa !9
  %446 = load ptr, ptr %7, align 8, !tbaa !5
  %447 = getelementptr inbounds i8, ptr %446, i32 1
  store ptr %447, ptr %7, align 8, !tbaa !5
  %448 = load i8, ptr %446, align 1, !tbaa !13
  %449 = zext i8 %448 to i64
  %450 = shl i64 %449, 16
  %451 = load i64, ptr %13, align 8, !tbaa !9
  %452 = or i64 %451, %450
  store i64 %452, ptr %13, align 8, !tbaa !9
  %453 = load ptr, ptr %7, align 8, !tbaa !5
  %454 = getelementptr inbounds i8, ptr %453, i32 1
  store ptr %454, ptr %7, align 8, !tbaa !5
  %455 = load i8, ptr %453, align 1, !tbaa !13
  %456 = zext i8 %455 to i64
  %457 = shl i64 %456, 24
  %458 = load i64, ptr %13, align 8, !tbaa !9
  %459 = or i64 %458, %457
  store i64 %459, ptr %13, align 8, !tbaa !9
  %460 = load i64, ptr %13, align 8, !tbaa !9
  %461 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  store i64 %460, ptr %461, align 16, !tbaa !9
  %462 = load ptr, ptr %7, align 8, !tbaa !5
  %463 = getelementptr inbounds i8, ptr %462, i32 1
  store ptr %463, ptr %7, align 8, !tbaa !5
  %464 = load i8, ptr %462, align 1, !tbaa !13
  %465 = zext i8 %464 to i64
  store i64 %465, ptr %14, align 8, !tbaa !9
  %466 = load ptr, ptr %7, align 8, !tbaa !5
  %467 = getelementptr inbounds i8, ptr %466, i32 1
  store ptr %467, ptr %7, align 8, !tbaa !5
  %468 = load i8, ptr %466, align 1, !tbaa !13
  %469 = zext i8 %468 to i64
  %470 = shl i64 %469, 8
  %471 = load i64, ptr %14, align 8, !tbaa !9
  %472 = or i64 %471, %470
  store i64 %472, ptr %14, align 8, !tbaa !9
  %473 = load ptr, ptr %7, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i32 1
  store ptr %474, ptr %7, align 8, !tbaa !5
  %475 = load i8, ptr %473, align 1, !tbaa !13
  %476 = zext i8 %475 to i64
  %477 = shl i64 %476, 16
  %478 = load i64, ptr %14, align 8, !tbaa !9
  %479 = or i64 %478, %477
  store i64 %479, ptr %14, align 8, !tbaa !9
  %480 = load ptr, ptr %7, align 8, !tbaa !5
  %481 = getelementptr inbounds i8, ptr %480, i32 1
  store ptr %481, ptr %7, align 8, !tbaa !5
  %482 = load i8, ptr %480, align 1, !tbaa !13
  %483 = zext i8 %482 to i64
  %484 = shl i64 %483, 24
  %485 = load i64, ptr %14, align 8, !tbaa !9
  %486 = or i64 %485, %484
  store i64 %486, ptr %14, align 8, !tbaa !9
  %487 = load i64, ptr %14, align 8, !tbaa !9
  %488 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  store i64 %487, ptr %488, align 8, !tbaa !9
  %489 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  call void @RC2_decrypt(ptr noundef %489, ptr noundef %490)
  %491 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %492 = load i64, ptr %491, align 16, !tbaa !9
  %493 = load i64, ptr %17, align 8, !tbaa !9
  %494 = xor i64 %492, %493
  store i64 %494, ptr %15, align 8, !tbaa !9
  %495 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  %496 = load i64, ptr %495, align 8, !tbaa !9
  %497 = load i64, ptr %18, align 8, !tbaa !9
  %498 = xor i64 %496, %497
  store i64 %498, ptr %16, align 8, !tbaa !9
  %499 = load i64, ptr %15, align 8, !tbaa !9
  %500 = and i64 %499, 255
  %501 = trunc i64 %500 to i8
  %502 = load ptr, ptr %8, align 8, !tbaa !5
  %503 = getelementptr inbounds i8, ptr %502, i32 1
  store ptr %503, ptr %8, align 8, !tbaa !5
  store i8 %501, ptr %502, align 1, !tbaa !13
  %504 = load i64, ptr %15, align 8, !tbaa !9
  %505 = lshr i64 %504, 8
  %506 = and i64 %505, 255
  %507 = trunc i64 %506 to i8
  %508 = load ptr, ptr %8, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i32 1
  store ptr %509, ptr %8, align 8, !tbaa !5
  store i8 %507, ptr %508, align 1, !tbaa !13
  %510 = load i64, ptr %15, align 8, !tbaa !9
  %511 = lshr i64 %510, 16
  %512 = and i64 %511, 255
  %513 = trunc i64 %512 to i8
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i32 1
  store ptr %515, ptr %8, align 8, !tbaa !5
  store i8 %513, ptr %514, align 1, !tbaa !13
  %516 = load i64, ptr %15, align 8, !tbaa !9
  %517 = lshr i64 %516, 24
  %518 = and i64 %517, 255
  %519 = trunc i64 %518 to i8
  %520 = load ptr, ptr %8, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %520, i32 1
  store ptr %521, ptr %8, align 8, !tbaa !5
  store i8 %519, ptr %520, align 1, !tbaa !13
  %522 = load i64, ptr %16, align 8, !tbaa !9
  %523 = and i64 %522, 255
  %524 = trunc i64 %523 to i8
  %525 = load ptr, ptr %8, align 8, !tbaa !5
  %526 = getelementptr inbounds i8, ptr %525, i32 1
  store ptr %526, ptr %8, align 8, !tbaa !5
  store i8 %524, ptr %525, align 1, !tbaa !13
  %527 = load i64, ptr %16, align 8, !tbaa !9
  %528 = lshr i64 %527, 8
  %529 = and i64 %528, 255
  %530 = trunc i64 %529 to i8
  %531 = load ptr, ptr %8, align 8, !tbaa !5
  %532 = getelementptr inbounds i8, ptr %531, i32 1
  store ptr %532, ptr %8, align 8, !tbaa !5
  store i8 %530, ptr %531, align 1, !tbaa !13
  %533 = load i64, ptr %16, align 8, !tbaa !9
  %534 = lshr i64 %533, 16
  %535 = and i64 %534, 255
  %536 = trunc i64 %535 to i8
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = getelementptr inbounds i8, ptr %537, i32 1
  store ptr %538, ptr %8, align 8, !tbaa !5
  store i8 %536, ptr %537, align 1, !tbaa !13
  %539 = load i64, ptr %16, align 8, !tbaa !9
  %540 = lshr i64 %539, 24
  %541 = and i64 %540, 255
  %542 = trunc i64 %541 to i8
  %543 = load ptr, ptr %8, align 8, !tbaa !5
  %544 = getelementptr inbounds i8, ptr %543, i32 1
  store ptr %544, ptr %8, align 8, !tbaa !5
  store i8 %542, ptr %543, align 1, !tbaa !13
  %545 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %545, ptr %17, align 8, !tbaa !9
  %546 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %546, ptr %18, align 8, !tbaa !9
  br label %547

547:                                              ; preds = %434
  %548 = load i64, ptr %19, align 8, !tbaa !9
  %549 = sub nsw i64 %548, 8
  store i64 %549, ptr %19, align 8, !tbaa !9
  br label %431, !llvm.loop !16

550:                                              ; preds = %431
  %551 = load i64, ptr %19, align 8, !tbaa !9
  %552 = icmp ne i64 %551, -8
  br i1 %552, label %553, label %681

553:                                              ; preds = %550
  %554 = load ptr, ptr %7, align 8, !tbaa !5
  %555 = getelementptr inbounds i8, ptr %554, i32 1
  store ptr %555, ptr %7, align 8, !tbaa !5
  %556 = load i8, ptr %554, align 1, !tbaa !13
  %557 = zext i8 %556 to i64
  store i64 %557, ptr %13, align 8, !tbaa !9
  %558 = load ptr, ptr %7, align 8, !tbaa !5
  %559 = getelementptr inbounds i8, ptr %558, i32 1
  store ptr %559, ptr %7, align 8, !tbaa !5
  %560 = load i8, ptr %558, align 1, !tbaa !13
  %561 = zext i8 %560 to i64
  %562 = shl i64 %561, 8
  %563 = load i64, ptr %13, align 8, !tbaa !9
  %564 = or i64 %563, %562
  store i64 %564, ptr %13, align 8, !tbaa !9
  %565 = load ptr, ptr %7, align 8, !tbaa !5
  %566 = getelementptr inbounds i8, ptr %565, i32 1
  store ptr %566, ptr %7, align 8, !tbaa !5
  %567 = load i8, ptr %565, align 1, !tbaa !13
  %568 = zext i8 %567 to i64
  %569 = shl i64 %568, 16
  %570 = load i64, ptr %13, align 8, !tbaa !9
  %571 = or i64 %570, %569
  store i64 %571, ptr %13, align 8, !tbaa !9
  %572 = load ptr, ptr %7, align 8, !tbaa !5
  %573 = getelementptr inbounds i8, ptr %572, i32 1
  store ptr %573, ptr %7, align 8, !tbaa !5
  %574 = load i8, ptr %572, align 1, !tbaa !13
  %575 = zext i8 %574 to i64
  %576 = shl i64 %575, 24
  %577 = load i64, ptr %13, align 8, !tbaa !9
  %578 = or i64 %577, %576
  store i64 %578, ptr %13, align 8, !tbaa !9
  %579 = load i64, ptr %13, align 8, !tbaa !9
  %580 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  store i64 %579, ptr %580, align 16, !tbaa !9
  %581 = load ptr, ptr %7, align 8, !tbaa !5
  %582 = getelementptr inbounds i8, ptr %581, i32 1
  store ptr %582, ptr %7, align 8, !tbaa !5
  %583 = load i8, ptr %581, align 1, !tbaa !13
  %584 = zext i8 %583 to i64
  store i64 %584, ptr %14, align 8, !tbaa !9
  %585 = load ptr, ptr %7, align 8, !tbaa !5
  %586 = getelementptr inbounds i8, ptr %585, i32 1
  store ptr %586, ptr %7, align 8, !tbaa !5
  %587 = load i8, ptr %585, align 1, !tbaa !13
  %588 = zext i8 %587 to i64
  %589 = shl i64 %588, 8
  %590 = load i64, ptr %14, align 8, !tbaa !9
  %591 = or i64 %590, %589
  store i64 %591, ptr %14, align 8, !tbaa !9
  %592 = load ptr, ptr %7, align 8, !tbaa !5
  %593 = getelementptr inbounds i8, ptr %592, i32 1
  store ptr %593, ptr %7, align 8, !tbaa !5
  %594 = load i8, ptr %592, align 1, !tbaa !13
  %595 = zext i8 %594 to i64
  %596 = shl i64 %595, 16
  %597 = load i64, ptr %14, align 8, !tbaa !9
  %598 = or i64 %597, %596
  store i64 %598, ptr %14, align 8, !tbaa !9
  %599 = load ptr, ptr %7, align 8, !tbaa !5
  %600 = getelementptr inbounds i8, ptr %599, i32 1
  store ptr %600, ptr %7, align 8, !tbaa !5
  %601 = load i8, ptr %599, align 1, !tbaa !13
  %602 = zext i8 %601 to i64
  %603 = shl i64 %602, 24
  %604 = load i64, ptr %14, align 8, !tbaa !9
  %605 = or i64 %604, %603
  store i64 %605, ptr %14, align 8, !tbaa !9
  %606 = load i64, ptr %14, align 8, !tbaa !9
  %607 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  store i64 %606, ptr %607, align 8, !tbaa !9
  %608 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %609 = load ptr, ptr %10, align 8, !tbaa !5
  call void @RC2_decrypt(ptr noundef %608, ptr noundef %609)
  %610 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  %611 = load i64, ptr %610, align 16, !tbaa !9
  %612 = load i64, ptr %17, align 8, !tbaa !9
  %613 = xor i64 %611, %612
  store i64 %613, ptr %15, align 8, !tbaa !9
  %614 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  %615 = load i64, ptr %614, align 8, !tbaa !9
  %616 = load i64, ptr %18, align 8, !tbaa !9
  %617 = xor i64 %615, %616
  store i64 %617, ptr %16, align 8, !tbaa !9
  %618 = load i64, ptr %19, align 8, !tbaa !9
  %619 = add nsw i64 %618, 8
  %620 = load ptr, ptr %8, align 8, !tbaa !5
  %621 = getelementptr inbounds i8, ptr %620, i64 %619
  store ptr %621, ptr %8, align 8, !tbaa !5
  %622 = load i64, ptr %19, align 8, !tbaa !9
  %623 = add nsw i64 %622, 8
  switch i64 %623, label %678 [
    i64 8, label %624
    i64 7, label %631
    i64 6, label %638
    i64 5, label %645
    i64 4, label %651
    i64 3, label %658
    i64 2, label %665
    i64 1, label %672
  ]

624:                                              ; preds = %553
  %625 = load i64, ptr %16, align 8, !tbaa !9
  %626 = lshr i64 %625, 24
  %627 = and i64 %626, 255
  %628 = trunc i64 %627 to i8
  %629 = load ptr, ptr %8, align 8, !tbaa !5
  %630 = getelementptr inbounds i8, ptr %629, i32 -1
  store ptr %630, ptr %8, align 8, !tbaa !5
  store i8 %628, ptr %630, align 1, !tbaa !13
  br label %631

631:                                              ; preds = %624, %553
  %632 = load i64, ptr %16, align 8, !tbaa !9
  %633 = lshr i64 %632, 16
  %634 = and i64 %633, 255
  %635 = trunc i64 %634 to i8
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = getelementptr inbounds i8, ptr %636, i32 -1
  store ptr %637, ptr %8, align 8, !tbaa !5
  store i8 %635, ptr %637, align 1, !tbaa !13
  br label %638

638:                                              ; preds = %631, %553
  %639 = load i64, ptr %16, align 8, !tbaa !9
  %640 = lshr i64 %639, 8
  %641 = and i64 %640, 255
  %642 = trunc i64 %641 to i8
  %643 = load ptr, ptr %8, align 8, !tbaa !5
  %644 = getelementptr inbounds i8, ptr %643, i32 -1
  store ptr %644, ptr %8, align 8, !tbaa !5
  store i8 %642, ptr %644, align 1, !tbaa !13
  br label %645

645:                                              ; preds = %638, %553
  %646 = load i64, ptr %16, align 8, !tbaa !9
  %647 = and i64 %646, 255
  %648 = trunc i64 %647 to i8
  %649 = load ptr, ptr %8, align 8, !tbaa !5
  %650 = getelementptr inbounds i8, ptr %649, i32 -1
  store ptr %650, ptr %8, align 8, !tbaa !5
  store i8 %648, ptr %650, align 1, !tbaa !13
  br label %651

651:                                              ; preds = %645, %553
  %652 = load i64, ptr %15, align 8, !tbaa !9
  %653 = lshr i64 %652, 24
  %654 = and i64 %653, 255
  %655 = trunc i64 %654 to i8
  %656 = load ptr, ptr %8, align 8, !tbaa !5
  %657 = getelementptr inbounds i8, ptr %656, i32 -1
  store ptr %657, ptr %8, align 8, !tbaa !5
  store i8 %655, ptr %657, align 1, !tbaa !13
  br label %658

658:                                              ; preds = %651, %553
  %659 = load i64, ptr %15, align 8, !tbaa !9
  %660 = lshr i64 %659, 16
  %661 = and i64 %660, 255
  %662 = trunc i64 %661 to i8
  %663 = load ptr, ptr %8, align 8, !tbaa !5
  %664 = getelementptr inbounds i8, ptr %663, i32 -1
  store ptr %664, ptr %8, align 8, !tbaa !5
  store i8 %662, ptr %664, align 1, !tbaa !13
  br label %665

665:                                              ; preds = %658, %553
  %666 = load i64, ptr %15, align 8, !tbaa !9
  %667 = lshr i64 %666, 8
  %668 = and i64 %667, 255
  %669 = trunc i64 %668 to i8
  %670 = load ptr, ptr %8, align 8, !tbaa !5
  %671 = getelementptr inbounds i8, ptr %670, i32 -1
  store ptr %671, ptr %8, align 8, !tbaa !5
  store i8 %669, ptr %671, align 1, !tbaa !13
  br label %672

672:                                              ; preds = %665, %553
  %673 = load i64, ptr %15, align 8, !tbaa !9
  %674 = and i64 %673, 255
  %675 = trunc i64 %674 to i8
  %676 = load ptr, ptr %8, align 8, !tbaa !5
  %677 = getelementptr inbounds i8, ptr %676, i32 -1
  store ptr %677, ptr %8, align 8, !tbaa !5
  store i8 %675, ptr %677, align 1, !tbaa !13
  br label %678

678:                                              ; preds = %672, %553
  %679 = load i64, ptr %13, align 8, !tbaa !9
  store i64 %679, ptr %17, align 8, !tbaa !9
  %680 = load i64, ptr %14, align 8, !tbaa !9
  store i64 %680, ptr %18, align 8, !tbaa !9
  br label %681

681:                                              ; preds = %678, %550
  %682 = load i64, ptr %17, align 8, !tbaa !9
  %683 = and i64 %682, 255
  %684 = trunc i64 %683 to i8
  %685 = load ptr, ptr %11, align 8, !tbaa !5
  %686 = getelementptr inbounds i8, ptr %685, i32 1
  store ptr %686, ptr %11, align 8, !tbaa !5
  store i8 %684, ptr %685, align 1, !tbaa !13
  %687 = load i64, ptr %17, align 8, !tbaa !9
  %688 = lshr i64 %687, 8
  %689 = and i64 %688, 255
  %690 = trunc i64 %689 to i8
  %691 = load ptr, ptr %11, align 8, !tbaa !5
  %692 = getelementptr inbounds i8, ptr %691, i32 1
  store ptr %692, ptr %11, align 8, !tbaa !5
  store i8 %690, ptr %691, align 1, !tbaa !13
  %693 = load i64, ptr %17, align 8, !tbaa !9
  %694 = lshr i64 %693, 16
  %695 = and i64 %694, 255
  %696 = trunc i64 %695 to i8
  %697 = load ptr, ptr %11, align 8, !tbaa !5
  %698 = getelementptr inbounds i8, ptr %697, i32 1
  store ptr %698, ptr %11, align 8, !tbaa !5
  store i8 %696, ptr %697, align 1, !tbaa !13
  %699 = load i64, ptr %17, align 8, !tbaa !9
  %700 = lshr i64 %699, 24
  %701 = and i64 %700, 255
  %702 = trunc i64 %701 to i8
  %703 = load ptr, ptr %11, align 8, !tbaa !5
  %704 = getelementptr inbounds i8, ptr %703, i32 1
  store ptr %704, ptr %11, align 8, !tbaa !5
  store i8 %702, ptr %703, align 1, !tbaa !13
  %705 = load i64, ptr %18, align 8, !tbaa !9
  %706 = and i64 %705, 255
  %707 = trunc i64 %706 to i8
  %708 = load ptr, ptr %11, align 8, !tbaa !5
  %709 = getelementptr inbounds i8, ptr %708, i32 1
  store ptr %709, ptr %11, align 8, !tbaa !5
  store i8 %707, ptr %708, align 1, !tbaa !13
  %710 = load i64, ptr %18, align 8, !tbaa !9
  %711 = lshr i64 %710, 8
  %712 = and i64 %711, 255
  %713 = trunc i64 %712 to i8
  %714 = load ptr, ptr %11, align 8, !tbaa !5
  %715 = getelementptr inbounds i8, ptr %714, i32 1
  store ptr %715, ptr %11, align 8, !tbaa !5
  store i8 %713, ptr %714, align 1, !tbaa !13
  %716 = load i64, ptr %18, align 8, !tbaa !9
  %717 = lshr i64 %716, 16
  %718 = and i64 %717, 255
  %719 = trunc i64 %718 to i8
  %720 = load ptr, ptr %11, align 8, !tbaa !5
  %721 = getelementptr inbounds i8, ptr %720, i32 1
  store ptr %721, ptr %11, align 8, !tbaa !5
  store i8 %719, ptr %720, align 1, !tbaa !13
  %722 = load i64, ptr %18, align 8, !tbaa !9
  %723 = lshr i64 %722, 24
  %724 = and i64 %723, 255
  %725 = trunc i64 %724 to i8
  %726 = load ptr, ptr %11, align 8, !tbaa !5
  %727 = getelementptr inbounds i8, ptr %726, i32 1
  store ptr %727, ptr %11, align 8, !tbaa !5
  store i8 %725, ptr %726, align 1, !tbaa !13
  br label %728

728:                                              ; preds = %681, %329
  store i64 0, ptr %18, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !9
  store i64 0, ptr %14, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  %729 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 1
  store i64 0, ptr %729, align 8, !tbaa !9
  %730 = getelementptr inbounds [2 x i64], ptr %20, i64 0, i64 0
  store i64 0, ptr %730, align 16, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  ret void
}

; 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 dso_local void @RC2_encrypt(ptr noundef, ptr noundef) #0

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

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

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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!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}


; 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 void @RC2_cbc_encrypt(ptr nocapture noundef readonly %0, ptr nocapture noundef writeonly %1, i64 noundef %2, ptr noundef %3, ptr nocapture noundef %4, i32 noundef %5) local_unnamed_addr #0 {
  %7 = alloca [2 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #2
  %.not = icmp eq i32 %5, 0
  %8 = getelementptr inbounds i8, ptr %4, i64 1
  %9 = load i32, ptr %4, align 1
  %10 = zext i32 %9 to i64
  %11 = getelementptr inbounds i8, ptr %4, i64 2
  %12 = getelementptr inbounds i8, ptr %4, i64 3
  %13 = getelementptr inbounds i8, ptr %4, i64 4
  %14 = getelementptr inbounds i8, ptr %4, i64 5
  %15 = load i32, ptr %13, align 1
  %16 = zext i32 %15 to i64
  %17 = getelementptr inbounds i8, ptr %4, i64 6
  %18 = icmp sgt i64 %2, 7
  br i1 %.not, label %123, label %19

19:                                               ; preds = %6
  br i1 %18, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %19
  %20 = getelementptr inbounds i8, ptr %7, i64 8
  br label %21

21:                                               ; preds = %.lr.ph, %21
  %.0.in262 = phi i64 [ %2, %.lr.ph ], [ %.0, %21 ]
  %.0229261 = phi i64 [ %16, %.lr.ph ], [ %42, %21 ]
  %.0231260 = phi i64 [ %10, %.lr.ph ], [ %30, %21 ]
  %.0239259 = phi ptr [ %0, %.lr.ph ], [ %27, %21 ]
  %.0247258 = phi ptr [ %1, %.lr.ph ], [ %53, %21 ]
  %.0 = add nsw i64 %.0.in262, -8
  %22 = load i32, ptr %.0239259, align 1
  %23 = zext i32 %22 to i64
  %24 = getelementptr inbounds i8, ptr %.0239259, i64 4
  %25 = load i32, ptr %24, align 1
  %26 = zext i32 %25 to i64
  %27 = getelementptr inbounds i8, ptr %.0239259, i64 8
  %28 = xor i64 %.0231260, %23
  %29 = xor i64 %.0229261, %26
  store i64 %28, ptr %7, align 16, !tbaa !5
  store i64 %29, ptr %20, align 8, !tbaa !5
  call void @RC2_encrypt(ptr noundef nonnull %7, ptr noundef %3)
  %30 = load i64, ptr %7, align 16, !tbaa !5
  %31 = trunc i64 %30 to i8
  %32 = getelementptr inbounds i8, ptr %.0247258, i64 1
  store i8 %31, ptr %.0247258, align 1, !tbaa !9
  %33 = lshr i64 %30, 8
  %34 = trunc i64 %33 to i8
  %35 = getelementptr inbounds i8, ptr %.0247258, i64 2
  store i8 %34, ptr %32, align 1, !tbaa !9
  %36 = lshr i64 %30, 16
  %37 = trunc i64 %36 to i8
  %38 = getelementptr inbounds i8, ptr %.0247258, i64 3
  store i8 %37, ptr %35, align 1, !tbaa !9
  %39 = lshr i64 %30, 24
  %40 = trunc i64 %39 to i8
  %41 = getelementptr inbounds i8, ptr %.0247258, i64 4
  store i8 %40, ptr %38, align 1, !tbaa !9
  %42 = load i64, ptr %20, align 8, !tbaa !5
  %43 = trunc i64 %42 to i8
  %44 = getelementptr inbounds i8, ptr %.0247258, i64 5
  store i8 %43, ptr %41, align 1, !tbaa !9
  %45 = lshr i64 %42, 8
  %46 = trunc i64 %45 to i8
  %47 = getelementptr inbounds i8, ptr %.0247258, i64 6
  store i8 %46, ptr %44, align 1, !tbaa !9
  %48 = lshr i64 %42, 16
  %49 = trunc i64 %48 to i8
  %50 = getelementptr inbounds i8, ptr %.0247258, i64 7
  store i8 %49, ptr %47, align 1, !tbaa !9
  %51 = lshr i64 %42, 24
  %52 = trunc i64 %51 to i8
  %53 = getelementptr inbounds i8, ptr %.0247258, i64 8
  store i8 %52, ptr %50, align 1, !tbaa !9
  %54 = icmp ugt i64 %.0.in262, 15
  br i1 %54, label %21, label %._crit_edge, !llvm.loop !10

._crit_edge:                                      ; preds = %21, %19
  %.0247.lcssa = phi ptr [ %1, %19 ], [ %53, %21 ]
  %.0239.lcssa = phi ptr [ %0, %19 ], [ %27, %21 ]
  %.0231.lcssa = phi i64 [ %10, %19 ], [ %30, %21 ]
  %.0229.lcssa = phi i64 [ %16, %19 ], [ %42, %21 ]
  %.0.in.lcssa = phi i64 [ %2, %19 ], [ %.0, %21 ]
  %.not257 = icmp eq i64 %.0.in.lcssa, 0
  br i1 %.not257, label %._crit_edge._crit_edge, label %55

._crit_edge._crit_edge:                           ; preds = %._crit_edge
  %.pre = trunc i64 %.0231.lcssa to i8
  %.pre287 = lshr i64 %.0231.lcssa, 8
  %.pre289 = trunc i64 %.pre287 to i8
  %.pre291 = lshr i64 %.0231.lcssa, 16
  %.pre293 = trunc i64 %.pre291 to i8
  %.pre295 = lshr i64 %.0231.lcssa, 24
  %.pre297 = trunc i64 %.pre295 to i8
  %.pre299 = trunc i64 %.0229.lcssa to i8
  %.pre301 = lshr i64 %.0229.lcssa, 8
  %.pre303 = trunc i64 %.pre301 to i8
  %.pre305 = lshr i64 %.0229.lcssa, 16
  %.pre307 = trunc i64 %.pre305 to i8
  %.pre309 = lshr i64 %.0229.lcssa, 24
  %.pre311 = trunc i64 %.pre309 to i8
  br label %122

55:                                               ; preds = %._crit_edge
  %56 = getelementptr inbounds i8, ptr %.0239.lcssa, i64 %.0.in.lcssa
  switch i64 %.0.in.lcssa, label %95 [
    i64 1, label %90
    i64 7, label %57
    i64 6, label %62
    i64 5, label %68
    i64 4, label %73
    i64 3, label %78
    i64 2, label %84
  ]

57:                                               ; preds = %55
  %58 = getelementptr inbounds i8, ptr %56, i64 -1
  %59 = load i8, ptr %58, align 1, !tbaa !9
  %60 = zext i8 %59 to i64
  %61 = shl nuw nsw i64 %60, 16
  br label %62

62:                                               ; preds = %57, %55
  %.2241 = phi ptr [ %56, %55 ], [ %58, %57 ]
  %.1234 = phi i64 [ 0, %55 ], [ %61, %57 ]
  %63 = getelementptr inbounds i8, ptr %.2241, i64 -1
  %64 = load i8, ptr %63, align 1, !tbaa !9
  %65 = zext i8 %64 to i64
  %66 = shl nuw nsw i64 %65, 8
  %67 = or disjoint i64 %66, %.1234
  br label %68

68:                                               ; preds = %62, %55
  %.3242 = phi ptr [ %56, %55 ], [ %63, %62 ]
  %.2 = phi i64 [ 0, %55 ], [ %67, %62 ]
  %69 = getelementptr inbounds i8, ptr %.3242, i64 -1
  %70 = load i8, ptr %69, align 1, !tbaa !9
  %71 = zext i8 %70 to i64
  %72 = or i64 %.2, %71
  br label %73

73:                                               ; preds = %68, %55
  %.4243 = phi ptr [ %56, %55 ], [ %69, %68 ]
  %.3 = phi i64 [ 0, %55 ], [ %72, %68 ]
  %74 = getelementptr inbounds i8, ptr %.4243, i64 -1
  %75 = load i8, ptr %74, align 1, !tbaa !9
  %76 = zext i8 %75 to i64
  %77 = shl nuw nsw i64 %76, 24
  br label %78

78:                                               ; preds = %73, %55
  %.5244 = phi ptr [ %56, %55 ], [ %74, %73 ]
  %.0235 = phi i64 [ 0, %55 ], [ %77, %73 ]
  %.4 = phi i64 [ 0, %55 ], [ %.3, %73 ]
  %79 = getelementptr inbounds i8, ptr %.5244, i64 -1
  %80 = load i8, ptr %79, align 1, !tbaa !9
  %81 = zext i8 %80 to i64
  %82 = shl nuw nsw i64 %81, 16
  %83 = or disjoint i64 %82, %.0235
  br label %84

84:                                               ; preds = %78, %55
  %.6245 = phi ptr [ %56, %55 ], [ %79, %78 ]
  %.1236 = phi i64 [ 0, %55 ], [ %83, %78 ]
  %.5 = phi i64 [ 0, %55 ], [ %.4, %78 ]
  %85 = getelementptr inbounds i8, ptr %.6245, i64 -1
  %86 = load i8, ptr %85, align 1, !tbaa !9
  %87 = zext i8 %86 to i64
  %88 = shl nuw nsw i64 %87, 8
  %89 = or i64 %88, %.1236
  br label %90

90:                                               ; preds = %55, %84
  %.7246 = phi ptr [ %56, %55 ], [ %85, %84 ]
  %.2237 = phi i64 [ 0, %55 ], [ %89, %84 ]
  %.6 = phi i64 [ 0, %55 ], [ %.5, %84 ]
  %91 = getelementptr inbounds i8, ptr %.7246, i64 -1
  %92 = load i8, ptr %91, align 1, !tbaa !9
  %93 = zext i8 %92 to i64
  %94 = or i64 %.2237, %93
  br label %95

95:                                               ; preds = %90, %55
  %.3238 = phi i64 [ 0, %55 ], [ %94, %90 ]
  %.7 = phi i64 [ 0, %55 ], [ %.6, %90 ]
  %96 = xor i64 %.3238, %.0231.lcssa
  %97 = xor i64 %.7, %.0229.lcssa
  store i64 %96, ptr %7, align 16, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %7, i64 8
  store i64 %97, ptr %98, align 8, !tbaa !5
  call void @RC2_encrypt(ptr noundef nonnull %7, ptr noundef %3)
  %99 = load i64, ptr %7, align 16, !tbaa !5
  %100 = trunc i64 %99 to i8
  %101 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 1
  store i8 %100, ptr %.0247.lcssa, align 1, !tbaa !9
  %102 = lshr i64 %99, 8
  %103 = trunc i64 %102 to i8
  %104 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 2
  store i8 %103, ptr %101, align 1, !tbaa !9
  %105 = lshr i64 %99, 16
  %106 = trunc i64 %105 to i8
  %107 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 3
  store i8 %106, ptr %104, align 1, !tbaa !9
  %108 = lshr i64 %99, 24
  %109 = trunc i64 %108 to i8
  %110 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 4
  store i8 %109, ptr %107, align 1, !tbaa !9
  %111 = load i64, ptr %98, align 8, !tbaa !5
  %112 = trunc i64 %111 to i8
  %113 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 5
  store i8 %112, ptr %110, align 1, !tbaa !9
  %114 = lshr i64 %111, 8
  %115 = trunc i64 %114 to i8
  %116 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 6
  store i8 %115, ptr %113, align 1, !tbaa !9
  %117 = lshr i64 %111, 16
  %118 = trunc i64 %117 to i8
  %119 = getelementptr inbounds i8, ptr %.0247.lcssa, i64 7
  store i8 %118, ptr %116, align 1, !tbaa !9
  %120 = lshr i64 %111, 24
  %121 = trunc i64 %120 to i8
  store i8 %121, ptr %119, align 1, !tbaa !9
  br label %122

122:                                              ; preds = %._crit_edge._crit_edge, %95
  %.pre-phi312 = phi i8 [ %.pre311, %._crit_edge._crit_edge ], [ %121, %95 ]
  %.pre-phi308 = phi i8 [ %.pre307, %._crit_edge._crit_edge ], [ %118, %95 ]
  %.pre-phi304 = phi i8 [ %.pre303, %._crit_edge._crit_edge ], [ %115, %95 ]
  %.pre-phi300 = phi i8 [ %.pre299, %._crit_edge._crit_edge ], [ %112, %95 ]
  %.pre-phi298 = phi i8 [ %.pre297, %._crit_edge._crit_edge ], [ %109, %95 ]
  %.pre-phi294 = phi i8 [ %.pre293, %._crit_edge._crit_edge ], [ %106, %95 ]
  %.pre-phi290 = phi i8 [ %.pre289, %._crit_edge._crit_edge ], [ %103, %95 ]
  %.pre-phi = phi i8 [ %.pre, %._crit_edge._crit_edge ], [ %100, %95 ]
  store i8 %.pre-phi, ptr %4, align 1, !tbaa !9
  store i8 %.pre-phi290, ptr %8, align 1, !tbaa !9
  store i8 %.pre-phi294, ptr %11, align 1, !tbaa !9
  store i8 %.pre-phi298, ptr %12, align 1, !tbaa !9
  store i8 %.pre-phi300, ptr %13, align 1, !tbaa !9
  store i8 %.pre-phi304, ptr %14, align 1, !tbaa !9
  store i8 %.pre-phi308, ptr %17, align 1, !tbaa !9
  br label %252

123:                                              ; preds = %6
  br i1 %18, label %.lr.ph273, label %._crit_edge274

.lr.ph273:                                        ; preds = %123
  %124 = getelementptr inbounds i8, ptr %7, i64 8
  br label %125

125:                                              ; preds = %.lr.ph273, %125
  %.1.in271 = phi i64 [ %2, %.lr.ph273 ], [ %.1, %125 ]
  %.0225270 = phi i64 [ %16, %.lr.ph273 ], [ %151, %125 ]
  %.0227269 = phi i64 [ %10, %.lr.ph273 ], [ %138, %125 ]
  %.8268 = phi ptr [ %0, %.lr.ph273 ], [ %147, %125 ]
  %.1248267 = phi ptr [ %1, %.lr.ph273 ], [ %177, %125 ]
  %.1 = add nsw i64 %.1.in271, -8
  %126 = load i16, ptr %.8268, align 1
  %127 = zext i16 %126 to i64
  %128 = getelementptr inbounds i8, ptr %.8268, i64 2
  %129 = getelementptr inbounds i8, ptr %.8268, i64 3
  %130 = load i8, ptr %128, align 1, !tbaa !9
  %131 = zext i8 %130 to i64
  %132 = shl nuw nsw i64 %131, 16
  %133 = or disjoint i64 %132, %127
  %134 = getelementptr inbounds i8, ptr %.8268, i64 4
  %135 = load i8, ptr %129, align 1, !tbaa !9
  %136 = zext i8 %135 to i64
  %137 = shl nuw nsw i64 %136, 24
  %138 = or disjoint i64 %133, %137
  store i64 %138, ptr %7, align 16, !tbaa !5
  %139 = load i16, ptr %134, align 1
  %140 = zext i16 %139 to i64
  %141 = getelementptr inbounds i8, ptr %.8268, i64 6
  %142 = getelementptr inbounds i8, ptr %.8268, i64 7
  %143 = load i8, ptr %141, align 1, !tbaa !9
  %144 = zext i8 %143 to i64
  %145 = shl nuw nsw i64 %144, 16
  %146 = or disjoint i64 %145, %140
  %147 = getelementptr inbounds i8, ptr %.8268, i64 8
  %148 = load i8, ptr %142, align 1, !tbaa !9
  %149 = zext i8 %148 to i64
  %150 = shl nuw nsw i64 %149, 24
  %151 = or disjoint i64 %146, %150
  store i64 %151, ptr %124, align 8, !tbaa !5
  call void @RC2_decrypt(ptr noundef nonnull %7, ptr noundef %3)
  %152 = load i64, ptr %7, align 16, !tbaa !5
  %153 = xor i64 %152, %.0227269
  %154 = load i64, ptr %124, align 8, !tbaa !5
  %155 = xor i64 %154, %.0225270
  %156 = trunc i64 %153 to i8
  %157 = getelementptr inbounds i8, ptr %.1248267, i64 1
  store i8 %156, ptr %.1248267, align 1, !tbaa !9
  %158 = lshr i64 %153, 8
  %159 = trunc i64 %158 to i8
  %160 = getelementptr inbounds i8, ptr %.1248267, i64 2
  store i8 %159, ptr %157, align 1, !tbaa !9
  %161 = lshr i64 %153, 16
  %162 = trunc i64 %161 to i8
  %163 = getelementptr inbounds i8, ptr %.1248267, i64 3
  store i8 %162, ptr %160, align 1, !tbaa !9
  %164 = lshr i64 %153, 24
  %165 = trunc i64 %164 to i8
  %166 = getelementptr inbounds i8, ptr %.1248267, i64 4
  store i8 %165, ptr %163, align 1, !tbaa !9
  %167 = trunc i64 %155 to i8
  %168 = getelementptr inbounds i8, ptr %.1248267, i64 5
  store i8 %167, ptr %166, align 1, !tbaa !9
  %169 = lshr i64 %155, 8
  %170 = trunc i64 %169 to i8
  %171 = getelementptr inbounds i8, ptr %.1248267, i64 6
  store i8 %170, ptr %168, align 1, !tbaa !9
  %172 = lshr i64 %155, 16
  %173 = trunc i64 %172 to i8
  %174 = getelementptr inbounds i8, ptr %.1248267, i64 7
  store i8 %173, ptr %171, align 1, !tbaa !9
  %175 = lshr i64 %155, 24
  %176 = trunc i64 %175 to i8
  %177 = getelementptr inbounds i8, ptr %.1248267, i64 8
  store i8 %176, ptr %174, align 1, !tbaa !9
  %178 = icmp ugt i64 %.1.in271, 15
  br i1 %178, label %125, label %._crit_edge274, !llvm.loop !12

._crit_edge274:                                   ; preds = %125, %123
  %.1248.lcssa = phi ptr [ %1, %123 ], [ %177, %125 ]
  %.8.lcssa = phi ptr [ %0, %123 ], [ %147, %125 ]
  %.0227.lcssa = phi i64 [ %10, %123 ], [ %138, %125 ]
  %.0225.lcssa = phi i64 [ %16, %123 ], [ %151, %125 ]
  %.1.in.lcssa = phi i64 [ %2, %123 ], [ %.1, %125 ]
  %.not256 = icmp eq i64 %.1.in.lcssa, 0
  br i1 %.not256, label %237, label %179

179:                                              ; preds = %._crit_edge274
  %180 = load i16, ptr %.8.lcssa, align 1
  %181 = zext i16 %180 to i64
  %182 = getelementptr inbounds i8, ptr %.8.lcssa, i64 2
  %183 = getelementptr inbounds i8, ptr %.8.lcssa, i64 3
  %184 = load i8, ptr %182, align 1, !tbaa !9
  %185 = zext i8 %184 to i64
  %186 = shl nuw nsw i64 %185, 16
  %187 = or disjoint i64 %186, %181
  %188 = getelementptr inbounds i8, ptr %.8.lcssa, i64 4
  %189 = load i8, ptr %183, align 1, !tbaa !9
  %190 = zext i8 %189 to i64
  %191 = shl nuw nsw i64 %190, 24
  %192 = or disjoint i64 %187, %191
  store i64 %192, ptr %7, align 16, !tbaa !5
  %193 = load i16, ptr %188, align 1
  %194 = zext i16 %193 to i64
  %195 = getelementptr inbounds i8, ptr %.8.lcssa, i64 6
  %196 = getelementptr inbounds i8, ptr %.8.lcssa, i64 7
  %197 = load i8, ptr %195, align 1, !tbaa !9
  %198 = zext i8 %197 to i64
  %199 = shl nuw nsw i64 %198, 16
  %200 = or disjoint i64 %199, %194
  %201 = load i8, ptr %196, align 1, !tbaa !9
  %202 = zext i8 %201 to i64
  %203 = shl nuw nsw i64 %202, 24
  %204 = or disjoint i64 %200, %203
  %205 = getelementptr inbounds i8, ptr %7, i64 8
  store i64 %204, ptr %205, align 8, !tbaa !5
  call void @RC2_decrypt(ptr noundef nonnull %7, ptr noundef %3)
  %206 = load i64, ptr %7, align 16, !tbaa !5
  %207 = xor i64 %206, %.0227.lcssa
  %208 = load i64, ptr %205, align 8, !tbaa !5
  %209 = xor i64 %208, %.0225.lcssa
  %210 = getelementptr inbounds i8, ptr %.1248.lcssa, i64 %.1.in.lcssa
  switch i64 %.1.in.lcssa, label %237 [
    i64 1, label %234
    i64 7, label %211
    i64 6, label %215
    i64 5, label %219
    i64 4, label %222
    i64 3, label %226
    i64 2, label %230
  ]

211:                                              ; preds = %179
  %212 = lshr i64 %209, 16
  %213 = trunc i64 %212 to i8
  %214 = getelementptr inbounds i8, ptr %210, i64 -1
  store i8 %213, ptr %214, align 1, !tbaa !9
  br label %215

215:                                              ; preds = %211, %179
  %.3250 = phi ptr [ %210, %179 ], [ %214, %211 ]
  %216 = lshr i64 %209, 8
  %217 = trunc i64 %216 to i8
  %218 = getelementptr inbounds i8, ptr %.3250, i64 -1
  store i8 %217, ptr %218, align 1, !tbaa !9
  br label %219

219:                                              ; preds = %215, %179
  %.4251 = phi ptr [ %210, %179 ], [ %218, %215 ]
  %220 = trunc i64 %209 to i8
  %221 = getelementptr inbounds i8, ptr %.4251, i64 -1
  store i8 %220, ptr %221, align 1, !tbaa !9
  br label %222

222:                                              ; preds = %219, %179
  %.5252 = phi ptr [ %210, %179 ], [ %221, %219 ]
  %223 = lshr i64 %207, 24
  %224 = trunc i64 %223 to i8
  %225 = getelementptr inbounds i8, ptr %.5252, i64 -1
  store i8 %224, ptr %225, align 1, !tbaa !9
  br label %226

226:                                              ; preds = %222, %179
  %.6253 = phi ptr [ %210, %179 ], [ %225, %222 ]
  %227 = lshr i64 %207, 16
  %228 = trunc i64 %227 to i8
  %229 = getelementptr inbounds i8, ptr %.6253, i64 -1
  store i8 %228, ptr %229, align 1, !tbaa !9
  br label %230

230:                                              ; preds = %226, %179
  %.7254 = phi ptr [ %210, %179 ], [ %229, %226 ]
  %231 = lshr i64 %207, 8
  %232 = trunc i64 %231 to i8
  %233 = getelementptr inbounds i8, ptr %.7254, i64 -1
  store i8 %232, ptr %233, align 1, !tbaa !9
  br label %234

234:                                              ; preds = %179, %230
  %.8255 = phi ptr [ %210, %179 ], [ %233, %230 ]
  %235 = trunc i64 %207 to i8
  %236 = getelementptr inbounds i8, ptr %.8255, i64 -1
  store i8 %235, ptr %236, align 1, !tbaa !9
  br label %237

237:                                              ; preds = %179, %234, %._crit_edge274
  %.1228 = phi i64 [ %.0227.lcssa, %._crit_edge274 ], [ %192, %234 ], [ %192, %179 ]
  %.1226 = phi i64 [ %.0225.lcssa, %._crit_edge274 ], [ %204, %234 ], [ %204, %179 ]
  %238 = trunc i64 %.1228 to i8
  store i8 %238, ptr %4, align 1, !tbaa !9
  %239 = lshr i64 %.1228, 8
  %240 = trunc i64 %239 to i8
  store i8 %240, ptr %8, align 1, !tbaa !9
  %241 = lshr i64 %.1228, 16
  %242 = trunc i64 %241 to i8
  store i8 %242, ptr %11, align 1, !tbaa !9
  %243 = lshr i64 %.1228, 24
  %244 = trunc nuw i64 %243 to i8
  store i8 %244, ptr %12, align 1, !tbaa !9
  %245 = trunc i64 %.1226 to i8
  store i8 %245, ptr %13, align 1, !tbaa !9
  %246 = lshr i64 %.1226, 8
  %247 = trunc i64 %246 to i8
  store i8 %247, ptr %14, align 1, !tbaa !9
  %248 = lshr i64 %.1226, 16
  %249 = trunc i64 %248 to i8
  store i8 %249, ptr %17, align 1, !tbaa !9
  %250 = lshr i64 %.1226, 24
  %251 = trunc nuw i64 %250 to i8
  br label %252

252:                                              ; preds = %237, %122
  %.sink = phi i8 [ %251, %237 ], [ %.pre-phi312, %122 ]
  %253 = getelementptr inbounds i8, ptr %4, i64 7
  store i8 %.sink, ptr %253, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #2
  ret void
}

; 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 dso_local void @RC2_encrypt(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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 = { 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", !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}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass