; LLVM IR from intel/qpl :: sources/core-sw/src/filtering (qplc_unpack_8u)

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

%union.qplc_bit_byte_pool64_t = type { i64 }
%union.qplc_bit_byte_pool32_t = type { i32 }
%union.qplc_bit_byte_pool48_t = type { i64 }

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

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

; Function Attrs: nounwind uwtable
define dso_local void @px_qplc_unpack_3u8u(ptr noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %3) #1 {
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i16, align 2
  %13 = alloca i16, align 2
  %14 = alloca i32, align 4
  %15 = alloca i16, align 2
  %16 = alloca i32, align 4
  %17 = alloca %union.qplc_bit_byte_pool64_t, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca %union.qplc_bit_byte_pool32_t, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %union.qplc_bit_byte_pool48_t, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i64, align 8
  %27 = alloca %union.qplc_bit_byte_pool32_t, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i16, align 2
  %31 = alloca i16, align 2
  %32 = alloca i32, align 4
  %33 = alloca i16, align 2
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #2
  store i64 1970324954415111, ptr %9, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  store i64 504403188330268416, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  store i64 7696581853184, ptr %11, align 8, !tbaa !11
  %34 = load i32, ptr %7, align 4, !tbaa !9
  %35 = icmp ult i32 0, %34
  br i1 %35, label %36, label %98

36:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #2
  store i16 7, ptr %12, align 2, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #2
  store i16 0, ptr %13, align 2, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  %37 = load i32, ptr %7, align 4, !tbaa !9
  %38 = sub i32 8, %37
  store i32 %38, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #2
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = load i8, ptr %39, align 1, !tbaa !15
  %41 = zext i8 %40 to i32
  %42 = load i32, ptr %7, align 4, !tbaa !9
  %43 = ashr i32 %41, %42
  %44 = trunc i32 %43 to i16
  store i16 %44, ptr %15, align 2, !tbaa !13
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i32 1
  store ptr %46, ptr %5, align 8, !tbaa !5
  br label %47

47:                                               ; preds = %93, %36
  %48 = load i32, ptr %14, align 4, !tbaa !9
  %49 = icmp ult i32 0, %48
  br i1 %49, label %50, label %94

50:                                               ; preds = %47
  %51 = load i32, ptr %14, align 4, !tbaa !9
  %52 = icmp ugt i32 3, %51
  br i1 %52, label %53, label %72

53:                                               ; preds = %50
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = load i8, ptr %54, align 1, !tbaa !15
  %56 = zext i8 %55 to i16
  store i16 %56, ptr %13, align 2, !tbaa !13
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i32 1
  store ptr %58, ptr %5, align 8, !tbaa !5
  %59 = load i16, ptr %13, align 2, !tbaa !13
  %60 = zext i16 %59 to i32
  %61 = load i32, ptr %14, align 4, !tbaa !9
  %62 = shl i32 %60, %61
  %63 = trunc i32 %62 to i16
  store i16 %63, ptr %13, align 2, !tbaa !13
  %64 = load i16, ptr %15, align 2, !tbaa !13
  %65 = zext i16 %64 to i32
  %66 = load i16, ptr %13, align 2, !tbaa !13
  %67 = zext i16 %66 to i32
  %68 = or i32 %65, %67
  %69 = trunc i32 %68 to i16
  store i16 %69, ptr %15, align 2, !tbaa !13
  %70 = load i32, ptr %14, align 4, !tbaa !9
  %71 = add i32 %70, 8
  store i32 %71, ptr %14, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %53, %50
  %73 = load i16, ptr %15, align 2, !tbaa !13
  %74 = zext i16 %73 to i32
  %75 = load i16, ptr %12, align 2, !tbaa !13
  %76 = zext i16 %75 to i32
  %77 = and i32 %74, %76
  %78 = trunc i32 %77 to i8
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  store i8 %78, ptr %79, align 1, !tbaa !15
  %80 = load i16, ptr %15, align 2, !tbaa !13
  %81 = zext i16 %80 to i32
  %82 = ashr i32 %81, 3
  %83 = trunc i32 %82 to i16
  store i16 %83, ptr %15, align 2, !tbaa !13
  %84 = load i32, ptr %14, align 4, !tbaa !9
  %85 = sub i32 %84, 3
  store i32 %85, ptr %14, align 4, !tbaa !9
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = getelementptr inbounds i8, ptr %86, i32 1
  store ptr %87, ptr %8, align 8, !tbaa !5
  %88 = load i32, ptr %6, align 4, !tbaa !9
  %89 = add i32 %88, -1
  store i32 %89, ptr %6, align 4, !tbaa !9
  %90 = load i32, ptr %6, align 4, !tbaa !9
  %91 = icmp eq i32 0, %90
  br i1 %91, label %92, label %93

92:                                               ; preds = %72
  store i32 1, ptr %16, align 4
  br label %95

93:                                               ; preds = %72
  br label %47, !llvm.loop !16

94:                                               ; preds = %47
  store i32 0, ptr %16, align 4
  br label %95

95:                                               ; preds = %94, %92
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #2
  %96 = load i32, ptr %16, align 4
  switch i32 %96, label %594 [
    i32 0, label %97
  ]

97:                                               ; preds = %95
  br label %98

98:                                               ; preds = %97, %4
  br label %99

99:                                               ; preds = %102, %98
  %100 = load i32, ptr %6, align 4, !tbaa !9
  %101 = icmp ugt i32 %100, 32
  br i1 %101, label %102, label %333

102:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %103, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  %104 = load ptr, ptr %18, align 8, !tbaa !5
  %105 = load i64, ptr %104, align 8, !tbaa !11
  store i64 %105, ptr %19, align 8, !tbaa !11
  %106 = load ptr, ptr %5, align 8, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %106, i64 8
  store ptr %107, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  %108 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %108, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #2
  %109 = load ptr, ptr %21, align 8, !tbaa !5
  %110 = load i32, ptr %109, align 4, !tbaa !9
  store i32 %110, ptr %22, align 4, !tbaa !9
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i64 4
  store ptr %112, ptr %5, align 8, !tbaa !5
  %113 = load i64, ptr %19, align 8, !tbaa !11
  %114 = load i64, ptr %9, align 8, !tbaa !11
  %115 = and i64 %113, %114
  store i64 %115, ptr %17, align 8, !tbaa !15
  %116 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 0
  %117 = load i8, ptr %116, align 8, !tbaa !15
  %118 = load ptr, ptr %8, align 8, !tbaa !5
  %119 = getelementptr inbounds i8, ptr %118, i64 0
  store i8 %117, ptr %119, align 1, !tbaa !15
  %120 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 3
  %121 = load i8, ptr %120, align 1, !tbaa !15
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %122, i64 8
  store i8 %121, ptr %123, align 1, !tbaa !15
  %124 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 6
  %125 = load i8, ptr %124, align 2, !tbaa !15
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = getelementptr inbounds i8, ptr %126, i64 16
  store i8 %125, ptr %127, align 1, !tbaa !15
  %128 = load i64, ptr %19, align 8, !tbaa !11
  %129 = lshr i64 %128, 1
  %130 = load i64, ptr %10, align 8, !tbaa !11
  %131 = and i64 %129, %130
  store i64 %131, ptr %17, align 8, !tbaa !15
  %132 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 1
  %133 = load i8, ptr %132, align 1, !tbaa !15
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 3
  store i8 %133, ptr %135, align 1, !tbaa !15
  %136 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 4
  %137 = load i8, ptr %136, align 4, !tbaa !15
  %138 = load ptr, ptr %8, align 8, !tbaa !5
  %139 = getelementptr inbounds i8, ptr %138, i64 11
  store i8 %137, ptr %139, align 1, !tbaa !15
  %140 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 7
  %141 = load i8, ptr %140, align 1, !tbaa !15
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %142, i64 19
  store i8 %141, ptr %143, align 1, !tbaa !15
  %144 = load i64, ptr %19, align 8, !tbaa !11
  %145 = lshr i64 %144, 2
  %146 = load i64, ptr %11, align 8, !tbaa !11
  %147 = and i64 %145, %146
  store i64 %147, ptr %17, align 8, !tbaa !15
  %148 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 2
  %149 = load i8, ptr %148, align 2, !tbaa !15
  %150 = load ptr, ptr %8, align 8, !tbaa !5
  %151 = getelementptr inbounds i8, ptr %150, i64 6
  store i8 %149, ptr %151, align 1, !tbaa !15
  %152 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 5
  %153 = load i8, ptr %152, align 1, !tbaa !15
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %154, i64 14
  store i8 %153, ptr %155, align 1, !tbaa !15
  %156 = load i64, ptr %19, align 8, !tbaa !11
  %157 = lshr i64 %156, 3
  %158 = load i64, ptr %9, align 8, !tbaa !11
  %159 = and i64 %157, %158
  store i64 %159, ptr %17, align 8, !tbaa !15
  %160 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 0
  %161 = load i8, ptr %160, align 8, !tbaa !15
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %162, i64 1
  store i8 %161, ptr %163, align 1, !tbaa !15
  %164 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 3
  %165 = load i8, ptr %164, align 1, !tbaa !15
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = getelementptr inbounds i8, ptr %166, i64 9
  store i8 %165, ptr %167, align 1, !tbaa !15
  %168 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 6
  %169 = load i8, ptr %168, align 2, !tbaa !15
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i64 17
  store i8 %169, ptr %171, align 1, !tbaa !15
  %172 = load i64, ptr %19, align 8, !tbaa !11
  %173 = lshr i64 %172, 4
  %174 = load i64, ptr %10, align 8, !tbaa !11
  %175 = and i64 %173, %174
  store i64 %175, ptr %17, align 8, !tbaa !15
  %176 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 1
  %177 = load i8, ptr %176, align 1, !tbaa !15
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 4
  store i8 %177, ptr %179, align 1, !tbaa !15
  %180 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 4
  %181 = load i8, ptr %180, align 4, !tbaa !15
  %182 = load ptr, ptr %8, align 8, !tbaa !5
  %183 = getelementptr inbounds i8, ptr %182, i64 12
  store i8 %181, ptr %183, align 1, !tbaa !15
  %184 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 7
  %185 = load i8, ptr %184, align 1, !tbaa !15
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 20
  store i8 %185, ptr %187, align 1, !tbaa !15
  %188 = load i64, ptr %19, align 8, !tbaa !11
  %189 = lshr i64 %188, 5
  %190 = load i64, ptr %11, align 8, !tbaa !11
  %191 = and i64 %189, %190
  store i64 %191, ptr %17, align 8, !tbaa !15
  %192 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 2
  %193 = load i8, ptr %192, align 2, !tbaa !15
  %194 = load ptr, ptr %8, align 8, !tbaa !5
  %195 = getelementptr inbounds i8, ptr %194, i64 7
  store i8 %193, ptr %195, align 1, !tbaa !15
  %196 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 5
  %197 = load i8, ptr %196, align 1, !tbaa !15
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i64 15
  store i8 %197, ptr %199, align 1, !tbaa !15
  %200 = load i64, ptr %19, align 8, !tbaa !11
  %201 = lshr i64 %200, 6
  %202 = load i64, ptr %9, align 8, !tbaa !11
  %203 = and i64 %201, %202
  store i64 %203, ptr %17, align 8, !tbaa !15
  %204 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 0
  %205 = load i8, ptr %204, align 8, !tbaa !15
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %206, i64 2
  store i8 %205, ptr %207, align 1, !tbaa !15
  %208 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 3
  %209 = load i8, ptr %208, align 1, !tbaa !15
  %210 = load ptr, ptr %8, align 8, !tbaa !5
  %211 = getelementptr inbounds i8, ptr %210, i64 10
  store i8 %209, ptr %211, align 1, !tbaa !15
  %212 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 6
  %213 = load i8, ptr %212, align 2, !tbaa !15
  %214 = load ptr, ptr %8, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %214, i64 18
  store i8 %213, ptr %215, align 1, !tbaa !15
  %216 = load i64, ptr %19, align 8, !tbaa !11
  %217 = lshr i64 %216, 7
  %218 = load i64, ptr %10, align 8, !tbaa !11
  %219 = and i64 %217, %218
  store i64 %219, ptr %17, align 8, !tbaa !15
  %220 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 1
  %221 = load i8, ptr %220, align 1, !tbaa !15
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %222, i64 5
  store i8 %221, ptr %223, align 1, !tbaa !15
  %224 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 4
  %225 = load i8, ptr %224, align 4, !tbaa !15
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = getelementptr inbounds i8, ptr %226, i64 13
  store i8 %225, ptr %227, align 1, !tbaa !15
  %228 = getelementptr inbounds [8 x i8], ptr %17, i64 0, i64 7
  %229 = load i8, ptr %228, align 1, !tbaa !15
  %230 = zext i8 %229 to i32
  %231 = load i32, ptr %22, align 4, !tbaa !9
  %232 = trunc i32 %231 to i8
  %233 = zext i8 %232 to i32
  %234 = and i32 %233, 3
  %235 = shl i32 %234, 1
  %236 = or i32 %230, %235
  %237 = trunc i32 %236 to i8
  %238 = load ptr, ptr %8, align 8, !tbaa !5
  %239 = getelementptr inbounds i8, ptr %238, i64 21
  store i8 %237, ptr %239, align 1, !tbaa !15
  %240 = load i32, ptr %22, align 4, !tbaa !9
  %241 = lshr i32 %240, 2
  store i32 %241, ptr %22, align 4, !tbaa !9
  %242 = load i32, ptr %22, align 4, !tbaa !9
  %243 = zext i32 %242 to i64
  %244 = load i64, ptr %9, align 8, !tbaa !11
  %245 = and i64 %243, %244
  %246 = trunc i64 %245 to i32
  store i32 %246, ptr %20, align 4, !tbaa !15
  %247 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 0
  %248 = load i8, ptr %247, align 4, !tbaa !15
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds i8, ptr %249, i64 22
  store i8 %248, ptr %250, align 1, !tbaa !15
  %251 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 3
  %252 = load i8, ptr %251, align 1, !tbaa !15
  %253 = load ptr, ptr %8, align 8, !tbaa !5
  %254 = getelementptr inbounds i8, ptr %253, i64 30
  store i8 %252, ptr %254, align 1, !tbaa !15
  %255 = load i32, ptr %22, align 4, !tbaa !9
  %256 = lshr i32 %255, 1
  %257 = zext i32 %256 to i64
  %258 = load i64, ptr %10, align 8, !tbaa !11
  %259 = and i64 %257, %258
  %260 = trunc i64 %259 to i32
  store i32 %260, ptr %20, align 4, !tbaa !15
  %261 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 1
  %262 = load i8, ptr %261, align 1, !tbaa !15
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = getelementptr inbounds i8, ptr %263, i64 25
  store i8 %262, ptr %264, align 1, !tbaa !15
  %265 = load i32, ptr %22, align 4, !tbaa !9
  %266 = lshr i32 %265, 2
  %267 = zext i32 %266 to i64
  %268 = load i64, ptr %11, align 8, !tbaa !11
  %269 = and i64 %267, %268
  %270 = trunc i64 %269 to i32
  store i32 %270, ptr %20, align 4, !tbaa !15
  %271 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 2
  %272 = load i8, ptr %271, align 2, !tbaa !15
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 28
  store i8 %272, ptr %274, align 1, !tbaa !15
  %275 = load i32, ptr %22, align 4, !tbaa !9
  %276 = lshr i32 %275, 3
  %277 = zext i32 %276 to i64
  %278 = load i64, ptr %9, align 8, !tbaa !11
  %279 = and i64 %277, %278
  %280 = trunc i64 %279 to i32
  store i32 %280, ptr %20, align 4, !tbaa !15
  %281 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 0
  %282 = load i8, ptr %281, align 4, !tbaa !15
  %283 = load ptr, ptr %8, align 8, !tbaa !5
  %284 = getelementptr inbounds i8, ptr %283, i64 23
  store i8 %282, ptr %284, align 1, !tbaa !15
  %285 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 3
  %286 = load i8, ptr %285, align 1, !tbaa !15
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = getelementptr inbounds i8, ptr %287, i64 31
  store i8 %286, ptr %288, align 1, !tbaa !15
  %289 = load i32, ptr %22, align 4, !tbaa !9
  %290 = lshr i32 %289, 4
  %291 = zext i32 %290 to i64
  %292 = load i64, ptr %10, align 8, !tbaa !11
  %293 = and i64 %291, %292
  %294 = trunc i64 %293 to i32
  store i32 %294, ptr %20, align 4, !tbaa !15
  %295 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 1
  %296 = load i8, ptr %295, align 1, !tbaa !15
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds i8, ptr %297, i64 26
  store i8 %296, ptr %298, align 1, !tbaa !15
  %299 = load i32, ptr %22, align 4, !tbaa !9
  %300 = lshr i32 %299, 5
  %301 = zext i32 %300 to i64
  %302 = load i64, ptr %11, align 8, !tbaa !11
  %303 = and i64 %301, %302
  %304 = trunc i64 %303 to i32
  store i32 %304, ptr %20, align 4, !tbaa !15
  %305 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 2
  %306 = load i8, ptr %305, align 2, !tbaa !15
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds i8, ptr %307, i64 29
  store i8 %306, ptr %308, align 1, !tbaa !15
  %309 = load i32, ptr %22, align 4, !tbaa !9
  %310 = lshr i32 %309, 6
  %311 = zext i32 %310 to i64
  %312 = load i64, ptr %9, align 8, !tbaa !11
  %313 = and i64 %311, %312
  %314 = trunc i64 %313 to i32
  store i32 %314, ptr %20, align 4, !tbaa !15
  %315 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 0
  %316 = load i8, ptr %315, align 4, !tbaa !15
  %317 = load ptr, ptr %8, align 8, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %317, i64 24
  store i8 %316, ptr %318, align 1, !tbaa !15
  %319 = load i32, ptr %22, align 4, !tbaa !9
  %320 = lshr i32 %319, 7
  %321 = zext i32 %320 to i64
  %322 = load i64, ptr %10, align 8, !tbaa !11
  %323 = and i64 %321, %322
  %324 = trunc i64 %323 to i32
  store i32 %324, ptr %20, align 4, !tbaa !15
  %325 = getelementptr inbounds [4 x i8], ptr %20, i64 0, i64 1
  %326 = load i8, ptr %325, align 1, !tbaa !15
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds i8, ptr %327, i64 27
  store i8 %326, ptr %328, align 1, !tbaa !15
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = getelementptr inbounds i8, ptr %329, i64 32
  store ptr %330, ptr %8, align 8, !tbaa !5
  %331 = load i32, ptr %6, align 4, !tbaa !9
  %332 = sub i32 %331, 32
  store i32 %332, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %99, !llvm.loop !18

333:                                              ; preds = %99
  %334 = load i32, ptr %6, align 4, !tbaa !9
  %335 = icmp ugt i32 %334, 16
  br i1 %335, label %336, label %449

336:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #2
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %337, ptr %24, align 8, !tbaa !5
  %338 = load ptr, ptr %24, align 8, !tbaa !5
  %339 = load i32, ptr %338, align 4, !tbaa !9
  %340 = getelementptr inbounds [2 x i32], ptr %23, i64 0, i64 0
  store i32 %339, ptr %340, align 8, !tbaa !15
  %341 = load ptr, ptr %5, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i64 4
  store ptr %342, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #2
  %343 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %343, ptr %25, align 8, !tbaa !5
  %344 = load ptr, ptr %25, align 8, !tbaa !5
  %345 = load i16, ptr %344, align 2, !tbaa !13
  %346 = getelementptr inbounds [4 x i16], ptr %23, i64 0, i64 2
  store i16 %345, ptr %346, align 4, !tbaa !15
  %347 = load ptr, ptr %5, align 8, !tbaa !5
  %348 = getelementptr inbounds i8, ptr %347, i64 2
  store ptr %348, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #2
  %349 = load i64, ptr %23, align 8, !tbaa !15
  store i64 %349, ptr %26, align 8, !tbaa !11
  %350 = load i64, ptr %26, align 8, !tbaa !11
  %351 = load i64, ptr %9, align 8, !tbaa !11
  %352 = and i64 %350, %351
  store i64 %352, ptr %23, align 8, !tbaa !15
  %353 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  %354 = load i8, ptr %353, align 8, !tbaa !15
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = getelementptr inbounds i8, ptr %355, i64 0
  store i8 %354, ptr %356, align 1, !tbaa !15
  %357 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 3
  %358 = load i8, ptr %357, align 1, !tbaa !15
  %359 = load ptr, ptr %8, align 8, !tbaa !5
  %360 = getelementptr inbounds i8, ptr %359, i64 8
  store i8 %358, ptr %360, align 1, !tbaa !15
  %361 = load i64, ptr %26, align 8, !tbaa !11
  %362 = lshr i64 %361, 1
  %363 = load i64, ptr %10, align 8, !tbaa !11
  %364 = and i64 %362, %363
  store i64 %364, ptr %23, align 8, !tbaa !15
  %365 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 1
  %366 = load i8, ptr %365, align 1, !tbaa !15
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds i8, ptr %367, i64 3
  store i8 %366, ptr %368, align 1, !tbaa !15
  %369 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 4
  %370 = load i8, ptr %369, align 4, !tbaa !15
  %371 = load ptr, ptr %8, align 8, !tbaa !5
  %372 = getelementptr inbounds i8, ptr %371, i64 11
  store i8 %370, ptr %372, align 1, !tbaa !15
  %373 = load i64, ptr %26, align 8, !tbaa !11
  %374 = lshr i64 %373, 2
  %375 = load i64, ptr %11, align 8, !tbaa !11
  %376 = and i64 %374, %375
  store i64 %376, ptr %23, align 8, !tbaa !15
  %377 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 2
  %378 = load i8, ptr %377, align 2, !tbaa !15
  %379 = load ptr, ptr %8, align 8, !tbaa !5
  %380 = getelementptr inbounds i8, ptr %379, i64 6
  store i8 %378, ptr %380, align 1, !tbaa !15
  %381 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 5
  %382 = load i8, ptr %381, align 1, !tbaa !15
  %383 = load ptr, ptr %8, align 8, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %383, i64 14
  store i8 %382, ptr %384, align 1, !tbaa !15
  %385 = load i64, ptr %26, align 8, !tbaa !11
  %386 = lshr i64 %385, 3
  %387 = load i64, ptr %9, align 8, !tbaa !11
  %388 = and i64 %386, %387
  store i64 %388, ptr %23, align 8, !tbaa !15
  %389 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  %390 = load i8, ptr %389, align 8, !tbaa !15
  %391 = load ptr, ptr %8, align 8, !tbaa !5
  %392 = getelementptr inbounds i8, ptr %391, i64 1
  store i8 %390, ptr %392, align 1, !tbaa !15
  %393 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 3
  %394 = load i8, ptr %393, align 1, !tbaa !15
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds i8, ptr %395, i64 9
  store i8 %394, ptr %396, align 1, !tbaa !15
  %397 = load i64, ptr %26, align 8, !tbaa !11
  %398 = lshr i64 %397, 4
  %399 = load i64, ptr %10, align 8, !tbaa !11
  %400 = and i64 %398, %399
  store i64 %400, ptr %23, align 8, !tbaa !15
  %401 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 1
  %402 = load i8, ptr %401, align 1, !tbaa !15
  %403 = load ptr, ptr %8, align 8, !tbaa !5
  %404 = getelementptr inbounds i8, ptr %403, i64 4
  store i8 %402, ptr %404, align 1, !tbaa !15
  %405 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 4
  %406 = load i8, ptr %405, align 4, !tbaa !15
  %407 = load ptr, ptr %8, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i64 12
  store i8 %406, ptr %408, align 1, !tbaa !15
  %409 = load i64, ptr %26, align 8, !tbaa !11
  %410 = lshr i64 %409, 5
  %411 = load i64, ptr %11, align 8, !tbaa !11
  %412 = and i64 %410, %411
  store i64 %412, ptr %23, align 8, !tbaa !15
  %413 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 2
  %414 = load i8, ptr %413, align 2, !tbaa !15
  %415 = load ptr, ptr %8, align 8, !tbaa !5
  %416 = getelementptr inbounds i8, ptr %415, i64 7
  store i8 %414, ptr %416, align 1, !tbaa !15
  %417 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 5
  %418 = load i8, ptr %417, align 1, !tbaa !15
  %419 = load ptr, ptr %8, align 8, !tbaa !5
  %420 = getelementptr inbounds i8, ptr %419, i64 15
  store i8 %418, ptr %420, align 1, !tbaa !15
  %421 = load i64, ptr %26, align 8, !tbaa !11
  %422 = lshr i64 %421, 6
  %423 = load i64, ptr %9, align 8, !tbaa !11
  %424 = and i64 %422, %423
  store i64 %424, ptr %23, align 8, !tbaa !15
  %425 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 0
  %426 = load i8, ptr %425, align 8, !tbaa !15
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = getelementptr inbounds i8, ptr %427, i64 2
  store i8 %426, ptr %428, align 1, !tbaa !15
  %429 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 3
  %430 = load i8, ptr %429, align 1, !tbaa !15
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = getelementptr inbounds i8, ptr %431, i64 10
  store i8 %430, ptr %432, align 1, !tbaa !15
  %433 = load i64, ptr %26, align 8, !tbaa !11
  %434 = lshr i64 %433, 7
  %435 = load i64, ptr %10, align 8, !tbaa !11
  %436 = and i64 %434, %435
  store i64 %436, ptr %23, align 8, !tbaa !15
  %437 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 1
  %438 = load i8, ptr %437, align 1, !tbaa !15
  %439 = load ptr, ptr %8, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i64 5
  store i8 %438, ptr %440, align 1, !tbaa !15
  %441 = getelementptr inbounds [8 x i8], ptr %23, i64 0, i64 4
  %442 = load i8, ptr %441, align 4, !tbaa !15
  %443 = load ptr, ptr %8, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i64 13
  store i8 %442, ptr %444, align 1, !tbaa !15
  %445 = load ptr, ptr %8, align 8, !tbaa !5
  %446 = getelementptr inbounds i8, ptr %445, i64 16
  store ptr %446, ptr %8, align 8, !tbaa !5
  %447 = load i32, ptr %6, align 4, !tbaa !9
  %448 = sub i32 %447, 16
  store i32 %448, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #2
  br label %449

449:                                              ; preds = %336, %333
  %450 = load i32, ptr %6, align 4, !tbaa !9
  %451 = icmp ugt i32 %450, 8
  br i1 %451, label %452, label %540

452:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #2
  %453 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %453, ptr %28, align 8, !tbaa !5
  %454 = load ptr, ptr %28, align 8, !tbaa !5
  %455 = load i16, ptr %454, align 2, !tbaa !13
  %456 = getelementptr inbounds [2 x i16], ptr %27, i64 0, i64 0
  store i16 %455, ptr %456, align 4, !tbaa !15
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds i8, ptr %457, i64 2
  store ptr %458, ptr %5, align 8, !tbaa !5
  %459 = load ptr, ptr %5, align 8, !tbaa !5
  %460 = load i8, ptr %459, align 1, !tbaa !15
  %461 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 2
  store i8 %460, ptr %461, align 2, !tbaa !15
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = getelementptr inbounds i8, ptr %462, i64 1
  store ptr %463, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  %464 = load i32, ptr %27, align 4, !tbaa !15
  store i32 %464, ptr %29, align 4, !tbaa !9
  %465 = load i32, ptr %29, align 4, !tbaa !9
  %466 = load i64, ptr %9, align 8, !tbaa !11
  %467 = trunc i64 %466 to i32
  %468 = and i32 %465, %467
  store i32 %468, ptr %27, align 4, !tbaa !15
  %469 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 0
  %470 = load i8, ptr %469, align 4, !tbaa !15
  %471 = load ptr, ptr %8, align 8, !tbaa !5
  %472 = getelementptr inbounds i8, ptr %471, i64 0
  store i8 %470, ptr %472, align 1, !tbaa !15
  %473 = load i32, ptr %29, align 4, !tbaa !9
  %474 = lshr i32 %473, 3
  %475 = load i64, ptr %9, align 8, !tbaa !11
  %476 = trunc i64 %475 to i32
  %477 = and i32 %474, %476
  store i32 %477, ptr %27, align 4, !tbaa !15
  %478 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 0
  %479 = load i8, ptr %478, align 4, !tbaa !15
  %480 = load ptr, ptr %8, align 8, !tbaa !5
  %481 = getelementptr inbounds i8, ptr %480, i64 1
  store i8 %479, ptr %481, align 1, !tbaa !15
  %482 = load i32, ptr %29, align 4, !tbaa !9
  %483 = lshr i32 %482, 6
  %484 = load i64, ptr %9, align 8, !tbaa !11
  %485 = trunc i64 %484 to i32
  %486 = and i32 %483, %485
  store i32 %486, ptr %27, align 4, !tbaa !15
  %487 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 0
  %488 = load i8, ptr %487, align 4, !tbaa !15
  %489 = load ptr, ptr %8, align 8, !tbaa !5
  %490 = getelementptr inbounds i8, ptr %489, i64 2
  store i8 %488, ptr %490, align 1, !tbaa !15
  %491 = load i32, ptr %29, align 4, !tbaa !9
  %492 = lshr i32 %491, 1
  %493 = load i64, ptr %10, align 8, !tbaa !11
  %494 = trunc i64 %493 to i32
  %495 = and i32 %492, %494
  store i32 %495, ptr %27, align 4, !tbaa !15
  %496 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 1
  %497 = load i8, ptr %496, align 1, !tbaa !15
  %498 = load ptr, ptr %8, align 8, !tbaa !5
  %499 = getelementptr inbounds i8, ptr %498, i64 3
  store i8 %497, ptr %499, align 1, !tbaa !15
  %500 = load i32, ptr %29, align 4, !tbaa !9
  %501 = lshr i32 %500, 4
  %502 = load i64, ptr %10, align 8, !tbaa !11
  %503 = trunc i64 %502 to i32
  %504 = and i32 %501, %503
  store i32 %504, ptr %27, align 4, !tbaa !15
  %505 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 1
  %506 = load i8, ptr %505, align 1, !tbaa !15
  %507 = load ptr, ptr %8, align 8, !tbaa !5
  %508 = getelementptr inbounds i8, ptr %507, i64 4
  store i8 %506, ptr %508, align 1, !tbaa !15
  %509 = load i32, ptr %29, align 4, !tbaa !9
  %510 = lshr i32 %509, 7
  %511 = load i64, ptr %10, align 8, !tbaa !11
  %512 = trunc i64 %511 to i32
  %513 = and i32 %510, %512
  store i32 %513, ptr %27, align 4, !tbaa !15
  %514 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 1
  %515 = load i8, ptr %514, align 1, !tbaa !15
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = getelementptr inbounds i8, ptr %516, i64 5
  store i8 %515, ptr %517, align 1, !tbaa !15
  %518 = load i32, ptr %29, align 4, !tbaa !9
  %519 = lshr i32 %518, 2
  %520 = load i64, ptr %11, align 8, !tbaa !11
  %521 = trunc i64 %520 to i32
  %522 = and i32 %519, %521
  store i32 %522, ptr %27, align 4, !tbaa !15
  %523 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 2
  %524 = load i8, ptr %523, align 2, !tbaa !15
  %525 = load ptr, ptr %8, align 8, !tbaa !5
  %526 = getelementptr inbounds i8, ptr %525, i64 6
  store i8 %524, ptr %526, align 1, !tbaa !15
  %527 = load i32, ptr %29, align 4, !tbaa !9
  %528 = lshr i32 %527, 5
  %529 = load i64, ptr %11, align 8, !tbaa !11
  %530 = trunc i64 %529 to i32
  %531 = and i32 %528, %530
  store i32 %531, ptr %27, align 4, !tbaa !15
  %532 = getelementptr inbounds [4 x i8], ptr %27, i64 0, i64 2
  %533 = load i8, ptr %532, align 2, !tbaa !15
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 7
  store i8 %533, ptr %535, align 1, !tbaa !15
  %536 = load ptr, ptr %8, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i64 8
  store ptr %537, ptr %8, align 8, !tbaa !5
  %538 = load i32, ptr %6, align 4, !tbaa !9
  %539 = sub i32 %538, 8
  store i32 %539, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  br label %540

540:                                              ; preds = %452, %449
  %541 = load i32, ptr %6, align 4, !tbaa !9
  %542 = icmp ult i32 0, %541
  br i1 %542, label %543, label %593

543:                                              ; preds = %540
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #2
  store i16 7, ptr %30, align 2, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 2, ptr %31) #2
  store i16 0, ptr %31, align 2, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #2
  store i32 8, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %33) #2
  %544 = load ptr, ptr %5, align 8, !tbaa !5
  %545 = load i8, ptr %544, align 1, !tbaa !15
  %546 = zext i8 %545 to i16
  store i16 %546, ptr %33, align 2, !tbaa !13
  %547 = load ptr, ptr %5, align 8, !tbaa !5
  %548 = getelementptr inbounds i8, ptr %547, i32 1
  store ptr %548, ptr %5, align 8, !tbaa !5
  br label %549

549:                                              ; preds = %574, %543
  %550 = load i32, ptr %6, align 4, !tbaa !9
  %551 = icmp ne i32 0, %550
  br i1 %551, label %552, label %592

552:                                              ; preds = %549
  %553 = load i32, ptr %32, align 4, !tbaa !9
  %554 = icmp ugt i32 3, %553
  br i1 %554, label %555, label %574

555:                                              ; preds = %552
  %556 = load ptr, ptr %5, align 8, !tbaa !5
  %557 = load i8, ptr %556, align 1, !tbaa !15
  %558 = zext i8 %557 to i16
  store i16 %558, ptr %31, align 2, !tbaa !13
  %559 = load ptr, ptr %5, align 8, !tbaa !5
  %560 = getelementptr inbounds i8, ptr %559, i32 1
  store ptr %560, ptr %5, align 8, !tbaa !5
  %561 = load i16, ptr %31, align 2, !tbaa !13
  %562 = zext i16 %561 to i32
  %563 = load i32, ptr %32, align 4, !tbaa !9
  %564 = shl i32 %562, %563
  %565 = trunc i32 %564 to i16
  store i16 %565, ptr %31, align 2, !tbaa !13
  %566 = load i16, ptr %33, align 2, !tbaa !13
  %567 = zext i16 %566 to i32
  %568 = load i16, ptr %31, align 2, !tbaa !13
  %569 = zext i16 %568 to i32
  %570 = or i32 %567, %569
  %571 = trunc i32 %570 to i16
  store i16 %571, ptr %33, align 2, !tbaa !13
  %572 = load i32, ptr %32, align 4, !tbaa !9
  %573 = add i32 %572, 8
  store i32 %573, ptr %32, align 4, !tbaa !9
  br label %574

574:                                              ; preds = %555, %552
  %575 = load i16, ptr %33, align 2, !tbaa !13
  %576 = zext i16 %575 to i32
  %577 = load i16, ptr %30, align 2, !tbaa !13
  %578 = zext i16 %577 to i32
  %579 = and i32 %576, %578
  %580 = trunc i32 %579 to i8
  %581 = load ptr, ptr %8, align 8, !tbaa !5
  store i8 %580, ptr %581, align 1, !tbaa !15
  %582 = load i16, ptr %33, align 2, !tbaa !13
  %583 = zext i16 %582 to i32
  %584 = ashr i32 %583, 3
  %585 = trunc i32 %584 to i16
  store i16 %585, ptr %33, align 2, !tbaa !13
  %586 = load i32, ptr %32, align 4, !tbaa !9
  %587 = sub i32 %586, 3
  store i32 %587, ptr %32, align 4, !tbaa !9
  %588 = load ptr, ptr %8, align 8, !tbaa !5
  %589 = getelementptr inbounds i8, ptr %588, i32 1
  store ptr %589, ptr %8, align 8, !tbaa !5
  %590 = load i32, ptr %6, align 4, !tbaa !9
  %591 = add i32 %590, -1
  store i32 %591, ptr %6, align 4, !tbaa !9
  br label %549, !llvm.loop !19

592:                                              ; preds = %549
  call void @llvm.lifetime.end.p0(i64 2, ptr %33) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %31) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #2
  br label %593

593:                                              ; preds = %592, %540
  store i32 0, ptr %16, align 4
  br label %594

594:                                              ; preds = %593, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  %595 = load i32, ptr %16, align 4
  switch i32 %595, label %597 [
    i32 0, label %596
    i32 1, label %596
  ]

596:                                              ; preds = %594, %594
  ret void

597:                                              ; preds = %594
  unreachable
}

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


; 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: nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local void @px_qplc_unpack_3u8u(ptr nocapture noundef readonly %0, i32 noundef %1, i32 noundef %2, ptr noundef writeonly %3) local_unnamed_addr #0 {
  %.not = icmp eq i32 %2, 0
  br i1 %.not, label %.thread, label %5

5:                                                ; preds = %4
  %6 = sub i32 8, %2
  %7 = load i8, ptr %0, align 1, !tbaa !5
  %8 = zext i8 %7 to i32
  %9 = lshr i32 %8, %2
  %10 = getelementptr inbounds i8, ptr %0, i64 1
  br label %11

11:                                               ; preds = %21, %5
  %.0596.in = phi i32 [ %9, %5 ], [ %25, %21 ]
  %.0594 = phi i32 [ %6, %5 ], [ %26, %21 ]
  %.0587 = phi ptr [ %3, %5 ], [ %27, %21 ]
  %.0580 = phi i32 [ %1, %5 ], [ %28, %21 ]
  %.0578 = phi ptr [ %10, %5 ], [ %.1579, %21 ]
  %.not602 = icmp eq i32 %.0594, 0
  br i1 %.not602, label %.thread, label %12

12:                                               ; preds = %11
  %13 = icmp ult i32 %.0594, 3
  br i1 %13, label %14, label %21

14:                                               ; preds = %12
  %15 = load i8, ptr %.0578, align 1, !tbaa !5
  %16 = getelementptr inbounds i8, ptr %.0578, i64 1
  %17 = zext i8 %15 to i32
  %18 = shl nuw nsw i32 %17, %.0594
  %19 = or i32 %18, %.0596.in
  %20 = or disjoint i32 %.0594, 8
  br label %21

21:                                               ; preds = %14, %12
  %.1597.in = phi i32 [ %19, %14 ], [ %.0596.in, %12 ]
  %.1595 = phi i32 [ %20, %14 ], [ %.0594, %12 ]
  %.1579 = phi ptr [ %16, %14 ], [ %.0578, %12 ]
  %22 = trunc i32 %.1597.in to i8
  %23 = and i8 %22, 7
  store i8 %23, ptr %.0587, align 1, !tbaa !5
  %24 = lshr i32 %.1597.in, 3
  %25 = and i32 %24, 8191
  %26 = add i32 %.1595, -3
  %27 = getelementptr inbounds i8, ptr %.0587, i64 1
  %28 = add i32 %.0580, -1
  %29 = icmp eq i32 %28, 0
  br i1 %29, label %.loopexit, label %11, !llvm.loop !8

.thread:                                          ; preds = %11, %4
  %.2589 = phi ptr [ %3, %4 ], [ %.0587, %11 ]
  %.2582 = phi i32 [ %1, %4 ], [ %.0580, %11 ]
  %.3 = phi ptr [ %0, %4 ], [ %.0578, %11 ]
  %30 = icmp ugt i32 %.2582, 32
  br i1 %30, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.thread, %.lr.ph
  %.4632 = phi ptr [ %34, %.lr.ph ], [ %.3, %.thread ]
  %.3583631 = phi i32 [ %102, %.lr.ph ], [ %.2582, %.thread ]
  %.3590630 = phi ptr [ %101, %.lr.ph ], [ %.2589, %.thread ]
  %31 = load i64, ptr %.4632, align 8, !tbaa !10
  %32 = getelementptr inbounds i8, ptr %.4632, i64 8
  %33 = load i32, ptr %32, align 4, !tbaa !12
  %34 = getelementptr inbounds i8, ptr %.4632, i64 12
  %35 = and i64 %31, 1970324954415111
  %.sroa.0310.0.extract.trunc = trunc i64 %35 to i8
  %.sroa.18353.0.extract.shift = lshr i64 %35, 24
  %.sroa.18353.0.extract.trunc = trunc i64 %.sroa.18353.0.extract.shift to i8
  %.sroa.26.0.extract.shift = lshr i64 %35, 48
  %.sroa.26.0.extract.trunc = trunc nuw nsw i64 %.sroa.26.0.extract.shift to i8
  store i8 %.sroa.0310.0.extract.trunc, ptr %.3590630, align 1, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %.3590630, i64 8
  store i8 %.sroa.18353.0.extract.trunc, ptr %36, align 1, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %.3590630, i64 16
  store i8 %.sroa.26.0.extract.trunc, ptr %37, align 1, !tbaa !5
  %38 = lshr i64 %31, 1
  %39 = and i64 %38, 504403188330268416
  %.sroa.13320.0.extract.shift321 = lshr exact i64 %39, 8
  %.sroa.13320.0.extract.trunc322 = trunc i64 %.sroa.13320.0.extract.shift321 to i8
  %.sroa.21370.0.extract.shift371 = lshr i64 %39, 32
  %.sroa.21370.0.extract.trunc372 = trunc i64 %.sroa.21370.0.extract.shift371 to i8
  %.sroa.29418.0.extract.shift419 = lshr i64 %39, 56
  %.sroa.29418.0.extract.trunc420 = trunc nuw nsw i64 %.sroa.29418.0.extract.shift419 to i8
  %40 = getelementptr inbounds i8, ptr %.3590630, i64 3
  store i8 %.sroa.13320.0.extract.trunc322, ptr %40, align 1, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %.3590630, i64 11
  store i8 %.sroa.21370.0.extract.trunc372, ptr %41, align 1, !tbaa !5
  %42 = getelementptr inbounds i8, ptr %.3590630, i64 19
  store i8 %.sroa.29418.0.extract.trunc420, ptr %42, align 1, !tbaa !5
  %43 = lshr i64 %31, 2
  %44 = and i64 %43, 7696581853184
  %.sroa.16337.0.extract.shift340 = lshr exact i64 %44, 16
  %.sroa.16337.0.extract.trunc341 = trunc i64 %.sroa.16337.0.extract.shift340 to i8
  %.sroa.24.0.extract.shift389 = lshr i64 %44, 40
  %.sroa.24.0.extract.trunc390 = trunc nuw nsw i64 %.sroa.24.0.extract.shift389 to i8
  %45 = getelementptr inbounds i8, ptr %.3590630, i64 6
  store i8 %.sroa.16337.0.extract.trunc341, ptr %45, align 1, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %.3590630, i64 14
  store i8 %.sroa.24.0.extract.trunc390, ptr %46, align 1, !tbaa !5
  %47 = lshr i64 %31, 3
  %48 = and i64 %47, 1970324954415111
  %.sroa.0310.0.extract.trunc315 = trunc i64 %48 to i8
  %.sroa.18353.0.extract.shift358 = lshr i64 %48, 24
  %.sroa.18353.0.extract.trunc359 = trunc i64 %.sroa.18353.0.extract.shift358 to i8
  %.sroa.26.0.extract.shift406 = lshr i64 %48, 48
  %.sroa.26.0.extract.trunc407 = trunc nuw nsw i64 %.sroa.26.0.extract.shift406 to i8
  %49 = getelementptr inbounds i8, ptr %.3590630, i64 1
  store i8 %.sroa.0310.0.extract.trunc315, ptr %49, align 1, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %.3590630, i64 9
  store i8 %.sroa.18353.0.extract.trunc359, ptr %50, align 1, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %.3590630, i64 17
  store i8 %.sroa.26.0.extract.trunc407, ptr %51, align 1, !tbaa !5
  %52 = lshr i64 %31, 4
  %53 = and i64 %52, 504403188330268416
  %.sroa.13320.0.extract.shift327 = lshr exact i64 %53, 8
  %.sroa.13320.0.extract.trunc328 = trunc i64 %.sroa.13320.0.extract.shift327 to i8
  %.sroa.21370.0.extract.shift377 = lshr i64 %53, 32
  %.sroa.21370.0.extract.trunc378 = trunc i64 %.sroa.21370.0.extract.shift377 to i8
  %.sroa.29418.0.extract.shift425 = lshr i64 %53, 56
  %.sroa.29418.0.extract.trunc426 = trunc nuw nsw i64 %.sroa.29418.0.extract.shift425 to i8
  %54 = getelementptr inbounds i8, ptr %.3590630, i64 4
  store i8 %.sroa.13320.0.extract.trunc328, ptr %54, align 1, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %.3590630, i64 12
  store i8 %.sroa.21370.0.extract.trunc378, ptr %55, align 1, !tbaa !5
  %56 = getelementptr inbounds i8, ptr %.3590630, i64 20
  store i8 %.sroa.29418.0.extract.trunc426, ptr %56, align 1, !tbaa !5
  %57 = lshr i64 %31, 5
  %58 = and i64 %57, 7696581853184
  %.sroa.16337.0.extract.shift346 = lshr exact i64 %58, 16
  %.sroa.16337.0.extract.trunc347 = trunc i64 %.sroa.16337.0.extract.shift346 to i8
  %.sroa.24.0.extract.shift395 = lshr i64 %58, 40
  %.sroa.24.0.extract.trunc396 = trunc nuw nsw i64 %.sroa.24.0.extract.shift395 to i8
  %59 = getelementptr inbounds i8, ptr %.3590630, i64 7
  store i8 %.sroa.16337.0.extract.trunc347, ptr %59, align 1, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %.3590630, i64 15
  store i8 %.sroa.24.0.extract.trunc396, ptr %60, align 1, !tbaa !5
  %61 = lshr i64 %31, 6
  %62 = and i64 %61, 1970324954415111
  %.sroa.0310.0.extract.trunc318 = trunc i64 %62 to i8
  %.sroa.18353.0.extract.shift364 = lshr i64 %62, 24
  %.sroa.18353.0.extract.trunc365 = trunc i64 %.sroa.18353.0.extract.shift364 to i8
  %.sroa.26.0.extract.shift412 = lshr i64 %62, 48
  %.sroa.26.0.extract.trunc413 = trunc nuw nsw i64 %.sroa.26.0.extract.shift412 to i8
  %63 = getelementptr inbounds i8, ptr %.3590630, i64 2
  store i8 %.sroa.0310.0.extract.trunc318, ptr %63, align 1, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %.3590630, i64 10
  store i8 %.sroa.18353.0.extract.trunc365, ptr %64, align 1, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %.3590630, i64 18
  store i8 %.sroa.26.0.extract.trunc413, ptr %65, align 1, !tbaa !5
  %66 = lshr i64 %31, 7
  %67 = and i64 %66, 72057624102700800
  %.sroa.13320.0.extract.shift333 = lshr exact i64 %67, 8
  %.sroa.13320.0.extract.trunc334 = trunc i64 %.sroa.13320.0.extract.shift333 to i8
  %.sroa.21370.0.extract.shift383 = lshr i64 %67, 32
  %.sroa.21370.0.extract.trunc384 = trunc i64 %.sroa.21370.0.extract.shift383 to i8
  %.sroa.29418.0.extract.shift431 = lshr i64 %31, 63
  %.sroa.29418.0.extract.trunc432 = trunc nuw nsw i64 %.sroa.29418.0.extract.shift431 to i32
  %68 = getelementptr inbounds i8, ptr %.3590630, i64 5
  store i8 %.sroa.13320.0.extract.trunc334, ptr %68, align 1, !tbaa !5
  %69 = getelementptr inbounds i8, ptr %.3590630, i64 13
  store i8 %.sroa.21370.0.extract.trunc384, ptr %69, align 1, !tbaa !5
  %70 = shl i32 %33, 1
  %71 = and i32 %70, 6
  %72 = or disjoint i32 %71, %.sroa.29418.0.extract.trunc432
  %73 = trunc nuw nsw i32 %72 to i8
  %74 = getelementptr inbounds i8, ptr %.3590630, i64 21
  store i8 %73, ptr %74, align 1, !tbaa !5
  %75 = lshr i32 %33, 2
  %76 = and i32 %75, 117440519
  %.sroa.0.0.extract.trunc246 = trunc i32 %76 to i8
  %.sroa.18285.0.extract.shift = lshr i32 %76, 24
  %.sroa.18285.0.extract.trunc = trunc nuw nsw i32 %.sroa.18285.0.extract.shift to i8
  %77 = getelementptr inbounds i8, ptr %.3590630, i64 22
  store i8 %.sroa.0.0.extract.trunc246, ptr %77, align 1, !tbaa !5
  %78 = getelementptr inbounds i8, ptr %.3590630, i64 30
  store i8 %.sroa.18285.0.extract.trunc, ptr %78, align 1, !tbaa !5
  %79 = lshr i32 %33, 11
  %80 = trunc i32 %79 to i8
  %.sroa.13.0.extract.trunc255 = and i8 %80, 7
  %81 = getelementptr inbounds i8, ptr %.3590630, i64 25
  store i8 %.sroa.13.0.extract.trunc255, ptr %81, align 1, !tbaa !5
  %82 = lshr i32 %33, 20
  %83 = trunc i32 %82 to i8
  %.sroa.16.0.extract.trunc273 = and i8 %83, 7
  %84 = getelementptr inbounds i8, ptr %.3590630, i64 28
  store i8 %.sroa.16.0.extract.trunc273, ptr %84, align 1, !tbaa !5
  %85 = trunc i32 %33 to i8
  %86 = lshr i8 %85, 5
  %.sroa.18285.0.extract.shift290 = lshr i32 %33, 29
  %.sroa.18285.0.extract.trunc291 = trunc nuw nsw i32 %.sroa.18285.0.extract.shift290 to i8
  %87 = getelementptr inbounds i8, ptr %.3590630, i64 23
  store i8 %86, ptr %87, align 1, !tbaa !5
  %88 = getelementptr inbounds i8, ptr %.3590630, i64 31
  store i8 %.sroa.18285.0.extract.trunc291, ptr %88, align 1, !tbaa !5
  %89 = lshr i32 %33, 14
  %90 = trunc i32 %89 to i8
  %.sroa.13.0.extract.trunc261 = and i8 %90, 7
  %91 = getelementptr inbounds i8, ptr %.3590630, i64 26
  store i8 %.sroa.13.0.extract.trunc261, ptr %91, align 1, !tbaa !5
  %92 = lshr i32 %33, 23
  %93 = trunc i32 %92 to i8
  %.sroa.16.0.extract.trunc279 = and i8 %93, 7
  %94 = getelementptr inbounds i8, ptr %.3590630, i64 29
  store i8 %.sroa.16.0.extract.trunc279, ptr %94, align 1, !tbaa !5
  %95 = lshr i32 %33, 8
  %96 = trunc i32 %95 to i8
  %.sroa.0.0.extract.trunc252 = and i8 %96, 7
  %97 = getelementptr inbounds i8, ptr %.3590630, i64 24
  store i8 %.sroa.0.0.extract.trunc252, ptr %97, align 1, !tbaa !5
  %98 = lshr i32 %33, 17
  %99 = trunc i32 %98 to i8
  %.sroa.13.0.extract.trunc267 = and i8 %99, 7
  %100 = getelementptr inbounds i8, ptr %.3590630, i64 27
  store i8 %.sroa.13.0.extract.trunc267, ptr %100, align 1, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %.3590630, i64 32
  %102 = add i32 %.3583631, -32
  %103 = icmp ugt i32 %102, 32
  br i1 %103, label %.lr.ph, label %._crit_edge, !llvm.loop !14

._crit_edge:                                      ; preds = %.lr.ph, %.thread
  %.3590.lcssa = phi ptr [ %.2589, %.thread ], [ %101, %.lr.ph ]
  %.3583.lcssa = phi i32 [ %.2582, %.thread ], [ %102, %.lr.ph ]
  %.4.lcssa = phi ptr [ %.3, %.thread ], [ %34, %.lr.ph ]
  %104 = icmp ugt i32 %.3583.lcssa, 16
  br i1 %104, label %105, label %140

105:                                              ; preds = %._crit_edge
  %106 = load i32, ptr %.4.lcssa, align 4, !tbaa !12
  %107 = getelementptr inbounds i8, ptr %.4.lcssa, i64 4
  %108 = load i16, ptr %107, align 2, !tbaa !15
  %109 = getelementptr inbounds i8, ptr %.4.lcssa, i64 6
  %.sroa.23.0.insert.ext = zext i16 %108 to i64
  %.sroa.23.0.insert.shift = shl nuw nsw i64 %.sroa.23.0.insert.ext, 32
  %.sroa.0.0.insert.ext98 = zext i32 %106 to i64
  %.sroa.0.0.insert.insert100 = or disjoint i64 %.sroa.23.0.insert.shift, %.sroa.0.0.insert.ext98
  %.sroa.0.0.extract.trunc101 = and i32 %106, 117440519
  %.sroa.0.sroa.0175.0.extract.trunc176 = trunc i32 %.sroa.0.0.extract.trunc101 to i8
  %.sroa.0.sroa.20.0.extract.shift217 = lshr i32 %.sroa.0.0.extract.trunc101, 24
  %.sroa.0.sroa.20.0.extract.trunc218 = trunc nuw nsw i32 %.sroa.0.sroa.20.0.extract.shift217 to i8
  store i8 %.sroa.0.sroa.0175.0.extract.trunc176, ptr %.3590.lcssa, align 1, !tbaa !5
  %110 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 8
  store i8 %.sroa.0.sroa.20.0.extract.trunc218, ptr %110, align 1, !tbaa !5
  %111 = lshr i64 %.sroa.0.0.insert.insert100, 1
  %112 = and i64 %111, 30064772864
  %.sroa.0.sroa.15184.0.extract.shift187603 = lshr exact i64 %112, 8
  %.sroa.0.sroa.15184.0.extract.trunc188 = trunc i64 %.sroa.0.sroa.15184.0.extract.shift187603 to i8
  %.sroa.23.0.extract.shift119 = lshr i64 %112, 32
  %.sroa.23.sroa.0.0.extract.trunc151 = trunc nuw nsw i64 %.sroa.23.0.extract.shift119 to i8
  %113 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 3
  store i8 %.sroa.0.sroa.15184.0.extract.trunc188, ptr %113, align 1, !tbaa !5
  %114 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 11
  store i8 %.sroa.23.sroa.0.0.extract.trunc151, ptr %114, align 1, !tbaa !5
  %115 = lshr i64 %.sroa.0.0.insert.insert100, 2
  %116 = and i64 %115, 7696581853184
  %.sroa.0.sroa.18.0.extract.shift205604 = lshr exact i64 %116, 16
  %.sroa.0.sroa.18.0.extract.trunc206 = trunc i64 %.sroa.0.sroa.18.0.extract.shift205604 to i8
  %sum.shift = lshr i64 %116, 40
  %.sroa.23.sroa.15.0.extract.trunc162 = trunc nuw nsw i64 %sum.shift to i8
  %117 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 6
  store i8 %.sroa.0.sroa.18.0.extract.trunc206, ptr %117, align 1, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 14
  store i8 %.sroa.23.sroa.15.0.extract.trunc162, ptr %118, align 1, !tbaa !5
  %119 = lshr i32 %106, 3
  %.sroa.0.0.extract.trunc104 = and i32 %119, 117440519
  %.sroa.0.sroa.0175.0.extract.trunc179 = trunc i32 %.sroa.0.0.extract.trunc104 to i8
  %.sroa.0.sroa.20.0.extract.shift223 = lshr i32 %.sroa.0.0.extract.trunc104, 24
  %.sroa.0.sroa.20.0.extract.trunc224 = trunc nuw nsw i32 %.sroa.0.sroa.20.0.extract.shift223 to i8
  %120 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 1
  store i8 %.sroa.0.sroa.0175.0.extract.trunc179, ptr %120, align 1, !tbaa !5
  %121 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 9
  store i8 %.sroa.0.sroa.20.0.extract.trunc224, ptr %121, align 1, !tbaa !5
  %122 = lshr i64 %.sroa.0.0.insert.insert100, 4
  %123 = and i64 %122, 30064772864
  %.sroa.0.sroa.15184.0.extract.shift193606 = lshr exact i64 %123, 8
  %.sroa.0.sroa.15184.0.extract.trunc194 = trunc i64 %.sroa.0.sroa.15184.0.extract.shift193606 to i8
  %.sroa.23.0.extract.shift125 = lshr i64 %123, 32
  %.sroa.23.sroa.0.0.extract.trunc154 = trunc nuw nsw i64 %.sroa.23.0.extract.shift125 to i8
  %124 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 4
  store i8 %.sroa.0.sroa.15184.0.extract.trunc194, ptr %124, align 1, !tbaa !5
  %125 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 12
  store i8 %.sroa.23.sroa.0.0.extract.trunc154, ptr %125, align 1, !tbaa !5
  %126 = lshr i32 %106, 21
  %127 = trunc i32 %126 to i8
  %.sroa.0.sroa.18.0.extract.trunc212 = and i8 %127, 7
  %sum.shift608 = lshr i16 %108, 13
  %.sroa.23.sroa.15.0.extract.trunc168 = trunc nuw nsw i16 %sum.shift608 to i8
  %128 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 7
  store i8 %.sroa.0.sroa.18.0.extract.trunc212, ptr %128, align 1, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 15
  store i8 %.sroa.23.sroa.15.0.extract.trunc168, ptr %129, align 1, !tbaa !5
  %130 = lshr i64 %.sroa.0.0.insert.insert100, 6
  %131 = trunc i64 %130 to i32
  %.sroa.0.0.extract.trunc107 = and i32 %131, 117440519
  %.sroa.0.sroa.0175.0.extract.trunc182 = trunc i32 %.sroa.0.0.extract.trunc107 to i8
  %.sroa.0.sroa.20.0.extract.shift229 = lshr i32 %.sroa.0.0.extract.trunc107, 24
  %.sroa.0.sroa.20.0.extract.trunc230 = trunc nuw nsw i32 %.sroa.0.sroa.20.0.extract.shift229 to i8
  %132 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 2
  store i8 %.sroa.0.sroa.0175.0.extract.trunc182, ptr %132, align 1, !tbaa !5
  %133 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 10
  store i8 %.sroa.0.sroa.20.0.extract.trunc230, ptr %133, align 1, !tbaa !5
  %134 = lshr i64 %.sroa.0.0.insert.insert100, 7
  %135 = and i64 %134, 30064772864
  %.sroa.0.sroa.15184.0.extract.shift199610 = lshr exact i64 %135, 8
  %.sroa.0.sroa.15184.0.extract.trunc200 = trunc i64 %.sroa.0.sroa.15184.0.extract.shift199610 to i8
  %.sroa.23.0.extract.shift131 = lshr i64 %135, 32
  %.sroa.23.sroa.0.0.extract.trunc157 = trunc nuw nsw i64 %.sroa.23.0.extract.shift131 to i8
  %136 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 5
  store i8 %.sroa.0.sroa.15184.0.extract.trunc200, ptr %136, align 1, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 13
  store i8 %.sroa.23.sroa.0.0.extract.trunc157, ptr %137, align 1, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %.3590.lcssa, i64 16
  %139 = add nsw i32 %.3583.lcssa, -16
  br label %140

140:                                              ; preds = %105, %._crit_edge
  %.4591 = phi ptr [ %138, %105 ], [ %.3590.lcssa, %._crit_edge ]
  %.4584 = phi i32 [ %139, %105 ], [ %.3583.lcssa, %._crit_edge ]
  %.5 = phi ptr [ %109, %105 ], [ %.4.lcssa, %._crit_edge ]
  %141 = icmp ugt i32 %.4584, 8
  br i1 %141, label %.thread618, label %164

.thread618:                                       ; preds = %140
  %142 = load i16, ptr %.5, align 2, !tbaa !15
  %143 = getelementptr inbounds i8, ptr %.5, i64 2
  %144 = load i8, ptr %143, align 1, !tbaa !5
  %145 = getelementptr inbounds i8, ptr %.5, i64 3
  %.sroa.18.0.insert.ext = zext i8 %144 to i32
  %.sroa.18.0.insert.shift = shl nuw nsw i32 %.sroa.18.0.insert.ext, 16
  %.sroa.0.0.insert.ext = zext i16 %142 to i32
  %.sroa.0.0.insert.insert = or disjoint i32 %.sroa.18.0.insert.shift, %.sroa.0.0.insert.ext
  %146 = trunc i16 %142 to i8
  %.sroa.0.sroa.0.0.extract.trunc61 = and i8 %146, 7
  store i8 %.sroa.0.sroa.0.0.extract.trunc61, ptr %.4591, align 1, !tbaa !5
  %147 = lshr i8 %146, 3
  %.sroa.0.sroa.0.0.extract.trunc62 = and i8 %147, 7
  %148 = getelementptr inbounds i8, ptr %.4591, i64 1
  store i8 %.sroa.0.sroa.0.0.extract.trunc62, ptr %148, align 1, !tbaa !5
  %149 = lshr i16 %142, 6
  %150 = trunc i16 %149 to i8
  %.sroa.0.sroa.0.0.extract.trunc63 = and i8 %150, 7
  %151 = getelementptr inbounds i8, ptr %.4591, i64 2
  store i8 %.sroa.0.sroa.0.0.extract.trunc63, ptr %151, align 1, !tbaa !5
  %152 = lshr i16 %142, 9
  %153 = trunc nuw nsw i16 %152 to i8
  %.sroa.0.sroa.15.0.extract.trunc76 = and i8 %153, 7
  %154 = getelementptr inbounds i8, ptr %.4591, i64 3
  store i8 %.sroa.0.sroa.15.0.extract.trunc76, ptr %154, align 1, !tbaa !5
  %155 = lshr i16 %142, 12
  %156 = trunc nuw nsw i16 %155 to i8
  %.sroa.0.sroa.15.0.extract.trunc78 = and i8 %156, 7
  %157 = getelementptr inbounds i8, ptr %.4591, i64 4
  store i8 %.sroa.0.sroa.15.0.extract.trunc78, ptr %157, align 1, !tbaa !5
  %sum.shift611 = lshr i32 %.sroa.0.0.insert.insert, 15
  %.sroa.0.0.extract.trunc25612 = trunc i32 %sum.shift611 to i8
  %.sroa.0.sroa.15.0.extract.shift79 = and i8 %.sroa.0.0.extract.trunc25612, 7
  %158 = getelementptr inbounds i8, ptr %.4591, i64 5
  store i8 %.sroa.0.sroa.15.0.extract.shift79, ptr %158, align 1, !tbaa !5
  %159 = lshr i8 %144, 2
  %.sroa.18.0.extract.shift42 = and i8 %159, 7
  %160 = getelementptr inbounds i8, ptr %.4591, i64 6
  store i8 %.sroa.18.0.extract.shift42, ptr %160, align 1, !tbaa !5
  %.sroa.18.0.extract.shift44 = lshr i8 %144, 5
  %161 = getelementptr inbounds i8, ptr %.4591, i64 7
  store i8 %.sroa.18.0.extract.shift44, ptr %161, align 1, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %.4591, i64 8
  %163 = add nsw i32 %.4584, -8
  br label %.lr.ph642.preheader

164:                                              ; preds = %140
  %.not613 = icmp eq i32 %.4584, 0
  br i1 %.not613, label %.loopexit, label %.lr.ph642.preheader

.lr.ph642.preheader:                              ; preds = %164, %.thread618
  %.6625 = phi ptr [ %145, %.thread618 ], [ %.5, %164 ]
  %.5585624 = phi i32 [ %163, %.thread618 ], [ %.4584, %164 ]
  %.5592623 = phi ptr [ %162, %.thread618 ], [ %.4591, %164 ]
  %165 = getelementptr inbounds i8, ptr %.6625, i64 1
  %166 = load i8, ptr %.6625, align 1, !tbaa !5
  %167 = zext i8 %166 to i16
  %xtraiter = and i32 %.5585624, 1
  %168 = icmp eq i32 %.5585624, 1
  br i1 %168, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph642.preheader.new

.lr.ph642.preheader.new:                          ; preds = %.lr.ph642.preheader
  %unroll_iter = and i32 %.5585624, -2
  br label %.lr.ph642

.lr.ph642:                                        ; preds = %192, %.lr.ph642.preheader.new
  %.0640 = phi i16 [ %167, %.lr.ph642.preheader.new ], [ %195, %192 ]
  %.0576639 = phi i32 [ 8, %.lr.ph642.preheader.new ], [ %196, %192 ]
  %.7638 = phi ptr [ %165, %.lr.ph642.preheader.new ], [ %.8.1, %192 ]
  %.6593636 = phi ptr [ %.5592623, %.lr.ph642.preheader.new ], [ %197, %192 ]
  %niter = phi i32 [ 0, %.lr.ph642.preheader.new ], [ %niter.next.1, %192 ]
  %169 = icmp ult i32 %.0576639, 3
  br i1 %169, label %170, label %.lr.ph642.1

170:                                              ; preds = %.lr.ph642
  %171 = load i8, ptr %.7638, align 1, !tbaa !5
  %172 = getelementptr inbounds i8, ptr %.7638, i64 1
  %173 = zext i8 %171 to i32
  %174 = shl nuw nsw i32 %173, %.0576639
  %175 = trunc nuw i32 %174 to i16
  %176 = or i16 %.0640, %175
  %177 = or disjoint i32 %.0576639, 8
  br label %.lr.ph642.1

.lr.ph642.1:                                      ; preds = %170, %.lr.ph642
  %.8 = phi ptr [ %172, %170 ], [ %.7638, %.lr.ph642 ]
  %.1577 = phi i32 [ %177, %170 ], [ %.0576639, %.lr.ph642 ]
  %.1 = phi i16 [ %176, %170 ], [ %.0640, %.lr.ph642 ]
  %178 = trunc i16 %.1 to i8
  %179 = and i8 %178, 7
  store i8 %179, ptr %.6593636, align 1, !tbaa !5
  %180 = lshr i16 %.1, 3
  %181 = add i32 %.1577, -3
  %182 = getelementptr inbounds i8, ptr %.6593636, i64 1
  %183 = icmp ult i32 %181, 3
  br i1 %183, label %184, label %192

184:                                              ; preds = %.lr.ph642.1
  %185 = load i8, ptr %.8, align 1, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %.8, i64 1
  %187 = zext i8 %185 to i32
  %188 = shl nuw nsw i32 %187, %181
  %189 = trunc nuw i32 %188 to i16
  %190 = or i16 %180, %189
  %191 = or disjoint i32 %181, 8
  br label %192

192:                                              ; preds = %184, %.lr.ph642.1
  %.8.1 = phi ptr [ %186, %184 ], [ %.8, %.lr.ph642.1 ]
  %.1577.1 = phi i32 [ %191, %184 ], [ %181, %.lr.ph642.1 ]
  %.1.1 = phi i16 [ %190, %184 ], [ %180, %.lr.ph642.1 ]
  %193 = trunc i16 %.1.1 to i8
  %194 = and i8 %193, 7
  store i8 %194, ptr %182, align 1, !tbaa !5
  %195 = lshr i16 %.1.1, 3
  %196 = add i32 %.1577.1, -3
  %197 = getelementptr inbounds i8, ptr %.6593636, i64 2
  %niter.next.1 = add i32 %niter, 2
  %niter.ncmp.1 = icmp eq i32 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph642, !llvm.loop !17

.loopexit.loopexit.unr-lcssa:                     ; preds = %192, %.lr.ph642.preheader
  %.0640.unr = phi i16 [ %167, %.lr.ph642.preheader ], [ %195, %192 ]
  %.0576639.unr = phi i32 [ 8, %.lr.ph642.preheader ], [ %196, %192 ]
  %.7638.unr = phi ptr [ %165, %.lr.ph642.preheader ], [ %.8.1, %192 ]
  %.6593636.unr = phi ptr [ %.5592623, %.lr.ph642.preheader ], [ %197, %192 ]
  %lcmp.mod.not = icmp eq i32 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit, label %.lr.ph642.epil

.lr.ph642.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa
  %198 = icmp ult i32 %.0576639.unr, 3
  br i1 %198, label %199, label %.loopexit.loopexit.epilog-lcssa

199:                                              ; preds = %.lr.ph642.epil
  %200 = load i8, ptr %.7638.unr, align 1, !tbaa !5
  %201 = zext i8 %200 to i32
  %202 = shl nuw nsw i32 %201, %.0576639.unr
  %203 = trunc nuw i32 %202 to i16
  %204 = or i16 %.0640.unr, %203
  br label %.loopexit.loopexit.epilog-lcssa

.loopexit.loopexit.epilog-lcssa:                  ; preds = %199, %.lr.ph642.epil
  %.1.epil = phi i16 [ %204, %199 ], [ %.0640.unr, %.lr.ph642.epil ]
  %205 = trunc i16 %.1.epil to i8
  %206 = and i8 %205, 7
  store i8 %206, ptr %.6593636.unr, align 1, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %21, %.loopexit.loopexit.epilog-lcssa, %.loopexit.loopexit.unr-lcssa, %164
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !6, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !6, i64 0}
!14 = distinct !{!14, !9}
!15 = !{!16, !16, i64 0}
!16 = !{!"short", !6, i64 0}
!17 = distinct !{!17, !9}


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