; LLVM IR from DanEngelbrecht/longtail :: lib/lz4/ext (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_CustomMem = type { ptr, ptr, ptr, ptr }
%struct.LZ4F_decompressOptions_t = type { i32, i32, i32, i32 }
%struct.LZ4F_dctx_s = type { %struct.LZ4F_CustomMem, %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, i32, [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 @LZ4F_returnErrorCode(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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.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: nounwind uwtable
declare hidden void @LZ4F_free(ptr noundef, ptr noundef byval(%struct.LZ4F_CustomMem) align 8) #0

; Function Attrs: nounwind uwtable
declare hidden ptr @LZ4F_malloc(i64 noundef, ptr noundef byval(%struct.LZ4F_CustomMem) align 8) #0

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

declare i32 @XXH32_digest(ptr noundef) #4

; 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 i32, align 4
  %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) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %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) #5
  %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) #5
  %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) #5
  %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) #5
  %74 = load ptr, ptr %18, align 8, !tbaa !5
  %75 = icmp ne ptr %74, null
  br i1 %75, label %76, label %81

76:                                               ; preds = %6
  %77 = load ptr, ptr %18, align 8, !tbaa !5
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  %79 = load i64, ptr %78, align 8, !tbaa !9
  %80 = getelementptr inbounds i8, ptr %77, i64 %79
  br label %82

81:                                               ; preds = %6
  br label %82

82:                                               ; preds = %81, %76
  %83 = phi ptr [ %80, %76 ], [ null, %81 ]
  store ptr %83, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %84 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %84, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  store ptr null, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  store i32 1, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 1, ptr %23, align 8, !tbaa !9
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = icmp eq ptr %85, null
  br i1 %86, label %87, label %88

87:                                               ; preds = %82
  br label %88

88:                                               ; preds = %87, %82
  call void @llvm.memset.p0.i64(ptr align 4 %14, i8 0, i64 16, i1 false)
  %89 = load ptr, ptr %13, align 8, !tbaa !5
  %90 = icmp eq ptr %89, null
  br i1 %90, label %91, label %92

91:                                               ; preds = %88
  store ptr %14, ptr %13, align 8, !tbaa !5
  br label %92

92:                                               ; preds = %91, %88
  %93 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %93, align 8, !tbaa !9
  %94 = load ptr, ptr %10, align 8, !tbaa !5
  store i64 0, ptr %94, align 8, !tbaa !9
  %95 = load ptr, ptr %13, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.LZ4F_decompressOptions_t, ptr %95, i32 0, i32 1
  %97 = load i32, ptr %96, align 4, !tbaa !13
  %98 = icmp ne i32 %97, 0
  %99 = zext i1 %98 to i32
  %100 = load ptr, ptr %8, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %100, i32 0, i32 18
  %102 = load i32, ptr %101, align 8, !tbaa !15
  %103 = or i32 %102, %99
  store i32 %103, ptr %101, align 8, !tbaa !15
  br label %104

104:                                              ; preds = %1453, %92
  %105 = load i32, ptr %22, align 4, !tbaa !11
  %106 = icmp ne i32 %105, 0
  br i1 %106, label %107, label %1454

107:                                              ; preds = %104
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %108, i32 0, i32 3
  %110 = load i32, ptr %109, align 4, !tbaa !21
  switch i32 %110, label %1453 [
    i32 0, label %111
    i32 1, label %156
    i32 2, label %243
    i32 3, label %341
    i32 4, label %363
    i32 5, label %483
    i32 6, label %630
    i32 7, label %723
    i32 8, label %746
    i32 9, label %1117
    i32 10, label %1190
    i32 11, label %1230
    i32 12, label %1307
    i32 13, label %1331
    i32 14, label %1414
  ]

111:                                              ; preds = %107
  %112 = load ptr, ptr %16, align 8, !tbaa !5
  %113 = load ptr, ptr %17, align 8, !tbaa !5
  %114 = ptrtoint ptr %112 to i64
  %115 = ptrtoint ptr %113 to i64
  %116 = sub i64 %114, %115
  %117 = icmp uge i64 %116, 19
  br i1 %117, label %118, label %141

118:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %119 = load ptr, ptr %8, align 8, !tbaa !5
  %120 = load ptr, ptr %17, align 8, !tbaa !5
  %121 = load ptr, ptr %16, align 8, !tbaa !5
  %122 = load ptr, ptr %17, align 8, !tbaa !5
  %123 = ptrtoint ptr %121 to i64
  %124 = ptrtoint ptr %122 to i64
  %125 = sub i64 %123, %124
  %126 = call i64 @LZ4F_decodeHeader(ptr noundef %119, ptr noundef %120, i64 noundef %125)
  store i64 %126, ptr %24, align 8, !tbaa !9
  br label %127

127:                                              ; preds = %118
  %128 = load i64, ptr %24, align 8, !tbaa !9
  %129 = call i32 @LZ4F_isError(i64 noundef %128)
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %131, label %133

131:                                              ; preds = %127
  %132 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %132, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %139

133:                                              ; preds = %127
  br label %134

134:                                              ; preds = %133
  br label %135

135:                                              ; preds = %134
  %136 = load i64, ptr %24, align 8, !tbaa !9
  %137 = load ptr, ptr %17, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %137, i64 %136
  store ptr %138, ptr %17, align 8, !tbaa !5
  store i32 4, ptr %25, align 4
  br label %139

139:                                              ; preds = %135, %131
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  %140 = load i32, ptr %25, align 4
  switch i32 %140, label %1609 [
    i32 4, label %1453
  ]

141:                                              ; preds = %111
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %142, i32 0, i32 8
  store i64 0, ptr %143, align 8, !tbaa !22
  %144 = load ptr, ptr %16, align 8, !tbaa !5
  %145 = load ptr, ptr %17, align 8, !tbaa !5
  %146 = ptrtoint ptr %144 to i64
  %147 = ptrtoint ptr %145 to i64
  %148 = sub i64 %146, %147
  %149 = icmp eq i64 %148, 0
  br i1 %149, label %150, label %151

150:                                              ; preds = %141
  store i64 7, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1609

151:                                              ; preds = %141
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %152, i32 0, i32 9
  store i64 7, ptr %153, align 8, !tbaa !23
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %154, i32 0, i32 3
  store i32 1, ptr %155, align 4, !tbaa !21
  br label %156

156:                                              ; preds = %151, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %157 = load ptr, ptr %8, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %157, i32 0, i32 9
  %159 = load i64, ptr %158, align 8, !tbaa !23
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %160, i32 0, i32 8
  %162 = load i64, ptr %161, align 8, !tbaa !22
  %163 = sub i64 %159, %162
  %164 = load ptr, ptr %16, align 8, !tbaa !5
  %165 = load ptr, ptr %17, align 8, !tbaa !5
  %166 = ptrtoint ptr %164 to i64
  %167 = ptrtoint ptr %165 to i64
  %168 = sub i64 %166, %167
  %169 = icmp ult i64 %163, %168
  br i1 %169, label %170, label %178

170:                                              ; preds = %156
  %171 = load ptr, ptr %8, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %171, i32 0, i32 9
  %173 = load i64, ptr %172, align 8, !tbaa !23
  %174 = load ptr, ptr %8, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %174, i32 0, i32 8
  %176 = load i64, ptr %175, align 8, !tbaa !22
  %177 = sub i64 %173, %176
  br label %184

178:                                              ; preds = %156
  %179 = load ptr, ptr %16, align 8, !tbaa !5
  %180 = load ptr, ptr %17, align 8, !tbaa !5
  %181 = ptrtoint ptr %179 to i64
  %182 = ptrtoint ptr %180 to i64
  %183 = sub i64 %181, %182
  br label %184

184:                                              ; preds = %178, %170
  %185 = phi i64 [ %177, %170 ], [ %183, %178 ]
  store i64 %185, ptr %26, align 8, !tbaa !9
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %186, i32 0, i32 19
  %188 = getelementptr inbounds [19 x i8], ptr %187, i64 0, i64 0
  %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 !22
  %192 = getelementptr inbounds i8, ptr %188, i64 %191
  %193 = load ptr, ptr %17, align 8, !tbaa !5
  %194 = load i64, ptr %26, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %192, ptr align 1 %193, i64 %194, i1 false)
  %195 = load i64, ptr %26, align 8, !tbaa !9
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %196, i32 0, i32 8
  %198 = load i64, ptr %197, align 8, !tbaa !22
  %199 = add i64 %198, %195
  store i64 %199, ptr %197, align 8, !tbaa !22
  %200 = load i64, ptr %26, align 8, !tbaa !9
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %201, i64 %200
  store ptr %202, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  %203 = load ptr, ptr %8, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %203, i32 0, i32 8
  %205 = load i64, ptr %204, align 8, !tbaa !22
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %206, i32 0, i32 9
  %208 = load i64, ptr %207, align 8, !tbaa !23
  %209 = icmp ult i64 %205, %208
  br i1 %209, label %210, label %219

210:                                              ; preds = %184
  %211 = load ptr, ptr %8, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %211, i32 0, i32 9
  %213 = load i64, ptr %212, align 8, !tbaa !23
  %214 = load ptr, ptr %8, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %214, i32 0, i32 8
  %216 = load i64, ptr %215, align 8, !tbaa !22
  %217 = sub i64 %213, %216
  %218 = add i64 %217, 4
  store i64 %218, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1453

219:                                              ; preds = %184
  br label %220

220:                                              ; preds = %219
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = load ptr, ptr %8, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %222, i32 0, i32 19
  %224 = getelementptr inbounds [19 x i8], ptr %223, i64 0, i64 0
  %225 = load ptr, ptr %8, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %225, i32 0, i32 9
  %227 = load i64, ptr %226, align 8, !tbaa !23
  %228 = call i64 @LZ4F_decodeHeader(ptr noundef %221, ptr noundef %224, i64 noundef %227)
  %229 = call i32 @LZ4F_isError(i64 noundef %228)
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %231, label %240

231:                                              ; preds = %220
  %232 = load ptr, ptr %8, align 8, !tbaa !5
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %233, i32 0, i32 19
  %235 = getelementptr inbounds [19 x i8], ptr %234, i64 0, i64 0
  %236 = load ptr, ptr %8, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %236, i32 0, i32 9
  %238 = load i64, ptr %237, align 8, !tbaa !23
  %239 = call i64 @LZ4F_decodeHeader(ptr noundef %232, ptr noundef %235, i64 noundef %238)
  store i64 %239, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1609

240:                                              ; preds = %220
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  br label %1453

243:                                              ; preds = %107
  %244 = load ptr, ptr %8, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %244, i32 0, i32 1
  %246 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %245, i32 0, i32 2
  %247 = load i32, ptr %246, align 8, !tbaa !24
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %253

249:                                              ; preds = %243
  %250 = load ptr, ptr %8, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %250, i32 0, i32 16
  %252 = call i32 @XXH32_reset(ptr noundef %251, i32 noundef 0)
  br label %253

253:                                              ; preds = %249, %243
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %254, i32 0, i32 5
  %256 = load i64, ptr %255, align 8, !tbaa !25
  %257 = load ptr, ptr %8, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %257, i32 0, i32 1
  %259 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %258, i32 0, i32 1
  %260 = load i32, ptr %259, align 4, !tbaa !26
  %261 = icmp eq i32 %260, 0
  %262 = zext i1 %261 to i64
  %263 = select i1 %261, i32 131072, i32 0
  %264 = sext i32 %263 to i64
  %265 = add i64 %256, %264
  store i64 %265, ptr %27, align 8, !tbaa !9
  %266 = load i64, ptr %27, align 8, !tbaa !9
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %267, i32 0, i32 6
  %269 = load i64, ptr %268, align 8, !tbaa !27
  %270 = icmp ugt i64 %266, %269
  br i1 %270, label %271, label %322

271:                                              ; preds = %253
  %272 = load ptr, ptr %8, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %272, i32 0, i32 6
  store i64 0, ptr %273, align 8, !tbaa !27
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %274, i32 0, i32 7
  %276 = load ptr, ptr %275, align 8, !tbaa !28
  %277 = load ptr, ptr %8, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %277, i32 0, i32 0
  call void @LZ4F_free(ptr noundef %276, ptr noundef byval(%struct.LZ4F_CustomMem) align 8 %278)
  %279 = load ptr, ptr %8, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %279, i32 0, i32 5
  %281 = load i64, ptr %280, align 8, !tbaa !25
  %282 = add i64 %281, 4
  %283 = load ptr, ptr %8, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %283, i32 0, i32 0
  %285 = call ptr @LZ4F_malloc(i64 noundef %282, ptr noundef byval(%struct.LZ4F_CustomMem) align 8 %284)
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %286, i32 0, i32 7
  store ptr %285, ptr %287, align 8, !tbaa !28
  br label %288

288:                                              ; preds = %271
  %289 = load ptr, ptr %8, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %289, i32 0, i32 7
  %291 = load ptr, ptr %290, align 8, !tbaa !28
  %292 = icmp eq ptr %291, null
  br i1 %292, label %293, label %295

293:                                              ; preds = %288
  %294 = call i64 @LZ4F_returnErrorCode(i32 noundef 9)
  store i64 %294, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %323

295:                                              ; preds = %288
  br label %296

296:                                              ; preds = %295
  br label %297

297:                                              ; preds = %296
  %298 = load ptr, ptr %8, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %298, i32 0, i32 10
  %300 = load ptr, ptr %299, align 8, !tbaa !29
  %301 = load ptr, ptr %8, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %301, i32 0, i32 0
  call void @LZ4F_free(ptr noundef %300, ptr noundef byval(%struct.LZ4F_CustomMem) align 8 %302)
  %303 = load i64, ptr %27, align 8, !tbaa !9
  %304 = load ptr, ptr %8, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %304, i32 0, i32 0
  %306 = call ptr @LZ4F_malloc(i64 noundef %303, ptr noundef byval(%struct.LZ4F_CustomMem) align 8 %305)
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %307, i32 0, i32 10
  store ptr %306, ptr %308, align 8, !tbaa !29
  br label %309

309:                                              ; preds = %297
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %310, i32 0, i32 10
  %312 = load ptr, ptr %311, align 8, !tbaa !29
  %313 = icmp eq ptr %312, null
  br i1 %313, label %314, label %316

314:                                              ; preds = %309
  %315 = call i64 @LZ4F_returnErrorCode(i32 noundef 9)
  store i64 %315, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %323

316:                                              ; preds = %309
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  %319 = load i64, ptr %27, align 8, !tbaa !9
  %320 = load ptr, ptr %8, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %320, i32 0, i32 6
  store i64 %319, ptr %321, align 8, !tbaa !27
  br label %322

322:                                              ; preds = %318, %253
  store i32 0, ptr %25, align 4
  br label %323

323:                                              ; preds = %322, %314, %293
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  %324 = load i32, ptr %25, align 4
  switch i32 %324, label %1609 [
    i32 0, label %325
  ]

325:                                              ; preds = %323
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %326, i32 0, i32 8
  store i64 0, ptr %327, align 8, !tbaa !22
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %328, i32 0, i32 9
  store i64 0, ptr %329, align 8, !tbaa !23
  %330 = load ptr, ptr %8, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %330, i32 0, i32 10
  %332 = load ptr, ptr %331, align 8, !tbaa !29
  %333 = load ptr, ptr %8, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %333, i32 0, i32 13
  store ptr %332, ptr %334, align 8, !tbaa !30
  %335 = load ptr, ptr %8, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %335, i32 0, i32 15
  store i64 0, ptr %336, align 8, !tbaa !31
  %337 = load ptr, ptr %8, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %337, i32 0, i32 14
  store i64 0, ptr %338, align 8, !tbaa !32
  %339 = load ptr, ptr %8, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %339, i32 0, i32 3
  store i32 3, ptr %340, align 4, !tbaa !21
  br label %341

341:                                              ; preds = %325, %107
  %342 = load ptr, ptr %16, align 8, !tbaa !5
  %343 = load ptr, ptr %17, align 8, !tbaa !5
  %344 = ptrtoint ptr %342 to i64
  %345 = ptrtoint ptr %343 to i64
  %346 = sub i64 %344, %345
  %347 = icmp uge i64 %346, 4
  br i1 %347, label %348, label %352

348:                                              ; preds = %341
  %349 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %349, ptr %21, align 8, !tbaa !5
  %350 = load ptr, ptr %17, align 8, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %350, i64 4
  store ptr %351, ptr %17, align 8, !tbaa !5
  br label %357

352:                                              ; preds = %341
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %353, i32 0, i32 8
  store i64 0, ptr %354, align 8, !tbaa !22
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %355, i32 0, i32 3
  store i32 4, ptr %356, align 4, !tbaa !21
  br label %357

357:                                              ; preds = %352, %348
  %358 = load ptr, ptr %8, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %358, i32 0, i32 3
  %360 = load i32, ptr %359, align 4, !tbaa !21
  %361 = icmp eq i32 %360, 4
  br i1 %361, label %362, label %415

362:                                              ; preds = %357
  br label %363

363:                                              ; preds = %362, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %364 = load ptr, ptr %16, align 8, !tbaa !5
  %365 = load ptr, ptr %17, align 8, !tbaa !5
  %366 = ptrtoint ptr %364 to i64
  %367 = ptrtoint ptr %365 to i64
  %368 = sub i64 %366, %367
  store i64 %368, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %369 = load ptr, ptr %8, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %369, i32 0, i32 8
  %371 = load i64, ptr %370, align 8, !tbaa !22
  %372 = sub i64 4, %371
  store i64 %372, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %373 = load i64, ptr %29, align 8, !tbaa !9
  %374 = load i64, ptr %28, align 8, !tbaa !9
  %375 = icmp ult i64 %373, %374
  br i1 %375, label %376, label %378

376:                                              ; preds = %363
  %377 = load i64, ptr %29, align 8, !tbaa !9
  br label %380

378:                                              ; preds = %363
  %379 = load i64, ptr %28, align 8, !tbaa !9
  br label %380

380:                                              ; preds = %378, %376
  %381 = phi i64 [ %377, %376 ], [ %379, %378 ]
  store i64 %381, ptr %30, align 8, !tbaa !9
  %382 = load ptr, ptr %8, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %382, i32 0, i32 7
  %384 = load ptr, ptr %383, align 8, !tbaa !28
  %385 = load ptr, ptr %8, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %385, i32 0, i32 8
  %387 = load i64, ptr %386, align 8, !tbaa !22
  %388 = getelementptr inbounds i8, ptr %384, i64 %387
  %389 = load ptr, ptr %17, align 8, !tbaa !5
  %390 = load i64, ptr %30, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %388, ptr align 1 %389, i64 %390, i1 false)
  %391 = load i64, ptr %30, align 8, !tbaa !9
  %392 = load ptr, ptr %17, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i64 %391
  store ptr %393, ptr %17, align 8, !tbaa !5
  %394 = load i64, ptr %30, align 8, !tbaa !9
  %395 = load ptr, ptr %8, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %395, i32 0, i32 8
  %397 = load i64, ptr %396, align 8, !tbaa !22
  %398 = add i64 %397, %394
  store i64 %398, ptr %396, align 8, !tbaa !22
  %399 = load ptr, ptr %8, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %399, i32 0, i32 8
  %401 = load i64, ptr %400, align 8, !tbaa !22
  %402 = icmp ult i64 %401, 4
  br i1 %402, label %403, label %408

403:                                              ; preds = %380
  %404 = load ptr, ptr %8, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %404, i32 0, i32 8
  %406 = load i64, ptr %405, align 8, !tbaa !22
  %407 = sub i64 4, %406
  store i64 %407, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %412

408:                                              ; preds = %380
  %409 = load ptr, ptr %8, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %409, i32 0, i32 7
  %411 = load ptr, ptr %410, align 8, !tbaa !28
  store ptr %411, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %412

412:                                              ; preds = %408, %403
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  %413 = load i32, ptr %25, align 4
  switch i32 %413, label %1611 [
    i32 0, label %414
    i32 4, label %1453
  ]

414:                                              ; preds = %412
  br label %415

415:                                              ; preds = %414, %357
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %416 = load ptr, ptr %21, align 8, !tbaa !5
  %417 = call i32 @LZ4F_readLE32(ptr noundef %416)
  store i32 %417, ptr %31, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %418 = load i32, ptr %31, align 4, !tbaa !11
  %419 = and i32 %418, 2147483647
  %420 = zext i32 %419 to i64
  store i64 %420, ptr %32, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %421 = load ptr, ptr %8, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %421, i32 0, i32 1
  %423 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %422, i32 0, i32 6
  %424 = load i32, ptr %423, align 4, !tbaa !33
  %425 = zext i32 %424 to i64
  %426 = mul i64 %425, 4
  store i64 %426, ptr %33, align 8, !tbaa !9
  %427 = load i32, ptr %31, align 4, !tbaa !11
  %428 = icmp eq i32 %427, 0
  br i1 %428, label %429, label %432

429:                                              ; preds = %415
  %430 = load ptr, ptr %8, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %430, i32 0, i32 3
  store i32 10, ptr %431, align 4, !tbaa !21
  store i32 4, ptr %25, align 4
  br label %481

432:                                              ; preds = %415
  %433 = load i64, ptr %32, align 8, !tbaa !9
  %434 = load ptr, ptr %8, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %434, i32 0, i32 5
  %436 = load i64, ptr %435, align 8, !tbaa !25
  %437 = icmp ugt i64 %433, %436
  br i1 %437, label %438, label %440

438:                                              ; preds = %432
  %439 = call i64 @LZ4F_returnErrorCode(i32 noundef 2)
  store i64 %439, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %481

440:                                              ; preds = %432
  %441 = load i32, ptr %31, align 4, !tbaa !11
  %442 = and i32 %441, -2147483648
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %460

444:                                              ; preds = %440
  %445 = load i64, ptr %32, align 8, !tbaa !9
  %446 = load ptr, ptr %8, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %446, i32 0, i32 9
  store i64 %445, ptr %447, align 8, !tbaa !23
  %448 = load ptr, ptr %8, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %448, i32 0, i32 1
  %450 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %449, i32 0, i32 6
  %451 = load i32, ptr %450, align 4, !tbaa !33
  %452 = icmp ne i32 %451, 0
  br i1 %452, label %453, label %457

453:                                              ; preds = %444
  %454 = load ptr, ptr %8, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %454, i32 0, i32 17
  %456 = call i32 @XXH32_reset(ptr noundef %455, i32 noundef 0)
  br label %457

457:                                              ; preds = %453, %444
  %458 = load ptr, ptr %8, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %458, i32 0, i32 3
  store i32 5, ptr %459, align 4, !tbaa !21
  store i32 4, ptr %25, align 4
  br label %481

460:                                              ; preds = %440
  %461 = load i64, ptr %32, align 8, !tbaa !9
  %462 = load i64, ptr %33, align 8, !tbaa !9
  %463 = add i64 %461, %462
  %464 = load ptr, ptr %8, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %464, i32 0, i32 9
  store i64 %463, ptr %465, align 8, !tbaa !23
  %466 = load ptr, ptr %8, align 8, !tbaa !5
  %467 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %466, i32 0, i32 3
  store i32 7, ptr %467, align 4, !tbaa !21
  %468 = load ptr, ptr %20, align 8, !tbaa !5
  %469 = load ptr, ptr %19, align 8, !tbaa !5
  %470 = icmp eq ptr %468, %469
  br i1 %470, label %475, label %471

471:                                              ; preds = %460
  %472 = load ptr, ptr %17, align 8, !tbaa !5
  %473 = load ptr, ptr %16, align 8, !tbaa !5
  %474 = icmp eq ptr %472, %473
  br i1 %474, label %475, label %480

475:                                              ; preds = %471, %460
  %476 = load i64, ptr %32, align 8, !tbaa !9
  %477 = add i64 4, %476
  %478 = load i64, ptr %33, align 8, !tbaa !9
  %479 = add i64 %477, %478
  store i64 %479, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %480

480:                                              ; preds = %475, %471
  store i32 4, ptr %25, align 4
  br label %481

481:                                              ; preds = %480, %457, %438, %429
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  %482 = load i32, ptr %25, align 4
  switch i32 %482, label %1609 [
    i32 4, label %1453
  ]

483:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %484 = load ptr, ptr %20, align 8, !tbaa !5
  %485 = icmp eq ptr %484, null
  br i1 %485, label %486, label %487

486:                                              ; preds = %483
  store i64 0, ptr %34, align 8, !tbaa !9
  br label %588

487:                                              ; preds = %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %488 = load ptr, ptr %16, align 8, !tbaa !5
  %489 = load ptr, ptr %17, align 8, !tbaa !5
  %490 = ptrtoint ptr %488 to i64
  %491 = ptrtoint ptr %489 to i64
  %492 = sub i64 %490, %491
  %493 = load ptr, ptr %19, align 8, !tbaa !5
  %494 = load ptr, ptr %20, align 8, !tbaa !5
  %495 = ptrtoint ptr %493 to i64
  %496 = ptrtoint ptr %494 to i64
  %497 = sub i64 %495, %496
  %498 = icmp ult i64 %492, %497
  br i1 %498, label %499, label %505

499:                                              ; preds = %487
  %500 = load ptr, ptr %16, align 8, !tbaa !5
  %501 = load ptr, ptr %17, align 8, !tbaa !5
  %502 = ptrtoint ptr %500 to i64
  %503 = ptrtoint ptr %501 to i64
  %504 = sub i64 %502, %503
  br label %511

505:                                              ; preds = %487
  %506 = load ptr, ptr %19, align 8, !tbaa !5
  %507 = load ptr, ptr %20, align 8, !tbaa !5
  %508 = ptrtoint ptr %506 to i64
  %509 = ptrtoint ptr %507 to i64
  %510 = sub i64 %508, %509
  br label %511

511:                                              ; preds = %505, %499
  %512 = phi i64 [ %504, %499 ], [ %510, %505 ]
  store i64 %512, ptr %35, align 8, !tbaa !9
  %513 = load ptr, ptr %8, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %513, i32 0, i32 9
  %515 = load i64, ptr %514, align 8, !tbaa !23
  %516 = load i64, ptr %35, align 8, !tbaa !9
  %517 = icmp ult i64 %515, %516
  br i1 %517, label %518, label %522

518:                                              ; preds = %511
  %519 = load ptr, ptr %8, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %519, i32 0, i32 9
  %521 = load i64, ptr %520, align 8, !tbaa !23
  br label %524

522:                                              ; preds = %511
  %523 = load i64, ptr %35, align 8, !tbaa !9
  br label %524

524:                                              ; preds = %522, %518
  %525 = phi i64 [ %521, %518 ], [ %523, %522 ]
  store i64 %525, ptr %34, align 8, !tbaa !9
  %526 = load ptr, ptr %20, align 8, !tbaa !5
  %527 = load ptr, ptr %17, align 8, !tbaa !5
  %528 = load i64, ptr %34, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %526, ptr align 1 %527, i64 %528, i1 false)
  %529 = load ptr, ptr %8, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %529, i32 0, i32 18
  %531 = load i32, ptr %530, align 8, !tbaa !15
  %532 = icmp ne i32 %531, 0
  br i1 %532, label %558, label %533

533:                                              ; preds = %524
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %534, i32 0, i32 1
  %536 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %535, i32 0, i32 6
  %537 = load i32, ptr %536, align 4, !tbaa !33
  %538 = icmp ne i32 %537, 0
  br i1 %538, label %539, label %545

539:                                              ; preds = %533
  %540 = load ptr, ptr %8, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %540, i32 0, i32 17
  %542 = load ptr, ptr %17, align 8, !tbaa !5
  %543 = load i64, ptr %34, align 8, !tbaa !9
  %544 = call i32 @XXH32_update(ptr noundef %541, ptr noundef %542, i64 noundef %543)
  br label %545

545:                                              ; preds = %539, %533
  %546 = load ptr, ptr %8, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %546, i32 0, i32 1
  %548 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %547, i32 0, i32 2
  %549 = load i32, ptr %548, align 8, !tbaa !24
  %550 = icmp ne i32 %549, 0
  br i1 %550, label %551, label %557

551:                                              ; preds = %545
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %552, i32 0, i32 16
  %554 = load ptr, ptr %17, align 8, !tbaa !5
  %555 = load i64, ptr %34, align 8, !tbaa !9
  %556 = call i32 @XXH32_update(ptr noundef %553, ptr noundef %554, i64 noundef %555)
  br label %557

557:                                              ; preds = %551, %545
  br label %558

558:                                              ; preds = %557, %524
  %559 = load ptr, ptr %8, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %559, i32 0, i32 1
  %561 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %560, i32 0, i32 4
  %562 = load i64, ptr %561, align 8, !tbaa !34
  %563 = icmp ne i64 %562, 0
  br i1 %563, label %564, label %570

564:                                              ; preds = %558
  %565 = load i64, ptr %34, align 8, !tbaa !9
  %566 = load ptr, ptr %8, align 8, !tbaa !5
  %567 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %566, i32 0, i32 4
  %568 = load i64, ptr %567, align 8, !tbaa !35
  %569 = sub i64 %568, %565
  store i64 %569, ptr %567, align 8, !tbaa !35
  br label %570

570:                                              ; preds = %564, %558
  %571 = load ptr, ptr %8, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %571, i32 0, i32 1
  %573 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %572, i32 0, i32 1
  %574 = load i32, ptr %573, align 4, !tbaa !26
  %575 = icmp eq i32 %574, 0
  br i1 %575, label %576, label %581

576:                                              ; preds = %570
  %577 = load ptr, ptr %8, align 8, !tbaa !5
  %578 = load ptr, ptr %20, align 8, !tbaa !5
  %579 = load i64, ptr %34, align 8, !tbaa !9
  %580 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %577, ptr noundef %578, i64 noundef %579, ptr noundef %580, i32 noundef 0)
  br label %581

581:                                              ; preds = %576, %570
  %582 = load i64, ptr %34, align 8, !tbaa !9
  %583 = load ptr, ptr %17, align 8, !tbaa !5
  %584 = getelementptr inbounds i8, ptr %583, i64 %582
  store ptr %584, ptr %17, align 8, !tbaa !5
  %585 = load i64, ptr %34, align 8, !tbaa !9
  %586 = load ptr, ptr %20, align 8, !tbaa !5
  %587 = getelementptr inbounds i8, ptr %586, i64 %585
  store ptr %587, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %588

588:                                              ; preds = %581, %486
  %589 = load i64, ptr %34, align 8, !tbaa !9
  %590 = load ptr, ptr %8, align 8, !tbaa !5
  %591 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %590, i32 0, i32 9
  %592 = load i64, ptr %591, align 8, !tbaa !23
  %593 = icmp eq i64 %589, %592
  br i1 %593, label %594, label %609

594:                                              ; preds = %588
  %595 = load ptr, ptr %8, align 8, !tbaa !5
  %596 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %595, i32 0, i32 1
  %597 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %596, i32 0, i32 6
  %598 = load i32, ptr %597, align 4, !tbaa !33
  %599 = icmp ne i32 %598, 0
  br i1 %599, label %600, label %605

600:                                              ; preds = %594
  %601 = load ptr, ptr %8, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %601, i32 0, i32 8
  store i64 0, ptr %602, align 8, !tbaa !22
  %603 = load ptr, ptr %8, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %603, i32 0, i32 3
  store i32 6, ptr %604, align 4, !tbaa !21
  br label %608

605:                                              ; preds = %594
  %606 = load ptr, ptr %8, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %606, i32 0, i32 3
  store i32 3, ptr %607, align 4, !tbaa !21
  br label %608

608:                                              ; preds = %605, %600
  store i32 4, ptr %25, align 4
  br label %615

609:                                              ; preds = %588
  %610 = load i64, ptr %34, align 8, !tbaa !9
  %611 = load ptr, ptr %8, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %611, i32 0, i32 9
  %613 = load i64, ptr %612, align 8, !tbaa !23
  %614 = sub i64 %613, %610
  store i64 %614, ptr %612, align 8, !tbaa !23
  store i32 0, ptr %25, align 4
  br label %615

615:                                              ; preds = %609, %608
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  %616 = load i32, ptr %25, align 4
  switch i32 %616, label %1611 [
    i32 0, label %617
    i32 4, label %1453
  ]

617:                                              ; preds = %615
  %618 = load ptr, ptr %8, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %618, i32 0, i32 9
  %620 = load i64, ptr %619, align 8, !tbaa !23
  %621 = load ptr, ptr %8, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %621, i32 0, i32 1
  %623 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %622, i32 0, i32 6
  %624 = load i32, ptr %623, align 4, !tbaa !33
  %625 = icmp ne i32 %624, 0
  %626 = zext i1 %625 to i64
  %627 = select i1 %625, i64 4, i64 0
  %628 = add i64 %620, %627
  %629 = add i64 %628, 4
  store i64 %629, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1453

630:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %631 = load ptr, ptr %16, align 8, !tbaa !5
  %632 = load ptr, ptr %17, align 8, !tbaa !5
  %633 = ptrtoint ptr %631 to i64
  %634 = ptrtoint ptr %632 to i64
  %635 = sub i64 %633, %634
  %636 = icmp sge i64 %635, 4
  br i1 %636, label %637, label %646

637:                                              ; preds = %630
  %638 = load ptr, ptr %8, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %638, i32 0, i32 8
  %640 = load i64, ptr %639, align 8, !tbaa !22
  %641 = icmp eq i64 %640, 0
  br i1 %641, label %642, label %646

642:                                              ; preds = %637
  %643 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %643, ptr %36, align 8, !tbaa !5
  %644 = load ptr, ptr %17, align 8, !tbaa !5
  %645 = getelementptr inbounds i8, ptr %644, i64 4
  store ptr %645, ptr %17, align 8, !tbaa !5
  br label %697

646:                                              ; preds = %637, %630
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %647 = load ptr, ptr %8, align 8, !tbaa !5
  %648 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %647, i32 0, i32 8
  %649 = load i64, ptr %648, align 8, !tbaa !22
  %650 = sub i64 4, %649
  store i64 %650, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %651 = load i64, ptr %37, align 8, !tbaa !9
  %652 = load ptr, ptr %16, align 8, !tbaa !5
  %653 = load ptr, ptr %17, align 8, !tbaa !5
  %654 = ptrtoint ptr %652 to i64
  %655 = ptrtoint ptr %653 to i64
  %656 = sub i64 %654, %655
  %657 = icmp ult i64 %651, %656
  br i1 %657, label %658, label %660

658:                                              ; preds = %646
  %659 = load i64, ptr %37, align 8, !tbaa !9
  br label %666

660:                                              ; preds = %646
  %661 = load ptr, ptr %16, align 8, !tbaa !5
  %662 = load ptr, ptr %17, align 8, !tbaa !5
  %663 = ptrtoint ptr %661 to i64
  %664 = ptrtoint ptr %662 to i64
  %665 = sub i64 %663, %664
  br label %666

666:                                              ; preds = %660, %658
  %667 = phi i64 [ %659, %658 ], [ %665, %660 ]
  store i64 %667, ptr %38, align 8, !tbaa !9
  %668 = load ptr, ptr %8, align 8, !tbaa !5
  %669 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %668, i32 0, i32 19
  %670 = getelementptr inbounds [19 x i8], ptr %669, i64 0, i64 0
  %671 = load ptr, ptr %8, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %671, i32 0, i32 8
  %673 = load i64, ptr %672, align 8, !tbaa !22
  %674 = getelementptr inbounds i8, ptr %670, i64 %673
  %675 = load ptr, ptr %17, align 8, !tbaa !5
  %676 = load i64, ptr %38, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %674, ptr align 1 %675, i64 %676, i1 false)
  %677 = load i64, ptr %38, align 8, !tbaa !9
  %678 = load ptr, ptr %8, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %678, i32 0, i32 8
  %680 = load i64, ptr %679, align 8, !tbaa !22
  %681 = add i64 %680, %677
  store i64 %681, ptr %679, align 8, !tbaa !22
  %682 = load i64, ptr %38, align 8, !tbaa !9
  %683 = load ptr, ptr %17, align 8, !tbaa !5
  %684 = getelementptr inbounds i8, ptr %683, i64 %682
  store ptr %684, ptr %17, align 8, !tbaa !5
  %685 = load ptr, ptr %8, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %685, i32 0, i32 8
  %687 = load i64, ptr %686, align 8, !tbaa !22
  %688 = icmp ult i64 %687, 4
  br i1 %688, label %689, label %690

689:                                              ; preds = %666
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %694

690:                                              ; preds = %666
  %691 = load ptr, ptr %8, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %691, i32 0, i32 19
  %693 = getelementptr inbounds [19 x i8], ptr %692, i64 0, i64 0
  store ptr %693, ptr %36, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %694

694:                                              ; preds = %690, %689
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  %695 = load i32, ptr %25, align 4
  switch i32 %695, label %718 [
    i32 0, label %696
  ]

696:                                              ; preds = %694
  br label %697

697:                                              ; preds = %696, %642
  %698 = load ptr, ptr %8, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %698, i32 0, i32 18
  %700 = load i32, ptr %699, align 8, !tbaa !15
  %701 = icmp ne i32 %700, 0
  br i1 %701, label %717, label %702

702:                                              ; preds = %697
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %703 = load ptr, ptr %36, align 8, !tbaa !5
  %704 = call i32 @LZ4F_readLE32(ptr noundef %703)
  store i32 %704, ptr %39, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  %705 = load ptr, ptr %8, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %705, i32 0, i32 17
  %707 = call i32 @XXH32_digest(ptr noundef %706)
  store i32 %707, ptr %40, align 4, !tbaa !11
  %708 = load i32, ptr %39, align 4, !tbaa !11
  %709 = load i32, ptr %40, align 4, !tbaa !11
  %710 = icmp ne i32 %708, %709
  br i1 %710, label %711, label %713

711:                                              ; preds = %702
  %712 = call i64 @LZ4F_returnErrorCode(i32 noundef 7)
  store i64 %712, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %714

713:                                              ; preds = %702
  store i32 0, ptr %25, align 4
  br label %714

714:                                              ; preds = %713, %711
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  %715 = load i32, ptr %25, align 4
  switch i32 %715, label %718 [
    i32 0, label %716
  ]

716:                                              ; preds = %714
  br label %717

717:                                              ; preds = %716, %697
  store i32 0, ptr %25, align 4
  br label %718

718:                                              ; preds = %717, %714, %694
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  %719 = load i32, ptr %25, align 4
  switch i32 %719, label %1609 [
    i32 0, label %720
    i32 4, label %1453
  ]

720:                                              ; preds = %718
  %721 = load ptr, ptr %8, align 8, !tbaa !5
  %722 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %721, i32 0, i32 3
  store i32 3, ptr %722, align 4, !tbaa !21
  br label %1453

723:                                              ; preds = %107
  %724 = load ptr, ptr %16, align 8, !tbaa !5
  %725 = load ptr, ptr %17, align 8, !tbaa !5
  %726 = ptrtoint ptr %724 to i64
  %727 = ptrtoint ptr %725 to i64
  %728 = sub i64 %726, %727
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %729, i32 0, i32 9
  %731 = load i64, ptr %730, align 8, !tbaa !23
  %732 = icmp ult i64 %728, %731
  br i1 %732, label %733, label %738

733:                                              ; preds = %723
  %734 = load ptr, ptr %8, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %734, i32 0, i32 8
  store i64 0, ptr %735, align 8, !tbaa !22
  %736 = load ptr, ptr %8, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %736, i32 0, i32 3
  store i32 8, ptr %737, align 4, !tbaa !21
  br label %1453

738:                                              ; preds = %723
  %739 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %739, ptr %21, align 8, !tbaa !5
  %740 = load ptr, ptr %8, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %740, i32 0, i32 9
  %742 = load i64, ptr %741, align 8, !tbaa !23
  %743 = load ptr, ptr %17, align 8, !tbaa !5
  %744 = getelementptr inbounds i8, ptr %743, i64 %742
  store ptr %744, ptr %17, align 8, !tbaa !5
  br i1 false, label %745, label %816

745:                                              ; preds = %738
  br label %746

746:                                              ; preds = %745, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %747 = load ptr, ptr %8, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %747, i32 0, i32 9
  %749 = load i64, ptr %748, align 8, !tbaa !23
  %750 = load ptr, ptr %8, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %750, i32 0, i32 8
  %752 = load i64, ptr %751, align 8, !tbaa !22
  %753 = sub i64 %749, %752
  store i64 %753, ptr %41, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %754 = load ptr, ptr %16, align 8, !tbaa !5
  %755 = load ptr, ptr %17, align 8, !tbaa !5
  %756 = ptrtoint ptr %754 to i64
  %757 = ptrtoint ptr %755 to i64
  %758 = sub i64 %756, %757
  store i64 %758, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %759 = load i64, ptr %41, align 8, !tbaa !9
  %760 = load i64, ptr %42, align 8, !tbaa !9
  %761 = icmp ult i64 %759, %760
  br i1 %761, label %762, label %764

762:                                              ; preds = %746
  %763 = load i64, ptr %41, align 8, !tbaa !9
  br label %766

764:                                              ; preds = %746
  %765 = load i64, ptr %42, align 8, !tbaa !9
  br label %766

766:                                              ; preds = %764, %762
  %767 = phi i64 [ %763, %762 ], [ %765, %764 ]
  store i64 %767, ptr %43, align 8, !tbaa !9
  %768 = load ptr, ptr %8, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %768, i32 0, i32 7
  %770 = load ptr, ptr %769, align 8, !tbaa !28
  %771 = load ptr, ptr %8, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %771, i32 0, i32 8
  %773 = load i64, ptr %772, align 8, !tbaa !22
  %774 = getelementptr inbounds i8, ptr %770, i64 %773
  %775 = load ptr, ptr %17, align 8, !tbaa !5
  %776 = load i64, ptr %43, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %774, ptr align 1 %775, i64 %776, i1 false)
  %777 = load i64, ptr %43, align 8, !tbaa !9
  %778 = load ptr, ptr %8, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %778, i32 0, i32 8
  %780 = load i64, ptr %779, align 8, !tbaa !22
  %781 = add i64 %780, %777
  store i64 %781, ptr %779, align 8, !tbaa !22
  %782 = load i64, ptr %43, align 8, !tbaa !9
  %783 = load ptr, ptr %17, align 8, !tbaa !5
  %784 = getelementptr inbounds i8, ptr %783, i64 %782
  store ptr %784, ptr %17, align 8, !tbaa !5
  %785 = load ptr, ptr %8, align 8, !tbaa !5
  %786 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %785, i32 0, i32 8
  %787 = load i64, ptr %786, align 8, !tbaa !22
  %788 = load ptr, ptr %8, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %788, i32 0, i32 9
  %790 = load i64, ptr %789, align 8, !tbaa !23
  %791 = icmp ult i64 %787, %790
  br i1 %791, label %792, label %809

792:                                              ; preds = %766
  %793 = load ptr, ptr %8, align 8, !tbaa !5
  %794 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %793, i32 0, i32 9
  %795 = load i64, ptr %794, align 8, !tbaa !23
  %796 = load ptr, ptr %8, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %796, i32 0, i32 8
  %798 = load i64, ptr %797, align 8, !tbaa !22
  %799 = sub i64 %795, %798
  %800 = load ptr, ptr %8, align 8, !tbaa !5
  %801 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %800, i32 0, i32 1
  %802 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %801, i32 0, i32 6
  %803 = load i32, ptr %802, align 4, !tbaa !33
  %804 = icmp ne i32 %803, 0
  %805 = zext i1 %804 to i64
  %806 = select i1 %804, i64 4, i64 0
  %807 = add i64 %799, %806
  %808 = add i64 %807, 4
  store i64 %808, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %813

809:                                              ; preds = %766
  %810 = load ptr, ptr %8, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %810, i32 0, i32 7
  %812 = load ptr, ptr %811, align 8, !tbaa !28
  store ptr %812, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %813

813:                                              ; preds = %809, %792
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  %814 = load i32, ptr %25, align 4
  switch i32 %814, label %1611 [
    i32 0, label %815
    i32 4, label %1453
  ]

815:                                              ; preds = %813
  br label %816

816:                                              ; preds = %815, %738
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %817, i32 0, i32 1
  %819 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %818, i32 0, i32 6
  %820 = load i32, ptr %819, align 4, !tbaa !33
  %821 = icmp ne i32 %820, 0
  br i1 %821, label %822, label %850

822:                                              ; preds = %816
  %823 = load ptr, ptr %8, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %823, i32 0, i32 9
  %825 = load i64, ptr %824, align 8, !tbaa !23
  %826 = sub i64 %825, 4
  store i64 %826, ptr %824, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %827 = load ptr, ptr %21, align 8, !tbaa !5
  %828 = load ptr, ptr %8, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %828, i32 0, i32 9
  %830 = load i64, ptr %829, align 8, !tbaa !23
  %831 = getelementptr inbounds i8, ptr %827, i64 %830
  %832 = call i32 @LZ4F_readLE32(ptr noundef %831)
  store i32 %832, ptr %44, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %833 = load ptr, ptr %21, align 8, !tbaa !5
  %834 = load ptr, ptr %8, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %834, i32 0, i32 9
  %836 = load i64, ptr %835, align 8, !tbaa !23
  %837 = call i32 @XXH32(ptr noundef %833, i64 noundef %836, i32 noundef 0)
  store i32 %837, ptr %45, align 4, !tbaa !11
  br label %838

838:                                              ; preds = %822
  %839 = load i32, ptr %44, align 4, !tbaa !11
  %840 = load i32, ptr %45, align 4, !tbaa !11
  %841 = icmp ne i32 %839, %840
  br i1 %841, label %842, label %844

842:                                              ; preds = %838
  %843 = call i64 @LZ4F_returnErrorCode(i32 noundef 7)
  store i64 %843, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %847

844:                                              ; preds = %838
  br label %845

845:                                              ; preds = %844
  br label %846

846:                                              ; preds = %845
  store i32 0, ptr %25, align 4
  br label %847

847:                                              ; preds = %846, %842
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  %848 = load i32, ptr %25, align 4
  switch i32 %848, label %1609 [
    i32 0, label %849
  ]

849:                                              ; preds = %847
  br label %850

850:                                              ; preds = %849, %816
  %851 = load ptr, ptr %19, align 8, !tbaa !5
  %852 = load ptr, ptr %20, align 8, !tbaa !5
  %853 = ptrtoint ptr %851 to i64
  %854 = ptrtoint ptr %852 to i64
  %855 = sub i64 %853, %854
  %856 = load ptr, ptr %8, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %856, i32 0, i32 5
  %858 = load i64, ptr %857, align 8, !tbaa !25
  %859 = icmp uge i64 %855, %858
  br i1 %859, label %860, label %968

860:                                              ; preds = %850
  %861 = load ptr, ptr %8, align 8, !tbaa !5
  %862 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %861, i32 0, i32 11
  %863 = load ptr, ptr %862, align 8, !tbaa !36
  %864 = icmp ne ptr %863, null
  br i1 %864, label %865, label %877

865:                                              ; preds = %860
  %866 = load ptr, ptr %8, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %866, i32 0, i32 11
  %868 = load ptr, ptr %867, align 8, !tbaa !36
  %869 = load ptr, ptr %8, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %869, i32 0, i32 12
  %871 = load i64, ptr %870, align 8, !tbaa !37
  %872 = getelementptr inbounds i8, ptr %868, i64 %871
  %873 = load ptr, ptr %8, align 8, !tbaa !5
  %874 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %873, i32 0, i32 13
  %875 = load ptr, ptr %874, align 8, !tbaa !30
  %876 = icmp eq ptr %872, %875
  br i1 %876, label %968, label %877

877:                                              ; preds = %865, %860
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %878 = load ptr, ptr %8, align 8, !tbaa !5
  %879 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %878, i32 0, i32 11
  %880 = load ptr, ptr %879, align 8, !tbaa !36
  store ptr %880, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %881 = load ptr, ptr %8, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %881, i32 0, i32 12
  %883 = load i64, ptr %882, align 8, !tbaa !37
  store i64 %883, ptr %47, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %884 = load ptr, ptr %46, align 8, !tbaa !5
  %885 = icmp ne ptr %884, null
  br i1 %885, label %886, label %894

886:                                              ; preds = %877
  %887 = load i64, ptr %47, align 8, !tbaa !9
  %888 = icmp ugt i64 %887, 1073741824
  br i1 %888, label %889, label %894

889:                                              ; preds = %886
  %890 = load i64, ptr %47, align 8, !tbaa !9
  %891 = sub i64 %890, 65536
  %892 = load ptr, ptr %46, align 8, !tbaa !5
  %893 = getelementptr inbounds i8, ptr %892, i64 %891
  store ptr %893, ptr %46, align 8, !tbaa !5
  store i64 65536, ptr %47, align 8, !tbaa !9
  br label %894

894:                                              ; preds = %889, %886, %877
  %895 = load ptr, ptr %21, align 8, !tbaa !5
  %896 = load ptr, ptr %20, align 8, !tbaa !5
  %897 = load ptr, ptr %8, align 8, !tbaa !5
  %898 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %897, i32 0, i32 9
  %899 = load i64, ptr %898, align 8, !tbaa !23
  %900 = trunc i64 %899 to i32
  %901 = load ptr, ptr %8, align 8, !tbaa !5
  %902 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %901, i32 0, i32 5
  %903 = load i64, ptr %902, align 8, !tbaa !25
  %904 = trunc i64 %903 to i32
  %905 = load ptr, ptr %46, align 8, !tbaa !5
  %906 = load i64, ptr %47, align 8, !tbaa !9
  %907 = trunc i64 %906 to i32
  %908 = call i32 @LZ4_decompress_safe_usingDict(ptr noundef %895, ptr noundef %896, i32 noundef %900, i32 noundef %904, ptr noundef %905, i32 noundef %907)
  store i32 %908, ptr %48, align 4, !tbaa !11
  br label %909

909:                                              ; preds = %894
  %910 = load i32, ptr %48, align 4, !tbaa !11
  %911 = icmp slt i32 %910, 0
  br i1 %911, label %912, label %914

912:                                              ; preds = %909
  %913 = call i64 @LZ4F_returnErrorCode(i32 noundef 16)
  store i64 %913, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %966

914:                                              ; preds = %909
  br label %915

915:                                              ; preds = %914
  br label %916

916:                                              ; preds = %915
  %917 = load ptr, ptr %8, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %917, i32 0, i32 1
  %919 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %918, i32 0, i32 2
  %920 = load i32, ptr %919, align 8, !tbaa !24
  %921 = icmp ne i32 %920, 0
  br i1 %921, label %922, label %934

922:                                              ; preds = %916
  %923 = load ptr, ptr %8, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %923, i32 0, i32 18
  %925 = load i32, ptr %924, align 8, !tbaa !15
  %926 = icmp ne i32 %925, 0
  br i1 %926, label %934, label %927

927:                                              ; preds = %922
  %928 = load ptr, ptr %8, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %928, i32 0, i32 16
  %930 = load ptr, ptr %20, align 8, !tbaa !5
  %931 = load i32, ptr %48, align 4, !tbaa !11
  %932 = sext i32 %931 to i64
  %933 = call i32 @XXH32_update(ptr noundef %929, ptr noundef %930, i64 noundef %932)
  br label %934

934:                                              ; preds = %927, %922, %916
  %935 = load ptr, ptr %8, align 8, !tbaa !5
  %936 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %935, i32 0, i32 1
  %937 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %936, i32 0, i32 4
  %938 = load i64, ptr %937, align 8, !tbaa !34
  %939 = icmp ne i64 %938, 0
  br i1 %939, label %940, label %947

940:                                              ; preds = %934
  %941 = load i32, ptr %48, align 4, !tbaa !11
  %942 = sext i32 %941 to i64
  %943 = load ptr, ptr %8, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %943, i32 0, i32 4
  %945 = load i64, ptr %944, align 8, !tbaa !35
  %946 = sub i64 %945, %942
  store i64 %946, ptr %944, align 8, !tbaa !35
  br label %947

947:                                              ; preds = %940, %934
  %948 = load ptr, ptr %8, align 8, !tbaa !5
  %949 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %948, i32 0, i32 1
  %950 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %949, i32 0, i32 1
  %951 = load i32, ptr %950, align 4, !tbaa !26
  %952 = icmp eq i32 %951, 0
  br i1 %952, label %953, label %959

953:                                              ; preds = %947
  %954 = load ptr, ptr %8, align 8, !tbaa !5
  %955 = load ptr, ptr %20, align 8, !tbaa !5
  %956 = load i32, ptr %48, align 4, !tbaa !11
  %957 = sext i32 %956 to i64
  %958 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %954, ptr noundef %955, i64 noundef %957, ptr noundef %958, i32 noundef 0)
  br label %959

959:                                              ; preds = %953, %947
  %960 = load i32, ptr %48, align 4, !tbaa !11
  %961 = load ptr, ptr %20, align 8, !tbaa !5
  %962 = sext i32 %960 to i64
  %963 = getelementptr inbounds i8, ptr %961, i64 %962
  store ptr %963, ptr %20, align 8, !tbaa !5
  %964 = load ptr, ptr %8, align 8, !tbaa !5
  %965 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %964, i32 0, i32 3
  store i32 3, ptr %965, align 4, !tbaa !21
  store i32 4, ptr %25, align 4
  br label %966

966:                                              ; preds = %959, %912
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  %967 = load i32, ptr %25, align 4
  switch i32 %967, label %1609 [
    i32 4, label %1453
  ]

968:                                              ; preds = %865, %850
  %969 = load ptr, ptr %8, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %969, i32 0, i32 1
  %971 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %970, i32 0, i32 1
  %972 = load i32, ptr %971, align 4, !tbaa !26
  %973 = icmp eq i32 %972, 0
  br i1 %973, label %974, label %1031

974:                                              ; preds = %968
  %975 = load ptr, ptr %8, align 8, !tbaa !5
  %976 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %975, i32 0, i32 11
  %977 = load ptr, ptr %976, align 8, !tbaa !36
  %978 = load ptr, ptr %8, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %978, i32 0, i32 10
  %980 = load ptr, ptr %979, align 8, !tbaa !29
  %981 = icmp eq ptr %977, %980
  br i1 %981, label %982, label %1011

982:                                              ; preds = %974
  %983 = load ptr, ptr %8, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %983, i32 0, i32 12
  %985 = load i64, ptr %984, align 8, !tbaa !37
  %986 = icmp ugt i64 %985, 131072
  br i1 %986, label %987, label %1001

987:                                              ; preds = %982
  %988 = load ptr, ptr %8, align 8, !tbaa !5
  %989 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %988, i32 0, i32 10
  %990 = load ptr, ptr %989, align 8, !tbaa !29
  %991 = load ptr, ptr %8, align 8, !tbaa !5
  %992 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %991, i32 0, i32 11
  %993 = load ptr, ptr %992, align 8, !tbaa !36
  %994 = load ptr, ptr %8, align 8, !tbaa !5
  %995 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %994, i32 0, i32 12
  %996 = load i64, ptr %995, align 8, !tbaa !37
  %997 = getelementptr inbounds i8, ptr %993, i64 %996
  %998 = getelementptr inbounds i8, ptr %997, i64 -65536
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %990, ptr align 1 %998, i64 65536, i1 false)
  %999 = load ptr, ptr %8, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %999, i32 0, i32 12
  store i64 65536, ptr %1000, align 8, !tbaa !37
  br label %1001

1001:                                             ; preds = %987, %982
  %1002 = load ptr, ptr %8, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1002, i32 0, i32 10
  %1004 = load ptr, ptr %1003, align 8, !tbaa !29
  %1005 = load ptr, ptr %8, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1005, i32 0, i32 12
  %1007 = load i64, ptr %1006, align 8, !tbaa !37
  %1008 = getelementptr inbounds i8, ptr %1004, i64 %1007
  %1009 = load ptr, ptr %8, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1009, i32 0, i32 13
  store ptr %1008, ptr %1010, align 8, !tbaa !30
  br label %1030

1011:                                             ; preds = %974
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %1012 = load ptr, ptr %8, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1012, i32 0, i32 12
  %1014 = load i64, ptr %1013, align 8, !tbaa !37
  %1015 = icmp ult i64 %1014, 65536
  br i1 %1015, label %1016, label %1020

1016:                                             ; preds = %1011
  %1017 = load ptr, ptr %8, align 8, !tbaa !5
  %1018 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1017, i32 0, i32 12
  %1019 = load i64, ptr %1018, align 8, !tbaa !37
  br label %1021

1020:                                             ; preds = %1011
  br label %1021

1021:                                             ; preds = %1020, %1016
  %1022 = phi i64 [ %1019, %1016 ], [ 65536, %1020 ]
  store i64 %1022, ptr %49, align 8, !tbaa !9
  %1023 = load ptr, ptr %8, align 8, !tbaa !5
  %1024 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1023, i32 0, i32 10
  %1025 = load ptr, ptr %1024, align 8, !tbaa !29
  %1026 = load i64, ptr %49, align 8, !tbaa !9
  %1027 = getelementptr inbounds i8, ptr %1025, i64 %1026
  %1028 = load ptr, ptr %8, align 8, !tbaa !5
  %1029 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1028, i32 0, i32 13
  store ptr %1027, ptr %1029, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %1030

1030:                                             ; preds = %1021, %1001
  br label %1031

1031:                                             ; preds = %1030, %968
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %1032 = load ptr, ptr %8, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1032, i32 0, i32 11
  %1034 = load ptr, ptr %1033, align 8, !tbaa !36
  store ptr %1034, ptr %50, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %1035 = load ptr, ptr %8, align 8, !tbaa !5
  %1036 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1035, i32 0, i32 12
  %1037 = load i64, ptr %1036, align 8, !tbaa !37
  store i64 %1037, ptr %51, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %1038 = load ptr, ptr %50, align 8, !tbaa !5
  %1039 = icmp ne ptr %1038, null
  br i1 %1039, label %1040, label %1048

1040:                                             ; preds = %1031
  %1041 = load i64, ptr %51, align 8, !tbaa !9
  %1042 = icmp ugt i64 %1041, 1073741824
  br i1 %1042, label %1043, label %1048

1043:                                             ; preds = %1040
  %1044 = load i64, ptr %51, align 8, !tbaa !9
  %1045 = sub i64 %1044, 65536
  %1046 = load ptr, ptr %50, align 8, !tbaa !5
  %1047 = getelementptr inbounds i8, ptr %1046, i64 %1045
  store ptr %1047, ptr %50, align 8, !tbaa !5
  store i64 65536, ptr %51, align 8, !tbaa !9
  br label %1048

1048:                                             ; preds = %1043, %1040, %1031
  %1049 = load ptr, ptr %21, align 8, !tbaa !5
  %1050 = load ptr, ptr %8, align 8, !tbaa !5
  %1051 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1050, i32 0, i32 13
  %1052 = load ptr, ptr %1051, align 8, !tbaa !30
  %1053 = load ptr, ptr %8, align 8, !tbaa !5
  %1054 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1053, i32 0, i32 9
  %1055 = load i64, ptr %1054, align 8, !tbaa !23
  %1056 = trunc i64 %1055 to i32
  %1057 = load ptr, ptr %8, align 8, !tbaa !5
  %1058 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1057, i32 0, i32 5
  %1059 = load i64, ptr %1058, align 8, !tbaa !25
  %1060 = trunc i64 %1059 to i32
  %1061 = load ptr, ptr %50, align 8, !tbaa !5
  %1062 = load i64, ptr %51, align 8, !tbaa !9
  %1063 = trunc i64 %1062 to i32
  %1064 = call i32 @LZ4_decompress_safe_usingDict(ptr noundef %1049, ptr noundef %1052, i32 noundef %1056, i32 noundef %1060, ptr noundef %1061, i32 noundef %1063)
  store i32 %1064, ptr %52, align 4, !tbaa !11
  br label %1065

1065:                                             ; preds = %1048
  %1066 = load i32, ptr %52, align 4, !tbaa !11
  %1067 = icmp slt i32 %1066, 0
  br i1 %1067, label %1068, label %1070

1068:                                             ; preds = %1065
  %1069 = call i64 @LZ4F_returnErrorCode(i32 noundef 16)
  store i64 %1069, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1114

1070:                                             ; preds = %1065
  br label %1071

1071:                                             ; preds = %1070
  br label %1072

1072:                                             ; preds = %1071
  %1073 = load ptr, ptr %8, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1073, i32 0, i32 1
  %1075 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1074, i32 0, i32 2
  %1076 = load i32, ptr %1075, align 8, !tbaa !24
  %1077 = icmp ne i32 %1076, 0
  br i1 %1077, label %1078, label %1092

1078:                                             ; preds = %1072
  %1079 = load ptr, ptr %8, align 8, !tbaa !5
  %1080 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1079, i32 0, i32 18
  %1081 = load i32, ptr %1080, align 8, !tbaa !15
  %1082 = icmp ne i32 %1081, 0
  br i1 %1082, label %1092, label %1083

1083:                                             ; preds = %1078
  %1084 = load ptr, ptr %8, align 8, !tbaa !5
  %1085 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1084, i32 0, i32 16
  %1086 = load ptr, ptr %8, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1086, i32 0, i32 13
  %1088 = load ptr, ptr %1087, align 8, !tbaa !30
  %1089 = load i32, ptr %52, align 4, !tbaa !11
  %1090 = sext i32 %1089 to i64
  %1091 = call i32 @XXH32_update(ptr noundef %1085, ptr noundef %1088, i64 noundef %1090)
  br label %1092

1092:                                             ; preds = %1083, %1078, %1072
  %1093 = load ptr, ptr %8, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1093, i32 0, i32 1
  %1095 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1094, i32 0, i32 4
  %1096 = load i64, ptr %1095, align 8, !tbaa !34
  %1097 = icmp ne i64 %1096, 0
  br i1 %1097, label %1098, label %1105

1098:                                             ; preds = %1092
  %1099 = load i32, ptr %52, align 4, !tbaa !11
  %1100 = sext i32 %1099 to i64
  %1101 = load ptr, ptr %8, align 8, !tbaa !5
  %1102 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1101, i32 0, i32 4
  %1103 = load i64, ptr %1102, align 8, !tbaa !35
  %1104 = sub i64 %1103, %1100
  store i64 %1104, ptr %1102, align 8, !tbaa !35
  br label %1105

1105:                                             ; preds = %1098, %1092
  %1106 = load i32, ptr %52, align 4, !tbaa !11
  %1107 = sext i32 %1106 to i64
  %1108 = load ptr, ptr %8, align 8, !tbaa !5
  %1109 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1108, i32 0, i32 14
  store i64 %1107, ptr %1109, align 8, !tbaa !32
  %1110 = load ptr, ptr %8, align 8, !tbaa !5
  %1111 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1110, i32 0, i32 15
  store i64 0, ptr %1111, align 8, !tbaa !31
  %1112 = load ptr, ptr %8, align 8, !tbaa !5
  %1113 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1112, i32 0, i32 3
  store i32 9, ptr %1113, align 4, !tbaa !21
  store i32 0, ptr %25, align 4
  br label %1114

1114:                                             ; preds = %1105, %1068
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  %1115 = load i32, ptr %25, align 4
  switch i32 %1115, label %1609 [
    i32 0, label %1116
  ]

1116:                                             ; preds = %1114
  br label %1117

1117:                                             ; preds = %1116, %107
  %1118 = load ptr, ptr %20, align 8, !tbaa !5
  %1119 = icmp ne ptr %1118, null
  br i1 %1119, label %1120, label %1178

1120:                                             ; preds = %1117
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %1121 = load ptr, ptr %8, align 8, !tbaa !5
  %1122 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1121, i32 0, i32 14
  %1123 = load i64, ptr %1122, align 8, !tbaa !32
  %1124 = load ptr, ptr %8, align 8, !tbaa !5
  %1125 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1124, i32 0, i32 15
  %1126 = load i64, ptr %1125, align 8, !tbaa !31
  %1127 = sub i64 %1123, %1126
  %1128 = load ptr, ptr %19, align 8, !tbaa !5
  %1129 = load ptr, ptr %20, align 8, !tbaa !5
  %1130 = ptrtoint ptr %1128 to i64
  %1131 = ptrtoint ptr %1129 to i64
  %1132 = sub i64 %1130, %1131
  %1133 = icmp ult i64 %1127, %1132
  br i1 %1133, label %1134, label %1142

1134:                                             ; preds = %1120
  %1135 = load ptr, ptr %8, align 8, !tbaa !5
  %1136 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1135, i32 0, i32 14
  %1137 = load i64, ptr %1136, align 8, !tbaa !32
  %1138 = load ptr, ptr %8, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1138, i32 0, i32 15
  %1140 = load i64, ptr %1139, align 8, !tbaa !31
  %1141 = sub i64 %1137, %1140
  br label %1148

1142:                                             ; preds = %1120
  %1143 = load ptr, ptr %19, align 8, !tbaa !5
  %1144 = load ptr, ptr %20, align 8, !tbaa !5
  %1145 = ptrtoint ptr %1143 to i64
  %1146 = ptrtoint ptr %1144 to i64
  %1147 = sub i64 %1145, %1146
  br label %1148

1148:                                             ; preds = %1142, %1134
  %1149 = phi i64 [ %1141, %1134 ], [ %1147, %1142 ]
  store i64 %1149, ptr %53, align 8, !tbaa !9
  %1150 = load ptr, ptr %20, align 8, !tbaa !5
  %1151 = load ptr, ptr %8, align 8, !tbaa !5
  %1152 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1151, i32 0, i32 13
  %1153 = load ptr, ptr %1152, align 8, !tbaa !30
  %1154 = load ptr, ptr %8, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1154, i32 0, i32 15
  %1156 = load i64, ptr %1155, align 8, !tbaa !31
  %1157 = getelementptr inbounds i8, ptr %1153, i64 %1156
  %1158 = load i64, ptr %53, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1150, ptr align 1 %1157, i64 %1158, i1 false)
  %1159 = load ptr, ptr %8, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1159, i32 0, i32 1
  %1161 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1160, i32 0, i32 1
  %1162 = load i32, ptr %1161, align 4, !tbaa !26
  %1163 = icmp eq i32 %1162, 0
  br i1 %1163, label %1164, label %1169

1164:                                             ; preds = %1148
  %1165 = load ptr, ptr %8, align 8, !tbaa !5
  %1166 = load ptr, ptr %20, align 8, !tbaa !5
  %1167 = load i64, ptr %53, align 8, !tbaa !9
  %1168 = load ptr, ptr %18, align 8, !tbaa !5
  call void @LZ4F_updateDict(ptr noundef %1165, ptr noundef %1166, i64 noundef %1167, ptr noundef %1168, i32 noundef 1)
  br label %1169

1169:                                             ; preds = %1164, %1148
  %1170 = load i64, ptr %53, align 8, !tbaa !9
  %1171 = load ptr, ptr %8, align 8, !tbaa !5
  %1172 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1171, i32 0, i32 15
  %1173 = load i64, ptr %1172, align 8, !tbaa !31
  %1174 = add i64 %1173, %1170
  store i64 %1174, ptr %1172, align 8, !tbaa !31
  %1175 = load i64, ptr %53, align 8, !tbaa !9
  %1176 = load ptr, ptr %20, align 8, !tbaa !5
  %1177 = getelementptr inbounds i8, ptr %1176, i64 %1175
  store ptr %1177, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %1178

1178:                                             ; preds = %1169, %1117
  %1179 = load ptr, ptr %8, align 8, !tbaa !5
  %1180 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1179, i32 0, i32 15
  %1181 = load i64, ptr %1180, align 8, !tbaa !31
  %1182 = load ptr, ptr %8, align 8, !tbaa !5
  %1183 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1182, i32 0, i32 14
  %1184 = load i64, ptr %1183, align 8, !tbaa !32
  %1185 = icmp eq i64 %1181, %1184
  br i1 %1185, label %1186, label %1189

1186:                                             ; preds = %1178
  %1187 = load ptr, ptr %8, align 8, !tbaa !5
  %1188 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1187, i32 0, i32 3
  store i32 3, ptr %1188, align 4, !tbaa !21
  br label %1453

1189:                                             ; preds = %1178
  store i32 0, ptr %22, align 4, !tbaa !11
  store i64 4, ptr %23, align 8, !tbaa !9
  br label %1453

1190:                                             ; preds = %107
  br label %1191

1191:                                             ; preds = %1190
  %1192 = load ptr, ptr %8, align 8, !tbaa !5
  %1193 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1192, i32 0, i32 4
  %1194 = load i64, ptr %1193, align 8, !tbaa !35
  %1195 = icmp ne i64 %1194, 0
  br i1 %1195, label %1196, label %1198

1196:                                             ; preds = %1191
  %1197 = call i64 @LZ4F_returnErrorCode(i32 noundef 14)
  store i64 %1197, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1609

1198:                                             ; preds = %1191
  br label %1199

1199:                                             ; preds = %1198
  br label %1200

1200:                                             ; preds = %1199
  %1201 = load ptr, ptr %8, align 8, !tbaa !5
  %1202 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1201, i32 0, i32 1
  %1203 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1202, i32 0, i32 2
  %1204 = load i32, ptr %1203, align 8, !tbaa !24
  %1205 = icmp ne i32 %1204, 0
  br i1 %1205, label %1208, label %1206

1206:                                             ; preds = %1200
  store i64 0, ptr %23, align 8, !tbaa !9
  %1207 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1207)
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1453

1208:                                             ; preds = %1200
  %1209 = load ptr, ptr %16, align 8, !tbaa !5
  %1210 = load ptr, ptr %17, align 8, !tbaa !5
  %1211 = ptrtoint ptr %1209 to i64
  %1212 = ptrtoint ptr %1210 to i64
  %1213 = sub i64 %1211, %1212
  %1214 = icmp slt i64 %1213, 4
  br i1 %1214, label %1215, label %1220

1215:                                             ; preds = %1208
  %1216 = load ptr, ptr %8, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1216, i32 0, i32 8
  store i64 0, ptr %1217, align 8, !tbaa !22
  %1218 = load ptr, ptr %8, align 8, !tbaa !5
  %1219 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1218, i32 0, i32 3
  store i32 11, ptr %1219, align 4, !tbaa !21
  br label %1224

1220:                                             ; preds = %1208
  %1221 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1221, ptr %21, align 8, !tbaa !5
  %1222 = load ptr, ptr %17, align 8, !tbaa !5
  %1223 = getelementptr inbounds i8, ptr %1222, i64 4
  store ptr %1223, ptr %17, align 8, !tbaa !5
  br label %1224

1224:                                             ; preds = %1220, %1215
  %1225 = load ptr, ptr %8, align 8, !tbaa !5
  %1226 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1225, i32 0, i32 3
  %1227 = load i32, ptr %1226, align 4, !tbaa !21
  %1228 = icmp eq i32 %1227, 11
  br i1 %1228, label %1229, label %1282

1229:                                             ; preds = %1224
  br label %1230

1230:                                             ; preds = %1229, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %1231 = load ptr, ptr %16, align 8, !tbaa !5
  %1232 = load ptr, ptr %17, align 8, !tbaa !5
  %1233 = ptrtoint ptr %1231 to i64
  %1234 = ptrtoint ptr %1232 to i64
  %1235 = sub i64 %1233, %1234
  store i64 %1235, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %1236 = load ptr, ptr %8, align 8, !tbaa !5
  %1237 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1236, i32 0, i32 8
  %1238 = load i64, ptr %1237, align 8, !tbaa !22
  %1239 = sub i64 4, %1238
  store i64 %1239, ptr %55, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %1240 = load i64, ptr %55, align 8, !tbaa !9
  %1241 = load i64, ptr %54, align 8, !tbaa !9
  %1242 = icmp ult i64 %1240, %1241
  br i1 %1242, label %1243, label %1245

1243:                                             ; preds = %1230
  %1244 = load i64, ptr %55, align 8, !tbaa !9
  br label %1247

1245:                                             ; preds = %1230
  %1246 = load i64, ptr %54, align 8, !tbaa !9
  br label %1247

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

1270:                                             ; preds = %1247
  %1271 = load ptr, ptr %8, align 8, !tbaa !5
  %1272 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1271, i32 0, i32 8
  %1273 = load i64, ptr %1272, align 8, !tbaa !22
  %1274 = sub i64 4, %1273
  store i64 %1274, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %1279

1275:                                             ; preds = %1247
  %1276 = load ptr, ptr %8, align 8, !tbaa !5
  %1277 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1276, i32 0, i32 7
  %1278 = load ptr, ptr %1277, align 8, !tbaa !28
  store ptr %1278, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %1279

1279:                                             ; preds = %1275, %1270
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  %1280 = load i32, ptr %25, align 4
  switch i32 %1280, label %1611 [
    i32 0, label %1281
    i32 4, label %1453
  ]

1281:                                             ; preds = %1279
  br label %1282

1282:                                             ; preds = %1281, %1224
  %1283 = load ptr, ptr %8, align 8, !tbaa !5
  %1284 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1283, i32 0, i32 18
  %1285 = load i32, ptr %1284, align 8, !tbaa !15
  %1286 = icmp ne i32 %1285, 0
  br i1 %1286, label %1305, label %1287

1287:                                             ; preds = %1282
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  %1288 = load ptr, ptr %21, align 8, !tbaa !5
  %1289 = call i32 @LZ4F_readLE32(ptr noundef %1288)
  store i32 %1289, ptr %57, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %1290 = load ptr, ptr %8, align 8, !tbaa !5
  %1291 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1290, i32 0, i32 16
  %1292 = call i32 @XXH32_digest(ptr noundef %1291)
  store i32 %1292, ptr %58, align 4, !tbaa !11
  br label %1293

1293:                                             ; preds = %1287
  %1294 = load i32, ptr %57, align 4, !tbaa !11
  %1295 = load i32, ptr %58, align 4, !tbaa !11
  %1296 = icmp ne i32 %1294, %1295
  br i1 %1296, label %1297, label %1299

1297:                                             ; preds = %1293
  %1298 = call i64 @LZ4F_returnErrorCode(i32 noundef 18)
  store i64 %1298, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1302

1299:                                             ; preds = %1293
  br label %1300

1300:                                             ; preds = %1299
  br label %1301

1301:                                             ; preds = %1300
  store i32 0, ptr %25, align 4
  br label %1302

1302:                                             ; preds = %1301, %1297
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  %1303 = load i32, ptr %25, align 4
  switch i32 %1303, label %1609 [
    i32 0, label %1304
  ]

1304:                                             ; preds = %1302
  br label %1305

1305:                                             ; preds = %1304, %1282
  store i64 0, ptr %23, align 8, !tbaa !9
  %1306 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1306)
  store i32 0, ptr %22, align 4, !tbaa !11
  br label %1453

1307:                                             ; preds = %107
  %1308 = load ptr, ptr %16, align 8, !tbaa !5
  %1309 = load ptr, ptr %17, align 8, !tbaa !5
  %1310 = ptrtoint ptr %1308 to i64
  %1311 = ptrtoint ptr %1309 to i64
  %1312 = sub i64 %1310, %1311
  %1313 = icmp sge i64 %1312, 4
  br i1 %1313, label %1314, label %1318

1314:                                             ; preds = %1307
  %1315 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %1315, ptr %21, align 8, !tbaa !5
  %1316 = load ptr, ptr %17, align 8, !tbaa !5
  %1317 = getelementptr inbounds i8, ptr %1316, i64 4
  store ptr %1317, ptr %17, align 8, !tbaa !5
  br label %1325

1318:                                             ; preds = %1307
  %1319 = load ptr, ptr %8, align 8, !tbaa !5
  %1320 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1319, i32 0, i32 8
  store i64 4, ptr %1320, align 8, !tbaa !22
  %1321 = load ptr, ptr %8, align 8, !tbaa !5
  %1322 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1321, i32 0, i32 9
  store i64 8, ptr %1322, align 8, !tbaa !23
  %1323 = load ptr, ptr %8, align 8, !tbaa !5
  %1324 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1323, i32 0, i32 3
  store i32 13, ptr %1324, align 4, !tbaa !21
  br label %1325

1325:                                             ; preds = %1318, %1314
  %1326 = load ptr, ptr %8, align 8, !tbaa !5
  %1327 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1326, i32 0, i32 3
  %1328 = load i32, ptr %1327, align 4, !tbaa !21
  %1329 = icmp eq i32 %1328, 13
  br i1 %1329, label %1330, label %1401

1330:                                             ; preds = %1325
  br label %1331

1331:                                             ; preds = %1330, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %1332 = load ptr, ptr %8, align 8, !tbaa !5
  %1333 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1332, i32 0, i32 9
  %1334 = load i64, ptr %1333, align 8, !tbaa !23
  %1335 = load ptr, ptr %8, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1335, i32 0, i32 8
  %1337 = load i64, ptr %1336, align 8, !tbaa !22
  %1338 = sub i64 %1334, %1337
  %1339 = load ptr, ptr %16, align 8, !tbaa !5
  %1340 = load ptr, ptr %17, align 8, !tbaa !5
  %1341 = ptrtoint ptr %1339 to i64
  %1342 = ptrtoint ptr %1340 to i64
  %1343 = sub i64 %1341, %1342
  %1344 = icmp ult i64 %1338, %1343
  br i1 %1344, label %1345, label %1353

1345:                                             ; preds = %1331
  %1346 = load ptr, ptr %8, align 8, !tbaa !5
  %1347 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1346, i32 0, i32 9
  %1348 = load i64, ptr %1347, align 8, !tbaa !23
  %1349 = load ptr, ptr %8, align 8, !tbaa !5
  %1350 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1349, i32 0, i32 8
  %1351 = load i64, ptr %1350, align 8, !tbaa !22
  %1352 = sub i64 %1348, %1351
  br label %1359

1353:                                             ; preds = %1331
  %1354 = load ptr, ptr %16, align 8, !tbaa !5
  %1355 = load ptr, ptr %17, align 8, !tbaa !5
  %1356 = ptrtoint ptr %1354 to i64
  %1357 = ptrtoint ptr %1355 to i64
  %1358 = sub i64 %1356, %1357
  br label %1359

1359:                                             ; preds = %1353, %1345
  %1360 = phi i64 [ %1352, %1345 ], [ %1358, %1353 ]
  store i64 %1360, ptr %59, align 8, !tbaa !9
  %1361 = load ptr, ptr %8, align 8, !tbaa !5
  %1362 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1361, i32 0, i32 19
  %1363 = getelementptr inbounds [19 x i8], ptr %1362, i64 0, i64 0
  %1364 = load ptr, ptr %8, align 8, !tbaa !5
  %1365 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1364, i32 0, i32 8
  %1366 = load i64, ptr %1365, align 8, !tbaa !22
  %1367 = getelementptr inbounds i8, ptr %1363, i64 %1366
  %1368 = load ptr, ptr %17, align 8, !tbaa !5
  %1369 = load i64, ptr %59, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1367, ptr align 1 %1368, i64 %1369, i1 false)
  %1370 = load i64, ptr %59, align 8, !tbaa !9
  %1371 = load ptr, ptr %17, align 8, !tbaa !5
  %1372 = getelementptr inbounds i8, ptr %1371, i64 %1370
  store ptr %1372, ptr %17, align 8, !tbaa !5
  %1373 = load i64, ptr %59, align 8, !tbaa !9
  %1374 = load ptr, ptr %8, align 8, !tbaa !5
  %1375 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1374, i32 0, i32 8
  %1376 = load i64, ptr %1375, align 8, !tbaa !22
  %1377 = add i64 %1376, %1373
  store i64 %1377, ptr %1375, align 8, !tbaa !22
  %1378 = load ptr, ptr %8, align 8, !tbaa !5
  %1379 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1378, i32 0, i32 8
  %1380 = load i64, ptr %1379, align 8, !tbaa !22
  %1381 = load ptr, ptr %8, align 8, !tbaa !5
  %1382 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1381, i32 0, i32 9
  %1383 = load i64, ptr %1382, align 8, !tbaa !23
  %1384 = icmp ult i64 %1380, %1383
  br i1 %1384, label %1385, label %1393

1385:                                             ; preds = %1359
  %1386 = load ptr, ptr %8, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1386, i32 0, i32 9
  %1388 = load i64, ptr %1387, align 8, !tbaa !23
  %1389 = load ptr, ptr %8, align 8, !tbaa !5
  %1390 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1389, i32 0, i32 8
  %1391 = load i64, ptr %1390, align 8, !tbaa !22
  %1392 = sub i64 %1388, %1391
  store i64 %1392, ptr %23, align 8, !tbaa !9
  store i32 0, ptr %22, align 4, !tbaa !11
  store i32 4, ptr %25, align 4
  br label %1398

1393:                                             ; preds = %1359
  %1394 = load ptr, ptr %8, align 8, !tbaa !5
  %1395 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1394, i32 0, i32 19
  %1396 = getelementptr inbounds [19 x i8], ptr %1395, i64 0, i64 0
  %1397 = getelementptr inbounds i8, ptr %1396, i64 4
  store ptr %1397, ptr %21, align 8, !tbaa !5
  store i32 0, ptr %25, align 4
  br label %1398

1398:                                             ; preds = %1393, %1385
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  %1399 = load i32, ptr %25, align 4
  switch i32 %1399, label %1611 [
    i32 0, label %1400
    i32 4, label %1453
  ]

1400:                                             ; preds = %1398
  br label %1401

1401:                                             ; preds = %1400, %1325
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  %1402 = load ptr, ptr %21, align 8, !tbaa !5
  %1403 = call i32 @LZ4F_readLE32(ptr noundef %1402)
  %1404 = zext i32 %1403 to i64
  store i64 %1404, ptr %60, align 8, !tbaa !9
  %1405 = load i64, ptr %60, align 8, !tbaa !9
  %1406 = load ptr, ptr %8, align 8, !tbaa !5
  %1407 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1406, i32 0, i32 1
  %1408 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1407, i32 0, i32 4
  store i64 %1405, ptr %1408, align 8, !tbaa !34
  %1409 = load i64, ptr %60, align 8, !tbaa !9
  %1410 = load ptr, ptr %8, align 8, !tbaa !5
  %1411 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1410, i32 0, i32 9
  store i64 %1409, ptr %1411, align 8, !tbaa !23
  %1412 = load ptr, ptr %8, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1412, i32 0, i32 3
  store i32 14, ptr %1413, align 4, !tbaa !21
  store i32 4, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  br label %1453

1414:                                             ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  %1415 = load ptr, ptr %8, align 8, !tbaa !5
  %1416 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1415, i32 0, i32 9
  %1417 = load i64, ptr %1416, align 8, !tbaa !23
  %1418 = load ptr, ptr %16, align 8, !tbaa !5
  %1419 = load ptr, ptr %17, align 8, !tbaa !5
  %1420 = ptrtoint ptr %1418 to i64
  %1421 = ptrtoint ptr %1419 to i64
  %1422 = sub i64 %1420, %1421
  %1423 = icmp ult i64 %1417, %1422
  br i1 %1423, label %1424, label %1428

1424:                                             ; preds = %1414
  %1425 = load ptr, ptr %8, align 8, !tbaa !5
  %1426 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1425, i32 0, i32 9
  %1427 = load i64, ptr %1426, align 8, !tbaa !23
  br label %1434

1428:                                             ; preds = %1414
  %1429 = load ptr, ptr %16, align 8, !tbaa !5
  %1430 = load ptr, ptr %17, align 8, !tbaa !5
  %1431 = ptrtoint ptr %1429 to i64
  %1432 = ptrtoint ptr %1430 to i64
  %1433 = sub i64 %1431, %1432
  br label %1434

1434:                                             ; preds = %1428, %1424
  %1435 = phi i64 [ %1427, %1424 ], [ %1433, %1428 ]
  store i64 %1435, ptr %61, align 8, !tbaa !9
  %1436 = load i64, ptr %61, align 8, !tbaa !9
  %1437 = load ptr, ptr %17, align 8, !tbaa !5
  %1438 = getelementptr inbounds i8, ptr %1437, i64 %1436
  store ptr %1438, ptr %17, align 8, !tbaa !5
  %1439 = load i64, ptr %61, align 8, !tbaa !9
  %1440 = load ptr, ptr %8, align 8, !tbaa !5
  %1441 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1440, i32 0, i32 9
  %1442 = load i64, ptr %1441, align 8, !tbaa !23
  %1443 = sub i64 %1442, %1439
  store i64 %1443, ptr %1441, align 8, !tbaa !23
  store i32 0, ptr %22, align 4, !tbaa !11
  %1444 = load ptr, ptr %8, align 8, !tbaa !5
  %1445 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1444, i32 0, i32 9
  %1446 = load i64, ptr %1445, align 8, !tbaa !23
  store i64 %1446, ptr %23, align 8, !tbaa !9
  %1447 = load i64, ptr %23, align 8, !tbaa !9
  %1448 = icmp ne i64 %1447, 0
  br i1 %1448, label %1449, label %1450

1449:                                             ; preds = %1434
  store i32 4, ptr %25, align 4
  br label %1452

1450:                                             ; preds = %1434
  %1451 = load ptr, ptr %8, align 8, !tbaa !5
  call void @LZ4F_resetDecompressionContext(ptr noundef %1451)
  store i32 4, ptr %25, align 4
  br label %1452

1452:                                             ; preds = %1450, %1449
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  br label %1453

1453:                                             ; preds = %1452, %1401, %1398, %1305, %1279, %1206, %1189, %1186, %966, %813, %733, %720, %718, %617, %615, %481, %412, %242, %210, %139, %107
  br label %104, !llvm.loop !38

1454:                                             ; preds = %104
  %1455 = load ptr, ptr %8, align 8, !tbaa !5
  %1456 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1455, i32 0, i32 1
  %1457 = getelementptr inbounds %struct.LZ4F_frameInfo_t, ptr %1456, i32 0, i32 1
  %1458 = load i32, ptr %1457, align 4, !tbaa !26
  %1459 = icmp eq i32 %1458, 0
  br i1 %1459, label %1460, label %1595

1460:                                             ; preds = %1454
  %1461 = load ptr, ptr %8, align 8, !tbaa !5
  %1462 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1461, i32 0, i32 11
  %1463 = load ptr, ptr %1462, align 8, !tbaa !36
  %1464 = load ptr, ptr %8, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1464, i32 0, i32 10
  %1466 = load ptr, ptr %1465, align 8, !tbaa !29
  %1467 = icmp ne ptr %1463, %1466
  br i1 %1467, label %1468, label %1595

1468:                                             ; preds = %1460
  %1469 = load ptr, ptr %8, align 8, !tbaa !5
  %1470 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1469, i32 0, i32 11
  %1471 = load ptr, ptr %1470, align 8, !tbaa !36
  %1472 = icmp ne ptr %1471, null
  br i1 %1472, label %1473, label %1595

1473:                                             ; preds = %1468
  %1474 = load ptr, ptr %13, align 8, !tbaa !5
  %1475 = getelementptr inbounds %struct.LZ4F_decompressOptions_t, ptr %1474, i32 0, i32 0
  %1476 = load i32, ptr %1475, align 4, !tbaa !40
  %1477 = icmp ne i32 %1476, 0
  br i1 %1477, label %1595, label %1478

1478:                                             ; preds = %1473
  %1479 = load ptr, ptr %8, align 8, !tbaa !5
  %1480 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1479, i32 0, i32 3
  %1481 = load i32, ptr %1480, align 4, !tbaa !21
  %1482 = sub i32 %1481, 2
  %1483 = icmp ult i32 %1482, 8
  br i1 %1483, label %1484, label %1595

1484:                                             ; preds = %1478
  %1485 = load ptr, ptr %8, align 8, !tbaa !5
  %1486 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1485, i32 0, i32 3
  %1487 = load i32, ptr %1486, align 4, !tbaa !21
  %1488 = icmp eq i32 %1487, 9
  br i1 %1488, label %1489, label %1552

1489:                                             ; preds = %1484
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %1490 = load ptr, ptr %8, align 8, !tbaa !5
  %1491 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1490, i32 0, i32 13
  %1492 = load ptr, ptr %1491, align 8, !tbaa !30
  %1493 = load ptr, ptr %8, align 8, !tbaa !5
  %1494 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1493, i32 0, i32 10
  %1495 = load ptr, ptr %1494, align 8, !tbaa !29
  %1496 = ptrtoint ptr %1492 to i64
  %1497 = ptrtoint ptr %1495 to i64
  %1498 = sub i64 %1496, %1497
  store i64 %1498, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %1499 = load ptr, ptr %8, align 8, !tbaa !5
  %1500 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1499, i32 0, i32 14
  %1501 = load i64, ptr %1500, align 8, !tbaa !32
  %1502 = sub i64 65536, %1501
  store i64 %1502, ptr %63, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %1503 = load ptr, ptr %8, align 8, !tbaa !5
  %1504 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1503, i32 0, i32 11
  %1505 = load ptr, ptr %1504, align 8, !tbaa !36
  %1506 = load ptr, ptr %8, align 8, !tbaa !5
  %1507 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1506, i32 0, i32 12
  %1508 = load i64, ptr %1507, align 8, !tbaa !37
  %1509 = getelementptr inbounds i8, ptr %1505, i64 %1508
  %1510 = load ptr, ptr %8, align 8, !tbaa !5
  %1511 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1510, i32 0, i32 15
  %1512 = load i64, ptr %1511, align 8, !tbaa !31
  %1513 = sub i64 0, %1512
  %1514 = getelementptr inbounds i8, ptr %1509, i64 %1513
  store ptr %1514, ptr %64, align 8, !tbaa !5
  %1515 = load ptr, ptr %8, align 8, !tbaa !5
  %1516 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1515, i32 0, i32 14
  %1517 = load i64, ptr %1516, align 8, !tbaa !32
  %1518 = icmp ugt i64 %1517, 65536
  br i1 %1518, label %1519, label %1520

1519:                                             ; preds = %1489
  store i64 0, ptr %63, align 8, !tbaa !9
  br label %1520

1520:                                             ; preds = %1519, %1489
  %1521 = load i64, ptr %63, align 8, !tbaa !9
  %1522 = load i64, ptr %62, align 8, !tbaa !9
  %1523 = icmp ugt i64 %1521, %1522
  br i1 %1523, label %1524, label %1526

1524:                                             ; preds = %1520
  %1525 = load i64, ptr %62, align 8, !tbaa !9
  store i64 %1525, ptr %63, align 8, !tbaa !9
  br label %1526

1526:                                             ; preds = %1524, %1520
  %1527 = load ptr, ptr %8, align 8, !tbaa !5
  %1528 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1527, i32 0, i32 10
  %1529 = load ptr, ptr %1528, align 8, !tbaa !29
  %1530 = load i64, ptr %62, align 8, !tbaa !9
  %1531 = getelementptr inbounds i8, ptr %1529, i64 %1530
  %1532 = load i64, ptr %63, align 8, !tbaa !9
  %1533 = sub i64 0, %1532
  %1534 = getelementptr inbounds i8, ptr %1531, i64 %1533
  %1535 = load ptr, ptr %64, align 8, !tbaa !5
  %1536 = load i64, ptr %63, align 8, !tbaa !9
  %1537 = sub i64 0, %1536
  %1538 = getelementptr inbounds i8, ptr %1535, i64 %1537
  %1539 = load i64, ptr %63, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1534, ptr align 1 %1538, i64 %1539, i1 false)
  %1540 = load ptr, ptr %8, align 8, !tbaa !5
  %1541 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1540, i32 0, i32 10
  %1542 = load ptr, ptr %1541, align 8, !tbaa !29
  %1543 = load ptr, ptr %8, align 8, !tbaa !5
  %1544 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1543, i32 0, i32 11
  store ptr %1542, ptr %1544, align 8, !tbaa !36
  %1545 = load i64, ptr %62, align 8, !tbaa !9
  %1546 = load ptr, ptr %8, align 8, !tbaa !5
  %1547 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1546, i32 0, i32 15
  %1548 = load i64, ptr %1547, align 8, !tbaa !31
  %1549 = add i64 %1545, %1548
  %1550 = load ptr, ptr %8, align 8, !tbaa !5
  %1551 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1550, i32 0, i32 12
  store i64 %1549, ptr %1551, align 8, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  br label %1594

1552:                                             ; preds = %1484
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #5
  %1553 = load ptr, ptr %8, align 8, !tbaa !5
  %1554 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1553, i32 0, i32 11
  %1555 = load ptr, ptr %1554, align 8, !tbaa !36
  %1556 = load ptr, ptr %8, align 8, !tbaa !5
  %1557 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1556, i32 0, i32 12
  %1558 = load i64, ptr %1557, align 8, !tbaa !37
  %1559 = getelementptr inbounds i8, ptr %1555, i64 %1558
  store ptr %1559, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %1560 = load ptr, ptr %8, align 8, !tbaa !5
  %1561 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1560, i32 0, i32 12
  %1562 = load i64, ptr %1561, align 8, !tbaa !37
  %1563 = icmp ult i64 %1562, 65536
  br i1 %1563, label %1564, label %1568

1564:                                             ; preds = %1552
  %1565 = load ptr, ptr %8, align 8, !tbaa !5
  %1566 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1565, i32 0, i32 12
  %1567 = load i64, ptr %1566, align 8, !tbaa !37
  br label %1569

1568:                                             ; preds = %1552
  br label %1569

1569:                                             ; preds = %1568, %1564
  %1570 = phi i64 [ %1567, %1564 ], [ 65536, %1568 ]
  store i64 %1570, ptr %66, align 8, !tbaa !9
  %1571 = load ptr, ptr %8, align 8, !tbaa !5
  %1572 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1571, i32 0, i32 10
  %1573 = load ptr, ptr %1572, align 8, !tbaa !29
  %1574 = load ptr, ptr %65, align 8, !tbaa !5
  %1575 = load i64, ptr %66, align 8, !tbaa !9
  %1576 = sub i64 0, %1575
  %1577 = getelementptr inbounds i8, ptr %1574, i64 %1576
  %1578 = load i64, ptr %66, align 8, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1573, ptr align 1 %1577, i64 %1578, i1 false)
  %1579 = load ptr, ptr %8, align 8, !tbaa !5
  %1580 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1579, i32 0, i32 10
  %1581 = load ptr, ptr %1580, align 8, !tbaa !29
  %1582 = load ptr, ptr %8, align 8, !tbaa !5
  %1583 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1582, i32 0, i32 11
  store ptr %1581, ptr %1583, align 8, !tbaa !36
  %1584 = load i64, ptr %66, align 8, !tbaa !9
  %1585 = load ptr, ptr %8, align 8, !tbaa !5
  %1586 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1585, i32 0, i32 12
  store i64 %1584, ptr %1586, align 8, !tbaa !37
  %1587 = load ptr, ptr %8, align 8, !tbaa !5
  %1588 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1587, i32 0, i32 10
  %1589 = load ptr, ptr %1588, align 8, !tbaa !29
  %1590 = load i64, ptr %66, align 8, !tbaa !9
  %1591 = getelementptr inbounds i8, ptr %1589, i64 %1590
  %1592 = load ptr, ptr %8, align 8, !tbaa !5
  %1593 = getelementptr inbounds %struct.LZ4F_dctx_s, ptr %1592, i32 0, i32 13
  store ptr %1591, ptr %1593, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  br label %1594

1594:                                             ; preds = %1569, %1526
  br label %1595

1595:                                             ; preds = %1594, %1478, %1473, %1468, %1460, %1454
  %1596 = load ptr, ptr %17, align 8, !tbaa !5
  %1597 = load ptr, ptr %15, align 8, !tbaa !5
  %1598 = ptrtoint ptr %1596 to i64
  %1599 = ptrtoint ptr %1597 to i64
  %1600 = sub i64 %1598, %1599
  %1601 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %1600, ptr %1601, align 8, !tbaa !9
  %1602 = load ptr, ptr %20, align 8, !tbaa !5
  %1603 = load ptr, ptr %18, align 8, !tbaa !5
  %1604 = ptrtoint ptr %1602 to i64
  %1605 = ptrtoint ptr %1603 to i64
  %1606 = sub i64 %1604, %1605
  %1607 = load ptr, ptr %10, align 8, !tbaa !5
  store i64 %1606, ptr %1607, align 8, !tbaa !9
  %1608 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %1608, ptr %7, align 8
  store i32 1, ptr %25, align 4
  br label %1609

1609:                                             ; preds = %1595, %1302, %1196, %1114, %966, %847, %718, %481, %323, %231, %150, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #5
  %1610 = load i64, ptr %7, align 8
  ret i64 %1610

1611:                                             ; preds = %1398, %1279, %813, %615, %412
  unreachable
}

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 4}
!14 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12}
!15 = !{!16, !12, i64 264}
!16 = !{!"LZ4F_dctx_s", !17, i64 0, !18, i64 32, !12, i64 64, !12, i64 68, !10, i64 72, !10, i64 80, !10, i64 88, !6, i64 96, !10, i64 104, !10, i64 112, !6, i64 120, !6, i64 128, !10, i64 136, !6, i64 144, !10, i64 152, !10, i64 160, !20, i64 168, !20, i64 216, !12, i64 264, !7, i64 268}
!17 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!18 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !19, i64 16, !12, i64 24, !12, i64 28}
!19 = !{!"long long", !7, i64 0}
!20 = !{!"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}
!21 = !{!16, !12, i64 68}
!22 = !{!16, !10, i64 104}
!23 = !{!16, !10, i64 112}
!24 = !{!16, !12, i64 40}
!25 = !{!16, !10, i64 80}
!26 = !{!16, !12, i64 36}
!27 = !{!16, !10, i64 88}
!28 = !{!16, !6, i64 96}
!29 = !{!16, !6, i64 120}
!30 = !{!16, !6, i64 144}
!31 = !{!16, !10, i64 160}
!32 = !{!16, !10, i64 152}
!33 = !{!16, !12, i64 60}
!34 = !{!16, !19, i64 48}
!35 = !{!16, !10, i64 72}
!36 = !{!16, !6, i64 128}
!37 = !{!16, !10, i64 136}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = !{!14, !12, i64 0}


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

%struct.LZ4F_CustomMem = type { ptr, ptr, ptr, ptr }

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

; Function Attrs: nounwind uwtable
declare hidden i64 @LZ4F_returnErrorCode(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: nounwind uwtable
declare hidden void @LZ4F_free(ptr noundef, ptr noundef byval(%struct.LZ4F_CustomMem) align 8) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden ptr @LZ4F_malloc(i64 noundef, ptr noundef byval(%struct.LZ4F_CustomMem) align 8) local_unnamed_addr #0

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

declare i32 @XXH32_digest(ptr noundef) local_unnamed_addr #3

; 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
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %12, label %9

9:                                                ; preds = %6
  %10 = load i64, ptr %2, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %1, i64 %10
  br label %12

12:                                               ; preds = %6, %9
  %13 = phi ptr [ %11, %9 ], [ null, %6 ]
  %14 = icmp eq ptr %5, null
  store i64 0, ptr %4, align 8, !tbaa !5
  store i64 0, ptr %2, align 8, !tbaa !5
  br i1 %14, label %.cont, label %.else

.else:                                            ; preds = %12
  %.sroa.gep697 = getelementptr inbounds i8, ptr %5, i64 4
  %.else.val = load i32, ptr %.sroa.gep697, align 4, !tbaa !9
  br label %.cont

.cont:                                            ; preds = %12, %.else
  %15 = phi i32 [ 0, %12 ], [ %.else.val, %.else ]
  %16 = icmp ne i32 %15, 0
  %17 = zext i1 %16 to i32
  %18 = getelementptr inbounds i8, ptr %0, i64 264
  %19 = load i32, ptr %18, align 8, !tbaa !12
  %20 = or i32 %19, %17
  store i32 %20, ptr %18, align 8, !tbaa !12
  %21 = getelementptr inbounds i8, ptr %0, i64 68
  %22 = getelementptr inbounds i8, ptr %0, i64 112
  %23 = ptrtoint ptr %8 to i64
  %24 = getelementptr inbounds i8, ptr %0, i64 104
  %25 = getelementptr inbounds i8, ptr %0, i64 268
  %26 = getelementptr inbounds i8, ptr %0, i64 272
  %27 = getelementptr inbounds i8, ptr %0, i64 48
  %28 = getelementptr inbounds i8, ptr %0, i64 72
  %29 = getelementptr inbounds i8, ptr %0, i64 40
  %30 = getelementptr inbounds i8, ptr %0, i64 96
  %31 = getelementptr inbounds i8, ptr %0, i64 168
  %32 = getelementptr inbounds i8, ptr %0, i64 60
  %33 = ptrtoint ptr %13 to i64
  %34 = getelementptr inbounds i8, ptr %0, i64 80
  %35 = getelementptr inbounds i8, ptr %0, i64 128
  %36 = getelementptr inbounds i8, ptr %0, i64 136
  %37 = getelementptr inbounds i8, ptr %0, i64 144
  %38 = getelementptr inbounds i8, ptr %0, i64 36
  %39 = getelementptr inbounds i8, ptr %0, i64 120
  %40 = getelementptr inbounds i8, ptr %0, i64 152
  %41 = getelementptr inbounds i8, ptr %0, i64 160
  %42 = getelementptr inbounds i8, ptr %0, i64 216
  %43 = getelementptr inbounds i8, ptr %0, i64 88
  br label %44

44:                                               ; preds = %.cont, %.thread714
  %.0507824 = phi ptr [ %3, %.cont ], [ %.16523, %.thread714 ]
  %.0526821 = phi ptr [ %1, %.cont ], [ %.4530, %.thread714 ]
  %.0563818 = phi i64 [ 1, %.cont ], [ %.11574, %.thread714 ]
  %45 = load i32, ptr %21, align 4, !tbaa !19
  switch i32 %45, label %.thread714 [
    i32 0, label %46
    i32 1, label %._crit_edge841
    i32 2, label %75
    i32 3, label %104
    i32 4, label %._crit_edge857
    i32 5, label %147
    i32 6, label %189
    i32 7, label %210
    i32 8, label %218
    i32 9, label %._crit_edge848
    i32 10, label %358
    i32 11, label %._crit_edge856
    i32 12, label %391
    i32 13, label %._crit_edge855
    i32 14, label %411
  ]

._crit_edge857:                                   ; preds = %44
  %.pre858 = ptrtoint ptr %.0507824 to i64
  %.pre860 = sub i64 %23, %.pre858
  br label %110

._crit_edge856:                                   ; preds = %44
  %.pre866 = ptrtoint ptr %.0507824 to i64
  %.pre868 = sub i64 %23, %.pre866
  br label %371

._crit_edge855:                                   ; preds = %44
  %.pre870 = ptrtoint ptr %.0507824 to i64
  %.pre872 = sub i64 %23, %.pre870
  br label %397

._crit_edge848:                                   ; preds = %44
  %.pre832.pre = load i64, ptr %41, align 8, !tbaa !20
  %.pre834.pre = load i64, ptr %40, align 8, !tbaa !21
  br label %339

._crit_edge841:                                   ; preds = %44
  %.pre842 = load i64, ptr %22, align 8, !tbaa !22
  %.pre843 = load i64, ptr %24, align 8, !tbaa !23
  %.pre852 = ptrtoint ptr %.0507824 to i64
  %.pre853 = sub i64 %23, %.pre852
  br label %57

46:                                               ; preds = %44
  %47 = ptrtoint ptr %.0507824 to i64
  %48 = sub i64 %23, %47
  %49 = icmp ugt i64 %48, 18
  br i1 %49, label %50, label %54

50:                                               ; preds = %46
  %51 = tail call i64 @LZ4F_decodeHeader(ptr noundef nonnull %0, ptr noundef %.0507824, i64 noundef %48)
  %52 = tail call i32 @LZ4F_isError(i64 noundef %51)
  %.not677 = icmp eq i32 %52, 0
  %53 = getelementptr inbounds i8, ptr %.0507824, i64 %51
  br i1 %.not677, label %.thread714, label %.loopexit

54:                                               ; preds = %46
  store i64 0, ptr %24, align 8, !tbaa !23
  %55 = icmp eq ptr %8, %.0507824
  br i1 %55, label %.loopexit, label %56

56:                                               ; preds = %54
  store i64 7, ptr %22, align 8, !tbaa !22
  store i32 1, ptr %21, align 4, !tbaa !19
  br label %57

57:                                               ; preds = %._crit_edge841, %56
  %.pre-phi854 = phi i64 [ %.pre853, %._crit_edge841 ], [ %48, %56 ]
  %58 = phi i64 [ %.pre843, %._crit_edge841 ], [ 0, %56 ]
  %59 = phi i64 [ %.pre842, %._crit_edge841 ], [ 7, %56 ]
  %60 = sub i64 %59, %58
  %. = tail call i64 @llvm.umin.i64(i64 %60, i64 %.pre-phi854)
  %61 = getelementptr inbounds i8, ptr %25, i64 %58
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %61, ptr align 1 %.0507824, i64 %., i1 false)
  %62 = load i64, ptr %24, align 8, !tbaa !23
  %63 = add i64 %62, %.
  store i64 %63, ptr %24, align 8, !tbaa !23
  %64 = getelementptr inbounds i8, ptr %.0507824, i64 %.
  %65 = load i64, ptr %22, align 8, !tbaa !22
  %66 = icmp ult i64 %63, %65
  br i1 %66, label %67, label %69

67:                                               ; preds = %57
  %reass.sub825 = sub i64 %65, %63
  %68 = add i64 %reass.sub825, 4
  br label %.thread714.thread

69:                                               ; preds = %57
  %70 = tail call i64 @LZ4F_decodeHeader(ptr noundef nonnull %0, ptr noundef nonnull %25, i64 noundef %65)
  %71 = tail call i32 @LZ4F_isError(i64 noundef %70)
  %.not676 = icmp eq i32 %71, 0
  br i1 %.not676, label %.thread714, label %72

72:                                               ; preds = %69
  %73 = load i64, ptr %22, align 8, !tbaa !22
  %74 = tail call i64 @LZ4F_decodeHeader(ptr noundef nonnull %0, ptr noundef nonnull %25, i64 noundef %73)
  br label %.loopexit

75:                                               ; preds = %44
  %76 = load i32, ptr %29, align 8, !tbaa !24
  %.not673 = icmp eq i32 %76, 0
  br i1 %.not673, label %79, label %77

77:                                               ; preds = %75
  %78 = tail call i32 @XXH32_reset(ptr noundef nonnull %31, i32 noundef 0) #5
  br label %79

79:                                               ; preds = %77, %75
  %80 = load i64, ptr %34, align 8, !tbaa !25
  %81 = load i32, ptr %38, align 4, !tbaa !26
  %82 = icmp eq i32 %81, 0
  %83 = select i1 %82, i64 131072, i64 0
  %84 = add i64 %83, %80
  %85 = load i64, ptr %43, align 8, !tbaa !27
  %86 = icmp ugt i64 %84, %85
  br i1 %86, label %87, label %._crit_edge838

._crit_edge838:                                   ; preds = %79
  %.pre839 = load ptr, ptr %39, align 8, !tbaa !28
  br label %102

87:                                               ; preds = %79
  store i64 0, ptr %43, align 8, !tbaa !27
  %88 = load ptr, ptr %30, align 8, !tbaa !29
  tail call void @LZ4F_free(ptr noundef %88, ptr noundef nonnull byval(%struct.LZ4F_CustomMem) align 8 %0)
  %89 = load i64, ptr %34, align 8, !tbaa !25
  %90 = add i64 %89, 4
  %91 = tail call ptr @LZ4F_malloc(i64 noundef %90, ptr noundef nonnull byval(%struct.LZ4F_CustomMem) align 8 %0)
  store ptr %91, ptr %30, align 8, !tbaa !29
  %92 = icmp eq ptr %91, null
  br i1 %92, label %93, label %95

93:                                               ; preds = %87
  %94 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 9)
  br label %.loopexit

95:                                               ; preds = %87
  %96 = load ptr, ptr %39, align 8, !tbaa !28
  tail call void @LZ4F_free(ptr noundef %96, ptr noundef nonnull byval(%struct.LZ4F_CustomMem) align 8 %0)
  %97 = tail call ptr @LZ4F_malloc(i64 noundef %84, ptr noundef nonnull byval(%struct.LZ4F_CustomMem) align 8 %0)
  store ptr %97, ptr %39, align 8, !tbaa !28
  %98 = icmp eq ptr %97, null
  br i1 %98, label %99, label %101

99:                                               ; preds = %95
  %100 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 9)
  br label %.loopexit

101:                                              ; preds = %95
  store i64 %84, ptr %43, align 8, !tbaa !27
  br label %102

102:                                              ; preds = %._crit_edge838, %101
  %103 = phi ptr [ %.pre839, %._crit_edge838 ], [ %97, %101 ]
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %24, i8 0, i64 16, i1 false)
  store ptr %103, ptr %37, align 8, !tbaa !30
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %40, i8 0, i64 16, i1 false)
  store i32 3, ptr %21, align 4, !tbaa !19
  br label %104

104:                                              ; preds = %102, %44
  %105 = ptrtoint ptr %.0507824 to i64
  %106 = sub i64 %23, %105
  %107 = icmp ugt i64 %106, 3
  br i1 %107, label %108, label %.thread704

.thread704:                                       ; preds = %104
  store i64 0, ptr %24, align 8, !tbaa !23
  store i32 4, ptr %21, align 4, !tbaa !19
  br label %110

108:                                              ; preds = %104
  %109 = getelementptr inbounds i8, ptr %.0507824, i64 4
  br label %123

110:                                              ; preds = %._crit_edge857, %.thread704
  %.pre-phi861 = phi i64 [ %.pre860, %._crit_edge857 ], [ %106, %.thread704 ]
  %111 = load i64, ptr %24, align 8, !tbaa !23
  %112 = sub i64 4, %111
  %113 = tail call i64 @llvm.umin.i64(i64 %112, i64 %.pre-phi861)
  %114 = load ptr, ptr %30, align 8, !tbaa !29
  %115 = getelementptr inbounds i8, ptr %114, i64 %111
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %115, ptr align 1 %.0507824, i64 %113, i1 false)
  %116 = getelementptr inbounds i8, ptr %.0507824, i64 %113
  %117 = load i64, ptr %24, align 8, !tbaa !23
  %118 = add i64 %117, %113
  store i64 %118, ptr %24, align 8, !tbaa !23
  %119 = icmp ult i64 %118, 4
  br i1 %119, label %121, label %.thread707

.thread707:                                       ; preds = %110
  %120 = load ptr, ptr %30, align 8, !tbaa !29
  br label %123

121:                                              ; preds = %110
  %122 = sub nuw nsw i64 4, %118
  br label %.thread714.thread

123:                                              ; preds = %108, %.thread707
  %.4535 = phi ptr [ %.0507824, %108 ], [ %120, %.thread707 ]
  %.4511 = phi ptr [ %109, %108 ], [ %116, %.thread707 ]
  %124 = tail call i32 @LZ4F_readLE32(ptr noundef %.4535)
  %125 = and i32 %124, 2147483647
  %126 = zext nneg i32 %125 to i64
  %127 = load i32, ptr %32, align 4, !tbaa !31
  %128 = zext i32 %127 to i64
  %129 = shl nuw nsw i64 %128, 2
  %130 = icmp eq i32 %124, 0
  br i1 %130, label %131, label %132

131:                                              ; preds = %123
  store i32 10, ptr %21, align 4, !tbaa !19
  br label %.thread714

132:                                              ; preds = %123
  %133 = load i64, ptr %34, align 8, !tbaa !25
  %134 = icmp ult i64 %133, %126
  br i1 %134, label %145, label %135

135:                                              ; preds = %132
  %.not674 = icmp sgt i32 %124, -1
  br i1 %.not674, label %140, label %136

136:                                              ; preds = %135
  store i64 %126, ptr %22, align 8, !tbaa !22
  %.not675 = icmp eq i32 %127, 0
  br i1 %.not675, label %139, label %137

137:                                              ; preds = %136
  %138 = tail call i32 @XXH32_reset(ptr noundef nonnull %42, i32 noundef 0) #5
  br label %139

139:                                              ; preds = %137, %136
  store i32 5, ptr %21, align 4, !tbaa !19
  br label %.thread714

140:                                              ; preds = %135
  %141 = add nuw nsw i64 %129, %126
  store i64 %141, ptr %22, align 8, !tbaa !22
  store i32 7, ptr %21, align 4, !tbaa !19
  %142 = icmp ne ptr %.0526821, %13
  %143 = icmp ne ptr %.4511, %8
  %or.cond678.not = select i1 %142, i1 %143, i1 false
  %144 = add nuw nsw i64 %141, 4
  %.3566 = select i1 %or.cond678.not, i64 %.0563818, i64 %144
  %.3551 = zext i1 %or.cond678.not to i32
  br label %.thread714

145:                                              ; preds = %132
  %146 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 2)
  br label %.loopexit

147:                                              ; preds = %44
  %148 = icmp eq ptr %.0526821, null
  %.pre837 = load i64, ptr %22, align 8, !tbaa !22
  br i1 %148, label %176, label %149

149:                                              ; preds = %147
  %150 = ptrtoint ptr %.0507824 to i64
  %151 = sub i64 %23, %150
  %152 = ptrtoint ptr %.0526821 to i64
  %153 = sub i64 %33, %152
  %.679 = tail call i64 @llvm.umin.i64(i64 %151, i64 %153)
  %154 = tail call i64 @llvm.umin.i64(i64 %.pre837, i64 %.679)
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %.0526821, ptr align 1 %.0507824, i64 %154, i1 false)
  %155 = load i32, ptr %18, align 8, !tbaa !12
  %.not667 = icmp eq i32 %155, 0
  br i1 %.not667, label %156, label %164

156:                                              ; preds = %149
  %157 = load i32, ptr %32, align 4, !tbaa !31
  %.not668 = icmp eq i32 %157, 0
  br i1 %.not668, label %160, label %158

158:                                              ; preds = %156
  %159 = tail call i32 @XXH32_update(ptr noundef nonnull %42, ptr noundef %.0507824, i64 noundef %154) #5
  br label %160

160:                                              ; preds = %158, %156
  %161 = load i32, ptr %29, align 8, !tbaa !24
  %.not669 = icmp eq i32 %161, 0
  br i1 %.not669, label %164, label %162

162:                                              ; preds = %160
  %163 = tail call i32 @XXH32_update(ptr noundef nonnull %31, ptr noundef %.0507824, i64 noundef %154) #5
  br label %164

164:                                              ; preds = %160, %162, %149
  %165 = load i64, ptr %27, align 8, !tbaa !32
  %.not670 = icmp eq i64 %165, 0
  br i1 %.not670, label %169, label %166

166:                                              ; preds = %164
  %167 = load i64, ptr %28, align 8, !tbaa !33
  %168 = sub i64 %167, %154
  store i64 %168, ptr %28, align 8, !tbaa !33
  br label %169

169:                                              ; preds = %166, %164
  %170 = load i32, ptr %38, align 4, !tbaa !26
  %171 = icmp eq i32 %170, 0
  br i1 %171, label %172, label %173

172:                                              ; preds = %169
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef nonnull %.0526821, i64 noundef %154, ptr noundef %1, i32 noundef 0)
  br label %173

173:                                              ; preds = %172, %169
  %174 = getelementptr inbounds i8, ptr %.0507824, i64 %154
  %175 = getelementptr inbounds i8, ptr %.0526821, i64 %154
  %.pre836 = load i64, ptr %22, align 8, !tbaa !22
  br label %176

176:                                              ; preds = %147, %173
  %177 = phi i64 [ %.pre836, %173 ], [ %.pre837, %147 ]
  %.0590 = phi i64 [ %154, %173 ], [ 0, %147 ]
  %.1527 = phi ptr [ %175, %173 ], [ null, %147 ]
  %.5512 = phi ptr [ %174, %173 ], [ %.0507824, %147 ]
  %178 = icmp eq i64 %.0590, %177
  br i1 %178, label %179, label %183

179:                                              ; preds = %176
  %180 = load i32, ptr %32, align 4, !tbaa !31
  %.not671 = icmp eq i32 %180, 0
  br i1 %.not671, label %182, label %181

181:                                              ; preds = %179
  store i64 0, ptr %24, align 8, !tbaa !23
  br label %182

182:                                              ; preds = %181, %179
  %storemerge = phi i32 [ 6, %181 ], [ 3, %179 ]
  store i32 %storemerge, ptr %21, align 4, !tbaa !19
  br label %.thread714

183:                                              ; preds = %176
  %184 = sub i64 %177, %.0590
  store i64 %184, ptr %22, align 8, !tbaa !22
  %185 = load i32, ptr %32, align 4, !tbaa !31
  %.not672 = icmp eq i32 %185, 0
  %186 = select i1 %.not672, i64 0, i64 4
  %187 = add i64 %184, 4
  %188 = add i64 %187, %186
  br label %.thread714.thread

189:                                              ; preds = %44
  %190 = ptrtoint ptr %.0507824 to i64
  %191 = sub i64 %23, %190
  %192 = icmp sgt i64 %191, 3
  %.pre835 = load i64, ptr %24, align 8, !tbaa !23
  %193 = icmp eq i64 %.pre835, 0
  %or.cond933 = select i1 %192, i1 %193, i1 false
  br i1 %or.cond933, label %194, label %196

194:                                              ; preds = %189
  %195 = getelementptr inbounds i8, ptr %.0507824, i64 4
  br label %204

196:                                              ; preds = %189
  %197 = sub i64 4, %.pre835
  %198 = tail call i64 @llvm.umin.i64(i64 %197, i64 %191)
  %199 = getelementptr inbounds i8, ptr %25, i64 %.pre835
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %199, ptr align 1 %.0507824, i64 %198, i1 false)
  %200 = load i64, ptr %24, align 8, !tbaa !23
  %201 = add i64 %200, %198
  store i64 %201, ptr %24, align 8, !tbaa !23
  %202 = getelementptr inbounds i8, ptr %.0507824, i64 %198
  %203 = icmp ugt i64 %201, 3
  br i1 %203, label %204, label %.thread714.thread

204:                                              ; preds = %196, %194
  %.2593 = phi ptr [ %.0507824, %194 ], [ %25, %196 ]
  %.6513 = phi ptr [ %195, %194 ], [ %202, %196 ]
  %205 = load i32, ptr %18, align 8, !tbaa !12
  %.not665 = icmp eq i32 %205, 0
  br i1 %.not665, label %206, label %.thread723

206:                                              ; preds = %204
  %207 = tail call i32 @LZ4F_readLE32(ptr noundef %.2593)
  %208 = tail call i32 @XXH32_digest(ptr noundef nonnull %42) #5
  %.not666 = icmp eq i32 %207, %208
  br i1 %.not666, label %.thread723, label %.thread733

.thread733:                                       ; preds = %206
  %209 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 7)
  br label %.loopexit

.thread723:                                       ; preds = %206, %204
  store i32 3, ptr %21, align 4, !tbaa !19
  br label %.thread714

210:                                              ; preds = %44
  %211 = ptrtoint ptr %.0507824 to i64
  %212 = sub i64 %23, %211
  %213 = load i64, ptr %22, align 8, !tbaa !22
  %214 = icmp ult i64 %212, %213
  br i1 %214, label %215, label %216

215:                                              ; preds = %210
  store i64 0, ptr %24, align 8, !tbaa !23
  store i32 8, ptr %21, align 4, !tbaa !19
  br label %.thread714

216:                                              ; preds = %210
  %217 = getelementptr inbounds i8, ptr %.0507824, i64 %213
  br label %238

218:                                              ; preds = %44
  %219 = load i64, ptr %22, align 8, !tbaa !22
  %220 = load i64, ptr %24, align 8, !tbaa !23
  %221 = sub i64 %219, %220
  %222 = ptrtoint ptr %.0507824 to i64
  %223 = sub i64 %23, %222
  %224 = tail call i64 @llvm.umin.i64(i64 %221, i64 %223)
  %225 = load ptr, ptr %30, align 8, !tbaa !29
  %226 = getelementptr inbounds i8, ptr %225, i64 %220
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %226, ptr align 1 %.0507824, i64 %224, i1 false)
  %227 = load i64, ptr %24, align 8, !tbaa !23
  %228 = add i64 %227, %224
  store i64 %228, ptr %24, align 8, !tbaa !23
  %229 = getelementptr inbounds i8, ptr %.0507824, i64 %224
  %230 = load i64, ptr %22, align 8, !tbaa !22
  %231 = icmp ult i64 %228, %230
  br i1 %231, label %233, label %.thread739

.thread739:                                       ; preds = %218
  %232 = load ptr, ptr %30, align 8, !tbaa !29
  br label %238

233:                                              ; preds = %218
  %234 = load i32, ptr %32, align 4, !tbaa !31
  %.not653 = icmp eq i32 %234, 0
  %235 = select i1 %.not653, i64 0, i64 4
  %reass.sub = sub i64 %230, %228
  %236 = add i64 %reass.sub, 4
  %237 = add i64 %236, %235
  br label %.thread714.thread

238:                                              ; preds = %.thread739, %216
  %239 = phi i64 [ %213, %216 ], [ %230, %.thread739 ]
  %.6537 = phi ptr [ %.0507824, %216 ], [ %232, %.thread739 ]
  %.8515 = phi ptr [ %217, %216 ], [ %229, %.thread739 ]
  %240 = load i32, ptr %32, align 4, !tbaa !31
  %.not654 = icmp eq i32 %240, 0
  br i1 %.not654, label %.thread745, label %241

241:                                              ; preds = %238
  %242 = add i64 %239, -4
  store i64 %242, ptr %22, align 8, !tbaa !22
  %243 = getelementptr inbounds i8, ptr %.6537, i64 %242
  %244 = tail call i32 @LZ4F_readLE32(ptr noundef %243)
  %245 = load i64, ptr %22, align 8, !tbaa !22
  %246 = tail call i32 @XXH32(ptr noundef %.6537, i64 noundef %245, i32 noundef 0) #5
  %.not655 = icmp eq i32 %244, %246
  br i1 %.not655, label %.thread745, label %247

247:                                              ; preds = %241
  %248 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 7)
  br label %.loopexit

.thread745:                                       ; preds = %241, %238
  %249 = ptrtoint ptr %.0526821 to i64
  %250 = sub i64 %33, %249
  %251 = load i64, ptr %34, align 8, !tbaa !25
  %.not656 = icmp ult i64 %250, %251
  %.pre828.pre = load ptr, ptr %35, align 8, !tbaa !34
  br i1 %.not656, label %290, label %252

252:                                              ; preds = %.thread745
  %.not657 = icmp eq ptr %.pre828.pre, null
  %.pre = load i64, ptr %36, align 8, !tbaa !35
  br i1 %.not657, label %257, label %253

253:                                              ; preds = %252
  %254 = getelementptr inbounds i8, ptr %.pre828.pre, i64 %.pre
  %255 = load ptr, ptr %37, align 8, !tbaa !30
  %256 = icmp eq ptr %254, %255
  br i1 %256, label %290, label %257

257:                                              ; preds = %253, %252
  %258 = icmp ne ptr %.pre828.pre, null
  %259 = icmp ugt i64 %.pre, 1073741824
  %or.cond = select i1 %258, i1 %259, i1 false
  %260 = getelementptr i8, ptr %.pre828.pre, i64 %.pre
  %261 = getelementptr i8, ptr %260, i64 -65536
  %262 = trunc i64 %.pre to i32
  %.0596 = select i1 %or.cond, ptr %261, ptr %.pre828.pre
  %263 = load i64, ptr %22, align 8, !tbaa !22
  %264 = trunc i64 %263 to i32
  %265 = trunc i64 %251 to i32
  %266 = select i1 %or.cond, i32 65536, i32 %262
  %267 = tail call i32 @LZ4_decompress_safe_usingDict(ptr noundef %.6537, ptr noundef %.0526821, i32 noundef %264, i32 noundef %265, ptr noundef %.0596, i32 noundef %266) #5
  %268 = icmp sgt i32 %267, -1
  br i1 %268, label %269, label %288

269:                                              ; preds = %257
  %270 = load i32, ptr %29, align 8, !tbaa !24
  %.not658 = icmp eq i32 %270, 0
  br i1 %.not658, label %276, label %271

271:                                              ; preds = %269
  %272 = load i32, ptr %18, align 8, !tbaa !12
  %.not659 = icmp eq i32 %272, 0
  br i1 %.not659, label %273, label %276

273:                                              ; preds = %271
  %274 = zext nneg i32 %267 to i64
  %275 = tail call i32 @XXH32_update(ptr noundef nonnull %31, ptr noundef %.0526821, i64 noundef %274) #5
  br label %276

276:                                              ; preds = %273, %271, %269
  %277 = load i64, ptr %27, align 8, !tbaa !32
  %.not660 = icmp eq i64 %277, 0
  br i1 %.not660, label %282, label %278

278:                                              ; preds = %276
  %279 = zext nneg i32 %267 to i64
  %280 = load i64, ptr %28, align 8, !tbaa !33
  %281 = sub i64 %280, %279
  store i64 %281, ptr %28, align 8, !tbaa !33
  br label %282

282:                                              ; preds = %278, %276
  %283 = load i32, ptr %38, align 4, !tbaa !26
  %284 = icmp eq i32 %283, 0
  %285 = zext nneg i32 %267 to i64
  br i1 %284, label %286, label %.thread747

286:                                              ; preds = %282
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef %.0526821, i64 noundef %285, ptr noundef %1, i32 noundef 0)
  br label %.thread747

.thread747:                                       ; preds = %282, %286
  %287 = getelementptr inbounds i8, ptr %.0526821, i64 %285
  store i32 3, ptr %21, align 4, !tbaa !19
  br label %.thread714

288:                                              ; preds = %257
  %289 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 16)
  br label %.loopexit

290:                                              ; preds = %253, %.thread745
  %291 = load i32, ptr %38, align 4, !tbaa !26
  %292 = icmp eq i32 %291, 0
  br i1 %292, label %293, label %._crit_edge

._crit_edge:                                      ; preds = %290
  %.pre829 = load i64, ptr %36, align 8, !tbaa !35
  %.pre830 = load ptr, ptr %37, align 8, !tbaa !30
  br label %308

293:                                              ; preds = %290
  %294 = load ptr, ptr %39, align 8, !tbaa !28
  %295 = icmp eq ptr %.pre828.pre, %294
  %296 = load i64, ptr %36, align 8, !tbaa !35
  br i1 %295, label %297, label %306

297:                                              ; preds = %293
  %298 = icmp ugt i64 %296, 131072
  br i1 %298, label %299, label %302

299:                                              ; preds = %297
  %300 = getelementptr inbounds i8, ptr %.pre828.pre, i64 %296
  %301 = getelementptr inbounds i8, ptr %300, i64 -65536
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(65536) %294, ptr noundef nonnull align 1 dereferenceable(65536) %301, i64 65536, i1 false)
  store i64 65536, ptr %36, align 8, !tbaa !35
  %.pre826 = load ptr, ptr %39, align 8, !tbaa !28
  %.pre827.pre = load ptr, ptr %35, align 8, !tbaa !34
  %.pre831.pre = load i64, ptr %34, align 8, !tbaa !25
  br label %302

302:                                              ; preds = %299, %297
  %.pre831 = phi i64 [ %.pre831.pre, %299 ], [ %251, %297 ]
  %.pre827 = phi ptr [ %.pre827.pre, %299 ], [ %.pre828.pre, %297 ]
  %303 = phi i64 [ 65536, %299 ], [ %296, %297 ]
  %304 = phi ptr [ %.pre826, %299 ], [ %294, %297 ]
  %305 = getelementptr inbounds i8, ptr %304, i64 %303
  store ptr %305, ptr %37, align 8, !tbaa !30
  br label %308

306:                                              ; preds = %293
  %spec.select = tail call i64 @llvm.umin.i64(i64 %296, i64 65536)
  %307 = getelementptr inbounds i8, ptr %294, i64 %spec.select
  store ptr %307, ptr %37, align 8, !tbaa !30
  br label %308

308:                                              ; preds = %._crit_edge, %302, %306
  %309 = phi i64 [ %.pre831, %302 ], [ %251, %306 ], [ %251, %._crit_edge ]
  %310 = phi ptr [ %305, %302 ], [ %307, %306 ], [ %.pre830, %._crit_edge ]
  %311 = phi i64 [ %303, %302 ], [ %296, %306 ], [ %.pre829, %._crit_edge ]
  %312 = phi ptr [ %.pre827, %302 ], [ %.pre828.pre, %306 ], [ %.pre828.pre, %._crit_edge ]
  %313 = icmp ne ptr %312, null
  %314 = icmp ugt i64 %311, 1073741824
  %or.cond11 = select i1 %313, i1 %314, i1 false
  %315 = getelementptr i8, ptr %312, i64 %311
  %316 = getelementptr i8, ptr %315, i64 -65536
  %317 = trunc i64 %311 to i32
  %.0598 = select i1 %or.cond11, ptr %316, ptr %312
  %318 = load i64, ptr %22, align 8, !tbaa !22
  %319 = trunc i64 %318 to i32
  %320 = trunc i64 %309 to i32
  %321 = select i1 %or.cond11, i32 65536, i32 %317
  %322 = tail call i32 @LZ4_decompress_safe_usingDict(ptr noundef %.6537, ptr noundef %310, i32 noundef %319, i32 noundef %320, ptr noundef %.0598, i32 noundef %321) #5
  %323 = icmp sgt i32 %322, -1
  br i1 %323, label %324, label %337

324:                                              ; preds = %308
  %325 = load i32, ptr %29, align 8, !tbaa !24
  %.not661 = icmp eq i32 %325, 0
  br i1 %.not661, label %332, label %326

326:                                              ; preds = %324
  %327 = load i32, ptr %18, align 8, !tbaa !12
  %.not662 = icmp eq i32 %327, 0
  br i1 %.not662, label %328, label %332

328:                                              ; preds = %326
  %329 = load ptr, ptr %37, align 8, !tbaa !30
  %330 = zext nneg i32 %322 to i64
  %331 = tail call i32 @XXH32_update(ptr noundef nonnull %31, ptr noundef %329, i64 noundef %330) #5
  br label %332

332:                                              ; preds = %328, %326, %324
  %333 = load i64, ptr %27, align 8, !tbaa !32
  %.not663 = icmp eq i64 %333, 0
  %.pre862 = zext nneg i32 %322 to i64
  br i1 %.not663, label %.thread750, label %334

334:                                              ; preds = %332
  %335 = load i64, ptr %28, align 8, !tbaa !33
  %336 = sub i64 %335, %.pre862
  store i64 %336, ptr %28, align 8, !tbaa !33
  br label %.thread750

.thread750:                                       ; preds = %332, %334
  store i64 %.pre862, ptr %40, align 8, !tbaa !21
  store i64 0, ptr %41, align 8, !tbaa !20
  store i32 9, ptr %21, align 4, !tbaa !19
  br label %339

337:                                              ; preds = %308
  %338 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 16)
  br label %.loopexit

339:                                              ; preds = %._crit_edge848, %.thread750
  %.pre834 = phi i64 [ %.pre834.pre, %._crit_edge848 ], [ %.pre862, %.thread750 ]
  %.pre832 = phi i64 [ %.pre832.pre, %._crit_edge848 ], [ 0, %.thread750 ]
  %.9516 = phi ptr [ %.0507824, %._crit_edge848 ], [ %.8515, %.thread750 ]
  %.not664 = icmp eq ptr %.0526821, null
  br i1 %.not664, label %353, label %340

340:                                              ; preds = %339
  %341 = sub i64 %.pre834, %.pre832
  %342 = ptrtoint ptr %.0526821 to i64
  %343 = sub i64 %33, %342
  %.686 = tail call i64 @llvm.umin.i64(i64 %341, i64 %343)
  %344 = load ptr, ptr %37, align 8, !tbaa !30
  %345 = getelementptr inbounds i8, ptr %344, i64 %.pre832
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %.0526821, ptr align 1 %345, i64 %.686, i1 false)
  %346 = load i32, ptr %38, align 4, !tbaa !26
  %347 = icmp eq i32 %346, 0
  br i1 %347, label %348, label %349

348:                                              ; preds = %340
  tail call void @LZ4F_updateDict(ptr noundef nonnull %0, ptr noundef nonnull %.0526821, i64 noundef %.686, ptr noundef %1, i32 noundef 1)
  br label %349

349:                                              ; preds = %348, %340
  %350 = load i64, ptr %41, align 8, !tbaa !20
  %351 = add i64 %350, %.686
  store i64 %351, ptr %41, align 8, !tbaa !20
  %352 = getelementptr inbounds i8, ptr %.0526821, i64 %.686
  %.pre833 = load i64, ptr %40, align 8, !tbaa !21
  br label %353

353:                                              ; preds = %349, %339
  %354 = phi i64 [ %.pre833, %349 ], [ %.pre834, %339 ]
  %355 = phi i64 [ %351, %349 ], [ %.pre832, %339 ]
  %.3529 = phi ptr [ %352, %349 ], [ null, %339 ]
  %356 = icmp eq i64 %355, %354
  br i1 %356, label %357, label %.thread714.thread

357:                                              ; preds = %353
  store i32 3, ptr %21, align 4, !tbaa !19
  br label %.thread714

358:                                              ; preds = %44
  %359 = load i64, ptr %28, align 8, !tbaa !33
  %.not649 = icmp eq i64 %359, 0
  br i1 %.not649, label %362, label %360

360:                                              ; preds = %358
  %361 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 14)
  br label %.loopexit

362:                                              ; preds = %358
  %363 = load i32, ptr %29, align 8, !tbaa !24
  %.not650 = icmp eq i32 %363, 0
  br i1 %.not650, label %364, label %365

364:                                              ; preds = %362
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread714.thread

365:                                              ; preds = %362
  %366 = ptrtoint ptr %.0507824 to i64
  %367 = sub i64 %23, %366
  %368 = icmp slt i64 %367, 4
  br i1 %368, label %.thread753, label %369

.thread753:                                       ; preds = %365
  store i64 0, ptr %24, align 8, !tbaa !23
  store i32 11, ptr %21, align 4, !tbaa !19
  br label %371

369:                                              ; preds = %365
  %370 = getelementptr inbounds i8, ptr %.0507824, i64 4
  br label %384

371:                                              ; preds = %._crit_edge856, %.thread753
  %.pre-phi869 = phi i64 [ %.pre868, %._crit_edge856 ], [ %367, %.thread753 ]
  %372 = load i64, ptr %24, align 8, !tbaa !23
  %373 = sub i64 4, %372
  %374 = tail call i64 @llvm.umin.i64(i64 %373, i64 %.pre-phi869)
  %375 = load ptr, ptr %30, align 8, !tbaa !29
  %376 = getelementptr inbounds i8, ptr %375, i64 %372
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %376, ptr align 1 %.0507824, i64 %374, i1 false)
  %377 = getelementptr inbounds i8, ptr %.0507824, i64 %374
  %378 = load i64, ptr %24, align 8, !tbaa !23
  %379 = add i64 %378, %374
  store i64 %379, ptr %24, align 8, !tbaa !23
  %380 = icmp ult i64 %379, 4
  br i1 %380, label %382, label %.thread756

.thread756:                                       ; preds = %371
  %381 = load ptr, ptr %30, align 8, !tbaa !29
  br label %384

382:                                              ; preds = %371
  %383 = sub nuw nsw i64 4, %379
  br label %.thread714.thread

384:                                              ; preds = %369, %.thread756
  %.11542 = phi ptr [ %.0507824, %369 ], [ %381, %.thread756 ]
  %.12519 = phi ptr [ %370, %369 ], [ %377, %.thread756 ]
  %385 = load i32, ptr %18, align 8, !tbaa !12
  %.not651 = icmp eq i32 %385, 0
  br i1 %.not651, label %386, label %.thread762

386:                                              ; preds = %384
  %387 = tail call i32 @LZ4F_readLE32(ptr noundef %.11542)
  %388 = tail call i32 @XXH32_digest(ptr noundef nonnull %31) #5
  %.not652 = icmp eq i32 %387, %388
  br i1 %.not652, label %.thread762, label %389

389:                                              ; preds = %386
  %390 = tail call i64 @LZ4F_returnErrorCode(i32 noundef 18)
  br label %.loopexit

.thread762:                                       ; preds = %386, %384
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread714.thread

391:                                              ; preds = %44
  %392 = ptrtoint ptr %.0507824 to i64
  %393 = sub i64 %23, %392
  %394 = icmp sgt i64 %393, 3
  br i1 %394, label %395, label %.thread765

.thread765:                                       ; preds = %391
  store i64 4, ptr %24, align 8, !tbaa !23
  store i64 8, ptr %22, align 8, !tbaa !22
  store i32 13, ptr %21, align 4, !tbaa !19
  br label %397

395:                                              ; preds = %391
  %396 = getelementptr inbounds i8, ptr %.0507824, i64 4
  br label %.thread768

397:                                              ; preds = %._crit_edge855, %.thread765
  %.pre-phi873 = phi i64 [ %.pre872, %._crit_edge855 ], [ %393, %.thread765 ]
  %398 = load i64, ptr %22, align 8, !tbaa !22
  %399 = load i64, ptr %24, align 8, !tbaa !23
  %400 = sub i64 %398, %399
  %.689 = tail call i64 @llvm.umin.i64(i64 %400, i64 %.pre-phi873)
  %401 = getelementptr inbounds i8, ptr %25, i64 %399
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %401, ptr align 1 %.0507824, i64 %.689, i1 false)
  %402 = getelementptr inbounds i8, ptr %.0507824, i64 %.689
  %403 = load i64, ptr %24, align 8, !tbaa !23
  %404 = add i64 %403, %.689
  store i64 %404, ptr %24, align 8, !tbaa !23
  %405 = load i64, ptr %22, align 8, !tbaa !22
  %406 = icmp ult i64 %404, %405
  br i1 %406, label %407, label %.thread768

407:                                              ; preds = %397
  %408 = sub i64 %405, %404
  br label %.thread714.thread

.thread768:                                       ; preds = %395, %397
  %.15546 = phi ptr [ %.0507824, %395 ], [ %26, %397 ]
  %.15522 = phi ptr [ %396, %395 ], [ %402, %397 ]
  %409 = tail call i32 @LZ4F_readLE32(ptr noundef %.15546)
  %410 = zext i32 %409 to i64
  store i64 %410, ptr %27, align 8, !tbaa !32
  store i64 %410, ptr %22, align 8, !tbaa !22
  store i32 14, ptr %21, align 4, !tbaa !19
  br label %.thread714

411:                                              ; preds = %44
  %412 = load i64, ptr %22, align 8, !tbaa !22
  %413 = ptrtoint ptr %.0507824 to i64
  %414 = sub i64 %23, %413
  %.692 = tail call i64 @llvm.umin.i64(i64 %412, i64 %414)
  %415 = getelementptr inbounds i8, ptr %.0507824, i64 %.692
  %416 = sub i64 %412, %.692
  store i64 %416, ptr %22, align 8, !tbaa !22
  %.not648 = icmp eq i64 %416, 0
  br i1 %.not648, label %417, label %.thread714.thread

417:                                              ; preds = %411
  tail call void @LZ4F_resetDecompressionContext(ptr noundef nonnull %0)
  br label %.thread714.thread

.thread714:                                       ; preds = %140, %139, %131, %.thread747, %182, %69, %50, %.thread768, %357, %215, %.thread723, %44
  %.11574 = phi i64 [ %.0563818, %44 ], [ %.0563818, %.thread768 ], [ %.0563818, %357 ], [ %.0563818, %215 ], [ %.0563818, %.thread723 ], [ %.0563818, %182 ], [ %.0563818, %69 ], [ %.0563818, %50 ], [ %.0563818, %.thread747 ], [ %.0563818, %131 ], [ %.0563818, %139 ], [ %.3566, %140 ]
  %.14562 = phi i32 [ 1, %44 ], [ 1, %.thread768 ], [ 1, %357 ], [ 1, %215 ], [ 1, %.thread723 ], [ 1, %182 ], [ 1, %69 ], [ 1, %50 ], [ 1, %.thread747 ], [ 1, %131 ], [ 1, %139 ], [ %.3551, %140 ]
  %.4530 = phi ptr [ %.0526821, %44 ], [ %.0526821, %.thread768 ], [ %.3529, %357 ], [ %.0526821, %215 ], [ %.0526821, %.thread723 ], [ %.1527, %182 ], [ %.0526821, %69 ], [ %.0526821, %50 ], [ %287, %.thread747 ], [ %.0526821, %131 ], [ %.0526821, %139 ], [ %.0526821, %140 ]
  %.16523 = phi ptr [ %.0507824, %44 ], [ %.15522, %.thread768 ], [ %.9516, %357 ], [ %.0507824, %215 ], [ %.6513, %.thread723 ], [ %.5512, %182 ], [ %64, %69 ], [ %53, %50 ], [ %.8515, %.thread747 ], [ %.4511, %131 ], [ %.4511, %139 ], [ %.4511, %140 ]
  %.not644 = icmp eq i32 %.14562, 0
  br i1 %.not644, label %.thread714.thread, label %44, !llvm.loop !36

.thread714.thread:                                ; preds = %196, %353, %.thread714, %417, %411, %67, %121, %183, %233, %364, %.thread762, %382, %407
  %.16523881 = phi ptr [ %415, %417 ], [ %415, %411 ], [ %64, %67 ], [ %116, %121 ], [ %.5512, %183 ], [ %229, %233 ], [ %.0507824, %364 ], [ %.12519, %.thread762 ], [ %377, %382 ], [ %402, %407 ], [ %.9516, %353 ], [ %202, %196 ], [ %.16523, %.thread714 ]
  %.4530880 = phi ptr [ %.0526821, %417 ], [ %.0526821, %411 ], [ %.0526821, %67 ], [ %.0526821, %121 ], [ %.1527, %183 ], [ %.0526821, %233 ], [ %.0526821, %364 ], [ %.0526821, %.thread762 ], [ %.0526821, %382 ], [ %.0526821, %407 ], [ %.3529, %353 ], [ %.0526821, %196 ], [ %.4530, %.thread714 ]
  %.11574879 = phi i64 [ 0, %417 ], [ %416, %411 ], [ %68, %67 ], [ %122, %121 ], [ %188, %183 ], [ %237, %233 ], [ 0, %364 ], [ 0, %.thread762 ], [ %383, %382 ], [ %408, %407 ], [ 4, %353 ], [ %.0563818, %196 ], [ %.11574, %.thread714 ]
  %418 = load i32, ptr %38, align 4, !tbaa !26
  %419 = icmp eq i32 %418, 0
  br i1 %419, label %420, label %454

420:                                              ; preds = %.thread714.thread
  %421 = load ptr, ptr %35, align 8, !tbaa !34
  %422 = load ptr, ptr %39, align 8, !tbaa !28
  %.not645 = icmp eq ptr %421, %422
  %.not646 = icmp eq ptr %421, null
  %or.cond693 = or i1 %.not646, %.not645
  br i1 %or.cond693, label %454, label %423

423:                                              ; preds = %420
  br i1 %14, label %.cont698.thread, label %.cont698

.cont698:                                         ; preds = %423
  %.else.val700 = load i32, ptr %5, align 4, !tbaa !38
  %.not647 = icmp eq i32 %.else.val700, 0
  br i1 %.not647, label %.cont698.thread, label %454

.cont698.thread:                                  ; preds = %423, %.cont698
  %424 = load i32, ptr %21, align 4, !tbaa !19
  %425 = add i32 %424, -2
  %426 = icmp ult i32 %425, 8
  br i1 %426, label %427, label %454

427:                                              ; preds = %.cont698.thread
  %428 = icmp eq i32 %424, 9
  br i1 %428, label %429, label %447

429:                                              ; preds = %427
  %430 = load ptr, ptr %37, align 8, !tbaa !30
  %431 = ptrtoint ptr %430 to i64
  %432 = ptrtoint ptr %422 to i64
  %433 = sub i64 %431, %432
  %434 = load i64, ptr %40, align 8, !tbaa !21
  %435 = load i64, ptr %36, align 8, !tbaa !35
  %436 = getelementptr inbounds i8, ptr %421, i64 %435
  %437 = load i64, ptr %41, align 8, !tbaa !20
  %438 = sub i64 0, %437
  %439 = getelementptr inbounds i8, ptr %436, i64 %438
  %spec.select694 = tail call i64 @llvm.usub.sat.i64(i64 65536, i64 %434)
  %.1525 = tail call i64 @llvm.umin.i64(i64 %spec.select694, i64 %433)
  %440 = getelementptr inbounds i8, ptr %422, i64 %433
  %441 = sub nsw i64 0, %.1525
  %442 = getelementptr inbounds i8, ptr %440, i64 %441
  %443 = getelementptr inbounds i8, ptr %439, i64 %441
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %442, ptr nonnull align 1 %443, i64 %.1525, i1 false)
  %444 = load ptr, ptr %39, align 8, !tbaa !28
  store ptr %444, ptr %35, align 8, !tbaa !34
  %445 = load i64, ptr %41, align 8, !tbaa !20
  %446 = add i64 %445, %433
  store i64 %446, ptr %36, align 8, !tbaa !35
  br label %454

447:                                              ; preds = %427
  %448 = load i64, ptr %36, align 8, !tbaa !35
  %449 = getelementptr inbounds i8, ptr %421, i64 %448
  %spec.select695 = tail call i64 @llvm.umin.i64(i64 %448, i64 65536)
  %450 = sub nsw i64 0, %spec.select695
  %451 = getelementptr inbounds i8, ptr %449, i64 %450
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %422, ptr nonnull align 1 %451, i64 %spec.select695, i1 false)
  %452 = load ptr, ptr %39, align 8, !tbaa !28
  store ptr %452, ptr %35, align 8, !tbaa !34
  store i64 %spec.select695, ptr %36, align 8, !tbaa !35
  %453 = getelementptr inbounds i8, ptr %452, i64 %spec.select695
  store ptr %453, ptr %37, align 8, !tbaa !30
  br label %454

454:                                              ; preds = %429, %447, %.cont698.thread, %.cont698, %420, %.thread714.thread
  %455 = ptrtoint ptr %.16523881 to i64
  %456 = ptrtoint ptr %3 to i64
  %457 = sub i64 %455, %456
  store i64 %457, ptr %4, align 8, !tbaa !5
  %458 = ptrtoint ptr %.4530880 to i64
  %459 = ptrtoint ptr %1 to i64
  %460 = sub i64 %458, %459
  store i64 %460, ptr %2, align 8, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %54, %50, %389, %337, %288, %247, %.thread733, %145, %93, %99, %454, %360, %72
  %.18 = phi i64 [ %390, %389 ], [ %361, %360 ], [ %338, %337 ], [ %289, %288 ], [ %248, %247 ], [ %146, %145 ], [ %74, %72 ], [ %.11574879, %454 ], [ %94, %93 ], [ %100, %99 ], [ %209, %.thread733 ], [ 7, %54 ], [ %51, %50 ]
  ret i64 %.18
}

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

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

; 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 #3

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 4}
!10 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 264}
!13 = !{!"LZ4F_dctx_s", !14, i64 0, !16, i64 32, !11, i64 64, !11, i64 68, !6, i64 72, !6, i64 80, !6, i64 88, !15, i64 96, !6, i64 104, !6, i64 112, !15, i64 120, !15, i64 128, !6, i64 136, !15, i64 144, !6, i64 152, !6, i64 160, !18, i64 168, !18, i64 216, !11, i64 264, !7, i64 268}
!14 = !{!"", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!"", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !17, i64 16, !11, i64 24, !11, i64 28}
!17 = !{!"long long", !7, i64 0}
!18 = !{!"XXH32_state_s", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !7, i64 24, !11, i64 40, !11, i64 44}
!19 = !{!13, !11, i64 68}
!20 = !{!13, !6, i64 160}
!21 = !{!13, !6, i64 152}
!22 = !{!13, !6, i64 112}
!23 = !{!13, !6, i64 104}
!24 = !{!13, !11, i64 40}
!25 = !{!13, !6, i64 80}
!26 = !{!13, !11, i64 36}
!27 = !{!13, !6, i64 88}
!28 = !{!13, !15, i64 120}
!29 = !{!13, !15, i64 96}
!30 = !{!13, !15, i64 144}
!31 = !{!13, !11, i64 60}
!32 = !{!13, !17, i64 48}
!33 = !{!13, !6, i64 72}
!34 = !{!13, !15, i64 128}
!35 = !{!13, !6, i64 136}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = !{!10, !11, i64 0}


; 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