; LLVM IR from litespeedtech/ls-qpack :: bin (interop-decode)

; 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.anon = type { ptr, ptr }
%struct.lsqpack_dec_hset_if = type { ptr, ptr, ptr }
%struct.lsqpack_dec = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, %struct.lsqpack_ringbuf, %struct.anon.0, [8 x %struct.anon.1], i32, float, %struct.anon.2, %struct.lsqpack_dec_err }
%struct.lsqpack_ringbuf = type { i32, i32, i32, ptr }
%struct.anon.0 = type { ptr, ptr }
%struct.anon.1 = type { ptr, ptr }
%struct.anon.2 = type { i32, %union.anon }
%union.anon = type { %struct.anon.3 }
%struct.anon.3 = type { %struct.lsqpack_dec_int_state, %struct.lsqpack_huff_decode_state, i32, i32, ptr, ptr, ptr, i32, i32, i32, i32, i8, i8 }
%struct.lsqpack_dec_int_state = type { i32, i32, i32, i64 }
%struct.lsqpack_huff_decode_state = type { i32, %struct.lsqpack_decode_status }
%struct.lsqpack_decode_status = type { i8, i8 }
%struct.lsqpack_dec_err = type { i32, i32, i64, i64 }
%struct.buf = type { %struct.anon.7, ptr, i64, i64, i64, i64, %struct.lsxpack_header, i32, i32, i32, [4096 x i8], [0 x i8] }
%struct.anon.7 = type { ptr, ptr }
%struct.lsxpack_header = type { ptr, i32, i32, i32, i32, i16, i16, i16, i8, i8, i8, i8, i8, i8 }

@bufs = external dso_local global %struct.anon, align 8
@stdin = external global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@optarg = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@stderr = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@s_out = external hidden global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@s_max_read_size = external hidden global i64, align 8
@s_verbose = external hidden global i32, align 4
@s_dec_opts = external hidden global i32, align 4
@s_check_unset_qpack_idx = external hidden global i32, align 4
@stdout = external global ptr, align 8
@hset_if = external hidden constant %struct.lsqpack_dec_hset_if, align 8
@.str.7 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [29 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %struct.lsqpack_dec, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca [256 x i8], align 16
  %27 = alloca [256 x i8], align 16
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #11
  %30 = load ptr, ptr @stdin, align 8, !tbaa !9
  store ptr %30, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #11
  store ptr null, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #11
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #11
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 352, ptr %11) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store i32 1, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %26) #11
  call void @llvm.lifetime.start.p0(i64 256, ptr %27) #11
  br label %31

31:                                               ; preds = %125, %2
  %32 = load i32, ptr %4, align 4, !tbaa !5
  %33 = load ptr, ptr %5, align 8, !tbaa !9
  %34 = call i32 @getopt(i32 noundef %32, ptr noundef %33, ptr noundef @.str) #11
  store i32 %34, ptr %8, align 4, !tbaa !5
  %35 = icmp ne i32 -1, %34
  br i1 %35, label %36, label %126

36:                                               ; preds = %31
  %37 = load i32, ptr %8, align 4, !tbaa !5
  switch i32 %37, label %124 [
    i32 105, label %38
    i32 111, label %56
    i32 114, label %74
    i32 115, label %94
    i32 116, label %97
    i32 109, label %100
    i32 104, label %104
    i32 118, label %108
    i32 83, label %111
    i32 72, label %112
    i32 81, label %123
  ]

38:                                               ; preds = %36
  %39 = load ptr, ptr @optarg, align 8, !tbaa !9
  %40 = call i32 @strcmp(ptr noundef %39, ptr noundef @.str.1) #12
  %41 = icmp ne i32 0, %40
  br i1 %41, label %42, label %55

42:                                               ; preds = %38
  %43 = load ptr, ptr @optarg, align 8, !tbaa !9
  %44 = call noalias ptr @fopen(ptr noundef %43, ptr noundef @.str.2)
  store ptr %44, ptr %6, align 8, !tbaa !9
  %45 = load ptr, ptr %6, align 8, !tbaa !9
  %46 = icmp ne ptr %45, null
  br i1 %46, label %54, label %47

47:                                               ; preds = %42
  %48 = load ptr, ptr @stderr, align 8, !tbaa !9
  %49 = load ptr, ptr @optarg, align 8, !tbaa !9
  %50 = call ptr @__errno_location() #13
  %51 = load i32, ptr %50, align 4, !tbaa !5
  %52 = call ptr @strerror(i32 noundef %51) #11
  %53 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef @.str.3, ptr noundef %49, ptr noundef %52) #11
  call void @exit(i32 noundef 1) #14
  unreachable

54:                                               ; preds = %42
  br label %55

55:                                               ; preds = %54, %38
  br label %125

56:                                               ; preds = %36
  %57 = load ptr, ptr @optarg, align 8, !tbaa !9
  %58 = call i32 @strcmp(ptr noundef %57, ptr noundef @.str.1) #12
  %59 = icmp ne i32 0, %58
  br i1 %59, label %60, label %73

60:                                               ; preds = %56
  %61 = load ptr, ptr @optarg, align 8, !tbaa !9
  %62 = call noalias ptr @fopen(ptr noundef %61, ptr noundef @.str.4)
  store ptr %62, ptr @s_out, align 8, !tbaa !9
  %63 = load ptr, ptr @s_out, align 8, !tbaa !9
  %64 = icmp ne ptr %63, null
  br i1 %64, label %72, label %65

65:                                               ; preds = %60
  %66 = load ptr, ptr @stderr, align 8, !tbaa !9
  %67 = load ptr, ptr @optarg, align 8, !tbaa !9
  %68 = call ptr @__errno_location() #13
  %69 = load i32, ptr %68, align 4, !tbaa !5
  %70 = call ptr @strerror(i32 noundef %69) #11
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str.5, ptr noundef %67, ptr noundef %70) #11
  call void @exit(i32 noundef 1) #14
  unreachable

72:                                               ; preds = %60
  br label %73

73:                                               ; preds = %72, %56
  br label %125

74:                                               ; preds = %36
  %75 = load ptr, ptr @optarg, align 8, !tbaa !9
  %76 = call i32 @strcmp(ptr noundef %75, ptr noundef @.str.1) #12
  %77 = icmp eq i32 0, %76
  br i1 %77, label %78, label %80

78:                                               ; preds = %74
  %79 = load ptr, ptr @stdin, align 8, !tbaa !9
  store ptr %79, ptr %7, align 8, !tbaa !9
  br label %93

80:                                               ; preds = %74
  %81 = load ptr, ptr @optarg, align 8, !tbaa !9
  %82 = call noalias ptr @fopen(ptr noundef %81, ptr noundef @.str.6)
  store ptr %82, ptr %7, align 8, !tbaa !9
  %83 = load ptr, ptr %7, align 8, !tbaa !9
  %84 = icmp ne ptr %83, null
  br i1 %84, label %92, label %85

85:                                               ; preds = %80
  %86 = load ptr, ptr @stderr, align 8, !tbaa !9
  %87 = load ptr, ptr @optarg, align 8, !tbaa !9
  %88 = call ptr @__errno_location() #13
  %89 = load i32, ptr %88, align 4, !tbaa !5
  %90 = call ptr @strerror(i32 noundef %89) #11
  %91 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %86, ptr noundef @.str.3, ptr noundef %87, ptr noundef %90) #11
  call void @exit(i32 noundef 1) #14
  unreachable

92:                                               ; preds = %80
  br label %93

93:                                               ; preds = %92, %78
  br label %125

94:                                               ; preds = %36
  %95 = load ptr, ptr @optarg, align 8, !tbaa !9
  %96 = call i32 @atoi(ptr noundef %95) #12
  store i32 %96, ptr %10, align 4, !tbaa !5
  br label %125

97:                                               ; preds = %36
  %98 = load ptr, ptr @optarg, align 8, !tbaa !9
  %99 = call i32 @atoi(ptr noundef %98) #12
  store i32 %99, ptr %9, align 4, !tbaa !5
  br label %125

100:                                              ; preds = %36
  %101 = load ptr, ptr @optarg, align 8, !tbaa !9
  %102 = call i32 @atoi(ptr noundef %101) #12
  %103 = sext i32 %102 to i64
  store i64 %103, ptr @s_max_read_size, align 8, !tbaa !11
  br label %125

104:                                              ; preds = %36
  %105 = load ptr, ptr %5, align 8, !tbaa !9
  %106 = getelementptr inbounds ptr, ptr %105, i64 0
  %107 = load ptr, ptr %106, align 8, !tbaa !9
  call void @usage(ptr noundef %107)
  call void @exit(i32 noundef 0) #14
  unreachable

108:                                              ; preds = %36
  %109 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr @s_verbose, align 4, !tbaa !5
  br label %125

111:                                              ; preds = %36
  store i32 0, ptr %25, align 4, !tbaa !5
  br label %125

112:                                              ; preds = %36
  %113 = load ptr, ptr @optarg, align 8, !tbaa !9
  %114 = call i32 @atoi(ptr noundef %113) #12
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %119

116:                                              ; preds = %112
  %117 = load i32, ptr @s_dec_opts, align 4, !tbaa !5
  %118 = or i32 %117, 1
  store i32 %118, ptr @s_dec_opts, align 4, !tbaa !5
  br label %122

119:                                              ; preds = %112
  %120 = load i32, ptr @s_dec_opts, align 4, !tbaa !5
  %121 = and i32 %120, -2
  store i32 %121, ptr @s_dec_opts, align 4, !tbaa !5
  br label %122

122:                                              ; preds = %119, %116
  br label %125

123:                                              ; preds = %36
  store i32 0, ptr @s_check_unset_qpack_idx, align 4, !tbaa !5
  br label %125

124:                                              ; preds = %36
  call void @exit(i32 noundef 1) #14
  unreachable

125:                                              ; preds = %123, %122, %111, %108, %100, %97, %94, %93, %73, %55
  br label %31, !llvm.loop !13

126:                                              ; preds = %31
  %127 = load ptr, ptr @s_out, align 8, !tbaa !9
  %128 = icmp ne ptr %127, null
  br i1 %128, label %131, label %129

129:                                              ; preds = %126
  %130 = load ptr, ptr @stdout, align 8, !tbaa !9
  store ptr %130, ptr @s_out, align 8, !tbaa !9
  br label %131

131:                                              ; preds = %129, %126
  %132 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %134, label %136

134:                                              ; preds = %131
  %135 = load ptr, ptr @stderr, align 8, !tbaa !9
  br label %137

136:                                              ; preds = %131
  br label %137

137:                                              ; preds = %136, %134
  %138 = phi ptr [ %135, %134 ], [ null, %136 ]
  %139 = load i32, ptr %9, align 4, !tbaa !5
  %140 = load i32, ptr %10, align 4, !tbaa !5
  %141 = load i32, ptr @s_dec_opts, align 4, !tbaa !5
  call void @lsqpack_dec_init(ptr noundef %11, ptr noundef %138, i32 noundef %139, i32 noundef %140, ptr noundef @hset_if, i32 noundef %141)
  store i64 0, ptr %18, align 8, !tbaa !11
  br label %142

142:                                              ; preds = %254, %188, %137
  br label %143

143:                                              ; preds = %142
  %144 = load i64, ptr %18, align 8, !tbaa !11
  store i64 %144, ptr %19, align 8, !tbaa !11
  %145 = load ptr, ptr %6, align 8, !tbaa !9
  %146 = call i64 @fread(ptr noundef %16, i64 noundef 1, i64 noundef 8, ptr noundef %145)
  store i64 %146, ptr %14, align 8, !tbaa !11
  %147 = load i64, ptr %14, align 8, !tbaa !11
  %148 = icmp eq i64 %147, 0
  br i1 %148, label %149, label %150

149:                                              ; preds = %143
  br label %255

150:                                              ; preds = %143
  %151 = load i64, ptr %14, align 8, !tbaa !11
  %152 = icmp ne i64 %151, 8
  br i1 %152, label %153, label %160

153:                                              ; preds = %150
  %154 = load ptr, ptr @stderr, align 8, !tbaa !9
  %155 = load i64, ptr %18, align 8, !tbaa !11
  %156 = call ptr @__errno_location() #13
  %157 = load i32, ptr %156, align 4, !tbaa !5
  %158 = call ptr @strerror(i32 noundef %157) #11
  %159 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %154, ptr noundef @.str.7, i64 noundef 8, i64 noundef %155, ptr noundef %158) #11
  br label %823

160:                                              ; preds = %150
  %161 = load i64, ptr %14, align 8, !tbaa !11
  %162 = load i64, ptr %18, align 8, !tbaa !11
  %163 = add i64 %162, %161
  store i64 %163, ptr %18, align 8, !tbaa !11
  %164 = load ptr, ptr %6, align 8, !tbaa !9
  %165 = call i64 @fread(ptr noundef %17, i64 noundef 1, i64 noundef 4, ptr noundef %164)
  store i64 %165, ptr %14, align 8, !tbaa !11
  %166 = load i64, ptr %14, align 8, !tbaa !11
  %167 = icmp ne i64 %166, 4
  br i1 %167, label %168, label %175

168:                                              ; preds = %160
  %169 = load ptr, ptr @stderr, align 8, !tbaa !9
  %170 = load i64, ptr %18, align 8, !tbaa !11
  %171 = call ptr @__errno_location() #13
  %172 = load i32, ptr %171, align 4, !tbaa !5
  %173 = call ptr @strerror(i32 noundef %172) #11
  %174 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %169, ptr noundef @.str.8, i64 noundef 4, i64 noundef %170, ptr noundef %173) #11
  br label %823

175:                                              ; preds = %160
  %176 = load i64, ptr %14, align 8, !tbaa !11
  %177 = load i64, ptr %18, align 8, !tbaa !11
  %178 = add i64 %177, %176
  store i64 %178, ptr %18, align 8, !tbaa !11
  %179 = load i64, ptr %16, align 8, !tbaa !11
  %180 = call i64 @__bswap_64(i64 noundef %179)
  store i64 %180, ptr %16, align 8, !tbaa !11
  %181 = load i32, ptr %17, align 4, !tbaa !5
  %182 = call i32 @__bswap_32(i32 noundef %181)
  store i32 %182, ptr %17, align 4, !tbaa !5
  %183 = load i64, ptr %16, align 8, !tbaa !11
  %184 = icmp eq i64 %183, 0
  br i1 %184, label %185, label %189

185:                                              ; preds = %175
  %186 = load i32, ptr %17, align 4, !tbaa !5
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %189

188:                                              ; preds = %185
  br label %142

189:                                              ; preds = %185, %175
  %190 = load i32, ptr %17, align 4, !tbaa !5
  %191 = zext i32 %190 to i64
  %192 = add i64 4208, %191
  %193 = call noalias ptr @malloc(i64 noundef %192) #15
  store ptr %193, ptr %20, align 8, !tbaa !9
  %194 = load ptr, ptr %20, align 8, !tbaa !9
  %195 = icmp ne ptr %194, null
  br i1 %195, label %197, label %196

196:                                              ; preds = %189
  call void @perror(ptr noundef @.str.9)
  call void @exit(i32 noundef 1) #14
  unreachable

197:                                              ; preds = %189
  %198 = load ptr, ptr %20, align 8, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 8 %198, i8 0, i64 4208, i1 false)
  %199 = load ptr, ptr %20, align 8, !tbaa !9
  %200 = getelementptr inbounds %struct.buf, ptr %199, i32 0, i32 11
  %201 = getelementptr inbounds [0 x i8], ptr %200, i64 0, i64 0
  %202 = load i32, ptr %17, align 4, !tbaa !5
  %203 = zext i32 %202 to i64
  %204 = load ptr, ptr %6, align 8, !tbaa !9
  %205 = call i64 @fread(ptr noundef %201, i64 noundef 1, i64 noundef %203, ptr noundef %204)
  store i64 %205, ptr %14, align 8, !tbaa !11
  %206 = load i64, ptr %14, align 8, !tbaa !11
  %207 = load i32, ptr %17, align 4, !tbaa !5
  %208 = zext i32 %207 to i64
  %209 = icmp ne i64 %206, %208
  br i1 %209, label %210, label %218

210:                                              ; preds = %197
  %211 = load ptr, ptr @stderr, align 8, !tbaa !9
  %212 = load i32, ptr %17, align 4, !tbaa !5
  %213 = load i64, ptr %18, align 8, !tbaa !11
  %214 = call ptr @__errno_location() #13
  %215 = load i32, ptr %214, align 4, !tbaa !5
  %216 = call ptr @strerror(i32 noundef %215) #11
  %217 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %211, ptr noundef @.str.10, i32 noundef %212, i64 noundef %213, ptr noundef %216) #11
  br label %823

218:                                              ; preds = %197
  %219 = load i64, ptr %14, align 8, !tbaa !11
  %220 = load i64, ptr %18, align 8, !tbaa !11
  %221 = add i64 %220, %219
  store i64 %221, ptr %18, align 8, !tbaa !11
  %222 = load ptr, ptr %20, align 8, !tbaa !9
  %223 = getelementptr inbounds %struct.buf, ptr %222, i32 0, i32 1
  store ptr %11, ptr %223, align 8, !tbaa !15
  %224 = load i64, ptr %16, align 8, !tbaa !11
  %225 = load ptr, ptr %20, align 8, !tbaa !9
  %226 = getelementptr inbounds %struct.buf, ptr %225, i32 0, i32 2
  store i64 %224, ptr %226, align 8, !tbaa !20
  %227 = load i32, ptr %17, align 4, !tbaa !5
  %228 = zext i32 %227 to i64
  %229 = load ptr, ptr %20, align 8, !tbaa !9
  %230 = getelementptr inbounds %struct.buf, ptr %229, i32 0, i32 3
  store i64 %228, ptr %230, align 8, !tbaa !21
  %231 = load i64, ptr %19, align 8, !tbaa !11
  %232 = load ptr, ptr %20, align 8, !tbaa !9
  %233 = getelementptr inbounds %struct.buf, ptr %232, i32 0, i32 5
  store i64 %231, ptr %233, align 8, !tbaa !22
  %234 = load ptr, ptr %20, align 8, !tbaa !9
  %235 = getelementptr inbounds %struct.buf, ptr %234, i32 0, i32 3
  %236 = load i64, ptr %235, align 8, !tbaa !21
  %237 = icmp eq i64 %236, 0
  br i1 %237, label %238, label %239

238:                                              ; preds = %218
  call void @exit(i32 noundef 1) #14
  unreachable

239:                                              ; preds = %218
  br label %240

240:                                              ; preds = %239
  %241 = load ptr, ptr %20, align 8, !tbaa !9
  %242 = getelementptr inbounds %struct.buf, ptr %241, i32 0, i32 0
  %243 = getelementptr inbounds %struct.anon.7, ptr %242, i32 0, i32 0
  store ptr null, ptr %243, align 8, !tbaa !23
  %244 = load ptr, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  %245 = load ptr, ptr %20, align 8, !tbaa !9
  %246 = getelementptr inbounds %struct.buf, ptr %245, i32 0, i32 0
  %247 = getelementptr inbounds %struct.anon.7, ptr %246, i32 0, i32 1
  store ptr %244, ptr %247, align 8, !tbaa !25
  %248 = load ptr, ptr %20, align 8, !tbaa !9
  %249 = load ptr, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  store ptr %248, ptr %249, align 8, !tbaa !9
  %250 = load ptr, ptr %20, align 8, !tbaa !9
  %251 = getelementptr inbounds %struct.buf, ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds %struct.anon.7, ptr %251, i32 0, i32 0
  store ptr %252, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %253

253:                                              ; preds = %240
  br label %254

254:                                              ; preds = %253
  br label %142

255:                                              ; preds = %149
  %256 = load ptr, ptr %6, align 8, !tbaa !9
  %257 = call i32 @fclose(ptr noundef %256)
  store ptr null, ptr %6, align 8, !tbaa !9
  %258 = load ptr, ptr %7, align 8, !tbaa !9
  %259 = icmp ne ptr %258, null
  br i1 %259, label %260, label %472

260:                                              ; preds = %255
  store i32 0, ptr %21, align 4, !tbaa !5
  br label %261

261:                                              ; preds = %468, %284, %260
  %262 = getelementptr inbounds [256 x i8], ptr %27, i64 0, i64 0
  %263 = load ptr, ptr %7, align 8, !tbaa !9
  %264 = call ptr @fgets(ptr noundef %262, i32 noundef 256, ptr noundef %263)
  store ptr %264, ptr %22, align 8, !tbaa !9
  %265 = load ptr, ptr %22, align 8, !tbaa !9
  %266 = icmp ne ptr %265, null
  br i1 %266, label %267, label %469

267:                                              ; preds = %261
  %268 = load i32, ptr %21, align 4, !tbaa !5
  %269 = add i32 %268, 1
  store i32 %269, ptr %21, align 4, !tbaa !5
  %270 = load ptr, ptr %22, align 8, !tbaa !9
  %271 = call ptr @strchr(ptr noundef %270, i32 noundef 10) #12
  store ptr %271, ptr %23, align 8, !tbaa !9
  %272 = load ptr, ptr %23, align 8, !tbaa !9
  %273 = icmp ne ptr %272, null
  br i1 %273, label %278, label %274

274:                                              ; preds = %267
  %275 = load ptr, ptr @stderr, align 8, !tbaa !9
  %276 = load i32, ptr %21, align 4, !tbaa !5
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef @.str.11, i32 noundef %276) #11
  call void @exit(i32 noundef 1) #14
  unreachable

278:                                              ; preds = %267
  %279 = load ptr, ptr %23, align 8, !tbaa !9
  store i8 0, ptr %279, align 1, !tbaa !26
  %280 = load ptr, ptr %22, align 8, !tbaa !9
  %281 = load i8, ptr %280, align 1, !tbaa !26
  %282 = sext i8 %281 to i32
  %283 = icmp eq i32 %282, 35
  br i1 %283, label %284, label %285

284:                                              ; preds = %278
  br label %261, !llvm.loop !27

285:                                              ; preds = %278
  %286 = load ptr, ptr %22, align 8, !tbaa !9
  %287 = getelementptr inbounds [256 x i8], ptr %26, i64 0, i64 0
  %288 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %286, ptr noundef @.str.12, ptr noundef %287, ptr noundef %16, ptr noundef %17) #11
  %289 = icmp eq i32 3, %288
  br i1 %289, label %290, label %458

290:                                              ; preds = %285
  %291 = load ptr, ptr @bufs, align 8, !tbaa !28
  store ptr %291, ptr %20, align 8, !tbaa !9
  br label %292

292:                                              ; preds = %303, %290
  %293 = load ptr, ptr %20, align 8, !tbaa !9
  %294 = icmp ne ptr %293, null
  br i1 %294, label %295, label %308

295:                                              ; preds = %292
  %296 = load i64, ptr %16, align 8, !tbaa !11
  %297 = load ptr, ptr %20, align 8, !tbaa !9
  %298 = getelementptr inbounds %struct.buf, ptr %297, i32 0, i32 2
  %299 = load i64, ptr %298, align 8, !tbaa !20
  %300 = icmp eq i64 %296, %299
  br i1 %300, label %301, label %302

301:                                              ; preds = %295
  br label %308

302:                                              ; preds = %295
  br label %303

303:                                              ; preds = %302
  %304 = load ptr, ptr %20, align 8, !tbaa !9
  %305 = getelementptr inbounds %struct.buf, ptr %304, i32 0, i32 0
  %306 = getelementptr inbounds %struct.anon.7, ptr %305, i32 0, i32 0
  %307 = load ptr, ptr %306, align 8, !tbaa !23
  store ptr %307, ptr %20, align 8, !tbaa !9
  br label %292, !llvm.loop !29

308:                                              ; preds = %301, %292
  %309 = load ptr, ptr %20, align 8, !tbaa !9
  %310 = icmp ne ptr %309, null
  br i1 %310, label %316, label %311

311:                                              ; preds = %308
  %312 = load ptr, ptr @stderr, align 8, !tbaa !9
  %313 = load i64, ptr %16, align 8, !tbaa !11
  %314 = load i32, ptr %21, align 4, !tbaa !5
  %315 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %312, ptr noundef @.str.13, i64 noundef %313, i32 noundef %314) #11
  call void @exit(i32 noundef 1) #14
  unreachable

316:                                              ; preds = %308
  %317 = load ptr, ptr %20, align 8, !tbaa !9
  %318 = getelementptr inbounds %struct.buf, ptr %317, i32 0, i32 11
  %319 = getelementptr inbounds [0 x i8], ptr %318, i64 0, i64 0
  store ptr %319, ptr %13, align 8, !tbaa !9
  %320 = load ptr, ptr %20, align 8, !tbaa !9
  %321 = load i64, ptr %16, align 8, !tbaa !11
  %322 = load ptr, ptr %20, align 8, !tbaa !9
  %323 = getelementptr inbounds %struct.buf, ptr %322, i32 0, i32 3
  %324 = load i64, ptr %323, align 8, !tbaa !21
  %325 = load ptr, ptr %20, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.buf, ptr %325, i32 0, i32 3
  %327 = load i64, ptr %326, align 8, !tbaa !21
  %328 = call i32 @lsqpack_dec_header_in(ptr noundef %11, ptr noundef %320, i64 noundef %321, i64 noundef %324, ptr noundef %13, i64 noundef %327, ptr noundef null, ptr noundef null)
  store i32 %328, ptr %24, align 4, !tbaa !5
  %329 = load i32, ptr %24, align 4, !tbaa !5
  switch i32 %329, label %447 [
    i32 0, label %330
    i32 1, label %386
    i32 2, label %433
  ]

330:                                              ; preds = %316
  %331 = load ptr, ptr %13, align 8, !tbaa !9
  %332 = load ptr, ptr %20, align 8, !tbaa !9
  %333 = getelementptr inbounds %struct.buf, ptr %332, i32 0, i32 11
  %334 = getelementptr inbounds [0 x i8], ptr %333, i64 0, i64 0
  %335 = load ptr, ptr %20, align 8, !tbaa !9
  %336 = getelementptr inbounds %struct.buf, ptr %335, i32 0, i32 3
  %337 = load i64, ptr %336, align 8, !tbaa !21
  %338 = getelementptr inbounds i8, ptr %334, i64 %337
  %339 = icmp eq ptr %331, %338
  br i1 %339, label %340, label %341

340:                                              ; preds = %330
  br label %342

341:                                              ; preds = %330
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.15, i32 noundef 588, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

342:                                              ; preds = %340
  %343 = load ptr, ptr %20, align 8, !tbaa !9
  call void @header_block_done(ptr noundef %343)
  %344 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %351

346:                                              ; preds = %342
  %347 = load ptr, ptr @stderr, align 8, !tbaa !9
  %348 = call float @lsqpack_dec_ratio(ptr noundef %11)
  %349 = fpext float %348 to double
  %350 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %347, ptr noundef @.str.16, double noundef %349) #11
  br label %351

351:                                              ; preds = %346, %342
  br label %352

352:                                              ; preds = %351
  %353 = load ptr, ptr %20, align 8, !tbaa !9
  %354 = getelementptr inbounds %struct.buf, ptr %353, i32 0, i32 0
  %355 = getelementptr inbounds %struct.anon.7, ptr %354, i32 0, i32 0
  %356 = load ptr, ptr %355, align 8, !tbaa !23
  %357 = icmp ne ptr %356, null
  br i1 %357, label %358, label %369

358:                                              ; preds = %352
  %359 = load ptr, ptr %20, align 8, !tbaa !9
  %360 = getelementptr inbounds %struct.buf, ptr %359, i32 0, i32 0
  %361 = getelementptr inbounds %struct.anon.7, ptr %360, i32 0, i32 1
  %362 = load ptr, ptr %361, align 8, !tbaa !25
  %363 = load ptr, ptr %20, align 8, !tbaa !9
  %364 = getelementptr inbounds %struct.buf, ptr %363, i32 0, i32 0
  %365 = getelementptr inbounds %struct.anon.7, ptr %364, i32 0, i32 0
  %366 = load ptr, ptr %365, align 8, !tbaa !23
  %367 = getelementptr inbounds %struct.buf, ptr %366, i32 0, i32 0
  %368 = getelementptr inbounds %struct.anon.7, ptr %367, i32 0, i32 1
  store ptr %362, ptr %368, align 8, !tbaa !25
  br label %374

369:                                              ; preds = %352
  %370 = load ptr, ptr %20, align 8, !tbaa !9
  %371 = getelementptr inbounds %struct.buf, ptr %370, i32 0, i32 0
  %372 = getelementptr inbounds %struct.anon.7, ptr %371, i32 0, i32 1
  %373 = load ptr, ptr %372, align 8, !tbaa !25
  store ptr %373, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %374

374:                                              ; preds = %369, %358
  %375 = load ptr, ptr %20, align 8, !tbaa !9
  %376 = getelementptr inbounds %struct.buf, ptr %375, i32 0, i32 0
  %377 = getelementptr inbounds %struct.anon.7, ptr %376, i32 0, i32 0
  %378 = load ptr, ptr %377, align 8, !tbaa !23
  %379 = load ptr, ptr %20, align 8, !tbaa !9
  %380 = getelementptr inbounds %struct.buf, ptr %379, i32 0, i32 0
  %381 = getelementptr inbounds %struct.anon.7, ptr %380, i32 0, i32 1
  %382 = load ptr, ptr %381, align 8, !tbaa !25
  store ptr %378, ptr %382, align 8, !tbaa !9
  br label %383

383:                                              ; preds = %374
  br label %384

384:                                              ; preds = %383
  %385 = load ptr, ptr %20, align 8, !tbaa !9
  call void @free(ptr noundef %385) #11
  br label %457

386:                                              ; preds = %316
  %387 = load ptr, ptr %13, align 8, !tbaa !9
  %388 = load ptr, ptr %20, align 8, !tbaa !9
  %389 = getelementptr inbounds %struct.buf, ptr %388, i32 0, i32 11
  %390 = getelementptr inbounds [0 x i8], ptr %389, i64 0, i64 0
  %391 = ptrtoint ptr %387 to i64
  %392 = ptrtoint ptr %390 to i64
  %393 = sub i64 %391, %392
  %394 = trunc i64 %393 to i32
  %395 = zext i32 %394 to i64
  %396 = load ptr, ptr %20, align 8, !tbaa !9
  %397 = getelementptr inbounds %struct.buf, ptr %396, i32 0, i32 4
  %398 = load i64, ptr %397, align 8, !tbaa !30
  %399 = add i64 %398, %395
  store i64 %399, ptr %397, align 8, !tbaa !30
  br label %400

400:                                              ; preds = %386
  %401 = load ptr, ptr %20, align 8, !tbaa !9
  %402 = getelementptr inbounds %struct.buf, ptr %401, i32 0, i32 0
  %403 = getelementptr inbounds %struct.anon.7, ptr %402, i32 0, i32 0
  %404 = load ptr, ptr %403, align 8, !tbaa !23
  %405 = icmp ne ptr %404, null
  br i1 %405, label %406, label %417

406:                                              ; preds = %400
  %407 = load ptr, ptr %20, align 8, !tbaa !9
  %408 = getelementptr inbounds %struct.buf, ptr %407, i32 0, i32 0
  %409 = getelementptr inbounds %struct.anon.7, ptr %408, i32 0, i32 1
  %410 = load ptr, ptr %409, align 8, !tbaa !25
  %411 = load ptr, ptr %20, align 8, !tbaa !9
  %412 = getelementptr inbounds %struct.buf, ptr %411, i32 0, i32 0
  %413 = getelementptr inbounds %struct.anon.7, ptr %412, i32 0, i32 0
  %414 = load ptr, ptr %413, align 8, !tbaa !23
  %415 = getelementptr inbounds %struct.buf, ptr %414, i32 0, i32 0
  %416 = getelementptr inbounds %struct.anon.7, ptr %415, i32 0, i32 1
  store ptr %410, ptr %416, align 8, !tbaa !25
  br label %422

417:                                              ; preds = %400
  %418 = load ptr, ptr %20, align 8, !tbaa !9
  %419 = getelementptr inbounds %struct.buf, ptr %418, i32 0, i32 0
  %420 = getelementptr inbounds %struct.anon.7, ptr %419, i32 0, i32 1
  %421 = load ptr, ptr %420, align 8, !tbaa !25
  store ptr %421, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %422

422:                                              ; preds = %417, %406
  %423 = load ptr, ptr %20, align 8, !tbaa !9
  %424 = getelementptr inbounds %struct.buf, ptr %423, i32 0, i32 0
  %425 = getelementptr inbounds %struct.anon.7, ptr %424, i32 0, i32 0
  %426 = load ptr, ptr %425, align 8, !tbaa !23
  %427 = load ptr, ptr %20, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.buf, ptr %427, i32 0, i32 0
  %429 = getelementptr inbounds %struct.anon.7, ptr %428, i32 0, i32 1
  %430 = load ptr, ptr %429, align 8, !tbaa !25
  store ptr %426, ptr %430, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %422
  br label %432

432:                                              ; preds = %431
  br label %457

433:                                              ; preds = %316
  %434 = load ptr, ptr %13, align 8, !tbaa !9
  %435 = load ptr, ptr %20, align 8, !tbaa !9
  %436 = getelementptr inbounds %struct.buf, ptr %435, i32 0, i32 11
  %437 = getelementptr inbounds [0 x i8], ptr %436, i64 0, i64 0
  %438 = ptrtoint ptr %434 to i64
  %439 = ptrtoint ptr %437 to i64
  %440 = sub i64 %438, %439
  %441 = trunc i64 %440 to i32
  %442 = zext i32 %441 to i64
  %443 = load ptr, ptr %20, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.buf, ptr %443, i32 0, i32 4
  %445 = load i64, ptr %444, align 8, !tbaa !30
  %446 = add i64 %445, %442
  store i64 %446, ptr %444, align 8, !tbaa !30
  br label %457

447:                                              ; preds = %316
  %448 = load i32, ptr %24, align 4, !tbaa !5
  %449 = icmp eq i32 %448, 3
  br i1 %449, label %450, label %451

450:                                              ; preds = %447
  br label %452

451:                                              ; preds = %447
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.15, i32 noundef 604, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

452:                                              ; preds = %450
  %453 = load ptr, ptr @stderr, align 8, !tbaa !9
  %454 = load i32, ptr %21, align 4, !tbaa !5
  %455 = load i64, ptr %16, align 8, !tbaa !11
  %456 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %453, ptr noundef @.str.18, i32 noundef %454, i64 noundef %455) #11
  call void @exit(i32 noundef 1) #14
  unreachable

457:                                              ; preds = %433, %432, %384
  br label %468

458:                                              ; preds = %285
  %459 = load ptr, ptr %22, align 8, !tbaa !9
  %460 = getelementptr inbounds [256 x i8], ptr %26, i64 0, i64 0
  %461 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef %459, ptr noundef @.str.19, ptr noundef %460, ptr noundef %17) #11
  %462 = icmp eq i32 2, %461
  br i1 %462, label %463, label %466

463:                                              ; preds = %458
  %464 = load i32, ptr %17, align 4, !tbaa !5
  %465 = zext i32 %464 to i64
  store i64 %465, ptr @s_max_read_size, align 8, !tbaa !11
  br label %467

466:                                              ; preds = %458
  call void @perror(ptr noundef @.str.20)
  call void @exit(i32 noundef 1) #14
  unreachable

467:                                              ; preds = %463
  br label %468

468:                                              ; preds = %467, %457
  br label %261, !llvm.loop !27

469:                                              ; preds = %261
  %470 = load ptr, ptr %7, align 8, !tbaa !9
  %471 = call i32 @fclose(ptr noundef %470)
  br label %587

472:                                              ; preds = %255
  %473 = load i32, ptr %25, align 4, !tbaa !5
  %474 = icmp ne i32 %473, 0
  br i1 %474, label %475, label %586

475:                                              ; preds = %472
  %476 = load i32, ptr %10, align 4, !tbaa !5
  %477 = icmp ne i32 %476, 0
  br i1 %477, label %478, label %586

478:                                              ; preds = %475
  %479 = load i32, ptr %9, align 4, !tbaa !5
  %480 = icmp ne i32 %479, 0
  br i1 %480, label %481, label %586

481:                                              ; preds = %478
  %482 = load ptr, ptr @bufs, align 8, !tbaa !28
  %483 = icmp ne ptr %482, null
  br i1 %483, label %484, label %586

484:                                              ; preds = %481
  %485 = load ptr, ptr @bufs, align 8, !tbaa !28
  %486 = getelementptr inbounds %struct.buf, ptr %485, i32 0, i32 2
  %487 = load i64, ptr %486, align 8, !tbaa !20
  %488 = icmp ne i64 %487, 0
  br i1 %488, label %489, label %586

489:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #11
  store ptr null, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %490 = load ptr, ptr @bufs, align 8, !tbaa !28
  store ptr %490, ptr %20, align 8, !tbaa !9
  br label %491

491:                                              ; preds = %568, %489
  %492 = load ptr, ptr %20, align 8, !tbaa !9
  %493 = icmp ne ptr %492, null
  br i1 %493, label %494, label %570

494:                                              ; preds = %491
  %495 = load ptr, ptr %20, align 8, !tbaa !9
  %496 = getelementptr inbounds %struct.buf, ptr %495, i32 0, i32 0
  %497 = getelementptr inbounds %struct.anon.7, ptr %496, i32 0, i32 0
  %498 = load ptr, ptr %497, align 8, !tbaa !23
  store ptr %498, ptr %29, align 8, !tbaa !9
  %499 = load ptr, ptr %20, align 8, !tbaa !9
  %500 = getelementptr inbounds %struct.buf, ptr %499, i32 0, i32 2
  %501 = load i64, ptr %500, align 8, !tbaa !20
  %502 = icmp ne i64 %501, 0
  br i1 %502, label %503, label %504

503:                                              ; preds = %494
  br label %568

504:                                              ; preds = %494
  %505 = load ptr, ptr %28, align 8, !tbaa !9
  %506 = icmp ne ptr %505, null
  br i1 %506, label %507, label %533

507:                                              ; preds = %504
  br label %508

508:                                              ; preds = %507
  %509 = load ptr, ptr %20, align 8, !tbaa !9
  %510 = getelementptr inbounds %struct.buf, ptr %509, i32 0, i32 0
  %511 = getelementptr inbounds %struct.anon.7, ptr %510, i32 0, i32 1
  %512 = load ptr, ptr %511, align 8, !tbaa !25
  %513 = load ptr, ptr %28, align 8, !tbaa !9
  %514 = getelementptr inbounds %struct.buf, ptr %513, i32 0, i32 0
  %515 = getelementptr inbounds %struct.anon.7, ptr %514, i32 0, i32 1
  store ptr %512, ptr %515, align 8, !tbaa !25
  %516 = load ptr, ptr %20, align 8, !tbaa !9
  %517 = load ptr, ptr %28, align 8, !tbaa !9
  %518 = getelementptr inbounds %struct.buf, ptr %517, i32 0, i32 0
  %519 = getelementptr inbounds %struct.anon.7, ptr %518, i32 0, i32 0
  store ptr %516, ptr %519, align 8, !tbaa !23
  %520 = load ptr, ptr %28, align 8, !tbaa !9
  %521 = load ptr, ptr %20, align 8, !tbaa !9
  %522 = getelementptr inbounds %struct.buf, ptr %521, i32 0, i32 0
  %523 = getelementptr inbounds %struct.anon.7, ptr %522, i32 0, i32 1
  %524 = load ptr, ptr %523, align 8, !tbaa !25
  store ptr %520, ptr %524, align 8, !tbaa !9
  %525 = load ptr, ptr %28, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.buf, ptr %525, i32 0, i32 0
  %527 = getelementptr inbounds %struct.anon.7, ptr %526, i32 0, i32 0
  %528 = load ptr, ptr %20, align 8, !tbaa !9
  %529 = getelementptr inbounds %struct.buf, ptr %528, i32 0, i32 0
  %530 = getelementptr inbounds %struct.anon.7, ptr %529, i32 0, i32 1
  store ptr %527, ptr %530, align 8, !tbaa !25
  br label %531

531:                                              ; preds = %508
  br label %532

532:                                              ; preds = %531
  br label %533

533:                                              ; preds = %532, %504
  %534 = load ptr, ptr %20, align 8, !tbaa !9
  store ptr %534, ptr %28, align 8, !tbaa !9
  br label %535

535:                                              ; preds = %533
  %536 = load ptr, ptr %20, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct.buf, ptr %536, i32 0, i32 0
  %538 = getelementptr inbounds %struct.anon.7, ptr %537, i32 0, i32 0
  %539 = load ptr, ptr %538, align 8, !tbaa !23
  %540 = icmp ne ptr %539, null
  br i1 %540, label %541, label %552

541:                                              ; preds = %535
  %542 = load ptr, ptr %20, align 8, !tbaa !9
  %543 = getelementptr inbounds %struct.buf, ptr %542, i32 0, i32 0
  %544 = getelementptr inbounds %struct.anon.7, ptr %543, i32 0, i32 1
  %545 = load ptr, ptr %544, align 8, !tbaa !25
  %546 = load ptr, ptr %20, align 8, !tbaa !9
  %547 = getelementptr inbounds %struct.buf, ptr %546, i32 0, i32 0
  %548 = getelementptr inbounds %struct.anon.7, ptr %547, i32 0, i32 0
  %549 = load ptr, ptr %548, align 8, !tbaa !23
  %550 = getelementptr inbounds %struct.buf, ptr %549, i32 0, i32 0
  %551 = getelementptr inbounds %struct.anon.7, ptr %550, i32 0, i32 1
  store ptr %545, ptr %551, align 8, !tbaa !25
  br label %557

552:                                              ; preds = %535
  %553 = load ptr, ptr %20, align 8, !tbaa !9
  %554 = getelementptr inbounds %struct.buf, ptr %553, i32 0, i32 0
  %555 = getelementptr inbounds %struct.anon.7, ptr %554, i32 0, i32 1
  %556 = load ptr, ptr %555, align 8, !tbaa !25
  store ptr %556, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %557

557:                                              ; preds = %552, %541
  %558 = load ptr, ptr %20, align 8, !tbaa !9
  %559 = getelementptr inbounds %struct.buf, ptr %558, i32 0, i32 0
  %560 = getelementptr inbounds %struct.anon.7, ptr %559, i32 0, i32 0
  %561 = load ptr, ptr %560, align 8, !tbaa !23
  %562 = load ptr, ptr %20, align 8, !tbaa !9
  %563 = getelementptr inbounds %struct.buf, ptr %562, i32 0, i32 0
  %564 = getelementptr inbounds %struct.anon.7, ptr %563, i32 0, i32 1
  %565 = load ptr, ptr %564, align 8, !tbaa !25
  store ptr %561, ptr %565, align 8, !tbaa !9
  br label %566

566:                                              ; preds = %557
  br label %567

567:                                              ; preds = %566
  br label %568

568:                                              ; preds = %567, %503
  %569 = load ptr, ptr %29, align 8, !tbaa !9
  store ptr %569, ptr %20, align 8, !tbaa !9
  br label %491, !llvm.loop !31

570:                                              ; preds = %491
  br label %571

571:                                              ; preds = %570
  %572 = load ptr, ptr %28, align 8, !tbaa !9
  %573 = getelementptr inbounds %struct.buf, ptr %572, i32 0, i32 0
  %574 = getelementptr inbounds %struct.anon.7, ptr %573, i32 0, i32 0
  store ptr null, ptr %574, align 8, !tbaa !23
  %575 = load ptr, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  %576 = load ptr, ptr %28, align 8, !tbaa !9
  %577 = getelementptr inbounds %struct.buf, ptr %576, i32 0, i32 0
  %578 = getelementptr inbounds %struct.anon.7, ptr %577, i32 0, i32 1
  store ptr %575, ptr %578, align 8, !tbaa !25
  %579 = load ptr, ptr %28, align 8, !tbaa !9
  %580 = load ptr, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  store ptr %579, ptr %580, align 8, !tbaa !9
  %581 = load ptr, ptr %28, align 8, !tbaa !9
  %582 = getelementptr inbounds %struct.buf, ptr %581, i32 0, i32 0
  %583 = getelementptr inbounds %struct.anon.7, ptr %582, i32 0, i32 0
  store ptr %583, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %584

584:                                              ; preds = %571
  br label %585

585:                                              ; preds = %584
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #11
  br label %586

586:                                              ; preds = %585, %484, %481, %478, %475, %472
  br label %587

587:                                              ; preds = %586, %469
  br label %588

588:                                              ; preds = %799, %587
  %589 = load ptr, ptr @bufs, align 8, !tbaa !28
  store ptr %589, ptr %20, align 8, !tbaa !9
  %590 = load ptr, ptr %20, align 8, !tbaa !9
  %591 = icmp ne ptr %590, null
  br i1 %591, label %592, label %800

592:                                              ; preds = %588
  br label %593

593:                                              ; preds = %592
  %594 = load ptr, ptr %20, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct.buf, ptr %594, i32 0, i32 0
  %596 = getelementptr inbounds %struct.anon.7, ptr %595, i32 0, i32 0
  %597 = load ptr, ptr %596, align 8, !tbaa !23
  %598 = icmp ne ptr %597, null
  br i1 %598, label %599, label %610

599:                                              ; preds = %593
  %600 = load ptr, ptr %20, align 8, !tbaa !9
  %601 = getelementptr inbounds %struct.buf, ptr %600, i32 0, i32 0
  %602 = getelementptr inbounds %struct.anon.7, ptr %601, i32 0, i32 1
  %603 = load ptr, ptr %602, align 8, !tbaa !25
  %604 = load ptr, ptr %20, align 8, !tbaa !9
  %605 = getelementptr inbounds %struct.buf, ptr %604, i32 0, i32 0
  %606 = getelementptr inbounds %struct.anon.7, ptr %605, i32 0, i32 0
  %607 = load ptr, ptr %606, align 8, !tbaa !23
  %608 = getelementptr inbounds %struct.buf, ptr %607, i32 0, i32 0
  %609 = getelementptr inbounds %struct.anon.7, ptr %608, i32 0, i32 1
  store ptr %603, ptr %609, align 8, !tbaa !25
  br label %615

610:                                              ; preds = %593
  %611 = load ptr, ptr %20, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.buf, ptr %611, i32 0, i32 0
  %613 = getelementptr inbounds %struct.anon.7, ptr %612, i32 0, i32 1
  %614 = load ptr, ptr %613, align 8, !tbaa !25
  store ptr %614, ptr getelementptr inbounds (%struct.anon, ptr @bufs, i32 0, i32 1), align 8, !tbaa !24
  br label %615

615:                                              ; preds = %610, %599
  %616 = load ptr, ptr %20, align 8, !tbaa !9
  %617 = getelementptr inbounds %struct.buf, ptr %616, i32 0, i32 0
  %618 = getelementptr inbounds %struct.anon.7, ptr %617, i32 0, i32 0
  %619 = load ptr, ptr %618, align 8, !tbaa !23
  %620 = load ptr, ptr %20, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.buf, ptr %620, i32 0, i32 0
  %622 = getelementptr inbounds %struct.anon.7, ptr %621, i32 0, i32 1
  %623 = load ptr, ptr %622, align 8, !tbaa !25
  store ptr %619, ptr %623, align 8, !tbaa !9
  br label %624

624:                                              ; preds = %615
  br label %625

625:                                              ; preds = %624
  %626 = load ptr, ptr %20, align 8, !tbaa !9
  %627 = getelementptr inbounds %struct.buf, ptr %626, i32 0, i32 2
  %628 = load i64, ptr %627, align 8, !tbaa !20
  %629 = icmp eq i64 %628, 0
  br i1 %629, label %630, label %664

630:                                              ; preds = %625
  %631 = load ptr, ptr %20, align 8, !tbaa !9
  %632 = getelementptr inbounds %struct.buf, ptr %631, i32 0, i32 11
  %633 = getelementptr inbounds [0 x i8], ptr %632, i64 0, i64 0
  %634 = load ptr, ptr %20, align 8, !tbaa !9
  %635 = getelementptr inbounds %struct.buf, ptr %634, i32 0, i32 3
  %636 = load i64, ptr %635, align 8, !tbaa !21
  %637 = load ptr, ptr %20, align 8, !tbaa !9
  %638 = getelementptr inbounds %struct.buf, ptr %637, i32 0, i32 4
  %639 = load i64, ptr %638, align 8, !tbaa !30
  %640 = sub i64 %636, %639
  %641 = call i32 @lsqpack_dec_enc_in(ptr noundef %11, ptr noundef %633, i64 noundef %640)
  store i32 %641, ptr %15, align 4, !tbaa !5
  %642 = load i32, ptr %15, align 4, !tbaa !5
  %643 = icmp ne i32 %642, 0
  br i1 %643, label %644, label %657

644:                                              ; preds = %630
  %645 = load ptr, ptr %20, align 8, !tbaa !9
  %646 = getelementptr inbounds %struct.buf, ptr %645, i32 0, i32 1
  %647 = load ptr, ptr %646, align 8, !tbaa !15
  %648 = call ptr @lsqpack_dec_get_err_info(ptr noundef %647)
  store ptr %648, ptr %12, align 8, !tbaa !9
  %649 = load ptr, ptr @stderr, align 8, !tbaa !9
  %650 = load ptr, ptr %12, align 8, !tbaa !9
  %651 = getelementptr inbounds %struct.lsqpack_dec_err, ptr %650, i32 0, i32 2
  %652 = load i64, ptr %651, align 8, !tbaa !32
  %653 = load ptr, ptr %12, align 8, !tbaa !9
  %654 = getelementptr inbounds %struct.lsqpack_dec_err, ptr %653, i32 0, i32 1
  %655 = load i32, ptr %654, align 4, !tbaa !34
  %656 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %649, ptr noundef @.str.21, i64 noundef %652, i32 noundef %655) #11
  call void @exit(i32 noundef 1) #14
  unreachable

657:                                              ; preds = %630
  %658 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %659 = icmp ne i32 %658, 0
  br i1 %659, label %660, label %662

660:                                              ; preds = %657
  %661 = load ptr, ptr @stderr, align 8, !tbaa !9
  call void @lsqpack_dec_print_table(ptr noundef %11, ptr noundef %661)
  br label %662

662:                                              ; preds = %660, %657
  %663 = load ptr, ptr %20, align 8, !tbaa !9
  call void @free(ptr noundef %663) #11
  br label %799

664:                                              ; preds = %625
  br label %665

665:                                              ; preds = %763, %664
  %666 = load ptr, ptr %20, align 8, !tbaa !9
  %667 = getelementptr inbounds %struct.buf, ptr %666, i32 0, i32 11
  %668 = getelementptr inbounds [0 x i8], ptr %667, i64 0, i64 0
  %669 = load ptr, ptr %20, align 8, !tbaa !9
  %670 = getelementptr inbounds %struct.buf, ptr %669, i32 0, i32 4
  %671 = load i64, ptr %670, align 8, !tbaa !30
  %672 = getelementptr inbounds i8, ptr %668, i64 %671
  store ptr %672, ptr %13, align 8, !tbaa !9
  %673 = load ptr, ptr %20, align 8, !tbaa !9
  %674 = getelementptr inbounds %struct.buf, ptr %673, i32 0, i32 4
  %675 = load i64, ptr %674, align 8, !tbaa !30
  %676 = icmp eq i64 %675, 0
  br i1 %676, label %677, label %699

677:                                              ; preds = %665
  %678 = load ptr, ptr %20, align 8, !tbaa !9
  %679 = load ptr, ptr %20, align 8, !tbaa !9
  %680 = getelementptr inbounds %struct.buf, ptr %679, i32 0, i32 2
  %681 = load i64, ptr %680, align 8, !tbaa !20
  %682 = load ptr, ptr %20, align 8, !tbaa !9
  %683 = getelementptr inbounds %struct.buf, ptr %682, i32 0, i32 3
  %684 = load i64, ptr %683, align 8, !tbaa !21
  %685 = load i64, ptr @s_max_read_size, align 8, !tbaa !11
  %686 = load ptr, ptr %20, align 8, !tbaa !9
  %687 = getelementptr inbounds %struct.buf, ptr %686, i32 0, i32 3
  %688 = load i64, ptr %687, align 8, !tbaa !21
  %689 = icmp ult i64 %685, %688
  br i1 %689, label %690, label %692

690:                                              ; preds = %677
  %691 = load i64, ptr @s_max_read_size, align 8, !tbaa !11
  br label %696

692:                                              ; preds = %677
  %693 = load ptr, ptr %20, align 8, !tbaa !9
  %694 = getelementptr inbounds %struct.buf, ptr %693, i32 0, i32 3
  %695 = load i64, ptr %694, align 8, !tbaa !21
  br label %696

696:                                              ; preds = %692, %690
  %697 = phi i64 [ %691, %690 ], [ %695, %692 ]
  %698 = call i32 @lsqpack_dec_header_in(ptr noundef %11, ptr noundef %678, i64 noundef %681, i64 noundef %684, ptr noundef %13, i64 noundef %697, ptr noundef null, ptr noundef null)
  store i32 %698, ptr %24, align 4, !tbaa !5
  br label %726

699:                                              ; preds = %665
  %700 = load ptr, ptr %20, align 8, !tbaa !9
  %701 = getelementptr inbounds %struct.buf, ptr %700, i32 0, i32 1
  %702 = load ptr, ptr %701, align 8, !tbaa !15
  %703 = load ptr, ptr %20, align 8, !tbaa !9
  %704 = load i64, ptr @s_max_read_size, align 8, !tbaa !11
  %705 = load ptr, ptr %20, align 8, !tbaa !9
  %706 = getelementptr inbounds %struct.buf, ptr %705, i32 0, i32 3
  %707 = load i64, ptr %706, align 8, !tbaa !21
  %708 = load ptr, ptr %20, align 8, !tbaa !9
  %709 = getelementptr inbounds %struct.buf, ptr %708, i32 0, i32 4
  %710 = load i64, ptr %709, align 8, !tbaa !30
  %711 = sub i64 %707, %710
  %712 = icmp ult i64 %704, %711
  br i1 %712, label %713, label %715

713:                                              ; preds = %699
  %714 = load i64, ptr @s_max_read_size, align 8, !tbaa !11
  br label %723

715:                                              ; preds = %699
  %716 = load ptr, ptr %20, align 8, !tbaa !9
  %717 = getelementptr inbounds %struct.buf, ptr %716, i32 0, i32 3
  %718 = load i64, ptr %717, align 8, !tbaa !21
  %719 = load ptr, ptr %20, align 8, !tbaa !9
  %720 = getelementptr inbounds %struct.buf, ptr %719, i32 0, i32 4
  %721 = load i64, ptr %720, align 8, !tbaa !30
  %722 = sub i64 %718, %721
  br label %723

723:                                              ; preds = %715, %713
  %724 = phi i64 [ %714, %713 ], [ %722, %715 ]
  %725 = call i32 @lsqpack_dec_header_read(ptr noundef %702, ptr noundef %703, ptr noundef %13, i64 noundef %724, ptr noundef null, ptr noundef null)
  store i32 %725, ptr %24, align 4, !tbaa !5
  br label %726

726:                                              ; preds = %723, %696
  %727 = load i32, ptr %24, align 4, !tbaa !5
  switch i32 %727, label %775 [
    i32 0, label %728
    i32 1, label %751
    i32 2, label %763
  ]

728:                                              ; preds = %726
  %729 = load ptr, ptr %13, align 8, !tbaa !9
  %730 = load ptr, ptr %20, align 8, !tbaa !9
  %731 = getelementptr inbounds %struct.buf, ptr %730, i32 0, i32 11
  %732 = getelementptr inbounds [0 x i8], ptr %731, i64 0, i64 0
  %733 = load ptr, ptr %20, align 8, !tbaa !9
  %734 = getelementptr inbounds %struct.buf, ptr %733, i32 0, i32 3
  %735 = load i64, ptr %734, align 8, !tbaa !21
  %736 = getelementptr inbounds i8, ptr %732, i64 %735
  %737 = icmp eq ptr %729, %736
  br i1 %737, label %738, label %739

738:                                              ; preds = %728
  br label %740

739:                                              ; preds = %728
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.15, i32 noundef 674, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

740:                                              ; preds = %738
  %741 = load ptr, ptr %20, align 8, !tbaa !9
  call void @header_block_done(ptr noundef %741)
  %742 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %743 = icmp ne i32 %742, 0
  br i1 %743, label %744, label %749

744:                                              ; preds = %740
  %745 = load ptr, ptr @stderr, align 8, !tbaa !9
  %746 = call float @lsqpack_dec_ratio(ptr noundef %11)
  %747 = fpext float %746 to double
  %748 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %745, ptr noundef @.str.16, double noundef %747) #11
  br label %749

749:                                              ; preds = %744, %740
  %750 = load ptr, ptr %20, align 8, !tbaa !9
  call void @free(ptr noundef %750) #11
  br label %798

751:                                              ; preds = %726
  %752 = load ptr, ptr %13, align 8, !tbaa !9
  %753 = load ptr, ptr %20, align 8, !tbaa !9
  %754 = getelementptr inbounds %struct.buf, ptr %753, i32 0, i32 11
  %755 = getelementptr inbounds [0 x i8], ptr %754, i64 0, i64 0
  %756 = ptrtoint ptr %752 to i64
  %757 = ptrtoint ptr %755 to i64
  %758 = sub i64 %756, %757
  %759 = trunc i64 %758 to i32
  %760 = zext i32 %759 to i64
  %761 = load ptr, ptr %20, align 8, !tbaa !9
  %762 = getelementptr inbounds %struct.buf, ptr %761, i32 0, i32 4
  store i64 %760, ptr %762, align 8, !tbaa !30
  br label %798

763:                                              ; preds = %726
  %764 = load ptr, ptr %13, align 8, !tbaa !9
  %765 = load ptr, ptr %20, align 8, !tbaa !9
  %766 = getelementptr inbounds %struct.buf, ptr %765, i32 0, i32 11
  %767 = getelementptr inbounds [0 x i8], ptr %766, i64 0, i64 0
  %768 = ptrtoint ptr %764 to i64
  %769 = ptrtoint ptr %767 to i64
  %770 = sub i64 %768, %769
  %771 = trunc i64 %770 to i32
  %772 = zext i32 %771 to i64
  %773 = load ptr, ptr %20, align 8, !tbaa !9
  %774 = getelementptr inbounds %struct.buf, ptr %773, i32 0, i32 4
  store i64 %772, ptr %774, align 8, !tbaa !30
  br label %665

775:                                              ; preds = %726
  %776 = load i32, ptr %24, align 4, !tbaa !5
  %777 = icmp eq i32 %776, 3
  br i1 %777, label %778, label %779

778:                                              ; preds = %775
  br label %780

779:                                              ; preds = %775
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.15, i32 noundef 688, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

780:                                              ; preds = %778
  %781 = load ptr, ptr @stderr, align 8, !tbaa !9
  %782 = load ptr, ptr %20, align 8, !tbaa !9
  %783 = getelementptr inbounds %struct.buf, ptr %782, i32 0, i32 2
  %784 = load i64, ptr %783, align 8, !tbaa !20
  %785 = load ptr, ptr %20, align 8, !tbaa !9
  %786 = getelementptr inbounds %struct.buf, ptr %785, i32 0, i32 4
  %787 = load i64, ptr %786, align 8, !tbaa !30
  %788 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %781, ptr noundef @.str.22, i64 noundef %784, i64 noundef %787) #11
  %789 = call ptr @lsqpack_dec_get_err_info(ptr noundef %11)
  store ptr %789, ptr %12, align 8, !tbaa !9
  %790 = load ptr, ptr @stderr, align 8, !tbaa !9
  %791 = load ptr, ptr %12, align 8, !tbaa !9
  %792 = getelementptr inbounds %struct.lsqpack_dec_err, ptr %791, i32 0, i32 2
  %793 = load i64, ptr %792, align 8, !tbaa !32
  %794 = load ptr, ptr %12, align 8, !tbaa !9
  %795 = getelementptr inbounds %struct.lsqpack_dec_err, ptr %794, i32 0, i32 1
  %796 = load i32, ptr %795, align 4, !tbaa !34
  %797 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %790, ptr noundef @.str.21, i64 noundef %793, i32 noundef %796) #11
  call void @exit(i32 noundef 1) #14
  unreachable

798:                                              ; preds = %751, %749
  br label %799

799:                                              ; preds = %798, %662
  br label %588, !llvm.loop !35

800:                                              ; preds = %588
  %801 = load ptr, ptr @bufs, align 8, !tbaa !28
  %802 = icmp eq ptr %801, null
  br i1 %802, label %806, label %803

803:                                              ; preds = %800
  %804 = load ptr, ptr @stderr, align 8, !tbaa !9
  %805 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %804, ptr noundef @.str.23) #11
  call void @exit(i32 noundef 1) #14
  unreachable

806:                                              ; preds = %800
  %807 = load i32, ptr @s_verbose, align 4, !tbaa !5
  %808 = icmp ne i32 %807, 0
  br i1 %808, label %809, label %811

809:                                              ; preds = %806
  %810 = load ptr, ptr @stderr, align 8, !tbaa !9
  call void @lsqpack_dec_print_table(ptr noundef %11, ptr noundef %810)
  br label %811

811:                                              ; preds = %809, %806
  call void @lsqpack_dec_cleanup(ptr noundef %11)
  %812 = load ptr, ptr @bufs, align 8, !tbaa !28
  %813 = icmp eq ptr %812, null
  br i1 %813, label %814, label %815

814:                                              ; preds = %811
  br label %816

815:                                              ; preds = %811
  call void @__assert_fail(ptr noundef @.str.24, ptr noundef @.str.15, i32 noundef 713, ptr noundef @__PRETTY_FUNCTION__.main) #14
  unreachable

816:                                              ; preds = %814
  %817 = load ptr, ptr @s_out, align 8, !tbaa !9
  %818 = icmp ne ptr %817, null
  br i1 %818, label %819, label %822

819:                                              ; preds = %816
  %820 = load ptr, ptr @s_out, align 8, !tbaa !9
  %821 = call i32 @fclose(ptr noundef %820)
  br label %822

822:                                              ; preds = %819, %816
  call void @exit(i32 noundef 0) #14
  unreachable

823:                                              ; preds = %210, %168, %153
  %824 = load i64, ptr %14, align 8, !tbaa !11
  %825 = icmp slt i64 %824, 0
  br i1 %825, label %826, label %827

826:                                              ; preds = %823
  call void @perror(ptr noundef @.str.25)
  br label %838

827:                                              ; preds = %823
  %828 = load i64, ptr %14, align 8, !tbaa !11
  %829 = icmp eq i64 %828, 0
  br i1 %829, label %830, label %833

830:                                              ; preds = %827
  %831 = load ptr, ptr @stderr, align 8, !tbaa !9
  %832 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %831, ptr noundef @.str.26) #11
  br label %837

833:                                              ; preds = %827
  %834 = load ptr, ptr @stderr, align 8, !tbaa !9
  %835 = load i64, ptr %14, align 8, !tbaa !11
  %836 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %834, ptr noundef @.str.27, i64 noundef %835) #11
  br label %837

837:                                              ; preds = %833, %830
  br label %838

838:                                              ; preds = %837, %826
  call void @exit(i32 noundef 1) #14
  unreachable
}

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

; Function Attrs: nounwind
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) #2

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

declare noalias ptr @fopen(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #2

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #5

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #7

; Function Attrs: nounwind uwtable
declare hidden void @usage(ptr noundef) #0

declare void @lsqpack_dec_init(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #4

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @__bswap_64(i64 noundef) #8

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @__bswap_32(i32 noundef) #8

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

declare void @perror(ptr noundef) #4

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

declare i32 @fclose(ptr noundef) #4

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

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

; Function Attrs: nounwind
declare i32 @__isoc99_sscanf(ptr noundef, ptr noundef, ...) #2

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

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

; Function Attrs: nounwind uwtable
declare hidden void @header_block_done(ptr noundef) #0

declare float @lsqpack_dec_ratio(ptr noundef) #4

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

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

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

declare ptr @lsqpack_dec_get_err_info(ptr noundef) #4

declare void @lsqpack_dec_print_table(ptr noundef, ptr noundef) #4

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

declare void @lsqpack_dec_cleanup(ptr noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !10, i64 16}
!16 = !{!"buf", !17, i64 0, !10, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !18, i64 56, !6, i64 96, !6, i64 100, !6, i64 104, !7, i64 108, !7, i64 4204}
!17 = !{!"", !10, i64 0, !10, i64 8}
!18 = !{!"lsxpack_header", !10, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !19, i64 24, !19, i64 26, !19, i64 28, !7, i64 30, !7, i64 31, !7, i64 32, !6, i64 33, !7, i64 34, !7, i64 35}
!19 = !{!"short", !7, i64 0}
!20 = !{!16, !12, i64 24}
!21 = !{!16, !12, i64 32}
!22 = !{!16, !12, i64 48}
!23 = !{!16, !10, i64 0}
!24 = !{!17, !10, i64 8}
!25 = !{!16, !10, i64 8}
!26 = !{!7, !7, i64 0}
!27 = distinct !{!27, !14}
!28 = !{!17, !10, i64 0}
!29 = distinct !{!29, !14}
!30 = !{!16, !12, i64 40}
!31 = distinct !{!31, !14}
!32 = !{!33, !12, i64 8}
!33 = !{!"lsqpack_dec_err", !6, i64 0, !6, i64 4, !12, i64 8, !12, i64 16}
!34 = !{!33, !6, i64 4}
!35 = distinct !{!35, !14}


; 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.anon = type { ptr, ptr }
%struct.lsqpack_dec_hset_if = type { ptr, ptr, ptr }
%struct.lsqpack_dec = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, %struct.lsqpack_ringbuf, %struct.anon.0, [8 x %struct.anon.1], i32, float, %struct.anon.2, %struct.lsqpack_dec_err }
%struct.lsqpack_ringbuf = type { i32, i32, i32, ptr }
%struct.anon.0 = type { ptr, ptr }
%struct.anon.1 = type { ptr, ptr }
%struct.anon.2 = type { i32, %union.anon }
%union.anon = type { %struct.anon.3 }
%struct.anon.3 = type { %struct.lsqpack_dec_int_state, %struct.lsqpack_huff_decode_state, i32, i32, ptr, ptr, ptr, i32, i32, i32, i32, i8, i8 }
%struct.lsqpack_dec_int_state = type { i32, i32, i32, i64 }
%struct.lsqpack_huff_decode_state = type { i32, %struct.lsqpack_decode_status }
%struct.lsqpack_decode_status = type { i8, i8 }
%struct.lsqpack_dec_err = type { i32, i32, i64, i64 }

@bufs = external dso_local local_unnamed_addr global %struct.anon, align 8
@stdin = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [19 x i8], align 1
@optarg = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@s_out = external hidden local_unnamed_addr global ptr, align 8
@.str.5 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [2 x i8], align 1
@s_max_read_size = external hidden local_unnamed_addr global i64, align 8
@s_verbose = external hidden local_unnamed_addr global i32, align 4
@s_dec_opts = external hidden local_unnamed_addr global i32, align 4
@s_check_unset_qpack_idx = external hidden local_unnamed_addr global i32, align 4
@stdout = external local_unnamed_addr global ptr, align 8
@hset_if = external hidden constant %struct.lsqpack_dec_hset_if, align 8
@.str.7 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [29 x i8], align 1

; Function Attrs: noreturn nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca %struct.lsqpack_dec, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca [256 x i8], align 16
  %8 = alloca [256 x i8], align 16
  %9 = load ptr, ptr @stdin, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 352, ptr nonnull %3) #15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #15
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #15
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #15
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %7) #15
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #15
  br label %10

10:                                               ; preds = %.backedge570, %2
  %.0175 = phi i32 [ 0, %2 ], [ %.0175.be, %.backedge570 ]
  %.0170 = phi i32 [ 0, %2 ], [ %.0170.be, %.backedge570 ]
  %.0168 = phi ptr [ null, %2 ], [ %.0168.be, %.backedge570 ]
  %.0165 = phi i32 [ 1, %2 ], [ %.0165.be, %.backedge570 ]
  %.0 = phi ptr [ %9, %2 ], [ %.0.be, %.backedge570 ]
  %11 = tail call i32 @getopt(i32 noundef %0, ptr noundef %1, ptr noundef nonnull @.str) #15
  switch i32 %11, label %75 [
    i32 -1, label %76
    i32 105, label %12
    i32 111, label %24
    i32 114, label %36
    i32 115, label %51
    i32 116, label %54
    i32 109, label %57
    i32 104, label %61
    i32 118, label %63
    i32 83, label %.backedge570
    i32 72, label %66
    i32 81, label %74
  ]

.backedge570:                                     ; preds = %10, %70, %72, %40, %42, %24, %27, %12, %15, %74, %63, %57, %54, %51
  %.0175.be = phi i32 [ %.0175, %74 ], [ %.0175, %70 ], [ %.0175, %72 ], [ %.0175, %63 ], [ %.0175, %57 ], [ %.0175, %54 ], [ %53, %51 ], [ %.0175, %40 ], [ %.0175, %42 ], [ %.0175, %27 ], [ %.0175, %24 ], [ %.0175, %15 ], [ %.0175, %12 ], [ %.0175, %10 ]
  %.0170.be = phi i32 [ %.0170, %74 ], [ %.0170, %70 ], [ %.0170, %72 ], [ %.0170, %63 ], [ %.0170, %57 ], [ %56, %54 ], [ %.0170, %51 ], [ %.0170, %40 ], [ %.0170, %42 ], [ %.0170, %27 ], [ %.0170, %24 ], [ %.0170, %15 ], [ %.0170, %12 ], [ %.0170, %10 ]
  %.0168.be = phi ptr [ %.0168, %74 ], [ %.0168, %70 ], [ %.0168, %72 ], [ %.0168, %63 ], [ %.0168, %57 ], [ %.0168, %54 ], [ %.0168, %51 ], [ %41, %40 ], [ %43, %42 ], [ %.0168, %27 ], [ %.0168, %24 ], [ %.0168, %15 ], [ %.0168, %12 ], [ %.0168, %10 ]
  %.0165.be = phi i32 [ %.0165, %74 ], [ %.0165, %70 ], [ %.0165, %72 ], [ %.0165, %63 ], [ %.0165, %57 ], [ %.0165, %54 ], [ %.0165, %51 ], [ %.0165, %40 ], [ %.0165, %42 ], [ %.0165, %27 ], [ %.0165, %24 ], [ %.0165, %15 ], [ %.0165, %12 ], [ 0, %10 ]
  %.0.be = phi ptr [ %.0, %74 ], [ %.0, %70 ], [ %.0, %72 ], [ %.0, %63 ], [ %.0, %57 ], [ %.0, %54 ], [ %.0, %51 ], [ %.0, %40 ], [ %.0, %42 ], [ %.0, %27 ], [ %.0, %24 ], [ %16, %15 ], [ %.0, %12 ], [ %.0, %10 ]
  br label %10, !llvm.loop !9

12:                                               ; preds = %10
  %13 = load ptr, ptr @optarg, align 8, !tbaa !5
  %14 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %13, ptr noundef nonnull dereferenceable(1) @.str.1) #16
  %.not231 = icmp eq i32 %14, 0
  br i1 %.not231, label %.backedge570, label %15

15:                                               ; preds = %12
  %16 = tail call noalias ptr @fopen(ptr noundef %13, ptr noundef nonnull @.str.2)
  %.not232 = icmp eq ptr %16, null
  br i1 %.not232, label %17, label %.backedge570

17:                                               ; preds = %15
  %18 = load ptr, ptr @stderr, align 8, !tbaa !5
  %19 = load ptr, ptr @optarg, align 8, !tbaa !5
  %20 = tail call ptr @__errno_location() #17
  %21 = load i32, ptr %20, align 4, !tbaa !11
  %22 = tail call ptr @strerror(i32 noundef %21) #15
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.3, ptr noundef %19, ptr noundef %22) #18
  tail call void @exit(i32 noundef 1) #19
  unreachable

24:                                               ; preds = %10
  %25 = load ptr, ptr @optarg, align 8, !tbaa !5
  %26 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %25, ptr noundef nonnull dereferenceable(1) @.str.1) #16
  %.not229 = icmp eq i32 %26, 0
  br i1 %.not229, label %.backedge570, label %27

27:                                               ; preds = %24
  %28 = tail call noalias ptr @fopen(ptr noundef %25, ptr noundef nonnull @.str.4)
  store ptr %28, ptr @s_out, align 8, !tbaa !5
  %.not230 = icmp eq ptr %28, null
  br i1 %.not230, label %29, label %.backedge570

29:                                               ; preds = %27
  %30 = load ptr, ptr @stderr, align 8, !tbaa !5
  %31 = load ptr, ptr @optarg, align 8, !tbaa !5
  %32 = tail call ptr @__errno_location() #17
  %33 = load i32, ptr %32, align 4, !tbaa !11
  %34 = tail call ptr @strerror(i32 noundef %33) #15
  %35 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %30, ptr noundef nonnull @.str.5, ptr noundef %31, ptr noundef %34) #18
  tail call void @exit(i32 noundef 1) #19
  unreachable

36:                                               ; preds = %10
  %37 = load ptr, ptr @optarg, align 8, !tbaa !5
  %38 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %37, ptr noundef nonnull dereferenceable(1) @.str.1) #16
  %39 = icmp eq i32 %38, 0
  br i1 %39, label %40, label %42

40:                                               ; preds = %36
  %41 = load ptr, ptr @stdin, align 8, !tbaa !5
  br label %.backedge570

42:                                               ; preds = %36
  %43 = tail call noalias ptr @fopen(ptr noundef %37, ptr noundef nonnull @.str.6)
  %.not228 = icmp eq ptr %43, null
  br i1 %.not228, label %44, label %.backedge570

44:                                               ; preds = %42
  %45 = load ptr, ptr @stderr, align 8, !tbaa !5
  %46 = load ptr, ptr @optarg, align 8, !tbaa !5
  %47 = tail call ptr @__errno_location() #17
  %48 = load i32, ptr %47, align 4, !tbaa !11
  %49 = tail call ptr @strerror(i32 noundef %48) #15
  %50 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %45, ptr noundef nonnull @.str.3, ptr noundef %46, ptr noundef %49) #18
  tail call void @exit(i32 noundef 1) #19
  unreachable

51:                                               ; preds = %10
  %52 = load ptr, ptr @optarg, align 8, !tbaa !5
  %53 = tail call i32 @atoi(ptr nocapture noundef %52) #16
  br label %.backedge570

54:                                               ; preds = %10
  %55 = load ptr, ptr @optarg, align 8, !tbaa !5
  %56 = tail call i32 @atoi(ptr nocapture noundef %55) #16
  br label %.backedge570

57:                                               ; preds = %10
  %58 = load ptr, ptr @optarg, align 8, !tbaa !5
  %59 = tail call i32 @atoi(ptr nocapture noundef %58) #16
  %60 = sext i32 %59 to i64
  store i64 %60, ptr @s_max_read_size, align 8, !tbaa !13
  br label %.backedge570

61:                                               ; preds = %10
  %62 = load ptr, ptr %1, align 8, !tbaa !5
  tail call void @usage(ptr noundef %62)
  tail call void @exit(i32 noundef 0) #19
  unreachable

63:                                               ; preds = %10
  %64 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %65 = add nsw i32 %64, 1
  store i32 %65, ptr @s_verbose, align 4, !tbaa !11
  br label %.backedge570

66:                                               ; preds = %10
  %67 = load ptr, ptr @optarg, align 8, !tbaa !5
  %68 = tail call i32 @atoi(ptr nocapture noundef %67) #16
  %.not227 = icmp eq i32 %68, 0
  %69 = load i32, ptr @s_dec_opts, align 4, !tbaa !11
  br i1 %.not227, label %72, label %70

70:                                               ; preds = %66
  %71 = or i32 %69, 1
  store i32 %71, ptr @s_dec_opts, align 4, !tbaa !11
  br label %.backedge570

72:                                               ; preds = %66
  %73 = and i32 %69, -2
  store i32 %73, ptr @s_dec_opts, align 4, !tbaa !11
  br label %.backedge570

74:                                               ; preds = %10
  store i32 0, ptr @s_check_unset_qpack_idx, align 4, !tbaa !11
  br label %.backedge570

75:                                               ; preds = %10
  tail call void @exit(i32 noundef 1) #19
  unreachable

76:                                               ; preds = %10
  %77 = load ptr, ptr @s_out, align 8, !tbaa !5
  %.not202 = icmp eq ptr %77, null
  br i1 %.not202, label %78, label %80

78:                                               ; preds = %76
  %79 = load ptr, ptr @stdout, align 8, !tbaa !5
  store ptr %79, ptr @s_out, align 8, !tbaa !5
  br label %80

80:                                               ; preds = %78, %76
  %81 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %.not203 = icmp eq i32 %81, 0
  %82 = load ptr, ptr @stderr, align 8
  %83 = select i1 %.not203, ptr null, ptr %82
  %84 = load i32, ptr @s_dec_opts, align 4, !tbaa !11
  call void @lsqpack_dec_init(ptr noundef nonnull %3, ptr noundef %83, i32 noundef %.0170, i32 noundef %.0175, ptr noundef nonnull @hset_if, i32 noundef %84) #15
  br label %.backedge237

.backedge237:                                     ; preds = %.backedge237.backedge, %80
  %.0177 = phi i64 [ 0, %80 ], [ %.0177.be, %.backedge237.backedge ]
  %85 = call i64 @fread(ptr noundef nonnull %5, i64 noundef 1, i64 noundef 8, ptr noundef %.0)
  switch i64 %85, label %86 [
    i64 0, label %138
    i64 8, label %92
  ]

86:                                               ; preds = %.backedge237
  %87 = load ptr, ptr @stderr, align 8, !tbaa !5
  %88 = tail call ptr @__errno_location() #17
  %89 = load i32, ptr %88, align 4, !tbaa !11
  %90 = call ptr @strerror(i32 noundef %89) #15
  %91 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %87, ptr noundef nonnull @.str.7, i64 noundef 8, i64 noundef %.0177, ptr noundef %90) #18
  br label %350

92:                                               ; preds = %.backedge237
  %93 = call i64 @fread(ptr noundef nonnull %6, i64 noundef 1, i64 noundef 4, ptr noundef %.0)
  %.not205 = icmp eq i64 %93, 4
  br i1 %.not205, label %101, label %94

94:                                               ; preds = %92
  %95 = add i64 %.0177, 8
  %96 = load ptr, ptr @stderr, align 8, !tbaa !5
  %97 = tail call ptr @__errno_location() #17
  %98 = load i32, ptr %97, align 4, !tbaa !11
  %99 = call ptr @strerror(i32 noundef %98) #15
  %100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %96, ptr noundef nonnull @.str.8, i64 noundef 4, i64 noundef %95, ptr noundef %99) #18
  br label %350

101:                                              ; preds = %92
  %102 = add i64 %.0177, 12
  %103 = load i64, ptr %5, align 8, !tbaa !13
  %104 = call i64 @__bswap_64(i64 noundef %103)
  store i64 %104, ptr %5, align 8, !tbaa !13
  %105 = load i32, ptr %6, align 4, !tbaa !11
  %106 = call i32 @__bswap_32(i32 noundef %105)
  store i32 %106, ptr %6, align 4, !tbaa !11
  %107 = load i64, ptr %5, align 8, !tbaa !13
  %108 = icmp eq i64 %107, 0
  %109 = icmp eq i32 %106, 0
  %or.cond = select i1 %108, i1 %109, i1 false
  br i1 %or.cond, label %.backedge237.backedge, label %110

110:                                              ; preds = %101
  %111 = zext i32 %106 to i64
  %112 = add nuw nsw i64 %111, 4208
  %113 = call noalias ptr @malloc(i64 noundef %112) #20
  %.not206 = icmp eq ptr %113, null
  br i1 %.not206, label %114, label %115

114:                                              ; preds = %110
  call void @perror(ptr noundef nonnull @.str.9) #21
  call void @exit(i32 noundef 1) #19
  unreachable

115:                                              ; preds = %110
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(4208) %113, i8 0, i64 4208, i1 false)
  %116 = getelementptr inbounds i8, ptr %113, i64 4204
  %117 = call i64 @fread(ptr noundef nonnull %116, i64 noundef 1, i64 noundef %111, ptr noundef %.0)
  %118 = load i32, ptr %6, align 4, !tbaa !11
  %119 = zext i32 %118 to i64
  %.not207 = icmp eq i64 %117, %119
  br i1 %.not207, label %126, label %120

120:                                              ; preds = %115
  %121 = load ptr, ptr @stderr, align 8, !tbaa !5
  %122 = tail call ptr @__errno_location() #17
  %123 = load i32, ptr %122, align 4, !tbaa !11
  %124 = call ptr @strerror(i32 noundef %123) #15
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %121, ptr noundef nonnull @.str.10, i32 noundef %118, i64 noundef %102, ptr noundef %124) #18
  br label %350

126:                                              ; preds = %115
  %127 = getelementptr inbounds i8, ptr %113, i64 16
  store ptr %3, ptr %127, align 8, !tbaa !15
  %128 = load i64, ptr %5, align 8, !tbaa !13
  %129 = getelementptr inbounds i8, ptr %113, i64 24
  store i64 %128, ptr %129, align 8, !tbaa !20
  %130 = getelementptr inbounds i8, ptr %113, i64 32
  store i64 %117, ptr %130, align 8, !tbaa !21
  %131 = getelementptr inbounds i8, ptr %113, i64 48
  store i64 %.0177, ptr %131, align 8, !tbaa !22
  %132 = icmp eq i32 %118, 0
  br i1 %132, label %133, label %134

133:                                              ; preds = %126
  call void @exit(i32 noundef 1) #19
  unreachable

134:                                              ; preds = %126
  %135 = add i64 %117, %102
  store ptr null, ptr %113, align 8, !tbaa !23
  %136 = load ptr, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), align 8, !tbaa !24
  %137 = getelementptr inbounds i8, ptr %113, i64 8
  store ptr %136, ptr %137, align 8, !tbaa !25
  store ptr %113, ptr %136, align 8, !tbaa !5
  store ptr %113, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), align 8, !tbaa !24
  br label %.backedge237.backedge

.backedge237.backedge:                            ; preds = %134, %101
  %.0177.be = phi i64 [ %102, %101 ], [ %135, %134 ]
  br label %.backedge237

138:                                              ; preds = %.backedge237
  %139 = call i32 @fclose(ptr noundef %.0)
  %.not208 = icmp eq ptr %.0168, null
  br i1 %.not208, label %220, label %.preheader236

.preheader236:                                    ; preds = %138
  %140 = call ptr @fgets(ptr noundef nonnull %8, i32 noundef 256, ptr noundef nonnull %.0168)
  %.not214307 = icmp eq ptr %140, null
  br i1 %.not214307, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader236, %.backedge
  %141 = phi ptr [ %218, %.backedge ], [ %140, %.preheader236 ]
  %.0172308 = phi i32 [ %142, %.backedge ], [ 0, %.preheader236 ]
  %142 = add i32 %.0172308, 1
  %143 = call ptr @strchr(ptr noundef nonnull dereferenceable(1) %141, i32 noundef 10) #16
  %.not222 = icmp eq ptr %143, null
  br i1 %.not222, label %144, label %147

144:                                              ; preds = %.lr.ph
  %145 = load ptr, ptr @stderr, align 8, !tbaa !5
  %146 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %145, ptr noundef nonnull @.str.11, i32 noundef %142) #18
  call void @exit(i32 noundef 1) #19
  unreachable

147:                                              ; preds = %.lr.ph
  store i8 0, ptr %143, align 1, !tbaa !26
  %148 = load i8, ptr %141, align 1, !tbaa !26
  %149 = icmp eq i8 %148, 35
  br i1 %149, label %.backedge, label %150

150:                                              ; preds = %147
  %151 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %141, ptr noundef nonnull @.str.12, ptr noundef nonnull %7, ptr noundef nonnull %5, ptr noundef nonnull %6) #15
  %152 = icmp eq i32 %151, 3
  br i1 %152, label %.preheader235, label %211

.preheader235:                                    ; preds = %150
  %153 = load i64, ptr %5, align 8
  br label %154

154:                                              ; preds = %.preheader235, %155
  %.0173.in = phi ptr [ %.0173, %155 ], [ @bufs, %.preheader235 ]
  %.0173 = load ptr, ptr %.0173.in, align 8, !tbaa !27
  %.not223 = icmp eq ptr %.0173, null
  br i1 %.not223, label %.critedge, label %155

155:                                              ; preds = %154
  %156 = getelementptr inbounds i8, ptr %.0173, i64 24
  %157 = load i64, ptr %156, align 8, !tbaa !20
  %158 = icmp eq i64 %153, %157
  br i1 %158, label %161, label %154, !llvm.loop !28

.critedge:                                        ; preds = %154
  %159 = load ptr, ptr @stderr, align 8, !tbaa !5
  %160 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %159, ptr noundef nonnull @.str.13, i64 noundef %153, i32 noundef %142) #18
  call void @exit(i32 noundef 1) #19
  unreachable

161:                                              ; preds = %155
  %162 = getelementptr inbounds i8, ptr %.0173, i64 4204
  store ptr %162, ptr %4, align 8, !tbaa !5
  %163 = getelementptr inbounds i8, ptr %.0173, i64 32
  %164 = load i64, ptr %163, align 8, !tbaa !21
  %165 = call i32 @lsqpack_dec_header_in(ptr noundef nonnull %3, ptr noundef nonnull %.0173, i64 noundef %153, i64 noundef %164, ptr noundef nonnull %4, i64 noundef %164, ptr noundef null, ptr noundef null) #15
  switch i32 %165, label %206 [
    i32 0, label %166
    i32 1, label %184
    i32 2, label %197
    i32 3, label %207
  ]

166:                                              ; preds = %161
  %167 = load ptr, ptr %4, align 8, !tbaa !5
  %168 = load i64, ptr %163, align 8, !tbaa !21
  %169 = getelementptr inbounds i8, ptr %162, i64 %168
  %170 = icmp eq ptr %167, %169
  br i1 %170, label %172, label %171

171:                                              ; preds = %166
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, i32 noundef 588, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #19
  unreachable

172:                                              ; preds = %166
  call void @header_block_done(ptr noundef nonnull %.0173)
  %173 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %.not225 = icmp eq i32 %173, 0
  br i1 %.not225, label %179, label %174

174:                                              ; preds = %172
  %175 = load ptr, ptr @stderr, align 8, !tbaa !5
  %176 = call float @lsqpack_dec_ratio(ptr noundef nonnull %3) #15
  %177 = fpext float %176 to double
  %178 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef nonnull @.str.16, double noundef %177) #18
  br label %179

179:                                              ; preds = %172, %174
  %180 = load ptr, ptr %.0173, align 8, !tbaa !23
  %.not226 = icmp eq ptr %180, null
  %181 = getelementptr inbounds i8, ptr %.0173, i64 8
  %182 = load ptr, ptr %181, align 8, !tbaa !25
  %183 = getelementptr inbounds i8, ptr %180, i64 8
  %.sink = select i1 %.not226, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), ptr %183
  store ptr %182, ptr %.sink, align 8, !tbaa !24
  store ptr %180, ptr %182, align 8, !tbaa !5
  call void @free(ptr noundef nonnull %.0173) #15
  br label %.backedge

184:                                              ; preds = %161
  %185 = load ptr, ptr %4, align 8, !tbaa !5
  %186 = ptrtoint ptr %185 to i64
  %187 = ptrtoint ptr %162 to i64
  %188 = sub i64 %186, %187
  %189 = and i64 %188, 4294967295
  %190 = getelementptr inbounds i8, ptr %.0173, i64 40
  %191 = load i64, ptr %190, align 8, !tbaa !29
  %192 = add i64 %189, %191
  store i64 %192, ptr %190, align 8, !tbaa !29
  %193 = load ptr, ptr %.0173, align 8, !tbaa !23
  %.not224 = icmp eq ptr %193, null
  %194 = getelementptr inbounds i8, ptr %.0173, i64 8
  %195 = load ptr, ptr %194, align 8, !tbaa !25
  %196 = getelementptr inbounds i8, ptr %193, i64 8
  %.sink452 = select i1 %.not224, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), ptr %196
  store ptr %195, ptr %.sink452, align 8, !tbaa !24
  store ptr %193, ptr %195, align 8, !tbaa !5
  br label %.backedge

197:                                              ; preds = %161
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = ptrtoint ptr %198 to i64
  %200 = ptrtoint ptr %162 to i64
  %201 = sub i64 %199, %200
  %202 = and i64 %201, 4294967295
  %203 = getelementptr inbounds i8, ptr %.0173, i64 40
  %204 = load i64, ptr %203, align 8, !tbaa !29
  %205 = add i64 %202, %204
  store i64 %205, ptr %203, align 8, !tbaa !29
  br label %.backedge

206:                                              ; preds = %161
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.15, i32 noundef 604, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #19
  unreachable

207:                                              ; preds = %161
  %208 = load ptr, ptr @stderr, align 8, !tbaa !5
  %209 = load i64, ptr %5, align 8, !tbaa !13
  %210 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %208, ptr noundef nonnull @.str.18, i32 noundef %142, i64 noundef %209) #18
  call void @exit(i32 noundef 1) #19
  unreachable

211:                                              ; preds = %150
  %212 = call i32 (ptr, ptr, ...) @__isoc99_sscanf(ptr noundef nonnull %141, ptr noundef nonnull @.str.19, ptr noundef nonnull %7, ptr noundef nonnull %6) #15
  %213 = icmp eq i32 %212, 2
  br i1 %213, label %214, label %217

214:                                              ; preds = %211
  %215 = load i32, ptr %6, align 4, !tbaa !11
  %216 = zext i32 %215 to i64
  store i64 %216, ptr @s_max_read_size, align 8, !tbaa !13
  br label %.backedge

217:                                              ; preds = %211
  call void @perror(ptr noundef nonnull @.str.20) #21
  call void @exit(i32 noundef 1) #19
  unreachable

.backedge:                                        ; preds = %214, %197, %184, %179, %147
  %218 = call ptr @fgets(ptr noundef nonnull %8, i32 noundef 256, ptr noundef nonnull %.0168)
  %.not214 = icmp eq ptr %218, null
  br i1 %.not214, label %._crit_edge, label %.lr.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %.backedge, %.preheader236
  %219 = call i32 @fclose(ptr noundef nonnull %.0168)
  br label %thread-pre-split

220:                                              ; preds = %138
  %221 = icmp ne i32 %.0165, 0
  %222 = icmp ne i32 %.0175, 0
  %or.cond3 = select i1 %221, i1 %222, i1 false
  %223 = icmp ne i32 %.0170, 0
  %or.cond5 = select i1 %or.cond3, i1 %223, i1 false
  %224 = load ptr, ptr @bufs, align 8
  %225 = icmp ne ptr %224, null
  %or.cond7 = select i1 %or.cond5, i1 %225, i1 false
  br i1 %or.cond7, label %226, label %246

226:                                              ; preds = %220
  %227 = getelementptr inbounds i8, ptr %224, i64 24
  %228 = load i64, ptr %227, align 8, !tbaa !20
  %.not209 = icmp eq i64 %228, 0
  br i1 %.not209, label %thread-pre-split, label %.preheader234

.preheader234:                                    ; preds = %226, %242
  %.0163310 = phi ptr [ %.1164, %242 ], [ null, %226 ]
  %.1174309 = phi ptr [ %229, %242 ], [ %224, %226 ]
  %229 = load ptr, ptr %.1174309, align 8, !tbaa !23
  %230 = getelementptr inbounds i8, ptr %.1174309, i64 24
  %231 = load i64, ptr %230, align 8, !tbaa !20
  %.not211 = icmp eq i64 %231, 0
  br i1 %.not211, label %232, label %242

232:                                              ; preds = %.preheader234
  %.not212 = icmp eq ptr %.0163310, null
  br i1 %.not212, label %237, label %233

233:                                              ; preds = %232
  %234 = getelementptr inbounds i8, ptr %.1174309, i64 8
  %235 = load ptr, ptr %234, align 8, !tbaa !25
  %236 = getelementptr inbounds i8, ptr %.0163310, i64 8
  store ptr %235, ptr %236, align 8, !tbaa !25
  store ptr %.1174309, ptr %.0163310, align 8, !tbaa !23
  store ptr %.0163310, ptr %235, align 8, !tbaa !5
  store ptr %.0163310, ptr %234, align 8, !tbaa !25
  %.pre = load ptr, ptr %.1174309, align 8, !tbaa !23
  br label %237

237:                                              ; preds = %233, %232
  %238 = phi ptr [ %.pre, %233 ], [ %229, %232 ]
  %.not213 = icmp eq ptr %238, null
  %239 = getelementptr inbounds i8, ptr %.1174309, i64 8
  %240 = load ptr, ptr %239, align 8, !tbaa !25
  %241 = getelementptr inbounds i8, ptr %238, i64 8
  %.sink453 = select i1 %.not213, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), ptr %241
  store ptr %240, ptr %.sink453, align 8, !tbaa !24
  store ptr %238, ptr %240, align 8, !tbaa !5
  br label %242

242:                                              ; preds = %.preheader234, %237
  %.1164 = phi ptr [ %.0163310, %.preheader234 ], [ %.1174309, %237 ]
  %.not210 = icmp eq ptr %229, null
  br i1 %.not210, label %243, label %.preheader234, !llvm.loop !31

243:                                              ; preds = %242
  store ptr null, ptr %.1164, align 8, !tbaa !23
  %244 = load ptr, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), align 8, !tbaa !24
  %245 = getelementptr inbounds i8, ptr %.1164, i64 8
  store ptr %244, ptr %245, align 8, !tbaa !25
  store ptr %.1164, ptr %244, align 8, !tbaa !5
  store ptr %.1164, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), align 8, !tbaa !24
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %._crit_edge, %243, %226
  %.pr = load ptr, ptr @bufs, align 8, !tbaa !27
  br label %246

246:                                              ; preds = %thread-pre-split, %220
  %247 = phi ptr [ %.pr, %thread-pre-split ], [ %224, %220 ]
  %.not215311 = icmp eq ptr %247, null
  br i1 %.not215311, label %._crit_edge314, label %.lr.ph313

.lr.ph313:                                        ; preds = %246, %336
  %248 = phi ptr [ %337, %336 ], [ %247, %246 ]
  %249 = load ptr, ptr %248, align 8, !tbaa !23
  %.not218 = icmp eq ptr %249, null
  %250 = getelementptr inbounds i8, ptr %248, i64 8
  %251 = load ptr, ptr %250, align 8, !tbaa !25
  %252 = getelementptr inbounds i8, ptr %249, i64 8
  %.sink454 = select i1 %.not218, ptr getelementptr inbounds (i8, ptr @bufs, i64 8), ptr %252
  store ptr %251, ptr %.sink454, align 8, !tbaa !24
  store ptr %249, ptr %251, align 8, !tbaa !5
  %253 = getelementptr inbounds i8, ptr %248, i64 24
  %254 = load i64, ptr %253, align 8, !tbaa !20
  %255 = icmp eq i64 %254, 0
  %256 = getelementptr inbounds i8, ptr %248, i64 4204
  br i1 %255, label %261, label %.preheader

.preheader:                                       ; preds = %.lr.ph313
  %257 = getelementptr inbounds i8, ptr %248, i64 40
  %258 = getelementptr inbounds i8, ptr %248, i64 16
  %259 = getelementptr inbounds i8, ptr %248, i64 32
  %260 = ptrtoint ptr %256 to i64
  %.pre381 = load i64, ptr %257, align 8, !tbaa !29
  br label %283

261:                                              ; preds = %.lr.ph313
  %262 = getelementptr inbounds i8, ptr %248, i64 32
  %263 = load i64, ptr %262, align 8, !tbaa !21
  %264 = getelementptr inbounds i8, ptr %248, i64 40
  %265 = load i64, ptr %264, align 8, !tbaa !29
  %266 = sub i64 %263, %265
  %267 = call i32 @lsqpack_dec_enc_in(ptr noundef nonnull %3, ptr noundef nonnull %256, i64 noundef %266) #15
  %.not220 = icmp eq i32 %267, 0
  br i1 %.not220, label %278, label %268

268:                                              ; preds = %261
  %269 = getelementptr inbounds i8, ptr %248, i64 16
  %270 = load ptr, ptr %269, align 8, !tbaa !15
  %271 = call ptr @lsqpack_dec_get_err_info(ptr noundef %270) #15
  %272 = load ptr, ptr @stderr, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %271, i64 8
  %274 = load i64, ptr %273, align 8, !tbaa !32
  %275 = getelementptr inbounds i8, ptr %271, i64 4
  %276 = load i32, ptr %275, align 4, !tbaa !34
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %272, ptr noundef nonnull @.str.21, i64 noundef %274, i32 noundef %276) #18
  call void @exit(i32 noundef 1) #19
  unreachable

278:                                              ; preds = %261
  %279 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %.not221 = icmp eq i32 %279, 0
  br i1 %.not221, label %282, label %280

280:                                              ; preds = %278
  %281 = load ptr, ptr @stderr, align 8, !tbaa !5
  call void @lsqpack_dec_print_table(ptr noundef nonnull %3, ptr noundef %281) #15
  br label %282

282:                                              ; preds = %280, %278
  call void @free(ptr noundef nonnull %248) #15
  br label %336

283:                                              ; preds = %.preheader, %318
  %284 = phi i64 [ %.pre381, %.preheader ], [ %322, %318 ]
  %285 = getelementptr inbounds i8, ptr %256, i64 %284
  store ptr %285, ptr %4, align 8, !tbaa !5
  %286 = icmp eq i64 %284, 0
  br i1 %286, label %287, label %292

287:                                              ; preds = %283
  %288 = load i64, ptr %253, align 8, !tbaa !20
  %289 = load i64, ptr %259, align 8, !tbaa !21
  %290 = load i64, ptr @s_max_read_size, align 8, !tbaa !13
  %. = call i64 @llvm.umin.i64(i64 %290, i64 %289)
  %291 = call i32 @lsqpack_dec_header_in(ptr noundef nonnull %3, ptr noundef nonnull %248, i64 noundef %288, i64 noundef %289, ptr noundef nonnull %4, i64 noundef %., ptr noundef null, ptr noundef null) #15
  br label %298

292:                                              ; preds = %283
  %293 = load ptr, ptr %258, align 8, !tbaa !15
  %294 = load i64, ptr @s_max_read_size, align 8, !tbaa !13
  %295 = load i64, ptr %259, align 8, !tbaa !21
  %296 = sub i64 %295, %284
  %.233 = call i64 @llvm.umin.i64(i64 %294, i64 %296)
  %297 = call i32 @lsqpack_dec_header_read(ptr noundef %293, ptr noundef nonnull %248, ptr noundef nonnull %4, i64 noundef %.233, ptr noundef null, ptr noundef null) #15
  br label %298

298:                                              ; preds = %292, %287
  %.0167 = phi i32 [ %291, %287 ], [ %297, %292 ]
  switch i32 %.0167, label %323 [
    i32 0, label %299
    i32 1, label %313
    i32 2, label %318
    i32 3, label %324
  ]

299:                                              ; preds = %298
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = load i64, ptr %259, align 8, !tbaa !21
  %302 = getelementptr inbounds i8, ptr %256, i64 %301
  %303 = icmp eq ptr %300, %302
  br i1 %303, label %305, label %304

304:                                              ; preds = %299
  call void @__assert_fail(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.15, i32 noundef 674, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #19
  unreachable

305:                                              ; preds = %299
  call void @header_block_done(ptr noundef nonnull %248)
  %306 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %.not219 = icmp eq i32 %306, 0
  br i1 %.not219, label %312, label %307

307:                                              ; preds = %305
  %308 = load ptr, ptr @stderr, align 8, !tbaa !5
  %309 = call float @lsqpack_dec_ratio(ptr noundef nonnull %3) #15
  %310 = fpext float %309 to double
  %311 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %308, ptr noundef nonnull @.str.16, double noundef %310) #18
  br label %312

312:                                              ; preds = %307, %305
  call void @free(ptr noundef nonnull %248) #15
  br label %336

313:                                              ; preds = %298
  %314 = load ptr, ptr %4, align 8, !tbaa !5
  %315 = ptrtoint ptr %314 to i64
  %316 = sub i64 %315, %260
  %317 = and i64 %316, 4294967295
  store i64 %317, ptr %257, align 8, !tbaa !29
  br label %336

318:                                              ; preds = %298
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = ptrtoint ptr %319 to i64
  %321 = sub i64 %320, %260
  %322 = and i64 %321, 4294967295
  store i64 %322, ptr %257, align 8, !tbaa !29
  br label %283

323:                                              ; preds = %298
  call void @__assert_fail(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.15, i32 noundef 688, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #19
  unreachable

324:                                              ; preds = %298
  %325 = load ptr, ptr @stderr, align 8, !tbaa !5
  %326 = load i64, ptr %253, align 8, !tbaa !20
  %327 = load i64, ptr %257, align 8, !tbaa !29
  %328 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %325, ptr noundef nonnull @.str.22, i64 noundef %326, i64 noundef %327) #18
  %329 = call ptr @lsqpack_dec_get_err_info(ptr noundef nonnull %3) #15
  %330 = load ptr, ptr @stderr, align 8, !tbaa !5
  %331 = getelementptr inbounds i8, ptr %329, i64 8
  %332 = load i64, ptr %331, align 8, !tbaa !32
  %333 = getelementptr inbounds i8, ptr %329, i64 4
  %334 = load i32, ptr %333, align 4, !tbaa !34
  %335 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %330, ptr noundef nonnull @.str.21, i64 noundef %332, i32 noundef %334) #18
  call void @exit(i32 noundef 1) #19
  unreachable

336:                                              ; preds = %312, %313, %282
  %337 = load ptr, ptr @bufs, align 8, !tbaa !27
  %.not215 = icmp eq ptr %337, null
  br i1 %.not215, label %._crit_edge314, label %.lr.ph313, !llvm.loop !35

._crit_edge314:                                   ; preds = %336, %246
  %338 = load i32, ptr @s_verbose, align 4, !tbaa !11
  %.not216 = icmp eq i32 %338, 0
  br i1 %.not216, label %341, label %339

339:                                              ; preds = %._crit_edge314
  %340 = load ptr, ptr @stderr, align 8, !tbaa !5
  call void @lsqpack_dec_print_table(ptr noundef nonnull %3, ptr noundef %340) #15
  br label %341

341:                                              ; preds = %339, %._crit_edge314
  call void @lsqpack_dec_cleanup(ptr noundef nonnull %3) #15
  %342 = load ptr, ptr @bufs, align 8, !tbaa !27
  %343 = icmp eq ptr %342, null
  br i1 %343, label %345, label %344

344:                                              ; preds = %341
  call void @__assert_fail(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.15, i32 noundef 713, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #19
  unreachable

345:                                              ; preds = %341
  %346 = load ptr, ptr @s_out, align 8, !tbaa !5
  %.not217 = icmp eq ptr %346, null
  br i1 %.not217, label %349, label %347

347:                                              ; preds = %345
  %348 = call i32 @fclose(ptr noundef nonnull %346)
  br label %349

349:                                              ; preds = %347, %345
  call void @exit(i32 noundef 0) #19
  unreachable

350:                                              ; preds = %120, %94, %86
  %.0178 = phi i64 [ %85, %86 ], [ %93, %94 ], [ %117, %120 ]
  %351 = icmp slt i64 %.0178, 0
  br i1 %351, label %352, label %353

352:                                              ; preds = %350
  call void @perror(ptr noundef nonnull @.str.25) #21
  br label %360

353:                                              ; preds = %350
  %354 = icmp eq i64 %.0178, 0
  %355 = load ptr, ptr @stderr, align 8, !tbaa !5
  br i1 %354, label %356, label %358

356:                                              ; preds = %353
  %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %355, ptr noundef nonnull @.str.26) #18
  br label %360

358:                                              ; preds = %353
  %359 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %355, ptr noundef nonnull @.str.27, i64 noundef %.0178) #18
  br label %360

360:                                              ; preds = %356, %358, %352
  call void @exit(i32 noundef 1) #19
  unreachable
}

; 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
declare i32 @getopt(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #4

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

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #5

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #7

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

declare void @lsqpack_dec_init(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #9

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @__bswap_64(i64 noundef) local_unnamed_addr #10

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @__bswap_32(i32 noundef) local_unnamed_addr #10

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

; Function Attrs: nofree nounwind
declare void @perror(ptr nocapture noundef readonly) local_unnamed_addr #4

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

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef ptr @fgets(ptr noundef, i32 noundef, ptr nocapture noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare ptr @strchr(ptr noundef, i32 noundef) local_unnamed_addr #3

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

declare i32 @lsqpack_dec_header_in(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

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

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

declare float @lsqpack_dec_ratio(ptr noundef) local_unnamed_addr #9

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

declare i32 @lsqpack_dec_enc_in(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #9

declare ptr @lsqpack_dec_get_err_info(ptr noundef) local_unnamed_addr #9

declare void @lsqpack_dec_print_table(ptr noundef, ptr noundef) local_unnamed_addr #9

declare i32 @lsqpack_dec_header_read(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #9

declare void @lsqpack_dec_cleanup(ptr noundef) local_unnamed_addr #9

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

attributes #0 = { noreturn nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "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 = { mustprogress nofree nounwind willreturn memory(argmem: 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 = { 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 #5 = { mustprogress nofree nosync nounwind willreturn memory(none) "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 = { 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 #7 = { inlinehint mustprogress nofree nounwind willreturn memory(read) 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 #8 = { 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 #9 = { "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 #10 = { 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 #11 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #13 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #14 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #15 = { nounwind }
attributes #16 = { nounwind willreturn memory(read) }
attributes #17 = { nounwind willreturn memory(none) }
attributes #18 = { cold nounwind }
attributes #19 = { noreturn nounwind }
attributes #20 = { nounwind allocsize(0) }
attributes #21 = { cold }

!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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !6, i64 16}
!16 = !{!"buf", !17, i64 0, !6, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !18, i64 56, !12, i64 96, !12, i64 100, !12, i64 104, !7, i64 108, !7, i64 4204}
!17 = !{!"", !6, i64 0, !6, i64 8}
!18 = !{!"lsxpack_header", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !19, i64 24, !19, i64 26, !19, i64 28, !7, i64 30, !7, i64 31, !7, i64 32, !12, i64 33, !7, i64 34, !7, i64 35}
!19 = !{!"short", !7, i64 0}
!20 = !{!16, !14, i64 24}
!21 = !{!16, !14, i64 32}
!22 = !{!16, !14, i64 48}
!23 = !{!16, !6, i64 0}
!24 = !{!17, !6, i64 8}
!25 = !{!16, !6, i64 8}
!26 = !{!7, !7, i64 0}
!27 = !{!17, !6, i64 0}
!28 = distinct !{!28, !10}
!29 = !{!16, !14, i64 40}
!30 = distinct !{!30, !10}
!31 = distinct !{!31, !10}
!32 = !{!33, !14, i64 8}
!33 = !{!"lsqpack_dec_err", !12, i64 0, !12, i64 4, !14, i64 8, !14, i64 16}
!34 = !{!33, !12, i64 4}
!35 = distinct !{!35, !10}


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