; LLVM IR from Iotic-Labs/py-lz4framed :: lz4 (lz4frame)

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

%struct.LZ4F_decompressOptions_t = type { i32, [3 x i32] }
%struct.LZ4F_dctx_s = type { %struct.LZ4F_frameInfo_t, i32, i32, i64, i64, i64, ptr, i64, i64, ptr, ptr, i64, ptr, i64, i64, %struct.XXH32_state_s, %struct.XXH32_state_s, [19 x i8] }
%struct.LZ4F_frameInfo_t = type { i32, i32, i32, i32, i64, i32, i32 }
%struct.XXH32_state_s = type { i32, i32, i32, i32, i32, i32, [4 x i32], i32, i32 }

; Function Attrs: nounwind uwtable
declare dso_local i32 @LZ4F_isError(i64 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden i64 @err0r(i32 noundef) #0

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

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

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

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

; Function Attrs: nounwind
declare void @free(ptr noundef) #4

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #5

declare i32 @XXH32_reset(ptr noundef, i32 noundef) #6

declare i32 @XXH32_update(ptr noundef, ptr noundef, i64 noundef) #6

declare i32 @XXH32_digest(ptr noundef) #6

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

; Function Attrs: nounwind uwtable
declare hidden i32 @LZ4F_readLE32(ptr noundef) #0

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

81:                                               ; preds = %6
  store ptr %14, ptr %13, align 8, !tbaa !5
  br label %82

82:                                               ; preds = %81, %6
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %83, align 8, !tbaa !9
  %84 = load ptr, ptr %10, align 8, !tbaa !5
  store i64 0, ptr %84, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %1340, %82
  %86 = load i32, ptr %22, align 4, !tbaa !11
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %1341

88:                                               ; preds = %85
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %89, i32 0, i32 2
  %91 = load i32, ptr %90, align 4, !tbaa !13
  switch i32 %91, label %1340 [
    i32 0, label %92
    i32 1, label %134
    i32 2, label %215
    i32 3, label %299
    i32 4, label %321
    i32 5, label %441
    i32 6, label %575
    i32 7, label %662
    i32 8, label %685
    i32 9, label %1020
    i32 10, label %1090
    i32 11, label %1127
    i32 12, label %1194
    i32 13, label %1218
    i32 14, label %1301
  ]

92:                                               ; preds = %88
  %93 = load ptr, ptr %16, align 8, !tbaa !5
  %94 = load ptr, ptr %17, align 8, !tbaa !5
  %95 = ptrtoint ptr %93 to i64
  %96 = ptrtoint ptr %94 to i64
  %97 = sub i64 %95, %96
  %98 = icmp uge i64 %97, 19
  br i1 %98, label %99, label %119

99:                                               ; preds = %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = load ptr, ptr %17, align 8, !tbaa !5
  %102 = load ptr, ptr %16, align 8, !tbaa !5
  %103 = load ptr, ptr %17, align 8, !tbaa !5
  %104 = ptrtoint ptr %102 to i64
  %105 = ptrtoint ptr %103 to i64
  %106 = sub i64 %104, %105
  %107 = call i64 @LZ4F_decodeHeader(ptr noundef %100, ptr noundef %101, i64 noundef %106)
  store i64 %107, ptr %24, align 8, !tbaa !9
  %108 = load i64, ptr %24, align 8, !tbaa !9
  %109 = call i32 @LZ4F_isError(i64 noundef %108)
  %110 = icmp ne i32 %109, 0
  br i1 %110, label %111, label %113

111:                                              ; preds = %99
  %112 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %112, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %117

113:                                              ; preds = %99
  %114 = load i64, ptr %24, align 8, !tbaa !9
  %115 = load ptr, ptr %17, align 8, !tbaa !5
  %116 = getelementptr inbounds i8, ptr %115, i64 %114
  store ptr %116, ptr %17, align 8, !tbaa !5
  store i32 4, ptr %25, align 4
  br label %117

117:                                              ; preds = %113, %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  %118 = load i32, ptr %25, align 4
  switch i32 %118, label %1499 [
    i32 4, label %1340
  ]

119:                                              ; preds = %92
  %120 = load ptr, ptr %8, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %120, i32 0, i32 7
  store i64 0, ptr %121, align 8, !tbaa !18
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  %123 = load ptr, ptr %17, align 8, !tbaa !5
  %124 = ptrtoint ptr %122 to i64
  %125 = ptrtoint ptr %123 to i64
  %126 = sub i64 %124, %125
  %127 = icmp eq i64 %126, 0
  br i1 %127, label %128, label %129

128:                                              ; preds = %119
  store i64 7, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1499

129:                                              ; preds = %119
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %130, i32 0, i32 8
  store i64 7, ptr %131, align 8, !tbaa !19
  %132 = load ptr, ptr %8, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %132, i32 0, i32 2
  store i32 1, ptr %133, align 4, !tbaa !13
  br label %134

134:                                              ; preds = %129, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %135 = load ptr, ptr %8, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %135, i32 0, i32 8
  %137 = load i64, ptr %136, align 8, !tbaa !19
  %138 = load ptr, ptr %8, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %138, i32 0, i32 7
  %140 = load i64, ptr %139, align 8, !tbaa !18
  %141 = sub i64 %137, %140
  %142 = load ptr, ptr %16, align 8, !tbaa !5
  %143 = load ptr, ptr %17, align 8, !tbaa !5
  %144 = ptrtoint ptr %142 to i64
  %145 = ptrtoint ptr %143 to i64
  %146 = sub i64 %144, %145
  %147 = icmp ult i64 %141, %146
  br i1 %147, label %148, label %156

148:                                              ; preds = %134
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %149, i32 0, i32 8
  %151 = load i64, ptr %150, align 8, !tbaa !19
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %152, i32 0, i32 7
  %154 = load i64, ptr %153, align 8, !tbaa !18
  %155 = sub i64 %151, %154
  br label %162

156:                                              ; preds = %134
  %157 = load ptr, ptr %16, align 8, !tbaa !5
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = ptrtoint ptr %157 to i64
  %160 = ptrtoint ptr %158 to i64
  %161 = sub i64 %159, %160
  br label %162

162:                                              ; preds = %156, %148
  %163 = phi i64 [ %155, %148 ], [ %161, %156 ]
  store i64 %163, ptr %26, align 8, !tbaa !9
  %164 = load ptr, ptr %8, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %164, i32 0, i32 17
  %166 = getelementptr inbounds [19 x i8], ptr %165, i64 0, i64 0
  %167 = load ptr, ptr %8, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %167, i32 0, i32 7
  %169 = load i64, ptr %168, align 8, !tbaa !18
  %170 = getelementptr inbounds i8, ptr %166, i64 %169
  %171 = load ptr, ptr %17, align 8, !tbaa !5
  %172 = load i64, ptr %26, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %170, ptr align 1 %171, i64 %172, i1 false)
  %173 = load i64, ptr %26, align 8, !tbaa !9
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %174, i32 0, i32 7
  %176 = load i64, ptr %175, align 8, !tbaa !18
  %177 = add i64 %176, %173
  store i64 %177, ptr %175, align 8, !tbaa !18
  %178 = load i64, ptr %26, align 8, !tbaa !9
  %179 = load ptr, ptr %17, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %179, i64 %178
  store ptr %180, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  %181 = load ptr, ptr %8, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %181, i32 0, i32 7
  %183 = load i64, ptr %182, align 8, !tbaa !18
  %184 = load ptr, ptr %8, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %184, i32 0, i32 8
  %186 = load i64, ptr %185, align 8, !tbaa !19
  %187 = icmp ult i64 %183, %186
  br i1 %187, label %188, label %197

188:                                              ; preds = %162
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %189, i32 0, i32 8
  %191 = load i64, ptr %190, align 8, !tbaa !19
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %192, i32 0, i32 7
  %194 = load i64, ptr %193, align 8, !tbaa !18
  %195 = sub i64 %191, %194
  %196 = add i64 %195, 4
  store i64 %196, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1340

197:                                              ; preds = %162
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %198 = load ptr, ptr %8, align 8, !tbaa !5
  %199 = load ptr, ptr %8, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %199, i32 0, i32 17
  %201 = getelementptr inbounds [19 x i8], ptr %200, i64 0, i64 0
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %202, i32 0, i32 8
  %204 = load i64, ptr %203, align 8, !tbaa !19
  %205 = call i64 @LZ4F_decodeHeader(ptr noundef %198, ptr noundef %201, i64 noundef %204)
  store i64 %205, ptr %27, align 8, !tbaa !9
  %206 = load i64, ptr %27, align 8, !tbaa !9
  %207 = call i32 @LZ4F_isError(i64 noundef %206)
  %208 = icmp ne i32 %207, 0
  br i1 %208, label %209, label %211

209:                                              ; preds = %197
  %210 = load i64, ptr %27, align 8, !tbaa !9
  store i64 %210, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %212

211:                                              ; preds = %197
  store i32 0, ptr %25, align 4
  br label %212

212:                                              ; preds = %211, %209
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  %213 = load i32, ptr %25, align 4
  switch i32 %213, label %1499 [
    i32 0, label %214
  ]

214:                                              ; preds = %212
  br label %1340

215:                                              ; preds = %88
  %216 = load ptr, ptr %8, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %216, i32 0, i32 0
  %218 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %217, i32 0, i32 2
  %219 = load i32, ptr %218, align 8, !tbaa !20
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %221, label %225

221:                                              ; preds = %215
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %222, i32 0, i32 15
  %224 = call i32 @XXH32_reset(ptr noundef %223, i32 noundef 0)
  br label %225

225:                                              ; preds = %221, %215
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %226 = load ptr, ptr %8, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %226, i32 0, i32 4
  %228 = load i64, ptr %227, align 8, !tbaa !21
  %229 = load ptr, ptr %8, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %229, i32 0, i32 0
  %231 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %230, i32 0, i32 1
  %232 = load i32, ptr %231, align 4, !tbaa !22
  %233 = icmp eq i32 %232, 0
  %234 = zext i1 %233 to i64
  %235 = select i1 %233, i32 131072, i32 0
  %236 = sext i32 %235 to i64
  %237 = add i64 %228, %236
  store i64 %237, ptr %28, align 8, !tbaa !9
  %238 = load i64, ptr %28, align 8, !tbaa !9
  %239 = load ptr, ptr %8, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %239, i32 0, i32 5
  %241 = load i64, ptr %240, align 8, !tbaa !23
  %242 = icmp ugt i64 %238, %241
  br i1 %242, label %243, label %280

243:                                              ; preds = %225
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %244, i32 0, i32 5
  store i64 0, ptr %245, align 8, !tbaa !23
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %246, i32 0, i32 6
  %248 = load ptr, ptr %247, align 8, !tbaa !24
  call void @free(ptr noundef %248) #7
  %249 = load ptr, ptr %8, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %249, i32 0, i32 4
  %251 = load i64, ptr %250, align 8, !tbaa !21
  %252 = add i64 %251, 4
  %253 = call noalias ptr @malloc(i64 noundef %252) #8
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %254, i32 0, i32 6
  store ptr %253, ptr %255, align 8, !tbaa !24
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %256, i32 0, i32 6
  %258 = load ptr, ptr %257, align 8, !tbaa !24
  %259 = icmp eq ptr %258, null
  br i1 %259, label %260, label %262

260:                                              ; preds = %243
  %261 = call i64 @err0r(i32 noundef 9)
  store i64 %261, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %281

262:                                              ; preds = %243
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  %264 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %263, i32 0, i32 9
  %265 = load ptr, ptr %264, align 8, !tbaa !25
  call void @free(ptr noundef %265) #7
  %266 = load i64, ptr %28, align 8, !tbaa !9
  %267 = call noalias ptr @malloc(i64 noundef %266) #8
  %268 = load ptr, ptr %8, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %268, i32 0, i32 9
  store ptr %267, ptr %269, align 8, !tbaa !25
  %270 = load ptr, ptr %8, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %270, i32 0, i32 9
  %272 = load ptr, ptr %271, align 8, !tbaa !25
  %273 = icmp eq ptr %272, null
  br i1 %273, label %274, label %276

274:                                              ; preds = %262
  %275 = call i64 @err0r(i32 noundef 9)
  store i64 %275, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %281

276:                                              ; preds = %262
  %277 = load i64, ptr %28, align 8, !tbaa !9
  %278 = load ptr, ptr %8, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %278, i32 0, i32 5
  store i64 %277, ptr %279, align 8, !tbaa !23
  br label %280

280:                                              ; preds = %276, %225
  store i32 0, ptr %25, align 4
  br label %281

281:                                              ; preds = %280, %274, %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  %282 = load i32, ptr %25, align 4
  switch i32 %282, label %1499 [
    i32 0, label %283
  ]

283:                                              ; preds = %281
  %284 = load ptr, ptr %8, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %284, i32 0, i32 7
  store i64 0, ptr %285, align 8, !tbaa !18
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %286, i32 0, i32 8
  store i64 0, ptr %287, align 8, !tbaa !19
  %288 = load ptr, ptr %8, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %288, i32 0, i32 9
  %290 = load ptr, ptr %289, align 8, !tbaa !25
  %291 = load ptr, ptr %8, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %291, i32 0, i32 12
  store ptr %290, ptr %292, align 8, !tbaa !26
  %293 = load ptr, ptr %8, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %293, i32 0, i32 14
  store i64 0, ptr %294, align 8, !tbaa !27
  %295 = load ptr, ptr %8, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %295, i32 0, i32 13
  store i64 0, ptr %296, align 8, !tbaa !28
  %297 = load ptr, ptr %8, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %297, i32 0, i32 2
  store i32 3, ptr %298, align 4, !tbaa !13
  br label %299

299:                                              ; preds = %283, %88
  %300 = load ptr, ptr %16, align 8, !tbaa !5
  %301 = load ptr, ptr %17, align 8, !tbaa !5
  %302 = ptrtoint ptr %300 to i64
  %303 = ptrtoint ptr %301 to i64
  %304 = sub i64 %302, %303
  %305 = icmp uge i64 %304, 4
  br i1 %305, label %306, label %310

306:                                              ; preds = %299
  %307 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %307, ptr %21, align 8, !tbaa !5
  %308 = load ptr, ptr %17, align 8, !tbaa !5
  %309 = getelementptr inbounds i8, ptr %308, i64 4
  store ptr %309, ptr %17, align 8, !tbaa !5
  br label %315

310:                                              ; preds = %299
  %311 = load ptr, ptr %8, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %311, i32 0, i32 7
  store i64 0, ptr %312, align 8, !tbaa !18
  %313 = load ptr, ptr %8, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %313, i32 0, i32 2
  store i32 4, ptr %314, align 4, !tbaa !13
  br label %315

315:                                              ; preds = %310, %306
  %316 = load ptr, ptr %8, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %316, i32 0, i32 2
  %318 = load i32, ptr %317, align 4, !tbaa !13
  %319 = icmp eq i32 %318, 4
  br i1 %319, label %320, label %373

320:                                              ; preds = %315
  br label %321

321:                                              ; preds = %320, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %322 = load ptr, ptr %16, align 8, !tbaa !5
  %323 = load ptr, ptr %17, align 8, !tbaa !5
  %324 = ptrtoint ptr %322 to i64
  %325 = ptrtoint ptr %323 to i64
  %326 = sub i64 %324, %325
  store i64 %326, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %327 = load ptr, ptr %8, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %327, i32 0, i32 7
  %329 = load i64, ptr %328, align 8, !tbaa !18
  %330 = sub i64 4, %329
  store i64 %330, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %331 = load i64, ptr %30, align 8, !tbaa !9
  %332 = load i64, ptr %29, align 8, !tbaa !9
  %333 = icmp ult i64 %331, %332
  br i1 %333, label %334, label %336

334:                                              ; preds = %321
  %335 = load i64, ptr %30, align 8, !tbaa !9
  br label %338

336:                                              ; preds = %321
  %337 = load i64, ptr %29, align 8, !tbaa !9
  br label %338

338:                                              ; preds = %336, %334
  %339 = phi i64 [ %335, %334 ], [ %337, %336 ]
  store i64 %339, ptr %31, align 8, !tbaa !9
  %340 = load ptr, ptr %8, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %340, i32 0, i32 6
  %342 = load ptr, ptr %341, align 8, !tbaa !24
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %343, i32 0, i32 7
  %345 = load i64, ptr %344, align 8, !tbaa !18
  %346 = getelementptr inbounds i8, ptr %342, i64 %345
  %347 = load ptr, ptr %17, align 8, !tbaa !5
  %348 = load i64, ptr %31, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %346, ptr align 1 %347, i64 %348, i1 false)
  %349 = load i64, ptr %31, align 8, !tbaa !9
  %350 = load ptr, ptr %17, align 8, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %350, i64 %349
  store ptr %351, ptr %17, align 8, !tbaa !5
  %352 = load i64, ptr %31, align 8, !tbaa !9
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %353, i32 0, i32 7
  %355 = load i64, ptr %354, align 8, !tbaa !18
  %356 = add i64 %355, %352
  store i64 %356, ptr %354, align 8, !tbaa !18
  %357 = load ptr, ptr %8, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %357, i32 0, i32 7
  %359 = load i64, ptr %358, align 8, !tbaa !18
  %360 = icmp ult i64 %359, 4
  br i1 %360, label %361, label %366

361:                                              ; preds = %338
  %362 = load ptr, ptr %8, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %362, i32 0, i32 7
  %364 = load i64, ptr %363, align 8, !tbaa !18
  %365 = sub i64 4, %364
  store i64 %365, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %370

366:                                              ; preds = %338
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %367, i32 0, i32 6
  %369 = load ptr, ptr %368, align 8, !tbaa !24
  store ptr %369, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %370

370:                                              ; preds = %366, %361
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  %371 = load i32, ptr %25, align 4
  switch i32 %371, label %1501 [
    i32 0, label %372
    i32 4, label %1340
  ]

372:                                              ; preds = %370
  br label %373

373:                                              ; preds = %372, %315
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  %374 = load ptr, ptr %21, align 8, !tbaa !5
  %375 = call i32 @LZ4F_readLE32(ptr noundef %374)
  %376 = and i32 %375, 2147483647
  %377 = zext i32 %376 to i64
  store i64 %377, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %378 = load ptr, ptr %8, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %378, i32 0, i32 0
  %380 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %379, i32 0, i32 6
  %381 = load i32, ptr %380, align 4, !tbaa !29
  %382 = zext i32 %381 to i64
  %383 = mul i64 %382, 4
  store i64 %383, ptr %33, align 8, !tbaa !9
  %384 = load i64, ptr %32, align 8, !tbaa !9
  %385 = icmp eq i64 %384, 0
  br i1 %385, label %386, label %389

386:                                              ; preds = %373
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %387, i32 0, i32 2
  store i32 10, ptr %388, align 4, !tbaa !13
  store i32 4, ptr %25, align 4
  br label %439

389:                                              ; preds = %373
  %390 = load i64, ptr %32, align 8, !tbaa !9
  %391 = load ptr, ptr %8, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %391, i32 0, i32 4
  %393 = load i64, ptr %392, align 8, !tbaa !21
  %394 = icmp ugt i64 %390, %393
  br i1 %394, label %395, label %397

395:                                              ; preds = %389
  %396 = call i64 @err0r(i32 noundef 2)
  store i64 %396, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %439

397:                                              ; preds = %389
  %398 = load ptr, ptr %21, align 8, !tbaa !5
  %399 = call i32 @LZ4F_readLE32(ptr noundef %398)
  %400 = and i32 %399, -2147483648
  %401 = icmp ne i32 %400, 0
  br i1 %401, label %402, label %418

402:                                              ; preds = %397
  %403 = load i64, ptr %32, align 8, !tbaa !9
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %404, i32 0, i32 8
  store i64 %403, ptr %405, align 8, !tbaa !19
  %406 = load ptr, ptr %8, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %406, i32 0, i32 0
  %408 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %407, i32 0, i32 6
  %409 = load i32, ptr %408, align 4, !tbaa !29
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %411, label %415

411:                                              ; preds = %402
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %412, i32 0, i32 16
  %414 = call i32 @XXH32_reset(ptr noundef %413, i32 noundef 0)
  br label %415

415:                                              ; preds = %411, %402
  %416 = load ptr, ptr %8, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %416, i32 0, i32 2
  store i32 5, ptr %417, align 4, !tbaa !13
  store i32 4, ptr %25, align 4
  br label %439

418:                                              ; preds = %397
  %419 = load i64, ptr %32, align 8, !tbaa !9
  %420 = load i64, ptr %33, align 8, !tbaa !9
  %421 = add i64 %419, %420
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %422, i32 0, i32 8
  store i64 %421, ptr %423, align 8, !tbaa !19
  %424 = load ptr, ptr %8, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %424, i32 0, i32 2
  store i32 7, ptr %425, align 4, !tbaa !13
  %426 = load ptr, ptr %20, align 8, !tbaa !5
  %427 = load ptr, ptr %19, align 8, !tbaa !5
  %428 = icmp eq ptr %426, %427
  br i1 %428, label %433, label %429

429:                                              ; preds = %418
  %430 = load ptr, ptr %17, align 8, !tbaa !5
  %431 = load ptr, ptr %16, align 8, !tbaa !5
  %432 = icmp eq ptr %430, %431
  br i1 %432, label %433, label %438

433:                                              ; preds = %429, %418
  %434 = load i64, ptr %32, align 8, !tbaa !9
  %435 = add i64 4, %434
  %436 = load i64, ptr %33, align 8, !tbaa !9
  %437 = add i64 %435, %436
  store i64 %437, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %438

438:                                              ; preds = %433, %429
  store i32 4, ptr %25, align 4
  br label %439

439:                                              ; preds = %438, %415, %395, %386
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  %440 = load i32, ptr %25, align 4
  switch i32 %440, label %1499 [
    i32 4, label %1340
  ]

441:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %442 = load ptr, ptr %16, align 8, !tbaa !5
  %443 = load ptr, ptr %17, align 8, !tbaa !5
  %444 = ptrtoint ptr %442 to i64
  %445 = ptrtoint ptr %443 to i64
  %446 = sub i64 %444, %445
  %447 = load ptr, ptr %19, align 8, !tbaa !5
  %448 = load ptr, ptr %20, align 8, !tbaa !5
  %449 = ptrtoint ptr %447 to i64
  %450 = ptrtoint ptr %448 to i64
  %451 = sub i64 %449, %450
  %452 = icmp ult i64 %446, %451
  br i1 %452, label %453, label %459

453:                                              ; preds = %441
  %454 = load ptr, ptr %16, align 8, !tbaa !5
  %455 = load ptr, ptr %17, align 8, !tbaa !5
  %456 = ptrtoint ptr %454 to i64
  %457 = ptrtoint ptr %455 to i64
  %458 = sub i64 %456, %457
  br label %465

459:                                              ; preds = %441
  %460 = load ptr, ptr %19, align 8, !tbaa !5
  %461 = load ptr, ptr %20, align 8, !tbaa !5
  %462 = ptrtoint ptr %460 to i64
  %463 = ptrtoint ptr %461 to i64
  %464 = sub i64 %462, %463
  br label %465

465:                                              ; preds = %459, %453
  %466 = phi i64 [ %458, %453 ], [ %464, %459 ]
  store i64 %466, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #7
  %467 = load ptr, ptr %8, align 8, !tbaa !5
  %468 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %467, i32 0, i32 8
  %469 = load i64, ptr %468, align 8, !tbaa !19
  %470 = load i64, ptr %34, align 8, !tbaa !9
  %471 = icmp ult i64 %469, %470
  br i1 %471, label %472, label %476

472:                                              ; preds = %465
  %473 = load ptr, ptr %8, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %473, i32 0, i32 8
  %475 = load i64, ptr %474, align 8, !tbaa !19
  br label %478

476:                                              ; preds = %465
  %477 = load i64, ptr %34, align 8, !tbaa !9
  br label %478

478:                                              ; preds = %476, %472
  %479 = phi i64 [ %475, %472 ], [ %477, %476 ]
  store i64 %479, ptr %35, align 8, !tbaa !9
  %480 = load ptr, ptr %20, align 8, !tbaa !5
  %481 = load ptr, ptr %17, align 8, !tbaa !5
  %482 = load i64, ptr %35, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %480, ptr align 1 %481, i64 %482, i1 false)
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %483, i32 0, i32 0
  %485 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %484, i32 0, i32 6
  %486 = load i32, ptr %485, align 4, !tbaa !29
  %487 = icmp ne i32 %486, 0
  br i1 %487, label %488, label %494

488:                                              ; preds = %478
  %489 = load ptr, ptr %8, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %489, i32 0, i32 16
  %491 = load ptr, ptr %17, align 8, !tbaa !5
  %492 = load i64, ptr %35, align 8, !tbaa !9
  %493 = call i32 @XXH32_update(ptr noundef %490, ptr noundef %491, i64 noundef %492)
  br label %494

494:                                              ; preds = %488, %478
  %495 = load ptr, ptr %8, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %495, i32 0, i32 0
  %497 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %496, i32 0, i32 2
  %498 = load i32, ptr %497, align 8, !tbaa !20
  %499 = icmp ne i32 %498, 0
  br i1 %499, label %500, label %506

500:                                              ; preds = %494
  %501 = load ptr, ptr %8, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %501, i32 0, i32 15
  %503 = load ptr, ptr %17, align 8, !tbaa !5
  %504 = load i64, ptr %35, align 8, !tbaa !9
  %505 = call i32 @XXH32_update(ptr noundef %502, ptr noundef %503, i64 noundef %504)
  br label %506

506:                                              ; preds = %500, %494
  %507 = load ptr, ptr %8, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %507, i32 0, i32 0
  %509 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %508, i32 0, i32 4
  %510 = load i64, ptr %509, align 8, !tbaa !30
  %511 = icmp ne i64 %510, 0
  br i1 %511, label %512, label %518

512:                                              ; preds = %506
  %513 = load i64, ptr %35, align 8, !tbaa !9
  %514 = load ptr, ptr %8, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %514, i32 0, i32 3
  %516 = load i64, ptr %515, align 8, !tbaa !31
  %517 = sub i64 %516, %513
  store i64 %517, ptr %515, align 8, !tbaa !31
  br label %518

518:                                              ; preds = %512, %506
  %519 = load ptr, ptr %8, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %519, i32 0, i32 0
  %521 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %520, i32 0, i32 1
  %522 = load i32, ptr %521, align 4, !tbaa !22
  %523 = icmp eq i32 %522, 0
  br i1 %523, label %524, label %529

524:                                              ; preds = %518
  %525 = load ptr, ptr %8, align 8, !tbaa !5
  %526 = load ptr, ptr %20, align 8, !tbaa !5
  %527 = load i64, ptr %35, align 8, !tbaa !9
  %528 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %525, ptr noundef %526, i64 noundef %527, ptr noundef %528, i32 noundef 0)
  br label %529

529:                                              ; preds = %524, %518
  %530 = load i64, ptr %35, align 8, !tbaa !9
  %531 = load ptr, ptr %17, align 8, !tbaa !5
  %532 = getelementptr inbounds i8, ptr %531, i64 %530
  store ptr %532, ptr %17, align 8, !tbaa !5
  %533 = load i64, ptr %35, align 8, !tbaa !9
  %534 = load ptr, ptr %20, align 8, !tbaa !5
  %535 = getelementptr inbounds i8, ptr %534, i64 %533
  store ptr %535, ptr %20, align 8, !tbaa !5
  %536 = load i64, ptr %35, align 8, !tbaa !9
  %537 = load ptr, ptr %8, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %537, i32 0, i32 8
  %539 = load i64, ptr %538, align 8, !tbaa !19
  %540 = icmp eq i64 %536, %539
  br i1 %540, label %541, label %556

541:                                              ; preds = %529
  %542 = load ptr, ptr %8, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %542, i32 0, i32 0
  %544 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %543, i32 0, i32 6
  %545 = load i32, ptr %544, align 4, !tbaa !29
  %546 = icmp ne i32 %545, 0
  br i1 %546, label %547, label %552

547:                                              ; preds = %541
  %548 = load ptr, ptr %8, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %548, i32 0, i32 7
  store i64 0, ptr %549, align 8, !tbaa !18
  %550 = load ptr, ptr %8, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %550, i32 0, i32 2
  store i32 6, ptr %551, align 4, !tbaa !13
  br label %555

552:                                              ; preds = %541
  %553 = load ptr, ptr %8, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %553, i32 0, i32 2
  store i32 3, ptr %554, align 4, !tbaa !13
  br label %555

555:                                              ; preds = %552, %547
  store i32 4, ptr %25, align 4
  br label %574

556:                                              ; preds = %529
  %557 = load i64, ptr %35, align 8, !tbaa !9
  %558 = load ptr, ptr %8, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %558, i32 0, i32 8
  %560 = load i64, ptr %559, align 8, !tbaa !19
  %561 = sub i64 %560, %557
  store i64 %561, ptr %559, align 8, !tbaa !19
  %562 = load ptr, ptr %8, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %562, i32 0, i32 8
  %564 = load i64, ptr %563, align 8, !tbaa !19
  %565 = load ptr, ptr %8, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %565, i32 0, i32 0
  %567 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %566, i32 0, i32 6
  %568 = load i32, ptr %567, align 4, !tbaa !29
  %569 = icmp ne i32 %568, 0
  %570 = zext i1 %569 to i64
  %571 = select i1 %569, i64 4, i64 0
  %572 = add i64 %564, %571
  %573 = add i64 %572, 4
  store i64 %573, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %574

574:                                              ; preds = %556, %555
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  br label %1340

575:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %576 = load ptr, ptr %16, align 8, !tbaa !5
  %577 = load ptr, ptr %17, align 8, !tbaa !5
  %578 = ptrtoint ptr %576 to i64
  %579 = ptrtoint ptr %577 to i64
  %580 = sub i64 %578, %579
  %581 = icmp sge i64 %580, 4
  br i1 %581, label %582, label %591

582:                                              ; preds = %575
  %583 = load ptr, ptr %8, align 8, !tbaa !5
  %584 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %583, i32 0, i32 7
  %585 = load i64, ptr %584, align 8, !tbaa !18
  %586 = icmp eq i64 %585, 0
  br i1 %586, label %587, label %591

587:                                              ; preds = %582
  %588 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %588, ptr %36, align 8, !tbaa !5
  %589 = load ptr, ptr %17, align 8, !tbaa !5
  %590 = getelementptr inbounds i8, ptr %589, i64 4
  store ptr %590, ptr %17, align 8, !tbaa !5
  br label %642

591:                                              ; preds = %582, %575
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %592 = load ptr, ptr %8, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %592, i32 0, i32 7
  %594 = load i64, ptr %593, align 8, !tbaa !18
  %595 = sub i64 4, %594
  store i64 %595, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %596 = load i64, ptr %37, align 8, !tbaa !9
  %597 = load ptr, ptr %16, align 8, !tbaa !5
  %598 = load ptr, ptr %17, align 8, !tbaa !5
  %599 = ptrtoint ptr %597 to i64
  %600 = ptrtoint ptr %598 to i64
  %601 = sub i64 %599, %600
  %602 = icmp ult i64 %596, %601
  br i1 %602, label %603, label %605

603:                                              ; preds = %591
  %604 = load i64, ptr %37, align 8, !tbaa !9
  br label %611

605:                                              ; preds = %591
  %606 = load ptr, ptr %16, align 8, !tbaa !5
  %607 = load ptr, ptr %17, align 8, !tbaa !5
  %608 = ptrtoint ptr %606 to i64
  %609 = ptrtoint ptr %607 to i64
  %610 = sub i64 %608, %609
  br label %611

611:                                              ; preds = %605, %603
  %612 = phi i64 [ %604, %603 ], [ %610, %605 ]
  store i64 %612, ptr %38, align 8, !tbaa !9
  %613 = load ptr, ptr %8, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %613, i32 0, i32 17
  %615 = getelementptr inbounds [19 x i8], ptr %614, i64 0, i64 0
  %616 = load ptr, ptr %8, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %616, i32 0, i32 7
  %618 = load i64, ptr %617, align 8, !tbaa !18
  %619 = getelementptr inbounds i8, ptr %615, i64 %618
  %620 = load ptr, ptr %17, align 8, !tbaa !5
  %621 = load i64, ptr %38, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %619, ptr align 1 %620, i64 %621, i1 false)
  %622 = load i64, ptr %38, align 8, !tbaa !9
  %623 = load ptr, ptr %8, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %623, i32 0, i32 7
  %625 = load i64, ptr %624, align 8, !tbaa !18
  %626 = add i64 %625, %622
  store i64 %626, ptr %624, align 8, !tbaa !18
  %627 = load i64, ptr %38, align 8, !tbaa !9
  %628 = load ptr, ptr %17, align 8, !tbaa !5
  %629 = getelementptr inbounds i8, ptr %628, i64 %627
  store ptr %629, ptr %17, align 8, !tbaa !5
  %630 = load ptr, ptr %8, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %630, i32 0, i32 7
  %632 = load i64, ptr %631, align 8, !tbaa !18
  %633 = icmp ult i64 %632, 4
  br i1 %633, label %634, label %635

634:                                              ; preds = %611
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %639

635:                                              ; preds = %611
  %636 = load ptr, ptr %8, align 8, !tbaa !5
  %637 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %636, i32 0, i32 17
  %638 = getelementptr inbounds [19 x i8], ptr %637, i64 0, i64 0
  store ptr %638, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %639

639:                                              ; preds = %635, %634
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  %640 = load i32, ptr %25, align 4
  switch i32 %640, label %657 [
    i32 0, label %641
  ]

641:                                              ; preds = %639
  br label %642

642:                                              ; preds = %641, %587
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  %643 = load ptr, ptr %36, align 8, !tbaa !5
  %644 = call i32 @LZ4F_readLE32(ptr noundef %643)
  store i32 %644, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  %645 = load ptr, ptr %8, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %645, i32 0, i32 16
  %647 = call i32 @XXH32_digest(ptr noundef %646)
  store i32 %647, ptr %40, align 4, !tbaa !11
  %648 = load i32, ptr %39, align 4, !tbaa !11
  %649 = load i32, ptr %40, align 4, !tbaa !11
  %650 = icmp ne i32 %648, %649
  br i1 %650, label %651, label %653

651:                                              ; preds = %642
  %652 = call i64 @err0r(i32 noundef 7)
  store i64 %652, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %654

653:                                              ; preds = %642
  store i32 0, ptr %25, align 4
  br label %654

654:                                              ; preds = %653, %651
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  %655 = load i32, ptr %25, align 4
  switch i32 %655, label %657 [
    i32 0, label %656
  ]

656:                                              ; preds = %654
  store i32 0, ptr %25, align 4
  br label %657

657:                                              ; preds = %656, %654, %639
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  %658 = load i32, ptr %25, align 4
  switch i32 %658, label %1499 [
    i32 0, label %659
    i32 4, label %1340
  ]

659:                                              ; preds = %657
  %660 = load ptr, ptr %8, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %660, i32 0, i32 2
  store i32 3, ptr %661, align 4, !tbaa !13
  br label %1340

662:                                              ; preds = %88
  %663 = load ptr, ptr %16, align 8, !tbaa !5
  %664 = load ptr, ptr %17, align 8, !tbaa !5
  %665 = ptrtoint ptr %663 to i64
  %666 = ptrtoint ptr %664 to i64
  %667 = sub i64 %665, %666
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %668, i32 0, i32 8
  %670 = load i64, ptr %669, align 8, !tbaa !19
  %671 = icmp ult i64 %667, %670
  br i1 %671, label %672, label %677

672:                                              ; preds = %662
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  %674 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %673, i32 0, i32 7
  store i64 0, ptr %674, align 8, !tbaa !18
  %675 = load ptr, ptr %8, align 8, !tbaa !5
  %676 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %675, i32 0, i32 2
  store i32 8, ptr %676, align 4, !tbaa !13
  br label %1340

677:                                              ; preds = %662
  %678 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %678, ptr %21, align 8, !tbaa !5
  %679 = load ptr, ptr %8, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %679, i32 0, i32 8
  %681 = load i64, ptr %680, align 8, !tbaa !19
  %682 = load ptr, ptr %17, align 8, !tbaa !5
  %683 = getelementptr inbounds i8, ptr %682, i64 %681
  store ptr %683, ptr %17, align 8, !tbaa !5
  br i1 false, label %684, label %755

684:                                              ; preds = %677
  br label %685

685:                                              ; preds = %684, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %686 = load ptr, ptr %8, align 8, !tbaa !5
  %687 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %686, i32 0, i32 8
  %688 = load i64, ptr %687, align 8, !tbaa !19
  %689 = load ptr, ptr %8, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %689, i32 0, i32 7
  %691 = load i64, ptr %690, align 8, !tbaa !18
  %692 = sub i64 %688, %691
  store i64 %692, ptr %41, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %693 = load ptr, ptr %16, align 8, !tbaa !5
  %694 = load ptr, ptr %17, align 8, !tbaa !5
  %695 = ptrtoint ptr %693 to i64
  %696 = ptrtoint ptr %694 to i64
  %697 = sub i64 %695, %696
  store i64 %697, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %698 = load i64, ptr %41, align 8, !tbaa !9
  %699 = load i64, ptr %42, align 8, !tbaa !9
  %700 = icmp ult i64 %698, %699
  br i1 %700, label %701, label %703

701:                                              ; preds = %685
  %702 = load i64, ptr %41, align 8, !tbaa !9
  br label %705

703:                                              ; preds = %685
  %704 = load i64, ptr %42, align 8, !tbaa !9
  br label %705

705:                                              ; preds = %703, %701
  %706 = phi i64 [ %702, %701 ], [ %704, %703 ]
  store i64 %706, ptr %43, align 8, !tbaa !9
  %707 = load ptr, ptr %8, align 8, !tbaa !5
  %708 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %707, i32 0, i32 6
  %709 = load ptr, ptr %708, align 8, !tbaa !24
  %710 = load ptr, ptr %8, align 8, !tbaa !5
  %711 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %710, i32 0, i32 7
  %712 = load i64, ptr %711, align 8, !tbaa !18
  %713 = getelementptr inbounds i8, ptr %709, i64 %712
  %714 = load ptr, ptr %17, align 8, !tbaa !5
  %715 = load i64, ptr %43, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %713, ptr align 1 %714, i64 %715, i1 false)
  %716 = load i64, ptr %43, align 8, !tbaa !9
  %717 = load ptr, ptr %8, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %717, i32 0, i32 7
  %719 = load i64, ptr %718, align 8, !tbaa !18
  %720 = add i64 %719, %716
  store i64 %720, ptr %718, align 8, !tbaa !18
  %721 = load i64, ptr %43, align 8, !tbaa !9
  %722 = load ptr, ptr %17, align 8, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %722, i64 %721
  store ptr %723, ptr %17, align 8, !tbaa !5
  %724 = load ptr, ptr %8, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %724, i32 0, i32 7
  %726 = load i64, ptr %725, align 8, !tbaa !18
  %727 = load ptr, ptr %8, align 8, !tbaa !5
  %728 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %727, i32 0, i32 8
  %729 = load i64, ptr %728, align 8, !tbaa !19
  %730 = icmp ult i64 %726, %729
  br i1 %730, label %731, label %748

731:                                              ; preds = %705
  %732 = load ptr, ptr %8, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %732, i32 0, i32 8
  %734 = load i64, ptr %733, align 8, !tbaa !19
  %735 = load ptr, ptr %8, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %735, i32 0, i32 7
  %737 = load i64, ptr %736, align 8, !tbaa !18
  %738 = sub i64 %734, %737
  %739 = load ptr, ptr %8, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %739, i32 0, i32 0
  %741 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %740, i32 0, i32 6
  %742 = load i32, ptr %741, align 4, !tbaa !29
  %743 = icmp ne i32 %742, 0
  %744 = zext i1 %743 to i64
  %745 = select i1 %743, i64 4, i64 0
  %746 = add i64 %738, %745
  %747 = add i64 %746, 4
  store i64 %747, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %752

748:                                              ; preds = %705
  %749 = load ptr, ptr %8, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %749, i32 0, i32 6
  %751 = load ptr, ptr %750, align 8, !tbaa !24
  store ptr %751, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %752

752:                                              ; preds = %748, %731
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  %753 = load i32, ptr %25, align 4
  switch i32 %753, label %1501 [
    i32 0, label %754
    i32 4, label %1340
  ]

754:                                              ; preds = %752
  br label %755

755:                                              ; preds = %754, %677
  %756 = load ptr, ptr %8, align 8, !tbaa !5
  %757 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %756, i32 0, i32 0
  %758 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %757, i32 0, i32 6
  %759 = load i32, ptr %758, align 4, !tbaa !29
  %760 = icmp ne i32 %759, 0
  br i1 %760, label %761, label %786

761:                                              ; preds = %755
  %762 = load ptr, ptr %8, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %762, i32 0, i32 8
  %764 = load i64, ptr %763, align 8, !tbaa !19
  %765 = sub i64 %764, 4
  store i64 %765, ptr %763, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  %766 = load ptr, ptr %21, align 8, !tbaa !5
  %767 = load ptr, ptr %8, align 8, !tbaa !5
  %768 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %767, i32 0, i32 8
  %769 = load i64, ptr %768, align 8, !tbaa !19
  %770 = getelementptr inbounds i8, ptr %766, i64 %769
  %771 = call i32 @LZ4F_readLE32(ptr noundef %770)
  store i32 %771, ptr %44, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  %772 = load ptr, ptr %21, align 8, !tbaa !5
  %773 = load ptr, ptr %8, align 8, !tbaa !5
  %774 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %773, i32 0, i32 8
  %775 = load i64, ptr %774, align 8, !tbaa !19
  %776 = call i32 @XXH32(ptr noundef %772, i64 noundef %775, i32 noundef 0)
  store i32 %776, ptr %45, align 4, !tbaa !11
  %777 = load i32, ptr %44, align 4, !tbaa !11
  %778 = load i32, ptr %45, align 4, !tbaa !11
  %779 = icmp ne i32 %777, %778
  br i1 %779, label %780, label %782

780:                                              ; preds = %761
  %781 = call i64 @err0r(i32 noundef 7)
  store i64 %781, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %783

782:                                              ; preds = %761
  store i32 0, ptr %25, align 4
  br label %783

783:                                              ; preds = %782, %780
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  %784 = load i32, ptr %25, align 4
  switch i32 %784, label %1499 [
    i32 0, label %785
  ]

785:                                              ; preds = %783
  br label %786

786:                                              ; preds = %785, %755
  %787 = load ptr, ptr %19, align 8, !tbaa !5
  %788 = load ptr, ptr %20, align 8, !tbaa !5
  %789 = ptrtoint ptr %787 to i64
  %790 = ptrtoint ptr %788 to i64
  %791 = sub i64 %789, %790
  %792 = load ptr, ptr %8, align 8, !tbaa !5
  %793 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %792, i32 0, i32 4
  %794 = load i64, ptr %793, align 8, !tbaa !21
  %795 = icmp uge i64 %791, %794
  br i1 %795, label %796, label %879

796:                                              ; preds = %786
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %797 = load ptr, ptr %8, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %797, i32 0, i32 10
  %799 = load ptr, ptr %798, align 8, !tbaa !32
  store ptr %799, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %800, i32 0, i32 11
  %802 = load i64, ptr %801, align 8, !tbaa !33
  store i64 %802, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #7
  %803 = load ptr, ptr %46, align 8, !tbaa !5
  %804 = icmp ne ptr %803, null
  br i1 %804, label %805, label %813

805:                                              ; preds = %796
  %806 = load i64, ptr %47, align 8, !tbaa !9
  %807 = icmp ugt i64 %806, 1073741824
  br i1 %807, label %808, label %813

808:                                              ; preds = %805
  %809 = load i64, ptr %47, align 8, !tbaa !9
  %810 = sub i64 %809, 65536
  %811 = load ptr, ptr %46, align 8, !tbaa !5
  %812 = getelementptr inbounds i8, ptr %811, i64 %810
  store ptr %812, ptr %46, align 8, !tbaa !5
  store i64 65536, ptr %47, align 8, !tbaa !9
  br label %813

813:                                              ; preds = %808, %805, %796
  %814 = load ptr, ptr %21, align 8, !tbaa !5
  %815 = load ptr, ptr %20, align 8, !tbaa !5
  %816 = load ptr, ptr %8, align 8, !tbaa !5
  %817 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %816, i32 0, i32 8
  %818 = load i64, ptr %817, align 8, !tbaa !19
  %819 = trunc i64 %818 to i32
  %820 = load ptr, ptr %8, align 8, !tbaa !5
  %821 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %820, i32 0, i32 4
  %822 = load i64, ptr %821, align 8, !tbaa !21
  %823 = trunc i64 %822 to i32
  %824 = load ptr, ptr %46, align 8, !tbaa !5
  %825 = load i64, ptr %47, align 8, !tbaa !9
  %826 = trunc i64 %825 to i32
  %827 = call i32 @LZ4_decompress_safe_usingDict(ptr noundef %814, ptr noundef %815, i32 noundef %819, i32 noundef %823, ptr noundef %824, i32 noundef %826)
  store i32 %827, ptr %48, align 4, !tbaa !11
  %828 = load i32, ptr %48, align 4, !tbaa !11
  %829 = icmp slt i32 %828, 0
  br i1 %829, label %830, label %832

830:                                              ; preds = %813
  %831 = call i64 @err0r(i32 noundef 1)
  store i64 %831, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %877

832:                                              ; preds = %813
  %833 = load ptr, ptr %8, align 8, !tbaa !5
  %834 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %833, i32 0, i32 0
  %835 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %834, i32 0, i32 2
  %836 = load i32, ptr %835, align 8, !tbaa !20
  %837 = icmp ne i32 %836, 0
  br i1 %837, label %838, label %845

838:                                              ; preds = %832
  %839 = load ptr, ptr %8, align 8, !tbaa !5
  %840 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %839, i32 0, i32 15
  %841 = load ptr, ptr %20, align 8, !tbaa !5
  %842 = load i32, ptr %48, align 4, !tbaa !11
  %843 = sext i32 %842 to i64
  %844 = call i32 @XXH32_update(ptr noundef %840, ptr noundef %841, i64 noundef %843)
  br label %845

845:                                              ; preds = %838, %832
  %846 = load ptr, ptr %8, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %846, i32 0, i32 0
  %848 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %847, i32 0, i32 4
  %849 = load i64, ptr %848, align 8, !tbaa !30
  %850 = icmp ne i64 %849, 0
  br i1 %850, label %851, label %858

851:                                              ; preds = %845
  %852 = load i32, ptr %48, align 4, !tbaa !11
  %853 = sext i32 %852 to i64
  %854 = load ptr, ptr %8, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %854, i32 0, i32 3
  %856 = load i64, ptr %855, align 8, !tbaa !31
  %857 = sub i64 %856, %853
  store i64 %857, ptr %855, align 8, !tbaa !31
  br label %858

858:                                              ; preds = %851, %845
  %859 = load ptr, ptr %8, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %859, i32 0, i32 0
  %861 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %860, i32 0, i32 1
  %862 = load i32, ptr %861, align 4, !tbaa !22
  %863 = icmp eq i32 %862, 0
  br i1 %863, label %864, label %870

864:                                              ; preds = %858
  %865 = load ptr, ptr %8, align 8, !tbaa !5
  %866 = load ptr, ptr %20, align 8, !tbaa !5
  %867 = load i32, ptr %48, align 4, !tbaa !11
  %868 = sext i32 %867 to i64
  %869 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %865, ptr noundef %866, i64 noundef %868, ptr noundef %869, i32 noundef 0)
  br label %870

870:                                              ; preds = %864, %858
  %871 = load i32, ptr %48, align 4, !tbaa !11
  %872 = load ptr, ptr %20, align 8, !tbaa !5
  %873 = sext i32 %871 to i64
  %874 = getelementptr inbounds i8, ptr %872, i64 %873
  store ptr %874, ptr %20, align 8, !tbaa !5
  %875 = load ptr, ptr %8, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %875, i32 0, i32 2
  store i32 3, ptr %876, align 4, !tbaa !13
  store i32 4, ptr %25, align 4
  br label %877

877:                                              ; preds = %870, %830
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  %878 = load i32, ptr %25, align 4
  switch i32 %878, label %1499 [
    i32 4, label %1340
  ]

879:                                              ; preds = %786
  %880 = load ptr, ptr %8, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %880, i32 0, i32 0
  %882 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %881, i32 0, i32 1
  %883 = load i32, ptr %882, align 4, !tbaa !22
  %884 = icmp eq i32 %883, 0
  br i1 %884, label %885, label %942

885:                                              ; preds = %879
  %886 = load ptr, ptr %8, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %886, i32 0, i32 10
  %888 = load ptr, ptr %887, align 8, !tbaa !32
  %889 = load ptr, ptr %8, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %889, i32 0, i32 9
  %891 = load ptr, ptr %890, align 8, !tbaa !25
  %892 = icmp eq ptr %888, %891
  br i1 %892, label %893, label %922

893:                                              ; preds = %885
  %894 = load ptr, ptr %8, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %894, i32 0, i32 11
  %896 = load i64, ptr %895, align 8, !tbaa !33
  %897 = icmp ugt i64 %896, 131072
  br i1 %897, label %898, label %912

898:                                              ; preds = %893
  %899 = load ptr, ptr %8, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %899, i32 0, i32 9
  %901 = load ptr, ptr %900, align 8, !tbaa !25
  %902 = load ptr, ptr %8, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %902, i32 0, i32 10
  %904 = load ptr, ptr %903, align 8, !tbaa !32
  %905 = load ptr, ptr %8, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %905, i32 0, i32 11
  %907 = load i64, ptr %906, align 8, !tbaa !33
  %908 = getelementptr inbounds i8, ptr %904, i64 %907
  %909 = getelementptr inbounds i8, ptr %908, i64 -65536
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %901, ptr align 1 %909, i64 65536, i1 false)
  %910 = load ptr, ptr %8, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %910, i32 0, i32 11
  store i64 65536, ptr %911, align 8, !tbaa !33
  br label %912

912:                                              ; preds = %898, %893
  %913 = load ptr, ptr %8, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %913, i32 0, i32 9
  %915 = load ptr, ptr %914, align 8, !tbaa !25
  %916 = load ptr, ptr %8, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %916, i32 0, i32 11
  %918 = load i64, ptr %917, align 8, !tbaa !33
  %919 = getelementptr inbounds i8, ptr %915, i64 %918
  %920 = load ptr, ptr %8, align 8, !tbaa !5
  %921 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %920, i32 0, i32 12
  store ptr %919, ptr %921, align 8, !tbaa !26
  br label %941

922:                                              ; preds = %885
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %923 = load ptr, ptr %8, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %923, i32 0, i32 11
  %925 = load i64, ptr %924, align 8, !tbaa !33
  %926 = icmp ult i64 %925, 65536
  br i1 %926, label %927, label %931

927:                                              ; preds = %922
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %928, i32 0, i32 11
  %930 = load i64, ptr %929, align 8, !tbaa !33
  br label %932

931:                                              ; preds = %922
  br label %932

932:                                              ; preds = %931, %927
  %933 = phi i64 [ %930, %927 ], [ 65536, %931 ]
  store i64 %933, ptr %49, align 8, !tbaa !9
  %934 = load ptr, ptr %8, align 8, !tbaa !5
  %935 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %934, i32 0, i32 9
  %936 = load ptr, ptr %935, align 8, !tbaa !25
  %937 = load i64, ptr %49, align 8, !tbaa !9
  %938 = getelementptr inbounds i8, ptr %936, i64 %937
  %939 = load ptr, ptr %8, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %939, i32 0, i32 12
  store ptr %938, ptr %940, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %941

941:                                              ; preds = %932, %912
  br label %942

942:                                              ; preds = %941, %879
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %943 = load ptr, ptr %8, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %943, i32 0, i32 10
  %945 = load ptr, ptr %944, align 8, !tbaa !32
  store ptr %945, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %946 = load ptr, ptr %8, align 8, !tbaa !5
  %947 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %946, i32 0, i32 11
  %948 = load i64, ptr %947, align 8, !tbaa !33
  store i64 %948, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #7
  %949 = load ptr, ptr %50, align 8, !tbaa !5
  %950 = icmp ne ptr %949, null
  br i1 %950, label %951, label %959

951:                                              ; preds = %942
  %952 = load i64, ptr %51, align 8, !tbaa !9
  %953 = icmp ugt i64 %952, 1073741824
  br i1 %953, label %954, label %959

954:                                              ; preds = %951
  %955 = load i64, ptr %51, align 8, !tbaa !9
  %956 = sub i64 %955, 65536
  %957 = load ptr, ptr %50, align 8, !tbaa !5
  %958 = getelementptr inbounds i8, ptr %957, i64 %956
  store ptr %958, ptr %50, align 8, !tbaa !5
  store i64 65536, ptr %51, align 8, !tbaa !9
  br label %959

959:                                              ; preds = %954, %951, %942
  %960 = load ptr, ptr %21, align 8, !tbaa !5
  %961 = load ptr, ptr %8, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %961, i32 0, i32 12
  %963 = load ptr, ptr %962, align 8, !tbaa !26
  %964 = load ptr, ptr %8, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %964, i32 0, i32 8
  %966 = load i64, ptr %965, align 8, !tbaa !19
  %967 = trunc i64 %966 to i32
  %968 = load ptr, ptr %8, align 8, !tbaa !5
  %969 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %968, i32 0, i32 4
  %970 = load i64, ptr %969, align 8, !tbaa !21
  %971 = trunc i64 %970 to i32
  %972 = load ptr, ptr %50, align 8, !tbaa !5
  %973 = load i64, ptr %51, align 8, !tbaa !9
  %974 = trunc i64 %973 to i32
  %975 = call i32 @LZ4_decompress_safe_usingDict(ptr noundef %960, ptr noundef %963, i32 noundef %967, i32 noundef %971, ptr noundef %972, i32 noundef %974)
  store i32 %975, ptr %52, align 4, !tbaa !11
  %976 = load i32, ptr %52, align 4, !tbaa !11
  %977 = icmp slt i32 %976, 0
  br i1 %977, label %978, label %980

978:                                              ; preds = %959
  %979 = call i64 @err0r(i32 noundef 16)
  store i64 %979, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1017

980:                                              ; preds = %959
  %981 = load ptr, ptr %8, align 8, !tbaa !5
  %982 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %981, i32 0, i32 0
  %983 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %982, i32 0, i32 2
  %984 = load i32, ptr %983, align 8, !tbaa !20
  %985 = icmp ne i32 %984, 0
  br i1 %985, label %986, label %995

986:                                              ; preds = %980
  %987 = load ptr, ptr %8, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %987, i32 0, i32 15
  %989 = load ptr, ptr %8, align 8, !tbaa !5
  %990 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %989, i32 0, i32 12
  %991 = load ptr, ptr %990, align 8, !tbaa !26
  %992 = load i32, ptr %52, align 4, !tbaa !11
  %993 = sext i32 %992 to i64
  %994 = call i32 @XXH32_update(ptr noundef %988, ptr noundef %991, i64 noundef %993)
  br label %995

995:                                              ; preds = %986, %980
  %996 = load ptr, ptr %8, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %996, i32 0, i32 0
  %998 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %997, i32 0, i32 4
  %999 = load i64, ptr %998, align 8, !tbaa !30
  %1000 = icmp ne i64 %999, 0
  br i1 %1000, label %1001, label %1008

1001:                                             ; preds = %995
  %1002 = load i32, ptr %52, align 4, !tbaa !11
  %1003 = sext i32 %1002 to i64
  %1004 = load ptr, ptr %8, align 8, !tbaa !5
  %1005 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1004, i32 0, i32 3
  %1006 = load i64, ptr %1005, align 8, !tbaa !31
  %1007 = sub i64 %1006, %1003
  store i64 %1007, ptr %1005, align 8, !tbaa !31
  br label %1008

1008:                                             ; preds = %1001, %995
  %1009 = load i32, ptr %52, align 4, !tbaa !11
  %1010 = sext i32 %1009 to i64
  %1011 = load ptr, ptr %8, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1011, i32 0, i32 13
  store i64 %1010, ptr %1012, align 8, !tbaa !28
  %1013 = load ptr, ptr %8, align 8, !tbaa !5
  %1014 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1013, i32 0, i32 14
  store i64 0, ptr %1014, align 8, !tbaa !27
  %1015 = load ptr, ptr %8, align 8, !tbaa !5
  %1016 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1015, i32 0, i32 2
  store i32 9, ptr %1016, align 4, !tbaa !13
  store i32 0, ptr %25, align 4
  br label %1017

1017:                                             ; preds = %1008, %978
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  %1018 = load i32, ptr %25, align 4
  switch i32 %1018, label %1499 [
    i32 0, label %1019
  ]

1019:                                             ; preds = %1017
  br label %1020

1020:                                             ; preds = %1019, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  %1021 = load ptr, ptr %8, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1021, i32 0, i32 13
  %1023 = load i64, ptr %1022, align 8, !tbaa !28
  %1024 = load ptr, ptr %8, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1024, i32 0, i32 14
  %1026 = load i64, ptr %1025, align 8, !tbaa !27
  %1027 = sub i64 %1023, %1026
  %1028 = load ptr, ptr %19, align 8, !tbaa !5
  %1029 = load ptr, ptr %20, align 8, !tbaa !5
  %1030 = ptrtoint ptr %1028 to i64
  %1031 = ptrtoint ptr %1029 to i64
  %1032 = sub i64 %1030, %1031
  %1033 = icmp ult i64 %1027, %1032
  br i1 %1033, label %1034, label %1042

1034:                                             ; preds = %1020
  %1035 = load ptr, ptr %8, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1035, i32 0, i32 13
  %1037 = load i64, ptr %1036, align 8, !tbaa !28
  %1038 = load ptr, ptr %8, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1038, i32 0, i32 14
  %1040 = load i64, ptr %1039, align 8, !tbaa !27
  %1041 = sub i64 %1037, %1040
  br label %1048

1042:                                             ; preds = %1020
  %1043 = load ptr, ptr %19, align 8, !tbaa !5
  %1044 = load ptr, ptr %20, align 8, !tbaa !5
  %1045 = ptrtoint ptr %1043 to i64
  %1046 = ptrtoint ptr %1044 to i64
  %1047 = sub i64 %1045, %1046
  br label %1048

1048:                                             ; preds = %1042, %1034
  %1049 = phi i64 [ %1041, %1034 ], [ %1047, %1042 ]
  store i64 %1049, ptr %53, align 8, !tbaa !9
  %1050 = load ptr, ptr %20, align 8, !tbaa !5
  %1051 = load ptr, ptr %8, align 8, !tbaa !5
  %1052 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1051, i32 0, i32 12
  %1053 = load ptr, ptr %1052, align 8, !tbaa !26
  %1054 = load ptr, ptr %8, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1054, i32 0, i32 14
  %1056 = load i64, ptr %1055, align 8, !tbaa !27
  %1057 = getelementptr inbounds i8, ptr %1053, i64 %1056
  %1058 = load i64, ptr %53, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1050, ptr align 1 %1057, i64 %1058, i1 false)
  %1059 = load ptr, ptr %8, align 8, !tbaa !5
  %1060 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1059, i32 0, i32 0
  %1061 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1060, i32 0, i32 1
  %1062 = load i32, ptr %1061, align 4, !tbaa !22
  %1063 = icmp eq i32 %1062, 0
  br i1 %1063, label %1064, label %1069

1064:                                             ; preds = %1048
  %1065 = load ptr, ptr %8, align 8, !tbaa !5
  %1066 = load ptr, ptr %20, align 8, !tbaa !5
  %1067 = load i64, ptr %53, align 8, !tbaa !9
  %1068 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %1065, ptr noundef %1066, i64 noundef %1067, ptr noundef %1068, i32 noundef 1)
  br label %1069

1069:                                             ; preds = %1064, %1048
  %1070 = load i64, ptr %53, align 8, !tbaa !9
  %1071 = load ptr, ptr %8, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1071, i32 0, i32 14
  %1073 = load i64, ptr %1072, align 8, !tbaa !27
  %1074 = add i64 %1073, %1070
  store i64 %1074, ptr %1072, align 8, !tbaa !27
  %1075 = load i64, ptr %53, align 8, !tbaa !9
  %1076 = load ptr, ptr %20, align 8, !tbaa !5
  %1077 = getelementptr inbounds i8, ptr %1076, i64 %1075
  store ptr %1077, ptr %20, align 8, !tbaa !5
  %1078 = load ptr, ptr %8, align 8, !tbaa !5
  %1079 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1078, i32 0, i32 14
  %1080 = load i64, ptr %1079, align 8, !tbaa !27
  %1081 = load ptr, ptr %8, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1081, i32 0, i32 13
  %1083 = load i64, ptr %1082, align 8, !tbaa !28
  %1084 = icmp eq i64 %1080, %1083
  br i1 %1084, label %1085, label %1088

1085:                                             ; preds = %1069
  %1086 = load ptr, ptr %8, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1086, i32 0, i32 2
  store i32 3, ptr %1087, align 4, !tbaa !13
  store i32 4, ptr %25, align 4
  br label %1089

1088:                                             ; preds = %1069
  store i32 0, ptr %22, align 4, !tbaa !11
  store i64 4, ptr %23, align 8, !tbaa !9
  store i32 4, ptr %25, align 4
  br label %1089

1089:                                             ; preds = %1088, %1085
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  br label %1340

1090:                                             ; preds = %88
  %1091 = load ptr, ptr %8, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1091, i32 0, i32 3
  %1093 = load i64, ptr %1092, align 8, !tbaa !31
  %1094 = icmp ne i64 %1093, 0
  br i1 %1094, label %1095, label %1097

1095:                                             ; preds = %1090
  %1096 = call i64 @err0r(i32 noundef 14)
  store i64 %1096, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1499

1097:                                             ; preds = %1090
  %1098 = load ptr, ptr %8, align 8, !tbaa !5
  %1099 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1098, i32 0, i32 0
  %1100 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1099, i32 0, i32 2
  %1101 = load i32, ptr %1100, align 8, !tbaa !20
  %1102 = icmp ne i32 %1101, 0
  br i1 %1102, label %1105, label %1103

1103:                                             ; preds = %1097
  store i64 0, ptr %23, align 8, !tbaa !9
  %1104 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1104)
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1340

1105:                                             ; preds = %1097
  %1106 = load ptr, ptr %16, align 8, !tbaa !5
  %1107 = load ptr, ptr %17, align 8, !tbaa !5
  %1108 = ptrtoint ptr %1106 to i64
  %1109 = ptrtoint ptr %1107 to i64
  %1110 = sub i64 %1108, %1109
  %1111 = icmp slt i64 %1110, 4
  br i1 %1111, label %1112, label %1117

1112:                                             ; preds = %1105
  %1113 = load ptr, ptr %8, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1113, i32 0, i32 7
  store i64 0, ptr %1114, align 8, !tbaa !18
  %1115 = load ptr, ptr %8, align 8, !tbaa !5
  %1116 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1115, i32 0, i32 2
  store i32 11, ptr %1116, align 4, !tbaa !13
  br label %1121

1117:                                             ; preds = %1105
  %1118 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1118, ptr %21, align 8, !tbaa !5
  %1119 = load ptr, ptr %17, align 8, !tbaa !5
  %1120 = getelementptr inbounds i8, ptr %1119, i64 4
  store ptr %1120, ptr %17, align 8, !tbaa !5
  br label %1121

1121:                                             ; preds = %1117, %1112
  %1122 = load ptr, ptr %8, align 8, !tbaa !5
  %1123 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1122, i32 0, i32 2
  %1124 = load i32, ptr %1123, align 4, !tbaa !13
  %1125 = icmp eq i32 %1124, 11
  br i1 %1125, label %1126, label %1179

1126:                                             ; preds = %1121
  br label %1127

1127:                                             ; preds = %1126, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  %1128 = load ptr, ptr %16, align 8, !tbaa !5
  %1129 = load ptr, ptr %17, align 8, !tbaa !5
  %1130 = ptrtoint ptr %1128 to i64
  %1131 = ptrtoint ptr %1129 to i64
  %1132 = sub i64 %1130, %1131
  store i64 %1132, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  %1133 = load ptr, ptr %8, align 8, !tbaa !5
  %1134 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1133, i32 0, i32 7
  %1135 = load i64, ptr %1134, align 8, !tbaa !18
  %1136 = sub i64 4, %1135
  store i64 %1136, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %1137 = load i64, ptr %55, align 8, !tbaa !9
  %1138 = load i64, ptr %54, align 8, !tbaa !9
  %1139 = icmp ult i64 %1137, %1138
  br i1 %1139, label %1140, label %1142

1140:                                             ; preds = %1127
  %1141 = load i64, ptr %55, align 8, !tbaa !9
  br label %1144

1142:                                             ; preds = %1127
  %1143 = load i64, ptr %54, align 8, !tbaa !9
  br label %1144

1144:                                             ; preds = %1142, %1140
  %1145 = phi i64 [ %1141, %1140 ], [ %1143, %1142 ]
  store i64 %1145, ptr %56, align 8, !tbaa !9
  %1146 = load ptr, ptr %8, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1146, i32 0, i32 6
  %1148 = load ptr, ptr %1147, align 8, !tbaa !24
  %1149 = load ptr, ptr %8, align 8, !tbaa !5
  %1150 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1149, i32 0, i32 7
  %1151 = load i64, ptr %1150, align 8, !tbaa !18
  %1152 = getelementptr inbounds i8, ptr %1148, i64 %1151
  %1153 = load ptr, ptr %17, align 8, !tbaa !5
  %1154 = load i64, ptr %56, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1152, ptr align 1 %1153, i64 %1154, i1 false)
  %1155 = load i64, ptr %56, align 8, !tbaa !9
  %1156 = load ptr, ptr %17, align 8, !tbaa !5
  %1157 = getelementptr inbounds i8, ptr %1156, i64 %1155
  store ptr %1157, ptr %17, align 8, !tbaa !5
  %1158 = load i64, ptr %56, align 8, !tbaa !9
  %1159 = load ptr, ptr %8, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1159, i32 0, i32 7
  %1161 = load i64, ptr %1160, align 8, !tbaa !18
  %1162 = add i64 %1161, %1158
  store i64 %1162, ptr %1160, align 8, !tbaa !18
  %1163 = load ptr, ptr %8, align 8, !tbaa !5
  %1164 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1163, i32 0, i32 7
  %1165 = load i64, ptr %1164, align 8, !tbaa !18
  %1166 = icmp ult i64 %1165, 4
  br i1 %1166, label %1167, label %1172

1167:                                             ; preds = %1144
  %1168 = load ptr, ptr %8, align 8, !tbaa !5
  %1169 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1168, i32 0, i32 7
  %1170 = load i64, ptr %1169, align 8, !tbaa !18
  %1171 = sub i64 4, %1170
  store i64 %1171, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %1176

1172:                                             ; preds = %1144
  %1173 = load ptr, ptr %8, align 8, !tbaa !5
  %1174 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1173, i32 0, i32 6
  %1175 = load ptr, ptr %1174, align 8, !tbaa !24
  store ptr %1175, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %1176

1176:                                             ; preds = %1172, %1167
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  %1177 = load i32, ptr %25, align 4
  switch i32 %1177, label %1501 [
    i32 0, label %1178
    i32 4, label %1340
  ]

1178:                                             ; preds = %1176
  br label %1179

1179:                                             ; preds = %1178, %1121
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #7
  %1180 = load ptr, ptr %21, align 8, !tbaa !5
  %1181 = call i32 @LZ4F_readLE32(ptr noundef %1180)
  store i32 %1181, ptr %57, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #7
  %1182 = load ptr, ptr %8, align 8, !tbaa !5
  %1183 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1182, i32 0, i32 15
  %1184 = call i32 @XXH32_digest(ptr noundef %1183)
  store i32 %1184, ptr %58, align 4, !tbaa !11
  %1185 = load i32, ptr %57, align 4, !tbaa !11
  %1186 = load i32, ptr %58, align 4, !tbaa !11
  %1187 = icmp ne i32 %1185, %1186
  br i1 %1187, label %1188, label %1190

1188:                                             ; preds = %1179
  %1189 = call i64 @err0r(i32 noundef 18)
  store i64 %1189, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1192

1190:                                             ; preds = %1179
  store i64 0, ptr %23, align 8, !tbaa !9
  %1191 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1191)
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %1192

1192:                                             ; preds = %1190, %1188
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #7
  %1193 = load i32, ptr %25, align 4
  switch i32 %1193, label %1499 [
    i32 4, label %1340
  ]

1194:                                             ; preds = %88
  %1195 = load ptr, ptr %16, align 8, !tbaa !5
  %1196 = load ptr, ptr %17, align 8, !tbaa !5
  %1197 = ptrtoint ptr %1195 to i64
  %1198 = ptrtoint ptr %1196 to i64
  %1199 = sub i64 %1197, %1198
  %1200 = icmp sge i64 %1199, 4
  br i1 %1200, label %1201, label %1205

1201:                                             ; preds = %1194
  %1202 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1202, ptr %21, align 8, !tbaa !5
  %1203 = load ptr, ptr %17, align 8, !tbaa !5
  %1204 = getelementptr inbounds i8, ptr %1203, i64 4
  store ptr %1204, ptr %17, align 8, !tbaa !5
  br label %1212

1205:                                             ; preds = %1194
  %1206 = load ptr, ptr %8, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1206, i32 0, i32 7
  store i64 4, ptr %1207, align 8, !tbaa !18
  %1208 = load ptr, ptr %8, align 8, !tbaa !5
  %1209 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1208, i32 0, i32 8
  store i64 8, ptr %1209, align 8, !tbaa !19
  %1210 = load ptr, ptr %8, align 8, !tbaa !5
  %1211 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1210, i32 0, i32 2
  store i32 13, ptr %1211, align 4, !tbaa !13
  br label %1212

1212:                                             ; preds = %1205, %1201
  %1213 = load ptr, ptr %8, align 8, !tbaa !5
  %1214 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1213, i32 0, i32 2
  %1215 = load i32, ptr %1214, align 4, !tbaa !13
  %1216 = icmp eq i32 %1215, 13
  br i1 %1216, label %1217, label %1288

1217:                                             ; preds = %1212
  br label %1218

1218:                                             ; preds = %1217, %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  %1219 = load ptr, ptr %8, align 8, !tbaa !5
  %1220 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1219, i32 0, i32 8
  %1221 = load i64, ptr %1220, align 8, !tbaa !19
  %1222 = load ptr, ptr %8, align 8, !tbaa !5
  %1223 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1222, i32 0, i32 7
  %1224 = load i64, ptr %1223, align 8, !tbaa !18
  %1225 = sub i64 %1221, %1224
  %1226 = load ptr, ptr %16, align 8, !tbaa !5
  %1227 = load ptr, ptr %17, align 8, !tbaa !5
  %1228 = ptrtoint ptr %1226 to i64
  %1229 = ptrtoint ptr %1227 to i64
  %1230 = sub i64 %1228, %1229
  %1231 = icmp ult i64 %1225, %1230
  br i1 %1231, label %1232, label %1240

1232:                                             ; preds = %1218
  %1233 = load ptr, ptr %8, align 8, !tbaa !5
  %1234 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1233, i32 0, i32 8
  %1235 = load i64, ptr %1234, align 8, !tbaa !19
  %1236 = load ptr, ptr %8, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1236, i32 0, i32 7
  %1238 = load i64, ptr %1237, align 8, !tbaa !18
  %1239 = sub i64 %1235, %1238
  br label %1246

1240:                                             ; preds = %1218
  %1241 = load ptr, ptr %16, align 8, !tbaa !5
  %1242 = load ptr, ptr %17, align 8, !tbaa !5
  %1243 = ptrtoint ptr %1241 to i64
  %1244 = ptrtoint ptr %1242 to i64
  %1245 = sub i64 %1243, %1244
  br label %1246

1246:                                             ; preds = %1240, %1232
  %1247 = phi i64 [ %1239, %1232 ], [ %1245, %1240 ]
  store i64 %1247, ptr %59, align 8, !tbaa !9
  %1248 = load ptr, ptr %8, align 8, !tbaa !5
  %1249 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1248, i32 0, i32 17
  %1250 = getelementptr inbounds [19 x i8], ptr %1249, i64 0, i64 0
  %1251 = load ptr, ptr %8, align 8, !tbaa !5
  %1252 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1251, i32 0, i32 7
  %1253 = load i64, ptr %1252, align 8, !tbaa !18
  %1254 = getelementptr inbounds i8, ptr %1250, i64 %1253
  %1255 = load ptr, ptr %17, align 8, !tbaa !5
  %1256 = load i64, ptr %59, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1254, ptr align 1 %1255, i64 %1256, i1 false)
  %1257 = load i64, ptr %59, align 8, !tbaa !9
  %1258 = load ptr, ptr %17, align 8, !tbaa !5
  %1259 = getelementptr inbounds i8, ptr %1258, i64 %1257
  store ptr %1259, ptr %17, align 8, !tbaa !5
  %1260 = load i64, ptr %59, align 8, !tbaa !9
  %1261 = load ptr, ptr %8, align 8, !tbaa !5
  %1262 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1261, i32 0, i32 7
  %1263 = load i64, ptr %1262, align 8, !tbaa !18
  %1264 = add i64 %1263, %1260
  store i64 %1264, ptr %1262, align 8, !tbaa !18
  %1265 = load ptr, ptr %8, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1265, i32 0, i32 7
  %1267 = load i64, ptr %1266, align 8, !tbaa !18
  %1268 = load ptr, ptr %8, align 8, !tbaa !5
  %1269 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1268, i32 0, i32 8
  %1270 = load i64, ptr %1269, align 8, !tbaa !19
  %1271 = icmp ult i64 %1267, %1270
  br i1 %1271, label %1272, label %1280

1272:                                             ; preds = %1246
  %1273 = load ptr, ptr %8, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1273, i32 0, i32 8
  %1275 = load i64, ptr %1274, align 8, !tbaa !19
  %1276 = load ptr, ptr %8, align 8, !tbaa !5
  %1277 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1276, i32 0, i32 7
  %1278 = load i64, ptr %1277, align 8, !tbaa !18
  %1279 = sub i64 %1275, %1278
  store i64 %1279, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %1285

1280:                                             ; preds = %1246
  %1281 = load ptr, ptr %8, align 8, !tbaa !5
  %1282 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1281, i32 0, i32 17
  %1283 = getelementptr inbounds [19 x i8], ptr %1282, i64 0, i64 0
  %1284 = getelementptr inbounds i8, ptr %1283, i64 4
  store ptr %1284, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %1285

1285:                                             ; preds = %1280, %1272
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  %1286 = load i32, ptr %25, align 4
  switch i32 %1286, label %1501 [
    i32 0, label %1287
    i32 4, label %1340
  ]

1287:                                             ; preds = %1285
  br label %1288

1288:                                             ; preds = %1287, %1212
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  %1289 = load ptr, ptr %21, align 8, !tbaa !5
  %1290 = call i32 @LZ4F_readLE32(ptr noundef %1289)
  %1291 = zext i32 %1290 to i64
  store i64 %1291, ptr %60, align 8, !tbaa !9
  %1292 = load i64, ptr %60, align 8, !tbaa !9
  %1293 = load ptr, ptr %8, align 8, !tbaa !5
  %1294 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1293, i32 0, i32 0
  %1295 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1294, i32 0, i32 4
  store i64 %1292, ptr %1295, align 8, !tbaa !30
  %1296 = load i64, ptr %60, align 8, !tbaa !9
  %1297 = load ptr, ptr %8, align 8, !tbaa !5
  %1298 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1297, i32 0, i32 8
  store i64 %1296, ptr %1298, align 8, !tbaa !19
  %1299 = load ptr, ptr %8, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1299, i32 0, i32 2
  store i32 14, ptr %1300, align 4, !tbaa !13
  store i32 4, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  br label %1340

1301:                                             ; preds = %88
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %1302 = load ptr, ptr %8, align 8, !tbaa !5
  %1303 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1302, i32 0, i32 8
  %1304 = load i64, ptr %1303, align 8, !tbaa !19
  %1305 = load ptr, ptr %16, align 8, !tbaa !5
  %1306 = load ptr, ptr %17, align 8, !tbaa !5
  %1307 = ptrtoint ptr %1305 to i64
  %1308 = ptrtoint ptr %1306 to i64
  %1309 = sub i64 %1307, %1308
  %1310 = icmp ult i64 %1304, %1309
  br i1 %1310, label %1311, label %1315

1311:                                             ; preds = %1301
  %1312 = load ptr, ptr %8, align 8, !tbaa !5
  %1313 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1312, i32 0, i32 8
  %1314 = load i64, ptr %1313, align 8, !tbaa !19
  br label %1321

1315:                                             ; preds = %1301
  %1316 = load ptr, ptr %16, align 8, !tbaa !5
  %1317 = load ptr, ptr %17, align 8, !tbaa !5
  %1318 = ptrtoint ptr %1316 to i64
  %1319 = ptrtoint ptr %1317 to i64
  %1320 = sub i64 %1318, %1319
  br label %1321

1321:                                             ; preds = %1315, %1311
  %1322 = phi i64 [ %1314, %1311 ], [ %1320, %1315 ]
  store i64 %1322, ptr %61, align 8, !tbaa !9
  %1323 = load i64, ptr %61, align 8, !tbaa !9
  %1324 = load ptr, ptr %17, align 8, !tbaa !5
  %1325 = getelementptr inbounds i8, ptr %1324, i64 %1323
  store ptr %1325, ptr %17, align 8, !tbaa !5
  %1326 = load i64, ptr %61, align 8, !tbaa !9
  %1327 = load ptr, ptr %8, align 8, !tbaa !5
  %1328 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1327, i32 0, i32 8
  %1329 = load i64, ptr %1328, align 8, !tbaa !19
  %1330 = sub i64 %1329, %1326
  store i64 %1330, ptr %1328, align 8, !tbaa !19
  store i32 0, ptr %22, align 4, !tbaa !11
  %1331 = load ptr, ptr %8, align 8, !tbaa !5
  %1332 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1331, i32 0, i32 8
  %1333 = load i64, ptr %1332, align 8, !tbaa !19
  store i64 %1333, ptr %23, align 8, !tbaa !9
  %1334 = load i64, ptr %23, align 8, !tbaa !9
  %1335 = icmp ne i64 %1334, 0
  br i1 %1335, label %1336, label %1337

1336:                                             ; preds = %1321
  store i32 4, ptr %25, align 4
  br label %1339

1337:                                             ; preds = %1321
  %1338 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1338)
  store i32 4, ptr %25, align 4
  br label %1339

1339:                                             ; preds = %1337, %1336
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  br label %1340

1340:                                             ; preds = %1339, %1288, %1285, %1192, %1176, %1103, %1089, %877, %752, %672, %659, %657, %574, %439, %370, %214, %188, %117, %88
  br label %85, !llvm.loop !34

1341:                                             ; preds = %85
  %1342 = load ptr, ptr %8, align 8, !tbaa !5
  %1343 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1342, i32 0, i32 0
  %1344 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1343, i32 0, i32 1
  %1345 = load i32, ptr %1344, align 4, !tbaa !22
  %1346 = icmp eq i32 %1345, 0
  br i1 %1346, label %1347, label %1485

1347:                                             ; preds = %1341
  %1348 = load ptr, ptr %8, align 8, !tbaa !5
  %1349 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1348, i32 0, i32 10
  %1350 = load ptr, ptr %1349, align 8, !tbaa !32
  %1351 = load ptr, ptr %8, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1351, i32 0, i32 9
  %1353 = load ptr, ptr %1352, align 8, !tbaa !25
  %1354 = icmp ne ptr %1350, %1353
  br i1 %1354, label %1355, label %1485

1355:                                             ; preds = %1347
  %1356 = load ptr, ptr %13, align 8, !tbaa !5
  %1357 = getelementptr inbounds %struct.LZ4F_decompressOptions_t, ptr %1356, i32 0, i32 0
  %1358 = load i32, ptr %1357, align 4, !tbaa !36
  %1359 = icmp ne i32 %1358, 0
  br i1 %1359, label %1485, label %1360

1360:                                             ; preds = %1355
  %1361 = load ptr, ptr %8, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1361, i32 0, i32 2
  %1363 = load i32, ptr %1362, align 4, !tbaa !13
  %1364 = sub i32 %1363, 2
  %1365 = icmp ult i32 %1364, 8
  br i1 %1365, label %1366, label %1485

1366:                                             ; preds = %1360
  %1367 = load ptr, ptr %8, align 8, !tbaa !5
  %1368 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1367, i32 0, i32 2
  %1369 = load i32, ptr %1368, align 4, !tbaa !13
  %1370 = icmp eq i32 %1369, 9
  br i1 %1370, label %1371, label %1438

1371:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #7
  %1372 = load ptr, ptr %8, align 8, !tbaa !5
  %1373 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1372, i32 0, i32 12
  %1374 = load ptr, ptr %1373, align 8, !tbaa !26
  %1375 = load ptr, ptr %8, align 8, !tbaa !5
  %1376 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1375, i32 0, i32 9
  %1377 = load ptr, ptr %1376, align 8, !tbaa !25
  %1378 = ptrtoint ptr %1374 to i64
  %1379 = ptrtoint ptr %1377 to i64
  %1380 = sub i64 %1378, %1379
  store i64 %1380, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %1381 = load ptr, ptr %8, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1381, i32 0, i32 13
  %1383 = load i64, ptr %1382, align 8, !tbaa !28
  %1384 = sub i64 65536, %1383
  store i64 %1384, ptr %63, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  %1385 = load ptr, ptr %8, align 8, !tbaa !5
  %1386 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1385, i32 0, i32 10
  %1387 = load ptr, ptr %1386, align 8, !tbaa !32
  %1388 = load ptr, ptr %8, align 8, !tbaa !5
  %1389 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1388, i32 0, i32 11
  %1390 = load i64, ptr %1389, align 8, !tbaa !33
  %1391 = getelementptr inbounds i8, ptr %1387, i64 %1390
  %1392 = load ptr, ptr %8, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1392, i32 0, i32 14
  %1394 = load i64, ptr %1393, align 8, !tbaa !27
  %1395 = sub i64 0, %1394
  %1396 = getelementptr inbounds i8, ptr %1391, i64 %1395
  store ptr %1396, ptr %64, align 8, !tbaa !5
  %1397 = load ptr, ptr %8, align 8, !tbaa !5
  %1398 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1397, i32 0, i32 13
  %1399 = load i64, ptr %1398, align 8, !tbaa !28
  %1400 = icmp ugt i64 %1399, 65536
  br i1 %1400, label %1401, label %1402

1401:                                             ; preds = %1371
  store i64 0, ptr %63, align 8, !tbaa !9
  br label %1402

1402:                                             ; preds = %1401, %1371
  %1403 = load i64, ptr %63, align 8, !tbaa !9
  %1404 = load i64, ptr %62, align 8, !tbaa !9
  %1405 = icmp ugt i64 %1403, %1404
  br i1 %1405, label %1406, label %1408

1406:                                             ; preds = %1402
  %1407 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %1407, ptr %63, align 8, !tbaa !9
  br label %1408

1408:                                             ; preds = %1406, %1402
  %1409 = load i64, ptr %63, align 8, !tbaa !9
  %1410 = icmp ugt i64 %1409, 0
  br i1 %1410, label %1411, label %1425

1411:                                             ; preds = %1408
  %1412 = load ptr, ptr %8, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1412, i32 0, i32 9
  %1414 = load ptr, ptr %1413, align 8, !tbaa !25
  %1415 = load i64, ptr %62, align 8, !tbaa !9
  %1416 = getelementptr inbounds i8, ptr %1414, i64 %1415
  %1417 = load i64, ptr %63, align 8, !tbaa !9
  %1418 = sub i64 0, %1417
  %1419 = getelementptr inbounds i8, ptr %1416, i64 %1418
  %1420 = load ptr, ptr %64, align 8, !tbaa !5
  %1421 = load i64, ptr %63, align 8, !tbaa !9
  %1422 = sub i64 0, %1421
  %1423 = getelementptr inbounds i8, ptr %1420, i64 %1422
  %1424 = load i64, ptr %63, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1419, ptr align 1 %1423, i64 %1424, i1 false)
  br label %1425

1425:                                             ; preds = %1411, %1408
  %1426 = load ptr, ptr %8, align 8, !tbaa !5
  %1427 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1426, i32 0, i32 9
  %1428 = load ptr, ptr %1427, align 8, !tbaa !25
  %1429 = load ptr, ptr %8, align 8, !tbaa !5
  %1430 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1429, i32 0, i32 10
  store ptr %1428, ptr %1430, align 8, !tbaa !32
  %1431 = load i64, ptr %62, align 8, !tbaa !9
  %1432 = load ptr, ptr %8, align 8, !tbaa !5
  %1433 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1432, i32 0, i32 14
  %1434 = load i64, ptr %1433, align 8, !tbaa !27
  %1435 = add i64 %1431, %1434
  %1436 = load ptr, ptr %8, align 8, !tbaa !5
  %1437 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1436, i32 0, i32 11
  store i64 %1435, ptr %1437, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #7
  br label %1484

1438:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %1439 = load ptr, ptr %8, align 8, !tbaa !5
  %1440 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1439, i32 0, i32 10
  %1441 = load ptr, ptr %1440, align 8, !tbaa !32
  %1442 = load ptr, ptr %8, align 8, !tbaa !5
  %1443 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1442, i32 0, i32 11
  %1444 = load i64, ptr %1443, align 8, !tbaa !33
  %1445 = getelementptr inbounds i8, ptr %1441, i64 %1444
  store ptr %1445, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  %1446 = load ptr, ptr %8, align 8, !tbaa !5
  %1447 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1446, i32 0, i32 11
  %1448 = load i64, ptr %1447, align 8, !tbaa !33
  %1449 = icmp ult i64 %1448, 65536
  br i1 %1449, label %1450, label %1454

1450:                                             ; preds = %1438
  %1451 = load ptr, ptr %8, align 8, !tbaa !5
  %1452 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1451, i32 0, i32 11
  %1453 = load i64, ptr %1452, align 8, !tbaa !33
  br label %1455

1454:                                             ; preds = %1438
  br label %1455

1455:                                             ; preds = %1454, %1450
  %1456 = phi i64 [ %1453, %1450 ], [ 65536, %1454 ]
  store i64 %1456, ptr %66, align 8, !tbaa !9
  %1457 = load i64, ptr %66, align 8, !tbaa !9
  %1458 = icmp ugt i64 %1457, 0
  br i1 %1458, label %1459, label %1468

1459:                                             ; preds = %1455
  %1460 = load ptr, ptr %8, align 8, !tbaa !5
  %1461 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1460, i32 0, i32 9
  %1462 = load ptr, ptr %1461, align 8, !tbaa !25
  %1463 = load ptr, ptr %65, align 8, !tbaa !5
  %1464 = load i64, ptr %66, align 8, !tbaa !9
  %1465 = sub i64 0, %1464
  %1466 = getelementptr inbounds i8, ptr %1463, i64 %1465
  %1467 = load i64, ptr %66, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1462, ptr align 1 %1466, i64 %1467, i1 false)
  br label %1468

1468:                                             ; preds = %1459, %1455
  %1469 = load ptr, ptr %8, align 8, !tbaa !5
  %1470 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1469, i32 0, i32 9
  %1471 = load ptr, ptr %1470, align 8, !tbaa !25
  %1472 = load ptr, ptr %8, align 8, !tbaa !5
  %1473 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1472, i32 0, i32 10
  store ptr %1471, ptr %1473, align 8, !tbaa !32
  %1474 = load i64, ptr %66, align 8, !tbaa !9
  %1475 = load ptr, ptr %8, align 8, !tbaa !5
  %1476 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1475, i32 0, i32 11
  store i64 %1474, ptr %1476, align 8, !tbaa !33
  %1477 = load ptr, ptr %8, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1477, i32 0, i32 9
  %1479 = load ptr, ptr %1478, align 8, !tbaa !25
  %1480 = load i64, ptr %66, align 8, !tbaa !9
  %1481 = getelementptr inbounds i8, ptr %1479, i64 %1480
  %1482 = load ptr, ptr %8, align 8, !tbaa !5
  %1483 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1482, i32 0, i32 12
  store ptr %1481, ptr %1483, align 8, !tbaa !26
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  br label %1484

1484:                                             ; preds = %1468, %1425
  br label %1485

1485:                                             ; preds = %1484, %1360, %1355, %1347, %1341
  %1486 = load ptr, ptr %17, align 8, !tbaa !5
  %1487 = load ptr, ptr %15, align 8, !tbaa !5
  %1488 = ptrtoint ptr %1486 to i64
  %1489 = ptrtoint ptr %1487 to i64
  %1490 = sub i64 %1488, %1489
  %1491 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %1490, ptr %1491, align 8, !tbaa !9
  %1492 = load ptr, ptr %20, align 8, !tbaa !5
  %1493 = load ptr, ptr %18, align 8, !tbaa !5
  %1494 = ptrtoint ptr %1492 to i64
  %1495 = ptrtoint ptr %1493 to i64
  %1496 = sub i64 %1494, %1495
  %1497 = load ptr, ptr %10, align 8, !tbaa !5
  store i64 %1496, ptr %1497, align 8, !tbaa !9
  %1498 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %1498, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1499

1499:                                             ; preds = %1485, %1192, %1095, %1017, %877, %783, %657, %439, %281, %212, %128, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #7
  %1500 = load i64, ptr %7, align 8
  ret i64 %1500

1501:                                             ; preds = %1285, %1176, %752, %370
  unreachable
}

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

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

declare i32 @XXH32(ptr noundef, i64 noundef, i32 noundef) #6

declare i32 @LZ4_decompress_safe_usingDict(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #6

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

!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 = !{!14, !12, i64 36}
!14 = !{!"LZ4F_dctx_s", !15, i64 0, !12, i64 32, !12, i64 36, !10, i64 40, !10, i64 48, !10, i64 56, !6, i64 64, !10, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !10, i64 104, !6, i64 112, !10, i64 120, !10, i64 128, !17, i64 136, !17, i64 184, !7, i64 232}
!15 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !16, i64 16, !12, i64 24, !12, i64 28}
!16 = !{!"long long", !7, i64 0}
!17 = !{!"XXH32_state_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !7, i64 24, !12, i64 40, !12, i64 44}
!18 = !{!14, !10, i64 72}
!19 = !{!14, !10, i64 80}
!20 = !{!14, !12, i64 8}
!21 = !{!14, !10, i64 48}
!22 = !{!14, !12, i64 4}
!23 = !{!14, !10, i64 56}
!24 = !{!14, !6, i64 64}
!25 = !{!14, !6, i64 88}
!26 = !{!14, !6, i64 112}
!27 = !{!14, !10, i64 128}
!28 = !{!14, !10, i64 120}
!29 = !{!14, !12, i64 28}
!30 = !{!14, !16, i64 16}
!31 = !{!14, !10, i64 40}
!32 = !{!14, !6, i64 96}
!33 = !{!14, !10, i64 104}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!37, !12, i64 0}
!37 = !{!"", !12, i64 0, !7, i64 4}


; 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
declare dso_local i32 @LZ4F_isError(i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden i64 @err0r(i32 noundef) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

declare i32 @XXH32_reset(ptr noundef, i32 noundef) local_unnamed_addr #5

declare i32 @XXH32_update(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

declare i32 @XXH32_digest(ptr noundef) local_unnamed_addr #5

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

; Function Attrs: nounwind uwtable
declare hidden i32 @LZ4F_readLE32(ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
define dso_local i64 @LZ4F_decompress(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, ptr nocapture noundef %4, ptr noundef readonly %5) local_unnamed_addr #0 {
  %7 = load i64, ptr %4, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %3, i64 %7
  %9 = load i64, ptr %2, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 %9
  %11 = icmp eq ptr %5, null
  store i64 0, ptr %4, align 8, !tbaa !5
  store i64 0, ptr %2, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 36
  %13 = getelementptr inbounds i8, ptr %0, i64 80
  %14 = ptrtoint ptr %8 to i64
  %15 = getelementptr inbounds i8, ptr %0, i64 72
  %16 = getelementptr inbounds i8, ptr %0, i64 232
  %17 = getelementptr inbounds i8, ptr %0, i64 236
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = getelementptr inbounds i8, ptr %0, i64 40
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = getelementptr inbounds i8, ptr %0, i64 64
  %22 = getelementptr inbounds i8, ptr %0, i64 136
  %23 = getelementptr inbounds i8, ptr %0, i64 28
  %24 = ptrtoint ptr %10 to i64
  %25 = getelementptr inbounds i8, ptr %0, i64 48
  %26 = getelementptr inbounds i8, ptr %0, i64 96
  %27 = getelementptr inbounds i8, ptr %0, i64 104
  %28 = getelementptr inbounds i8, ptr %0, i64 4
  %29 = getelementptr inbounds i8, ptr %0, i64 88
  %30 = getelementptr inbounds i8, ptr %0, i64 112
  %31 = getelementptr inbounds i8, ptr %0, i64 120
  %32 = getelementptr inbounds i8, ptr %0, i64 128
  %33 = getelementptr inbounds i8, ptr %0, i64 184
  %34 = getelementptr inbounds i8, ptr %0, i64 56
  br label %35

35:                                               ; preds = %6, %.thread683
  %.0489779 = phi ptr [ %3, %6 ], [ %.15504, %.thread683 ]
  %.0507778 = phi ptr [ %1, %6 ], [ %.2509, %.thread683 ]
  %.0545776 = phi i64 [ 1, %6 ], [ %.15560, %.thread683 ]
  %36 = load i32, ptr %12, align 4, !tbaa !9
  switch i32 %36, label %.thread683 [
    i32 0, label %37
    i32 1, label %._crit_edge793
    i32 2, label %63
    i32 3, label %92
    i32 4, label %._crit_edge814
    i32 5, label %137
    i32 6, label %175
    i32 7, label %194
    i32 8, label %202
    i32 9, label %._crit_edge786
    i32 10, label %332
    i32 11, label %._crit_edge813
    i32 12, label %363
    i32 13, label %._crit_edge812
    i32 14, label %383
  ]

._crit_edge814:                                   ; preds = %35
  %.pre815 = ptrtoint ptr %.0489779 to i64
  %.pre817 = sub i64 %14, %.pre815
  br label %98

._crit_edge813:                                   ; preds = %35
  %.pre823 = ptrtoint ptr %.0489779 to i64
  %.pre825 = sub i64 %14, %.pre823
  br label %345

._crit_edge812:                                   ; preds = %35
  %.pre827 = ptrtoint ptr %.0489779 to i64
  %.pre829 = sub i64 %14, %.pre827
  br label %369

._crit_edge793:                                   ; preds = %35
  %.pre794 = load i64, ptr %13, align 8, !tbaa !16
  %.pre795 = load i64, ptr %15, align 8, !tbaa !17
  %.pre805 = ptrtoint ptr %.0489779 to i64
  %.pre806 = sub i64 %14, %.pre805
  br label %48

._crit_edge786:                                   ; preds = %35
  %.pre787 = load i64, ptr %31, align 8, !tbaa !18
  %.pre788 = load i64, ptr %32, align 8, !tbaa !19
  %.pre808 = ptrtoint ptr %.0507778 to i64
  %.pre810 = sub i64 %24, %.pre808
  br label %316

37:                                               ; preds = %35
  %38 = ptrtoint ptr %.0489779 to i64
  %39 = sub i64 %14, %38
  %40 = icmp ugt i64 %39, 18
  br i1 %40, label %41, label %45

41:                                               ; preds = %37
  %42 = tail call i64 @LZ4F_decodeHeader(ptr noundef nonnull %0, ptr noundef %.0489779, i64 noundef %39)
  %43 = tail call i32 @LZ4F_isError(i64 noundef %42)
  %.not654 = icmp eq i32 %43, 0
  %44 = getelementptr inbounds i8, ptr %.0489779, i64 %42
  br i1 %.not654, label %.thread683, label %.loopexit

45:                                               ; preds = %37
  store i64 0, ptr %15, align 8, !tbaa !17
  %46 = icmp eq ptr %8, %.0489779
  br i1 %46, label %.loopexit, label %47

47:                                               ; preds = %45
  store i64 7, ptr %13, align 8, !tbaa !16
  store i32 1, ptr %12, align 4, !tbaa !9
  br label %48

48:                                               ; preds = %._crit_edge793, %47
  %.pre-phi807 = phi i64 [ %.pre806, %._crit_edge793 ], [ %39, %47 ]
  %49 = phi i64 [ %.pre795, %._crit_edge793 ], [ 0, %47 ]
  %50 = phi i64 [ %.pre794, %._crit_edge793 ], [ 7, %47 ]
  %51 = sub i64 %50, %49
  %. = tail call i64 @llvm.umin.i64(i64 %51, i64 %.pre-phi807)
  %52 = getelementptr inbounds i8, ptr %16, i64 %49
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %52, ptr align 1 %.0489779, i64 %., i1 false)
  %53 = load i64, ptr %15, align 8, !tbaa !17
  %54 = add i64 %53, %.
  store i64 %54, ptr %15, align 8, !tbaa !17
  %55 = getelementptr inbounds i8, ptr %.0489779, i64 %.
  %56 = load i64, ptr %13, align 8, !tbaa !16
  %57 = icmp ult i64 %54, %56
  br i1 %57, label %58, label %60

58:                                               ; preds = %48
  %reass.sub780 = sub i64 %56, %54
  %59 = add i64 %reass.sub780, 4
  br label %.thread683.thread

60:                                               ; preds = %48
  %61 = tail call i64 @LZ4F_decodeHeader(ptr noundef nonnull %0, ptr noundef nonnull %16, i64 noundef %56)
  %62 = tail call i32 @LZ4F_isError(i64 noundef %61)
  %.not653 = icmp eq i32 %62, 0
  br i1 %.not653, label %.thread683, label %.loopexit

63:                                               ; preds = %35
  %64 = load i32, ptr %20, align 8, !tbaa !20
  %.not650 = icmp eq i32 %64, 0
  br i1 %.not650, label %67, label %65

65:                                               ; preds = %63
  %66 = tail call i32 @XXH32_reset(ptr noundef nonnull %22, i32 noundef 0) #7
  br label %67

67:                                               ; preds = %65, %63
  %68 = load i64, ptr %25, align 8, !tbaa !21
  %69 = load i32, ptr %28, align 4, !tbaa !22
  %70 = icmp eq i32 %69, 0
  %71 = select i1 %70, i64 131072, i64 0
  %72 = add i64 %71, %68
  %73 = load i64, ptr %34, align 8, !tbaa !23
  %74 = icmp ugt i64 %72, %73
  br i1 %74, label %75, label %._crit_edge790

._crit_edge790:                                   ; preds = %67
  %.pre791 = load ptr, ptr %29, align 8, !tbaa !24
  br label %90

75:                                               ; preds = %67
  store i64 0, ptr %34, align 8, !tbaa !23
  %76 = load ptr, ptr %21, align 8, !tbaa !25
  tail call void @free(ptr noundef %76) #7
  %77 = load i64, ptr %25, align 8, !tbaa !21
  %78 = add i64 %77, 4
  %79 = tail call noalias ptr @malloc(i64 noundef %78) #8
  store ptr %79, ptr %21, align 8, !tbaa !25
  %80 = icmp eq ptr %79, null
  br i1 %80, label %81, label %83

81:                                               ; preds = %75
  %82 = tail call i64 @err0r(i32 noundef 9)
  br label %.loopexit

83:                                               ; preds = %75
  %84 = load ptr, ptr %29, align 8, !tbaa !24
  tail call void @free(ptr noundef %84) #7
  %85 = tail call noalias ptr @malloc(i64 noundef %72) #8
  store ptr %85, ptr %29, align 8, !tbaa !24
  %86 = icmp eq ptr %85, null
  br i1 %86, label %87, label %89

87:                                               ; preds = %83
  %88 = tail call i64 @err0r(i32 noundef 9)
  br label %.loopexit

89:                                               ; preds = %83
  store i64 %72, ptr %34, align 8, !tbaa !23
  br label %90

90:                                               ; preds = %._crit_edge790, %89
  %91 = phi ptr [ %.pre791, %._crit_edge790 ], [ %85, %89 ]
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %15, i8 0, i64 16, i1 false)
  store ptr %91, ptr %30, align 8, !tbaa !26
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %31, i8 0, i64 16, i1 false)
  store i32 3, ptr %12, align 4, !tbaa !9
  br label %92

92:                                               ; preds = %90, %35
  %93 = ptrtoint ptr %.0489779 to i64
  %94 = sub i64 %14, %93
  %95 = icmp ugt i64 %94, 3
  br i1 %95, label %96, label %.thread673

.thread673:                                       ; preds = %92
  store i64 0, ptr %15, align 8, !tbaa !17
  store i32 4, ptr %12, align 4, !tbaa !9
  br label %98

96:                                               ; preds = %92
  %97 = getelementptr inbounds i8, ptr %.0489779, i64 4
  br label %111

98:                                               ; preds = %._crit_edge814, %.thread673
  %.pre-phi818 = phi i64 [ %.pre817, %._crit_edge814 ], [ %94, %.thread673 ]
  %99 = load i64, ptr %15, align 8, !tbaa !17
  %100 = sub i64 4, %99
  %101 = tail call i64 @llvm.umin.i64(i64 %100, i64 %.pre-phi818)
  %102 = load ptr, ptr %21, align 8, !tbaa !25
  %103 = getelementptr inbounds i8, ptr %102, i64 %99
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %103, ptr align 1 %.0489779, i64 %101, i1 false)
  %104 = getelementptr inbounds i8, ptr %.0489779, i64 %101
  %105 = load i64, ptr %15, align 8, !tbaa !17
  %106 = add i64 %105, %101
  store i64 %106, ptr %15, align 8, !tbaa !17
  %107 = icmp ult i64 %106, 4
  br i1 %107, label %109, label %.thread676

.thread676:                                       ; preds = %98
  %108 = load ptr, ptr %21, align 8, !tbaa !25
  br label %111

109:                                              ; preds = %98
  %110 = sub nuw nsw i64 4, %106
  br label %.thread683.thread

111:                                              ; preds = %96, %.thread676
  %.4514 = phi ptr [ %.0489779, %96 ], [ %108, %.thread676 ]
  %.4493 = phi ptr [ %97, %96 ], [ %104, %.thread676 ]
  %112 = tail call i32 @LZ4F_readLE32(ptr noundef %.4514)
  %113 = and i32 %112, 2147483647
  %114 = zext nneg i32 %113 to i64
  %115 = load i32, ptr %23, align 4, !tbaa !27
  %116 = zext i32 %115 to i64
  %117 = shl nuw nsw i64 %116, 2
  %118 = icmp eq i32 %113, 0
  br i1 %118, label %119, label %120

119:                                              ; preds = %111
  store i32 10, ptr %12, align 4, !tbaa !9
  br label %.thread683

120:                                              ; preds = %111
  %121 = load i64, ptr %25, align 8, !tbaa !21
  %122 = icmp ult i64 %121, %114
  br i1 %122, label %135, label %123

123:                                              ; preds = %120
  %124 = tail call i32 @LZ4F_readLE32(ptr noundef %.4514)
  %.not651 = icmp sgt i32 %124, -1
  br i1 %.not651, label %130, label %125

125:                                              ; preds = %123
  store i64 %114, ptr %13, align 8, !tbaa !16
  %126 = load i32, ptr %23, align 4, !tbaa !27
  %.not652 = icmp eq i32 %126, 0
  br i1 %.not652, label %129, label %127

127:                                              ; preds = %125
  %128 = tail call i32 @XXH32_reset(ptr noundef nonnull %33, i32 noundef 0) #7
  br label %129

129:                                              ; preds = %127, %125
  store i32 5, ptr %12, align 4, !tbaa !9
  br label %.thread683

130:                                              ; preds = %123
  %131 = add nuw nsw i64 %117, %114
  store i64 %131, ptr %13, align 8, !tbaa !16
  store i32 7, ptr %12, align 4, !tbaa !9
  %132 = icmp ne ptr %.0507778, %10
  %133 = icmp ne ptr %.4493, %8
  %or.cond655.not = select i1 %132, i1 %133, i1 false
  %134 = add nuw nsw i64 %131, 4
  %.3548 = select i1 %or.cond655.not, i64 %.0545776, i64 %134
  %.3530 = zext i1 %or.cond655.not to i32
  br label %.thread683

135:                                              ; preds = %120
  %136 = tail call i64 @err0r(i32 noundef 2)
  br label %.loopexit

137:                                              ; preds = %35
  %138 = ptrtoint ptr %.0489779 to i64
  %139 = sub i64 %14, %138
  %140 = ptrtoint ptr %.0507778 to i64
  %141 = sub i64 %24, %140
  %.656 = tail call i64 @llvm.umin.i64(i64 %139, i64 %141)
  %142 = load i64, ptr %13, align 8, !tbaa !16
  %143 = tail call i64 @llvm.umin.i64(i64 %142, i64 %.656)
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0507778, ptr align 1 %.0489779, i64 %143, i1 false)
  %144 = load i32, ptr %23, align 4, !tbaa !27
  %.not645 = icmp eq i32 %144, 0
  br i1 %.not645, label %147, label %145

145:                                              ; preds = %137
  %146 = tail call i32 @XXH32_update(ptr noundef nonnull %33, ptr noundef %.0489779, i64 noundef %143) #7
  br label %147

147:                                              ; preds = %145, %137
  %148 = load i32, ptr %20, align 8, !tbaa !20
  %.not646 = icmp eq i32 %148, 0
  br i1 %.not646, label %151, label %149

149:                                              ; preds = %147
  %150 = tail call i32 @XXH32_update(ptr noundef nonnull %22, ptr noundef %.0489779, i64 noundef %143) #7
  br label %151

151:                                              ; preds = %149, %147
  %152 = load i64, ptr %18, align 8, !tbaa !28
  %.not647 = icmp eq i64 %152, 0
  br i1 %.not647, label %156, label %153

153:                                              ; preds = %151
  %154 = load i64, ptr %19, align 8, !tbaa !29
  %155 = sub i64 %154, %143
  store i64 %155, ptr %19, align 8, !tbaa !29
  br label %156

156:                                              ; preds = %153, %151
  %157 = load i32, ptr %28, align 4, !tbaa !22
  %158 = icmp eq i32 %157, 0
  br i1 %158, label %159, label %160

159:                                              ; preds = %156
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef %.0507778, i64 noundef %143, ptr noundef %1, i32 noundef 0)
  br label %160

160:                                              ; preds = %159, %156
  %161 = getelementptr inbounds i8, ptr %.0489779, i64 %143
  %162 = getelementptr inbounds i8, ptr %.0507778, i64 %143
  %163 = load i64, ptr %13, align 8, !tbaa !16
  %164 = icmp eq i64 %143, %163
  br i1 %164, label %165, label %169

165:                                              ; preds = %160
  %166 = load i32, ptr %23, align 4, !tbaa !27
  %.not649 = icmp eq i32 %166, 0
  br i1 %.not649, label %168, label %167

167:                                              ; preds = %165
  store i64 0, ptr %15, align 8, !tbaa !17
  br label %168

168:                                              ; preds = %165, %167
  %storemerge = phi i32 [ 6, %167 ], [ 3, %165 ]
  store i32 %storemerge, ptr %12, align 4, !tbaa !9
  br label %.thread683

169:                                              ; preds = %160
  %170 = sub i64 %163, %143
  store i64 %170, ptr %13, align 8, !tbaa !16
  %171 = load i32, ptr %23, align 4, !tbaa !27
  %.not648 = icmp eq i32 %171, 0
  %172 = select i1 %.not648, i64 0, i64 4
  %173 = add i64 %170, 4
  %174 = add i64 %173, %172
  br label %.thread683.thread

175:                                              ; preds = %35
  %176 = ptrtoint ptr %.0489779 to i64
  %177 = sub i64 %14, %176
  %178 = icmp sgt i64 %177, 3
  %.pre789 = load i64, ptr %15, align 8, !tbaa !17
  %179 = icmp eq i64 %.pre789, 0
  %or.cond888 = select i1 %178, i1 %179, i1 false
  br i1 %or.cond888, label %180, label %182

180:                                              ; preds = %175
  %181 = getelementptr inbounds i8, ptr %.0489779, i64 4
  br label %190

182:                                              ; preds = %175
  %183 = sub i64 4, %.pre789
  %184 = tail call i64 @llvm.umin.i64(i64 %183, i64 %177)
  %185 = getelementptr inbounds i8, ptr %16, i64 %.pre789
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %185, ptr align 1 %.0489779, i64 %184, i1 false)
  %186 = load i64, ptr %15, align 8, !tbaa !17
  %187 = add i64 %186, %184
  store i64 %187, ptr %15, align 8, !tbaa !17
  %188 = getelementptr inbounds i8, ptr %.0489779, i64 %184
  %189 = icmp ugt i64 %187, 3
  br i1 %189, label %190, label %.thread683.thread

190:                                              ; preds = %182, %180
  %.2578 = phi ptr [ %.0489779, %180 ], [ %16, %182 ]
  %.5494 = phi ptr [ %181, %180 ], [ %188, %182 ]
  %191 = tail call i32 @LZ4F_readLE32(ptr noundef %.2578)
  %192 = tail call i32 @XXH32_digest(ptr noundef nonnull %33) #7
  %.not644 = icmp eq i32 %191, %192
  br i1 %.not644, label %.thread694, label %.thread688

.thread688:                                       ; preds = %190
  %193 = tail call i64 @err0r(i32 noundef 7)
  br label %.loopexit

.thread694:                                       ; preds = %190
  store i32 3, ptr %12, align 4, !tbaa !9
  br label %.thread683

194:                                              ; preds = %35
  %195 = ptrtoint ptr %.0489779 to i64
  %196 = sub i64 %14, %195
  %197 = load i64, ptr %13, align 8, !tbaa !16
  %198 = icmp ult i64 %196, %197
  br i1 %198, label %199, label %200

199:                                              ; preds = %194
  store i64 0, ptr %15, align 8, !tbaa !17
  store i32 8, ptr %12, align 4, !tbaa !9
  br label %.thread683

200:                                              ; preds = %194
  %201 = getelementptr inbounds i8, ptr %.0489779, i64 %197
  br label %222

202:                                              ; preds = %35
  %203 = load i64, ptr %13, align 8, !tbaa !16
  %204 = load i64, ptr %15, align 8, !tbaa !17
  %205 = sub i64 %203, %204
  %206 = ptrtoint ptr %.0489779 to i64
  %207 = sub i64 %14, %206
  %208 = tail call i64 @llvm.umin.i64(i64 %205, i64 %207)
  %209 = load ptr, ptr %21, align 8, !tbaa !25
  %210 = getelementptr inbounds i8, ptr %209, i64 %204
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %210, ptr align 1 %.0489779, i64 %208, i1 false)
  %211 = load i64, ptr %15, align 8, !tbaa !17
  %212 = add i64 %211, %208
  store i64 %212, ptr %15, align 8, !tbaa !17
  %213 = getelementptr inbounds i8, ptr %.0489779, i64 %208
  %214 = load i64, ptr %13, align 8, !tbaa !16
  %215 = icmp ult i64 %212, %214
  br i1 %215, label %217, label %.thread704

.thread704:                                       ; preds = %202
  %216 = load ptr, ptr %21, align 8, !tbaa !25
  br label %222

217:                                              ; preds = %202
  %218 = load i32, ptr %23, align 4, !tbaa !27
  %.not636 = icmp eq i32 %218, 0
  %219 = select i1 %.not636, i64 0, i64 4
  %reass.sub = sub i64 %214, %212
  %220 = add i64 %reass.sub, 4
  %221 = add i64 %220, %219
  br label %.thread683.thread

222:                                              ; preds = %.thread704, %200
  %223 = phi i64 [ %197, %200 ], [ %214, %.thread704 ]
  %.6516 = phi ptr [ %.0489779, %200 ], [ %216, %.thread704 ]
  %.7496 = phi ptr [ %201, %200 ], [ %213, %.thread704 ]
  %224 = load i32, ptr %23, align 4, !tbaa !27
  %.not637 = icmp eq i32 %224, 0
  br i1 %.not637, label %.thread710, label %225

225:                                              ; preds = %222
  %226 = add i64 %223, -4
  store i64 %226, ptr %13, align 8, !tbaa !16
  %227 = getelementptr inbounds i8, ptr %.6516, i64 %226
  %228 = tail call i32 @LZ4F_readLE32(ptr noundef %227)
  %229 = load i64, ptr %13, align 8, !tbaa !16
  %230 = tail call i32 @XXH32(ptr noundef %.6516, i64 noundef %229, i32 noundef 0) #7
  %.not638 = icmp eq i32 %228, %230
  br i1 %.not638, label %.thread710, label %231

231:                                              ; preds = %225
  %232 = tail call i64 @err0r(i32 noundef 7)
  br label %.loopexit

.thread710:                                       ; preds = %225, %222
  %233 = ptrtoint ptr %.0507778 to i64
  %234 = sub i64 %24, %233
  %235 = load i64, ptr %25, align 8, !tbaa !21
  %.not639 = icmp ult i64 %234, %235
  br i1 %.not639, label %269, label %236

236:                                              ; preds = %.thread710
  %237 = load ptr, ptr %26, align 8, !tbaa !30
  %238 = load i64, ptr %27, align 8, !tbaa !31
  %239 = icmp ne ptr %237, null
  %240 = icmp ugt i64 %238, 1073741824
  %or.cond = select i1 %239, i1 %240, i1 false
  %241 = getelementptr i8, ptr %237, i64 %238
  %242 = getelementptr i8, ptr %241, i64 -65536
  %243 = trunc i64 %238 to i32
  %.0581 = select i1 %or.cond, ptr %242, ptr %237
  %244 = load i64, ptr %13, align 8, !tbaa !16
  %245 = trunc i64 %244 to i32
  %246 = trunc i64 %235 to i32
  %247 = select i1 %or.cond, i32 65536, i32 %243
  %248 = tail call i32 @LZ4_decompress_safe_usingDict(ptr noundef %.6516, ptr noundef %.0507778, i32 noundef %245, i32 noundef %246, ptr noundef %.0581, i32 noundef %247) #7
  %249 = icmp sgt i32 %248, -1
  br i1 %249, label %250, label %267

250:                                              ; preds = %236
  %251 = load i32, ptr %20, align 8, !tbaa !20
  %.not642 = icmp eq i32 %251, 0
  br i1 %.not642, label %255, label %252

252:                                              ; preds = %250
  %253 = zext nneg i32 %248 to i64
  %254 = tail call i32 @XXH32_update(ptr noundef nonnull %22, ptr noundef %.0507778, i64 noundef %253) #7
  br label %255

255:                                              ; preds = %252, %250
  %256 = load i64, ptr %18, align 8, !tbaa !28
  %.not643 = icmp eq i64 %256, 0
  br i1 %.not643, label %261, label %257

257:                                              ; preds = %255
  %258 = zext nneg i32 %248 to i64
  %259 = load i64, ptr %19, align 8, !tbaa !29
  %260 = sub i64 %259, %258
  store i64 %260, ptr %19, align 8, !tbaa !29
  br label %261

261:                                              ; preds = %257, %255
  %262 = load i32, ptr %28, align 4, !tbaa !22
  %263 = icmp eq i32 %262, 0
  %264 = zext nneg i32 %248 to i64
  br i1 %263, label %265, label %.thread712

265:                                              ; preds = %261
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef %.0507778, i64 noundef %264, ptr noundef %1, i32 noundef 0)
  br label %.thread712

.thread712:                                       ; preds = %261, %265
  %266 = getelementptr inbounds i8, ptr %.0507778, i64 %264
  store i32 3, ptr %12, align 4, !tbaa !9
  br label %.thread683

267:                                              ; preds = %236
  %268 = tail call i64 @err0r(i32 noundef 1)
  br label %.loopexit

269:                                              ; preds = %.thread710
  %270 = load i32, ptr %28, align 4, !tbaa !22
  %271 = icmp eq i32 %270, 0
  %.pre782 = load ptr, ptr %26, align 8, !tbaa !30
  br i1 %271, label %272, label %._crit_edge

._crit_edge:                                      ; preds = %269
  %.pre783 = load i64, ptr %27, align 8, !tbaa !31
  %.pre784 = load ptr, ptr %30, align 8, !tbaa !26
  br label %287

272:                                              ; preds = %269
  %273 = load ptr, ptr %29, align 8, !tbaa !24
  %274 = icmp eq ptr %.pre782, %273
  %275 = load i64, ptr %27, align 8, !tbaa !31
  br i1 %274, label %276, label %285

276:                                              ; preds = %272
  %277 = icmp ugt i64 %275, 131072
  br i1 %277, label %278, label %281

278:                                              ; preds = %276
  %279 = getelementptr inbounds i8, ptr %.pre782, i64 %275
  %280 = getelementptr inbounds i8, ptr %279, i64 -65536
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(65536) %273, ptr noundef nonnull align 1 dereferenceable(65536) %280, i64 65536, i1 false)
  store i64 65536, ptr %27, align 8, !tbaa !31
  %.pre = load ptr, ptr %29, align 8, !tbaa !24
  %.pre781.pre = load ptr, ptr %26, align 8, !tbaa !30
  %.pre785.pre = load i64, ptr %25, align 8, !tbaa !21
  br label %281

281:                                              ; preds = %278, %276
  %.pre785 = phi i64 [ %.pre785.pre, %278 ], [ %235, %276 ]
  %.pre781 = phi ptr [ %.pre781.pre, %278 ], [ %.pre782, %276 ]
  %282 = phi i64 [ 65536, %278 ], [ %275, %276 ]
  %283 = phi ptr [ %.pre, %278 ], [ %273, %276 ]
  %284 = getelementptr inbounds i8, ptr %283, i64 %282
  store ptr %284, ptr %30, align 8, !tbaa !26
  br label %287

285:                                              ; preds = %272
  %spec.select = tail call i64 @llvm.umin.i64(i64 %275, i64 65536)
  %286 = getelementptr inbounds i8, ptr %273, i64 %spec.select
  store ptr %286, ptr %30, align 8, !tbaa !26
  br label %287

287:                                              ; preds = %._crit_edge, %281, %285
  %288 = phi i64 [ %.pre785, %281 ], [ %235, %285 ], [ %235, %._crit_edge ]
  %289 = phi ptr [ %284, %281 ], [ %286, %285 ], [ %.pre784, %._crit_edge ]
  %290 = phi i64 [ %282, %281 ], [ %275, %285 ], [ %.pre783, %._crit_edge ]
  %291 = phi ptr [ %.pre781, %281 ], [ %.pre782, %285 ], [ %.pre782, %._crit_edge ]
  %292 = icmp ne ptr %291, null
  %293 = icmp ugt i64 %290, 1073741824
  %or.cond13 = select i1 %292, i1 %293, i1 false
  %294 = getelementptr i8, ptr %291, i64 %290
  %295 = getelementptr i8, ptr %294, i64 -65536
  %296 = trunc i64 %290 to i32
  %.0583 = select i1 %or.cond13, ptr %295, ptr %291
  %297 = load i64, ptr %13, align 8, !tbaa !16
  %298 = trunc i64 %297 to i32
  %299 = trunc i64 %288 to i32
  %300 = select i1 %or.cond13, i32 65536, i32 %296
  %301 = tail call i32 @LZ4_decompress_safe_usingDict(ptr noundef %.6516, ptr noundef %289, i32 noundef %298, i32 noundef %299, ptr noundef %.0583, i32 noundef %300) #7
  %302 = icmp sgt i32 %301, -1
  br i1 %302, label %303, label %314

303:                                              ; preds = %287
  %304 = load i32, ptr %20, align 8, !tbaa !20
  %.not640 = icmp eq i32 %304, 0
  br i1 %.not640, label %309, label %305

305:                                              ; preds = %303
  %306 = load ptr, ptr %30, align 8, !tbaa !26
  %307 = zext nneg i32 %301 to i64
  %308 = tail call i32 @XXH32_update(ptr noundef nonnull %22, ptr noundef %306, i64 noundef %307) #7
  br label %309

309:                                              ; preds = %305, %303
  %310 = load i64, ptr %18, align 8, !tbaa !28
  %.not641 = icmp eq i64 %310, 0
  %.pre819 = zext nneg i32 %301 to i64
  br i1 %.not641, label %.thread715, label %311

311:                                              ; preds = %309
  %312 = load i64, ptr %19, align 8, !tbaa !29
  %313 = sub i64 %312, %.pre819
  store i64 %313, ptr %19, align 8, !tbaa !29
  br label %.thread715

.thread715:                                       ; preds = %309, %311
  store i64 %.pre819, ptr %31, align 8, !tbaa !18
  store i64 0, ptr %32, align 8, !tbaa !19
  store i32 9, ptr %12, align 4, !tbaa !9
  br label %316

314:                                              ; preds = %287
  %315 = tail call i64 @err0r(i32 noundef 16)
  br label %.loopexit

316:                                              ; preds = %._crit_edge786, %.thread715
  %.pre-phi811 = phi i64 [ %.pre810, %._crit_edge786 ], [ %234, %.thread715 ]
  %317 = phi i64 [ %.pre788, %._crit_edge786 ], [ 0, %.thread715 ]
  %318 = phi i64 [ %.pre787, %._crit_edge786 ], [ %.pre819, %.thread715 ]
  %.8497 = phi ptr [ %.0489779, %._crit_edge786 ], [ %.7496, %.thread715 ]
  %319 = sub i64 %318, %317
  %.661 = tail call i64 @llvm.umin.i64(i64 %319, i64 %.pre-phi811)
  %320 = load ptr, ptr %30, align 8, !tbaa !26
  %321 = getelementptr inbounds i8, ptr %320, i64 %317
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %.0507778, ptr align 1 %321, i64 %.661, i1 false)
  %322 = load i32, ptr %28, align 4, !tbaa !22
  %323 = icmp eq i32 %322, 0
  br i1 %323, label %324, label %325

324:                                              ; preds = %316
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef %.0507778, i64 noundef %.661, ptr noundef %1, i32 noundef 1)
  br label %325

325:                                              ; preds = %324, %316
  %326 = load i64, ptr %32, align 8, !tbaa !19
  %327 = add i64 %326, %.661
  store i64 %327, ptr %32, align 8, !tbaa !19
  %328 = getelementptr inbounds i8, ptr %.0507778, i64 %.661
  %329 = load i64, ptr %31, align 8, !tbaa !18
  %330 = icmp eq i64 %327, %329
  br i1 %330, label %331, label %.thread683.thread

331:                                              ; preds = %325
  store i32 3, ptr %12, align 4, !tbaa !9
  br label %.thread683

332:                                              ; preds = %35
  %333 = load i64, ptr %19, align 8, !tbaa !29
  %.not633 = icmp eq i64 %333, 0
  br i1 %.not633, label %336, label %334

334:                                              ; preds = %332
  %335 = tail call i64 @err0r(i32 noundef 14)
  br label %.loopexit

336:                                              ; preds = %332
  %337 = load i32, ptr %20, align 8, !tbaa !20
  %.not634 = icmp eq i32 %337, 0
  br i1 %.not634, label %338, label %339

338:                                              ; preds = %336
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread683.thread

339:                                              ; preds = %336
  %340 = ptrtoint ptr %.0489779 to i64
  %341 = sub i64 %14, %340
  %342 = icmp slt i64 %341, 4
  br i1 %342, label %.thread718, label %343

.thread718:                                       ; preds = %339
  store i64 0, ptr %15, align 8, !tbaa !17
  store i32 11, ptr %12, align 4, !tbaa !9
  br label %345

343:                                              ; preds = %339
  %344 = getelementptr inbounds i8, ptr %.0489779, i64 4
  br label %358

345:                                              ; preds = %._crit_edge813, %.thread718
  %.pre-phi826 = phi i64 [ %.pre825, %._crit_edge813 ], [ %341, %.thread718 ]
  %346 = load i64, ptr %15, align 8, !tbaa !17
  %347 = sub i64 4, %346
  %348 = tail call i64 @llvm.umin.i64(i64 %347, i64 %.pre-phi826)
  %349 = load ptr, ptr %21, align 8, !tbaa !25
  %350 = getelementptr inbounds i8, ptr %349, i64 %346
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %350, ptr align 1 %.0489779, i64 %348, i1 false)
  %351 = getelementptr inbounds i8, ptr %.0489779, i64 %348
  %352 = load i64, ptr %15, align 8, !tbaa !17
  %353 = add i64 %352, %348
  store i64 %353, ptr %15, align 8, !tbaa !17
  %354 = icmp ult i64 %353, 4
  br i1 %354, label %356, label %.thread721

.thread721:                                       ; preds = %345
  %355 = load ptr, ptr %21, align 8, !tbaa !25
  br label %358

356:                                              ; preds = %345
  %357 = sub nuw nsw i64 4, %353
  br label %.thread683.thread

358:                                              ; preds = %343, %.thread721
  %.11521 = phi ptr [ %.0489779, %343 ], [ %355, %.thread721 ]
  %.11500 = phi ptr [ %344, %343 ], [ %351, %.thread721 ]
  %359 = tail call i32 @LZ4F_readLE32(ptr noundef %.11521)
  %360 = tail call i32 @XXH32_digest(ptr noundef nonnull %22) #7
  %.not635 = icmp eq i32 %359, %360
  br i1 %.not635, label %.thread727, label %361

.thread727:                                       ; preds = %358
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread683.thread

361:                                              ; preds = %358
  %362 = tail call i64 @err0r(i32 noundef 18)
  br label %.loopexit

363:                                              ; preds = %35
  %364 = ptrtoint ptr %.0489779 to i64
  %365 = sub i64 %14, %364
  %366 = icmp sgt i64 %365, 3
  br i1 %366, label %367, label %.thread732

.thread732:                                       ; preds = %363
  store i64 4, ptr %15, align 8, !tbaa !17
  store i64 8, ptr %13, align 8, !tbaa !16
  store i32 13, ptr %12, align 4, !tbaa !9
  br label %369

367:                                              ; preds = %363
  %368 = getelementptr inbounds i8, ptr %.0489779, i64 4
  br label %.thread735

369:                                              ; preds = %._crit_edge812, %.thread732
  %.pre-phi830 = phi i64 [ %.pre829, %._crit_edge812 ], [ %365, %.thread732 ]
  %370 = load i64, ptr %13, align 8, !tbaa !16
  %371 = load i64, ptr %15, align 8, !tbaa !17
  %372 = sub i64 %370, %371
  %.664 = tail call i64 @llvm.umin.i64(i64 %372, i64 %.pre-phi830)
  %373 = getelementptr inbounds i8, ptr %16, i64 %371
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %373, ptr align 1 %.0489779, i64 %.664, i1 false)
  %374 = getelementptr inbounds i8, ptr %.0489779, i64 %.664
  %375 = load i64, ptr %15, align 8, !tbaa !17
  %376 = add i64 %375, %.664
  store i64 %376, ptr %15, align 8, !tbaa !17
  %377 = load i64, ptr %13, align 8, !tbaa !16
  %378 = icmp ult i64 %376, %377
  br i1 %378, label %379, label %.thread735

379:                                              ; preds = %369
  %380 = sub i64 %377, %376
  br label %.thread683.thread

.thread735:                                       ; preds = %367, %369
  %.15525 = phi ptr [ %.0489779, %367 ], [ %17, %369 ]
  %.14503 = phi ptr [ %368, %367 ], [ %374, %369 ]
  %381 = tail call i32 @LZ4F_readLE32(ptr noundef %.15525)
  %382 = zext i32 %381 to i64
  store i64 %382, ptr %18, align 8, !tbaa !28
  store i64 %382, ptr %13, align 8, !tbaa !16
  store i32 14, ptr %12, align 4, !tbaa !9
  br label %.thread683

383:                                              ; preds = %35
  %384 = load i64, ptr %13, align 8, !tbaa !16
  %385 = ptrtoint ptr %.0489779 to i64
  %386 = sub i64 %14, %385
  %.667 = tail call i64 @llvm.umin.i64(i64 %384, i64 %386)
  %387 = getelementptr inbounds i8, ptr %.0489779, i64 %.667
  %388 = sub i64 %384, %.667
  store i64 %388, ptr %13, align 8, !tbaa !16
  %.not632 = icmp eq i64 %388, 0
  br i1 %.not632, label %389, label %.thread683.thread

389:                                              ; preds = %383
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread683.thread

.thread683:                                       ; preds = %130, %129, %119, %.thread712, %331, %168, %60, %41, %.thread735, %199, %.thread694, %35
  %.15560 = phi i64 [ %.0545776, %35 ], [ %.0545776, %.thread735 ], [ %.0545776, %199 ], [ %.0545776, %.thread694 ], [ %.0545776, %60 ], [ %.0545776, %41 ], [ %.0545776, %168 ], [ %.0545776, %331 ], [ %.0545776, %.thread712 ], [ %.0545776, %119 ], [ %.0545776, %129 ], [ %.3548, %130 ]
  %.18 = phi i32 [ 1, %35 ], [ 1, %.thread735 ], [ 1, %199 ], [ 1, %.thread694 ], [ 1, %60 ], [ 1, %41 ], [ 1, %168 ], [ 1, %331 ], [ 1, %.thread712 ], [ 1, %119 ], [ 1, %129 ], [ %.3530, %130 ]
  %.2509 = phi ptr [ %.0507778, %35 ], [ %.0507778, %.thread735 ], [ %.0507778, %199 ], [ %.0507778, %.thread694 ], [ %.0507778, %60 ], [ %.0507778, %41 ], [ %162, %168 ], [ %328, %331 ], [ %266, %.thread712 ], [ %.0507778, %119 ], [ %.0507778, %129 ], [ %.0507778, %130 ]
  %.15504 = phi ptr [ %.0489779, %35 ], [ %.14503, %.thread735 ], [ %.0489779, %199 ], [ %.5494, %.thread694 ], [ %55, %60 ], [ %44, %41 ], [ %161, %168 ], [ %.8497, %331 ], [ %.7496, %.thread712 ], [ %.4493, %119 ], [ %.4493, %129 ], [ %.4493, %130 ]
  %.not = icmp eq i32 %.18, 0
  br i1 %.not, label %.thread683.thread, label %35, !llvm.loop !32

.thread683.thread:                                ; preds = %182, %325, %.thread683, %.thread727, %389, %383, %169, %58, %109, %217, %338, %356, %379
  %.15504838 = phi ptr [ %.11500, %.thread727 ], [ %387, %389 ], [ %387, %383 ], [ %161, %169 ], [ %55, %58 ], [ %104, %109 ], [ %213, %217 ], [ %.0489779, %338 ], [ %351, %356 ], [ %374, %379 ], [ %.8497, %325 ], [ %188, %182 ], [ %.15504, %.thread683 ]
  %.2509837 = phi ptr [ %.0507778, %.thread727 ], [ %.0507778, %389 ], [ %.0507778, %383 ], [ %162, %169 ], [ %.0507778, %58 ], [ %.0507778, %109 ], [ %.0507778, %217 ], [ %.0507778, %338 ], [ %.0507778, %356 ], [ %.0507778, %379 ], [ %328, %325 ], [ %.0507778, %182 ], [ %.2509, %.thread683 ]
  %.15560836 = phi i64 [ 0, %.thread727 ], [ 0, %389 ], [ %388, %383 ], [ %174, %169 ], [ %59, %58 ], [ %110, %109 ], [ %221, %217 ], [ 0, %338 ], [ %357, %356 ], [ %380, %379 ], [ 4, %325 ], [ %.0545776, %182 ], [ %.15560, %.thread683 ]
  %390 = load i32, ptr %28, align 4, !tbaa !22
  %391 = icmp eq i32 %390, 0
  br i1 %391, label %392, label %429

392:                                              ; preds = %.thread683.thread
  %393 = load ptr, ptr %26, align 8, !tbaa !30
  %394 = load ptr, ptr %29, align 8, !tbaa !24
  %.not628 = icmp eq ptr %393, %394
  br i1 %.not628, label %429, label %395

395:                                              ; preds = %392
  br i1 %11, label %.cont.thread, label %.cont

.cont:                                            ; preds = %395
  %.else.val = load i32, ptr %5, align 4, !tbaa !34
  %.not629 = icmp eq i32 %.else.val, 0
  br i1 %.not629, label %.cont.thread, label %429

.cont.thread:                                     ; preds = %395, %.cont
  %396 = load i32, ptr %12, align 4, !tbaa !9
  %397 = add i32 %396, -2
  %398 = icmp ult i32 %397, 8
  br i1 %398, label %399, label %429

399:                                              ; preds = %.cont.thread
  %400 = icmp eq i32 %396, 9
  br i1 %400, label %401, label %420

401:                                              ; preds = %399
  %402 = load ptr, ptr %30, align 8, !tbaa !26
  %403 = ptrtoint ptr %402 to i64
  %404 = ptrtoint ptr %394 to i64
  %405 = sub i64 %403, %404
  %406 = load i64, ptr %31, align 8, !tbaa !18
  %spec.select668 = tail call i64 @llvm.usub.sat.i64(i64 65536, i64 %406)
  %.1506 = tail call i64 @llvm.umin.i64(i64 %spec.select668, i64 %405)
  %.not631 = icmp eq i64 %.1506, 0
  %.pre799 = load i64, ptr %32, align 8, !tbaa !19
  br i1 %.not631, label %416, label %407

407:                                              ; preds = %401
  %408 = load i64, ptr %27, align 8, !tbaa !31
  %409 = getelementptr inbounds i8, ptr %393, i64 %408
  %410 = sub i64 0, %.pre799
  %411 = getelementptr inbounds i8, ptr %409, i64 %410
  %412 = getelementptr inbounds i8, ptr %394, i64 %405
  %413 = sub nsw i64 0, %.1506
  %414 = getelementptr inbounds i8, ptr %412, i64 %413
  %415 = getelementptr inbounds i8, ptr %411, i64 %413
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %414, ptr nonnull align 1 %415, i64 %.1506, i1 false)
  %.pre797 = load ptr, ptr %29, align 8, !tbaa !24
  %.pre798 = load i64, ptr %32, align 8, !tbaa !19
  br label %416

416:                                              ; preds = %407, %401
  %417 = phi i64 [ %.pre798, %407 ], [ %.pre799, %401 ]
  %418 = phi ptr [ %.pre797, %407 ], [ %394, %401 ]
  store ptr %418, ptr %26, align 8, !tbaa !30
  %419 = add i64 %417, %405
  store i64 %419, ptr %27, align 8, !tbaa !31
  br label %429

420:                                              ; preds = %399
  %421 = load i64, ptr %27, align 8, !tbaa !31
  %spec.select669 = tail call i64 @llvm.umin.i64(i64 %421, i64 65536)
  %.not630 = icmp eq i64 %421, 0
  br i1 %.not630, label %426, label %422

422:                                              ; preds = %420
  %423 = getelementptr inbounds i8, ptr %393, i64 %421
  %424 = sub nsw i64 0, %spec.select669
  %425 = getelementptr inbounds i8, ptr %423, i64 %424
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %394, ptr nonnull align 1 %425, i64 %spec.select669, i1 false)
  %.pre796 = load ptr, ptr %29, align 8, !tbaa !24
  br label %426

426:                                              ; preds = %422, %420
  %427 = phi ptr [ %.pre796, %422 ], [ %394, %420 ]
  store ptr %427, ptr %26, align 8, !tbaa !30
  store i64 %spec.select669, ptr %27, align 8, !tbaa !31
  %428 = getelementptr inbounds i8, ptr %427, i64 %spec.select669
  store ptr %428, ptr %30, align 8, !tbaa !26
  br label %429

429:                                              ; preds = %416, %426, %.cont.thread, %.cont, %392, %.thread683.thread
  %430 = ptrtoint ptr %.15504838 to i64
  %431 = ptrtoint ptr %3 to i64
  %432 = sub i64 %430, %431
  store i64 %432, ptr %4, align 8, !tbaa !5
  %433 = ptrtoint ptr %.2509837 to i64
  %434 = ptrtoint ptr %1 to i64
  %435 = sub i64 %433, %434
  store i64 %435, ptr %2, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %45, %41, %60, %361, %314, %267, %231, %.thread688, %135, %81, %87, %429, %334
  %.17 = phi i64 [ %362, %361 ], [ %335, %334 ], [ %268, %267 ], [ %315, %314 ], [ %232, %231 ], [ %136, %135 ], [ %.15560836, %429 ], [ %82, %81 ], [ %88, %87 ], [ %193, %.thread688 ], [ 7, %45 ], [ %42, %41 ], [ %61, %60 ]
  ret i64 %.17
}

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

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

declare i32 @XXH32(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #5

declare i32 @LZ4_decompress_safe_usingDict(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

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

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

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 nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "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 #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { nounwind allocsize(0) }

!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 = !{!10, !12, i64 36}
!10 = !{!"LZ4F_dctx_s", !11, i64 0, !12, i64 32, !12, i64 36, !6, i64 40, !6, i64 48, !6, i64 56, !14, i64 64, !6, i64 72, !6, i64 80, !14, i64 88, !14, i64 96, !6, i64 104, !14, i64 112, !6, i64 120, !6, i64 128, !15, i64 136, !15, i64 184, !7, i64 232}
!11 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !13, i64 16, !12, i64 24, !12, i64 28}
!12 = !{!"int", !7, i64 0}
!13 = !{!"long long", !7, i64 0}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"XXH32_state_s", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !7, i64 24, !12, i64 40, !12, i64 44}
!16 = !{!10, !6, i64 80}
!17 = !{!10, !6, i64 72}
!18 = !{!10, !6, i64 120}
!19 = !{!10, !6, i64 128}
!20 = !{!10, !12, i64 8}
!21 = !{!10, !6, i64 48}
!22 = !{!10, !12, i64 4}
!23 = !{!10, !6, i64 56}
!24 = !{!10, !14, i64 88}
!25 = !{!10, !14, i64 64}
!26 = !{!10, !14, i64 112}
!27 = !{!10, !12, i64 28}
!28 = !{!10, !13, i64 16}
!29 = !{!10, !6, i64 40}
!30 = !{!10, !14, i64 96}
!31 = !{!10, !6, i64 104}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!35, !12, i64 0}
!35 = !{!"", !12, i64 0, !7, i64 4}


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