; LLVM IR from litespeedtech/ls-qpack :: lsqpack (lsqpack_enc_encode)

; 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.encode_program = type { i32, i32, i32, i32 }
%struct.lsxpack_header = type { ptr, i32, i32, i32, i32, i16, i16, i16, i8, i8, i8, i8, i8, i8 }
%struct.lsqpack_enc = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.lsqpack_enc_head, ptr, %struct.anon, %struct.anon.0, %struct.anon.1, %struct.anon.2, %struct.anon.3, i32, i32, ptr, float, float, ptr, i32, i32, i32 }
%struct.lsqpack_enc_head = type { ptr, ptr }
%struct.anon = type { ptr, ptr }
%struct.anon.0 = type { ptr, ptr }
%struct.anon.1 = type { ptr, ptr }
%struct.anon.2 = type { ptr, ptr, i32, i32, i32, i32 }
%struct.anon.3 = type { %struct.lsqpack_dec_int_state, ptr }
%struct.lsqpack_dec_int_state = type { i32, i32, i32, i64 }
%struct.lsqpack_double_enc_head = type { %struct.lsqpack_enc_head, %struct.lsqpack_enc_head }
%struct.lsqpack_enc_table_entry = type { %struct.anon.4, %struct.anon.4, %struct.anon.4, i32, i32, i32, i32, i32, i32, i32, i32, [0 x i8] }
%struct.anon.4 = type { ptr }
%struct.lsqpack_header_info = type { %struct.anon.6, %struct.anon.7, ptr, i64, i32, i32, i32, i32 }
%struct.anon.6 = type { ptr, ptr }
%struct.anon.7 = type { ptr, ptr }

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [22 x i8], align 1
@name_hashes = external hidden constant [99 x i32], align 16
@.str.18 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [46 x i8], align 1
@__PRETTY_FUNCTION__.lsqpack_enc_encode = external hidden unnamed_addr constant [174 x i8], align 1
@lsqpack_enc_encode.programs = external hidden constant [2 x [2 x [2 x %struct.encode_program]]], align 16
@lsqpack_enc_encode.programs.20 = external hidden constant [2 x [2 x %struct.encode_program]], align 16
@lsqpack_enc_encode.programs.21 = external hidden constant [2 x %struct.encode_program], align 16
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [33 x i8], align 1
@eea2str = external hidden constant [6 x ptr], align 16
@eha2str = external hidden constant [7 x ptr], align 16
@eta2str = external hidden constant [3 x ptr], align 16
@.str.25 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [41 x i8], align 1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr 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: nounwind uwtable
declare dso_local ptr @lsqpack_enc_int(ptr noundef, ptr noundef, i64 noundef, i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @lsqpack_find_in_static_headers(i32 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @lsqpack_enc_enc_str(i32 noundef, ptr noundef, i64 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_enc_str_size(ptr noundef, i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare hidden void @qenc_hist_update_size(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @lsqpack_enc_encode(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, i32 noundef %6) #2 {
  %8 = alloca i32, align 4
  %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 ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca [2 x ptr], align 16
  %21 = alloca %struct.encode_program, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca %struct.encode_program, align 4
  %45 = alloca %struct.encode_program, align 4
  %46 = alloca %struct.encode_program, align 4
  %47 = alloca %struct.encode_program, align 4
  %48 = alloca %struct.encode_program, align 4
  %49 = alloca %struct.encode_program, align 4
  %50 = alloca %struct.encode_program, align 4
  %51 = alloca %struct.encode_program, align 4
  %52 = alloca %struct.encode_program, align 4
  %53 = alloca %struct.encode_program, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store ptr %1, ptr %10, align 8, !tbaa !5
  store ptr %2, ptr %11, align 8, !tbaa !5
  store ptr %3, ptr %12, align 8, !tbaa !5
  store ptr %4, ptr %13, align 8, !tbaa !5
  store ptr %5, ptr %14, align 8, !tbaa !5
  store i32 %6, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %56 = load ptr, ptr %10, align 8, !tbaa !5
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = load i64, ptr %57, align 8, !tbaa !11
  %59 = getelementptr inbounds i8, ptr %56, i64 %58
  store ptr %59, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %60 = load ptr, ptr %12, align 8, !tbaa !5
  %61 = load ptr, ptr %13, align 8, !tbaa !5
  %62 = load i64, ptr %61, align 8, !tbaa !11
  %63 = getelementptr inbounds i8, ptr %60, i64 %62
  store ptr %63, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %64 = load ptr, ptr %14, align 8, !tbaa !5
  %65 = call ptr @lsxpack_header_get_name(ptr noundef %64)
  store ptr %65, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %66 = load ptr, ptr %14, align 8, !tbaa !5
  %67 = call ptr @lsxpack_header_get_value(ptr noundef %66)
  store ptr %67, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %68 = load ptr, ptr %14, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.lsxpack_header, ptr %68, i32 0, i32 5
  %70 = load i16, ptr %69, align 8, !tbaa !13
  %71 = zext i16 %70 to i32
  store i32 %71, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  %72 = load ptr, ptr %14, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.lsxpack_header, ptr %72, i32 0, i32 6
  %74 = load i16, ptr %73, align 2, !tbaa !16
  %75 = zext i16 %74 to i32
  store i32 %75, ptr %42, align 4, !tbaa !9
  br label %76

76:                                               ; preds = %7
  %77 = load ptr, ptr %9, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.lsqpack_enc, ptr %77, i32 0, i32 23
  %79 = load ptr, ptr %78, align 8, !tbaa !17
  %80 = icmp ne ptr %79, null
  br i1 %80, label %81, label %98

81:                                               ; preds = %76
  %82 = load ptr, ptr %9, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.lsqpack_enc, ptr %82, i32 0, i32 23
  %84 = load ptr, ptr %83, align 8, !tbaa !17
  %85 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %84, ptr noundef @.str) #8
  %86 = load ptr, ptr %9, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.lsqpack_enc, ptr %86, i32 0, i32 23
  %88 = load ptr, ptr %87, align 8, !tbaa !17
  %89 = load i32, ptr %41, align 4, !tbaa !9
  %90 = load ptr, ptr %39, align 8, !tbaa !5
  %91 = load i32, ptr %42, align 4, !tbaa !9
  %92 = load ptr, ptr %40, align 8, !tbaa !5
  %93 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %88, ptr noundef @.str.17, i32 noundef %89, ptr noundef %90, i32 noundef %91, ptr noundef %92) #8
  %94 = load ptr, ptr %9, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.lsqpack_enc, ptr %94, i32 0, i32 23
  %96 = load ptr, ptr %95, align 8, !tbaa !17
  %97 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %96, ptr noundef @.str.2) #8
  br label %98

98:                                               ; preds = %81, %76
  br label %99

99:                                               ; preds = %98
  br label %100

100:                                              ; preds = %99
  %101 = load ptr, ptr %12, align 8, !tbaa !5
  %102 = load ptr, ptr %17, align 8, !tbaa !5
  %103 = icmp eq ptr %101, %102
  br i1 %103, label %104, label %105

104:                                              ; preds = %100
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

105:                                              ; preds = %100
  store i32 -1, ptr %27, align 4, !tbaa !9
  %106 = load ptr, ptr %14, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.lsxpack_header, ptr %106, i32 0, i32 11
  %108 = load i8, ptr %107, align 1
  %109 = zext i8 %108 to i32
  %110 = and i32 %109, 64
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %112, label %115

112:                                              ; preds = %105
  %113 = load i32, ptr %15, align 4, !tbaa !9
  %114 = or i32 %113, 2
  store i32 %114, ptr %15, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %112, %105
  %116 = load ptr, ptr %14, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.lsxpack_header, ptr %116, i32 0, i32 11
  %118 = load i8, ptr %117, align 1
  %119 = zext i8 %118 to i32
  %120 = and i32 %119, 34
  %121 = icmp ne i32 %120, 34
  br i1 %121, label %122, label %200

122:                                              ; preds = %115
  %123 = load ptr, ptr %14, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.lsxpack_header, ptr %123, i32 0, i32 11
  %125 = load i8, ptr %124, align 1
  %126 = zext i8 %125 to i32
  %127 = and i32 %126, 8
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %133

129:                                              ; preds = %122
  %130 = load ptr, ptr %14, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.lsxpack_header, ptr %130, i32 0, i32 1
  %132 = load i32, ptr %131, align 8, !tbaa !25
  store i32 %132, ptr %29, align 4, !tbaa !9
  br label %153

133:                                              ; preds = %122
  %134 = load ptr, ptr %14, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.lsxpack_header, ptr %134, i32 0, i32 11
  %136 = load i8, ptr %135, align 1
  %137 = zext i8 %136 to i32
  %138 = and i32 %137, 2
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %147

140:                                              ; preds = %133
  %141 = load ptr, ptr %14, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.lsxpack_header, ptr %141, i32 0, i32 9
  %143 = load i8, ptr %142, align 1, !tbaa !26
  %144 = zext i8 %143 to i64
  %145 = getelementptr inbounds [99 x i32], ptr @name_hashes, i64 0, i64 %144
  %146 = load i32, ptr %145, align 4, !tbaa !9
  store i32 %146, ptr %29, align 4, !tbaa !9
  br label %152

147:                                              ; preds = %133
  %148 = load ptr, ptr %39, align 8, !tbaa !5
  %149 = load i32, ptr %41, align 4, !tbaa !9
  %150 = zext i32 %149 to i64
  %151 = call i32 @XXH32(ptr noundef %148, i64 noundef %150, i32 noundef 39378473)
  store i32 %151, ptr %29, align 4, !tbaa !9
  br label %152

152:                                              ; preds = %147, %140
  br label %153

153:                                              ; preds = %152, %129
  %154 = load ptr, ptr %14, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.lsxpack_header, ptr %154, i32 0, i32 11
  %156 = load i8, ptr %155, align 1
  %157 = zext i8 %156 to i32
  %158 = and i32 %157, 16
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %164

160:                                              ; preds = %153
  %161 = load ptr, ptr %14, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.lsxpack_header, ptr %161, i32 0, i32 2
  %163 = load i32, ptr %162, align 4, !tbaa !27
  store i32 %163, ptr %30, align 4, !tbaa !9
  br label %170

164:                                              ; preds = %153
  %165 = load ptr, ptr %40, align 8, !tbaa !5
  %166 = load i32, ptr %42, align 4, !tbaa !9
  %167 = zext i32 %166 to i64
  %168 = load i32, ptr %29, align 4, !tbaa !9
  %169 = call i32 @XXH32(ptr noundef %165, i64 noundef %167, i32 noundef %168)
  store i32 %169, ptr %30, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %164, %160
  br label %171

171:                                              ; preds = %170
  %172 = load ptr, ptr %9, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.lsqpack_enc, ptr %172, i32 0, i32 23
  %174 = load ptr, ptr %173, align 8, !tbaa !17
  %175 = icmp ne ptr %174, null
  br i1 %175, label %176, label %191

176:                                              ; preds = %171
  %177 = load ptr, ptr %9, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.lsqpack_enc, ptr %177, i32 0, i32 23
  %179 = load ptr, ptr %178, align 8, !tbaa !17
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %179, ptr noundef @.str) #8
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.lsqpack_enc, ptr %181, i32 0, i32 23
  %183 = load ptr, ptr %182, align 8, !tbaa !17
  %184 = load i32, ptr %29, align 4, !tbaa !9
  %185 = load i32, ptr %30, align 4, !tbaa !9
  %186 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %183, ptr noundef @.str.18, i32 noundef %184, i32 noundef %185) #8
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.lsqpack_enc, ptr %187, i32 0, i32 23
  %189 = load ptr, ptr %188, align 8, !tbaa !17
  %190 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %189, ptr noundef @.str.2) #8
  br label %191

191:                                              ; preds = %176, %171
  br label %192

192:                                              ; preds = %191
  br label %193

193:                                              ; preds = %192
  %194 = load i32, ptr %30, align 4, !tbaa !9
  %195 = load ptr, ptr %39, align 8, !tbaa !5
  %196 = load i32, ptr %41, align 4, !tbaa !9
  %197 = load ptr, ptr %40, align 8, !tbaa !5
  %198 = load i32, ptr %42, align 4, !tbaa !9
  %199 = call i32 @find_in_static_full(i32 noundef %194, ptr noundef %195, i32 noundef %196, ptr noundef %197, i32 noundef %198)
  store i32 %199, ptr %25, align 4, !tbaa !9
  br label %205

200:                                              ; preds = %115
  %201 = load ptr, ptr %14, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.lsxpack_header, ptr %201, i32 0, i32 9
  %203 = load i8, ptr %202, align 1, !tbaa !26
  %204 = zext i8 %203 to i32
  store i32 %204, ptr %25, align 4, !tbaa !9
  br label %209

205:                                              ; preds = %193
  %206 = load i32, ptr %25, align 4, !tbaa !9
  %207 = icmp sge i32 %206, 0
  br i1 %207, label %208, label %215

208:                                              ; preds = %205
  br label %209

209:                                              ; preds = %208, %200
  %210 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %210, ptr %36, align 4, !tbaa !9
  %211 = getelementptr inbounds %struct.encode_program, ptr %44, i32 0, i32 0
  store i32 0, ptr %211, align 4, !tbaa !28
  %212 = getelementptr inbounds %struct.encode_program, ptr %44, i32 0, i32 1
  store i32 1, ptr %212, align 4, !tbaa !30
  %213 = getelementptr inbounds %struct.encode_program, ptr %44, i32 0, i32 2
  store i32 0, ptr %213, align 4, !tbaa !31
  %214 = getelementptr inbounds %struct.encode_program, ptr %44, i32 0, i32 3
  store i32 0, ptr %214, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %44, i64 16, i1 false), !tbaa.struct !33
  store i32 0, ptr %28, align 4, !tbaa !9
  br label %726

215:                                              ; preds = %205
  %216 = load i32, ptr %15, align 4, !tbaa !9
  %217 = and i32 %216, 8
  %218 = icmp ne i32 %217, 0
  br i1 %218, label %223, label %219

219:                                              ; preds = %215
  %220 = load ptr, ptr %9, align 8, !tbaa !5
  %221 = call i32 @enc_use_dynamic_table(ptr noundef %220)
  %222 = icmp ne i32 %221, 0
  br label %223

223:                                              ; preds = %219, %215
  %224 = phi i1 [ false, %215 ], [ %222, %219 ]
  %225 = zext i1 %224 to i32
  store i32 %225, ptr %24, align 4, !tbaa !9
  %226 = load i32, ptr %15, align 4, !tbaa !9
  %227 = and i32 %226, 11
  %228 = icmp ne i32 %227, 0
  br i1 %228, label %237, label %229

229:                                              ; preds = %223
  %230 = load i32, ptr %24, align 4, !tbaa !9
  %231 = icmp ne i32 %230, 0
  br i1 %231, label %232, label %237

232:                                              ; preds = %229
  %233 = load ptr, ptr %9, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.lsqpack_enc, ptr %233, i32 0, i32 0
  %235 = load i32, ptr %234, align 8, !tbaa !34
  %236 = icmp ult i32 %235, -1
  br label %237

237:                                              ; preds = %232, %229, %223
  %238 = phi i1 [ false, %229 ], [ false, %223 ], [ %236, %232 ]
  %239 = zext i1 %238 to i32
  store i32 %239, ptr %22, align 4, !tbaa !9
  %240 = load ptr, ptr %9, align 8, !tbaa !5
  %241 = call i32 @qenc_can_risk(ptr noundef %240)
  store i32 %241, ptr %23, align 4, !tbaa !9
  %242 = load ptr, ptr %9, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.lsqpack_enc, ptr %242, i32 0, i32 26
  %244 = load ptr, ptr %243, align 8, !tbaa !35
  %245 = icmp ne ptr %244, null
  br i1 %245, label %246, label %251

246:                                              ; preds = %237
  %247 = load i32, ptr %15, align 4, !tbaa !9
  %248 = and i32 %247, 4
  %249 = icmp ne i32 %248, 0
  %250 = xor i1 %249, true
  br label %251

251:                                              ; preds = %246, %237
  %252 = phi i1 [ false, %237 ], [ %250, %246 ]
  %253 = zext i1 %252 to i32
  store i32 %253, ptr %28, align 4, !tbaa !9
  br label %254

254:                                              ; preds = %1329, %792, %251
  %255 = load i32, ptr %24, align 4, !tbaa !9
  %256 = icmp ne i32 %255, 0
  br i1 %256, label %257, label %476

257:                                              ; preds = %254
  %258 = load i32, ptr %30, align 4, !tbaa !9
  %259 = load ptr, ptr %9, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.lsqpack_enc, ptr %259, i32 0, i32 13
  %261 = load i32, ptr %260, align 4, !tbaa !36
  %262 = shl i32 1, %261
  %263 = sub i32 %262, 1
  %264 = and i32 %258, %263
  store i32 %264, ptr %31, align 4, !tbaa !9
  store i32 0, ptr %37, align 4, !tbaa !9
  %265 = load ptr, ptr %9, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.lsqpack_enc, ptr %265, i32 0, i32 15
  %267 = load ptr, ptr %266, align 8, !tbaa !37
  %268 = load i32, ptr %31, align 4, !tbaa !9
  %269 = zext i32 %268 to i64
  %270 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %267, i64 %269
  %271 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %270, i32 0, i32 1
  %272 = getelementptr inbounds %struct.lsqpack_enc_head, ptr %271, i32 0, i32 0
  %273 = load ptr, ptr %272, align 8, !tbaa !38
  store ptr %273, ptr %18, align 8, !tbaa !5
  br label %274

274:                                              ; preds = %329, %257
  %275 = load ptr, ptr %18, align 8, !tbaa !5
  %276 = icmp ne ptr %275, null
  br i1 %276, label %277, label %334

277:                                              ; preds = %274
  %278 = load i32, ptr %30, align 4, !tbaa !9
  %279 = load ptr, ptr %18, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %279, i32 0, i32 7
  %281 = load i32, ptr %280, align 8, !tbaa !40
  %282 = icmp eq i32 %278, %281
  br i1 %282, label %283, label %328

283:                                              ; preds = %277
  %284 = load i32, ptr %41, align 4, !tbaa !9
  %285 = load ptr, ptr %18, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %285, i32 0, i32 9
  %287 = load i32, ptr %286, align 8, !tbaa !43
  %288 = icmp eq i32 %284, %287
  br i1 %288, label %289, label %328

289:                                              ; preds = %283
  %290 = load i32, ptr %42, align 4, !tbaa !9
  %291 = load ptr, ptr %18, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %291, i32 0, i32 10
  %293 = load i32, ptr %292, align 4, !tbaa !44
  %294 = icmp eq i32 %290, %293
  br i1 %294, label %295, label %328

295:                                              ; preds = %289
  %296 = load ptr, ptr %39, align 8, !tbaa !5
  %297 = load ptr, ptr %18, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %297, i32 0, i32 11
  %299 = getelementptr inbounds [0 x i8], ptr %298, i64 0, i64 0
  %300 = load i32, ptr %41, align 4, !tbaa !9
  %301 = zext i32 %300 to i64
  %302 = call i32 @memcmp(ptr noundef %296, ptr noundef %299, i64 noundef %301) #9
  %303 = icmp eq i32 0, %302
  br i1 %303, label %304, label %328

304:                                              ; preds = %295
  %305 = load ptr, ptr %40, align 8, !tbaa !5
  %306 = load ptr, ptr %18, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %306, i32 0, i32 11
  %308 = load ptr, ptr %18, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %308, i32 0, i32 9
  %310 = load i32, ptr %309, align 8, !tbaa !43
  %311 = zext i32 %310 to i64
  %312 = getelementptr inbounds [0 x i8], ptr %307, i64 0, i64 %311
  %313 = load i32, ptr %42, align 4, !tbaa !9
  %314 = zext i32 %313 to i64
  %315 = call i32 @memcmp(ptr noundef %305, ptr noundef %312, i64 noundef %314) #9
  %316 = icmp eq i32 0, %315
  br i1 %316, label %317, label %328

317:                                              ; preds = %304
  %318 = load ptr, ptr %18, align 8, !tbaa !5
  %319 = load i32, ptr %37, align 4, !tbaa !9
  %320 = add i32 %319, 1
  store i32 %320, ptr %37, align 4, !tbaa !9
  %321 = zext i32 %319 to i64
  %322 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 %321
  store ptr %318, ptr %322, align 8, !tbaa !5
  %323 = load i32, ptr %37, align 4, !tbaa !9
  %324 = zext i32 %323 to i64
  %325 = icmp uge i64 %324, 2
  br i1 %325, label %326, label %327

326:                                              ; preds = %317
  br label %334

327:                                              ; preds = %317
  br label %328

328:                                              ; preds = %327, %304, %295, %289, %283, %277
  br label %329

329:                                              ; preds = %328
  %330 = load ptr, ptr %18, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %330, i32 0, i32 0
  %332 = getelementptr inbounds %struct.anon.4, ptr %331, i32 0, i32 0
  %333 = load ptr, ptr %332, align 8, !tbaa !45
  store ptr %333, ptr %18, align 8, !tbaa !5
  br label %274, !llvm.loop !46

334:                                              ; preds = %326, %274
  %335 = load i32, ptr %37, align 4, !tbaa !9
  switch i32 %335, label %475 [
    i32 1, label %336
    i32 2, label %416
  ]

336:                                              ; preds = %334
  %337 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 0
  %338 = load ptr, ptr %337, align 16, !tbaa !5
  store ptr %338, ptr %18, align 8, !tbaa !5
  %339 = load ptr, ptr %18, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %339, i32 0, i32 3
  %341 = load i32, ptr %340, align 8, !tbaa !48
  store i32 %341, ptr %36, align 4, !tbaa !9
  %342 = load i32, ptr %23, align 4, !tbaa !9
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %352, label %344

344:                                              ; preds = %336
  %345 = load ptr, ptr %18, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %345, i32 0, i32 3
  %347 = load i32, ptr %346, align 8, !tbaa !48
  %348 = load ptr, ptr %9, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.lsqpack_enc, ptr %348, i32 0, i32 1
  %350 = load i32, ptr %349, align 4, !tbaa !49
  %351 = icmp ule i32 %347, %350
  br i1 %351, label %352, label %392

352:                                              ; preds = %344, %336
  %353 = load i32, ptr %22, align 4, !tbaa !9
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %355, label %392

355:                                              ; preds = %352
  %356 = load ptr, ptr %9, align 8, !tbaa !5
  %357 = load ptr, ptr %18, align 8, !tbaa !5
  %358 = call i32 @qenc_duplicable_entry(ptr noundef %356, ptr noundef %357)
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %360, label %392

360:                                              ; preds = %355
  %361 = load i32, ptr %23, align 4, !tbaa !9
  %362 = icmp ne i32 %361, 0
  br i1 %362, label %363, label %368

363:                                              ; preds = %360
  %364 = getelementptr inbounds %struct.encode_program, ptr %45, i32 0, i32 0
  store i32 1, ptr %364, align 4, !tbaa !28
  %365 = getelementptr inbounds %struct.encode_program, ptr %45, i32 0, i32 1
  store i32 0, ptr %365, align 4, !tbaa !30
  %366 = getelementptr inbounds %struct.encode_program, ptr %45, i32 0, i32 2
  store i32 1, ptr %366, align 4, !tbaa !31
  %367 = getelementptr inbounds %struct.encode_program, ptr %45, i32 0, i32 3
  store i32 6, ptr %367, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %45, i64 16, i1 false), !tbaa.struct !33
  br label %391

368:                                              ; preds = %360
  %369 = load ptr, ptr %9, align 8, !tbaa !5
  %370 = load ptr, ptr %18, align 8, !tbaa !5
  %371 = call i32 @qenc_entry_is_draining(ptr noundef %369, ptr noundef %370)
  %372 = icmp ne i32 %371, 0
  br i1 %372, label %389, label %373

373:                                              ; preds = %368
  %374 = load ptr, ptr %9, align 8, !tbaa !5
  %375 = load ptr, ptr %18, align 8, !tbaa !5
  %376 = call i32 @qenc_safe_to_dup(ptr noundef %374, ptr noundef %375)
  %377 = icmp ne i32 %376, 0
  br i1 %377, label %378, label %383

378:                                              ; preds = %373
  %379 = getelementptr inbounds %struct.encode_program, ptr %46, i32 0, i32 0
  store i32 1, ptr %379, align 4, !tbaa !28
  %380 = getelementptr inbounds %struct.encode_program, ptr %46, i32 0, i32 1
  store i32 2, ptr %380, align 4, !tbaa !30
  %381 = getelementptr inbounds %struct.encode_program, ptr %46, i32 0, i32 2
  store i32 1, ptr %381, align 4, !tbaa !31
  %382 = getelementptr inbounds %struct.encode_program, ptr %46, i32 0, i32 3
  store i32 2, ptr %382, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %46, i64 16, i1 false), !tbaa.struct !33
  br label %388

383:                                              ; preds = %373
  %384 = getelementptr inbounds %struct.encode_program, ptr %47, i32 0, i32 0
  store i32 0, ptr %384, align 4, !tbaa !28
  %385 = getelementptr inbounds %struct.encode_program, ptr %47, i32 0, i32 1
  store i32 2, ptr %385, align 4, !tbaa !30
  %386 = getelementptr inbounds %struct.encode_program, ptr %47, i32 0, i32 2
  store i32 0, ptr %386, align 4, !tbaa !31
  %387 = getelementptr inbounds %struct.encode_program, ptr %47, i32 0, i32 3
  store i32 2, ptr %387, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %47, i64 16, i1 false), !tbaa.struct !33
  br label %388

388:                                              ; preds = %383, %378
  br label %390

389:                                              ; preds = %368
  br label %475

390:                                              ; preds = %388
  br label %391

391:                                              ; preds = %390, %363
  br label %415

392:                                              ; preds = %355, %352, %344
  %393 = load i32, ptr %23, align 4, !tbaa !9
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %403, label %395

395:                                              ; preds = %392
  %396 = load ptr, ptr %18, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %396, i32 0, i32 3
  %398 = load i32, ptr %397, align 8, !tbaa !48
  %399 = load ptr, ptr %9, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.lsqpack_enc, ptr %399, i32 0, i32 1
  %401 = load i32, ptr %400, align 4, !tbaa !49
  %402 = icmp ule i32 %398, %401
  br i1 %402, label %403, label %413

403:                                              ; preds = %395, %392
  %404 = load ptr, ptr %9, align 8, !tbaa !5
  %405 = load ptr, ptr %18, align 8, !tbaa !5
  %406 = call i32 @qenc_entry_is_draining(ptr noundef %404, ptr noundef %405)
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %413, label %408

408:                                              ; preds = %403
  %409 = getelementptr inbounds %struct.encode_program, ptr %48, i32 0, i32 0
  store i32 0, ptr %409, align 4, !tbaa !28
  %410 = getelementptr inbounds %struct.encode_program, ptr %48, i32 0, i32 1
  store i32 2, ptr %410, align 4, !tbaa !30
  %411 = getelementptr inbounds %struct.encode_program, ptr %48, i32 0, i32 2
  store i32 0, ptr %411, align 4, !tbaa !31
  %412 = getelementptr inbounds %struct.encode_program, ptr %48, i32 0, i32 3
  store i32 2, ptr %412, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %48, i64 16, i1 false), !tbaa.struct !33
  br label %414

413:                                              ; preds = %403, %395
  br label %475

414:                                              ; preds = %408
  br label %415

415:                                              ; preds = %414, %391
  br label %726

416:                                              ; preds = %334
  %417 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 1
  %418 = load ptr, ptr %417, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %418, i32 0, i32 3
  %420 = load i32, ptr %419, align 8, !tbaa !48
  %421 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 0
  %422 = load ptr, ptr %421, align 16, !tbaa !5
  %423 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %422, i32 0, i32 3
  %424 = load i32, ptr %423, align 8, !tbaa !48
  %425 = icmp ugt i32 %420, %424
  br i1 %425, label %426, label %427

426:                                              ; preds = %416
  br label %428

427:                                              ; preds = %416
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.8, i32 noundef 1802, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

428:                                              ; preds = %426
  %429 = load i32, ptr %23, align 4, !tbaa !9
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %434

431:                                              ; preds = %428
  %432 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 1
  %433 = load ptr, ptr %432, align 8, !tbaa !5
  store ptr %433, ptr %18, align 8, !tbaa !5
  br label %467

434:                                              ; preds = %428
  %435 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 1
  %436 = load ptr, ptr %435, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %436, i32 0, i32 3
  %438 = load i32, ptr %437, align 8, !tbaa !48
  %439 = load ptr, ptr %9, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.lsqpack_enc, ptr %439, i32 0, i32 1
  %441 = load i32, ptr %440, align 4, !tbaa !49
  %442 = icmp ule i32 %438, %441
  br i1 %442, label %443, label %446

443:                                              ; preds = %434
  %444 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 1
  %445 = load ptr, ptr %444, align 8, !tbaa !5
  store ptr %445, ptr %18, align 8, !tbaa !5
  br label %466

446:                                              ; preds = %434
  %447 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 0
  %448 = load ptr, ptr %447, align 16, !tbaa !5
  %449 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %448, i32 0, i32 3
  %450 = load i32, ptr %449, align 8, !tbaa !48
  %451 = load ptr, ptr %9, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.lsqpack_enc, ptr %451, i32 0, i32 1
  %453 = load i32, ptr %452, align 4, !tbaa !49
  %454 = icmp ule i32 %450, %453
  br i1 %454, label %455, label %464

455:                                              ; preds = %446
  %456 = load ptr, ptr %9, align 8, !tbaa !5
  %457 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 0
  %458 = load ptr, ptr %457, align 16, !tbaa !5
  %459 = call i32 @qenc_entry_is_draining(ptr noundef %456, ptr noundef %458)
  %460 = icmp ne i32 %459, 0
  br i1 %460, label %464, label %461

461:                                              ; preds = %455
  %462 = getelementptr inbounds [2 x ptr], ptr %20, i64 0, i64 0
  %463 = load ptr, ptr %462, align 16, !tbaa !5
  store ptr %463, ptr %18, align 8, !tbaa !5
  br label %465

464:                                              ; preds = %455, %446
  br label %475

465:                                              ; preds = %461
  br label %466

466:                                              ; preds = %465, %443
  br label %467

467:                                              ; preds = %466, %431
  %468 = load ptr, ptr %18, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %468, i32 0, i32 3
  %470 = load i32, ptr %469, align 8, !tbaa !48
  store i32 %470, ptr %36, align 4, !tbaa !9
  %471 = getelementptr inbounds %struct.encode_program, ptr %49, i32 0, i32 0
  store i32 0, ptr %471, align 4, !tbaa !28
  %472 = getelementptr inbounds %struct.encode_program, ptr %49, i32 0, i32 1
  store i32 2, ptr %472, align 4, !tbaa !30
  %473 = getelementptr inbounds %struct.encode_program, ptr %49, i32 0, i32 2
  store i32 0, ptr %473, align 4, !tbaa !31
  %474 = getelementptr inbounds %struct.encode_program, ptr %49, i32 0, i32 3
  store i32 2, ptr %474, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %49, i64 16, i1 false), !tbaa.struct !33
  br label %726

475:                                              ; preds = %464, %413, %389, %334
  br label %476

476:                                              ; preds = %475, %254
  %477 = load ptr, ptr %14, align 8, !tbaa !5
  %478 = getelementptr inbounds %struct.lsxpack_header, ptr %477, i32 0, i32 11
  %479 = load i8, ptr %478, align 1
  %480 = zext i8 %479 to i32
  %481 = and i32 %480, 2
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %483, label %488

483:                                              ; preds = %476
  %484 = load ptr, ptr %14, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.lsxpack_header, ptr %484, i32 0, i32 9
  %486 = load i8, ptr %485, align 1, !tbaa !26
  %487 = zext i8 %486 to i32
  store i32 %487, ptr %25, align 4, !tbaa !9
  br label %497

488:                                              ; preds = %476
  %489 = load i32, ptr %29, align 4, !tbaa !9
  %490 = load ptr, ptr %39, align 8, !tbaa !5
  %491 = load i32, ptr %41, align 4, !tbaa !9
  %492 = call i32 @lsqpack_find_in_static_headers(i32 noundef %489, ptr noundef %490, i32 noundef %491)
  store i32 %492, ptr %25, align 4, !tbaa !9
  br label %493

493:                                              ; preds = %488
  %494 = load i32, ptr %25, align 4, !tbaa !9
  %495 = icmp sge i32 %494, 0
  br i1 %495, label %496, label %537

496:                                              ; preds = %493
  br label %497

497:                                              ; preds = %496, %483
  %498 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %498, ptr %36, align 4, !tbaa !9
  %499 = load i32, ptr %22, align 4, !tbaa !9
  %500 = icmp ne i32 %499, 0
  br i1 %500, label %501, label %531

501:                                              ; preds = %497
  %502 = load ptr, ptr %9, align 8, !tbaa !5
  %503 = load i32, ptr %41, align 4, !tbaa !9
  %504 = add i32 32, %503
  %505 = load i32, ptr %42, align 4, !tbaa !9
  %506 = add i32 %504, %505
  %507 = zext i32 %506 to i64
  %508 = call i32 @qenc_has_or_can_evict_at_least(ptr noundef %502, i64 noundef %507)
  store i32 %508, ptr %26, align 4, !tbaa !9
  %509 = load i32, ptr %26, align 4, !tbaa !9
  %510 = icmp ne i32 %509, 0
  br i1 %510, label %511, label %531

511:                                              ; preds = %501
  %512 = load ptr, ptr %9, align 8, !tbaa !5
  %513 = load i32, ptr %30, align 4, !tbaa !9
  %514 = call i32 @qenc_hist_seen(ptr noundef %512, i32 noundef 1, i32 noundef %513)
  store i32 %514, ptr %27, align 4, !tbaa !9
  %515 = load i32, ptr %27, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds [2 x [2 x [2 x %struct.encode_program]]], ptr @lsqpack_enc_encode.programs, i64 0, i64 %516
  %518 = load i32, ptr %23, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [2 x [2 x %struct.encode_program]], ptr %517, i64 0, i64 %519
  %521 = load i32, ptr %24, align 4, !tbaa !9
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %526

523:                                              ; preds = %511
  %524 = load i32, ptr %37, align 4, !tbaa !9
  %525 = icmp ugt i32 %524, 0
  br label %526

526:                                              ; preds = %523, %511
  %527 = phi i1 [ false, %511 ], [ %525, %523 ]
  %528 = zext i1 %527 to i32
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds [2 x %struct.encode_program], ptr %520, i64 0, i64 %529
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 16 %530, i64 16, i1 false), !tbaa.struct !33
  br label %536

531:                                              ; preds = %501, %497
  %532 = getelementptr inbounds %struct.encode_program, ptr %50, i32 0, i32 0
  store i32 0, ptr %532, align 4, !tbaa !28
  %533 = getelementptr inbounds %struct.encode_program, ptr %50, i32 0, i32 1
  store i32 3, ptr %533, align 4, !tbaa !30
  %534 = getelementptr inbounds %struct.encode_program, ptr %50, i32 0, i32 2
  store i32 0, ptr %534, align 4, !tbaa !31
  %535 = getelementptr inbounds %struct.encode_program, ptr %50, i32 0, i32 3
  store i32 0, ptr %535, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %50, i64 16, i1 false), !tbaa.struct !33
  br label %536

536:                                              ; preds = %531, %526
  br label %726

537:                                              ; preds = %493
  store i32 -1, ptr %26, align 4, !tbaa !9
  %538 = load i32, ptr %24, align 4, !tbaa !9
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %656

540:                                              ; preds = %537
  %541 = load i32, ptr %29, align 4, !tbaa !9
  %542 = load ptr, ptr %9, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.lsqpack_enc, ptr %542, i32 0, i32 13
  %544 = load i32, ptr %543, align 4, !tbaa !36
  %545 = shl i32 1, %544
  %546 = sub i32 %545, 1
  %547 = and i32 %541, %546
  store i32 %547, ptr %31, align 4, !tbaa !9
  %548 = load ptr, ptr %9, align 8, !tbaa !5
  %549 = getelementptr inbounds %struct.lsqpack_enc, ptr %548, i32 0, i32 15
  %550 = load ptr, ptr %549, align 8, !tbaa !37
  %551 = load i32, ptr %31, align 4, !tbaa !9
  %552 = zext i32 %551 to i64
  %553 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %550, i64 %552
  %554 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %553, i32 0, i32 0
  %555 = getelementptr inbounds %struct.lsqpack_enc_head, ptr %554, i32 0, i32 0
  %556 = load ptr, ptr %555, align 8, !tbaa !50
  store ptr %556, ptr %18, align 8, !tbaa !5
  br label %557

557:                                              ; preds = %650, %540
  %558 = load ptr, ptr %18, align 8, !tbaa !5
  %559 = icmp ne ptr %558, null
  br i1 %559, label %560, label %655

560:                                              ; preds = %557
  %561 = load i32, ptr %29, align 4, !tbaa !9
  %562 = load ptr, ptr %18, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %562, i32 0, i32 8
  %564 = load i32, ptr %563, align 4, !tbaa !51
  %565 = icmp eq i32 %561, %564
  br i1 %565, label %566, label %649

566:                                              ; preds = %560
  %567 = load ptr, ptr %9, align 8, !tbaa !5
  %568 = load ptr, ptr %18, align 8, !tbaa !5
  %569 = call i32 @qenc_entry_is_draining(ptr noundef %567, ptr noundef %568)
  %570 = icmp ne i32 %569, 0
  br i1 %570, label %649, label %571

571:                                              ; preds = %566
  %572 = load i32, ptr %41, align 4, !tbaa !9
  %573 = load ptr, ptr %18, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %573, i32 0, i32 9
  %575 = load i32, ptr %574, align 8, !tbaa !43
  %576 = icmp eq i32 %572, %575
  br i1 %576, label %577, label %649

577:                                              ; preds = %571
  %578 = load i32, ptr %23, align 4, !tbaa !9
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %588, label %580

580:                                              ; preds = %577
  %581 = load ptr, ptr %18, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %581, i32 0, i32 3
  %583 = load i32, ptr %582, align 8, !tbaa !48
  %584 = load ptr, ptr %9, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.lsqpack_enc, ptr %584, i32 0, i32 1
  %586 = load i32, ptr %585, align 4, !tbaa !49
  %587 = icmp ule i32 %583, %586
  br i1 %587, label %588, label %649

588:                                              ; preds = %580, %577
  %589 = load i32, ptr %22, align 4, !tbaa !9
  %590 = icmp ne i32 %589, 0
  br i1 %590, label %591, label %606

591:                                              ; preds = %588
  %592 = load i32, ptr %26, align 4, !tbaa !9
  %593 = icmp slt i32 %592, 0
  br i1 %593, label %594, label %603

594:                                              ; preds = %591
  %595 = load ptr, ptr %9, align 8, !tbaa !5
  %596 = load i32, ptr %41, align 4, !tbaa !9
  %597 = add i32 32, %596
  %598 = load i32, ptr %42, align 4, !tbaa !9
  %599 = add i32 %597, %598
  %600 = zext i32 %599 to i64
  %601 = call i32 @qenc_has_or_can_evict_at_least(ptr noundef %595, i64 noundef %600)
  store i32 %601, ptr %26, align 4, !tbaa !9
  %602 = icmp ne i32 %601, 0
  br i1 %602, label %606, label %649

603:                                              ; preds = %591
  %604 = load i32, ptr %26, align 4, !tbaa !9
  %605 = icmp ne i32 %604, 0
  br i1 %605, label %606, label %649

606:                                              ; preds = %603, %594, %588
  %607 = load ptr, ptr %39, align 8, !tbaa !5
  %608 = load ptr, ptr %18, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %608, i32 0, i32 11
  %610 = getelementptr inbounds [0 x i8], ptr %609, i64 0, i64 0
  %611 = load i32, ptr %41, align 4, !tbaa !9
  %612 = zext i32 %611 to i64
  %613 = call i32 @memcmp(ptr noundef %607, ptr noundef %610, i64 noundef %612) #9
  %614 = icmp eq i32 0, %613
  br i1 %614, label %615, label %649

615:                                              ; preds = %606
  %616 = load ptr, ptr %18, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %616, i32 0, i32 3
  %618 = load i32, ptr %617, align 8, !tbaa !48
  store i32 %618, ptr %36, align 4, !tbaa !9
  %619 = load i32, ptr %22, align 4, !tbaa !9
  %620 = icmp ne i32 %619, 0
  br i1 %620, label %621, label %643

621:                                              ; preds = %615
  %622 = load i32, ptr %26, align 4, !tbaa !9
  %623 = icmp ne i32 %622, 0
  br i1 %623, label %624, label %643

624:                                              ; preds = %621
  %625 = load i32, ptr %23, align 4, !tbaa !9
  %626 = icmp ne i32 %625, 0
  br i1 %626, label %627, label %643

627:                                              ; preds = %624
  %628 = load i32, ptr %27, align 4, !tbaa !9
  %629 = icmp slt i32 %628, 0
  br i1 %629, label %630, label %635

630:                                              ; preds = %627
  %631 = load ptr, ptr %9, align 8, !tbaa !5
  %632 = load i32, ptr %30, align 4, !tbaa !9
  %633 = call i32 @qenc_hist_seen(ptr noundef %631, i32 noundef 1, i32 noundef %632)
  store i32 %633, ptr %27, align 4, !tbaa !9
  %634 = icmp ne i32 %633, 0
  br i1 %634, label %638, label %643

635:                                              ; preds = %627
  %636 = load i32, ptr %27, align 4, !tbaa !9
  %637 = icmp ne i32 %636, 0
  br i1 %637, label %638, label %643

638:                                              ; preds = %635, %630
  %639 = getelementptr inbounds %struct.encode_program, ptr %51, i32 0, i32 0
  store i32 3, ptr %639, align 4, !tbaa !28
  %640 = getelementptr inbounds %struct.encode_program, ptr %51, i32 0, i32 1
  store i32 0, ptr %640, align 4, !tbaa !30
  %641 = getelementptr inbounds %struct.encode_program, ptr %51, i32 0, i32 2
  store i32 1, ptr %641, align 4, !tbaa !31
  %642 = getelementptr inbounds %struct.encode_program, ptr %51, i32 0, i32 3
  store i32 6, ptr %642, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %51, i64 16, i1 false), !tbaa.struct !33
  br label %648

643:                                              ; preds = %635, %630, %624, %621, %615
  %644 = getelementptr inbounds %struct.encode_program, ptr %52, i32 0, i32 0
  store i32 0, ptr %644, align 4, !tbaa !28
  %645 = getelementptr inbounds %struct.encode_program, ptr %52, i32 0, i32 1
  store i32 4, ptr %645, align 4, !tbaa !30
  %646 = getelementptr inbounds %struct.encode_program, ptr %52, i32 0, i32 2
  store i32 0, ptr %646, align 4, !tbaa !31
  %647 = getelementptr inbounds %struct.encode_program, ptr %52, i32 0, i32 3
  store i32 2, ptr %647, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %52, i64 16, i1 false), !tbaa.struct !33
  br label %648

648:                                              ; preds = %643, %638
  br label %726

649:                                              ; preds = %606, %603, %594, %580, %571, %566, %560
  br label %650

650:                                              ; preds = %649
  %651 = load ptr, ptr %18, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %651, i32 0, i32 1
  %653 = getelementptr inbounds %struct.anon.4, ptr %652, i32 0, i32 0
  %654 = load ptr, ptr %653, align 8, !tbaa !52
  store ptr %654, ptr %18, align 8, !tbaa !5
  br label %557, !llvm.loop !53

655:                                              ; preds = %557
  br label %656

656:                                              ; preds = %655, %537
  %657 = load i32, ptr %22, align 4, !tbaa !9
  %658 = icmp ne i32 %657, 0
  br i1 %658, label %659, label %699

659:                                              ; preds = %656
  %660 = load i32, ptr %27, align 4, !tbaa !9
  %661 = icmp slt i32 %660, 0
  br i1 %661, label %662, label %667

662:                                              ; preds = %659
  %663 = load ptr, ptr %9, align 8, !tbaa !5
  %664 = load i32, ptr %30, align 4, !tbaa !9
  %665 = call i32 @qenc_hist_seen(ptr noundef %663, i32 noundef 1, i32 noundef %664)
  store i32 %665, ptr %27, align 4, !tbaa !9
  %666 = icmp ne i32 %665, 0
  br i1 %666, label %670, label %699

667:                                              ; preds = %659
  %668 = load i32, ptr %27, align 4, !tbaa !9
  %669 = icmp ne i32 %668, 0
  br i1 %669, label %670, label %699

670:                                              ; preds = %667, %662
  %671 = load i32, ptr %26, align 4, !tbaa !9
  %672 = icmp slt i32 %671, 0
  br i1 %672, label %673, label %682

673:                                              ; preds = %670
  %674 = load ptr, ptr %9, align 8, !tbaa !5
  %675 = load i32, ptr %41, align 4, !tbaa !9
  %676 = add i32 32, %675
  %677 = load i32, ptr %42, align 4, !tbaa !9
  %678 = add i32 %676, %677
  %679 = zext i32 %678 to i64
  %680 = call i32 @qenc_has_or_can_evict_at_least(ptr noundef %674, i64 noundef %679)
  store i32 %680, ptr %26, align 4, !tbaa !9
  %681 = icmp ne i32 %680, 0
  br i1 %681, label %685, label %699

682:                                              ; preds = %670
  %683 = load i32, ptr %26, align 4, !tbaa !9
  %684 = icmp ne i32 %683, 0
  br i1 %684, label %685, label %699

685:                                              ; preds = %682, %673
  %686 = load i32, ptr %23, align 4, !tbaa !9
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds [2 x [2 x %struct.encode_program]], ptr @lsqpack_enc_encode.programs.20, i64 0, i64 %687
  %689 = load i32, ptr %24, align 4, !tbaa !9
  %690 = icmp ne i32 %689, 0
  br i1 %690, label %691, label %694

691:                                              ; preds = %685
  %692 = load i32, ptr %37, align 4, !tbaa !9
  %693 = icmp ugt i32 %692, 0
  br label %694

694:                                              ; preds = %691, %685
  %695 = phi i1 [ false, %685 ], [ %693, %691 ]
  %696 = zext i1 %695 to i32
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds [2 x %struct.encode_program], ptr %688, i64 0, i64 %697
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 16 %698, i64 16, i1 false), !tbaa.struct !33
  br label %725

699:                                              ; preds = %682, %673, %667, %662, %656
  %700 = load i32, ptr %22, align 4, !tbaa !9
  %701 = icmp ne i32 %700, 0
  br i1 %701, label %702, label %719

702:                                              ; preds = %699
  %703 = load ptr, ptr %9, align 8, !tbaa !5
  %704 = load i32, ptr %29, align 4, !tbaa !9
  %705 = call i32 @qenc_hist_seen(ptr noundef %703, i32 noundef 0, i32 noundef %704)
  %706 = icmp ne i32 %705, 0
  br i1 %706, label %707, label %719

707:                                              ; preds = %702
  %708 = load ptr, ptr %9, align 8, !tbaa !5
  %709 = load i32, ptr %41, align 4, !tbaa !9
  %710 = add i32 32, %709
  %711 = add i32 %710, 0
  %712 = zext i32 %711 to i64
  %713 = call i32 @qenc_has_or_can_evict_at_least(ptr noundef %708, i64 noundef %712)
  %714 = icmp ne i32 %713, 0
  br i1 %714, label %715, label %719

715:                                              ; preds = %707
  %716 = load i32, ptr %23, align 4, !tbaa !9
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds [2 x %struct.encode_program], ptr @lsqpack_enc_encode.programs.21, i64 0, i64 %717
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 16 %718, i64 16, i1 false), !tbaa.struct !33
  br label %724

719:                                              ; preds = %707, %702, %699
  %720 = getelementptr inbounds %struct.encode_program, ptr %53, i32 0, i32 0
  store i32 0, ptr %720, align 4, !tbaa !28
  %721 = getelementptr inbounds %struct.encode_program, ptr %53, i32 0, i32 1
  store i32 6, ptr %721, align 4, !tbaa !30
  %722 = getelementptr inbounds %struct.encode_program, ptr %53, i32 0, i32 2
  store i32 0, ptr %722, align 4, !tbaa !31
  %723 = getelementptr inbounds %struct.encode_program, ptr %53, i32 0, i32 3
  store i32 0, ptr %723, align 4, !tbaa !32
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %53, i64 16, i1 false), !tbaa.struct !33
  br label %724

724:                                              ; preds = %719, %715
  br label %725

725:                                              ; preds = %724, %694
  br label %726

726:                                              ; preds = %725, %648, %536, %467, %415, %209
  %727 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 0
  %728 = load i32, ptr %727, align 4, !tbaa !28
  %729 = shl i32 1, %728
  %730 = and i32 %729, 60
  %731 = icmp ne i32 %730, 0
  br i1 %731, label %732, label %795

732:                                              ; preds = %726
  %733 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 1
  %734 = load i32, ptr %733, align 4, !tbaa !30
  %735 = shl i32 1, %734
  %736 = and i32 %735, 120
  %737 = icmp ne i32 %736, 0
  br i1 %737, label %738, label %795

738:                                              ; preds = %732
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #8
  %739 = load ptr, ptr %9, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.lsqpack_enc, ptr %739, i32 0, i32 22
  %741 = load i32, ptr %740, align 4, !tbaa !54
  %742 = load ptr, ptr %39, align 8, !tbaa !5
  %743 = load i32, ptr %41, align 4, !tbaa !9
  %744 = call i32 @qenc_enc_str_size(ptr noundef %742, i32 noundef %743)
  %745 = add i32 %741, %744
  %746 = load ptr, ptr %40, align 8, !tbaa !5
  %747 = load i32, ptr %42, align 4, !tbaa !9
  %748 = call i32 @qenc_enc_str_size(ptr noundef %746, i32 noundef %747)
  %749 = add i32 %745, %748
  store i32 %749, ptr %54, align 4, !tbaa !9
  %750 = load ptr, ptr %9, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.lsqpack_enc, ptr %750, i32 0, i32 21
  %752 = load i32, ptr %751, align 8, !tbaa !55
  %753 = load i32, ptr %41, align 4, !tbaa !9
  %754 = add i32 %752, %753
  %755 = load i32, ptr %42, align 4, !tbaa !9
  %756 = add i32 %754, %755
  store i32 %756, ptr %55, align 4, !tbaa !9
  %757 = load i32, ptr %54, align 4, !tbaa !9
  %758 = uitofp i32 %757 to float
  %759 = load i32, ptr %55, align 4, !tbaa !9
  %760 = uitofp i32 %759 to float
  %761 = fdiv float %758, %760
  %762 = fpext float %761 to double
  %763 = fcmp ogt double %762, 0x3FEE666666666666
  br i1 %763, label %764, label %791

764:                                              ; preds = %738
  %765 = load i32, ptr %22, align 4, !tbaa !9
  %766 = icmp ne i32 %765, 0
  br i1 %766, label %767, label %768

767:                                              ; preds = %764
  br label %769

768:                                              ; preds = %764
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.8, i32 noundef 1952, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

769:                                              ; preds = %767
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %770

770:                                              ; preds = %769
  %771 = load ptr, ptr %9, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.lsqpack_enc, ptr %771, i32 0, i32 23
  %773 = load ptr, ptr %772, align 8, !tbaa !17
  %774 = icmp ne ptr %773, null
  br i1 %774, label %775, label %788

775:                                              ; preds = %770
  %776 = load ptr, ptr %9, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.lsqpack_enc, ptr %776, i32 0, i32 23
  %778 = load ptr, ptr %777, align 8, !tbaa !17
  %779 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %778, ptr noundef @.str) #8
  %780 = load ptr, ptr %9, align 8, !tbaa !5
  %781 = getelementptr inbounds %struct.lsqpack_enc, ptr %780, i32 0, i32 23
  %782 = load ptr, ptr %781, align 8, !tbaa !17
  %783 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %782, ptr noundef @.str.23) #8
  %784 = load ptr, ptr %9, align 8, !tbaa !5
  %785 = getelementptr inbounds %struct.lsqpack_enc, ptr %784, i32 0, i32 23
  %786 = load ptr, ptr %785, align 8, !tbaa !17
  %787 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %786, ptr noundef @.str.2) #8
  br label %788

788:                                              ; preds = %775, %770
  br label %789

789:                                              ; preds = %788
  br label %790

790:                                              ; preds = %789
  store i32 8, ptr %43, align 4
  br label %792

791:                                              ; preds = %738
  store i32 0, ptr %43, align 4
  br label %792

792:                                              ; preds = %791, %790
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  %793 = load i32, ptr %43, align 4
  switch i32 %793, label %1539 [
    i32 0, label %794
    i32 8, label %254
  ]

794:                                              ; preds = %792
  br label %795

795:                                              ; preds = %794, %732, %726
  br label %796

796:                                              ; preds = %795
  %797 = load ptr, ptr %9, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.lsqpack_enc, ptr %797, i32 0, i32 23
  %799 = load ptr, ptr %798, align 8, !tbaa !17
  %800 = icmp ne ptr %799, null
  br i1 %800, label %801, label %831

801:                                              ; preds = %796
  %802 = load ptr, ptr %9, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.lsqpack_enc, ptr %802, i32 0, i32 23
  %804 = load ptr, ptr %803, align 8, !tbaa !17
  %805 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %804, ptr noundef @.str) #8
  %806 = load ptr, ptr %9, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.lsqpack_enc, ptr %806, i32 0, i32 23
  %808 = load ptr, ptr %807, align 8, !tbaa !17
  %809 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 0
  %810 = load i32, ptr %809, align 4, !tbaa !28
  %811 = zext i32 %810 to i64
  %812 = getelementptr inbounds [6 x ptr], ptr @eea2str, i64 0, i64 %811
  %813 = load ptr, ptr %812, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 1
  %815 = load i32, ptr %814, align 4, !tbaa !30
  %816 = zext i32 %815 to i64
  %817 = getelementptr inbounds [7 x ptr], ptr @eha2str, i64 0, i64 %816
  %818 = load ptr, ptr %817, align 8, !tbaa !5
  %819 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 2
  %820 = load i32, ptr %819, align 4, !tbaa !31
  %821 = zext i32 %820 to i64
  %822 = getelementptr inbounds [3 x ptr], ptr @eta2str, i64 0, i64 %821
  %823 = load ptr, ptr %822, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 3
  %825 = load i32, ptr %824, align 4, !tbaa !32
  %826 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %808, ptr noundef @.str.24, ptr noundef %813, ptr noundef %818, ptr noundef %823, i32 noundef %825) #8
  %827 = load ptr, ptr %9, align 8, !tbaa !5
  %828 = getelementptr inbounds %struct.lsqpack_enc, ptr %827, i32 0, i32 23
  %829 = load ptr, ptr %828, align 8, !tbaa !17
  %830 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %829, ptr noundef @.str.2) #8
  br label %831

831:                                              ; preds = %801, %796
  br label %832

832:                                              ; preds = %831
  br label %833

833:                                              ; preds = %832
  %834 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 0
  %835 = load i32, ptr %834, align 4, !tbaa !28
  switch i32 %835, label %1002 [
    i32 1, label %836
    i32 2, label %863
    i32 3, label %903
    i32 4, label %947
    i32 5, label %947
    i32 0, label %1001
  ]

836:                                              ; preds = %833
  %837 = load ptr, ptr %10, align 8, !tbaa !5
  %838 = load ptr, ptr %16, align 8, !tbaa !5
  %839 = icmp uge ptr %837, %838
  br i1 %839, label %840, label %841

840:                                              ; preds = %836
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

841:                                              ; preds = %836
  %842 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %842, ptr %35, align 8, !tbaa !5
  %843 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 0, ptr %843, align 1, !tbaa !56
  %844 = load ptr, ptr %35, align 8, !tbaa !5
  %845 = load ptr, ptr %16, align 8, !tbaa !5
  %846 = load ptr, ptr %9, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.lsqpack_enc, ptr %846, i32 0, i32 0
  %848 = load i32, ptr %847, align 8, !tbaa !34
  %849 = load i32, ptr %36, align 4, !tbaa !9
  %850 = sub i32 %848, %849
  %851 = zext i32 %850 to i64
  %852 = call ptr @lsqpack_enc_int(ptr noundef %844, ptr noundef %845, i64 noundef %851, i32 noundef 5)
  store ptr %852, ptr %35, align 8, !tbaa !5
  %853 = load ptr, ptr %35, align 8, !tbaa !5
  %854 = load ptr, ptr %10, align 8, !tbaa !5
  %855 = icmp ule ptr %853, %854
  br i1 %855, label %856, label %857

856:                                              ; preds = %841
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

857:                                              ; preds = %841
  %858 = load ptr, ptr %35, align 8, !tbaa !5
  %859 = load ptr, ptr %10, align 8, !tbaa !5
  %860 = ptrtoint ptr %858 to i64
  %861 = ptrtoint ptr %859 to i64
  %862 = sub i64 %860, %861
  store i64 %862, ptr %32, align 8, !tbaa !11
  br label %1009

863:                                              ; preds = %833
  %864 = load ptr, ptr %10, align 8, !tbaa !5
  %865 = load ptr, ptr %16, align 8, !tbaa !5
  %866 = icmp uge ptr %864, %865
  br i1 %866, label %867, label %868

867:                                              ; preds = %863
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

868:                                              ; preds = %863
  %869 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %869, ptr %35, align 8, !tbaa !5
  %870 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 -64, ptr %870, align 1, !tbaa !56
  %871 = load ptr, ptr %35, align 8, !tbaa !5
  %872 = load ptr, ptr %16, align 8, !tbaa !5
  %873 = load i32, ptr %36, align 4, !tbaa !9
  %874 = zext i32 %873 to i64
  %875 = call ptr @lsqpack_enc_int(ptr noundef %871, ptr noundef %872, i64 noundef %874, i32 noundef 6)
  store ptr %875, ptr %35, align 8, !tbaa !5
  %876 = load ptr, ptr %35, align 8, !tbaa !5
  %877 = load ptr, ptr %10, align 8, !tbaa !5
  %878 = icmp ule ptr %876, %877
  br i1 %878, label %879, label %880

879:                                              ; preds = %868
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

880:                                              ; preds = %868
  %881 = load ptr, ptr %35, align 8, !tbaa !5
  %882 = load ptr, ptr %16, align 8, !tbaa !5
  %883 = load ptr, ptr %35, align 8, !tbaa !5
  %884 = ptrtoint ptr %882 to i64
  %885 = ptrtoint ptr %883 to i64
  %886 = sub i64 %884, %885
  %887 = load ptr, ptr %40, align 8, !tbaa !5
  %888 = load i32, ptr %42, align 4, !tbaa !9
  %889 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %881, i64 noundef %886, ptr noundef %887, i32 noundef %888)
  store i32 %889, ptr %38, align 4, !tbaa !9
  %890 = load i32, ptr %38, align 4, !tbaa !9
  %891 = icmp slt i32 %890, 0
  br i1 %891, label %892, label %893

892:                                              ; preds = %880
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

893:                                              ; preds = %880
  %894 = load i32, ptr %38, align 4, !tbaa !9
  %895 = load ptr, ptr %35, align 8, !tbaa !5
  %896 = zext i32 %894 to i64
  %897 = getelementptr inbounds i8, ptr %895, i64 %896
  store ptr %897, ptr %35, align 8, !tbaa !5
  %898 = load ptr, ptr %35, align 8, !tbaa !5
  %899 = load ptr, ptr %10, align 8, !tbaa !5
  %900 = ptrtoint ptr %898 to i64
  %901 = ptrtoint ptr %899 to i64
  %902 = sub i64 %900, %901
  store i64 %902, ptr %32, align 8, !tbaa !11
  br label %1009

903:                                              ; preds = %833
  %904 = load ptr, ptr %10, align 8, !tbaa !5
  %905 = load ptr, ptr %16, align 8, !tbaa !5
  %906 = icmp uge ptr %904, %905
  br i1 %906, label %907, label %908

907:                                              ; preds = %903
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

908:                                              ; preds = %903
  %909 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %909, ptr %35, align 8, !tbaa !5
  %910 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 -128, ptr %910, align 1, !tbaa !56
  %911 = load ptr, ptr %35, align 8, !tbaa !5
  %912 = load ptr, ptr %16, align 8, !tbaa !5
  %913 = load ptr, ptr %9, align 8, !tbaa !5
  %914 = getelementptr inbounds %struct.lsqpack_enc, ptr %913, i32 0, i32 0
  %915 = load i32, ptr %914, align 8, !tbaa !34
  %916 = load i32, ptr %36, align 4, !tbaa !9
  %917 = sub i32 %915, %916
  %918 = zext i32 %917 to i64
  %919 = call ptr @lsqpack_enc_int(ptr noundef %911, ptr noundef %912, i64 noundef %918, i32 noundef 6)
  store ptr %919, ptr %35, align 8, !tbaa !5
  %920 = load ptr, ptr %35, align 8, !tbaa !5
  %921 = load ptr, ptr %10, align 8, !tbaa !5
  %922 = icmp ule ptr %920, %921
  br i1 %922, label %923, label %924

923:                                              ; preds = %908
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

924:                                              ; preds = %908
  %925 = load ptr, ptr %35, align 8, !tbaa !5
  %926 = load ptr, ptr %16, align 8, !tbaa !5
  %927 = load ptr, ptr %35, align 8, !tbaa !5
  %928 = ptrtoint ptr %926 to i64
  %929 = ptrtoint ptr %927 to i64
  %930 = sub i64 %928, %929
  %931 = load ptr, ptr %40, align 8, !tbaa !5
  %932 = load i32, ptr %42, align 4, !tbaa !9
  %933 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %925, i64 noundef %930, ptr noundef %931, i32 noundef %932)
  store i32 %933, ptr %38, align 4, !tbaa !9
  %934 = load i32, ptr %38, align 4, !tbaa !9
  %935 = icmp slt i32 %934, 0
  br i1 %935, label %936, label %937

936:                                              ; preds = %924
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

937:                                              ; preds = %924
  %938 = load i32, ptr %38, align 4, !tbaa !9
  %939 = load ptr, ptr %35, align 8, !tbaa !5
  %940 = zext i32 %938 to i64
  %941 = getelementptr inbounds i8, ptr %939, i64 %940
  store ptr %941, ptr %35, align 8, !tbaa !5
  %942 = load ptr, ptr %35, align 8, !tbaa !5
  %943 = load ptr, ptr %10, align 8, !tbaa !5
  %944 = ptrtoint ptr %942 to i64
  %945 = ptrtoint ptr %943 to i64
  %946 = sub i64 %944, %945
  store i64 %946, ptr %32, align 8, !tbaa !11
  br label %1009

947:                                              ; preds = %833, %833
  %948 = load ptr, ptr %10, align 8, !tbaa !5
  %949 = load ptr, ptr %16, align 8, !tbaa !5
  %950 = icmp uge ptr %948, %949
  br i1 %950, label %951, label %952

951:                                              ; preds = %947
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

952:                                              ; preds = %947
  %953 = load ptr, ptr %10, align 8, !tbaa !5
  store ptr %953, ptr %35, align 8, !tbaa !5
  %954 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 64, ptr %954, align 1, !tbaa !56
  %955 = load ptr, ptr %35, align 8, !tbaa !5
  %956 = load ptr, ptr %16, align 8, !tbaa !5
  %957 = load ptr, ptr %35, align 8, !tbaa !5
  %958 = ptrtoint ptr %956 to i64
  %959 = ptrtoint ptr %957 to i64
  %960 = sub i64 %958, %959
  %961 = load ptr, ptr %39, align 8, !tbaa !5
  %962 = load i32, ptr %41, align 4, !tbaa !9
  %963 = call i32 @lsqpack_enc_enc_str(i32 noundef 5, ptr noundef %955, i64 noundef %960, ptr noundef %961, i32 noundef %962)
  store i32 %963, ptr %38, align 4, !tbaa !9
  %964 = load i32, ptr %38, align 4, !tbaa !9
  %965 = icmp slt i32 %964, 0
  br i1 %965, label %966, label %967

966:                                              ; preds = %952
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

967:                                              ; preds = %952
  %968 = load i32, ptr %38, align 4, !tbaa !9
  %969 = load ptr, ptr %35, align 8, !tbaa !5
  %970 = sext i32 %968 to i64
  %971 = getelementptr inbounds i8, ptr %969, i64 %970
  store ptr %971, ptr %35, align 8, !tbaa !5
  %972 = load ptr, ptr %35, align 8, !tbaa !5
  %973 = load ptr, ptr %16, align 8, !tbaa !5
  %974 = load ptr, ptr %35, align 8, !tbaa !5
  %975 = ptrtoint ptr %973 to i64
  %976 = ptrtoint ptr %974 to i64
  %977 = sub i64 %975, %976
  %978 = load ptr, ptr %40, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 0
  %980 = load i32, ptr %979, align 4, !tbaa !28
  %981 = icmp eq i32 %980, 4
  br i1 %981, label %982, label %984

982:                                              ; preds = %967
  %983 = load i32, ptr %42, align 4, !tbaa !9
  br label %985

984:                                              ; preds = %967
  br label %985

985:                                              ; preds = %984, %982
  %986 = phi i32 [ %983, %982 ], [ 0, %984 ]
  %987 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %972, i64 noundef %977, ptr noundef %978, i32 noundef %986)
  store i32 %987, ptr %38, align 4, !tbaa !9
  %988 = load i32, ptr %38, align 4, !tbaa !9
  %989 = icmp slt i32 %988, 0
  br i1 %989, label %990, label %991

990:                                              ; preds = %985
  store i32 1, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

991:                                              ; preds = %985
  %992 = load i32, ptr %38, align 4, !tbaa !9
  %993 = load ptr, ptr %35, align 8, !tbaa !5
  %994 = sext i32 %992 to i64
  %995 = getelementptr inbounds i8, ptr %993, i64 %994
  store ptr %995, ptr %35, align 8, !tbaa !5
  %996 = load ptr, ptr %35, align 8, !tbaa !5
  %997 = load ptr, ptr %10, align 8, !tbaa !5
  %998 = ptrtoint ptr %996 to i64
  %999 = ptrtoint ptr %997 to i64
  %1000 = sub i64 %998, %999
  store i64 %1000, ptr %32, align 8, !tbaa !11
  br label %1009

1001:                                             ; preds = %833
  br label %1002

1002:                                             ; preds = %1001, %833
  %1003 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 0
  %1004 = load i32, ptr %1003, align 4, !tbaa !28
  %1005 = icmp eq i32 0, %1004
  br i1 %1005, label %1006, label %1007

1006:                                             ; preds = %1002
  br label %1008

1007:                                             ; preds = %1002
  call void @__assert_fail(ptr noundef @.str.25, ptr noundef @.str.8, i32 noundef 2024, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1008:                                             ; preds = %1006
  store i64 0, ptr %32, align 8, !tbaa !11
  br label %1009

1009:                                             ; preds = %1008, %991, %937, %893, %857
  %1010 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %1010, ptr %35, align 8, !tbaa !5
  %1011 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 1
  %1012 = load i32, ptr %1011, align 4, !tbaa !30
  switch i32 %1012, label %1260 [
    i32 1, label %1013
    i32 0, label %1030
    i32 2, label %1067
    i32 6, label %1097
    i32 5, label %1145
    i32 4, label %1205
    i32 3, label %1259
  ]

1013:                                             ; preds = %1009
  %1014 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 -64, ptr %1014, align 1, !tbaa !56
  %1015 = load ptr, ptr %35, align 8, !tbaa !5
  %1016 = load ptr, ptr %17, align 8, !tbaa !5
  %1017 = load i32, ptr %36, align 4, !tbaa !9
  %1018 = zext i32 %1017 to i64
  %1019 = call ptr @lsqpack_enc_int(ptr noundef %1015, ptr noundef %1016, i64 noundef %1018, i32 noundef 6)
  store ptr %1019, ptr %35, align 8, !tbaa !5
  %1020 = load ptr, ptr %35, align 8, !tbaa !5
  %1021 = load ptr, ptr %12, align 8, !tbaa !5
  %1022 = icmp ule ptr %1020, %1021
  br i1 %1022, label %1023, label %1024

1023:                                             ; preds = %1013
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1024:                                             ; preds = %1013
  %1025 = load ptr, ptr %35, align 8, !tbaa !5
  %1026 = load ptr, ptr %12, align 8, !tbaa !5
  %1027 = ptrtoint ptr %1025 to i64
  %1028 = ptrtoint ptr %1026 to i64
  %1029 = sub i64 %1027, %1028
  store i64 %1029, ptr %33, align 8, !tbaa !11
  br label %1308

1030:                                             ; preds = %1009
  %1031 = load ptr, ptr %9, align 8, !tbaa !5
  %1032 = getelementptr inbounds %struct.lsqpack_enc, ptr %1031, i32 0, i32 0
  %1033 = load i32, ptr %1032, align 8, !tbaa !34
  %1034 = add i32 %1033, 1
  store i32 %1034, ptr %36, align 4, !tbaa !9
  br label %1035

1035:                                             ; preds = %1074, %1030
  %1036 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 16, ptr %1036, align 1, !tbaa !56
  %1037 = load i32, ptr %36, align 4, !tbaa !9
  %1038 = load ptr, ptr %9, align 8, !tbaa !5
  %1039 = getelementptr inbounds %struct.lsqpack_enc, ptr %1038, i32 0, i32 19
  %1040 = getelementptr inbounds %struct.anon.2, ptr %1039, i32 0, i32 5
  %1041 = load i32, ptr %1040, align 4, !tbaa !57
  %1042 = icmp ugt i32 %1037, %1041
  br i1 %1042, label %1043, label %1044

1043:                                             ; preds = %1035
  br label %1045

1044:                                             ; preds = %1035
  call void @__assert_fail(ptr noundef @.str.26, ptr noundef @.str.8, i32 noundef 2043, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1045:                                             ; preds = %1043
  %1046 = load ptr, ptr %35, align 8, !tbaa !5
  %1047 = load ptr, ptr %17, align 8, !tbaa !5
  %1048 = load i32, ptr %36, align 4, !tbaa !9
  %1049 = load ptr, ptr %9, align 8, !tbaa !5
  %1050 = getelementptr inbounds %struct.lsqpack_enc, ptr %1049, i32 0, i32 19
  %1051 = getelementptr inbounds %struct.anon.2, ptr %1050, i32 0, i32 5
  %1052 = load i32, ptr %1051, align 4, !tbaa !57
  %1053 = sub i32 %1048, %1052
  %1054 = sub i32 %1053, 1
  %1055 = zext i32 %1054 to i64
  %1056 = call ptr @lsqpack_enc_int(ptr noundef %1046, ptr noundef %1047, i64 noundef %1055, i32 noundef 4)
  store ptr %1056, ptr %35, align 8, !tbaa !5
  %1057 = load ptr, ptr %35, align 8, !tbaa !5
  %1058 = load ptr, ptr %12, align 8, !tbaa !5
  %1059 = icmp ule ptr %1057, %1058
  br i1 %1059, label %1060, label %1061

1060:                                             ; preds = %1045
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1061:                                             ; preds = %1045
  %1062 = load ptr, ptr %35, align 8, !tbaa !5
  %1063 = load ptr, ptr %12, align 8, !tbaa !5
  %1064 = ptrtoint ptr %1062 to i64
  %1065 = ptrtoint ptr %1063 to i64
  %1066 = sub i64 %1064, %1065
  store i64 %1066, ptr %33, align 8, !tbaa !11
  br label %1308

1067:                                             ; preds = %1009
  %1068 = load i32, ptr %36, align 4, !tbaa !9
  %1069 = load ptr, ptr %9, align 8, !tbaa !5
  %1070 = getelementptr inbounds %struct.lsqpack_enc, ptr %1069, i32 0, i32 19
  %1071 = getelementptr inbounds %struct.anon.2, ptr %1070, i32 0, i32 5
  %1072 = load i32, ptr %1071, align 4, !tbaa !57
  %1073 = icmp ugt i32 %1068, %1072
  br i1 %1073, label %1074, label %1075

1074:                                             ; preds = %1067
  br label %1035

1075:                                             ; preds = %1067
  %1076 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 -128, ptr %1076, align 1, !tbaa !56
  %1077 = load ptr, ptr %35, align 8, !tbaa !5
  %1078 = load ptr, ptr %17, align 8, !tbaa !5
  %1079 = load ptr, ptr %9, align 8, !tbaa !5
  %1080 = getelementptr inbounds %struct.lsqpack_enc, ptr %1079, i32 0, i32 19
  %1081 = getelementptr inbounds %struct.anon.2, ptr %1080, i32 0, i32 5
  %1082 = load i32, ptr %1081, align 4, !tbaa !57
  %1083 = load i32, ptr %36, align 4, !tbaa !9
  %1084 = sub i32 %1082, %1083
  %1085 = zext i32 %1084 to i64
  %1086 = call ptr @lsqpack_enc_int(ptr noundef %1077, ptr noundef %1078, i64 noundef %1085, i32 noundef 6)
  store ptr %1086, ptr %35, align 8, !tbaa !5
  %1087 = load ptr, ptr %35, align 8, !tbaa !5
  %1088 = load ptr, ptr %12, align 8, !tbaa !5
  %1089 = icmp ule ptr %1087, %1088
  br i1 %1089, label %1090, label %1091

1090:                                             ; preds = %1075
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1091:                                             ; preds = %1075
  %1092 = load ptr, ptr %35, align 8, !tbaa !5
  %1093 = load ptr, ptr %12, align 8, !tbaa !5
  %1094 = ptrtoint ptr %1092 to i64
  %1095 = ptrtoint ptr %1093 to i64
  %1096 = sub i64 %1094, %1095
  store i64 %1096, ptr %33, align 8, !tbaa !11
  br label %1308

1097:                                             ; preds = %1009
  %1098 = load i32, ptr %15, align 4, !tbaa !9
  %1099 = and i32 %1098, 2
  %1100 = icmp ugt i32 %1099, 0
  %1101 = zext i1 %1100 to i32
  %1102 = shl i32 %1101, 4
  %1103 = or i32 32, %1102
  %1104 = trunc i32 %1103 to i8
  %1105 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %1104, ptr %1105, align 1, !tbaa !56
  %1106 = load ptr, ptr %35, align 8, !tbaa !5
  %1107 = load ptr, ptr %17, align 8, !tbaa !5
  %1108 = load ptr, ptr %35, align 8, !tbaa !5
  %1109 = ptrtoint ptr %1107 to i64
  %1110 = ptrtoint ptr %1108 to i64
  %1111 = sub i64 %1109, %1110
  %1112 = load ptr, ptr %39, align 8, !tbaa !5
  %1113 = load i32, ptr %41, align 4, !tbaa !9
  %1114 = call i32 @lsqpack_enc_enc_str(i32 noundef 3, ptr noundef %1106, i64 noundef %1111, ptr noundef %1112, i32 noundef %1113)
  store i32 %1114, ptr %38, align 4, !tbaa !9
  %1115 = load i32, ptr %38, align 4, !tbaa !9
  %1116 = icmp slt i32 %1115, 0
  br i1 %1116, label %1117, label %1118

1117:                                             ; preds = %1097
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1118:                                             ; preds = %1097
  %1119 = load i32, ptr %38, align 4, !tbaa !9
  %1120 = load ptr, ptr %35, align 8, !tbaa !5
  %1121 = sext i32 %1119 to i64
  %1122 = getelementptr inbounds i8, ptr %1120, i64 %1121
  store ptr %1122, ptr %35, align 8, !tbaa !5
  %1123 = load ptr, ptr %35, align 8, !tbaa !5
  %1124 = load ptr, ptr %17, align 8, !tbaa !5
  %1125 = load ptr, ptr %35, align 8, !tbaa !5
  %1126 = ptrtoint ptr %1124 to i64
  %1127 = ptrtoint ptr %1125 to i64
  %1128 = sub i64 %1126, %1127
  %1129 = load ptr, ptr %40, align 8, !tbaa !5
  %1130 = load i32, ptr %42, align 4, !tbaa !9
  %1131 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %1123, i64 noundef %1128, ptr noundef %1129, i32 noundef %1130)
  store i32 %1131, ptr %38, align 4, !tbaa !9
  %1132 = load i32, ptr %38, align 4, !tbaa !9
  %1133 = icmp slt i32 %1132, 0
  br i1 %1133, label %1134, label %1135

1134:                                             ; preds = %1118
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1135:                                             ; preds = %1118
  %1136 = load i32, ptr %38, align 4, !tbaa !9
  %1137 = load ptr, ptr %35, align 8, !tbaa !5
  %1138 = sext i32 %1136 to i64
  %1139 = getelementptr inbounds i8, ptr %1137, i64 %1138
  store ptr %1139, ptr %35, align 8, !tbaa !5
  %1140 = load ptr, ptr %35, align 8, !tbaa !5
  %1141 = load ptr, ptr %12, align 8, !tbaa !5
  %1142 = ptrtoint ptr %1140 to i64
  %1143 = ptrtoint ptr %1141 to i64
  %1144 = sub i64 %1142, %1143
  store i64 %1144, ptr %33, align 8, !tbaa !11
  br label %1308

1145:                                             ; preds = %1009
  %1146 = load ptr, ptr %9, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.lsqpack_enc, ptr %1146, i32 0, i32 0
  %1148 = load i32, ptr %1147, align 8, !tbaa !34
  %1149 = add i32 %1148, 1
  store i32 %1149, ptr %36, align 4, !tbaa !9
  br label %1150

1150:                                             ; preds = %1212, %1145
  %1151 = load i32, ptr %15, align 4, !tbaa !9
  %1152 = and i32 %1151, 2
  %1153 = icmp ugt i32 %1152, 0
  %1154 = zext i1 %1153 to i32
  %1155 = shl i32 %1154, 3
  %1156 = trunc i32 %1155 to i8
  %1157 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %1156, ptr %1157, align 1, !tbaa !56
  %1158 = load i32, ptr %36, align 4, !tbaa !9
  %1159 = load ptr, ptr %9, align 8, !tbaa !5
  %1160 = getelementptr inbounds %struct.lsqpack_enc, ptr %1159, i32 0, i32 19
  %1161 = getelementptr inbounds %struct.anon.2, ptr %1160, i32 0, i32 5
  %1162 = load i32, ptr %1161, align 4, !tbaa !57
  %1163 = icmp ugt i32 %1158, %1162
  br i1 %1163, label %1164, label %1165

1164:                                             ; preds = %1150
  br label %1166

1165:                                             ; preds = %1150
  call void @__assert_fail(ptr noundef @.str.26, ptr noundef @.str.8, i32 noundef 2080, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1166:                                             ; preds = %1164
  %1167 = load ptr, ptr %35, align 8, !tbaa !5
  %1168 = load ptr, ptr %17, align 8, !tbaa !5
  %1169 = load i32, ptr %36, align 4, !tbaa !9
  %1170 = load ptr, ptr %9, align 8, !tbaa !5
  %1171 = getelementptr inbounds %struct.lsqpack_enc, ptr %1170, i32 0, i32 19
  %1172 = getelementptr inbounds %struct.anon.2, ptr %1171, i32 0, i32 5
  %1173 = load i32, ptr %1172, align 4, !tbaa !57
  %1174 = sub i32 %1169, %1173
  %1175 = sub i32 %1174, 1
  %1176 = zext i32 %1175 to i64
  %1177 = call ptr @lsqpack_enc_int(ptr noundef %1167, ptr noundef %1168, i64 noundef %1176, i32 noundef 3)
  store ptr %1177, ptr %35, align 8, !tbaa !5
  %1178 = load ptr, ptr %35, align 8, !tbaa !5
  %1179 = load ptr, ptr %12, align 8, !tbaa !5
  %1180 = icmp ule ptr %1178, %1179
  br i1 %1180, label %1181, label %1182

1181:                                             ; preds = %1166
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1182:                                             ; preds = %1166
  %1183 = load ptr, ptr %35, align 8, !tbaa !5
  %1184 = load ptr, ptr %17, align 8, !tbaa !5
  %1185 = load ptr, ptr %35, align 8, !tbaa !5
  %1186 = ptrtoint ptr %1184 to i64
  %1187 = ptrtoint ptr %1185 to i64
  %1188 = sub i64 %1186, %1187
  %1189 = load ptr, ptr %40, align 8, !tbaa !5
  %1190 = load i32, ptr %42, align 4, !tbaa !9
  %1191 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %1183, i64 noundef %1188, ptr noundef %1189, i32 noundef %1190)
  store i32 %1191, ptr %38, align 4, !tbaa !9
  %1192 = load i32, ptr %38, align 4, !tbaa !9
  %1193 = icmp slt i32 %1192, 0
  br i1 %1193, label %1194, label %1195

1194:                                             ; preds = %1182
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1195:                                             ; preds = %1182
  %1196 = load i32, ptr %38, align 4, !tbaa !9
  %1197 = load ptr, ptr %35, align 8, !tbaa !5
  %1198 = zext i32 %1196 to i64
  %1199 = getelementptr inbounds i8, ptr %1197, i64 %1198
  store ptr %1199, ptr %35, align 8, !tbaa !5
  %1200 = load ptr, ptr %35, align 8, !tbaa !5
  %1201 = load ptr, ptr %12, align 8, !tbaa !5
  %1202 = ptrtoint ptr %1200 to i64
  %1203 = ptrtoint ptr %1201 to i64
  %1204 = sub i64 %1202, %1203
  store i64 %1204, ptr %33, align 8, !tbaa !11
  br label %1308

1205:                                             ; preds = %1009
  %1206 = load i32, ptr %36, align 4, !tbaa !9
  %1207 = load ptr, ptr %9, align 8, !tbaa !5
  %1208 = getelementptr inbounds %struct.lsqpack_enc, ptr %1207, i32 0, i32 19
  %1209 = getelementptr inbounds %struct.anon.2, ptr %1208, i32 0, i32 5
  %1210 = load i32, ptr %1209, align 4, !tbaa !57
  %1211 = icmp ugt i32 %1206, %1210
  br i1 %1211, label %1212, label %1213

1212:                                             ; preds = %1205
  br label %1150

1213:                                             ; preds = %1205
  %1214 = load i32, ptr %15, align 4, !tbaa !9
  %1215 = and i32 %1214, 2
  %1216 = icmp ugt i32 %1215, 0
  %1217 = zext i1 %1216 to i32
  %1218 = shl i32 %1217, 5
  %1219 = or i32 64, %1218
  %1220 = trunc i32 %1219 to i8
  %1221 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %1220, ptr %1221, align 1, !tbaa !56
  %1222 = load ptr, ptr %35, align 8, !tbaa !5
  %1223 = load ptr, ptr %17, align 8, !tbaa !5
  %1224 = load ptr, ptr %9, align 8, !tbaa !5
  %1225 = getelementptr inbounds %struct.lsqpack_enc, ptr %1224, i32 0, i32 19
  %1226 = getelementptr inbounds %struct.anon.2, ptr %1225, i32 0, i32 5
  %1227 = load i32, ptr %1226, align 4, !tbaa !57
  %1228 = load i32, ptr %36, align 4, !tbaa !9
  %1229 = sub i32 %1227, %1228
  %1230 = zext i32 %1229 to i64
  %1231 = call ptr @lsqpack_enc_int(ptr noundef %1222, ptr noundef %1223, i64 noundef %1230, i32 noundef 4)
  store ptr %1231, ptr %35, align 8, !tbaa !5
  %1232 = load ptr, ptr %35, align 8, !tbaa !5
  %1233 = load ptr, ptr %12, align 8, !tbaa !5
  %1234 = icmp ule ptr %1232, %1233
  br i1 %1234, label %1235, label %1236

1235:                                             ; preds = %1213
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1236:                                             ; preds = %1213
  %1237 = load ptr, ptr %35, align 8, !tbaa !5
  %1238 = load ptr, ptr %17, align 8, !tbaa !5
  %1239 = load ptr, ptr %35, align 8, !tbaa !5
  %1240 = ptrtoint ptr %1238 to i64
  %1241 = ptrtoint ptr %1239 to i64
  %1242 = sub i64 %1240, %1241
  %1243 = load ptr, ptr %40, align 8, !tbaa !5
  %1244 = load i32, ptr %42, align 4, !tbaa !9
  %1245 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %1237, i64 noundef %1242, ptr noundef %1243, i32 noundef %1244)
  store i32 %1245, ptr %38, align 4, !tbaa !9
  %1246 = load i32, ptr %38, align 4, !tbaa !9
  %1247 = icmp slt i32 %1246, 0
  br i1 %1247, label %1248, label %1249

1248:                                             ; preds = %1236
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1249:                                             ; preds = %1236
  %1250 = load i32, ptr %38, align 4, !tbaa !9
  %1251 = load ptr, ptr %35, align 8, !tbaa !5
  %1252 = zext i32 %1250 to i64
  %1253 = getelementptr inbounds i8, ptr %1251, i64 %1252
  store ptr %1253, ptr %35, align 8, !tbaa !5
  %1254 = load ptr, ptr %35, align 8, !tbaa !5
  %1255 = load ptr, ptr %12, align 8, !tbaa !5
  %1256 = ptrtoint ptr %1254 to i64
  %1257 = ptrtoint ptr %1255 to i64
  %1258 = sub i64 %1256, %1257
  store i64 %1258, ptr %33, align 8, !tbaa !11
  br label %1308

1259:                                             ; preds = %1009
  br label %1260

1260:                                             ; preds = %1259, %1009
  %1261 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 1
  %1262 = load i32, ptr %1261, align 4, !tbaa !30
  %1263 = icmp eq i32 %1262, 3
  br i1 %1263, label %1264, label %1265

1264:                                             ; preds = %1260
  br label %1266

1265:                                             ; preds = %1260
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.8, i32 noundef 2110, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1266:                                             ; preds = %1264
  %1267 = load i32, ptr %15, align 4, !tbaa !9
  %1268 = and i32 %1267, 2
  %1269 = icmp ugt i32 %1268, 0
  %1270 = zext i1 %1269 to i32
  %1271 = shl i32 %1270, 5
  %1272 = or i32 64, %1271
  %1273 = or i32 %1272, 16
  %1274 = trunc i32 %1273 to i8
  %1275 = load ptr, ptr %35, align 8, !tbaa !5
  store i8 %1274, ptr %1275, align 1, !tbaa !56
  %1276 = load ptr, ptr %35, align 8, !tbaa !5
  %1277 = load ptr, ptr %17, align 8, !tbaa !5
  %1278 = load i32, ptr %36, align 4, !tbaa !9
  %1279 = zext i32 %1278 to i64
  %1280 = call ptr @lsqpack_enc_int(ptr noundef %1276, ptr noundef %1277, i64 noundef %1279, i32 noundef 4)
  store ptr %1280, ptr %35, align 8, !tbaa !5
  %1281 = load ptr, ptr %35, align 8, !tbaa !5
  %1282 = load ptr, ptr %12, align 8, !tbaa !5
  %1283 = icmp ule ptr %1281, %1282
  br i1 %1283, label %1284, label %1285

1284:                                             ; preds = %1266
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1285:                                             ; preds = %1266
  %1286 = load ptr, ptr %35, align 8, !tbaa !5
  %1287 = load ptr, ptr %17, align 8, !tbaa !5
  %1288 = load ptr, ptr %35, align 8, !tbaa !5
  %1289 = ptrtoint ptr %1287 to i64
  %1290 = ptrtoint ptr %1288 to i64
  %1291 = sub i64 %1289, %1290
  %1292 = load ptr, ptr %40, align 8, !tbaa !5
  %1293 = load i32, ptr %42, align 4, !tbaa !9
  %1294 = call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef %1286, i64 noundef %1291, ptr noundef %1292, i32 noundef %1293)
  store i32 %1294, ptr %38, align 4, !tbaa !9
  %1295 = load i32, ptr %38, align 4, !tbaa !9
  %1296 = icmp slt i32 %1295, 0
  br i1 %1296, label %1297, label %1298

1297:                                             ; preds = %1285
  store i32 2, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1298:                                             ; preds = %1285
  %1299 = load i32, ptr %38, align 4, !tbaa !9
  %1300 = load ptr, ptr %35, align 8, !tbaa !5
  %1301 = zext i32 %1299 to i64
  %1302 = getelementptr inbounds i8, ptr %1300, i64 %1301
  store ptr %1302, ptr %35, align 8, !tbaa !5
  %1303 = load ptr, ptr %35, align 8, !tbaa !5
  %1304 = load ptr, ptr %12, align 8, !tbaa !5
  %1305 = ptrtoint ptr %1303 to i64
  %1306 = ptrtoint ptr %1304 to i64
  %1307 = sub i64 %1305, %1306
  store i64 %1307, ptr %33, align 8, !tbaa !11
  br label %1308

1308:                                             ; preds = %1298, %1249, %1195, %1135, %1091, %1061, %1024
  %1309 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 2
  %1310 = load i32, ptr %1309, align 4, !tbaa !31
  switch i32 %1310, label %1391 [
    i32 1, label %1311
    i32 2, label %1311
    i32 0, label %1390
  ]

1311:                                             ; preds = %1308, %1308
  %1312 = load ptr, ptr %9, align 8, !tbaa !5
  %1313 = load i32, ptr %29, align 4, !tbaa !9
  %1314 = load i32, ptr %30, align 4, !tbaa !9
  %1315 = load ptr, ptr %39, align 8, !tbaa !5
  %1316 = load i32, ptr %41, align 4, !tbaa !9
  %1317 = load ptr, ptr %40, align 8, !tbaa !5
  %1318 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 2
  %1319 = load i32, ptr %1318, align 4, !tbaa !31
  %1320 = icmp eq i32 %1319, 1
  br i1 %1320, label %1321, label %1323

1321:                                             ; preds = %1311
  %1322 = load i32, ptr %42, align 4, !tbaa !9
  br label %1324

1323:                                             ; preds = %1311
  br label %1324

1324:                                             ; preds = %1323, %1321
  %1325 = phi i32 [ %1322, %1321 ], [ 0, %1323 ]
  %1326 = call ptr @lsqpack_enc_push_entry(ptr noundef %1312, i32 noundef %1313, i32 noundef %1314, ptr noundef %1315, i32 noundef %1316, ptr noundef %1317, i32 noundef %1325)
  store ptr %1326, ptr %19, align 8, !tbaa !5
  %1327 = load ptr, ptr %19, align 8, !tbaa !5
  %1328 = icmp ne ptr %1327, null
  br i1 %1328, label %1330, label %1329

1329:                                             ; preds = %1324
  store i32 0, ptr %22, align 4, !tbaa !9
  br label %254

1330:                                             ; preds = %1324
  %1331 = load ptr, ptr %19, align 8, !tbaa !5
  %1332 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1331, i32 0, i32 9
  %1333 = load i32, ptr %1332, align 8, !tbaa !43
  %1334 = add i32 32, %1333
  %1335 = load ptr, ptr %19, align 8, !tbaa !5
  %1336 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1335, i32 0, i32 10
  %1337 = load i32, ptr %1336, align 4, !tbaa !44
  %1338 = add i32 %1334, %1337
  %1339 = load ptr, ptr %9, align 8, !tbaa !5
  %1340 = getelementptr inbounds %struct.lsqpack_enc, ptr %1339, i32 0, i32 19
  %1341 = getelementptr inbounds %struct.anon.2, ptr %1340, i32 0, i32 0
  %1342 = load ptr, ptr %1341, align 8, !tbaa !58
  %1343 = getelementptr inbounds %struct.lsqpack_header_info, ptr %1342, i32 0, i32 5
  %1344 = load i32, ptr %1343, align 4, !tbaa !59
  %1345 = add i32 %1344, %1338
  store i32 %1345, ptr %1343, align 4, !tbaa !59
  %1346 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 3
  %1347 = load i32, ptr %1346, align 4, !tbaa !32
  %1348 = and i32 %1347, 4
  %1349 = icmp ne i32 %1348, 0
  br i1 %1349, label %1350, label %1389

1350:                                             ; preds = %1330
  %1351 = load ptr, ptr %19, align 8, !tbaa !5
  %1352 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1351, i32 0, i32 6
  %1353 = load i32, ptr %1352, align 4, !tbaa !61
  %1354 = add i32 %1353, 1
  store i32 %1354, ptr %1352, align 4, !tbaa !61
  %1355 = load ptr, ptr %9, align 8, !tbaa !5
  %1356 = getelementptr inbounds %struct.lsqpack_enc, ptr %1355, i32 0, i32 19
  %1357 = getelementptr inbounds %struct.anon.2, ptr %1356, i32 0, i32 4
  %1358 = load i32, ptr %1357, align 8, !tbaa !62
  %1359 = or i32 %1358, 2
  store i32 %1359, ptr %1357, align 8, !tbaa !62
  %1360 = load ptr, ptr %9, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.lsqpack_enc, ptr %1360, i32 0, i32 19
  %1362 = getelementptr inbounds %struct.anon.2, ptr %1361, i32 0, i32 0
  %1363 = load ptr, ptr %1362, align 8, !tbaa !58
  %1364 = getelementptr inbounds %struct.lsqpack_header_info, ptr %1363, i32 0, i32 7
  %1365 = load i32, ptr %1364, align 4, !tbaa !63
  %1366 = icmp ne i32 %1365, 0
  br i1 %1366, label %1367, label %1381

1367:                                             ; preds = %1350
  %1368 = load ptr, ptr %19, align 8, !tbaa !5
  %1369 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1368, i32 0, i32 3
  %1370 = load i32, ptr %1369, align 8, !tbaa !48
  %1371 = load ptr, ptr %9, align 8, !tbaa !5
  %1372 = getelementptr inbounds %struct.lsqpack_enc, ptr %1371, i32 0, i32 19
  %1373 = getelementptr inbounds %struct.anon.2, ptr %1372, i32 0, i32 0
  %1374 = load ptr, ptr %1373, align 8, !tbaa !58
  %1375 = getelementptr inbounds %struct.lsqpack_header_info, ptr %1374, i32 0, i32 7
  %1376 = load i32, ptr %1375, align 4, !tbaa !63
  %1377 = icmp ugt i32 %1370, %1376
  br i1 %1377, label %1378, label %1379

1378:                                             ; preds = %1367
  br label %1380

1379:                                             ; preds = %1367
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 2146, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1380:                                             ; preds = %1378
  br label %1381

1381:                                             ; preds = %1380, %1350
  %1382 = load ptr, ptr %9, align 8, !tbaa !5
  %1383 = getelementptr inbounds %struct.lsqpack_enc, ptr %1382, i32 0, i32 19
  %1384 = getelementptr inbounds %struct.anon.2, ptr %1383, i32 0, i32 0
  %1385 = load ptr, ptr %1384, align 8, !tbaa !58
  %1386 = load ptr, ptr %19, align 8, !tbaa !5
  %1387 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1386, i32 0, i32 3
  %1388 = load i32, ptr %1387, align 8, !tbaa !48
  call void @qenc_maybe_update_hinfo_min_max(ptr noundef %1385, i32 noundef %1388)
  br label %1389

1389:                                             ; preds = %1381, %1330
  br label %1398

1390:                                             ; preds = %1308
  br label %1391

1391:                                             ; preds = %1390, %1308
  %1392 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 2
  %1393 = load i32, ptr %1392, align 4, !tbaa !31
  %1394 = icmp eq i32 %1393, 0
  br i1 %1394, label %1395, label %1396

1395:                                             ; preds = %1391
  br label %1397

1396:                                             ; preds = %1391
  call void @__assert_fail(ptr noundef @.str.29, ptr noundef @.str.8, i32 noundef 2152, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1397:                                             ; preds = %1395
  br label %1398

1398:                                             ; preds = %1397, %1389
  %1399 = getelementptr inbounds %struct.encode_program, ptr %21, i32 0, i32 3
  %1400 = load i32, ptr %1399, align 4, !tbaa !32
  %1401 = and i32 %1400, 2
  %1402 = icmp ne i32 %1401, 0
  br i1 %1402, label %1403, label %1415

1403:                                             ; preds = %1398
  %1404 = load ptr, ptr %18, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1404, i32 0, i32 6
  %1406 = load i32, ptr %1405, align 4, !tbaa !61
  %1407 = add i32 %1406, 1
  store i32 %1407, ptr %1405, align 4, !tbaa !61
  %1408 = load ptr, ptr %9, align 8, !tbaa !5
  %1409 = getelementptr inbounds %struct.lsqpack_enc, ptr %1408, i32 0, i32 19
  %1410 = getelementptr inbounds %struct.anon.2, ptr %1409, i32 0, i32 0
  %1411 = load ptr, ptr %1410, align 8, !tbaa !58
  %1412 = load ptr, ptr %18, align 8, !tbaa !5
  %1413 = getelementptr inbounds %struct.lsqpack_enc_table_entry, ptr %1412, i32 0, i32 3
  %1414 = load i32, ptr %1413, align 8, !tbaa !48
  call void @qenc_maybe_update_hinfo_min_max(ptr noundef %1411, i32 noundef %1414)
  br label %1415

1415:                                             ; preds = %1403, %1398
  %1416 = load ptr, ptr %9, align 8, !tbaa !5
  call void @qenc_remove_overflow_entries(ptr noundef %1416)
  %1417 = load i32, ptr %28, align 4, !tbaa !9
  %1418 = icmp ne i32 %1417, 0
  br i1 %1418, label %1419, label %1450

1419:                                             ; preds = %1415
  %1420 = load ptr, ptr %9, align 8, !tbaa !5
  %1421 = getelementptr inbounds %struct.lsqpack_enc, ptr %1420, i32 0, i32 26
  %1422 = load ptr, ptr %1421, align 8, !tbaa !35
  %1423 = icmp ne ptr %1422, null
  br i1 %1423, label %1424, label %1425

1424:                                             ; preds = %1419
  br label %1426

1425:                                             ; preds = %1419
  call void @__assert_fail(ptr noundef @.str.30, ptr noundef @.str.8, i32 noundef 2167, ptr noundef @__PRETTY_FUNCTION__.lsqpack_enc_encode) #10
  unreachable

1426:                                             ; preds = %1424
  %1427 = load ptr, ptr %9, align 8, !tbaa !5
  %1428 = getelementptr inbounds %struct.lsqpack_enc, ptr %1427, i32 0, i32 19
  %1429 = getelementptr inbounds %struct.anon.2, ptr %1428, i32 0, i32 2
  %1430 = load i32, ptr %1429, align 8, !tbaa !64
  %1431 = load ptr, ptr %9, align 8, !tbaa !5
  %1432 = getelementptr inbounds %struct.lsqpack_enc, ptr %1431, i32 0, i32 28
  %1433 = load i32, ptr %1432, align 4, !tbaa !65
  %1434 = icmp uge i32 %1430, %1433
  br i1 %1434, label %1435, label %1441

1435:                                             ; preds = %1426
  %1436 = load ptr, ptr %9, align 8, !tbaa !5
  %1437 = load ptr, ptr %9, align 8, !tbaa !5
  %1438 = getelementptr inbounds %struct.lsqpack_enc, ptr %1437, i32 0, i32 28
  %1439 = load i32, ptr %1438, align 4, !tbaa !65
  %1440 = add i32 %1439, 4
  call void @qenc_hist_update_size(ptr noundef %1436, i32 noundef %1440)
  br label %1441

1441:                                             ; preds = %1435, %1426
  %1442 = load ptr, ptr %9, align 8, !tbaa !5
  %1443 = load i32, ptr %29, align 4, !tbaa !9
  %1444 = load i32, ptr %30, align 4, !tbaa !9
  call void @qenc_hist_add(ptr noundef %1442, i32 noundef %1443, i32 noundef %1444)
  %1445 = load ptr, ptr %9, align 8, !tbaa !5
  %1446 = getelementptr inbounds %struct.lsqpack_enc, ptr %1445, i32 0, i32 19
  %1447 = getelementptr inbounds %struct.anon.2, ptr %1446, i32 0, i32 2
  %1448 = load i32, ptr %1447, align 8, !tbaa !64
  %1449 = add i32 %1448, 1
  store i32 %1449, ptr %1447, align 8, !tbaa !64
  br label %1450

1450:                                             ; preds = %1441, %1415
  br label %1451

1451:                                             ; preds = %1467, %1450
  %1452 = load ptr, ptr %9, align 8, !tbaa !5
  %1453 = load ptr, ptr %10, align 8, !tbaa !5
  %1454 = load i64, ptr %32, align 8, !tbaa !11
  %1455 = getelementptr inbounds i8, ptr %1453, i64 %1454
  %1456 = load ptr, ptr %16, align 8, !tbaa !5
  %1457 = load ptr, ptr %10, align 8, !tbaa !5
  %1458 = ptrtoint ptr %1456 to i64
  %1459 = ptrtoint ptr %1457 to i64
  %1460 = sub i64 %1458, %1459
  %1461 = load i64, ptr %32, align 8, !tbaa !11
  %1462 = sub i64 %1460, %1461
  %1463 = call i32 @qenc_dup_draining(ptr noundef %1452, ptr noundef %1455, i64 noundef %1462)
  %1464 = zext i32 %1463 to i64
  store i64 %1464, ptr %34, align 8, !tbaa !11
  %1465 = load i64, ptr %34, align 8, !tbaa !11
  %1466 = icmp ugt i64 %1465, 0
  br i1 %1466, label %1467, label %1472

1467:                                             ; preds = %1451
  %1468 = load i64, ptr %34, align 8, !tbaa !11
  %1469 = load i64, ptr %32, align 8, !tbaa !11
  %1470 = add i64 %1469, %1468
  store i64 %1470, ptr %32, align 8, !tbaa !11
  %1471 = load ptr, ptr %9, align 8, !tbaa !5
  call void @qenc_remove_overflow_entries(ptr noundef %1471)
  br label %1451, !llvm.loop !66

1472:                                             ; preds = %1451
  %1473 = load i32, ptr %41, align 4, !tbaa !9
  %1474 = load i32, ptr %42, align 4, !tbaa !9
  %1475 = add i32 %1473, %1474
  %1476 = load ptr, ptr %9, align 8, !tbaa !5
  %1477 = getelementptr inbounds %struct.lsqpack_enc, ptr %1476, i32 0, i32 21
  %1478 = load i32, ptr %1477, align 8, !tbaa !55
  %1479 = add i32 %1478, %1475
  store i32 %1479, ptr %1477, align 8, !tbaa !55
  %1480 = load i64, ptr %32, align 8, !tbaa !11
  %1481 = load i64, ptr %33, align 8, !tbaa !11
  %1482 = add i64 %1480, %1481
  %1483 = trunc i64 %1482 to i32
  %1484 = load ptr, ptr %9, align 8, !tbaa !5
  %1485 = getelementptr inbounds %struct.lsqpack_enc, ptr %1484, i32 0, i32 22
  %1486 = load i32, ptr %1485, align 4, !tbaa !54
  %1487 = add i32 %1486, %1483
  store i32 %1487, ptr %1485, align 4, !tbaa !54
  %1488 = load ptr, ptr %9, align 8, !tbaa !5
  %1489 = getelementptr inbounds %struct.lsqpack_enc, ptr %1488, i32 0, i32 22
  %1490 = load i32, ptr %1489, align 4, !tbaa !54
  %1491 = icmp ugt i32 %1490, -2147483648
  br i1 %1491, label %1492, label %1532

1492:                                             ; preds = %1472
  %1493 = load ptr, ptr %9, align 8, !tbaa !5
  %1494 = getelementptr inbounds %struct.lsqpack_enc, ptr %1493, i32 0, i32 21
  %1495 = load i32, ptr %1494, align 8, !tbaa !55
  %1496 = uitofp i32 %1495 to float
  %1497 = load ptr, ptr %9, align 8, !tbaa !5
  %1498 = getelementptr inbounds %struct.lsqpack_enc, ptr %1497, i32 0, i32 22
  %1499 = load i32, ptr %1498, align 4, !tbaa !54
  %1500 = uitofp i32 %1499 to float
  %1501 = fdiv float %1496, %1500
  %1502 = fmul float %1501, 1.000000e+03
  %1503 = fptosi float %1502 to i32
  %1504 = load ptr, ptr %9, align 8, !tbaa !5
  %1505 = getelementptr inbounds %struct.lsqpack_enc, ptr %1504, i32 0, i32 21
  store i32 %1503, ptr %1505, align 8, !tbaa !55
  %1506 = load ptr, ptr %9, align 8, !tbaa !5
  %1507 = getelementptr inbounds %struct.lsqpack_enc, ptr %1506, i32 0, i32 22
  store i32 1000, ptr %1507, align 4, !tbaa !54
  br label %1508

1508:                                             ; preds = %1492
  %1509 = load ptr, ptr %9, align 8, !tbaa !5
  %1510 = getelementptr inbounds %struct.lsqpack_enc, ptr %1509, i32 0, i32 23
  %1511 = load ptr, ptr %1510, align 8, !tbaa !17
  %1512 = icmp ne ptr %1511, null
  br i1 %1512, label %1513, label %1529

1513:                                             ; preds = %1508
  %1514 = load ptr, ptr %9, align 8, !tbaa !5
  %1515 = getelementptr inbounds %struct.lsqpack_enc, ptr %1514, i32 0, i32 23
  %1516 = load ptr, ptr %1515, align 8, !tbaa !17
  %1517 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1516, ptr noundef @.str) #8
  %1518 = load ptr, ptr %9, align 8, !tbaa !5
  %1519 = getelementptr inbounds %struct.lsqpack_enc, ptr %1518, i32 0, i32 23
  %1520 = load ptr, ptr %1519, align 8, !tbaa !17
  %1521 = load ptr, ptr %9, align 8, !tbaa !5
  %1522 = call float @lsqpack_enc_ratio(ptr noundef %1521)
  %1523 = fpext float %1522 to double
  %1524 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1520, ptr noundef @.str.31, double noundef %1523) #8
  %1525 = load ptr, ptr %9, align 8, !tbaa !5
  %1526 = getelementptr inbounds %struct.lsqpack_enc, ptr %1525, i32 0, i32 23
  %1527 = load ptr, ptr %1526, align 8, !tbaa !17
  %1528 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1527, ptr noundef @.str.2) #8
  br label %1529

1529:                                             ; preds = %1513, %1508
  br label %1530

1530:                                             ; preds = %1529
  br label %1531

1531:                                             ; preds = %1530
  br label %1532

1532:                                             ; preds = %1531, %1472
  %1533 = load i64, ptr %32, align 8, !tbaa !11
  %1534 = load ptr, ptr %11, align 8, !tbaa !5
  store i64 %1533, ptr %1534, align 8, !tbaa !11
  %1535 = load i64, ptr %33, align 8, !tbaa !11
  %1536 = load ptr, ptr %13, align 8, !tbaa !5
  store i64 %1535, ptr %1536, align 8, !tbaa !11
  store i32 0, ptr %8, align 4
  store i32 1, ptr %43, align 4
  br label %1537

1537:                                             ; preds = %1532, %1297, %1284, %1248, %1235, %1194, %1181, %1134, %1117, %1090, %1060, %1023, %990, %966, %951, %936, %923, %907, %892, %879, %867, %856, %840, %104
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  %1538 = load i32, ptr %8, align 4
  ret i32 %1538

1539:                                             ; preds = %792
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @lsxpack_header_get_name(ptr noundef) #6

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @lsxpack_header_get_value(ptr noundef) #6

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

; Function Attrs: nounwind uwtable
declare hidden i32 @find_in_static_full(i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @enc_use_dynamic_table(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_can_risk(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_duplicable_entry(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_entry_is_draining(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_safe_to_dup(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_has_or_can_evict_at_least(ptr noundef, i64 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_hist_seen(ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden ptr @lsqpack_enc_push_entry(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_maybe_update_hinfo_min_max(ptr noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_remove_overflow_entries(ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_hist_add(ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_dup_draining(ptr noundef, ptr noundef, i64 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local float @lsqpack_enc_ratio(ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !15, i64 24}
!14 = !{!"lsxpack_header", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !15, i64 24, !15, i64 26, !15, i64 28, !7, i64 30, !7, i64 31, !7, i64 32, !10, i64 33, !7, i64 34, !7, i64 35}
!15 = !{!"short", !7, i64 0}
!16 = !{!14, !15, i64 26}
!17 = !{!18, !6, i64 200}
!18 = !{!"lsqpack_enc", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !19, i64 56, !6, i64 72, !20, i64 80, !20, i64 96, !20, i64 112, !21, i64 128, !22, i64 160, !10, i64 192, !10, i64 196, !6, i64 200, !24, i64 208, !24, i64 212, !6, i64 216, !10, i64 224, !10, i64 228, !10, i64 232}
!19 = !{!"lsqpack_enc_head", !6, i64 0, !6, i64 8}
!20 = !{!"", !6, i64 0, !6, i64 8}
!21 = !{!"", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!22 = !{!"", !23, i64 0, !6, i64 24}
!23 = !{!"lsqpack_dec_int_state", !10, i64 0, !10, i64 4, !10, i64 8, !12, i64 16}
!24 = !{!"float", !7, i64 0}
!25 = !{!14, !10, i64 8}
!26 = !{!14, !7, i64 31}
!27 = !{!14, !10, i64 12}
!28 = !{!29, !10, i64 0}
!29 = !{!"encode_program", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12}
!30 = !{!29, !10, i64 4}
!31 = !{!29, !10, i64 8}
!32 = !{!29, !10, i64 12}
!33 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9}
!34 = !{!18, !10, i64 0}
!35 = !{!18, !6, i64 216}
!36 = !{!18, !10, i64 52}
!37 = !{!18, !6, i64 72}
!38 = !{!39, !6, i64 16}
!39 = !{!"lsqpack_double_enc_head", !19, i64 0, !19, i64 16}
!40 = !{!41, !10, i64 40}
!41 = !{!"lsqpack_enc_table_entry", !42, i64 0, !42, i64 8, !42, i64 16, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !7, i64 56}
!42 = !{!"", !6, i64 0}
!43 = !{!41, !10, i64 48}
!44 = !{!41, !10, i64 52}
!45 = !{!41, !6, i64 0}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = !{!41, !10, i64 24}
!49 = !{!18, !10, i64 4}
!50 = !{!39, !6, i64 0}
!51 = !{!41, !10, i64 44}
!52 = !{!41, !6, i64 8}
!53 = distinct !{!53, !47}
!54 = !{!18, !10, i64 196}
!55 = !{!18, !10, i64 192}
!56 = !{!7, !7, i64 0}
!57 = !{!18, !10, i64 156}
!58 = !{!18, !6, i64 128}
!59 = !{!60, !10, i64 52}
!60 = !{!"lsqpack_header_info", !20, i64 0, !20, i64 16, !6, i64 32, !12, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60}
!61 = !{!41, !10, i64 36}
!62 = !{!18, !10, i64 152}
!63 = !{!60, !10, i64 60}
!64 = !{!18, !10, i64 144}
!65 = !{!18, !10, i64 228}
!66 = distinct !{!66, !47}


; 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.encode_program = type { i32, i32, i32, i32 }
%struct.lsqpack_double_enc_head = type { %struct.lsqpack_enc_head, %struct.lsqpack_enc_head }
%struct.lsqpack_enc_head = type { ptr, ptr }

@.str = external hidden unnamed_addr constant [14 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [22 x i8], align 1
@name_hashes = external hidden local_unnamed_addr constant [99 x i32], align 16
@.str.18 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [46 x i8], align 1
@__PRETTY_FUNCTION__.lsqpack_enc_encode = external hidden unnamed_addr constant [174 x i8], align 1
@lsqpack_enc_encode.programs = external hidden local_unnamed_addr constant [2 x [2 x [2 x %struct.encode_program]]], align 16
@lsqpack_enc_encode.programs.20 = external hidden local_unnamed_addr constant [2 x [2 x %struct.encode_program]], align 16
@lsqpack_enc_encode.programs.21 = external hidden local_unnamed_addr constant [2 x %struct.encode_program], align 16
@.str.22 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [33 x i8], align 1
@eea2str = external hidden local_unnamed_addr constant [6 x ptr], align 16
@eha2str = external hidden local_unnamed_addr constant [7 x ptr], align 16
@eta2str = external hidden local_unnamed_addr constant [3 x ptr], align 16
@.str.25 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [41 x i8], align 1

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
declare dso_local ptr @lsqpack_enc_int(ptr noundef, ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @lsqpack_find_in_static_headers(i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @lsqpack_enc_enc_str(i32 noundef, ptr noundef, i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_enc_str_size(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_hist_update_size(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 3) i32 @lsqpack_enc_encode(ptr noundef %0, ptr noundef %1, ptr nocapture noundef %2, ptr noundef %3, ptr nocapture noundef %4, ptr noundef %5, i32 noundef %6) local_unnamed_addr #2 {
  %8 = alloca [2 x ptr], align 16
  %9 = load i64, ptr %2, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %1, i64 %9
  %11 = load i64, ptr %4, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %3, i64 %11
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #7
  %13 = tail call ptr @lsxpack_header_get_name(ptr noundef %5)
  %14 = tail call ptr @lsxpack_header_get_value(ptr noundef %5)
  %15 = getelementptr inbounds i8, ptr %5, i64 24
  %16 = load i16, ptr %15, align 8, !tbaa !9
  %17 = zext i16 %16 to i32
  %18 = getelementptr inbounds i8, ptr %5, i64 26
  %19 = load i16, ptr %18, align 2, !tbaa !14
  %20 = zext i16 %19 to i32
  %21 = getelementptr inbounds i8, ptr %0, i64 200
  %22 = load ptr, ptr %21, align 8, !tbaa !15
  %.not = icmp eq ptr %22, null
  br i1 %.not, label %29, label %23

23:                                               ; preds = %7
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %22, ptr noundef nonnull @.str) #7
  %25 = load ptr, ptr %21, align 8, !tbaa !15
  %26 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %25, ptr noundef nonnull @.str.17, i32 noundef %17, ptr noundef %13, i32 noundef %20, ptr noundef %14) #7
  %27 = load ptr, ptr %21, align 8, !tbaa !15
  %28 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %27, ptr noundef nonnull @.str.2) #7
  br label %29

29:                                               ; preds = %23, %7
  %30 = icmp eq i64 %11, 0
  br i1 %30, label %636, label %31

31:                                               ; preds = %29
  %32 = getelementptr inbounds i8, ptr %5, i64 33
  %33 = load i8, ptr %32, align 1
  %34 = lshr i8 %33, 5
  %35 = and i8 %34, 2
  %36 = zext nneg i8 %35 to i32
  %spec.select = or i32 %36, %6
  %37 = zext i8 %33 to i32
  %38 = and i32 %37, 34
  %.not612 = icmp eq i32 %38, 34
  br i1 %.not612, label %75, label %39

39:                                               ; preds = %31
  %40 = and i32 %37, 8
  %.not613 = icmp eq i32 %40, 0
  br i1 %.not613, label %44, label %41

41:                                               ; preds = %39
  %42 = getelementptr inbounds i8, ptr %5, i64 8
  %43 = load i32, ptr %42, align 8, !tbaa !23
  br label %55

44:                                               ; preds = %39
  %45 = and i32 %37, 2
  %.not614 = icmp eq i32 %45, 0
  br i1 %.not614, label %52, label %46

46:                                               ; preds = %44
  %47 = getelementptr inbounds i8, ptr %5, i64 31
  %48 = load i8, ptr %47, align 1, !tbaa !24
  %49 = zext i8 %48 to i64
  %50 = getelementptr inbounds [99 x i32], ptr @name_hashes, i64 0, i64 %49
  %51 = load i32, ptr %50, align 4, !tbaa !25
  br label %55

52:                                               ; preds = %44
  %53 = zext i16 %16 to i64
  %54 = tail call i32 @XXH32(ptr noundef %13, i64 noundef %53, i32 noundef 39378473) #7
  %.pre = load i8, ptr %32, align 1
  br label %55

55:                                               ; preds = %46, %52, %41
  %56 = phi i8 [ %33, %41 ], [ %33, %46 ], [ %.pre, %52 ]
  %.0532 = phi i32 [ %43, %41 ], [ %51, %46 ], [ %54, %52 ]
  %57 = and i8 %56, 16
  %.not615 = icmp eq i8 %57, 0
  br i1 %.not615, label %61, label %58

58:                                               ; preds = %55
  %59 = getelementptr inbounds i8, ptr %5, i64 12
  %60 = load i32, ptr %59, align 4, !tbaa !26
  br label %64

61:                                               ; preds = %55
  %62 = zext i16 %19 to i64
  %63 = tail call i32 @XXH32(ptr noundef %14, i64 noundef %62, i32 noundef %.0532) #7
  br label %64

64:                                               ; preds = %58, %61
  %.0536 = phi i32 [ %60, %58 ], [ %63, %61 ]
  %65 = load ptr, ptr %21, align 8, !tbaa !15
  %.not616 = icmp eq ptr %65, null
  br i1 %.not616, label %72, label %66

66:                                               ; preds = %64
  %67 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %65, ptr noundef nonnull @.str) #7
  %68 = load ptr, ptr %21, align 8, !tbaa !15
  %69 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.18, i32 noundef %.0532, i32 noundef %.0536) #7
  %70 = load ptr, ptr %21, align 8, !tbaa !15
  %71 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %70, ptr noundef nonnull @.str.2) #7
  br label %72

72:                                               ; preds = %66, %64
  %73 = tail call i32 @find_in_static_full(i32 noundef %.0536, ptr noundef %13, i32 noundef %17, ptr noundef %14, i32 noundef %20)
  %74 = icmp sgt i32 %73, -1
  br i1 %74, label %.thread683, label %79

75:                                               ; preds = %31
  %76 = getelementptr inbounds i8, ptr %5, i64 31
  %77 = load i8, ptr %76, align 1, !tbaa !24
  %78 = zext i8 %77 to i32
  br label %.thread683

79:                                               ; preds = %72
  %80 = and i32 %6, 8
  %.not617 = icmp eq i32 %80, 0
  br i1 %.not617, label %81, label %.thread

81:                                               ; preds = %79
  %82 = tail call i32 @enc_use_dynamic_table(ptr noundef nonnull %0)
  %83 = icmp ne i32 %82, 0
  %84 = and i32 %spec.select, 3
  %85 = icmp eq i32 %84, 0
  %or.cond = select i1 %85, i1 %83, i1 false
  br i1 %or.cond, label %86, label %.thread

86:                                               ; preds = %81
  %87 = load i32, ptr %0, align 8, !tbaa !27
  %88 = icmp ne i32 %87, -1
  br label %.thread

.thread:                                          ; preds = %79, %86, %81
  %.shrunk = phi i1 [ %83, %81 ], [ true, %86 ], [ false, %79 ]
  %89 = phi i1 [ false, %81 ], [ %88, %86 ], [ false, %79 ]
  %90 = zext i1 %.shrunk to i32
  %91 = zext i1 %89 to i32
  %92 = tail call i32 @qenc_can_risk(ptr noundef nonnull %0)
  %93 = getelementptr inbounds i8, ptr %0, i64 216
  %94 = load ptr, ptr %93, align 8, !tbaa !28
  %95 = icmp ne ptr %94, null
  %96 = and i32 %6, 4
  %.not618 = icmp eq i32 %96, 0
  %97 = and i1 %.not618, %95
  %98 = zext i1 %97 to i32
  br label %.thread691

.thread691:                                       ; preds = %330, %332, %544, %.thread
  %.0549 = phi i32 [ undef, %.thread ], [ %.5554, %544 ], [ %.5554, %332 ], [ %.5554, %330 ]
  %.0543 = phi i32 [ undef, %.thread ], [ %.5548, %544 ], [ %.2545, %332 ], [ %.2545, %330 ]
  %.2538 = phi i32 [ %.0536, %.thread ], [ %.3539, %544 ], [ %.3539, %332 ], [ %.3539, %330 ]
  %.2534 = phi i32 [ %.0532, %.thread ], [ %.3535, %544 ], [ %.3535, %332 ], [ %.3535, %330 ]
  %.0530 = phi i32 [ %98, %.thread ], [ %.1531, %544 ], [ %.1531, %332 ], [ %.1531, %330 ]
  %.0523 = phi i32 [ -1, %.thread ], [ %.8, %544 ], [ %.8, %332 ], [ %.8, %330 ]
  %.0515 = phi i32 [ %90, %.thread ], [ %.1516, %544 ], [ %.1516, %332 ], [ %.1516, %330 ]
  %.0513 = phi i32 [ %92, %.thread ], [ %.1514, %544 ], [ %.1514, %332 ], [ %.1514, %330 ]
  %.0510 = phi i32 [ %91, %.thread ], [ 0, %544 ], [ 0, %332 ], [ 0, %330 ]
  %.0509 = phi ptr [ undef, %.thread ], [ %.6, %544 ], [ %.6, %332 ], [ %.6, %330 ]
  %.0513.fr = freeze i32 %.0513
  %.0510.fr = freeze i32 %.0510
  %99 = icmp ne i32 %.0515, 0
  br i1 %99, label %100, label %._crit_edge708.thread

100:                                              ; preds = %.thread691
  %101 = getelementptr inbounds i8, ptr %0, i64 52
  %102 = load i32, ptr %101, align 4, !tbaa !29
  %notmask = shl nsw i32 -1, %102
  %103 = xor i32 %notmask, -1
  %104 = and i32 %.2538, %103
  %105 = getelementptr inbounds i8, ptr %0, i64 72
  %106 = load ptr, ptr %105, align 8, !tbaa !30
  %107 = zext nneg i32 %104 to i64
  %108 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %106, i64 %107, i32 1
  %.1702 = load ptr, ptr %108, align 8, !tbaa !31
  %.not642703 = icmp eq ptr %.1702, null
  br i1 %.not642703, label %._crit_edge708.thread, label %.lr.ph707

.lr.ph707:                                        ; preds = %100
  %109 = zext i16 %16 to i64
  %110 = zext i16 %19 to i64
  %111 = zext i16 %16 to i64
  br label %112

112:                                              ; preds = %.lr.ph707, %135
  %.1705 = phi ptr [ %.1702, %.lr.ph707 ], [ %.1, %135 ]
  %.1550704 = phi i32 [ 0, %.lr.ph707 ], [ %.2551, %135 ]
  %113 = getelementptr inbounds i8, ptr %.1705, i64 40
  %114 = load i32, ptr %113, align 8, !tbaa !32
  %115 = icmp eq i32 %.2538, %114
  br i1 %115, label %116, label %135

116:                                              ; preds = %112
  %117 = getelementptr inbounds i8, ptr %.1705, i64 48
  %118 = load i32, ptr %117, align 8, !tbaa !35
  %119 = icmp eq i32 %118, %17
  br i1 %119, label %120, label %135

120:                                              ; preds = %116
  %121 = getelementptr inbounds i8, ptr %.1705, i64 52
  %122 = load i32, ptr %121, align 4, !tbaa !36
  %123 = icmp eq i32 %122, %20
  br i1 %123, label %124, label %135

124:                                              ; preds = %120
  %125 = getelementptr inbounds i8, ptr %.1705, i64 56
  %bcmp = tail call i32 @bcmp(ptr %13, ptr nonnull %125, i64 %109)
  %126 = icmp eq i32 %bcmp, 0
  br i1 %126, label %127, label %135

127:                                              ; preds = %124
  %128 = getelementptr inbounds [0 x i8], ptr %125, i64 0, i64 %111
  %bcmp695 = tail call i32 @bcmp(ptr %14, ptr nonnull %128, i64 %110)
  %129 = icmp eq i32 %bcmp695, 0
  br i1 %129, label %130, label %135

130:                                              ; preds = %127
  %131 = add i32 %.1550704, 1
  %132 = zext i32 %.1550704 to i64
  %133 = getelementptr inbounds [2 x ptr], ptr %8, i64 0, i64 %132
  store ptr %.1705, ptr %133, align 8, !tbaa !31
  %134 = icmp ugt i32 %131, 1
  br i1 %134, label %._crit_edge708, label %135

135:                                              ; preds = %112, %116, %120, %124, %127, %130
  %.2551 = phi i32 [ %131, %130 ], [ %.1550704, %127 ], [ %.1550704, %124 ], [ %.1550704, %120 ], [ %.1550704, %116 ], [ %.1550704, %112 ]
  %.1 = load ptr, ptr %.1705, align 8, !tbaa !31
  %.not642 = icmp eq ptr %.1, null
  br i1 %.not642, label %._crit_edge708, label %112, !llvm.loop !37

._crit_edge708:                                   ; preds = %135, %130
  %.1.lcssa = phi ptr [ null, %135 ], [ %.1705, %130 ]
  %.3552 = phi i32 [ %.2551, %135 ], [ %131, %130 ]
  switch i32 %.3552, label %._crit_edge708.thread [
    i32 1, label %136
    i32 2, label %156
  ]

136:                                              ; preds = %._crit_edge708
  %137 = load ptr, ptr %8, align 16, !tbaa !31
  %138 = getelementptr inbounds i8, ptr %137, i64 24
  %139 = load i32, ptr %138, align 8, !tbaa !39
  %.not647 = icmp eq i32 %.0513.fr, 0
  br i1 %.not647, label %140, label %145

140:                                              ; preds = %136
  %141 = getelementptr inbounds i8, ptr %0, i64 4
  %142 = load i32, ptr %141, align 4, !tbaa !40
  %143 = icmp ule i32 %139, %142
  %144 = icmp ne i32 %.0510.fr, 0
  %or.cond3 = and i1 %143, %144
  br i1 %or.cond3, label %146, label %.thread685

145:                                              ; preds = %136
  %.old2.not = icmp eq i32 %.0510.fr, 0
  br i1 %.old2.not, label %.thread684, label %.thread681

146:                                              ; preds = %140
  %147 = tail call i32 @qenc_duplicable_entry(ptr noundef nonnull %0, ptr noundef nonnull %137)
  %.not648 = icmp eq i32 %147, 0
  br i1 %.not648, label %..thread685_crit_edge, label %149

..thread685_crit_edge:                            ; preds = %146
  %.pre753 = load i32, ptr %138, align 8, !tbaa !39
  %.pre754 = load i32, ptr %141, align 4, !tbaa !40
  br label %.thread685

.thread681:                                       ; preds = %145
  %148 = tail call i32 @qenc_duplicable_entry(ptr noundef %0, ptr noundef nonnull %137)
  %.not648682 = icmp eq i32 %148, 0
  br i1 %.not648682, label %.thread684, label %.thread683

149:                                              ; preds = %146
  %150 = tail call i32 @qenc_entry_is_draining(ptr noundef nonnull %0, ptr noundef nonnull %137)
  %.not651 = icmp eq i32 %150, 0
  br i1 %.not651, label %151, label %._crit_edge708.thread

151:                                              ; preds = %149
  %152 = tail call i32 @qenc_safe_to_dup(ptr noundef nonnull %0, ptr noundef nonnull %137)
  %.not652 = icmp ne i32 %152, 0
  %. = zext i1 %.not652 to i32
  br label %.thread683

.thread685:                                       ; preds = %..thread685_crit_edge, %140
  %153 = phi i32 [ %.pre754, %..thread685_crit_edge ], [ %142, %140 ]
  %154 = phi i32 [ %.pre753, %..thread685_crit_edge ], [ %139, %140 ]
  %.not649 = icmp ugt i32 %154, %153
  br i1 %.not649, label %._crit_edge708.thread, label %.thread684

.thread684:                                       ; preds = %145, %.thread681, %.thread685
  %155 = tail call i32 @qenc_entry_is_draining(ptr noundef %0, ptr noundef nonnull %137)
  %.not650 = icmp eq i32 %155, 0
  br i1 %.not650, label %.thread683, label %._crit_edge708.thread

156:                                              ; preds = %._crit_edge708
  %157 = getelementptr inbounds i8, ptr %8, i64 8
  %158 = load ptr, ptr %157, align 8, !tbaa !31
  %159 = getelementptr inbounds i8, ptr %158, i64 24
  %160 = load i32, ptr %159, align 8, !tbaa !39
  %161 = load ptr, ptr %8, align 16, !tbaa !31
  %162 = getelementptr inbounds i8, ptr %161, i64 24
  %163 = load i32, ptr %162, align 8, !tbaa !39
  %164 = icmp ugt i32 %160, %163
  br i1 %164, label %166, label %165

165:                                              ; preds = %156
  tail call void @__assert_fail(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.8, i32 noundef 1802, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

166:                                              ; preds = %156
  %.not643 = icmp eq i32 %.0513.fr, 0
  br i1 %.not643, label %167, label %.thread683

167:                                              ; preds = %166
  %168 = getelementptr inbounds i8, ptr %0, i64 4
  %169 = load i32, ptr %168, align 4, !tbaa !40
  %.not644 = icmp ugt i32 %160, %169
  br i1 %.not644, label %170, label %.thread683

170:                                              ; preds = %167
  %.not645 = icmp ugt i32 %163, %169
  br i1 %.not645, label %._crit_edge708.thread, label %171

171:                                              ; preds = %170
  %172 = tail call i32 @qenc_entry_is_draining(ptr noundef nonnull %0, ptr noundef nonnull %161)
  %.not646 = icmp eq i32 %172, 0
  br i1 %.not646, label %._crit_edge751, label %._crit_edge708.thread

._crit_edge751:                                   ; preds = %171
  %.pre752 = load i32, ptr %162, align 8, !tbaa !39
  br label %.thread683

._crit_edge708.thread:                            ; preds = %100, %._crit_edge708, %149, %.thread684, %.thread685, %171, %170, %.thread691
  %.4553 = phi i32 [ %.3552, %._crit_edge708 ], [ 2, %171 ], [ 2, %170 ], [ 1, %149 ], [ 1, %.thread684 ], [ 1, %.thread685 ], [ %.0549, %.thread691 ], [ 0, %100 ]
  %.1544 = phi i32 [ %.0543, %._crit_edge708 ], [ %.0543, %171 ], [ %.0543, %170 ], [ %139, %149 ], [ %139, %.thread684 ], [ %139, %.thread685 ], [ %.0543, %.thread691 ], [ %.0543, %100 ]
  %.3 = phi ptr [ %.1.lcssa, %._crit_edge708 ], [ %.1.lcssa, %171 ], [ %.1.lcssa, %170 ], [ %137, %149 ], [ %137, %.thread684 ], [ %137, %.thread685 ], [ %.0509, %.thread691 ], [ null, %100 ]
  %173 = load i8, ptr %32, align 1
  %174 = and i8 %173, 2
  %.not653 = icmp eq i8 %174, 0
  br i1 %.not653, label %179, label %175

175:                                              ; preds = %._crit_edge708.thread
  %176 = getelementptr inbounds i8, ptr %5, i64 31
  %177 = load i8, ptr %176, align 1, !tbaa !24
  %178 = zext i8 %177 to i32
  br label %182

179:                                              ; preds = %._crit_edge708.thread
  %180 = tail call i32 @lsqpack_find_in_static_headers(i32 noundef %.2534, ptr noundef %13, i32 noundef %17)
  %181 = icmp sgt i32 %180, -1
  br i1 %181, label %182, label %196

182:                                              ; preds = %179, %175
  %.1518 = phi i32 [ %178, %175 ], [ %180, %179 ]
  %.not669 = icmp eq i32 %.0510.fr, 0
  br i1 %.not669, label %.thread683, label %183

183:                                              ; preds = %182
  %184 = add nuw nsw i32 %20, %17
  %185 = add nuw nsw i32 %184, 32
  %186 = zext nneg i32 %185 to i64
  %187 = tail call i32 @qenc_has_or_can_evict_at_least(ptr noundef %0, i64 noundef %186)
  %.not670 = icmp eq i32 %187, 0
  br i1 %.not670, label %.thread683, label %188

188:                                              ; preds = %183
  %189 = tail call i32 @qenc_hist_seen(ptr noundef %0, i32 noundef 1, i32 noundef %.2538)
  %190 = sext i32 %189 to i64
  %191 = sext i32 %.0513.fr to i64
  %192 = icmp ne i32 %.4553, 0
  %193 = select i1 %99, i1 %192, i1 false
  %194 = zext i1 %193 to i64
  %195 = getelementptr inbounds [2 x [2 x [2 x %struct.encode_program]]], ptr @lsqpack_enc_encode.programs, i64 0, i64 %190, i64 %191, i64 %194
  %.sroa.0276.0.copyload = load i32, ptr %195, align 16, !tbaa !25
  %.sroa.20.0..sroa_idx = getelementptr inbounds i8, ptr %195, i64 4
  %.sroa.20.0.copyload = load i32, ptr %.sroa.20.0..sroa_idx, align 4, !tbaa !25
  %.sroa.34.0..sroa_idx = getelementptr inbounds i8, ptr %195, i64 8
  %.sroa.34.0.copyload = load i32, ptr %.sroa.34.0..sroa_idx, align 8, !tbaa !25
  %.sroa.48.0..sroa_idx = getelementptr inbounds i8, ptr %195, i64 12
  %.sroa.48.0.copyload = load i32, ptr %.sroa.48.0..sroa_idx, align 4, !tbaa !25
  br label %.thread683

196:                                              ; preds = %179
  br i1 %99, label %197, label %.loopexit

197:                                              ; preds = %196
  %198 = getelementptr inbounds i8, ptr %0, i64 52
  %199 = load i32, ptr %198, align 4, !tbaa !29
  %notmask654 = shl nsw i32 -1, %199
  %200 = xor i32 %notmask654, -1
  %201 = and i32 %.2534, %200
  %202 = getelementptr inbounds i8, ptr %0, i64 72
  %203 = load ptr, ptr %202, align 8, !tbaa !30
  %204 = zext nneg i32 %201 to i64
  %205 = getelementptr inbounds %struct.lsqpack_double_enc_head, ptr %203, i64 %204
  %.4714 = load ptr, ptr %205, align 8, !tbaa !31
  %.not655715 = icmp eq ptr %.4714, null
  br i1 %.not655715, label %.loopexit, label %.lr.ph719

.lr.ph719:                                        ; preds = %197
  %206 = icmp ne i32 %.0513.fr, 0
  %207 = getelementptr inbounds i8, ptr %0, i64 4
  %.not741 = icmp ne i32 %.0510.fr, 0
  %208 = add nuw nsw i32 %20, %17
  %209 = add nuw nsw i32 %208, 32
  %210 = zext nneg i32 %209 to i64
  %211 = zext i16 %16 to i64
  br i1 %.not741, label %.lr.ph719.split.us, label %.lr.ph719.split

.lr.ph719.split.us:                               ; preds = %.lr.ph719, %234
  %.4717.us = phi ptr [ %.4.us, %234 ], [ %.4714, %.lr.ph719 ]
  %.0519716.us = phi i32 [ %.2521.us, %234 ], [ -1, %.lr.ph719 ]
  %212 = getelementptr inbounds i8, ptr %.4717.us, i64 44
  %213 = load i32, ptr %212, align 4, !tbaa !41
  %214 = icmp eq i32 %.2534, %213
  br i1 %214, label %215, label %234

215:                                              ; preds = %.lr.ph719.split.us
  %216 = tail call i32 @qenc_entry_is_draining(ptr noundef %0, ptr noundef nonnull %.4717.us)
  %.not663.us = icmp eq i32 %216, 0
  br i1 %.not663.us, label %217, label %234

217:                                              ; preds = %215
  %218 = getelementptr inbounds i8, ptr %.4717.us, i64 48
  %219 = load i32, ptr %218, align 8, !tbaa !35
  %220 = icmp eq i32 %219, %17
  br i1 %220, label %221, label %234

221:                                              ; preds = %217
  br i1 %206, label %226, label %222

222:                                              ; preds = %221
  %223 = getelementptr inbounds i8, ptr %.4717.us, i64 24
  %224 = load i32, ptr %223, align 8, !tbaa !39
  %225 = load i32, ptr %207, align 4, !tbaa !40
  %.not664.us = icmp ugt i32 %224, %225
  br i1 %.not664.us, label %234, label %226

226:                                              ; preds = %222, %221
  %227 = icmp slt i32 %.0519716.us, 0
  br i1 %227, label %229, label %228

228:                                              ; preds = %226
  %.not665.us = icmp eq i32 %.0519716.us, 0
  br i1 %.not665.us, label %234, label %231

229:                                              ; preds = %226
  %230 = tail call i32 @qenc_has_or_can_evict_at_least(ptr noundef %0, i64 noundef %210)
  %.not666.us = icmp eq i32 %230, 0
  br i1 %.not666.us, label %234, label %231

231:                                              ; preds = %229, %228
  %.1520.us = phi i32 [ %230, %229 ], [ %.0519716.us, %228 ]
  %232 = getelementptr inbounds i8, ptr %.4717.us, i64 56
  %bcmp696.us = tail call i32 @bcmp(ptr %13, ptr nonnull %232, i64 %211)
  %233 = icmp eq i32 %bcmp696.us, 0
  br i1 %233, label %.split.us, label %234

234:                                              ; preds = %231, %229, %228, %222, %217, %215, %.lr.ph719.split.us
  %.2521.us = phi i32 [ %.0519716.us, %215 ], [ %.1520.us, %231 ], [ 0, %229 ], [ 0, %228 ], [ %.0519716.us, %222 ], [ %.0519716.us, %217 ], [ %.0519716.us, %.lr.ph719.split.us ]
  %235 = getelementptr inbounds i8, ptr %.4717.us, i64 8
  %.4.us = load ptr, ptr %235, align 8, !tbaa !31
  %.not655.us = icmp eq ptr %.4.us, null
  br i1 %.not655.us, label %.loopexit, label %.lr.ph719.split.us, !llvm.loop !42

.lr.ph719.split:                                  ; preds = %.lr.ph719
  br i1 %206, label %.lr.ph719.split.split.us, label %.lr.ph719.split.split

.lr.ph719.split.split.us:                         ; preds = %.lr.ph719.split, %248
  %.4717.us725 = phi ptr [ %.4.us728, %248 ], [ %.4714, %.lr.ph719.split ]
  %236 = getelementptr inbounds i8, ptr %.4717.us725, i64 44
  %237 = load i32, ptr %236, align 4, !tbaa !41
  %238 = icmp eq i32 %.2534, %237
  br i1 %238, label %239, label %248

239:                                              ; preds = %.lr.ph719.split.split.us
  %240 = tail call i32 @qenc_entry_is_draining(ptr noundef %0, ptr noundef nonnull %.4717.us725)
  %.not663.us726 = icmp eq i32 %240, 0
  br i1 %.not663.us726, label %241, label %248

241:                                              ; preds = %239
  %242 = getelementptr inbounds i8, ptr %.4717.us725, i64 48
  %243 = load i32, ptr %242, align 8, !tbaa !35
  %244 = icmp eq i32 %243, %17
  br i1 %244, label %245, label %248

245:                                              ; preds = %241
  %246 = getelementptr inbounds i8, ptr %.4717.us725, i64 56
  %bcmp696.us727 = tail call i32 @bcmp(ptr %13, ptr nonnull %246, i64 %211)
  %247 = icmp eq i32 %bcmp696.us727, 0
  br i1 %247, label %.split.us, label %248

248:                                              ; preds = %245, %241, %239, %.lr.ph719.split.split.us
  %249 = getelementptr inbounds i8, ptr %.4717.us725, i64 8
  %.4.us728 = load ptr, ptr %249, align 8, !tbaa !31
  %.not655.us729 = icmp eq ptr %.4.us728, null
  br i1 %.not655.us729, label %.loopexit, label %.lr.ph719.split.split.us, !llvm.loop !42

.lr.ph719.split.split:                            ; preds = %.lr.ph719.split, %277
  %.4717 = phi ptr [ %.4, %277 ], [ %.4714, %.lr.ph719.split ]
  %250 = getelementptr inbounds i8, ptr %.4717, i64 44
  %251 = load i32, ptr %250, align 4, !tbaa !41
  %252 = icmp eq i32 %.2534, %251
  br i1 %252, label %253, label %277

253:                                              ; preds = %.lr.ph719.split.split
  %254 = tail call i32 @qenc_entry_is_draining(ptr noundef %0, ptr noundef nonnull %.4717)
  %.not663 = icmp eq i32 %254, 0
  br i1 %.not663, label %255, label %277

255:                                              ; preds = %253
  %256 = getelementptr inbounds i8, ptr %.4717, i64 48
  %257 = load i32, ptr %256, align 8, !tbaa !35
  %258 = icmp eq i32 %257, %17
  br i1 %258, label %259, label %277

259:                                              ; preds = %255
  %260 = getelementptr inbounds i8, ptr %.4717, i64 24
  %261 = load i32, ptr %260, align 8, !tbaa !39
  %262 = load i32, ptr %207, align 4, !tbaa !40
  %.not664 = icmp ugt i32 %261, %262
  br i1 %.not664, label %277, label %263

263:                                              ; preds = %259
  %264 = getelementptr inbounds i8, ptr %.4717, i64 56
  %bcmp696 = tail call i32 @bcmp(ptr %13, ptr nonnull %264, i64 %211)
  %265 = icmp eq i32 %bcmp696, 0
  br i1 %265, label %.split.us.thread, label %277

.split.us.thread:                                 ; preds = %263
  %266 = getelementptr inbounds i8, ptr %.4717, i64 24
  %267 = load i32, ptr %266, align 8, !tbaa !39
  br label %275

.split.us:                                        ; preds = %245, %231
  %.us-phi722 = phi i1 [ %206, %231 ], [ true, %245 ]
  %.us-phi723 = phi ptr [ %.4717.us, %231 ], [ %.4717.us725, %245 ]
  %268 = getelementptr inbounds i8, ptr %.us-phi723, i64 24
  %269 = load i32, ptr %268, align 8, !tbaa !39
  %or.cond9 = and i1 %.us-phi722, %.not741
  br i1 %or.cond9, label %270, label %275

270:                                              ; preds = %.split.us
  %271 = icmp slt i32 %.0523, 0
  br i1 %271, label %272, label %274

272:                                              ; preds = %270
  %273 = tail call i32 @qenc_hist_seen(ptr noundef %0, i32 noundef 1, i32 noundef %.2538)
  %.not668 = icmp eq i32 %273, 0
  br i1 %.not668, label %275, label %.thread683

274:                                              ; preds = %270
  %.not667 = icmp eq i32 %.0523, 0
  br i1 %.not667, label %275, label %.thread683

275:                                              ; preds = %.split.us.thread, %274, %272, %.split.us
  %276 = phi i32 [ %269, %272 ], [ %269, %274 ], [ %269, %.split.us ], [ %267, %.split.us.thread ]
  %.us-phi723761 = phi ptr [ %.us-phi723, %272 ], [ %.us-phi723, %274 ], [ %.us-phi723, %.split.us ], [ %.4717, %.split.us.thread ]
  %.3526 = phi i32 [ 0, %272 ], [ 0, %274 ], [ %.0523, %.split.us ], [ %.0523, %.split.us.thread ]
  br label %.thread683

277:                                              ; preds = %.lr.ph719.split.split, %253, %255, %259, %263
  %278 = getelementptr inbounds i8, ptr %.4717, i64 8
  %.4 = load ptr, ptr %278, align 8, !tbaa !31
  %.not655 = icmp eq ptr %.4, null
  br i1 %.not655, label %.loopexit, label %.lr.ph719.split.split, !llvm.loop !42

.loopexit:                                        ; preds = %277, %248, %234, %197, %196
  %.3522 = phi i32 [ -1, %196 ], [ -1, %197 ], [ %.2521.us, %234 ], [ -1, %248 ], [ -1, %277 ]
  %.5 = phi ptr [ %.3, %196 ], [ null, %197 ], [ null, %234 ], [ null, %248 ], [ null, %277 ]
  %.not656 = icmp eq i32 %.0510.fr, 0
  br i1 %.not656, label %.thread683, label %279

279:                                              ; preds = %.loopexit
  %280 = icmp slt i32 %.0523, 0
  br i1 %280, label %281, label %283

281:                                              ; preds = %279
  %282 = tail call i32 @qenc_hist_seen(ptr noundef %0, i32 noundef 1, i32 noundef %.2538)
  %.not658 = icmp eq i32 %282, 0
  br i1 %.not658, label %298, label %284

283:                                              ; preds = %279
  %.not657 = icmp eq i32 %.0523, 0
  br i1 %.not657, label %298, label %284

284:                                              ; preds = %283, %281
  %.5528 = phi i32 [ %282, %281 ], [ %.0523, %283 ]
  %285 = icmp slt i32 %.3522, 0
  br i1 %285, label %286, label %291

286:                                              ; preds = %284
  %287 = add nuw nsw i32 %20, %17
  %288 = add nuw nsw i32 %287, 32
  %289 = zext nneg i32 %288 to i64
  %290 = tail call i32 @qenc_has_or_can_evict_at_least(ptr noundef %0, i64 noundef %289)
  %.not660 = icmp eq i32 %290, 0
  br i1 %.not660, label %298, label %292

291:                                              ; preds = %284
  %.not659 = icmp eq i32 %.3522, 0
  br i1 %.not659, label %298, label %292

292:                                              ; preds = %291, %286
  %293 = sext i32 %.0513.fr to i64
  %294 = icmp ne i32 %.4553, 0
  %295 = select i1 %99, i1 %294, i1 false
  %296 = zext i1 %295 to i64
  %297 = getelementptr inbounds [2 x [2 x %struct.encode_program]], ptr @lsqpack_enc_encode.programs.20, i64 0, i64 %293, i64 %296
  br label %.sink.split

298:                                              ; preds = %291, %286, %283, %281
  %.6529.ph = phi i32 [ 0, %283 ], [ 0, %281 ], [ %.5528, %291 ], [ %.5528, %286 ]
  %299 = tail call i32 @qenc_hist_seen(ptr noundef %0, i32 noundef 0, i32 noundef %.2534)
  %.not661 = icmp eq i32 %299, 0
  br i1 %.not661, label %.thread683, label %300

300:                                              ; preds = %298
  %301 = add nuw nsw i32 %17, 32
  %302 = zext nneg i32 %301 to i64
  %303 = tail call i32 @qenc_has_or_can_evict_at_least(ptr noundef %0, i64 noundef %302)
  %.not662 = icmp eq i32 %303, 0
  br i1 %.not662, label %.thread683, label %304

304:                                              ; preds = %300
  %305 = sext i32 %.0513.fr to i64
  %306 = getelementptr inbounds [2 x %struct.encode_program], ptr @lsqpack_enc_encode.programs.21, i64 0, i64 %305
  br label %.sink.split

.sink.split:                                      ; preds = %292, %304
  %.sink770 = phi ptr [ %306, %304 ], [ %297, %292 ]
  %.7.ph = phi i32 [ %.6529.ph, %304 ], [ %.5528, %292 ]
  %.sroa.0276.0.copyload282 = load i32, ptr %.sink770, align 16, !tbaa !25
  %.sroa.20.0..sroa_idx285 = getelementptr inbounds i8, ptr %.sink770, i64 4
  %.sroa.20.0.copyload286 = load i32, ptr %.sroa.20.0..sroa_idx285, align 4, !tbaa !25
  %.sroa.34.0..sroa_idx292 = getelementptr inbounds i8, ptr %.sink770, i64 8
  %.sroa.34.0.copyload293 = load i32, ptr %.sroa.34.0..sroa_idx292, align 8, !tbaa !25
  %.sroa.48.0..sroa_idx299 = getelementptr inbounds i8, ptr %.sink770, i64 12
  %.sroa.48.0.copyload300 = load i32, ptr %.sroa.48.0..sroa_idx299, align 4, !tbaa !25
  br label %.thread683

.thread683:                                       ; preds = %300, %298, %.loopexit, %.sink.split, %275, %274, %272, %188, %183, %182, %166, %167, %._crit_edge751, %151, %.thread684, %.thread681, %75, %72
  %.5554 = phi i32 [ undef, %72 ], [ undef, %75 ], [ 1, %.thread681 ], [ 1, %.thread684 ], [ 1, %151 ], [ 2, %._crit_edge751 ], [ 2, %167 ], [ 2, %166 ], [ %.4553, %182 ], [ %.4553, %183 ], [ %.4553, %188 ], [ %.4553, %272 ], [ %.4553, %274 ], [ %.4553, %275 ], [ %.4553, %.sink.split ], [ %.4553, %.loopexit ], [ %.4553, %298 ], [ %.4553, %300 ]
  %.2545 = phi i32 [ %73, %72 ], [ %78, %75 ], [ %139, %.thread681 ], [ %139, %.thread684 ], [ %139, %151 ], [ %.pre752, %._crit_edge751 ], [ %160, %167 ], [ %160, %166 ], [ %.1518, %182 ], [ %.1518, %183 ], [ %.1518, %188 ], [ %269, %272 ], [ %269, %274 ], [ %276, %275 ], [ %.1544, %.sink.split ], [ %.1544, %.loopexit ], [ %.1544, %298 ], [ %.1544, %300 ]
  %.3539 = phi i32 [ %.0536, %72 ], [ undef, %75 ], [ %.2538, %.thread681 ], [ %.2538, %.thread684 ], [ %.2538, %151 ], [ %.2538, %._crit_edge751 ], [ %.2538, %167 ], [ %.2538, %166 ], [ %.2538, %182 ], [ %.2538, %183 ], [ %.2538, %188 ], [ %.2538, %272 ], [ %.2538, %274 ], [ %.2538, %275 ], [ %.2538, %.sink.split ], [ %.2538, %.loopexit ], [ %.2538, %298 ], [ %.2538, %300 ]
  %.3535 = phi i32 [ %.0532, %72 ], [ undef, %75 ], [ %.2534, %.thread681 ], [ %.2534, %.thread684 ], [ %.2534, %151 ], [ %.2534, %._crit_edge751 ], [ %.2534, %167 ], [ %.2534, %166 ], [ %.2534, %182 ], [ %.2534, %183 ], [ %.2534, %188 ], [ %.2534, %272 ], [ %.2534, %274 ], [ %.2534, %275 ], [ %.2534, %.sink.split ], [ %.2534, %.loopexit ], [ %.2534, %298 ], [ %.2534, %300 ]
  %.1531 = phi i32 [ 0, %72 ], [ 0, %75 ], [ %.0530, %.thread681 ], [ %.0530, %.thread684 ], [ %.0530, %151 ], [ %.0530, %._crit_edge751 ], [ %.0530, %167 ], [ %.0530, %166 ], [ %.0530, %182 ], [ %.0530, %183 ], [ %.0530, %188 ], [ %.0530, %272 ], [ %.0530, %274 ], [ %.0530, %275 ], [ %.0530, %.sink.split ], [ %.0530, %.loopexit ], [ %.0530, %298 ], [ %.0530, %300 ]
  %.8 = phi i32 [ -1, %72 ], [ -1, %75 ], [ %.0523, %.thread681 ], [ %.0523, %.thread684 ], [ %.0523, %151 ], [ %.0523, %._crit_edge751 ], [ %.0523, %167 ], [ %.0523, %166 ], [ %.0523, %182 ], [ %.0523, %183 ], [ %189, %188 ], [ %273, %272 ], [ %.0523, %274 ], [ %.3526, %275 ], [ %.7.ph, %.sink.split ], [ %.0523, %.loopexit ], [ %.6529.ph, %298 ], [ %.6529.ph, %300 ]
  %.1516 = phi i32 [ undef, %72 ], [ undef, %75 ], [ 1, %.thread681 ], [ 1, %.thread684 ], [ 1, %151 ], [ 1, %._crit_edge751 ], [ 1, %167 ], [ 1, %166 ], [ %.0515, %182 ], [ %.0515, %183 ], [ %.0515, %188 ], [ 1, %272 ], [ 1, %274 ], [ 1, %275 ], [ %.0515, %.sink.split ], [ %.0515, %.loopexit ], [ %.0515, %298 ], [ %.0515, %300 ]
  %.1514 = phi i32 [ undef, %72 ], [ undef, %75 ], [ %.0513.fr, %.thread681 ], [ %.0513.fr, %.thread684 ], [ %.0513.fr, %151 ], [ %.0513.fr, %._crit_edge751 ], [ %.0513.fr, %167 ], [ %.0513.fr, %166 ], [ %.0513.fr, %182 ], [ %.0513.fr, %183 ], [ %.0513.fr, %188 ], [ %.0513.fr, %272 ], [ %.0513.fr, %274 ], [ %.0513.fr, %275 ], [ %.0513.fr, %.sink.split ], [ %.0513.fr, %.loopexit ], [ %.0513.fr, %298 ], [ %.0513.fr, %300 ]
  %.1511 = phi i32 [ undef, %72 ], [ undef, %75 ], [ 1, %.thread681 ], [ %.0510.fr, %.thread684 ], [ 1, %151 ], [ %.0510.fr, %._crit_edge751 ], [ %.0510.fr, %167 ], [ %.0510.fr, %166 ], [ %.0510.fr, %182 ], [ 1, %183 ], [ 1, %188 ], [ 1, %272 ], [ 1, %274 ], [ %.0510.fr, %275 ], [ 1, %.sink.split ], [ %.0510.fr, %.loopexit ], [ 1, %298 ], [ 1, %300 ]
  %.sroa.0276.4 = phi i32 [ 0, %72 ], [ 0, %75 ], [ 1, %.thread681 ], [ 0, %.thread684 ], [ %., %151 ], [ 0, %._crit_edge751 ], [ 0, %167 ], [ 0, %166 ], [ 0, %182 ], [ 0, %183 ], [ %.sroa.0276.0.copyload, %188 ], [ 3, %272 ], [ 3, %274 ], [ 0, %275 ], [ %.sroa.0276.0.copyload282, %.sink.split ], [ 0, %.loopexit ], [ 0, %298 ], [ 0, %300 ]
  %.sroa.20.4 = phi i32 [ 1, %72 ], [ 1, %75 ], [ 0, %.thread681 ], [ 2, %.thread684 ], [ 2, %151 ], [ 2, %._crit_edge751 ], [ 2, %167 ], [ 2, %166 ], [ 3, %182 ], [ 3, %183 ], [ %.sroa.20.0.copyload, %188 ], [ 0, %272 ], [ 0, %274 ], [ 4, %275 ], [ %.sroa.20.0.copyload286, %.sink.split ], [ 6, %.loopexit ], [ 6, %298 ], [ 6, %300 ]
  %.sroa.34.4 = phi i32 [ 0, %72 ], [ 0, %75 ], [ 1, %.thread681 ], [ 0, %.thread684 ], [ %., %151 ], [ 0, %._crit_edge751 ], [ 0, %167 ], [ 0, %166 ], [ 0, %182 ], [ 0, %183 ], [ %.sroa.34.0.copyload, %188 ], [ 1, %272 ], [ 1, %274 ], [ 0, %275 ], [ %.sroa.34.0.copyload293, %.sink.split ], [ 0, %.loopexit ], [ 0, %298 ], [ 0, %300 ]
  %.sroa.48.4 = phi i32 [ 0, %72 ], [ 0, %75 ], [ 6, %.thread681 ], [ 2, %.thread684 ], [ 2, %151 ], [ 2, %._crit_edge751 ], [ 2, %167 ], [ 2, %166 ], [ 0, %182 ], [ 0, %183 ], [ %.sroa.48.0.copyload, %188 ], [ 6, %272 ], [ 6, %274 ], [ 2, %275 ], [ %.sroa.48.0.copyload300, %.sink.split ], [ 0, %.loopexit ], [ 0, %298 ], [ 0, %300 ]
  %.6 = phi ptr [ undef, %72 ], [ undef, %75 ], [ %137, %.thread681 ], [ %137, %.thread684 ], [ %137, %151 ], [ %161, %._crit_edge751 ], [ %158, %167 ], [ %158, %166 ], [ %.3, %182 ], [ %.3, %183 ], [ %.3, %188 ], [ %.us-phi723, %272 ], [ %.us-phi723, %274 ], [ %.us-phi723761, %275 ], [ %.5, %.sink.split ], [ %.5, %.loopexit ], [ %.5, %298 ], [ %.5, %300 ]
  %307 = shl nuw i32 1, %.sroa.0276.4
  %308 = and i32 %307, 60
  %.not619 = icmp eq i32 %308, 0
  br i1 %.not619, label %338, label %309

309:                                              ; preds = %.thread683
  %310 = shl nuw i32 1, %.sroa.20.4
  %311 = and i32 %310, 120
  %.not620 = icmp eq i32 %311, 0
  br i1 %.not620, label %338, label %312

312:                                              ; preds = %309
  %313 = getelementptr inbounds i8, ptr %0, i64 196
  %314 = load i32, ptr %313, align 4, !tbaa !43
  %315 = tail call i32 @qenc_enc_str_size(ptr noundef %13, i32 noundef %17)
  %316 = add i32 %315, %314
  %317 = tail call i32 @qenc_enc_str_size(ptr noundef %14, i32 noundef %20)
  %318 = add i32 %316, %317
  %319 = getelementptr inbounds i8, ptr %0, i64 192
  %320 = load i32, ptr %319, align 8, !tbaa !44
  %321 = add nuw nsw i32 %20, %17
  %322 = add i32 %321, %320
  %323 = uitofp i32 %318 to float
  %324 = uitofp i32 %322 to float
  %325 = fdiv float %323, %324
  %326 = fpext float %325 to double
  %327 = fcmp ogt double %326, 0x3FEE666666666666
  br i1 %327, label %328, label %338

328:                                              ; preds = %312
  %.not621 = icmp eq i32 %.1511, 0
  br i1 %.not621, label %329, label %330

329:                                              ; preds = %328
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.8, i32 noundef 1952, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

330:                                              ; preds = %328
  %331 = load ptr, ptr %21, align 8, !tbaa !15
  %.not622 = icmp eq ptr %331, null
  br i1 %.not622, label %.thread691, label %332

332:                                              ; preds = %330
  %333 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %331, ptr noundef nonnull @.str) #7
  %334 = load ptr, ptr %21, align 8, !tbaa !15
  %335 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %334, ptr noundef nonnull @.str.23) #7
  %336 = load ptr, ptr %21, align 8, !tbaa !15
  %337 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %336, ptr noundef nonnull @.str.2) #7
  br label %.thread691

338:                                              ; preds = %312, %.thread683, %309
  %339 = load ptr, ptr %21, align 8, !tbaa !15
  %.not623 = icmp eq ptr %339, null
  br i1 %.not623, label %355, label %340

340:                                              ; preds = %338
  %341 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %339, ptr noundef nonnull @.str) #7
  %342 = load ptr, ptr %21, align 8, !tbaa !15
  %343 = zext i32 %.sroa.0276.4 to i64
  %344 = getelementptr inbounds [6 x ptr], ptr @eea2str, i64 0, i64 %343
  %345 = load ptr, ptr %344, align 8, !tbaa !31
  %346 = zext i32 %.sroa.20.4 to i64
  %347 = getelementptr inbounds [7 x ptr], ptr @eha2str, i64 0, i64 %346
  %348 = load ptr, ptr %347, align 8, !tbaa !31
  %349 = zext i32 %.sroa.34.4 to i64
  %350 = getelementptr inbounds [3 x ptr], ptr @eta2str, i64 0, i64 %349
  %351 = load ptr, ptr %350, align 8, !tbaa !31
  %352 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %342, ptr noundef nonnull @.str.24, ptr noundef %345, ptr noundef %348, ptr noundef %351, i32 noundef %.sroa.48.4) #7
  %353 = load ptr, ptr %21, align 8, !tbaa !15
  %354 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %353, ptr noundef nonnull @.str.2) #7
  br label %355

355:                                              ; preds = %340, %338
  switch i32 %.sroa.0276.4, label %417 [
    i32 1, label %356
    i32 2, label %366
    i32 3, label %382
    i32 4, label %400
    i32 5, label %400
    i32 0, label %418
  ]

356:                                              ; preds = %355
  %.not629 = icmp sgt i64 %9, 0
  br i1 %.not629, label %357, label %636

357:                                              ; preds = %356
  store i8 0, ptr %1, align 1, !tbaa !45
  %358 = load i32, ptr %0, align 8, !tbaa !27
  %359 = sub i32 %358, %.2545
  %360 = zext i32 %359 to i64
  %361 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %1, ptr noundef nonnull %10, i64 noundef %360, i32 noundef 5)
  %.not630 = icmp ugt ptr %361, %1
  br i1 %.not630, label %362, label %636

362:                                              ; preds = %357
  %363 = ptrtoint ptr %361 to i64
  %364 = ptrtoint ptr %1 to i64
  %365 = sub i64 %363, %364
  br label %418

366:                                              ; preds = %355
  %.not627 = icmp sgt i64 %9, 0
  br i1 %.not627, label %367, label %636

367:                                              ; preds = %366
  store i8 -64, ptr %1, align 1, !tbaa !45
  %368 = zext i32 %.2545 to i64
  %369 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %1, ptr noundef nonnull %10, i64 noundef %368, i32 noundef 6)
  %.not628 = icmp ugt ptr %369, %1
  br i1 %.not628, label %370, label %636

370:                                              ; preds = %367
  %371 = ptrtoint ptr %10 to i64
  %372 = ptrtoint ptr %369 to i64
  %373 = sub i64 %371, %372
  %374 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %369, i64 noundef %373, ptr noundef %14, i32 noundef %20)
  %375 = icmp slt i32 %374, 0
  br i1 %375, label %636, label %376

376:                                              ; preds = %370
  %377 = zext nneg i32 %374 to i64
  %378 = getelementptr inbounds i8, ptr %369, i64 %377
  %379 = ptrtoint ptr %378 to i64
  %380 = ptrtoint ptr %1 to i64
  %381 = sub i64 %379, %380
  br label %418

382:                                              ; preds = %355
  %.not625 = icmp sgt i64 %9, 0
  br i1 %.not625, label %383, label %636

383:                                              ; preds = %382
  store i8 -128, ptr %1, align 1, !tbaa !45
  %384 = load i32, ptr %0, align 8, !tbaa !27
  %385 = sub i32 %384, %.2545
  %386 = zext i32 %385 to i64
  %387 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %1, ptr noundef nonnull %10, i64 noundef %386, i32 noundef 6)
  %.not626 = icmp ugt ptr %387, %1
  br i1 %.not626, label %388, label %636

388:                                              ; preds = %383
  %389 = ptrtoint ptr %10 to i64
  %390 = ptrtoint ptr %387 to i64
  %391 = sub i64 %389, %390
  %392 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %387, i64 noundef %391, ptr noundef %14, i32 noundef %20)
  %393 = icmp slt i32 %392, 0
  br i1 %393, label %636, label %394

394:                                              ; preds = %388
  %395 = zext nneg i32 %392 to i64
  %396 = getelementptr inbounds i8, ptr %387, i64 %395
  %397 = ptrtoint ptr %396 to i64
  %398 = ptrtoint ptr %1 to i64
  %399 = sub i64 %397, %398
  br label %418

400:                                              ; preds = %355, %355
  %.not624 = icmp sgt i64 %9, 0
  br i1 %.not624, label %401, label %636

401:                                              ; preds = %400
  store i8 64, ptr %1, align 1, !tbaa !45
  %402 = ptrtoint ptr %1 to i64
  %403 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 5, ptr noundef nonnull %1, i64 noundef %9, ptr noundef %13, i32 noundef %17)
  %404 = icmp slt i32 %403, 0
  br i1 %404, label %636, label %405

405:                                              ; preds = %401
  %406 = zext nneg i32 %403 to i64
  %407 = getelementptr inbounds i8, ptr %1, i64 %406
  %gepdiff = sub nsw i64 %9, %406
  %408 = icmp eq i32 %.sroa.0276.4, 4
  %409 = select i1 %408, i32 %20, i32 0
  %410 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %407, i64 noundef %gepdiff, ptr noundef %14, i32 noundef %409)
  %411 = icmp slt i32 %410, 0
  br i1 %411, label %636, label %412

412:                                              ; preds = %405
  %413 = zext nneg i32 %410 to i64
  %414 = getelementptr inbounds i8, ptr %407, i64 %413
  %415 = ptrtoint ptr %414 to i64
  %416 = sub i64 %415, %402
  br label %418

417:                                              ; preds = %355
  tail call void @__assert_fail(ptr noundef nonnull @.str.25, ptr noundef nonnull @.str.8, i32 noundef 2024, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

418:                                              ; preds = %355, %412, %394, %376, %362
  %.0540 = phi i64 [ %416, %412 ], [ %399, %394 ], [ %381, %376 ], [ %365, %362 ], [ 0, %355 ]
  switch i32 %.sroa.20.4, label %524 [
    i32 1, label %419
    i32 0, label %426
    i32 2, label %443
    i32 6, label %456
    i32 5, label %473
    i32 4, label %500
    i32 3, label %525
  ]

419:                                              ; preds = %418
  store i8 -64, ptr %3, align 1, !tbaa !45
  %420 = zext i32 %.2545 to i64
  %421 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %3, ptr noundef nonnull %12, i64 noundef %420, i32 noundef 6)
  %.not638 = icmp ugt ptr %421, %3
  br i1 %.not638, label %422, label %636

422:                                              ; preds = %419
  %423 = ptrtoint ptr %421 to i64
  %424 = ptrtoint ptr %3 to i64
  %425 = sub i64 %423, %424
  br label %543

426:                                              ; preds = %418
  %427 = load i32, ptr %0, align 8, !tbaa !27
  %428 = add i32 %427, 1
  br label %429

429:                                              ; preds = %443, %426
  %.3546 = phi i32 [ %.2545, %443 ], [ %428, %426 ]
  store i8 16, ptr %3, align 1, !tbaa !45
  %430 = getelementptr inbounds i8, ptr %0, i64 156
  %431 = load i32, ptr %430, align 4, !tbaa !46
  %432 = icmp ugt i32 %.3546, %431
  br i1 %432, label %434, label %433

433:                                              ; preds = %429
  tail call void @__assert_fail(ptr noundef nonnull @.str.26, ptr noundef nonnull @.str.8, i32 noundef 2043, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

434:                                              ; preds = %429
  %435 = xor i32 %431, -1
  %436 = add i32 %.3546, %435
  %437 = zext i32 %436 to i64
  %438 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %3, ptr noundef nonnull %12, i64 noundef %437, i32 noundef 4)
  %.not637 = icmp ugt ptr %438, %3
  br i1 %.not637, label %439, label %636

439:                                              ; preds = %434
  %440 = ptrtoint ptr %438 to i64
  %441 = ptrtoint ptr %3 to i64
  %442 = sub i64 %440, %441
  br label %543

443:                                              ; preds = %418
  %444 = getelementptr inbounds i8, ptr %0, i64 156
  %445 = load i32, ptr %444, align 4, !tbaa !46
  %446 = icmp ugt i32 %.2545, %445
  br i1 %446, label %429, label %447

447:                                              ; preds = %443
  store i8 -128, ptr %3, align 1, !tbaa !45
  %448 = load i32, ptr %444, align 4, !tbaa !46
  %449 = sub i32 %448, %.2545
  %450 = zext i32 %449 to i64
  %451 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %3, ptr noundef nonnull %12, i64 noundef %450, i32 noundef 6)
  %.not636 = icmp ugt ptr %451, %3
  br i1 %.not636, label %452, label %636

452:                                              ; preds = %447
  %453 = ptrtoint ptr %451 to i64
  %454 = ptrtoint ptr %3 to i64
  %455 = sub i64 %453, %454
  br label %543

456:                                              ; preds = %418
  %.0508.tr634 = trunc i32 %spec.select to i8
  %457 = shl i8 %.0508.tr634, 3
  %458 = and i8 %457, 16
  %459 = or disjoint i8 %458, 32
  store i8 %459, ptr %3, align 1, !tbaa !45
  %460 = ptrtoint ptr %3 to i64
  %461 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 3, ptr noundef nonnull %3, i64 noundef %11, ptr noundef %13, i32 noundef %17)
  %462 = icmp slt i32 %461, 0
  br i1 %462, label %636, label %463

463:                                              ; preds = %456
  %464 = zext nneg i32 %461 to i64
  %465 = getelementptr inbounds i8, ptr %3, i64 %464
  %gepdiff635 = sub nsw i64 %11, %464
  %466 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %465, i64 noundef %gepdiff635, ptr noundef %14, i32 noundef %20)
  %467 = icmp slt i32 %466, 0
  br i1 %467, label %636, label %468

468:                                              ; preds = %463
  %469 = zext nneg i32 %466 to i64
  %470 = getelementptr inbounds i8, ptr %465, i64 %469
  %471 = ptrtoint ptr %470 to i64
  %472 = sub i64 %471, %460
  br label %543

473:                                              ; preds = %418
  %474 = load i32, ptr %0, align 8, !tbaa !27
  %475 = add i32 %474, 1
  br label %476

476:                                              ; preds = %500, %473
  %.4547 = phi i32 [ %.2545, %500 ], [ %475, %473 ]
  %.0508.tr632 = trunc i32 %spec.select to i8
  %477 = shl i8 %.0508.tr632, 2
  %478 = and i8 %477, 8
  store i8 %478, ptr %3, align 1, !tbaa !45
  %479 = getelementptr inbounds i8, ptr %0, i64 156
  %480 = load i32, ptr %479, align 4, !tbaa !46
  %481 = icmp ugt i32 %.4547, %480
  br i1 %481, label %483, label %482

482:                                              ; preds = %476
  tail call void @__assert_fail(ptr noundef nonnull @.str.26, ptr noundef nonnull @.str.8, i32 noundef 2080, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

483:                                              ; preds = %476
  %484 = xor i32 %480, -1
  %485 = add i32 %.4547, %484
  %486 = zext i32 %485 to i64
  %487 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %3, ptr noundef nonnull %12, i64 noundef %486, i32 noundef 3)
  %.not633 = icmp ugt ptr %487, %3
  br i1 %.not633, label %488, label %636

488:                                              ; preds = %483
  %489 = ptrtoint ptr %12 to i64
  %490 = ptrtoint ptr %487 to i64
  %491 = sub i64 %489, %490
  %492 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %487, i64 noundef %491, ptr noundef %14, i32 noundef %20)
  %493 = icmp slt i32 %492, 0
  br i1 %493, label %636, label %494

494:                                              ; preds = %488
  %495 = zext nneg i32 %492 to i64
  %496 = getelementptr inbounds i8, ptr %487, i64 %495
  %497 = ptrtoint ptr %496 to i64
  %498 = ptrtoint ptr %3 to i64
  %499 = sub i64 %497, %498
  br label %543

500:                                              ; preds = %418
  %501 = getelementptr inbounds i8, ptr %0, i64 156
  %502 = load i32, ptr %501, align 4, !tbaa !46
  %503 = icmp ugt i32 %.2545, %502
  br i1 %503, label %476, label %504

504:                                              ; preds = %500
  %.0508.tr = trunc i32 %spec.select to i8
  %505 = shl i8 %.0508.tr, 4
  %506 = and i8 %505, 32
  %507 = or disjoint i8 %506, 64
  store i8 %507, ptr %3, align 1, !tbaa !45
  %508 = load i32, ptr %501, align 4, !tbaa !46
  %509 = sub i32 %508, %.2545
  %510 = zext i32 %509 to i64
  %511 = tail call ptr @lsqpack_enc_int(ptr noundef %3, ptr noundef nonnull %12, i64 noundef %510, i32 noundef 4)
  %.not631 = icmp ugt ptr %511, %3
  br i1 %.not631, label %512, label %636

512:                                              ; preds = %504
  %513 = ptrtoint ptr %12 to i64
  %514 = ptrtoint ptr %511 to i64
  %515 = sub i64 %513, %514
  %516 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %511, i64 noundef %515, ptr noundef %14, i32 noundef %20)
  %517 = icmp slt i32 %516, 0
  br i1 %517, label %636, label %518

518:                                              ; preds = %512
  %519 = zext nneg i32 %516 to i64
  %520 = getelementptr inbounds i8, ptr %511, i64 %519
  %521 = ptrtoint ptr %520 to i64
  %522 = ptrtoint ptr %3 to i64
  %523 = sub i64 %521, %522
  br label %543

524:                                              ; preds = %418
  tail call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.8, i32 noundef 2110, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

525:                                              ; preds = %418
  %.0508.tr639 = trunc i32 %spec.select to i8
  %526 = shl i8 %.0508.tr639, 4
  %527 = and i8 %526, 32
  %528 = or disjoint i8 %527, 80
  store i8 %528, ptr %3, align 1, !tbaa !45
  %529 = zext i32 %.2545 to i64
  %530 = tail call ptr @lsqpack_enc_int(ptr noundef nonnull %3, ptr noundef nonnull %12, i64 noundef %529, i32 noundef 4)
  %.not640 = icmp ugt ptr %530, %3
  br i1 %.not640, label %531, label %636

531:                                              ; preds = %525
  %532 = ptrtoint ptr %12 to i64
  %533 = ptrtoint ptr %530 to i64
  %534 = sub i64 %532, %533
  %535 = tail call i32 @lsqpack_enc_enc_str(i32 noundef 7, ptr noundef nonnull %530, i64 noundef %534, ptr noundef %14, i32 noundef %20)
  %536 = icmp slt i32 %535, 0
  br i1 %536, label %636, label %537

537:                                              ; preds = %531
  %538 = zext nneg i32 %535 to i64
  %539 = getelementptr inbounds i8, ptr %530, i64 %538
  %540 = ptrtoint ptr %539 to i64
  %541 = ptrtoint ptr %3 to i64
  %542 = sub i64 %540, %541
  br label %543

543:                                              ; preds = %537, %518, %494, %468, %452, %439, %422
  %.5548 = phi i32 [ %.2545, %537 ], [ %.4547, %494 ], [ %.2545, %518 ], [ %.2545, %468 ], [ %.3546, %439 ], [ %.2545, %452 ], [ %.2545, %422 ]
  %.0542 = phi i64 [ %542, %537 ], [ %499, %494 ], [ %523, %518 ], [ %472, %468 ], [ %442, %439 ], [ %455, %452 ], [ %425, %422 ]
  %.sroa.34.4.off = add i32 %.sroa.34.4, -1
  %switch679 = icmp ult i32 %.sroa.34.4.off, 2
  br i1 %switch679, label %544, label %572

544:                                              ; preds = %543
  %545 = icmp eq i32 %.sroa.34.4, 1
  %546 = select i1 %545, i32 %20, i32 0
  %547 = tail call ptr @lsqpack_enc_push_entry(ptr noundef nonnull %0, i32 noundef %.3535, i32 noundef %.3539, ptr noundef %13, i32 noundef %17, ptr noundef %14, i32 noundef %546)
  %.not641 = icmp eq ptr %547, null
  br i1 %.not641, label %.thread691, label %548

548:                                              ; preds = %544
  %549 = getelementptr inbounds i8, ptr %547, i64 48
  %550 = load i32, ptr %549, align 8, !tbaa !35
  %551 = add i32 %550, 32
  %552 = getelementptr inbounds i8, ptr %547, i64 52
  %553 = load i32, ptr %552, align 4, !tbaa !36
  %554 = add i32 %551, %553
  %555 = getelementptr inbounds i8, ptr %0, i64 128
  %556 = load ptr, ptr %555, align 8, !tbaa !47
  %557 = getelementptr inbounds i8, ptr %556, i64 52
  %558 = load i32, ptr %557, align 4, !tbaa !48
  %559 = add i32 %554, %558
  store i32 %559, ptr %557, align 4, !tbaa !48
  %560 = and i32 %.sroa.48.4, 4
  %.not671 = icmp eq i32 %560, 0
  br i1 %.not671, label %575, label %561

561:                                              ; preds = %548
  %562 = getelementptr inbounds i8, ptr %547, i64 36
  %563 = load i32, ptr %562, align 4, !tbaa !50
  %564 = add i32 %563, 1
  store i32 %564, ptr %562, align 4, !tbaa !50
  %565 = getelementptr inbounds i8, ptr %0, i64 152
  %566 = load i32, ptr %565, align 8, !tbaa !51
  %567 = or i32 %566, 2
  store i32 %567, ptr %565, align 8, !tbaa !51
  %568 = getelementptr inbounds i8, ptr %556, i64 60
  %569 = load i32, ptr %568, align 4, !tbaa !52
  %.not672 = icmp eq i32 %569, 0
  %.phi.trans.insert = getelementptr inbounds i8, ptr %547, i64 24
  %.pre750 = load i32, ptr %.phi.trans.insert, align 8, !tbaa !39
  %570 = icmp ugt i32 %.pre750, %569
  %or.cond771 = select i1 %.not672, i1 true, i1 %570
  br i1 %or.cond771, label %._crit_edge749, label %571

571:                                              ; preds = %561
  tail call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 2146, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

._crit_edge749:                                   ; preds = %561
  tail call void @qenc_maybe_update_hinfo_min_max(ptr noundef nonnull %556, i32 noundef %.pre750)
  br label %575

572:                                              ; preds = %543
  %573 = icmp eq i32 %.sroa.34.4, 0
  br i1 %573, label %575, label %574

574:                                              ; preds = %572
  tail call void @__assert_fail(ptr noundef nonnull @.str.29, ptr noundef nonnull @.str.8, i32 noundef 2152, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

575:                                              ; preds = %572, %548, %._crit_edge749
  %576 = and i32 %.sroa.48.4, 2
  %.not673 = icmp eq i32 %576, 0
  br i1 %.not673, label %585, label %577

577:                                              ; preds = %575
  %578 = getelementptr inbounds i8, ptr %.6, i64 36
  %579 = load i32, ptr %578, align 4, !tbaa !50
  %580 = add i32 %579, 1
  store i32 %580, ptr %578, align 4, !tbaa !50
  %581 = getelementptr inbounds i8, ptr %0, i64 128
  %582 = load ptr, ptr %581, align 8, !tbaa !47
  %583 = getelementptr inbounds i8, ptr %.6, i64 24
  %584 = load i32, ptr %583, align 8, !tbaa !39
  tail call void @qenc_maybe_update_hinfo_min_max(ptr noundef %582, i32 noundef %584)
  br label %585

585:                                              ; preds = %577, %575
  tail call void @qenc_remove_overflow_entries(ptr noundef nonnull %0)
  %.not674 = icmp eq i32 %.1531, 0
  br i1 %.not674, label %600, label %586

586:                                              ; preds = %585
  %587 = getelementptr inbounds i8, ptr %0, i64 216
  %588 = load ptr, ptr %587, align 8, !tbaa !28
  %.not675 = icmp eq ptr %588, null
  br i1 %.not675, label %589, label %590

589:                                              ; preds = %586
  tail call void @__assert_fail(ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.8, i32 noundef 2167, ptr noundef nonnull @__PRETTY_FUNCTION__.lsqpack_enc_encode) #8
  unreachable

590:                                              ; preds = %586
  %591 = getelementptr inbounds i8, ptr %0, i64 144
  %592 = load i32, ptr %591, align 8, !tbaa !53
  %593 = getelementptr inbounds i8, ptr %0, i64 228
  %594 = load i32, ptr %593, align 4, !tbaa !54
  %.not676 = icmp ult i32 %592, %594
  br i1 %.not676, label %597, label %595

595:                                              ; preds = %590
  %596 = add i32 %594, 4
  tail call void @qenc_hist_update_size(ptr noundef nonnull %0, i32 noundef %596)
  br label %597

597:                                              ; preds = %595, %590
  tail call void @qenc_hist_add(ptr noundef nonnull %0, i32 noundef %.3535, i32 noundef %.3539)
  %598 = load i32, ptr %591, align 8, !tbaa !53
  %599 = add i32 %598, 1
  store i32 %599, ptr %591, align 8, !tbaa !53
  br label %600

600:                                              ; preds = %597, %585
  %601 = getelementptr inbounds i8, ptr %1, i64 %.0540
  %602 = sub i64 %9, %.0540
  %603 = tail call i32 @qenc_dup_draining(ptr noundef nonnull %0, ptr noundef %601, i64 noundef %602)
  %.not677700 = icmp eq i32 %603, 0
  br i1 %.not677700, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %600, %.lr.ph
  %604 = phi i32 [ %609, %.lr.ph ], [ %603, %600 ]
  %.1541701 = phi i64 [ %606, %.lr.ph ], [ %.0540, %600 ]
  %605 = zext i32 %604 to i64
  %606 = add i64 %.1541701, %605
  tail call void @qenc_remove_overflow_entries(ptr noundef %0)
  %607 = getelementptr inbounds i8, ptr %1, i64 %606
  %608 = sub i64 %9, %606
  %609 = tail call i32 @qenc_dup_draining(ptr noundef %0, ptr noundef %607, i64 noundef %608)
  %.not677 = icmp eq i32 %609, 0
  br i1 %.not677, label %._crit_edge, label %.lr.ph, !llvm.loop !55

._crit_edge:                                      ; preds = %.lr.ph, %600
  %.1541.lcssa = phi i64 [ %.0540, %600 ], [ %606, %.lr.ph ]
  %610 = add nuw nsw i32 %20, %17
  %611 = getelementptr inbounds i8, ptr %0, i64 192
  %612 = load i32, ptr %611, align 8, !tbaa !44
  %613 = add i32 %610, %612
  store i32 %613, ptr %611, align 8, !tbaa !44
  %614 = add i64 %.1541.lcssa, %.0542
  %615 = trunc i64 %614 to i32
  %616 = getelementptr inbounds i8, ptr %0, i64 196
  %617 = load i32, ptr %616, align 4, !tbaa !43
  %618 = add i32 %617, %615
  store i32 %618, ptr %616, align 4, !tbaa !43
  %619 = icmp ugt i32 %618, -2147483648
  br i1 %619, label %620, label %635

620:                                              ; preds = %._crit_edge
  %621 = uitofp i32 %613 to float
  %622 = uitofp i32 %618 to float
  %623 = fdiv float %621, %622
  %624 = fmul float %623, 1.000000e+03
  %625 = fptosi float %624 to i32
  store i32 %625, ptr %611, align 8, !tbaa !44
  store i32 1000, ptr %616, align 4, !tbaa !43
  %626 = load ptr, ptr %21, align 8, !tbaa !15
  %.not678 = icmp eq ptr %626, null
  br i1 %.not678, label %635, label %627

627:                                              ; preds = %620
  %628 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef nonnull %626, ptr noundef nonnull @.str) #7
  %629 = load ptr, ptr %21, align 8, !tbaa !15
  %630 = tail call float @lsqpack_enc_ratio(ptr noundef nonnull %0)
  %631 = fpext float %630 to double
  %632 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %629, ptr noundef nonnull @.str.31, double noundef %631) #7
  %633 = load ptr, ptr %21, align 8, !tbaa !15
  %634 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %633, ptr noundef nonnull @.str.2) #7
  br label %635

635:                                              ; preds = %620, %627, %._crit_edge
  store i64 %.1541.lcssa, ptr %2, align 8, !tbaa !5
  store i64 %.0542, ptr %4, align 8, !tbaa !5
  br label %636

636:                                              ; preds = %531, %525, %512, %504, %488, %483, %463, %456, %447, %434, %419, %405, %401, %400, %388, %383, %382, %370, %367, %366, %357, %356, %29, %635
  %.0 = phi i32 [ 0, %635 ], [ 2, %29 ], [ 1, %356 ], [ 1, %357 ], [ 1, %366 ], [ 1, %367 ], [ 1, %370 ], [ 1, %382 ], [ 1, %383 ], [ 1, %388 ], [ 1, %400 ], [ 1, %401 ], [ 1, %405 ], [ 2, %419 ], [ 2, %434 ], [ 2, %447 ], [ 2, %456 ], [ 2, %463 ], [ 2, %483 ], [ 2, %488 ], [ 2, %504 ], [ 2, %512 ], [ 2, %525 ], [ 2, %531 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  ret i32 %.0
}

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @lsxpack_header_get_name(ptr noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @lsxpack_header_get_value(ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nounwind uwtable
declare hidden i32 @find_in_static_full(i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_duplicable_entry(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_entry_is_draining(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_safe_to_dup(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_has_or_can_evict_at_least(ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_hist_seen(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden ptr @lsqpack_enc_push_entry(ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_maybe_update_hinfo_min_max(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_remove_overflow_entries(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @qenc_hist_add(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @qenc_dup_draining(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local float @lsqpack_enc_ratio(ptr noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #6

attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nofree nounwind willreturn memory(argmem: read) }
attributes #7 = { nounwind }
attributes #8 = { noreturn 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, !13, i64 24}
!10 = !{!"lsxpack_header", !11, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !13, i64 24, !13, i64 26, !13, i64 28, !7, i64 30, !7, i64 31, !7, i64 32, !12, i64 33, !7, i64 34, !7, i64 35}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"short", !7, i64 0}
!14 = !{!10, !13, i64 26}
!15 = !{!16, !11, i64 200}
!16 = !{!"lsqpack_enc", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !17, i64 56, !11, i64 72, !18, i64 80, !18, i64 96, !18, i64 112, !19, i64 128, !20, i64 160, !12, i64 192, !12, i64 196, !11, i64 200, !22, i64 208, !22, i64 212, !11, i64 216, !12, i64 224, !12, i64 228, !12, i64 232}
!17 = !{!"lsqpack_enc_head", !11, i64 0, !11, i64 8}
!18 = !{!"", !11, i64 0, !11, i64 8}
!19 = !{!"", !11, i64 0, !11, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!20 = !{!"", !21, i64 0, !11, i64 24}
!21 = !{!"lsqpack_dec_int_state", !12, i64 0, !12, i64 4, !12, i64 8, !6, i64 16}
!22 = !{!"float", !7, i64 0}
!23 = !{!10, !12, i64 8}
!24 = !{!10, !7, i64 31}
!25 = !{!12, !12, i64 0}
!26 = !{!10, !12, i64 12}
!27 = !{!16, !12, i64 0}
!28 = !{!16, !11, i64 216}
!29 = !{!16, !12, i64 52}
!30 = !{!16, !11, i64 72}
!31 = !{!11, !11, i64 0}
!32 = !{!33, !12, i64 40}
!33 = !{!"lsqpack_enc_table_entry", !34, i64 0, !34, i64 8, !34, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !7, i64 56}
!34 = !{!"", !11, i64 0}
!35 = !{!33, !12, i64 48}
!36 = !{!33, !12, i64 52}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}
!39 = !{!33, !12, i64 24}
!40 = !{!16, !12, i64 4}
!41 = !{!33, !12, i64 44}
!42 = distinct !{!42, !38}
!43 = !{!16, !12, i64 196}
!44 = !{!16, !12, i64 192}
!45 = !{!7, !7, i64 0}
!46 = !{!16, !12, i64 156}
!47 = !{!16, !11, i64 128}
!48 = !{!49, !12, i64 52}
!49 = !{!"lsqpack_header_info", !18, i64 0, !18, i64 16, !11, i64 32, !6, i64 40, !12, i64 48, !12, i64 52, !12, i64 56, !12, i64 60}
!50 = !{!33, !12, i64 36}
!51 = !{!16, !12, i64 152}
!52 = !{!49, !12, i64 60}
!53 = !{!16, !12, i64 144}
!54 = !{!16, !12, i64 228}
!55 = distinct !{!55, !38}


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