; LLVM IR from dbry/wavpack-stream :: src (read_words)

; 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.WavpackStream = type { %struct.WavpackHeader, %struct.words_data, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, %struct.bs, %struct.bs, %struct.bs, float, i8, i8, i8, i8, i8, i8, i8, i8, %struct.anon, [16 x %struct.decorr_pass], %struct.decorr_pass, ptr, %struct.anon.0 }
%struct.WavpackHeader = type { [4 x i8], i16, i16, i32 }
%struct.words_data = type { [2 x i32], [2 x i32], i32, i32, i32, i32, i32, [2 x %struct.entropy_data] }
%struct.entropy_data = type { [3 x i32], i32, i32 }
%struct.bs = type { ptr, ptr, ptr, ptr, i32, i32, i32 }
%struct.anon = type { [2 x i32], [2 x i32], [2 x i32], double, double, double, ptr, ptr, i32 }
%struct.decorr_pass = type { i32, i32, i32, i32, [8 x i32], [8 x i32], i32, i32, i32, i32 }
%struct.anon.0 = type { ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, i32, ptr, i32, i32, i32, [2 x %struct.DSDfilters], ptr }
%struct.DSDfilters = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

@ones_count_table = external hidden constant [256 x i8], align 16

; Function Attrs: nounwind uwtable
define dso_local i32 @get_word(ptr noundef %0, i32 noundef %1, ptr noundef %2) #0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %21 = load ptr, ptr %5, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.WavpackStream, ptr %21, i32 0, i32 1
  %23 = getelementptr inbounds %struct.words_data, ptr %22, i32 0, i32 7
  %24 = getelementptr inbounds [2 x %struct.entropy_data], ptr %23, i64 0, i64 0
  %25 = load i32, ptr %6, align 4, !tbaa !9
  %26 = sext i32 %25 to i64
  %27 = getelementptr inbounds %struct.entropy_data, ptr %24, i64 %26
  store ptr %27, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %28 = load ptr, ptr %5, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.WavpackStream, ptr %28, i32 0, i32 27
  %30 = getelementptr inbounds %struct.bs, ptr %29, i32 0, i32 2
  %31 = load ptr, ptr %30, align 8, !tbaa !11
  %32 = icmp ne ptr %31, null
  br i1 %32, label %34, label %33

33:                                               ; preds = %3
  store i32 -2147483648, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %1106

34:                                               ; preds = %3
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = icmp ne ptr %35, null
  br i1 %36, label %37, label %39

37:                                               ; preds = %34
  %38 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %39

39:                                               ; preds = %37, %34
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.WavpackStream, ptr %40, i32 0, i32 1
  %42 = getelementptr inbounds %struct.words_data, ptr %41, i32 0, i32 7
  %43 = getelementptr inbounds [2 x %struct.entropy_data], ptr %42, i64 0, i64 0
  %44 = getelementptr inbounds %struct.entropy_data, ptr %43, i32 0, i32 0
  %45 = getelementptr inbounds [3 x i32], ptr %44, i64 0, i64 0
  %46 = load i32, ptr %45, align 4, !tbaa !9
  %47 = and i32 %46, -2
  %48 = icmp ne i32 %47, 0
  br i1 %48, label %305, label %49

49:                                               ; preds = %39
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.WavpackStream, ptr %50, i32 0, i32 1
  %52 = getelementptr inbounds %struct.words_data, ptr %51, i32 0, i32 5
  %53 = load i32, ptr %52, align 4, !tbaa !23
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %305, label %55

55:                                               ; preds = %49
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.WavpackStream, ptr %56, i32 0, i32 1
  %58 = getelementptr inbounds %struct.words_data, ptr %57, i32 0, i32 3
  %59 = load i32, ptr %58, align 4, !tbaa !24
  %60 = icmp ne i32 %59, 0
  br i1 %60, label %305, label %61

61:                                               ; preds = %55
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.WavpackStream, ptr %62, i32 0, i32 1
  %64 = getelementptr inbounds %struct.words_data, ptr %63, i32 0, i32 7
  %65 = getelementptr inbounds [2 x %struct.entropy_data], ptr %64, i64 0, i64 1
  %66 = getelementptr inbounds %struct.entropy_data, ptr %65, i32 0, i32 0
  %67 = getelementptr inbounds [3 x i32], ptr %66, i64 0, i64 0
  %68 = load i32, ptr %67, align 4, !tbaa !9
  %69 = and i32 %68, -2
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %305, label %71

71:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.WavpackStream, ptr %72, i32 0, i32 1
  %74 = getelementptr inbounds %struct.words_data, ptr %73, i32 0, i32 4
  %75 = load i32, ptr %74, align 4, !tbaa !25
  %76 = icmp ne i32 %75, 0
  br i1 %76, label %77, label %95

77:                                               ; preds = %71
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.WavpackStream, ptr %78, i32 0, i32 1
  %80 = getelementptr inbounds %struct.words_data, ptr %79, i32 0, i32 4
  %81 = load i32, ptr %80, align 4, !tbaa !25
  %82 = add i32 %81, -1
  store i32 %82, ptr %80, align 4, !tbaa !25
  %83 = icmp ne i32 %82, 0
  br i1 %83, label %84, label %94

84:                                               ; preds = %77
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.entropy_data, ptr %85, i32 0, i32 1
  %87 = load i32, ptr %86, align 4, !tbaa !26
  %88 = add i32 %87, 128
  %89 = lshr i32 %88, 8
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.entropy_data, ptr %90, i32 0, i32 1
  %92 = load i32, ptr %91, align 4, !tbaa !26
  %93 = sub i32 %92, %89
  store i32 %93, ptr %91, align 4, !tbaa !26
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %302

94:                                               ; preds = %77
  br label %301

95:                                               ; preds = %71
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %96

96:                                               ; preds = %169, %95
  %97 = load i32, ptr %17, align 4, !tbaa !9
  %98 = icmp slt i32 %97, 33
  br i1 %98, label %99, label %166

99:                                               ; preds = %96
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.WavpackStream, ptr %100, i32 0, i32 27
  %102 = getelementptr inbounds %struct.bs, ptr %101, i32 0, i32 5
  %103 = load i32, ptr %102, align 4, !tbaa !28
  %104 = icmp ne i32 %103, 0
  br i1 %104, label %105, label %117

105:                                              ; preds = %99
  %106 = load ptr, ptr %5, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.WavpackStream, ptr %106, i32 0, i32 27
  %108 = getelementptr inbounds %struct.bs, ptr %107, i32 0, i32 5
  %109 = load i32, ptr %108, align 4, !tbaa !28
  %110 = add nsw i32 %109, -1
  store i32 %110, ptr %108, align 4, !tbaa !28
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.WavpackStream, ptr %111, i32 0, i32 27
  %113 = getelementptr inbounds %struct.bs, ptr %112, i32 0, i32 6
  %114 = load i32, ptr %113, align 8, !tbaa !29
  %115 = and i32 %114, 1
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %151, label %157

117:                                              ; preds = %99
  %118 = load ptr, ptr %5, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.WavpackStream, ptr %118, i32 0, i32 27
  %120 = getelementptr inbounds %struct.bs, ptr %119, i32 0, i32 2
  %121 = load ptr, ptr %120, align 8, !tbaa !11
  %122 = getelementptr inbounds i16, ptr %121, i32 1
  store ptr %122, ptr %120, align 8, !tbaa !11
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.WavpackStream, ptr %123, i32 0, i32 27
  %125 = getelementptr inbounds %struct.bs, ptr %124, i32 0, i32 1
  %126 = load ptr, ptr %125, align 8, !tbaa !30
  %127 = icmp ne ptr %122, %126
  br i1 %127, label %128, label %129

128:                                              ; preds = %117
  br label %136

129:                                              ; preds = %117
  %130 = load ptr, ptr %5, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.WavpackStream, ptr %130, i32 0, i32 27
  %132 = getelementptr inbounds %struct.bs, ptr %131, i32 0, i32 3
  %133 = load ptr, ptr %132, align 8, !tbaa !31
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.WavpackStream, ptr %134, i32 0, i32 27
  call void %133(ptr noundef %135)
  br label %136

136:                                              ; preds = %129, %128
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.WavpackStream, ptr %137, i32 0, i32 27
  %139 = getelementptr inbounds %struct.bs, ptr %138, i32 0, i32 5
  store i32 15, ptr %139, align 4, !tbaa !28
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.WavpackStream, ptr %140, i32 0, i32 27
  %142 = getelementptr inbounds %struct.bs, ptr %141, i32 0, i32 2
  %143 = load ptr, ptr %142, align 8, !tbaa !11
  %144 = load i16, ptr %143, align 2, !tbaa !32
  %145 = zext i16 %144 to i32
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.WavpackStream, ptr %146, i32 0, i32 27
  %148 = getelementptr inbounds %struct.bs, ptr %147, i32 0, i32 6
  store i32 %145, ptr %148, align 8, !tbaa !29
  %149 = and i32 %145, 1
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %157

151:                                              ; preds = %136, %105
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.WavpackStream, ptr %152, i32 0, i32 27
  %154 = getelementptr inbounds %struct.bs, ptr %153, i32 0, i32 6
  %155 = load i32, ptr %154, align 8, !tbaa !29
  %156 = lshr i32 %155, 1
  store i32 %156, ptr %154, align 8, !tbaa !29
  br label %163

157:                                              ; preds = %136, %105
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.WavpackStream, ptr %158, i32 0, i32 27
  %160 = getelementptr inbounds %struct.bs, ptr %159, i32 0, i32 6
  %161 = load i32, ptr %160, align 8, !tbaa !29
  %162 = lshr i32 %161, 1
  store i32 %162, ptr %160, align 8, !tbaa !29
  br label %163

163:                                              ; preds = %157, %151
  %164 = phi i32 [ 1, %151 ], [ 0, %157 ]
  %165 = icmp ne i32 %164, 0
  br label %166

166:                                              ; preds = %163, %96
  %167 = phi i1 [ false, %96 ], [ %165, %163 ]
  br i1 %167, label %168, label %172

168:                                              ; preds = %166
  br label %169

169:                                              ; preds = %168
  %170 = load i32, ptr %17, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %17, align 4, !tbaa !9
  br label %96, !llvm.loop !33

172:                                              ; preds = %166
  %173 = load i32, ptr %17, align 4, !tbaa !9
  %174 = icmp eq i32 %173, 33
  br i1 %174, label %175, label %176

175:                                              ; preds = %172
  store i32 -2147483648, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %302

176:                                              ; preds = %172
  %177 = load i32, ptr %17, align 4, !tbaa !9
  %178 = icmp slt i32 %177, 2
  br i1 %178, label %179, label %184

179:                                              ; preds = %176
  %180 = load i32, ptr %17, align 4, !tbaa !9
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.WavpackStream, ptr %181, i32 0, i32 1
  %183 = getelementptr inbounds %struct.words_data, ptr %182, i32 0, i32 4
  store i32 %180, ptr %183, align 4, !tbaa !25
  br label %274

184:                                              ; preds = %176
  store i32 1, ptr %16, align 4, !tbaa !9
  %185 = load ptr, ptr %5, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.WavpackStream, ptr %185, i32 0, i32 1
  %187 = getelementptr inbounds %struct.words_data, ptr %186, i32 0, i32 4
  store i32 0, ptr %187, align 4, !tbaa !25
  br label %188

188:                                              ; preds = %264, %184
  %189 = load i32, ptr %17, align 4, !tbaa !9
  %190 = add nsw i32 %189, -1
  store i32 %190, ptr %17, align 4, !tbaa !9
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %267

192:                                              ; preds = %188
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.WavpackStream, ptr %193, i32 0, i32 27
  %195 = getelementptr inbounds %struct.bs, ptr %194, i32 0, i32 5
  %196 = load i32, ptr %195, align 4, !tbaa !28
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %210

198:                                              ; preds = %192
  %199 = load ptr, ptr %5, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.WavpackStream, ptr %199, i32 0, i32 27
  %201 = getelementptr inbounds %struct.bs, ptr %200, i32 0, i32 5
  %202 = load i32, ptr %201, align 4, !tbaa !28
  %203 = add nsw i32 %202, -1
  store i32 %203, ptr %201, align 4, !tbaa !28
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.WavpackStream, ptr %204, i32 0, i32 27
  %206 = getelementptr inbounds %struct.bs, ptr %205, i32 0, i32 6
  %207 = load i32, ptr %206, align 8, !tbaa !29
  %208 = and i32 %207, 1
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %244, label %250

210:                                              ; preds = %192
  %211 = load ptr, ptr %5, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.WavpackStream, ptr %211, i32 0, i32 27
  %213 = getelementptr inbounds %struct.bs, ptr %212, i32 0, i32 2
  %214 = load ptr, ptr %213, align 8, !tbaa !11
  %215 = getelementptr inbounds i16, ptr %214, i32 1
  store ptr %215, ptr %213, align 8, !tbaa !11
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.WavpackStream, ptr %216, i32 0, i32 27
  %218 = getelementptr inbounds %struct.bs, ptr %217, i32 0, i32 1
  %219 = load ptr, ptr %218, align 8, !tbaa !30
  %220 = icmp ne ptr %215, %219
  br i1 %220, label %221, label %222

221:                                              ; preds = %210
  br label %229

222:                                              ; preds = %210
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.WavpackStream, ptr %223, i32 0, i32 27
  %225 = getelementptr inbounds %struct.bs, ptr %224, i32 0, i32 3
  %226 = load ptr, ptr %225, align 8, !tbaa !31
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.WavpackStream, ptr %227, i32 0, i32 27
  call void %226(ptr noundef %228)
  br label %229

229:                                              ; preds = %222, %221
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.WavpackStream, ptr %230, i32 0, i32 27
  %232 = getelementptr inbounds %struct.bs, ptr %231, i32 0, i32 5
  store i32 15, ptr %232, align 4, !tbaa !28
  %233 = load ptr, ptr %5, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.WavpackStream, ptr %233, i32 0, i32 27
  %235 = getelementptr inbounds %struct.bs, ptr %234, i32 0, i32 2
  %236 = load ptr, ptr %235, align 8, !tbaa !11
  %237 = load i16, ptr %236, align 2, !tbaa !32
  %238 = zext i16 %237 to i32
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.WavpackStream, ptr %239, i32 0, i32 27
  %241 = getelementptr inbounds %struct.bs, ptr %240, i32 0, i32 6
  store i32 %238, ptr %241, align 8, !tbaa !29
  %242 = and i32 %238, 1
  %243 = icmp ne i32 %242, 0
  br i1 %243, label %244, label %250

244:                                              ; preds = %229, %198
  %245 = load ptr, ptr %5, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.WavpackStream, ptr %245, i32 0, i32 27
  %247 = getelementptr inbounds %struct.bs, ptr %246, i32 0, i32 6
  %248 = load i32, ptr %247, align 8, !tbaa !29
  %249 = lshr i32 %248, 1
  store i32 %249, ptr %247, align 8, !tbaa !29
  br i1 true, label %256, label %263

250:                                              ; preds = %229, %198
  %251 = load ptr, ptr %5, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.WavpackStream, ptr %251, i32 0, i32 27
  %253 = getelementptr inbounds %struct.bs, ptr %252, i32 0, i32 6
  %254 = load i32, ptr %253, align 8, !tbaa !29
  %255 = lshr i32 %254, 1
  store i32 %255, ptr %253, align 8, !tbaa !29
  br i1 false, label %256, label %263

256:                                              ; preds = %250, %244
  %257 = load i32, ptr %16, align 4, !tbaa !9
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.WavpackStream, ptr %258, i32 0, i32 1
  %260 = getelementptr inbounds %struct.words_data, ptr %259, i32 0, i32 4
  %261 = load i32, ptr %260, align 4, !tbaa !25
  %262 = or i32 %261, %257
  store i32 %262, ptr %260, align 4, !tbaa !25
  br label %263

263:                                              ; preds = %256, %250, %244
  br label %264

264:                                              ; preds = %263
  %265 = load i32, ptr %16, align 4, !tbaa !9
  %266 = shl i32 %265, 1
  store i32 %266, ptr %16, align 4, !tbaa !9
  br label %188, !llvm.loop !35

267:                                              ; preds = %188
  %268 = load i32, ptr %16, align 4, !tbaa !9
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.WavpackStream, ptr %269, i32 0, i32 1
  %271 = getelementptr inbounds %struct.words_data, ptr %270, i32 0, i32 4
  %272 = load i32, ptr %271, align 4, !tbaa !25
  %273 = or i32 %272, %268
  store i32 %273, ptr %271, align 4, !tbaa !25
  br label %274

274:                                              ; preds = %267, %179
  %275 = load ptr, ptr %5, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.WavpackStream, ptr %275, i32 0, i32 1
  %277 = getelementptr inbounds %struct.words_data, ptr %276, i32 0, i32 4
  %278 = load i32, ptr %277, align 4, !tbaa !25
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %300

280:                                              ; preds = %274
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.entropy_data, ptr %281, i32 0, i32 1
  %283 = load i32, ptr %282, align 4, !tbaa !26
  %284 = add i32 %283, 128
  %285 = lshr i32 %284, 8
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.entropy_data, ptr %286, i32 0, i32 1
  %288 = load i32, ptr %287, align 4, !tbaa !26
  %289 = sub i32 %288, %285
  store i32 %289, ptr %287, align 4, !tbaa !26
  %290 = load ptr, ptr %5, align 8, !tbaa !5
  %291 = getelementptr inbounds %struct.WavpackStream, ptr %290, i32 0, i32 1
  %292 = getelementptr inbounds %struct.words_data, ptr %291, i32 0, i32 7
  %293 = getelementptr inbounds [2 x %struct.entropy_data], ptr %292, i64 0, i64 0
  %294 = getelementptr inbounds %struct.entropy_data, ptr %293, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 4 %294, i8 0, i64 12, i1 false)
  %295 = load ptr, ptr %5, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.WavpackStream, ptr %295, i32 0, i32 1
  %297 = getelementptr inbounds %struct.words_data, ptr %296, i32 0, i32 7
  %298 = getelementptr inbounds [2 x %struct.entropy_data], ptr %297, i64 0, i64 1
  %299 = getelementptr inbounds %struct.entropy_data, ptr %298, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 4 %299, i8 0, i64 12, i1 false)
  store i32 0, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %302

300:                                              ; preds = %274
  br label %301

301:                                              ; preds = %300, %94
  store i32 0, ptr %15, align 4
  br label %302

302:                                              ; preds = %301, %280, %175, %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  %303 = load i32, ptr %15, align 4
  switch i32 %303, label %1106 [
    i32 0, label %304
  ]

304:                                              ; preds = %302
  br label %305

305:                                              ; preds = %304, %61, %55, %49, %39
  %306 = load ptr, ptr %5, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.WavpackStream, ptr %306, i32 0, i32 1
  %308 = getelementptr inbounds %struct.words_data, ptr %307, i32 0, i32 5
  %309 = load i32, ptr %308, align 4, !tbaa !23
  %310 = icmp ne i32 %309, 0
  br i1 %310, label %311, label %315

311:                                              ; preds = %305
  %312 = load ptr, ptr %5, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.WavpackStream, ptr %312, i32 0, i32 1
  %314 = getelementptr inbounds %struct.words_data, ptr %313, i32 0, i32 5
  store i32 0, ptr %314, align 4, !tbaa !23
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %696

315:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %316 = load ptr, ptr %5, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.WavpackStream, ptr %316, i32 0, i32 27
  %318 = getelementptr inbounds %struct.bs, ptr %317, i32 0, i32 5
  %319 = load i32, ptr %318, align 4, !tbaa !28
  %320 = icmp slt i32 %319, 8
  br i1 %320, label %321, label %364

321:                                              ; preds = %315
  %322 = load ptr, ptr %5, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.WavpackStream, ptr %322, i32 0, i32 27
  %324 = getelementptr inbounds %struct.bs, ptr %323, i32 0, i32 2
  %325 = load ptr, ptr %324, align 8, !tbaa !11
  %326 = getelementptr inbounds i16, ptr %325, i32 1
  store ptr %326, ptr %324, align 8, !tbaa !11
  %327 = load ptr, ptr %5, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.WavpackStream, ptr %327, i32 0, i32 27
  %329 = getelementptr inbounds %struct.bs, ptr %328, i32 0, i32 1
  %330 = load ptr, ptr %329, align 8, !tbaa !30
  %331 = icmp eq ptr %326, %330
  br i1 %331, label %332, label %339

332:                                              ; preds = %321
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.WavpackStream, ptr %333, i32 0, i32 27
  %335 = getelementptr inbounds %struct.bs, ptr %334, i32 0, i32 3
  %336 = load ptr, ptr %335, align 8, !tbaa !31
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.WavpackStream, ptr %337, i32 0, i32 27
  call void %336(ptr noundef %338)
  br label %339

339:                                              ; preds = %332, %321
  %340 = load ptr, ptr %5, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.WavpackStream, ptr %340, i32 0, i32 27
  %342 = getelementptr inbounds %struct.bs, ptr %341, i32 0, i32 2
  %343 = load ptr, ptr %342, align 8, !tbaa !11
  %344 = load i16, ptr %343, align 2, !tbaa !32
  %345 = zext i16 %344 to i32
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.WavpackStream, ptr %346, i32 0, i32 27
  %348 = getelementptr inbounds %struct.bs, ptr %347, i32 0, i32 5
  %349 = load i32, ptr %348, align 4, !tbaa !28
  %350 = shl i32 %345, %349
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.WavpackStream, ptr %351, i32 0, i32 27
  %353 = getelementptr inbounds %struct.bs, ptr %352, i32 0, i32 6
  %354 = load i32, ptr %353, align 8, !tbaa !29
  %355 = or i32 %354, %350
  store i32 %355, ptr %353, align 8, !tbaa !29
  %356 = and i32 %355, 255
  store i32 %356, ptr %18, align 4, !tbaa !9
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.WavpackStream, ptr %357, i32 0, i32 27
  %359 = getelementptr inbounds %struct.bs, ptr %358, i32 0, i32 5
  %360 = load i32, ptr %359, align 4, !tbaa !28
  %361 = sext i32 %360 to i64
  %362 = add i64 %361, 16
  %363 = trunc i64 %362 to i32
  store i32 %363, ptr %359, align 4, !tbaa !28
  br label %370

364:                                              ; preds = %315
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.WavpackStream, ptr %365, i32 0, i32 27
  %367 = getelementptr inbounds %struct.bs, ptr %366, i32 0, i32 6
  %368 = load i32, ptr %367, align 8, !tbaa !29
  %369 = and i32 %368, 255
  store i32 %369, ptr %18, align 4, !tbaa !9
  br label %370

370:                                              ; preds = %364, %339
  %371 = load i32, ptr %18, align 4, !tbaa !9
  %372 = icmp eq i32 %371, 255
  br i1 %372, label %373, label %641

373:                                              ; preds = %370
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.WavpackStream, ptr %374, i32 0, i32 27
  %376 = getelementptr inbounds %struct.bs, ptr %375, i32 0, i32 5
  %377 = load i32, ptr %376, align 4, !tbaa !28
  %378 = sub nsw i32 %377, 8
  store i32 %378, ptr %376, align 4, !tbaa !28
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.WavpackStream, ptr %379, i32 0, i32 27
  %381 = getelementptr inbounds %struct.bs, ptr %380, i32 0, i32 6
  %382 = load i32, ptr %381, align 8, !tbaa !29
  %383 = lshr i32 %382, 8
  store i32 %383, ptr %381, align 8, !tbaa !29
  store i32 8, ptr %9, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %457, %373
  %385 = load i32, ptr %9, align 4, !tbaa !9
  %386 = icmp ult i32 %385, 17
  br i1 %386, label %387, label %454

387:                                              ; preds = %384
  %388 = load ptr, ptr %5, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.WavpackStream, ptr %388, i32 0, i32 27
  %390 = getelementptr inbounds %struct.bs, ptr %389, i32 0, i32 5
  %391 = load i32, ptr %390, align 4, !tbaa !28
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %393, label %405

393:                                              ; preds = %387
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.WavpackStream, ptr %394, i32 0, i32 27
  %396 = getelementptr inbounds %struct.bs, ptr %395, i32 0, i32 5
  %397 = load i32, ptr %396, align 4, !tbaa !28
  %398 = add nsw i32 %397, -1
  store i32 %398, ptr %396, align 4, !tbaa !28
  %399 = load ptr, ptr %5, align 8, !tbaa !5
  %400 = getelementptr inbounds %struct.WavpackStream, ptr %399, i32 0, i32 27
  %401 = getelementptr inbounds %struct.bs, ptr %400, i32 0, i32 6
  %402 = load i32, ptr %401, align 8, !tbaa !29
  %403 = and i32 %402, 1
  %404 = icmp ne i32 %403, 0
  br i1 %404, label %439, label %445

405:                                              ; preds = %387
  %406 = load ptr, ptr %5, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.WavpackStream, ptr %406, i32 0, i32 27
  %408 = getelementptr inbounds %struct.bs, ptr %407, i32 0, i32 2
  %409 = load ptr, ptr %408, align 8, !tbaa !11
  %410 = getelementptr inbounds i16, ptr %409, i32 1
  store ptr %410, ptr %408, align 8, !tbaa !11
  %411 = load ptr, ptr %5, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.WavpackStream, ptr %411, i32 0, i32 27
  %413 = getelementptr inbounds %struct.bs, ptr %412, i32 0, i32 1
  %414 = load ptr, ptr %413, align 8, !tbaa !30
  %415 = icmp ne ptr %410, %414
  br i1 %415, label %416, label %417

416:                                              ; preds = %405
  br label %424

417:                                              ; preds = %405
  %418 = load ptr, ptr %5, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.WavpackStream, ptr %418, i32 0, i32 27
  %420 = getelementptr inbounds %struct.bs, ptr %419, i32 0, i32 3
  %421 = load ptr, ptr %420, align 8, !tbaa !31
  %422 = load ptr, ptr %5, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.WavpackStream, ptr %422, i32 0, i32 27
  call void %421(ptr noundef %423)
  br label %424

424:                                              ; preds = %417, %416
  %425 = load ptr, ptr %5, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.WavpackStream, ptr %425, i32 0, i32 27
  %427 = getelementptr inbounds %struct.bs, ptr %426, i32 0, i32 5
  store i32 15, ptr %427, align 4, !tbaa !28
  %428 = load ptr, ptr %5, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.WavpackStream, ptr %428, i32 0, i32 27
  %430 = getelementptr inbounds %struct.bs, ptr %429, i32 0, i32 2
  %431 = load ptr, ptr %430, align 8, !tbaa !11
  %432 = load i16, ptr %431, align 2, !tbaa !32
  %433 = zext i16 %432 to i32
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.WavpackStream, ptr %434, i32 0, i32 27
  %436 = getelementptr inbounds %struct.bs, ptr %435, i32 0, i32 6
  store i32 %433, ptr %436, align 8, !tbaa !29
  %437 = and i32 %433, 1
  %438 = icmp ne i32 %437, 0
  br i1 %438, label %439, label %445

439:                                              ; preds = %424, %393
  %440 = load ptr, ptr %5, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.WavpackStream, ptr %440, i32 0, i32 27
  %442 = getelementptr inbounds %struct.bs, ptr %441, i32 0, i32 6
  %443 = load i32, ptr %442, align 8, !tbaa !29
  %444 = lshr i32 %443, 1
  store i32 %444, ptr %442, align 8, !tbaa !29
  br label %451

445:                                              ; preds = %424, %393
  %446 = load ptr, ptr %5, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.WavpackStream, ptr %446, i32 0, i32 27
  %448 = getelementptr inbounds %struct.bs, ptr %447, i32 0, i32 6
  %449 = load i32, ptr %448, align 8, !tbaa !29
  %450 = lshr i32 %449, 1
  store i32 %450, ptr %448, align 8, !tbaa !29
  br label %451

451:                                              ; preds = %445, %439
  %452 = phi i32 [ 1, %439 ], [ 0, %445 ]
  %453 = icmp ne i32 %452, 0
  br label %454

454:                                              ; preds = %451, %384
  %455 = phi i1 [ false, %384 ], [ %453, %451 ]
  br i1 %455, label %456, label %460

456:                                              ; preds = %454
  br label %457

457:                                              ; preds = %456
  %458 = load i32, ptr %9, align 4, !tbaa !9
  %459 = add i32 %458, 1
  store i32 %459, ptr %9, align 4, !tbaa !9
  br label %384, !llvm.loop !36

460:                                              ; preds = %454
  %461 = load i32, ptr %9, align 4, !tbaa !9
  %462 = icmp eq i32 %461, 17
  br i1 %462, label %463, label %464

463:                                              ; preds = %460
  store i32 -2147483648, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %693

464:                                              ; preds = %460
  %465 = load i32, ptr %9, align 4, !tbaa !9
  %466 = icmp eq i32 %465, 16
  br i1 %466, label %467, label %640

467:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %468

468:                                              ; preds = %541, %467
  %469 = load i32, ptr %20, align 4, !tbaa !9
  %470 = icmp slt i32 %469, 33
  br i1 %470, label %471, label %538

471:                                              ; preds = %468
  %472 = load ptr, ptr %5, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.WavpackStream, ptr %472, i32 0, i32 27
  %474 = getelementptr inbounds %struct.bs, ptr %473, i32 0, i32 5
  %475 = load i32, ptr %474, align 4, !tbaa !28
  %476 = icmp ne i32 %475, 0
  br i1 %476, label %477, label %489

477:                                              ; preds = %471
  %478 = load ptr, ptr %5, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.WavpackStream, ptr %478, i32 0, i32 27
  %480 = getelementptr inbounds %struct.bs, ptr %479, i32 0, i32 5
  %481 = load i32, ptr %480, align 4, !tbaa !28
  %482 = add nsw i32 %481, -1
  store i32 %482, ptr %480, align 4, !tbaa !28
  %483 = load ptr, ptr %5, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.WavpackStream, ptr %483, i32 0, i32 27
  %485 = getelementptr inbounds %struct.bs, ptr %484, i32 0, i32 6
  %486 = load i32, ptr %485, align 8, !tbaa !29
  %487 = and i32 %486, 1
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %523, label %529

489:                                              ; preds = %471
  %490 = load ptr, ptr %5, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.WavpackStream, ptr %490, i32 0, i32 27
  %492 = getelementptr inbounds %struct.bs, ptr %491, i32 0, i32 2
  %493 = load ptr, ptr %492, align 8, !tbaa !11
  %494 = getelementptr inbounds i16, ptr %493, i32 1
  store ptr %494, ptr %492, align 8, !tbaa !11
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.WavpackStream, ptr %495, i32 0, i32 27
  %497 = getelementptr inbounds %struct.bs, ptr %496, i32 0, i32 1
  %498 = load ptr, ptr %497, align 8, !tbaa !30
  %499 = icmp ne ptr %494, %498
  br i1 %499, label %500, label %501

500:                                              ; preds = %489
  br label %508

501:                                              ; preds = %489
  %502 = load ptr, ptr %5, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.WavpackStream, ptr %502, i32 0, i32 27
  %504 = getelementptr inbounds %struct.bs, ptr %503, i32 0, i32 3
  %505 = load ptr, ptr %504, align 8, !tbaa !31
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.WavpackStream, ptr %506, i32 0, i32 27
  call void %505(ptr noundef %507)
  br label %508

508:                                              ; preds = %501, %500
  %509 = load ptr, ptr %5, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.WavpackStream, ptr %509, i32 0, i32 27
  %511 = getelementptr inbounds %struct.bs, ptr %510, i32 0, i32 5
  store i32 15, ptr %511, align 4, !tbaa !28
  %512 = load ptr, ptr %5, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.WavpackStream, ptr %512, i32 0, i32 27
  %514 = getelementptr inbounds %struct.bs, ptr %513, i32 0, i32 2
  %515 = load ptr, ptr %514, align 8, !tbaa !11
  %516 = load i16, ptr %515, align 2, !tbaa !32
  %517 = zext i16 %516 to i32
  %518 = load ptr, ptr %5, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.WavpackStream, ptr %518, i32 0, i32 27
  %520 = getelementptr inbounds %struct.bs, ptr %519, i32 0, i32 6
  store i32 %517, ptr %520, align 8, !tbaa !29
  %521 = and i32 %517, 1
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %529

523:                                              ; preds = %508, %477
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.WavpackStream, ptr %524, i32 0, i32 27
  %526 = getelementptr inbounds %struct.bs, ptr %525, i32 0, i32 6
  %527 = load i32, ptr %526, align 8, !tbaa !29
  %528 = lshr i32 %527, 1
  store i32 %528, ptr %526, align 8, !tbaa !29
  br label %535

529:                                              ; preds = %508, %477
  %530 = load ptr, ptr %5, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.WavpackStream, ptr %530, i32 0, i32 27
  %532 = getelementptr inbounds %struct.bs, ptr %531, i32 0, i32 6
  %533 = load i32, ptr %532, align 8, !tbaa !29
  %534 = lshr i32 %533, 1
  store i32 %534, ptr %532, align 8, !tbaa !29
  br label %535

535:                                              ; preds = %529, %523
  %536 = phi i32 [ 1, %523 ], [ 0, %529 ]
  %537 = icmp ne i32 %536, 0
  br label %538

538:                                              ; preds = %535, %468
  %539 = phi i1 [ false, %468 ], [ %537, %535 ]
  br i1 %539, label %540, label %544

540:                                              ; preds = %538
  br label %541

541:                                              ; preds = %540
  %542 = load i32, ptr %20, align 4, !tbaa !9
  %543 = add nsw i32 %542, 1
  store i32 %543, ptr %20, align 4, !tbaa !9
  br label %468, !llvm.loop !37

544:                                              ; preds = %538
  %545 = load i32, ptr %20, align 4, !tbaa !9
  %546 = icmp eq i32 %545, 33
  br i1 %546, label %547, label %548

547:                                              ; preds = %544
  store i32 -2147483648, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %637

548:                                              ; preds = %544
  %549 = load i32, ptr %20, align 4, !tbaa !9
  %550 = icmp slt i32 %549, 2
  br i1 %550, label %551, label %553

551:                                              ; preds = %548
  %552 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %552, ptr %9, align 4, !tbaa !9
  br label %634

553:                                              ; preds = %548
  store i32 1, ptr %19, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %554

554:                                              ; preds = %627, %553
  %555 = load i32, ptr %20, align 4, !tbaa !9
  %556 = add nsw i32 %555, -1
  store i32 %556, ptr %20, align 4, !tbaa !9
  %557 = icmp ne i32 %556, 0
  br i1 %557, label %558, label %630

558:                                              ; preds = %554
  %559 = load ptr, ptr %5, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.WavpackStream, ptr %559, i32 0, i32 27
  %561 = getelementptr inbounds %struct.bs, ptr %560, i32 0, i32 5
  %562 = load i32, ptr %561, align 4, !tbaa !28
  %563 = icmp ne i32 %562, 0
  br i1 %563, label %564, label %576

564:                                              ; preds = %558
  %565 = load ptr, ptr %5, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.WavpackStream, ptr %565, i32 0, i32 27
  %567 = getelementptr inbounds %struct.bs, ptr %566, i32 0, i32 5
  %568 = load i32, ptr %567, align 4, !tbaa !28
  %569 = add nsw i32 %568, -1
  store i32 %569, ptr %567, align 4, !tbaa !28
  %570 = load ptr, ptr %5, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.WavpackStream, ptr %570, i32 0, i32 27
  %572 = getelementptr inbounds %struct.bs, ptr %571, i32 0, i32 6
  %573 = load i32, ptr %572, align 8, !tbaa !29
  %574 = and i32 %573, 1
  %575 = icmp ne i32 %574, 0
  br i1 %575, label %610, label %616

576:                                              ; preds = %558
  %577 = load ptr, ptr %5, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.WavpackStream, ptr %577, i32 0, i32 27
  %579 = getelementptr inbounds %struct.bs, ptr %578, i32 0, i32 2
  %580 = load ptr, ptr %579, align 8, !tbaa !11
  %581 = getelementptr inbounds i16, ptr %580, i32 1
  store ptr %581, ptr %579, align 8, !tbaa !11
  %582 = load ptr, ptr %5, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.WavpackStream, ptr %582, i32 0, i32 27
  %584 = getelementptr inbounds %struct.bs, ptr %583, i32 0, i32 1
  %585 = load ptr, ptr %584, align 8, !tbaa !30
  %586 = icmp ne ptr %581, %585
  br i1 %586, label %587, label %588

587:                                              ; preds = %576
  br label %595

588:                                              ; preds = %576
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.WavpackStream, ptr %589, i32 0, i32 27
  %591 = getelementptr inbounds %struct.bs, ptr %590, i32 0, i32 3
  %592 = load ptr, ptr %591, align 8, !tbaa !31
  %593 = load ptr, ptr %5, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.WavpackStream, ptr %593, i32 0, i32 27
  call void %592(ptr noundef %594)
  br label %595

595:                                              ; preds = %588, %587
  %596 = load ptr, ptr %5, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.WavpackStream, ptr %596, i32 0, i32 27
  %598 = getelementptr inbounds %struct.bs, ptr %597, i32 0, i32 5
  store i32 15, ptr %598, align 4, !tbaa !28
  %599 = load ptr, ptr %5, align 8, !tbaa !5
  %600 = getelementptr inbounds %struct.WavpackStream, ptr %599, i32 0, i32 27
  %601 = getelementptr inbounds %struct.bs, ptr %600, i32 0, i32 2
  %602 = load ptr, ptr %601, align 8, !tbaa !11
  %603 = load i16, ptr %602, align 2, !tbaa !32
  %604 = zext i16 %603 to i32
  %605 = load ptr, ptr %5, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.WavpackStream, ptr %605, i32 0, i32 27
  %607 = getelementptr inbounds %struct.bs, ptr %606, i32 0, i32 6
  store i32 %604, ptr %607, align 8, !tbaa !29
  %608 = and i32 %604, 1
  %609 = icmp ne i32 %608, 0
  br i1 %609, label %610, label %616

610:                                              ; preds = %595, %564
  %611 = load ptr, ptr %5, align 8, !tbaa !5
  %612 = getelementptr inbounds %struct.WavpackStream, ptr %611, i32 0, i32 27
  %613 = getelementptr inbounds %struct.bs, ptr %612, i32 0, i32 6
  %614 = load i32, ptr %613, align 8, !tbaa !29
  %615 = lshr i32 %614, 1
  store i32 %615, ptr %613, align 8, !tbaa !29
  br i1 true, label %622, label %626

616:                                              ; preds = %595, %564
  %617 = load ptr, ptr %5, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.WavpackStream, ptr %617, i32 0, i32 27
  %619 = getelementptr inbounds %struct.bs, ptr %618, i32 0, i32 6
  %620 = load i32, ptr %619, align 8, !tbaa !29
  %621 = lshr i32 %620, 1
  store i32 %621, ptr %619, align 8, !tbaa !29
  br i1 false, label %622, label %626

622:                                              ; preds = %616, %610
  %623 = load i32, ptr %19, align 4, !tbaa !9
  %624 = load i32, ptr %9, align 4, !tbaa !9
  %625 = or i32 %624, %623
  store i32 %625, ptr %9, align 4, !tbaa !9
  br label %626

626:                                              ; preds = %622, %616, %610
  br label %627

627:                                              ; preds = %626
  %628 = load i32, ptr %19, align 4, !tbaa !9
  %629 = shl i32 %628, 1
  store i32 %629, ptr %19, align 4, !tbaa !9
  br label %554, !llvm.loop !38

630:                                              ; preds = %554
  %631 = load i32, ptr %19, align 4, !tbaa !9
  %632 = load i32, ptr %9, align 4, !tbaa !9
  %633 = or i32 %632, %631
  store i32 %633, ptr %9, align 4, !tbaa !9
  br label %634

634:                                              ; preds = %630, %551
  %635 = load i32, ptr %9, align 4, !tbaa !9
  %636 = add i32 %635, 16
  store i32 %636, ptr %9, align 4, !tbaa !9
  store i32 0, ptr %15, align 4
  br label %637

637:                                              ; preds = %634, %547
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %638 = load i32, ptr %15, align 4
  switch i32 %638, label %693 [
    i32 0, label %639
  ]

639:                                              ; preds = %637
  br label %640

640:                                              ; preds = %639, %464
  br label %660

641:                                              ; preds = %370
  %642 = load i32, ptr %18, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds [256 x i8], ptr @ones_count_table, i64 0, i64 %643
  %645 = load i8, ptr %644, align 1, !tbaa !39
  %646 = sext i8 %645 to i32
  store i32 %646, ptr %9, align 4, !tbaa !9
  %647 = add i32 %646, 1
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.WavpackStream, ptr %648, i32 0, i32 27
  %650 = getelementptr inbounds %struct.bs, ptr %649, i32 0, i32 5
  %651 = load i32, ptr %650, align 4, !tbaa !28
  %652 = sub i32 %651, %647
  store i32 %652, ptr %650, align 4, !tbaa !28
  %653 = load i32, ptr %9, align 4, !tbaa !9
  %654 = add i32 %653, 1
  %655 = load ptr, ptr %5, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.WavpackStream, ptr %655, i32 0, i32 27
  %657 = getelementptr inbounds %struct.bs, ptr %656, i32 0, i32 6
  %658 = load i32, ptr %657, align 8, !tbaa !29
  %659 = lshr i32 %658, %654
  store i32 %659, ptr %657, align 8, !tbaa !29
  br label %660

660:                                              ; preds = %641, %640
  %661 = load ptr, ptr %5, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.WavpackStream, ptr %661, i32 0, i32 1
  %663 = getelementptr inbounds %struct.words_data, ptr %662, i32 0, i32 3
  %664 = load i32, ptr %663, align 4, !tbaa !24
  %665 = icmp ne i32 %664, 0
  br i1 %665, label %666, label %675

666:                                              ; preds = %660
  %667 = load i32, ptr %9, align 4, !tbaa !9
  %668 = and i32 %667, 1
  %669 = load ptr, ptr %5, align 8, !tbaa !5
  %670 = getelementptr inbounds %struct.WavpackStream, ptr %669, i32 0, i32 1
  %671 = getelementptr inbounds %struct.words_data, ptr %670, i32 0, i32 3
  store i32 %668, ptr %671, align 4, !tbaa !24
  %672 = load i32, ptr %9, align 4, !tbaa !9
  %673 = lshr i32 %672, 1
  %674 = add i32 %673, 1
  store i32 %674, ptr %9, align 4, !tbaa !9
  br label %683

675:                                              ; preds = %660
  %676 = load i32, ptr %9, align 4, !tbaa !9
  %677 = and i32 %676, 1
  %678 = load ptr, ptr %5, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.WavpackStream, ptr %678, i32 0, i32 1
  %680 = getelementptr inbounds %struct.words_data, ptr %679, i32 0, i32 3
  store i32 %677, ptr %680, align 4, !tbaa !24
  %681 = load i32, ptr %9, align 4, !tbaa !9
  %682 = lshr i32 %681, 1
  store i32 %682, ptr %9, align 4, !tbaa !9
  br label %683

683:                                              ; preds = %675, %666
  %684 = load ptr, ptr %5, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.WavpackStream, ptr %684, i32 0, i32 1
  %686 = getelementptr inbounds %struct.words_data, ptr %685, i32 0, i32 3
  %687 = load i32, ptr %686, align 4, !tbaa !24
  %688 = xor i32 %687, -1
  %689 = and i32 %688, 1
  %690 = load ptr, ptr %5, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.WavpackStream, ptr %690, i32 0, i32 1
  %692 = getelementptr inbounds %struct.words_data, ptr %691, i32 0, i32 5
  store i32 %689, ptr %692, align 4, !tbaa !23
  store i32 0, ptr %15, align 4
  br label %693

693:                                              ; preds = %683, %637, %463
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %694 = load i32, ptr %15, align 4
  switch i32 %694, label %1106 [
    i32 0, label %695
  ]

695:                                              ; preds = %693
  br label %696

696:                                              ; preds = %695, %311
  %697 = load ptr, ptr %5, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.WavpackStream, ptr %697, i32 0, i32 0
  %699 = getelementptr inbounds %struct.WavpackHeader, ptr %698, i32 0, i32 3
  %700 = load i32, ptr %699, align 8, !tbaa !40
  %701 = and i32 %700, 8
  %702 = icmp ne i32 %701, 0
  br i1 %702, label %703, label %708

703:                                              ; preds = %696
  %704 = load i32, ptr %6, align 4, !tbaa !9
  %705 = icmp ne i32 %704, 0
  br i1 %705, label %708, label %706

706:                                              ; preds = %703
  %707 = load ptr, ptr %5, align 8, !tbaa !5
  call void @update_error_limit(ptr noundef %707)
  br label %708

708:                                              ; preds = %706, %703, %696
  %709 = load i32, ptr %9, align 4, !tbaa !9
  %710 = icmp eq i32 %709, 0
  br i1 %710, label %711, label %731

711:                                              ; preds = %708
  store i32 0, ptr %10, align 4, !tbaa !9
  %712 = load ptr, ptr %8, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.entropy_data, ptr %712, i32 0, i32 0
  %714 = getelementptr inbounds [3 x i32], ptr %713, i64 0, i64 0
  %715 = load i32, ptr %714, align 4, !tbaa !9
  %716 = lshr i32 %715, 4
  %717 = add i32 %716, 1
  %718 = sub i32 %717, 1
  store i32 %718, ptr %12, align 4, !tbaa !9
  %719 = load ptr, ptr %8, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.entropy_data, ptr %719, i32 0, i32 0
  %721 = getelementptr inbounds [3 x i32], ptr %720, i64 0, i64 0
  %722 = load i32, ptr %721, align 4, !tbaa !9
  %723 = add i32 %722, 126
  %724 = udiv i32 %723, 128
  %725 = mul i32 %724, 2
  %726 = load ptr, ptr %8, align 8, !tbaa !5
  %727 = getelementptr inbounds %struct.entropy_data, ptr %726, i32 0, i32 0
  %728 = getelementptr inbounds [3 x i32], ptr %727, i64 0, i64 0
  %729 = load i32, ptr %728, align 4, !tbaa !9
  %730 = sub i32 %729, %725
  store i32 %730, ptr %728, align 4, !tbaa !9
  br label %854

731:                                              ; preds = %708
  %732 = load ptr, ptr %8, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.entropy_data, ptr %732, i32 0, i32 0
  %734 = getelementptr inbounds [3 x i32], ptr %733, i64 0, i64 0
  %735 = load i32, ptr %734, align 4, !tbaa !9
  %736 = lshr i32 %735, 4
  %737 = add i32 %736, 1
  store i32 %737, ptr %10, align 4, !tbaa !9
  %738 = load ptr, ptr %8, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.entropy_data, ptr %738, i32 0, i32 0
  %740 = getelementptr inbounds [3 x i32], ptr %739, i64 0, i64 0
  %741 = load i32, ptr %740, align 4, !tbaa !9
  %742 = add i32 %741, 128
  %743 = udiv i32 %742, 128
  %744 = mul i32 %743, 5
  %745 = load ptr, ptr %8, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.entropy_data, ptr %745, i32 0, i32 0
  %747 = getelementptr inbounds [3 x i32], ptr %746, i64 0, i64 0
  %748 = load i32, ptr %747, align 4, !tbaa !9
  %749 = add i32 %748, %744
  store i32 %749, ptr %747, align 4, !tbaa !9
  %750 = load i32, ptr %9, align 4, !tbaa !9
  %751 = icmp eq i32 %750, 1
  br i1 %751, label %752, label %774

752:                                              ; preds = %731
  %753 = load i32, ptr %10, align 4, !tbaa !9
  %754 = load ptr, ptr %8, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.entropy_data, ptr %754, i32 0, i32 0
  %756 = getelementptr inbounds [3 x i32], ptr %755, i64 0, i64 1
  %757 = load i32, ptr %756, align 4, !tbaa !9
  %758 = lshr i32 %757, 4
  %759 = add i32 %758, 1
  %760 = add i32 %753, %759
  %761 = sub i32 %760, 1
  store i32 %761, ptr %12, align 4, !tbaa !9
  %762 = load ptr, ptr %8, align 8, !tbaa !5
  %763 = getelementptr inbounds %struct.entropy_data, ptr %762, i32 0, i32 0
  %764 = getelementptr inbounds [3 x i32], ptr %763, i64 0, i64 1
  %765 = load i32, ptr %764, align 4, !tbaa !9
  %766 = add i32 %765, 62
  %767 = udiv i32 %766, 64
  %768 = mul i32 %767, 2
  %769 = load ptr, ptr %8, align 8, !tbaa !5
  %770 = getelementptr inbounds %struct.entropy_data, ptr %769, i32 0, i32 0
  %771 = getelementptr inbounds [3 x i32], ptr %770, i64 0, i64 1
  %772 = load i32, ptr %771, align 4, !tbaa !9
  %773 = sub i32 %772, %768
  store i32 %773, ptr %771, align 4, !tbaa !9
  br label %853

774:                                              ; preds = %731
  %775 = load ptr, ptr %8, align 8, !tbaa !5
  %776 = getelementptr inbounds %struct.entropy_data, ptr %775, i32 0, i32 0
  %777 = getelementptr inbounds [3 x i32], ptr %776, i64 0, i64 1
  %778 = load i32, ptr %777, align 4, !tbaa !9
  %779 = lshr i32 %778, 4
  %780 = add i32 %779, 1
  %781 = load i32, ptr %10, align 4, !tbaa !9
  %782 = add i32 %781, %780
  store i32 %782, ptr %10, align 4, !tbaa !9
  %783 = load ptr, ptr %8, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.entropy_data, ptr %783, i32 0, i32 0
  %785 = getelementptr inbounds [3 x i32], ptr %784, i64 0, i64 1
  %786 = load i32, ptr %785, align 4, !tbaa !9
  %787 = add i32 %786, 64
  %788 = udiv i32 %787, 64
  %789 = mul i32 %788, 5
  %790 = load ptr, ptr %8, align 8, !tbaa !5
  %791 = getelementptr inbounds %struct.entropy_data, ptr %790, i32 0, i32 0
  %792 = getelementptr inbounds [3 x i32], ptr %791, i64 0, i64 1
  %793 = load i32, ptr %792, align 4, !tbaa !9
  %794 = add i32 %793, %789
  store i32 %794, ptr %792, align 4, !tbaa !9
  %795 = load i32, ptr %9, align 4, !tbaa !9
  %796 = icmp eq i32 %795, 2
  br i1 %796, label %797, label %819

797:                                              ; preds = %774
  %798 = load i32, ptr %10, align 4, !tbaa !9
  %799 = load ptr, ptr %8, align 8, !tbaa !5
  %800 = getelementptr inbounds %struct.entropy_data, ptr %799, i32 0, i32 0
  %801 = getelementptr inbounds [3 x i32], ptr %800, i64 0, i64 2
  %802 = load i32, ptr %801, align 4, !tbaa !9
  %803 = lshr i32 %802, 4
  %804 = add i32 %803, 1
  %805 = add i32 %798, %804
  %806 = sub i32 %805, 1
  store i32 %806, ptr %12, align 4, !tbaa !9
  %807 = load ptr, ptr %8, align 8, !tbaa !5
  %808 = getelementptr inbounds %struct.entropy_data, ptr %807, i32 0, i32 0
  %809 = getelementptr inbounds [3 x i32], ptr %808, i64 0, i64 2
  %810 = load i32, ptr %809, align 4, !tbaa !9
  %811 = add i32 %810, 30
  %812 = udiv i32 %811, 32
  %813 = mul i32 %812, 2
  %814 = load ptr, ptr %8, align 8, !tbaa !5
  %815 = getelementptr inbounds %struct.entropy_data, ptr %814, i32 0, i32 0
  %816 = getelementptr inbounds [3 x i32], ptr %815, i64 0, i64 2
  %817 = load i32, ptr %816, align 4, !tbaa !9
  %818 = sub i32 %817, %813
  store i32 %818, ptr %816, align 4, !tbaa !9
  br label %852

819:                                              ; preds = %774
  %820 = load i32, ptr %9, align 4, !tbaa !9
  %821 = sub i32 %820, 2
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = getelementptr inbounds %struct.entropy_data, ptr %822, i32 0, i32 0
  %824 = getelementptr inbounds [3 x i32], ptr %823, i64 0, i64 2
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = lshr i32 %825, 4
  %827 = add i32 %826, 1
  %828 = mul i32 %821, %827
  %829 = load i32, ptr %10, align 4, !tbaa !9
  %830 = add i32 %829, %828
  store i32 %830, ptr %10, align 4, !tbaa !9
  %831 = load i32, ptr %10, align 4, !tbaa !9
  %832 = load ptr, ptr %8, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.entropy_data, ptr %832, i32 0, i32 0
  %834 = getelementptr inbounds [3 x i32], ptr %833, i64 0, i64 2
  %835 = load i32, ptr %834, align 4, !tbaa !9
  %836 = lshr i32 %835, 4
  %837 = add i32 %836, 1
  %838 = add i32 %831, %837
  %839 = sub i32 %838, 1
  store i32 %839, ptr %12, align 4, !tbaa !9
  %840 = load ptr, ptr %8, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.entropy_data, ptr %840, i32 0, i32 0
  %842 = getelementptr inbounds [3 x i32], ptr %841, i64 0, i64 2
  %843 = load i32, ptr %842, align 4, !tbaa !9
  %844 = add i32 %843, 32
  %845 = udiv i32 %844, 32
  %846 = mul i32 %845, 5
  %847 = load ptr, ptr %8, align 8, !tbaa !5
  %848 = getelementptr inbounds %struct.entropy_data, ptr %847, i32 0, i32 0
  %849 = getelementptr inbounds [3 x i32], ptr %848, i64 0, i64 2
  %850 = load i32, ptr %849, align 4, !tbaa !9
  %851 = add i32 %850, %846
  store i32 %851, ptr %849, align 4, !tbaa !9
  br label %852

852:                                              ; preds = %819, %797
  br label %853

853:                                              ; preds = %852, %752
  br label %854

854:                                              ; preds = %853, %711
  %855 = load i32, ptr %10, align 4, !tbaa !9
  %856 = and i32 %855, 2147483647
  store i32 %856, ptr %10, align 4, !tbaa !9
  %857 = load i32, ptr %12, align 4, !tbaa !9
  %858 = and i32 %857, 2147483647
  store i32 %858, ptr %12, align 4, !tbaa !9
  %859 = load i32, ptr %10, align 4, !tbaa !9
  %860 = load i32, ptr %12, align 4, !tbaa !9
  %861 = icmp ugt i32 %859, %860
  br i1 %861, label %862, label %864

862:                                              ; preds = %854
  %863 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %863, ptr %12, align 4, !tbaa !9
  br label %864

864:                                              ; preds = %862, %854
  %865 = load i32, ptr %12, align 4, !tbaa !9
  %866 = load i32, ptr %10, align 4, !tbaa !9
  %867 = add i32 %865, %866
  %868 = add i32 %867, 1
  %869 = lshr i32 %868, 1
  store i32 %869, ptr %11, align 4, !tbaa !9
  %870 = load ptr, ptr %8, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.entropy_data, ptr %870, i32 0, i32 2
  %872 = load i32, ptr %871, align 4, !tbaa !41
  %873 = icmp ne i32 %872, 0
  br i1 %873, label %883, label %874

874:                                              ; preds = %864
  %875 = load ptr, ptr %5, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.WavpackStream, ptr %875, i32 0, i32 27
  %877 = load i32, ptr %12, align 4, !tbaa !9
  %878 = load i32, ptr %10, align 4, !tbaa !9
  %879 = sub i32 %877, %878
  %880 = call i32 @read_code(ptr noundef %876, i32 noundef %879)
  %881 = load i32, ptr %10, align 4, !tbaa !9
  %882 = add i32 %880, %881
  store i32 %882, ptr %11, align 4, !tbaa !9
  br label %971

883:                                              ; preds = %864
  br label %884

884:                                              ; preds = %969, %883
  %885 = load i32, ptr %12, align 4, !tbaa !9
  %886 = load i32, ptr %10, align 4, !tbaa !9
  %887 = sub i32 %885, %886
  %888 = load ptr, ptr %8, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.entropy_data, ptr %888, i32 0, i32 2
  %890 = load i32, ptr %889, align 4, !tbaa !41
  %891 = icmp ugt i32 %887, %890
  br i1 %891, label %892, label %970

892:                                              ; preds = %884
  %893 = load ptr, ptr %5, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.WavpackStream, ptr %893, i32 0, i32 27
  %895 = getelementptr inbounds %struct.bs, ptr %894, i32 0, i32 5
  %896 = load i32, ptr %895, align 4, !tbaa !28
  %897 = icmp ne i32 %896, 0
  br i1 %897, label %898, label %910

898:                                              ; preds = %892
  %899 = load ptr, ptr %5, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.WavpackStream, ptr %899, i32 0, i32 27
  %901 = getelementptr inbounds %struct.bs, ptr %900, i32 0, i32 5
  %902 = load i32, ptr %901, align 4, !tbaa !28
  %903 = add nsw i32 %902, -1
  store i32 %903, ptr %901, align 4, !tbaa !28
  %904 = load ptr, ptr %5, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.WavpackStream, ptr %904, i32 0, i32 27
  %906 = getelementptr inbounds %struct.bs, ptr %905, i32 0, i32 6
  %907 = load i32, ptr %906, align 8, !tbaa !29
  %908 = and i32 %907, 1
  %909 = icmp ne i32 %908, 0
  br i1 %909, label %944, label %950

910:                                              ; preds = %892
  %911 = load ptr, ptr %5, align 8, !tbaa !5
  %912 = getelementptr inbounds %struct.WavpackStream, ptr %911, i32 0, i32 27
  %913 = getelementptr inbounds %struct.bs, ptr %912, i32 0, i32 2
  %914 = load ptr, ptr %913, align 8, !tbaa !11
  %915 = getelementptr inbounds i16, ptr %914, i32 1
  store ptr %915, ptr %913, align 8, !tbaa !11
  %916 = load ptr, ptr %5, align 8, !tbaa !5
  %917 = getelementptr inbounds %struct.WavpackStream, ptr %916, i32 0, i32 27
  %918 = getelementptr inbounds %struct.bs, ptr %917, i32 0, i32 1
  %919 = load ptr, ptr %918, align 8, !tbaa !30
  %920 = icmp ne ptr %915, %919
  br i1 %920, label %921, label %922

921:                                              ; preds = %910
  br label %929

922:                                              ; preds = %910
  %923 = load ptr, ptr %5, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.WavpackStream, ptr %923, i32 0, i32 27
  %925 = getelementptr inbounds %struct.bs, ptr %924, i32 0, i32 3
  %926 = load ptr, ptr %925, align 8, !tbaa !31
  %927 = load ptr, ptr %5, align 8, !tbaa !5
  %928 = getelementptr inbounds %struct.WavpackStream, ptr %927, i32 0, i32 27
  call void %926(ptr noundef %928)
  br label %929

929:                                              ; preds = %922, %921
  %930 = load ptr, ptr %5, align 8, !tbaa !5
  %931 = getelementptr inbounds %struct.WavpackStream, ptr %930, i32 0, i32 27
  %932 = getelementptr inbounds %struct.bs, ptr %931, i32 0, i32 5
  store i32 15, ptr %932, align 4, !tbaa !28
  %933 = load ptr, ptr %5, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.WavpackStream, ptr %933, i32 0, i32 27
  %935 = getelementptr inbounds %struct.bs, ptr %934, i32 0, i32 2
  %936 = load ptr, ptr %935, align 8, !tbaa !11
  %937 = load i16, ptr %936, align 2, !tbaa !32
  %938 = zext i16 %937 to i32
  %939 = load ptr, ptr %5, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.WavpackStream, ptr %939, i32 0, i32 27
  %941 = getelementptr inbounds %struct.bs, ptr %940, i32 0, i32 6
  store i32 %938, ptr %941, align 8, !tbaa !29
  %942 = and i32 %938, 1
  %943 = icmp ne i32 %942, 0
  br i1 %943, label %944, label %950

944:                                              ; preds = %929, %898
  %945 = load ptr, ptr %5, align 8, !tbaa !5
  %946 = getelementptr inbounds %struct.WavpackStream, ptr %945, i32 0, i32 27
  %947 = getelementptr inbounds %struct.bs, ptr %946, i32 0, i32 6
  %948 = load i32, ptr %947, align 8, !tbaa !29
  %949 = lshr i32 %948, 1
  store i32 %949, ptr %947, align 8, !tbaa !29
  br i1 true, label %956, label %962

950:                                              ; preds = %929, %898
  %951 = load ptr, ptr %5, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.WavpackStream, ptr %951, i32 0, i32 27
  %953 = getelementptr inbounds %struct.bs, ptr %952, i32 0, i32 6
  %954 = load i32, ptr %953, align 8, !tbaa !29
  %955 = lshr i32 %954, 1
  store i32 %955, ptr %953, align 8, !tbaa !29
  br i1 false, label %956, label %962

956:                                              ; preds = %950, %944
  %957 = load i32, ptr %12, align 4, !tbaa !9
  %958 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %958, ptr %10, align 4, !tbaa !9
  %959 = add i32 %957, %958
  %960 = add i32 %959, 1
  %961 = lshr i32 %960, 1
  store i32 %961, ptr %11, align 4, !tbaa !9
  br label %969

962:                                              ; preds = %950, %944
  %963 = load i32, ptr %11, align 4, !tbaa !9
  %964 = sub i32 %963, 1
  store i32 %964, ptr %12, align 4, !tbaa !9
  %965 = load i32, ptr %10, align 4, !tbaa !9
  %966 = add i32 %964, %965
  %967 = add i32 %966, 1
  %968 = lshr i32 %967, 1
  store i32 %968, ptr %11, align 4, !tbaa !9
  br label %969

969:                                              ; preds = %962, %956
  br label %884, !llvm.loop !42

970:                                              ; preds = %884
  br label %971

971:                                              ; preds = %970, %874
  %972 = load ptr, ptr %5, align 8, !tbaa !5
  %973 = getelementptr inbounds %struct.WavpackStream, ptr %972, i32 0, i32 27
  %974 = getelementptr inbounds %struct.bs, ptr %973, i32 0, i32 5
  %975 = load i32, ptr %974, align 4, !tbaa !28
  %976 = icmp ne i32 %975, 0
  br i1 %976, label %977, label %989

977:                                              ; preds = %971
  %978 = load ptr, ptr %5, align 8, !tbaa !5
  %979 = getelementptr inbounds %struct.WavpackStream, ptr %978, i32 0, i32 27
  %980 = getelementptr inbounds %struct.bs, ptr %979, i32 0, i32 5
  %981 = load i32, ptr %980, align 4, !tbaa !28
  %982 = add nsw i32 %981, -1
  store i32 %982, ptr %980, align 4, !tbaa !28
  %983 = load ptr, ptr %5, align 8, !tbaa !5
  %984 = getelementptr inbounds %struct.WavpackStream, ptr %983, i32 0, i32 27
  %985 = getelementptr inbounds %struct.bs, ptr %984, i32 0, i32 6
  %986 = load i32, ptr %985, align 8, !tbaa !29
  %987 = and i32 %986, 1
  %988 = icmp ne i32 %987, 0
  br i1 %988, label %1023, label %1029

989:                                              ; preds = %971
  %990 = load ptr, ptr %5, align 8, !tbaa !5
  %991 = getelementptr inbounds %struct.WavpackStream, ptr %990, i32 0, i32 27
  %992 = getelementptr inbounds %struct.bs, ptr %991, i32 0, i32 2
  %993 = load ptr, ptr %992, align 8, !tbaa !11
  %994 = getelementptr inbounds i16, ptr %993, i32 1
  store ptr %994, ptr %992, align 8, !tbaa !11
  %995 = load ptr, ptr %5, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.WavpackStream, ptr %995, i32 0, i32 27
  %997 = getelementptr inbounds %struct.bs, ptr %996, i32 0, i32 1
  %998 = load ptr, ptr %997, align 8, !tbaa !30
  %999 = icmp ne ptr %994, %998
  br i1 %999, label %1000, label %1001

1000:                                             ; preds = %989
  br label %1008

1001:                                             ; preds = %989
  %1002 = load ptr, ptr %5, align 8, !tbaa !5
  %1003 = getelementptr inbounds %struct.WavpackStream, ptr %1002, i32 0, i32 27
  %1004 = getelementptr inbounds %struct.bs, ptr %1003, i32 0, i32 3
  %1005 = load ptr, ptr %1004, align 8, !tbaa !31
  %1006 = load ptr, ptr %5, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.WavpackStream, ptr %1006, i32 0, i32 27
  call void %1005(ptr noundef %1007)
  br label %1008

1008:                                             ; preds = %1001, %1000
  %1009 = load ptr, ptr %5, align 8, !tbaa !5
  %1010 = getelementptr inbounds %struct.WavpackStream, ptr %1009, i32 0, i32 27
  %1011 = getelementptr inbounds %struct.bs, ptr %1010, i32 0, i32 5
  store i32 15, ptr %1011, align 4, !tbaa !28
  %1012 = load ptr, ptr %5, align 8, !tbaa !5
  %1013 = getelementptr inbounds %struct.WavpackStream, ptr %1012, i32 0, i32 27
  %1014 = getelementptr inbounds %struct.bs, ptr %1013, i32 0, i32 2
  %1015 = load ptr, ptr %1014, align 8, !tbaa !11
  %1016 = load i16, ptr %1015, align 2, !tbaa !32
  %1017 = zext i16 %1016 to i32
  %1018 = load ptr, ptr %5, align 8, !tbaa !5
  %1019 = getelementptr inbounds %struct.WavpackStream, ptr %1018, i32 0, i32 27
  %1020 = getelementptr inbounds %struct.bs, ptr %1019, i32 0, i32 6
  store i32 %1017, ptr %1020, align 8, !tbaa !29
  %1021 = and i32 %1017, 1
  %1022 = icmp ne i32 %1021, 0
  br i1 %1022, label %1023, label %1029

1023:                                             ; preds = %1008, %977
  %1024 = load ptr, ptr %5, align 8, !tbaa !5
  %1025 = getelementptr inbounds %struct.WavpackStream, ptr %1024, i32 0, i32 27
  %1026 = getelementptr inbounds %struct.bs, ptr %1025, i32 0, i32 6
  %1027 = load i32, ptr %1026, align 8, !tbaa !29
  %1028 = lshr i32 %1027, 1
  store i32 %1028, ptr %1026, align 8, !tbaa !29
  br label %1035

1029:                                             ; preds = %1008, %977
  %1030 = load ptr, ptr %5, align 8, !tbaa !5
  %1031 = getelementptr inbounds %struct.WavpackStream, ptr %1030, i32 0, i32 27
  %1032 = getelementptr inbounds %struct.bs, ptr %1031, i32 0, i32 6
  %1033 = load i32, ptr %1032, align 8, !tbaa !29
  %1034 = lshr i32 %1033, 1
  store i32 %1034, ptr %1032, align 8, !tbaa !29
  br label %1035

1035:                                             ; preds = %1029, %1023
  %1036 = phi i32 [ 1, %1023 ], [ 0, %1029 ]
  store i32 %1036, ptr %14, align 4, !tbaa !9
  %1037 = load ptr, ptr %5, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.WavpackStream, ptr %1037, i32 0, i32 28
  %1039 = getelementptr inbounds %struct.bs, ptr %1038, i32 0, i32 2
  %1040 = load ptr, ptr %1039, align 8, !tbaa !43
  %1041 = icmp ne ptr %1040, null
  br i1 %1041, label %1042, label %1073

1042:                                             ; preds = %1035
  %1043 = load ptr, ptr %8, align 8, !tbaa !5
  %1044 = getelementptr inbounds %struct.entropy_data, ptr %1043, i32 0, i32 2
  %1045 = load i32, ptr %1044, align 4, !tbaa !41
  %1046 = icmp ne i32 %1045, 0
  br i1 %1046, label %1047, label %1073

1047:                                             ; preds = %1042
  %1048 = load ptr, ptr %5, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.WavpackStream, ptr %1048, i32 0, i32 28
  %1050 = load i32, ptr %12, align 4, !tbaa !9
  %1051 = load i32, ptr %10, align 4, !tbaa !9
  %1052 = sub i32 %1050, %1051
  %1053 = call i32 @read_code(ptr noundef %1049, i32 noundef %1052)
  %1054 = load i32, ptr %10, align 4, !tbaa !9
  %1055 = add i32 %1053, %1054
  store i32 %1055, ptr %13, align 4, !tbaa !9
  %1056 = load ptr, ptr %7, align 8, !tbaa !5
  %1057 = icmp ne ptr %1056, null
  br i1 %1057, label %1058, label %1072

1058:                                             ; preds = %1047
  %1059 = load i32, ptr %14, align 4, !tbaa !9
  %1060 = icmp ne i32 %1059, 0
  br i1 %1060, label %1061, label %1065

1061:                                             ; preds = %1058
  %1062 = load i32, ptr %11, align 4, !tbaa !9
  %1063 = load i32, ptr %13, align 4, !tbaa !9
  %1064 = sub i32 %1062, %1063
  br label %1069

1065:                                             ; preds = %1058
  %1066 = load i32, ptr %13, align 4, !tbaa !9
  %1067 = load i32, ptr %11, align 4, !tbaa !9
  %1068 = sub i32 %1066, %1067
  br label %1069

1069:                                             ; preds = %1065, %1061
  %1070 = phi i32 [ %1064, %1061 ], [ %1068, %1065 ]
  %1071 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 %1070, ptr %1071, align 4, !tbaa !9
  br label %1072

1072:                                             ; preds = %1069, %1047
  br label %1073

1073:                                             ; preds = %1072, %1042, %1035
  %1074 = load ptr, ptr %5, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.WavpackStream, ptr %1074, i32 0, i32 0
  %1076 = getelementptr inbounds %struct.WavpackHeader, ptr %1075, i32 0, i32 3
  %1077 = load i32, ptr %1076, align 8, !tbaa !40
  %1078 = and i32 %1077, 512
  %1079 = icmp ne i32 %1078, 0
  br i1 %1079, label %1080, label %1096

1080:                                             ; preds = %1073
  %1081 = load ptr, ptr %8, align 8, !tbaa !5
  %1082 = getelementptr inbounds %struct.entropy_data, ptr %1081, i32 0, i32 1
  %1083 = load i32, ptr %1082, align 4, !tbaa !26
  %1084 = add i32 %1083, 128
  %1085 = lshr i32 %1084, 8
  %1086 = load ptr, ptr %8, align 8, !tbaa !5
  %1087 = getelementptr inbounds %struct.entropy_data, ptr %1086, i32 0, i32 1
  %1088 = load i32, ptr %1087, align 4, !tbaa !26
  %1089 = sub i32 %1088, %1085
  store i32 %1089, ptr %1087, align 4, !tbaa !26
  %1090 = load i32, ptr %11, align 4, !tbaa !9
  %1091 = call i32 @wp_log2(i32 noundef %1090)
  %1092 = load ptr, ptr %8, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.entropy_data, ptr %1092, i32 0, i32 1
  %1094 = load i32, ptr %1093, align 4, !tbaa !26
  %1095 = add i32 %1094, %1091
  store i32 %1095, ptr %1093, align 4, !tbaa !26
  br label %1096

1096:                                             ; preds = %1080, %1073
  %1097 = load i32, ptr %14, align 4, !tbaa !9
  %1098 = icmp ne i32 %1097, 0
  br i1 %1098, label %1099, label %1102

1099:                                             ; preds = %1096
  %1100 = load i32, ptr %11, align 4, !tbaa !9
  %1101 = xor i32 %1100, -1
  br label %1104

1102:                                             ; preds = %1096
  %1103 = load i32, ptr %11, align 4, !tbaa !9
  br label %1104

1104:                                             ; preds = %1102, %1099
  %1105 = phi i32 [ %1101, %1099 ], [ %1103, %1102 ]
  store i32 %1105, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %1106

1106:                                             ; preds = %1104, %693, %302, %33
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  %1107 = load i32, ptr %4, align 4
  ret i32 %1107
}

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

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

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

declare void @update_error_limit(ptr noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_code(ptr noundef, i32 noundef) #4

declare i32 @wp_log2(i32 noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 216}
!12 = !{!"", !13, i64 0, !15, i64 12, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !16, i64 128, !16, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !7, i64 156, !7, i64 157, !7, i64 158, !7, i64 159, !7, i64 160, !7, i64 161, !7, i64 162, !10, i64 164, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !10, i64 192, !17, i64 200, !17, i64 248, !17, i64 296, !18, i64 344, !7, i64 348, !7, i64 349, !7, i64 350, !7, i64 351, !7, i64 352, !7, i64 353, !7, i64 354, !7, i64 355, !19, i64 360, !7, i64 432, !21, i64 1968, !6, i64 2064, !22, i64 2072}
!13 = !{!"", !7, i64 0, !14, i64 4, !14, i64 6, !10, i64 8}
!14 = !{!"short", !7, i64 0}
!15 = !{!"words_data", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !7, i64 36}
!16 = !{!"long", !7, i64 0}
!17 = !{!"bs", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !10, i64 40}
!18 = !{!"float", !7, i64 0}
!19 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !20, i64 24, !20, i64 32, !20, i64 40, !6, i64 48, !6, i64 56, !10, i64 64}
!20 = !{!"double", !7, i64 0}
!21 = !{!"decorr_pass", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !7, i64 16, !7, i64 48, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92}
!22 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !7, i64 40, !7, i64 41, !10, i64 44, !10, i64 48, !10, i64 52, !6, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !7, i64 76, !6, i64 160}
!23 = !{!12, !10, i64 40}
!24 = !{!12, !10, i64 32}
!25 = !{!12, !10, i64 36}
!26 = !{!27, !10, i64 12}
!27 = !{!"entropy_data", !7, i64 0, !10, i64 12, !10, i64 16}
!28 = !{!12, !10, i64 236}
!29 = !{!12, !10, i64 240}
!30 = !{!12, !6, i64 208}
!31 = !{!12, !6, i64 224}
!32 = !{!14, !14, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34}
!37 = distinct !{!37, !34}
!38 = distinct !{!38, !34}
!39 = !{!7, !7, i64 0}
!40 = !{!12, !10, i64 8}
!41 = !{!27, !10, i64 16}
!42 = distinct !{!42, !34}
!43 = !{!12, !6, i64 264}


; 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.entropy_data = type { [3 x i32], i32, i32 }

@ones_count_table = external hidden local_unnamed_addr constant [256 x i8], align 16

; Function Attrs: nounwind uwtable
define dso_local i32 @get_word(ptr noundef %0, i32 noundef %1, ptr noundef writeonly %2) local_unnamed_addr #0 {
  %4 = getelementptr inbounds i8, ptr %0, i64 48
  %5 = sext i32 %1 to i64
  %6 = getelementptr inbounds %struct.entropy_data, ptr %4, i64 %5
  %7 = getelementptr inbounds i8, ptr %0, i64 200
  %8 = getelementptr inbounds i8, ptr %0, i64 216
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %.not = icmp eq ptr %9, null
  br i1 %.not, label %.thread338, label %10

10:                                               ; preds = %3
  %.not282 = icmp eq ptr %2, null
  br i1 %.not282, label %12, label %11

11:                                               ; preds = %10
  store i32 0, ptr %2, align 4, !tbaa !21
  br label %12

12:                                               ; preds = %11, %10
  %13 = load i32, ptr %4, align 4, !tbaa !21
  %.not283 = icmp ult i32 %13, 2
  br i1 %.not283, label %14, label %112

14:                                               ; preds = %12
  %15 = getelementptr inbounds i8, ptr %0, i64 40
  %16 = load i32, ptr %15, align 4, !tbaa !22
  %.not284 = icmp eq i32 %16, 0
  br i1 %.not284, label %17, label %112

17:                                               ; preds = %14
  %18 = getelementptr inbounds i8, ptr %0, i64 32
  %19 = load i32, ptr %18, align 4, !tbaa !23
  %.not285 = icmp eq i32 %19, 0
  br i1 %.not285, label %20, label %112

20:                                               ; preds = %17
  %21 = getelementptr inbounds i8, ptr %0, i64 68
  %22 = load i32, ptr %21, align 4, !tbaa !21
  %.not286 = icmp ult i32 %22, 2
  br i1 %.not286, label %23, label %112

23:                                               ; preds = %20
  %24 = getelementptr inbounds i8, ptr %0, i64 36
  %25 = load i32, ptr %24, align 4, !tbaa !24
  %.not287 = icmp eq i32 %25, 0
  br i1 %.not287, label %.preheader356, label %30

.preheader356:                                    ; preds = %23
  %26 = getelementptr inbounds i8, ptr %0, i64 236
  %27 = getelementptr inbounds i8, ptr %0, i64 240
  %28 = getelementptr inbounds i8, ptr %0, i64 208
  %29 = getelementptr inbounds i8, ptr %0, i64 224
  %.pre = load i32, ptr %26, align 4, !tbaa !25
  br label %38

30:                                               ; preds = %23
  %31 = add i32 %25, -1
  store i32 %31, ptr %24, align 4, !tbaa !24
  %.not299 = icmp eq i32 %31, 0
  br i1 %.not299, label %112, label %32

32:                                               ; preds = %30
  %33 = getelementptr inbounds i8, ptr %6, i64 12
  %34 = load i32, ptr %33, align 4, !tbaa !26
  %35 = add i32 %34, 128
  %36 = lshr i32 %35, 8
  %37 = sub i32 %34, %36
  store i32 %37, ptr %33, align 4, !tbaa !26
  br label %.thread338

38:                                               ; preds = %.preheader356, %.critedge335
  %39 = phi ptr [ %9, %.preheader356 ], [ %56, %.critedge335 ]
  %40 = phi i32 [ %.pre, %.preheader356 ], [ %57, %.critedge335 ]
  %.0242363 = phi i32 [ 0, %.preheader356 ], [ %59, %.critedge335 ]
  %.not288 = icmp eq i32 %40, 0
  br i1 %.not288, label %45, label %41

41:                                               ; preds = %38
  %42 = add nsw i32 %40, -1
  store i32 %42, ptr %26, align 4, !tbaa !25
  %43 = load i32, ptr %27, align 8, !tbaa !28
  %44 = and i32 %43, 1
  %.not291 = icmp eq i32 %44, 0
  br i1 %.not291, label %60, label %.critedge335

45:                                               ; preds = %38
  %46 = getelementptr inbounds i8, ptr %39, i64 2
  store ptr %46, ptr %8, align 8, !tbaa !5
  %47 = load ptr, ptr %28, align 8, !tbaa !29
  %.not289 = icmp eq ptr %46, %47
  br i1 %.not289, label %48, label %50

48:                                               ; preds = %45
  %49 = load ptr, ptr %29, align 8, !tbaa !30
  tail call void %49(ptr noundef nonnull %7) #5
  %.pre392 = load ptr, ptr %8, align 8, !tbaa !5
  br label %50

50:                                               ; preds = %45, %48
  %51 = phi ptr [ %46, %45 ], [ %.pre392, %48 ]
  store i32 15, ptr %26, align 4, !tbaa !25
  %52 = load i16, ptr %51, align 2, !tbaa !31
  %53 = zext i16 %52 to i32
  store i32 %53, ptr %27, align 8, !tbaa !28
  %54 = and i32 %53, 1
  %.not290 = icmp eq i32 %54, 0
  br i1 %.not290, label %60, label %.critedge335

.critedge335:                                     ; preds = %50, %41
  %55 = phi i32 [ %53, %50 ], [ %43, %41 ]
  %56 = phi ptr [ %51, %50 ], [ %39, %41 ]
  %57 = phi i32 [ 15, %50 ], [ %42, %41 ]
  %58 = lshr i32 %55, 1
  store i32 %58, ptr %27, align 8, !tbaa !28
  %59 = add nuw nsw i32 %.0242363, 1
  %exitcond.not = icmp eq i32 %59, 33
  br i1 %exitcond.not, label %.thread338, label %38, !llvm.loop !32

60:                                               ; preds = %41, %50
  %61 = phi ptr [ %39, %41 ], [ %51, %50 ]
  %62 = phi i32 [ %42, %41 ], [ 15, %50 ]
  %63 = phi i32 [ %43, %41 ], [ %53, %50 ]
  %64 = lshr i32 %63, 1
  store i32 %64, ptr %27, align 8, !tbaa !28
  %65 = icmp ult i32 %.0242363, 2
  br i1 %65, label %104, label %.lr.ph

.lr.ph:                                           ; preds = %60
  store i32 0, ptr %24, align 4, !tbaa !24
  %66 = add nsw i32 %.0242363, -1
  br label %67

67:                                               ; preds = %.lr.ph, %97
  %68 = phi ptr [ %61, %.lr.ph ], [ %98, %97 ]
  %69 = phi i32 [ %64, %.lr.ph ], [ %99, %97 ]
  %70 = phi i32 [ %62, %.lr.ph ], [ %100, %97 ]
  %71 = phi i32 [ %66, %.lr.ph ], [ %102, %97 ]
  %.0244365 = phi i32 [ 1, %.lr.ph ], [ %101, %97 ]
  %.not294 = icmp eq i32 %70, 0
  br i1 %.not294, label %75, label %72

72:                                               ; preds = %67
  %73 = add nsw i32 %70, -1
  store i32 %73, ptr %26, align 4, !tbaa !25
  %74 = and i32 %69, 1
  %.not297 = icmp eq i32 %74, 0
  br i1 %.not297, label %92, label %85

75:                                               ; preds = %67
  %76 = getelementptr inbounds i8, ptr %68, i64 2
  store ptr %76, ptr %8, align 8, !tbaa !5
  %77 = load ptr, ptr %28, align 8, !tbaa !29
  %.not295 = icmp eq ptr %76, %77
  br i1 %.not295, label %78, label %80

78:                                               ; preds = %75
  %79 = load ptr, ptr %29, align 8, !tbaa !30
  tail call void %79(ptr noundef nonnull %7) #5
  %.pre393 = load ptr, ptr %8, align 8, !tbaa !5
  br label %80

80:                                               ; preds = %75, %78
  %81 = phi ptr [ %76, %75 ], [ %.pre393, %78 ]
  store i32 15, ptr %26, align 4, !tbaa !25
  %82 = load i16, ptr %81, align 2, !tbaa !31
  %83 = zext i16 %82 to i32
  %84 = and i32 %83, 1
  %.not296 = icmp eq i32 %84, 0
  br i1 %.not296, label %92, label %85

85:                                               ; preds = %80, %72
  %86 = phi i32 [ %83, %80 ], [ %69, %72 ]
  %87 = phi ptr [ %81, %80 ], [ %68, %72 ]
  %88 = phi i32 [ 15, %80 ], [ %73, %72 ]
  %89 = lshr i32 %86, 1
  store i32 %89, ptr %27, align 8, !tbaa !28
  %90 = load i32, ptr %24, align 4, !tbaa !24
  %91 = or i32 %90, %.0244365
  store i32 %91, ptr %24, align 4, !tbaa !24
  br label %97

92:                                               ; preds = %80, %72
  %93 = phi i32 [ %83, %80 ], [ %69, %72 ]
  %94 = phi ptr [ %81, %80 ], [ %68, %72 ]
  %95 = phi i32 [ 15, %80 ], [ %73, %72 ]
  %96 = lshr i32 %93, 1
  store i32 %96, ptr %27, align 8, !tbaa !28
  br label %97

97:                                               ; preds = %85, %92
  %98 = phi ptr [ %87, %85 ], [ %94, %92 ]
  %99 = phi i32 [ %89, %85 ], [ %96, %92 ]
  %100 = phi i32 [ %88, %85 ], [ %95, %92 ]
  %101 = shl i32 %.0244365, 1
  %102 = add nsw i32 %71, -1
  %.not293 = icmp eq i32 %102, 0
  br i1 %.not293, label %._crit_edge, label %67, !llvm.loop !34

._crit_edge:                                      ; preds = %97
  %.pre394 = load i32, ptr %24, align 4, !tbaa !24
  %103 = or i32 %.pre394, %101
  br label %104

104:                                              ; preds = %60, %._crit_edge
  %105 = phi ptr [ %98, %._crit_edge ], [ %61, %60 ]
  %storemerge = phi i32 [ %103, %._crit_edge ], [ %.0242363, %60 ]
  store i32 %storemerge, ptr %24, align 4, !tbaa !24
  %.not298 = icmp eq i32 %storemerge, 0
  br i1 %.not298, label %112, label %106

106:                                              ; preds = %104
  %107 = getelementptr inbounds i8, ptr %6, i64 12
  %108 = load i32, ptr %107, align 4, !tbaa !26
  %109 = add i32 %108, 128
  %110 = lshr i32 %109, 8
  %111 = sub i32 %108, %110
  store i32 %111, ptr %107, align 4, !tbaa !26
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %4, i8 0, i64 12, i1 false)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %21, i8 0, i64 12, i1 false)
  br label %.thread338

112:                                              ; preds = %104, %30, %20, %17, %14, %12
  %113 = phi ptr [ %105, %104 ], [ %9, %30 ], [ %9, %20 ], [ %9, %17 ], [ %9, %14 ], [ %9, %12 ]
  %114 = getelementptr inbounds i8, ptr %0, i64 40
  %115 = load i32, ptr %114, align 4, !tbaa !22
  %.not300 = icmp eq i32 %115, 0
  br i1 %.not300, label %116, label %372

116:                                              ; preds = %112
  %117 = getelementptr inbounds i8, ptr %0, i64 236
  %118 = load i32, ptr %117, align 4, !tbaa !25
  %119 = icmp slt i32 %118, 8
  br i1 %119, label %120, label %138

120:                                              ; preds = %116
  %121 = getelementptr inbounds i8, ptr %113, i64 2
  store ptr %121, ptr %8, align 8, !tbaa !5
  %122 = getelementptr inbounds i8, ptr %0, i64 208
  %123 = load ptr, ptr %122, align 8, !tbaa !29
  %124 = icmp eq ptr %121, %123
  br i1 %124, label %125, label %128

125:                                              ; preds = %120
  %126 = getelementptr inbounds i8, ptr %0, i64 224
  %127 = load ptr, ptr %126, align 8, !tbaa !30
  tail call void %127(ptr noundef nonnull %7) #5
  %.pre395 = load ptr, ptr %8, align 8, !tbaa !5
  %.pre396 = load i32, ptr %117, align 4, !tbaa !25
  br label %128

128:                                              ; preds = %125, %120
  %129 = phi i32 [ %.pre396, %125 ], [ %118, %120 ]
  %130 = phi ptr [ %.pre395, %125 ], [ %121, %120 ]
  %131 = load i16, ptr %130, align 2, !tbaa !31
  %132 = zext i16 %131 to i32
  %133 = shl i32 %132, %129
  %134 = getelementptr inbounds i8, ptr %0, i64 240
  %135 = load i32, ptr %134, align 8, !tbaa !28
  %136 = or i32 %135, %133
  store i32 %136, ptr %134, align 8, !tbaa !28
  %137 = add i32 %129, 16
  store i32 %137, ptr %117, align 4, !tbaa !25
  br label %141

138:                                              ; preds = %116
  %139 = getelementptr inbounds i8, ptr %0, i64 240
  %140 = load i32, ptr %139, align 8, !tbaa !28
  br label %141

141:                                              ; preds = %138, %128
  %142 = phi ptr [ %130, %128 ], [ %113, %138 ]
  %143 = phi i32 [ %137, %128 ], [ %118, %138 ]
  %144 = phi i32 [ %136, %128 ], [ %140, %138 ]
  %.0241 = and i32 %144, 255
  %145 = icmp eq i32 %.0241, 255
  br i1 %145, label %146, label %357

146:                                              ; preds = %141
  %147 = add nsw i32 %143, -8
  store i32 %147, ptr %117, align 4, !tbaa !25
  %148 = getelementptr inbounds i8, ptr %0, i64 240
  %149 = lshr i32 %144, 8
  store i32 %149, ptr %148, align 8, !tbaa !28
  %150 = getelementptr inbounds i8, ptr %0, i64 208
  %151 = getelementptr inbounds i8, ptr %0, i64 224
  %.not301 = icmp eq i32 %147, 0
  br i1 %.not301, label %155, label %152

152:                                              ; preds = %146
  %153 = add nsw i32 %143, -9
  store i32 %153, ptr %117, align 4, !tbaa !25
  %154 = and i32 %144, 256
  %.not304 = icmp eq i32 %154, 0
  br i1 %.not304, label %.critedge4.thread, label %165

155:                                              ; preds = %146
  %156 = getelementptr inbounds i8, ptr %142, i64 2
  store ptr %156, ptr %8, align 8, !tbaa !5
  %157 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302 = icmp eq ptr %156, %157
  br i1 %.not302, label %158, label %160

158:                                              ; preds = %155
  %159 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %159(ptr noundef nonnull %7) #5
  %.pre397 = load ptr, ptr %8, align 8, !tbaa !5
  br label %160

160:                                              ; preds = %155, %158
  %161 = phi ptr [ %156, %155 ], [ %.pre397, %158 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %162 = load i16, ptr %161, align 2, !tbaa !31
  %163 = zext i16 %162 to i32
  store i32 %163, ptr %148, align 8, !tbaa !28
  %164 = and i32 %163, 1
  %.not303 = icmp eq i32 %164, 0
  br i1 %.not303, label %.critedge4.thread, label %.thread424

.thread424:                                       ; preds = %160
  %storemerge305426 = lshr i32 %163, 1
  store i32 %storemerge305426, ptr %148, align 8, !tbaa !28
  br label %166

165:                                              ; preds = %152
  %storemerge305 = lshr i32 %144, 9
  store i32 %storemerge305, ptr %148, align 8, !tbaa !28
  %.not301.1 = icmp eq i32 %153, 0
  br i1 %.not301.1, label %171, label %166

166:                                              ; preds = %.thread424, %165
  %storemerge305429 = phi i32 [ %storemerge305426, %.thread424 ], [ %storemerge305, %165 ]
  %storemerge305.in428 = phi i32 [ %163, %.thread424 ], [ %149, %165 ]
  %167 = phi i32 [ 15, %.thread424 ], [ %153, %165 ]
  %168 = phi ptr [ %161, %.thread424 ], [ %142, %165 ]
  %169 = add nsw i32 %167, -1
  store i32 %169, ptr %117, align 4, !tbaa !25
  %170 = and i32 %storemerge305.in428, 2
  %.not304.1 = icmp eq i32 %170, 0
  br i1 %.not304.1, label %.critedge4.thread, label %181

171:                                              ; preds = %165
  %172 = getelementptr inbounds i8, ptr %142, i64 2
  store ptr %172, ptr %8, align 8, !tbaa !5
  %173 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.1 = icmp eq ptr %172, %173
  br i1 %.not302.1, label %174, label %176

174:                                              ; preds = %171
  %175 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %175(ptr noundef nonnull %7) #5
  %.pre399 = load ptr, ptr %8, align 8, !tbaa !5
  br label %176

176:                                              ; preds = %174, %171
  %177 = phi ptr [ %.pre399, %174 ], [ %172, %171 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %178 = load i16, ptr %177, align 2, !tbaa !31
  %179 = zext i16 %178 to i32
  store i32 %179, ptr %148, align 8, !tbaa !28
  %180 = and i32 %179, 1
  %.not303.1 = icmp eq i32 %180, 0
  br i1 %.not303.1, label %.critedge4.thread, label %.thread430

.thread430:                                       ; preds = %176
  %storemerge305.1432 = lshr i32 %179, 1
  store i32 %storemerge305.1432, ptr %148, align 8, !tbaa !28
  br label %182

181:                                              ; preds = %166
  %storemerge305.1 = lshr i32 %storemerge305429, 1
  store i32 %storemerge305.1, ptr %148, align 8, !tbaa !28
  %.not301.2 = icmp eq i32 %169, 0
  br i1 %.not301.2, label %187, label %182

182:                                              ; preds = %.thread430, %181
  %storemerge305.1435 = phi i32 [ %storemerge305.1432, %.thread430 ], [ %storemerge305.1, %181 ]
  %storemerge305.in.1434 = phi i32 [ %179, %.thread430 ], [ %storemerge305429, %181 ]
  %183 = phi i32 [ 15, %.thread430 ], [ %169, %181 ]
  %184 = phi ptr [ %177, %.thread430 ], [ %168, %181 ]
  %185 = add nsw i32 %183, -1
  store i32 %185, ptr %117, align 4, !tbaa !25
  %186 = and i32 %storemerge305.in.1434, 2
  %.not304.2 = icmp eq i32 %186, 0
  br i1 %.not304.2, label %.critedge4.thread, label %197

187:                                              ; preds = %181
  %188 = getelementptr inbounds i8, ptr %168, i64 2
  store ptr %188, ptr %8, align 8, !tbaa !5
  %189 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.2 = icmp eq ptr %188, %189
  br i1 %.not302.2, label %190, label %192

190:                                              ; preds = %187
  %191 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %191(ptr noundef nonnull %7) #5
  %.pre401 = load ptr, ptr %8, align 8, !tbaa !5
  br label %192

192:                                              ; preds = %190, %187
  %193 = phi ptr [ %.pre401, %190 ], [ %188, %187 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %194 = load i16, ptr %193, align 2, !tbaa !31
  %195 = zext i16 %194 to i32
  store i32 %195, ptr %148, align 8, !tbaa !28
  %196 = and i32 %195, 1
  %.not303.2 = icmp eq i32 %196, 0
  br i1 %.not303.2, label %.critedge4.thread, label %.thread436

.thread436:                                       ; preds = %192
  %storemerge305.2438 = lshr i32 %195, 1
  store i32 %storemerge305.2438, ptr %148, align 8, !tbaa !28
  br label %198

197:                                              ; preds = %182
  %storemerge305.2 = lshr i32 %storemerge305.1435, 1
  store i32 %storemerge305.2, ptr %148, align 8, !tbaa !28
  %.not301.3 = icmp eq i32 %185, 0
  br i1 %.not301.3, label %203, label %198

198:                                              ; preds = %.thread436, %197
  %storemerge305.2441 = phi i32 [ %storemerge305.2438, %.thread436 ], [ %storemerge305.2, %197 ]
  %storemerge305.in.2440 = phi i32 [ %195, %.thread436 ], [ %storemerge305.1435, %197 ]
  %199 = phi i32 [ 15, %.thread436 ], [ %185, %197 ]
  %200 = phi ptr [ %193, %.thread436 ], [ %184, %197 ]
  %201 = add nsw i32 %199, -1
  store i32 %201, ptr %117, align 4, !tbaa !25
  %202 = and i32 %storemerge305.in.2440, 2
  %.not304.3 = icmp eq i32 %202, 0
  br i1 %.not304.3, label %.critedge4.thread, label %213

203:                                              ; preds = %197
  %204 = getelementptr inbounds i8, ptr %184, i64 2
  store ptr %204, ptr %8, align 8, !tbaa !5
  %205 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.3 = icmp eq ptr %204, %205
  br i1 %.not302.3, label %206, label %208

206:                                              ; preds = %203
  %207 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %207(ptr noundef nonnull %7) #5
  %.pre403 = load ptr, ptr %8, align 8, !tbaa !5
  br label %208

208:                                              ; preds = %206, %203
  %209 = phi ptr [ %.pre403, %206 ], [ %204, %203 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %210 = load i16, ptr %209, align 2, !tbaa !31
  %211 = zext i16 %210 to i32
  store i32 %211, ptr %148, align 8, !tbaa !28
  %212 = and i32 %211, 1
  %.not303.3 = icmp eq i32 %212, 0
  br i1 %.not303.3, label %.critedge4.thread, label %.thread442

.thread442:                                       ; preds = %208
  %storemerge305.3444 = lshr i32 %211, 1
  store i32 %storemerge305.3444, ptr %148, align 8, !tbaa !28
  br label %214

213:                                              ; preds = %198
  %storemerge305.3 = lshr i32 %storemerge305.2441, 1
  store i32 %storemerge305.3, ptr %148, align 8, !tbaa !28
  %.not301.4 = icmp eq i32 %201, 0
  br i1 %.not301.4, label %219, label %214

214:                                              ; preds = %.thread442, %213
  %storemerge305.3447 = phi i32 [ %storemerge305.3444, %.thread442 ], [ %storemerge305.3, %213 ]
  %storemerge305.in.3446 = phi i32 [ %211, %.thread442 ], [ %storemerge305.2441, %213 ]
  %215 = phi i32 [ 15, %.thread442 ], [ %201, %213 ]
  %216 = phi ptr [ %209, %.thread442 ], [ %200, %213 ]
  %217 = add nsw i32 %215, -1
  store i32 %217, ptr %117, align 4, !tbaa !25
  %218 = and i32 %storemerge305.in.3446, 2
  %.not304.4 = icmp eq i32 %218, 0
  br i1 %.not304.4, label %.critedge4.thread, label %229

219:                                              ; preds = %213
  %220 = getelementptr inbounds i8, ptr %200, i64 2
  store ptr %220, ptr %8, align 8, !tbaa !5
  %221 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.4 = icmp eq ptr %220, %221
  br i1 %.not302.4, label %222, label %224

222:                                              ; preds = %219
  %223 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %223(ptr noundef nonnull %7) #5
  %.pre405 = load ptr, ptr %8, align 8, !tbaa !5
  br label %224

224:                                              ; preds = %222, %219
  %225 = phi ptr [ %.pre405, %222 ], [ %220, %219 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %226 = load i16, ptr %225, align 2, !tbaa !31
  %227 = zext i16 %226 to i32
  store i32 %227, ptr %148, align 8, !tbaa !28
  %228 = and i32 %227, 1
  %.not303.4 = icmp eq i32 %228, 0
  br i1 %.not303.4, label %.critedge4.thread, label %.thread448

.thread448:                                       ; preds = %224
  %storemerge305.4450 = lshr i32 %227, 1
  store i32 %storemerge305.4450, ptr %148, align 8, !tbaa !28
  br label %230

229:                                              ; preds = %214
  %storemerge305.4 = lshr i32 %storemerge305.3447, 1
  store i32 %storemerge305.4, ptr %148, align 8, !tbaa !28
  %.not301.5 = icmp eq i32 %217, 0
  br i1 %.not301.5, label %235, label %230

230:                                              ; preds = %.thread448, %229
  %storemerge305.4453 = phi i32 [ %storemerge305.4450, %.thread448 ], [ %storemerge305.4, %229 ]
  %storemerge305.in.4452 = phi i32 [ %227, %.thread448 ], [ %storemerge305.3447, %229 ]
  %231 = phi i32 [ 15, %.thread448 ], [ %217, %229 ]
  %232 = phi ptr [ %225, %.thread448 ], [ %216, %229 ]
  %233 = add nsw i32 %231, -1
  store i32 %233, ptr %117, align 4, !tbaa !25
  %234 = and i32 %storemerge305.in.4452, 2
  %.not304.5 = icmp eq i32 %234, 0
  br i1 %.not304.5, label %.critedge4.thread, label %245

235:                                              ; preds = %229
  %236 = getelementptr inbounds i8, ptr %216, i64 2
  store ptr %236, ptr %8, align 8, !tbaa !5
  %237 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.5 = icmp eq ptr %236, %237
  br i1 %.not302.5, label %238, label %240

238:                                              ; preds = %235
  %239 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %239(ptr noundef nonnull %7) #5
  %.pre407 = load ptr, ptr %8, align 8, !tbaa !5
  br label %240

240:                                              ; preds = %238, %235
  %241 = phi ptr [ %.pre407, %238 ], [ %236, %235 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %242 = load i16, ptr %241, align 2, !tbaa !31
  %243 = zext i16 %242 to i32
  store i32 %243, ptr %148, align 8, !tbaa !28
  %244 = and i32 %243, 1
  %.not303.5 = icmp eq i32 %244, 0
  br i1 %.not303.5, label %.critedge4.thread, label %.thread454

.thread454:                                       ; preds = %240
  %storemerge305.5456 = lshr i32 %243, 1
  store i32 %storemerge305.5456, ptr %148, align 8, !tbaa !28
  br label %246

245:                                              ; preds = %230
  %storemerge305.5 = lshr i32 %storemerge305.4453, 1
  store i32 %storemerge305.5, ptr %148, align 8, !tbaa !28
  %.not301.6 = icmp eq i32 %233, 0
  br i1 %.not301.6, label %251, label %246

246:                                              ; preds = %.thread454, %245
  %storemerge305.5459 = phi i32 [ %storemerge305.5456, %.thread454 ], [ %storemerge305.5, %245 ]
  %storemerge305.in.5458 = phi i32 [ %243, %.thread454 ], [ %storemerge305.4453, %245 ]
  %247 = phi i32 [ 15, %.thread454 ], [ %233, %245 ]
  %248 = phi ptr [ %241, %.thread454 ], [ %232, %245 ]
  %249 = add nsw i32 %247, -1
  store i32 %249, ptr %117, align 4, !tbaa !25
  %250 = and i32 %storemerge305.in.5458, 2
  %.not304.6 = icmp eq i32 %250, 0
  br i1 %.not304.6, label %.critedge4.thread, label %261

251:                                              ; preds = %245
  %252 = getelementptr inbounds i8, ptr %232, i64 2
  store ptr %252, ptr %8, align 8, !tbaa !5
  %253 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.6 = icmp eq ptr %252, %253
  br i1 %.not302.6, label %254, label %256

254:                                              ; preds = %251
  %255 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %255(ptr noundef nonnull %7) #5
  %.pre409 = load ptr, ptr %8, align 8, !tbaa !5
  br label %256

256:                                              ; preds = %254, %251
  %257 = phi ptr [ %.pre409, %254 ], [ %252, %251 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %258 = load i16, ptr %257, align 2, !tbaa !31
  %259 = zext i16 %258 to i32
  store i32 %259, ptr %148, align 8, !tbaa !28
  %260 = and i32 %259, 1
  %.not303.6 = icmp eq i32 %260, 0
  br i1 %.not303.6, label %.critedge4.thread, label %.thread460

.thread460:                                       ; preds = %256
  %storemerge305.6462 = lshr i32 %259, 1
  store i32 %storemerge305.6462, ptr %148, align 8, !tbaa !28
  br label %262

261:                                              ; preds = %246
  %storemerge305.6 = lshr i32 %storemerge305.5459, 1
  store i32 %storemerge305.6, ptr %148, align 8, !tbaa !28
  %.not301.7 = icmp eq i32 %249, 0
  br i1 %.not301.7, label %267, label %262

262:                                              ; preds = %.thread460, %261
  %storemerge305.6465 = phi i32 [ %storemerge305.6462, %.thread460 ], [ %storemerge305.6, %261 ]
  %storemerge305.in.6464 = phi i32 [ %259, %.thread460 ], [ %storemerge305.5459, %261 ]
  %263 = phi i32 [ 15, %.thread460 ], [ %249, %261 ]
  %264 = phi ptr [ %257, %.thread460 ], [ %248, %261 ]
  %265 = add nsw i32 %263, -1
  store i32 %265, ptr %117, align 4, !tbaa !25
  %266 = and i32 %storemerge305.in.6464, 2
  %.not304.7 = icmp eq i32 %266, 0
  br i1 %.not304.7, label %.critedge4.thread, label %277

267:                                              ; preds = %261
  %268 = getelementptr inbounds i8, ptr %248, i64 2
  store ptr %268, ptr %8, align 8, !tbaa !5
  %269 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.7 = icmp eq ptr %268, %269
  br i1 %.not302.7, label %270, label %272

270:                                              ; preds = %267
  %271 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %271(ptr noundef nonnull %7) #5
  %.pre411 = load ptr, ptr %8, align 8, !tbaa !5
  br label %272

272:                                              ; preds = %270, %267
  %273 = phi ptr [ %.pre411, %270 ], [ %268, %267 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %274 = load i16, ptr %273, align 2, !tbaa !31
  %275 = zext i16 %274 to i32
  store i32 %275, ptr %148, align 8, !tbaa !28
  %276 = and i32 %275, 1
  %.not303.7 = icmp eq i32 %276, 0
  br i1 %.not303.7, label %.critedge4.thread, label %.thread466

.thread466:                                       ; preds = %272
  %storemerge305.7468 = lshr i32 %275, 1
  store i32 %storemerge305.7468, ptr %148, align 8, !tbaa !28
  br label %278

277:                                              ; preds = %262
  %storemerge305.7 = lshr i32 %storemerge305.6465, 1
  store i32 %storemerge305.7, ptr %148, align 8, !tbaa !28
  %.not301.8 = icmp eq i32 %265, 0
  br i1 %.not301.8, label %283, label %278

278:                                              ; preds = %.thread466, %277
  %storemerge305.7471 = phi i32 [ %storemerge305.7468, %.thread466 ], [ %storemerge305.7, %277 ]
  %storemerge305.in.7470 = phi i32 [ %275, %.thread466 ], [ %storemerge305.6465, %277 ]
  %279 = phi i32 [ 15, %.thread466 ], [ %265, %277 ]
  %280 = phi ptr [ %273, %.thread466 ], [ %264, %277 ]
  %281 = add nsw i32 %279, -1
  store i32 %281, ptr %117, align 4, !tbaa !25
  %282 = and i32 %storemerge305.in.7470, 2
  %.not304.8 = icmp eq i32 %282, 0
  br i1 %.not304.8, label %.preheader355, label %.critedge4

283:                                              ; preds = %277
  %284 = getelementptr inbounds i8, ptr %264, i64 2
  store ptr %284, ptr %8, align 8, !tbaa !5
  %285 = load ptr, ptr %150, align 8, !tbaa !29
  %.not302.8 = icmp eq ptr %284, %285
  br i1 %.not302.8, label %286, label %288

286:                                              ; preds = %283
  %287 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %287(ptr noundef nonnull %7) #5
  %.pre413 = load ptr, ptr %8, align 8, !tbaa !5
  br label %288

288:                                              ; preds = %286, %283
  %289 = phi ptr [ %.pre413, %286 ], [ %284, %283 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %290 = load i16, ptr %289, align 2, !tbaa !31
  %291 = zext i16 %290 to i32
  store i32 %291, ptr %148, align 8, !tbaa !28
  %292 = and i32 %291, 1
  %.not303.8 = icmp eq i32 %292, 0
  br i1 %.not303.8, label %.preheader355, label %.critedge4

.critedge4.thread:                                ; preds = %160, %152, %166, %176, %182, %192, %198, %208, %214, %224, %230, %240, %246, %256, %262, %272
  %storemerge423.in.ph = phi i32 [ %275, %272 ], [ %storemerge305.6465, %262 ], [ %259, %256 ], [ %storemerge305.5459, %246 ], [ %243, %240 ], [ %storemerge305.4453, %230 ], [ %227, %224 ], [ %storemerge305.3447, %214 ], [ %211, %208 ], [ %storemerge305.2441, %198 ], [ %195, %192 ], [ %storemerge305.1435, %182 ], [ %179, %176 ], [ %storemerge305429, %166 ], [ %149, %152 ], [ %163, %160 ]
  %.0250360.ph = phi i32 [ 15, %272 ], [ 15, %262 ], [ 14, %256 ], [ 14, %246 ], [ 13, %240 ], [ 13, %230 ], [ 12, %224 ], [ 12, %214 ], [ 11, %208 ], [ 11, %198 ], [ 10, %192 ], [ 10, %182 ], [ 9, %176 ], [ 9, %166 ], [ 8, %152 ], [ 8, %160 ]
  %storemerge423475 = lshr i32 %storemerge423.in.ph, 1
  store i32 %storemerge423475, ptr %148, align 8, !tbaa !28
  br label %366

.critedge4:                                       ; preds = %278, %288
  %storemerge305.in.8 = phi i32 [ %291, %288 ], [ %storemerge305.7471, %278 ]
  %storemerge423 = lshr i32 %storemerge305.in.8, 1
  store i32 %storemerge423, ptr %148, align 8, !tbaa !28
  br label %.thread338

.preheader355:                                    ; preds = %278, %288
  %storemerge423.in.ph477 = phi i32 [ %291, %288 ], [ %storemerge305.7471, %278 ]
  %.ph = phi ptr [ %289, %288 ], [ %280, %278 ]
  %.ph478 = phi i32 [ 15, %288 ], [ %281, %278 ]
  %storemerge423482 = lshr i32 %storemerge423.in.ph477, 1
  store i32 %storemerge423482, ptr %148, align 8, !tbaa !28
  br label %293

293:                                              ; preds = %.preheader355, %310
  %294 = phi ptr [ %.ph, %.preheader355 ], [ %311, %310 ]
  %295 = phi i32 [ %storemerge423482, %.preheader355 ], [ %storemerge311, %310 ]
  %296 = phi i32 [ %.ph478, %.preheader355 ], [ %312, %310 ]
  %.0367 = phi i32 [ 0, %.preheader355 ], [ %313, %310 ]
  %.not307 = icmp eq i32 %296, 0
  br i1 %.not307, label %300, label %297

297:                                              ; preds = %293
  %298 = add nsw i32 %296, -1
  store i32 %298, ptr %117, align 4, !tbaa !25
  %299 = and i32 %295, 1
  %.not310 = icmp eq i32 %299, 0
  br i1 %.not310, label %314, label %310

300:                                              ; preds = %293
  %301 = getelementptr inbounds i8, ptr %294, i64 2
  store ptr %301, ptr %8, align 8, !tbaa !5
  %302 = load ptr, ptr %150, align 8, !tbaa !29
  %.not308 = icmp eq ptr %301, %302
  br i1 %.not308, label %303, label %305

303:                                              ; preds = %300
  %304 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %304(ptr noundef nonnull %7) #5
  %.pre416 = load ptr, ptr %8, align 8, !tbaa !5
  br label %305

305:                                              ; preds = %300, %303
  %306 = phi ptr [ %301, %300 ], [ %.pre416, %303 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %307 = load i16, ptr %306, align 2, !tbaa !31
  %308 = zext i16 %307 to i32
  store i32 %308, ptr %148, align 8, !tbaa !28
  %309 = and i32 %308, 1
  %.not309 = icmp eq i32 %309, 0
  br i1 %.not309, label %314, label %310

310:                                              ; preds = %297, %305
  %storemerge311.in = phi i32 [ %295, %297 ], [ %308, %305 ]
  %311 = phi ptr [ %294, %297 ], [ %306, %305 ]
  %312 = phi i32 [ %298, %297 ], [ 15, %305 ]
  %storemerge311 = lshr i32 %storemerge311.in, 1
  store i32 %storemerge311, ptr %148, align 8, !tbaa !28
  %313 = add nuw nsw i32 %.0367, 1
  %exitcond391.not = icmp eq i32 %313, 33
  br i1 %exitcond391.not, label %.thread338, label %293, !llvm.loop !35

314:                                              ; preds = %305, %297
  %315 = phi ptr [ %294, %297 ], [ %306, %305 ]
  %316 = phi i32 [ %298, %297 ], [ 15, %305 ]
  %storemerge311.in.c = phi i32 [ %295, %297 ], [ %308, %305 ]
  %storemerge311.c = lshr i32 %storemerge311.in.c, 1
  store i32 %storemerge311.c, ptr %148, align 8, !tbaa !28
  %317 = icmp ult i32 %.0367, 2
  br i1 %317, label %355, label %.lr.ph371

.lr.ph371:                                        ; preds = %314
  %318 = add nsw i32 %.0367, -1
  br label %319

319:                                              ; preds = %.lr.ph371, %348
  %320 = phi ptr [ %315, %.lr.ph371 ], [ %349, %348 ]
  %321 = phi i32 [ %storemerge311.c, %.lr.ph371 ], [ %350, %348 ]
  %322 = phi i32 [ %316, %.lr.ph371 ], [ %351, %348 ]
  %323 = phi i32 [ %318, %.lr.ph371 ], [ %353, %348 ]
  %.0240370 = phi i32 [ 1, %.lr.ph371 ], [ %352, %348 ]
  %.1251369 = phi i32 [ 0, %.lr.ph371 ], [ %.2252, %348 ]
  %.not314 = icmp eq i32 %322, 0
  br i1 %.not314, label %327, label %324

324:                                              ; preds = %319
  %325 = add nsw i32 %322, -1
  store i32 %325, ptr %117, align 4, !tbaa !25
  %326 = and i32 %321, 1
  %.not317 = icmp eq i32 %326, 0
  br i1 %.not317, label %343, label %337

327:                                              ; preds = %319
  %328 = getelementptr inbounds i8, ptr %320, i64 2
  store ptr %328, ptr %8, align 8, !tbaa !5
  %329 = load ptr, ptr %150, align 8, !tbaa !29
  %.not315 = icmp eq ptr %328, %329
  br i1 %.not315, label %330, label %332

330:                                              ; preds = %327
  %331 = load ptr, ptr %151, align 8, !tbaa !30
  tail call void %331(ptr noundef nonnull %7) #5
  %.pre419 = load ptr, ptr %8, align 8, !tbaa !5
  br label %332

332:                                              ; preds = %327, %330
  %333 = phi ptr [ %328, %327 ], [ %.pre419, %330 ]
  store i32 15, ptr %117, align 4, !tbaa !25
  %334 = load i16, ptr %333, align 2, !tbaa !31
  %335 = zext i16 %334 to i32
  %336 = and i32 %335, 1
  %.not316 = icmp eq i32 %336, 0
  br i1 %.not316, label %343, label %337

337:                                              ; preds = %332, %324
  %338 = phi i32 [ %335, %332 ], [ %321, %324 ]
  %339 = phi ptr [ %333, %332 ], [ %320, %324 ]
  %340 = phi i32 [ 15, %332 ], [ %325, %324 ]
  %341 = lshr i32 %338, 1
  store i32 %341, ptr %148, align 8, !tbaa !28
  %342 = or i32 %.0240370, %.1251369
  br label %348

343:                                              ; preds = %332, %324
  %344 = phi i32 [ %335, %332 ], [ %321, %324 ]
  %345 = phi ptr [ %333, %332 ], [ %320, %324 ]
  %346 = phi i32 [ 15, %332 ], [ %325, %324 ]
  %347 = lshr i32 %344, 1
  store i32 %347, ptr %148, align 8, !tbaa !28
  br label %348

348:                                              ; preds = %337, %343
  %349 = phi ptr [ %339, %337 ], [ %345, %343 ]
  %350 = phi i32 [ %341, %337 ], [ %347, %343 ]
  %351 = phi i32 [ %340, %337 ], [ %346, %343 ]
  %.2252 = phi i32 [ %342, %337 ], [ %.1251369, %343 ]
  %352 = shl i32 %.0240370, 1
  %353 = add nsw i32 %323, -1
  %.not313 = icmp eq i32 %353, 0
  br i1 %.not313, label %._crit_edge372, label %319, !llvm.loop !36

._crit_edge372:                                   ; preds = %348
  %354 = or i32 %352, %.2252
  br label %355

355:                                              ; preds = %._crit_edge372, %314
  %.3253 = phi i32 [ %354, %._crit_edge372 ], [ %.0367, %314 ]
  %356 = add i32 %.3253, 16
  br label %366

357:                                              ; preds = %141
  %358 = zext nneg i32 %.0241 to i64
  %359 = getelementptr inbounds [256 x i8], ptr @ones_count_table, i64 0, i64 %358
  %360 = load i8, ptr %359, align 1, !tbaa !37
  %361 = sext i8 %360 to i32
  %362 = add nsw i32 %361, 1
  %363 = sub i32 %143, %362
  store i32 %363, ptr %117, align 4, !tbaa !25
  %364 = getelementptr inbounds i8, ptr %0, i64 240
  %365 = lshr i32 %144, %362
  store i32 %365, ptr %364, align 8, !tbaa !28
  br label %366

366:                                              ; preds = %.critedge4.thread, %355, %357
  %.5255 = phi i32 [ %356, %355 ], [ %361, %357 ], [ %.0250360.ph, %.critedge4.thread ]
  %367 = getelementptr inbounds i8, ptr %0, i64 32
  %368 = load i32, ptr %367, align 4, !tbaa !23
  %.not319 = icmp ne i32 %368, 0
  %369 = lshr i32 %.5255, 1
  %370 = zext i1 %.not319 to i32
  %.6 = add nuw i32 %369, %370
  %.sink = and i32 %.5255, 1
  store i32 %.sink, ptr %367, align 4
  %371 = xor i32 %.sink, 1
  br label %372

372:                                              ; preds = %112, %366
  %storemerge353 = phi i32 [ %371, %366 ], [ 0, %112 ]
  %.8 = phi i32 [ %.6, %366 ], [ 0, %112 ]
  store i32 %storemerge353, ptr %114, align 4, !tbaa !22
  %373 = getelementptr inbounds i8, ptr %0, i64 8
  %374 = load i32, ptr %373, align 8, !tbaa !38
  %375 = and i32 %374, 8
  %376 = icmp eq i32 %375, 0
  %377 = icmp ne i32 %1, 0
  %or.cond = or i1 %377, %376
  br i1 %or.cond, label %379, label %378

378:                                              ; preds = %372
  tail call void @update_error_limit(ptr noundef nonnull %0) #5
  br label %379

379:                                              ; preds = %378, %372
  %380 = icmp eq i32 %.8, 0
  %381 = load i32, ptr %6, align 4, !tbaa !21
  %382 = lshr i32 %381, 4
  br i1 %380, label %383, label %388

383:                                              ; preds = %379
  %384 = add i32 %381, 126
  %385 = lshr i32 %384, 6
  %386 = and i32 %385, 67108862
  %387 = sub i32 %381, %386
  store i32 %387, ptr %6, align 4, !tbaa !21
  br label %437

388:                                              ; preds = %379
  %389 = add i32 %381, 128
  %390 = lshr i32 %389, 7
  %391 = mul nuw nsw i32 %390, 5
  %392 = add i32 %391, %381
  store i32 %392, ptr %6, align 4, !tbaa !21
  %393 = icmp eq i32 %.8, 1
  br i1 %393, label %394, label %404

394:                                              ; preds = %388
  %395 = add nuw nsw i32 %382, 1
  %396 = getelementptr inbounds i8, ptr %6, i64 4
  %397 = load i32, ptr %396, align 4, !tbaa !21
  %398 = lshr i32 %397, 4
  %399 = add nuw nsw i32 %398, %395
  %400 = add i32 %397, 62
  %401 = lshr i32 %400, 5
  %402 = and i32 %401, 134217726
  %403 = sub i32 %397, %402
  store i32 %403, ptr %396, align 4, !tbaa !21
  br label %437

404:                                              ; preds = %388
  %405 = getelementptr inbounds i8, ptr %6, i64 4
  %406 = load i32, ptr %405, align 4, !tbaa !21
  %407 = lshr i32 %406, 4
  %408 = add nuw nsw i32 %382, 2
  %409 = add nuw nsw i32 %408, %407
  %410 = add i32 %406, 64
  %411 = lshr i32 %410, 6
  %412 = mul nuw nsw i32 %411, 5
  %413 = add i32 %412, %406
  store i32 %413, ptr %405, align 4, !tbaa !21
  %414 = icmp eq i32 %.8, 2
  br i1 %414, label %415, label %424

415:                                              ; preds = %404
  %416 = getelementptr inbounds i8, ptr %6, i64 8
  %417 = load i32, ptr %416, align 4, !tbaa !21
  %418 = lshr i32 %417, 4
  %419 = add nuw nsw i32 %418, %409
  %420 = add i32 %417, 30
  %421 = lshr i32 %420, 4
  %422 = and i32 %421, 268435454
  %423 = sub i32 %417, %422
  store i32 %423, ptr %416, align 4, !tbaa !21
  br label %437

424:                                              ; preds = %404
  %425 = add i32 %.8, -2
  %426 = getelementptr inbounds i8, ptr %6, i64 8
  %427 = load i32, ptr %426, align 4, !tbaa !21
  %428 = lshr i32 %427, 4
  %429 = add nuw nsw i32 %428, 1
  %430 = mul i32 %429, %425
  %431 = add i32 %430, %409
  %432 = add i32 %431, %428
  %433 = add i32 %427, 32
  %434 = lshr i32 %433, 5
  %435 = mul nuw nsw i32 %434, 5
  %436 = add i32 %435, %427
  store i32 %436, ptr %426, align 4, !tbaa !21
  br label %437

437:                                              ; preds = %394, %424, %415, %383
  %.0264 = phi i32 [ 0, %383 ], [ %395, %394 ], [ %409, %415 ], [ %431, %424 ]
  %.0256 = phi i32 [ %382, %383 ], [ %399, %394 ], [ %419, %415 ], [ %432, %424 ]
  %438 = and i32 %.0264, 2147483647
  %439 = and i32 %.0256, 2147483647
  %spec.select = tail call i32 @llvm.umax.i32(i32 %438, i32 %439)
  %440 = getelementptr inbounds i8, ptr %6, i64 16
  %441 = load i32, ptr %440, align 4, !tbaa !39
  %.not320 = icmp eq i32 %441, 0
  br i1 %.not320, label %450, label %.preheader

.preheader:                                       ; preds = %437
  %442 = add nuw i32 %438, 1
  %443 = add nuw i32 %442, %spec.select
  %.0261375 = lshr i32 %443, 1
  %444 = sub nsw i32 %spec.select, %438
  %445 = icmp ugt i32 %444, %441
  br i1 %445, label %.lr.ph379, label %.loopexit

.lr.ph379:                                        ; preds = %.preheader
  %446 = getelementptr inbounds i8, ptr %0, i64 236
  %447 = getelementptr inbounds i8, ptr %0, i64 240
  %448 = getelementptr inbounds i8, ptr %0, i64 208
  %449 = getelementptr inbounds i8, ptr %0, i64 224
  %.pre420 = load i32, ptr %446, align 4, !tbaa !25
  br label %454

450:                                              ; preds = %437
  %451 = sub nsw i32 %spec.select, %438
  %452 = tail call i32 @read_code(ptr noundef nonnull %7, i32 noundef %451)
  %453 = add i32 %452, %438
  br label %.loopexit

454:                                              ; preds = %.lr.ph379, %483
  %455 = phi i32 [ %.pre420, %.lr.ph379 ], [ %484, %483 ]
  %.0261378 = phi i32 [ %.0261375, %.lr.ph379 ], [ %.0261, %483 ]
  %.2258377 = phi i32 [ %spec.select, %.lr.ph379 ], [ %.3259, %483 ]
  %.1265376 = phi i32 [ %438, %.lr.ph379 ], [ %.2266, %483 ]
  %.not330 = icmp eq i32 %455, 0
  br i1 %.not330, label %460, label %456

456:                                              ; preds = %454
  %457 = add nsw i32 %455, -1
  store i32 %457, ptr %446, align 4, !tbaa !25
  %458 = load i32, ptr %447, align 8, !tbaa !28
  %459 = and i32 %458, 1
  %.not333 = icmp eq i32 %459, 0
  br i1 %.not333, label %477, label %471

460:                                              ; preds = %454
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = getelementptr inbounds i8, ptr %461, i64 2
  store ptr %462, ptr %8, align 8, !tbaa !5
  %463 = load ptr, ptr %448, align 8, !tbaa !29
  %.not331 = icmp eq ptr %462, %463
  br i1 %.not331, label %464, label %466

464:                                              ; preds = %460
  %465 = load ptr, ptr %449, align 8, !tbaa !30
  tail call void %465(ptr noundef nonnull %7) #5
  %.pre421 = load ptr, ptr %8, align 8, !tbaa !5
  br label %466

466:                                              ; preds = %460, %464
  %467 = phi ptr [ %462, %460 ], [ %.pre421, %464 ]
  store i32 15, ptr %446, align 4, !tbaa !25
  %468 = load i16, ptr %467, align 2, !tbaa !31
  %469 = zext i16 %468 to i32
  %470 = and i32 %469, 1
  %.not332 = icmp eq i32 %470, 0
  br i1 %.not332, label %477, label %471

471:                                              ; preds = %466, %456
  %472 = phi i32 [ %469, %466 ], [ %458, %456 ]
  %473 = phi i32 [ 15, %466 ], [ %457, %456 ]
  %474 = lshr i32 %472, 1
  store i32 %474, ptr %447, align 8, !tbaa !28
  %475 = add nuw i32 %.0261378, 1
  %476 = add i32 %475, %.2258377
  br label %483

477:                                              ; preds = %466, %456
  %478 = phi i32 [ %469, %466 ], [ %458, %456 ]
  %479 = phi i32 [ 15, %466 ], [ %457, %456 ]
  %480 = lshr i32 %478, 1
  store i32 %480, ptr %447, align 8, !tbaa !28
  %481 = add nsw i32 %.0261378, -1
  %482 = add i32 %.0261378, %.1265376
  br label %483

483:                                              ; preds = %477, %471
  %484 = phi i32 [ %473, %471 ], [ %479, %477 ]
  %.2266 = phi i32 [ %.0261378, %471 ], [ %.1265376, %477 ]
  %.1262.in = phi i32 [ %476, %471 ], [ %482, %477 ]
  %.3259 = phi i32 [ %.2258377, %471 ], [ %481, %477 ]
  %.0261 = lshr i32 %.1262.in, 1
  %485 = sub nsw i32 %.3259, %.2266
  %486 = load i32, ptr %440, align 4, !tbaa !39
  %487 = icmp ugt i32 %485, %486
  br i1 %487, label %454, label %.loopexit, !llvm.loop !40

.loopexit:                                        ; preds = %483, %.preheader, %450
  %.3267 = phi i32 [ %438, %450 ], [ %438, %.preheader ], [ %.2266, %483 ]
  %.2263 = phi i32 [ %453, %450 ], [ %.0261375, %.preheader ], [ %.0261, %483 ]
  %.4260 = phi i32 [ %spec.select, %450 ], [ %spec.select, %.preheader ], [ %.3259, %483 ]
  %488 = getelementptr inbounds i8, ptr %0, i64 236
  %489 = load i32, ptr %488, align 4, !tbaa !25
  %.not321 = icmp eq i32 %489, 0
  br i1 %.not321, label %495, label %490

490:                                              ; preds = %.loopexit
  %491 = add nsw i32 %489, -1
  store i32 %491, ptr %488, align 4, !tbaa !25
  %492 = getelementptr inbounds i8, ptr %0, i64 240
  %493 = load i32, ptr %492, align 8, !tbaa !28
  %494 = and i32 %493, 1
  %.not324 = icmp eq i32 %494, 0
  br i1 %.not324, label %508, label %510

495:                                              ; preds = %.loopexit
  %496 = load ptr, ptr %8, align 8, !tbaa !5
  %497 = getelementptr inbounds i8, ptr %496, i64 2
  store ptr %497, ptr %8, align 8, !tbaa !5
  %498 = getelementptr inbounds i8, ptr %0, i64 208
  %499 = load ptr, ptr %498, align 8, !tbaa !29
  %.not322 = icmp eq ptr %497, %499
  br i1 %.not322, label %500, label %503

500:                                              ; preds = %495
  %501 = getelementptr inbounds i8, ptr %0, i64 224
  %502 = load ptr, ptr %501, align 8, !tbaa !30
  tail call void %502(ptr noundef nonnull %7) #5
  %.pre422 = load ptr, ptr %8, align 8, !tbaa !5
  br label %503

503:                                              ; preds = %495, %500
  %504 = phi ptr [ %497, %495 ], [ %.pre422, %500 ]
  store i32 15, ptr %488, align 4, !tbaa !25
  %505 = load i16, ptr %504, align 2, !tbaa !31
  %506 = zext i16 %505 to i32
  %507 = and i32 %506, 1
  %.not323 = icmp eq i32 %507, 0
  br i1 %.not323, label %508, label %510

508:                                              ; preds = %503, %490
  %509 = phi i32 [ %506, %503 ], [ %493, %490 ]
  br label %510

510:                                              ; preds = %490, %503, %508
  %.sink491 = phi i32 [ %509, %508 ], [ %506, %503 ], [ %493, %490 ]
  %.not327 = phi i1 [ true, %508 ], [ false, %503 ], [ false, %490 ]
  %511 = getelementptr inbounds i8, ptr %0, i64 240
  %512 = lshr i32 %.sink491, 1
  store i32 %512, ptr %511, align 8, !tbaa !28
  %513 = getelementptr inbounds i8, ptr %0, i64 248
  %514 = getelementptr inbounds i8, ptr %0, i64 264
  %515 = load ptr, ptr %514, align 8, !tbaa !41
  %.not325 = icmp eq ptr %515, null
  br i1 %.not325, label %526, label %516

516:                                              ; preds = %510
  %517 = load i32, ptr %440, align 4, !tbaa !39
  %.not326 = icmp eq i32 %517, 0
  br i1 %.not326, label %526, label %518

518:                                              ; preds = %516
  %519 = sub nsw i32 %.4260, %.3267
  %520 = tail call i32 @read_code(ptr noundef nonnull %513, i32 noundef %519)
  br i1 %.not282, label %526, label %521

521:                                              ; preds = %518
  %522 = add i32 %520, %.3267
  %523 = sub i32 %.2263, %522
  %524 = sub i32 %522, %.2263
  %525 = select i1 %.not327, i32 %524, i32 %523
  store i32 %525, ptr %2, align 4, !tbaa !21
  br label %526

526:                                              ; preds = %518, %521, %516, %510
  %527 = load i32, ptr %373, align 8, !tbaa !38
  %528 = and i32 %527, 512
  %.not328 = icmp eq i32 %528, 0
  br i1 %.not328, label %538, label %529

529:                                              ; preds = %526
  %530 = getelementptr inbounds i8, ptr %6, i64 12
  %531 = load i32, ptr %530, align 4, !tbaa !26
  %532 = add i32 %531, 128
  %533 = lshr i32 %532, 8
  %534 = sub i32 %531, %533
  store i32 %534, ptr %530, align 4, !tbaa !26
  %535 = tail call i32 @wp_log2(i32 noundef %.2263) #5
  %536 = load i32, ptr %530, align 4, !tbaa !26
  %537 = add i32 %536, %535
  store i32 %537, ptr %530, align 4, !tbaa !26
  br label %538

538:                                              ; preds = %529, %526
  %not..not327 = xor i1 %.not327, true
  %539 = sext i1 %not..not327 to i32
  %540 = xor i32 %.2263, %539
  br label %.thread338

.thread338:                                       ; preds = %.critedge335, %310, %.critedge4, %106, %32, %3, %538
  %.5 = phi i32 [ %540, %538 ], [ -2147483648, %3 ], [ 0, %106 ], [ 0, %32 ], [ -2147483648, %.critedge4 ], [ -2147483648, %310 ], [ -2147483648, %.critedge335 ]
  ret i32 %.5
}

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

declare void @update_error_limit(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @read_code(ptr noundef, i32 noundef) local_unnamed_addr #3

declare i32 @wp_log2(i32 noundef) local_unnamed_addr #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !13, i64 216}
!6 = !{!"", !7, i64 0, !12, i64 12, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !14, i64 128, !14, i64 136, !11, i64 144, !11, i64 148, !11, i64 152, !8, i64 156, !8, i64 157, !8, i64 158, !8, i64 159, !8, i64 160, !8, i64 161, !8, i64 162, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !15, i64 200, !15, i64 248, !15, i64 296, !16, i64 344, !8, i64 348, !8, i64 349, !8, i64 350, !8, i64 351, !8, i64 352, !8, i64 353, !8, i64 354, !8, i64 355, !17, i64 360, !8, i64 432, !19, i64 1968, !13, i64 2064, !20, i64 2072}
!7 = !{!"", !8, i64 0, !10, i64 4, !10, i64 6, !11, i64 8}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"words_data", !8, i64 0, !8, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !8, i64 36}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!"bs", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !11, i64 32, !11, i64 36, !11, i64 40}
!16 = !{!"float", !8, i64 0}
!17 = !{!"", !8, i64 0, !8, i64 8, !8, i64 16, !18, i64 24, !18, i64 32, !18, i64 40, !13, i64 48, !13, i64 56, !11, i64 64}
!18 = !{!"double", !8, i64 0}
!19 = !{!"decorr_pass", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !8, i64 16, !8, i64 48, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92}
!20 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !8, i64 40, !8, i64 41, !11, i64 44, !11, i64 48, !11, i64 52, !13, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !8, i64 76, !13, i64 160}
!21 = !{!11, !11, i64 0}
!22 = !{!6, !11, i64 40}
!23 = !{!6, !11, i64 32}
!24 = !{!6, !11, i64 36}
!25 = !{!6, !11, i64 236}
!26 = !{!27, !11, i64 12}
!27 = !{!"entropy_data", !8, i64 0, !11, i64 12, !11, i64 16}
!28 = !{!6, !11, i64 240}
!29 = !{!6, !13, i64 208}
!30 = !{!6, !13, i64 224}
!31 = !{!10, !10, i64 0}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = !{!8, !8, i64 0}
!38 = !{!6, !11, i64 8}
!39 = !{!27, !11, i64 16}
!40 = distinct !{!40, !33}
!41 = !{!6, !13, i64 264}


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