; 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: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @get_words_lossless(ptr noundef %0, ptr noundef %1, i32 noundef %2) #3 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %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
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.WavpackStream, ptr %20, i32 0, i32 1
  %22 = getelementptr inbounds %struct.words_data, ptr %21, i32 0, i32 7
  %23 = getelementptr inbounds [2 x %struct.entropy_data], ptr %22, i64 0, i64 0
  store ptr %23, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  %24 = load ptr, ptr %5, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.WavpackStream, ptr %24, i32 0, i32 27
  store ptr %25, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %26 = load i32, ptr %7, align 4, !tbaa !9
  %27 = icmp ne i32 %26, 0
  br i1 %27, label %28, label %51

28:                                               ; preds = %3
  %29 = load ptr, ptr %12, align 8, !tbaa !5
  %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 %51, label %33

33:                                               ; preds = %28
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = getelementptr inbounds %struct.WavpackStream, ptr %35, i32 0, i32 0
  %37 = getelementptr inbounds %struct.WavpackHeader, ptr %36, i32 0, i32 3
  %38 = load i32, ptr %37, align 8, !tbaa !13
  %39 = and i32 %38, 1073741828
  %40 = icmp ne i32 %39, 0
  br i1 %40, label %41, label %44

41:                                               ; preds = %33
  %42 = load i32, ptr %7, align 4, !tbaa !9
  %43 = mul nsw i32 %42, 4
  br label %47

44:                                               ; preds = %33
  %45 = load i32, ptr %7, align 4, !tbaa !9
  %46 = mul nsw i32 %45, 8
  br label %47

47:                                               ; preds = %44, %41
  %48 = phi i32 [ %43, %41 ], [ %46, %44 ]
  %49 = sext i32 %48 to i64
  call void @llvm.memset.p0.i64(ptr align 4 %34, i8 0, i64 %49, i1 false)
  %50 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %50, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %968

51:                                               ; preds = %28, %3
  %52 = load ptr, ptr %5, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.WavpackStream, ptr %52, i32 0, i32 0
  %54 = getelementptr inbounds %struct.WavpackHeader, ptr %53, i32 0, i32 3
  %55 = load i32, ptr %54, align 8, !tbaa !13
  %56 = and i32 %55, 1073741828
  %57 = icmp ne i32 %56, 0
  br i1 %57, label %61, label %58

58:                                               ; preds = %51
  %59 = load i32, ptr %7, align 4, !tbaa !9
  %60 = mul nsw i32 %59, 2
  store i32 %60, ptr %7, align 4, !tbaa !9
  br label %61

61:                                               ; preds = %58, %51
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %62

62:                                               ; preds = %951, %61
  %63 = load i32, ptr %13, align 4, !tbaa !9
  %64 = load i32, ptr %7, align 4, !tbaa !9
  %65 = icmp slt i32 %63, %64
  br i1 %65, label %66, label %954

66:                                               ; preds = %62
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.WavpackStream, ptr %67, i32 0, i32 0
  %69 = getelementptr inbounds %struct.WavpackHeader, ptr %68, i32 0, i32 3
  %70 = load i32, ptr %69, align 8, !tbaa !13
  %71 = and i32 %70, 1073741828
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %82, label %73

73:                                               ; preds = %66
  %74 = load ptr, ptr %5, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.WavpackStream, ptr %74, i32 0, i32 1
  %76 = getelementptr inbounds %struct.words_data, ptr %75, i32 0, i32 7
  %77 = getelementptr inbounds [2 x %struct.entropy_data], ptr %76, i64 0, i64 0
  %78 = load i32, ptr %13, align 4, !tbaa !9
  %79 = and i32 %78, 1
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds %struct.entropy_data, ptr %77, i64 %80
  store ptr %81, ptr %8, align 8, !tbaa !5
  br label %82

82:                                               ; preds = %73, %66
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.WavpackStream, ptr %83, i32 0, i32 1
  %85 = getelementptr inbounds %struct.words_data, ptr %84, i32 0, i32 5
  %86 = load i32, ptr %85, align 4, !tbaa !24
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %197

88:                                               ; preds = %82
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.WavpackStream, ptr %89, i32 0, i32 1
  %91 = getelementptr inbounds %struct.words_data, ptr %90, i32 0, i32 5
  store i32 0, ptr %91, align 4, !tbaa !24
  %92 = load ptr, ptr %12, align 8, !tbaa !5
  %93 = load ptr, ptr %8, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.entropy_data, ptr %93, i32 0, i32 0
  %95 = getelementptr inbounds [3 x i32], ptr %94, i64 0, i64 0
  %96 = load i32, ptr %95, align 4, !tbaa !9
  %97 = lshr i32 %96, 4
  %98 = add i32 %97, 1
  %99 = sub i32 %98, 1
  %100 = call i32 @read_code(ptr noundef %92, i32 noundef %99)
  store i32 %100, ptr %10, align 4, !tbaa !9
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.entropy_data, ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds [3 x i32], ptr %102, i64 0, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !9
  %105 = add i32 %104, 126
  %106 = udiv i32 %105, 128
  %107 = mul i32 %106, 2
  %108 = load ptr, ptr %8, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.entropy_data, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds [3 x i32], ptr %109, i64 0, i64 0
  %111 = load i32, ptr %110, align 4, !tbaa !9
  %112 = sub i32 %111, %107
  store i32 %112, ptr %110, align 4, !tbaa !9
  %113 = load ptr, ptr %12, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.bs, ptr %113, i32 0, i32 5
  %115 = load i32, ptr %114, align 4, !tbaa !25
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %117, label %127

117:                                              ; preds = %88
  %118 = load ptr, ptr %12, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.bs, ptr %118, i32 0, i32 5
  %120 = load i32, ptr %119, align 4, !tbaa !25
  %121 = add nsw i32 %120, -1
  store i32 %121, ptr %119, align 4, !tbaa !25
  %122 = load ptr, ptr %12, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.bs, ptr %122, i32 0, i32 6
  %124 = load i32, ptr %123, align 8, !tbaa !26
  %125 = and i32 %124, 1
  %126 = icmp ne i32 %125, 0
  br i1 %126, label %154, label %159

127:                                              ; preds = %88
  %128 = load ptr, ptr %12, align 8, !tbaa !5
  %129 = getelementptr inbounds %struct.bs, ptr %128, i32 0, i32 2
  %130 = load ptr, ptr %129, align 8, !tbaa !11
  %131 = getelementptr inbounds i16, ptr %130, i32 1
  store ptr %131, ptr %129, align 8, !tbaa !11
  %132 = load ptr, ptr %12, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.bs, ptr %132, i32 0, i32 1
  %134 = load ptr, ptr %133, align 8, !tbaa !27
  %135 = icmp ne ptr %131, %134
  br i1 %135, label %136, label %137

136:                                              ; preds = %127
  br label %142

137:                                              ; preds = %127
  %138 = load ptr, ptr %12, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.bs, ptr %138, i32 0, i32 3
  %140 = load ptr, ptr %139, align 8, !tbaa !28
  %141 = load ptr, ptr %12, align 8, !tbaa !5
  call void %140(ptr noundef %141)
  br label %142

142:                                              ; preds = %137, %136
  %143 = load ptr, ptr %12, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.bs, ptr %143, i32 0, i32 5
  store i32 15, ptr %144, align 4, !tbaa !25
  %145 = load ptr, ptr %12, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.bs, ptr %145, i32 0, i32 2
  %147 = load ptr, ptr %146, align 8, !tbaa !11
  %148 = load i16, ptr %147, align 2, !tbaa !29
  %149 = zext i16 %148 to i32
  %150 = load ptr, ptr %12, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.bs, ptr %150, i32 0, i32 6
  store i32 %149, ptr %151, align 8, !tbaa !26
  %152 = and i32 %149, 1
  %153 = icmp ne i32 %152, 0
  br i1 %153, label %154, label %159

154:                                              ; preds = %142, %117
  %155 = load ptr, ptr %12, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.bs, ptr %155, i32 0, i32 6
  %157 = load i32, ptr %156, align 8, !tbaa !26
  %158 = lshr i32 %157, 1
  store i32 %158, ptr %156, align 8, !tbaa !26
  br i1 true, label %164, label %167

159:                                              ; preds = %142, %117
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.bs, ptr %160, i32 0, i32 6
  %162 = load i32, ptr %161, align 8, !tbaa !26
  %163 = lshr i32 %162, 1
  store i32 %163, ptr %161, align 8, !tbaa !26
  br i1 false, label %164, label %167

164:                                              ; preds = %159, %154
  %165 = load i32, ptr %10, align 4, !tbaa !9
  %166 = xor i32 %165, -1
  br label %169

167:                                              ; preds = %159, %154
  %168 = load i32, ptr %10, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %167, %164
  %170 = phi i32 [ %166, %164 ], [ %168, %167 ]
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = load i32, ptr %13, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds i32, ptr %171, i64 %173
  store i32 %170, ptr %174, align 4, !tbaa !9
  %175 = load i32, ptr %13, align 4, !tbaa !9
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %13, align 4, !tbaa !9
  %177 = load i32, ptr %7, align 4, !tbaa !9
  %178 = icmp eq i32 %176, %177
  br i1 %178, label %179, label %180

179:                                              ; preds = %169
  br label %954

180:                                              ; preds = %169
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.WavpackStream, ptr %181, i32 0, i32 0
  %183 = getelementptr inbounds %struct.WavpackHeader, ptr %182, i32 0, i32 3
  %184 = load i32, ptr %183, align 8, !tbaa !13
  %185 = and i32 %184, 1073741828
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %196, label %187

187:                                              ; preds = %180
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.WavpackStream, ptr %188, i32 0, i32 1
  %190 = getelementptr inbounds %struct.words_data, ptr %189, i32 0, i32 7
  %191 = getelementptr inbounds [2 x %struct.entropy_data], ptr %190, i64 0, i64 0
  %192 = load i32, ptr %13, align 4, !tbaa !9
  %193 = and i32 %192, 1
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds %struct.entropy_data, ptr %191, i64 %194
  store ptr %195, ptr %8, align 8, !tbaa !5
  br label %196

196:                                              ; preds = %187, %180
  br label %197

197:                                              ; preds = %196, %82
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.WavpackStream, ptr %198, i32 0, i32 1
  %200 = getelementptr inbounds %struct.words_data, ptr %199, i32 0, i32 7
  %201 = getelementptr inbounds [2 x %struct.entropy_data], ptr %200, i64 0, i64 0
  %202 = getelementptr inbounds %struct.entropy_data, ptr %201, i32 0, i32 0
  %203 = getelementptr inbounds [3 x i32], ptr %202, i64 0, i64 0
  %204 = load i32, ptr %203, align 4, !tbaa !9
  %205 = icmp ult i32 %204, 2
  br i1 %205, label %206, label %421

206:                                              ; preds = %197
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.WavpackStream, ptr %207, i32 0, i32 1
  %209 = getelementptr inbounds %struct.words_data, ptr %208, i32 0, i32 3
  %210 = load i32, ptr %209, align 4, !tbaa !30
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %421, label %212

212:                                              ; preds = %206
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.WavpackStream, ptr %213, i32 0, i32 1
  %215 = getelementptr inbounds %struct.words_data, ptr %214, i32 0, i32 7
  %216 = getelementptr inbounds [2 x %struct.entropy_data], ptr %215, i64 0, i64 1
  %217 = getelementptr inbounds %struct.entropy_data, ptr %216, i32 0, i32 0
  %218 = getelementptr inbounds [3 x i32], ptr %217, i64 0, i64 0
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = icmp ult i32 %219, 2
  br i1 %220, label %221, label %421

221:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %222 = load ptr, ptr %5, align 8, !tbaa !5
  %223 = getelementptr inbounds %struct.WavpackStream, ptr %222, i32 0, i32 1
  %224 = getelementptr inbounds %struct.words_data, ptr %223, i32 0, i32 4
  %225 = load i32, ptr %224, align 4, !tbaa !31
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %227, label %240

227:                                              ; preds = %221
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.WavpackStream, ptr %228, i32 0, i32 1
  %230 = getelementptr inbounds %struct.words_data, ptr %229, i32 0, i32 4
  %231 = load i32, ptr %230, align 4, !tbaa !31
  %232 = add i32 %231, -1
  store i32 %232, ptr %230, align 4, !tbaa !31
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %239

234:                                              ; preds = %227
  %235 = load ptr, ptr %6, align 8, !tbaa !5
  %236 = load i32, ptr %13, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds i32, ptr %235, i64 %237
  store i32 0, ptr %238, align 4, !tbaa !9
  store i32 4, ptr %15, align 4
  br label %418

239:                                              ; preds = %227
  br label %417

240:                                              ; preds = %221
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %241

241:                                              ; preds = %302, %240
  %242 = load i32, ptr %17, align 4, !tbaa !9
  %243 = icmp slt i32 %242, 33
  br i1 %243, label %244, label %299

244:                                              ; preds = %241
  %245 = load ptr, ptr %12, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.bs, ptr %245, i32 0, i32 5
  %247 = load i32, ptr %246, align 4, !tbaa !25
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %259

249:                                              ; preds = %244
  %250 = load ptr, ptr %12, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.bs, ptr %250, i32 0, i32 5
  %252 = load i32, ptr %251, align 4, !tbaa !25
  %253 = add nsw i32 %252, -1
  store i32 %253, ptr %251, align 4, !tbaa !25
  %254 = load ptr, ptr %12, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.bs, ptr %254, i32 0, i32 6
  %256 = load i32, ptr %255, align 8, !tbaa !26
  %257 = and i32 %256, 1
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %286, label %291

259:                                              ; preds = %244
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.bs, ptr %260, i32 0, i32 2
  %262 = load ptr, ptr %261, align 8, !tbaa !11
  %263 = getelementptr inbounds i16, ptr %262, i32 1
  store ptr %263, ptr %261, align 8, !tbaa !11
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.bs, ptr %264, i32 0, i32 1
  %266 = load ptr, ptr %265, align 8, !tbaa !27
  %267 = icmp ne ptr %263, %266
  br i1 %267, label %268, label %269

268:                                              ; preds = %259
  br label %274

269:                                              ; preds = %259
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.bs, ptr %270, i32 0, i32 3
  %272 = load ptr, ptr %271, align 8, !tbaa !28
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  call void %272(ptr noundef %273)
  br label %274

274:                                              ; preds = %269, %268
  %275 = load ptr, ptr %12, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.bs, ptr %275, i32 0, i32 5
  store i32 15, ptr %276, align 4, !tbaa !25
  %277 = load ptr, ptr %12, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.bs, ptr %277, i32 0, i32 2
  %279 = load ptr, ptr %278, align 8, !tbaa !11
  %280 = load i16, ptr %279, align 2, !tbaa !29
  %281 = zext i16 %280 to i32
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.bs, ptr %282, i32 0, i32 6
  store i32 %281, ptr %283, align 8, !tbaa !26
  %284 = and i32 %281, 1
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %286, label %291

286:                                              ; preds = %274, %249
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.bs, ptr %287, i32 0, i32 6
  %289 = load i32, ptr %288, align 8, !tbaa !26
  %290 = lshr i32 %289, 1
  store i32 %290, ptr %288, align 8, !tbaa !26
  br label %296

291:                                              ; preds = %274, %249
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.bs, ptr %292, i32 0, i32 6
  %294 = load i32, ptr %293, align 8, !tbaa !26
  %295 = lshr i32 %294, 1
  store i32 %295, ptr %293, align 8, !tbaa !26
  br label %296

296:                                              ; preds = %291, %286
  %297 = phi i32 [ 1, %286 ], [ 0, %291 ]
  %298 = icmp ne i32 %297, 0
  br label %299

299:                                              ; preds = %296, %241
  %300 = phi i1 [ false, %241 ], [ %298, %296 ]
  br i1 %300, label %301, label %305

301:                                              ; preds = %299
  br label %302

302:                                              ; preds = %301
  %303 = load i32, ptr %17, align 4, !tbaa !9
  %304 = add nsw i32 %303, 1
  store i32 %304, ptr %17, align 4, !tbaa !9
  br label %241, !llvm.loop !32

305:                                              ; preds = %299
  %306 = load i32, ptr %17, align 4, !tbaa !9
  %307 = icmp eq i32 %306, 33
  br i1 %307, label %308, label %309

308:                                              ; preds = %305
  store i32 2, ptr %15, align 4
  br label %418

309:                                              ; preds = %305
  %310 = load i32, ptr %17, align 4, !tbaa !9
  %311 = icmp slt i32 %310, 2
  br i1 %311, label %312, label %317

312:                                              ; preds = %309
  %313 = load i32, ptr %17, align 4, !tbaa !9
  %314 = load ptr, ptr %5, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.WavpackStream, ptr %314, i32 0, i32 1
  %316 = getelementptr inbounds %struct.words_data, ptr %315, i32 0, i32 4
  store i32 %313, ptr %316, align 4, !tbaa !31
  br label %395

317:                                              ; preds = %309
  store i32 1, ptr %16, align 4, !tbaa !9
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.WavpackStream, ptr %318, i32 0, i32 1
  %320 = getelementptr inbounds %struct.words_data, ptr %319, i32 0, i32 4
  store i32 0, ptr %320, align 4, !tbaa !31
  br label %321

321:                                              ; preds = %385, %317
  %322 = load i32, ptr %17, align 4, !tbaa !9
  %323 = add nsw i32 %322, -1
  store i32 %323, ptr %17, align 4, !tbaa !9
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %388

325:                                              ; preds = %321
  %326 = load ptr, ptr %12, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.bs, ptr %326, i32 0, i32 5
  %328 = load i32, ptr %327, align 4, !tbaa !25
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %340

330:                                              ; preds = %325
  %331 = load ptr, ptr %12, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.bs, ptr %331, i32 0, i32 5
  %333 = load i32, ptr %332, align 4, !tbaa !25
  %334 = add nsw i32 %333, -1
  store i32 %334, ptr %332, align 4, !tbaa !25
  %335 = load ptr, ptr %12, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.bs, ptr %335, i32 0, i32 6
  %337 = load i32, ptr %336, align 8, !tbaa !26
  %338 = and i32 %337, 1
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %367, label %372

340:                                              ; preds = %325
  %341 = load ptr, ptr %12, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.bs, ptr %341, i32 0, i32 2
  %343 = load ptr, ptr %342, align 8, !tbaa !11
  %344 = getelementptr inbounds i16, ptr %343, i32 1
  store ptr %344, ptr %342, align 8, !tbaa !11
  %345 = load ptr, ptr %12, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.bs, ptr %345, i32 0, i32 1
  %347 = load ptr, ptr %346, align 8, !tbaa !27
  %348 = icmp ne ptr %344, %347
  br i1 %348, label %349, label %350

349:                                              ; preds = %340
  br label %355

350:                                              ; preds = %340
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = getelementptr inbounds %struct.bs, ptr %351, i32 0, i32 3
  %353 = load ptr, ptr %352, align 8, !tbaa !28
  %354 = load ptr, ptr %12, align 8, !tbaa !5
  call void %353(ptr noundef %354)
  br label %355

355:                                              ; preds = %350, %349
  %356 = load ptr, ptr %12, align 8, !tbaa !5
  %357 = getelementptr inbounds %struct.bs, ptr %356, i32 0, i32 5
  store i32 15, ptr %357, align 4, !tbaa !25
  %358 = load ptr, ptr %12, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.bs, ptr %358, i32 0, i32 2
  %360 = load ptr, ptr %359, align 8, !tbaa !11
  %361 = load i16, ptr %360, align 2, !tbaa !29
  %362 = zext i16 %361 to i32
  %363 = load ptr, ptr %12, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.bs, ptr %363, i32 0, i32 6
  store i32 %362, ptr %364, align 8, !tbaa !26
  %365 = and i32 %362, 1
  %366 = icmp ne i32 %365, 0
  br i1 %366, label %367, label %372

367:                                              ; preds = %355, %330
  %368 = load ptr, ptr %12, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.bs, ptr %368, i32 0, i32 6
  %370 = load i32, ptr %369, align 8, !tbaa !26
  %371 = lshr i32 %370, 1
  store i32 %371, ptr %369, align 8, !tbaa !26
  br i1 true, label %377, label %384

372:                                              ; preds = %355, %330
  %373 = load ptr, ptr %12, align 8, !tbaa !5
  %374 = getelementptr inbounds %struct.bs, ptr %373, i32 0, i32 6
  %375 = load i32, ptr %374, align 8, !tbaa !26
  %376 = lshr i32 %375, 1
  store i32 %376, ptr %374, align 8, !tbaa !26
  br i1 false, label %377, label %384

377:                                              ; preds = %372, %367
  %378 = load i32, ptr %16, align 4, !tbaa !9
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.WavpackStream, ptr %379, i32 0, i32 1
  %381 = getelementptr inbounds %struct.words_data, ptr %380, i32 0, i32 4
  %382 = load i32, ptr %381, align 4, !tbaa !31
  %383 = or i32 %382, %378
  store i32 %383, ptr %381, align 4, !tbaa !31
  br label %384

384:                                              ; preds = %377, %372, %367
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %16, align 4, !tbaa !9
  %387 = shl i32 %386, 1
  store i32 %387, ptr %16, align 4, !tbaa !9
  br label %321, !llvm.loop !34

388:                                              ; preds = %321
  %389 = load i32, ptr %16, align 4, !tbaa !9
  %390 = load ptr, ptr %5, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.WavpackStream, ptr %390, i32 0, i32 1
  %392 = getelementptr inbounds %struct.words_data, ptr %391, i32 0, i32 4
  %393 = load i32, ptr %392, align 4, !tbaa !31
  %394 = or i32 %393, %389
  store i32 %394, ptr %392, align 4, !tbaa !31
  br label %395

395:                                              ; preds = %388, %312
  %396 = load ptr, ptr %5, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.WavpackStream, ptr %396, i32 0, i32 1
  %398 = getelementptr inbounds %struct.words_data, ptr %397, i32 0, i32 4
  %399 = load i32, ptr %398, align 4, !tbaa !31
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %416

401:                                              ; preds = %395
  %402 = load ptr, ptr %5, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.WavpackStream, ptr %402, i32 0, i32 1
  %404 = getelementptr inbounds %struct.words_data, ptr %403, i32 0, i32 7
  %405 = getelementptr inbounds [2 x %struct.entropy_data], ptr %404, i64 0, i64 0
  %406 = getelementptr inbounds %struct.entropy_data, ptr %405, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 4 %406, i8 0, i64 12, i1 false)
  %407 = load ptr, ptr %5, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.WavpackStream, ptr %407, i32 0, i32 1
  %409 = getelementptr inbounds %struct.words_data, ptr %408, i32 0, i32 7
  %410 = getelementptr inbounds [2 x %struct.entropy_data], ptr %409, i64 0, i64 1
  %411 = getelementptr inbounds %struct.entropy_data, ptr %410, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 4 %411, i8 0, i64 12, i1 false)
  %412 = load ptr, ptr %6, align 8, !tbaa !5
  %413 = load i32, ptr %13, align 4, !tbaa !9
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %412, i64 %414
  store i32 0, ptr %415, align 4, !tbaa !9
  store i32 4, ptr %15, align 4
  br label %418

416:                                              ; preds = %395
  br label %417

417:                                              ; preds = %416, %239
  store i32 0, ptr %15, align 4
  br label %418

418:                                              ; preds = %417, %401, %308, %234
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  %419 = load i32, ptr %15, align 4
  switch i32 %419, label %970 [
    i32 0, label %420
    i32 4, label %951
    i32 2, label %954
  ]

420:                                              ; preds = %418
  br label %421

421:                                              ; preds = %420, %212, %206, %197
  %422 = load ptr, ptr %12, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.bs, ptr %422, i32 0, i32 5
  %424 = load i32, ptr %423, align 4, !tbaa !25
  %425 = icmp slt i32 %424, 8
  br i1 %425, label %426, label %461

426:                                              ; preds = %421
  %427 = load ptr, ptr %12, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.bs, ptr %427, i32 0, i32 2
  %429 = load ptr, ptr %428, align 8, !tbaa !11
  %430 = getelementptr inbounds i16, ptr %429, i32 1
  store ptr %430, ptr %428, align 8, !tbaa !11
  %431 = load ptr, ptr %12, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.bs, ptr %431, i32 0, i32 1
  %433 = load ptr, ptr %432, align 8, !tbaa !27
  %434 = icmp eq ptr %430, %433
  br i1 %434, label %435, label %440

435:                                              ; preds = %426
  %436 = load ptr, ptr %12, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.bs, ptr %436, i32 0, i32 3
  %438 = load ptr, ptr %437, align 8, !tbaa !28
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  call void %438(ptr noundef %439)
  br label %440

440:                                              ; preds = %435, %426
  %441 = load ptr, ptr %12, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.bs, ptr %441, i32 0, i32 2
  %443 = load ptr, ptr %442, align 8, !tbaa !11
  %444 = load i16, ptr %443, align 2, !tbaa !29
  %445 = zext i16 %444 to i32
  %446 = load ptr, ptr %12, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.bs, ptr %446, i32 0, i32 5
  %448 = load i32, ptr %447, align 4, !tbaa !25
  %449 = shl i32 %445, %448
  %450 = load ptr, ptr %12, align 8, !tbaa !5
  %451 = getelementptr inbounds %struct.bs, ptr %450, i32 0, i32 6
  %452 = load i32, ptr %451, align 8, !tbaa !26
  %453 = or i32 %452, %449
  store i32 %453, ptr %451, align 8, !tbaa !26
  %454 = and i32 %453, 255
  store i32 %454, ptr %14, align 4, !tbaa !9
  %455 = load ptr, ptr %12, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.bs, ptr %455, i32 0, i32 5
  %457 = load i32, ptr %456, align 4, !tbaa !25
  %458 = sext i32 %457 to i64
  %459 = add i64 %458, 16
  %460 = trunc i64 %459 to i32
  store i32 %460, ptr %456, align 4, !tbaa !25
  br label %466

461:                                              ; preds = %421
  %462 = load ptr, ptr %12, align 8, !tbaa !5
  %463 = getelementptr inbounds %struct.bs, ptr %462, i32 0, i32 6
  %464 = load i32, ptr %463, align 8, !tbaa !26
  %465 = and i32 %464, 255
  store i32 %465, ptr %14, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %461, %440
  %467 = load i32, ptr %14, align 4, !tbaa !9
  %468 = icmp eq i32 %467, 255
  br i1 %468, label %469, label %699

469:                                              ; preds = %466
  %470 = load ptr, ptr %12, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.bs, ptr %470, i32 0, i32 5
  %472 = load i32, ptr %471, align 4, !tbaa !25
  %473 = sub nsw i32 %472, 8
  store i32 %473, ptr %471, align 4, !tbaa !25
  %474 = load ptr, ptr %12, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.bs, ptr %474, i32 0, i32 6
  %476 = load i32, ptr %475, align 8, !tbaa !26
  %477 = lshr i32 %476, 8
  store i32 %477, ptr %475, align 8, !tbaa !26
  store i32 8, ptr %9, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %539, %469
  %479 = load i32, ptr %9, align 4, !tbaa !9
  %480 = icmp ult i32 %479, 17
  br i1 %480, label %481, label %536

481:                                              ; preds = %478
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.bs, ptr %482, i32 0, i32 5
  %484 = load i32, ptr %483, align 4, !tbaa !25
  %485 = icmp ne i32 %484, 0
  br i1 %485, label %486, label %496

486:                                              ; preds = %481
  %487 = load ptr, ptr %12, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.bs, ptr %487, i32 0, i32 5
  %489 = load i32, ptr %488, align 4, !tbaa !25
  %490 = add nsw i32 %489, -1
  store i32 %490, ptr %488, align 4, !tbaa !25
  %491 = load ptr, ptr %12, align 8, !tbaa !5
  %492 = getelementptr inbounds %struct.bs, ptr %491, i32 0, i32 6
  %493 = load i32, ptr %492, align 8, !tbaa !26
  %494 = and i32 %493, 1
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %523, label %528

496:                                              ; preds = %481
  %497 = load ptr, ptr %12, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.bs, ptr %497, i32 0, i32 2
  %499 = load ptr, ptr %498, align 8, !tbaa !11
  %500 = getelementptr inbounds i16, ptr %499, i32 1
  store ptr %500, ptr %498, align 8, !tbaa !11
  %501 = load ptr, ptr %12, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.bs, ptr %501, i32 0, i32 1
  %503 = load ptr, ptr %502, align 8, !tbaa !27
  %504 = icmp ne ptr %500, %503
  br i1 %504, label %505, label %506

505:                                              ; preds = %496
  br label %511

506:                                              ; preds = %496
  %507 = load ptr, ptr %12, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.bs, ptr %507, i32 0, i32 3
  %509 = load ptr, ptr %508, align 8, !tbaa !28
  %510 = load ptr, ptr %12, align 8, !tbaa !5
  call void %509(ptr noundef %510)
  br label %511

511:                                              ; preds = %506, %505
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.bs, ptr %512, i32 0, i32 5
  store i32 15, ptr %513, align 4, !tbaa !25
  %514 = load ptr, ptr %12, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.bs, ptr %514, i32 0, i32 2
  %516 = load ptr, ptr %515, align 8, !tbaa !11
  %517 = load i16, ptr %516, align 2, !tbaa !29
  %518 = zext i16 %517 to i32
  %519 = load ptr, ptr %12, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.bs, ptr %519, i32 0, i32 6
  store i32 %518, ptr %520, align 8, !tbaa !26
  %521 = and i32 %518, 1
  %522 = icmp ne i32 %521, 0
  br i1 %522, label %523, label %528

523:                                              ; preds = %511, %486
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.bs, ptr %524, i32 0, i32 6
  %526 = load i32, ptr %525, align 8, !tbaa !26
  %527 = lshr i32 %526, 1
  store i32 %527, ptr %525, align 8, !tbaa !26
  br label %533

528:                                              ; preds = %511, %486
  %529 = load ptr, ptr %12, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.bs, ptr %529, i32 0, i32 6
  %531 = load i32, ptr %530, align 8, !tbaa !26
  %532 = lshr i32 %531, 1
  store i32 %532, ptr %530, align 8, !tbaa !26
  br label %533

533:                                              ; preds = %528, %523
  %534 = phi i32 [ 1, %523 ], [ 0, %528 ]
  %535 = icmp ne i32 %534, 0
  br label %536

536:                                              ; preds = %533, %478
  %537 = phi i1 [ false, %478 ], [ %535, %533 ]
  br i1 %537, label %538, label %542

538:                                              ; preds = %536
  br label %539

539:                                              ; preds = %538
  %540 = load i32, ptr %9, align 4, !tbaa !9
  %541 = add i32 %540, 1
  store i32 %541, ptr %9, align 4, !tbaa !9
  br label %478, !llvm.loop !35

542:                                              ; preds = %536
  %543 = load i32, ptr %9, align 4, !tbaa !9
  %544 = icmp eq i32 %543, 17
  br i1 %544, label %545, label %546

545:                                              ; preds = %542
  br label %954

546:                                              ; preds = %542
  %547 = load i32, ptr %9, align 4, !tbaa !9
  %548 = icmp eq i32 %547, 16
  br i1 %548, label %549, label %698

549:                                              ; preds = %546
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %550

550:                                              ; preds = %611, %549
  %551 = load i32, ptr %19, align 4, !tbaa !9
  %552 = icmp slt i32 %551, 33
  br i1 %552, label %553, label %608

553:                                              ; preds = %550
  %554 = load ptr, ptr %12, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.bs, ptr %554, i32 0, i32 5
  %556 = load i32, ptr %555, align 4, !tbaa !25
  %557 = icmp ne i32 %556, 0
  br i1 %557, label %558, label %568

558:                                              ; preds = %553
  %559 = load ptr, ptr %12, align 8, !tbaa !5
  %560 = getelementptr inbounds %struct.bs, ptr %559, i32 0, i32 5
  %561 = load i32, ptr %560, align 4, !tbaa !25
  %562 = add nsw i32 %561, -1
  store i32 %562, ptr %560, align 4, !tbaa !25
  %563 = load ptr, ptr %12, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.bs, ptr %563, i32 0, i32 6
  %565 = load i32, ptr %564, align 8, !tbaa !26
  %566 = and i32 %565, 1
  %567 = icmp ne i32 %566, 0
  br i1 %567, label %595, label %600

568:                                              ; preds = %553
  %569 = load ptr, ptr %12, align 8, !tbaa !5
  %570 = getelementptr inbounds %struct.bs, ptr %569, i32 0, i32 2
  %571 = load ptr, ptr %570, align 8, !tbaa !11
  %572 = getelementptr inbounds i16, ptr %571, i32 1
  store ptr %572, ptr %570, align 8, !tbaa !11
  %573 = load ptr, ptr %12, align 8, !tbaa !5
  %574 = getelementptr inbounds %struct.bs, ptr %573, i32 0, i32 1
  %575 = load ptr, ptr %574, align 8, !tbaa !27
  %576 = icmp ne ptr %572, %575
  br i1 %576, label %577, label %578

577:                                              ; preds = %568
  br label %583

578:                                              ; preds = %568
  %579 = load ptr, ptr %12, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.bs, ptr %579, i32 0, i32 3
  %581 = load ptr, ptr %580, align 8, !tbaa !28
  %582 = load ptr, ptr %12, align 8, !tbaa !5
  call void %581(ptr noundef %582)
  br label %583

583:                                              ; preds = %578, %577
  %584 = load ptr, ptr %12, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.bs, ptr %584, i32 0, i32 5
  store i32 15, ptr %585, align 4, !tbaa !25
  %586 = load ptr, ptr %12, align 8, !tbaa !5
  %587 = getelementptr inbounds %struct.bs, ptr %586, i32 0, i32 2
  %588 = load ptr, ptr %587, align 8, !tbaa !11
  %589 = load i16, ptr %588, align 2, !tbaa !29
  %590 = zext i16 %589 to i32
  %591 = load ptr, ptr %12, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.bs, ptr %591, i32 0, i32 6
  store i32 %590, ptr %592, align 8, !tbaa !26
  %593 = and i32 %590, 1
  %594 = icmp ne i32 %593, 0
  br i1 %594, label %595, label %600

595:                                              ; preds = %583, %558
  %596 = load ptr, ptr %12, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.bs, ptr %596, i32 0, i32 6
  %598 = load i32, ptr %597, align 8, !tbaa !26
  %599 = lshr i32 %598, 1
  store i32 %599, ptr %597, align 8, !tbaa !26
  br label %605

600:                                              ; preds = %583, %558
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  %602 = getelementptr inbounds %struct.bs, ptr %601, i32 0, i32 6
  %603 = load i32, ptr %602, align 8, !tbaa !26
  %604 = lshr i32 %603, 1
  store i32 %604, ptr %602, align 8, !tbaa !26
  br label %605

605:                                              ; preds = %600, %595
  %606 = phi i32 [ 1, %595 ], [ 0, %600 ]
  %607 = icmp ne i32 %606, 0
  br label %608

608:                                              ; preds = %605, %550
  %609 = phi i1 [ false, %550 ], [ %607, %605 ]
  br i1 %609, label %610, label %614

610:                                              ; preds = %608
  br label %611

611:                                              ; preds = %610
  %612 = load i32, ptr %19, align 4, !tbaa !9
  %613 = add nsw i32 %612, 1
  store i32 %613, ptr %19, align 4, !tbaa !9
  br label %550, !llvm.loop !36

614:                                              ; preds = %608
  %615 = load i32, ptr %19, align 4, !tbaa !9
  %616 = icmp eq i32 %615, 33
  br i1 %616, label %617, label %618

617:                                              ; preds = %614
  store i32 2, ptr %15, align 4
  br label %695

618:                                              ; preds = %614
  %619 = load i32, ptr %19, align 4, !tbaa !9
  %620 = icmp slt i32 %619, 2
  br i1 %620, label %621, label %623

621:                                              ; preds = %618
  %622 = load i32, ptr %19, align 4, !tbaa !9
  store i32 %622, ptr %9, align 4, !tbaa !9
  br label %692

623:                                              ; preds = %618
  store i32 1, ptr %18, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %624

624:                                              ; preds = %685, %623
  %625 = load i32, ptr %19, align 4, !tbaa !9
  %626 = add nsw i32 %625, -1
  store i32 %626, ptr %19, align 4, !tbaa !9
  %627 = icmp ne i32 %626, 0
  br i1 %627, label %628, label %688

628:                                              ; preds = %624
  %629 = load ptr, ptr %12, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.bs, ptr %629, i32 0, i32 5
  %631 = load i32, ptr %630, align 4, !tbaa !25
  %632 = icmp ne i32 %631, 0
  br i1 %632, label %633, label %643

633:                                              ; preds = %628
  %634 = load ptr, ptr %12, align 8, !tbaa !5
  %635 = getelementptr inbounds %struct.bs, ptr %634, i32 0, i32 5
  %636 = load i32, ptr %635, align 4, !tbaa !25
  %637 = add nsw i32 %636, -1
  store i32 %637, ptr %635, align 4, !tbaa !25
  %638 = load ptr, ptr %12, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.bs, ptr %638, i32 0, i32 6
  %640 = load i32, ptr %639, align 8, !tbaa !26
  %641 = and i32 %640, 1
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %670, label %675

643:                                              ; preds = %628
  %644 = load ptr, ptr %12, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.bs, ptr %644, i32 0, i32 2
  %646 = load ptr, ptr %645, align 8, !tbaa !11
  %647 = getelementptr inbounds i16, ptr %646, i32 1
  store ptr %647, ptr %645, align 8, !tbaa !11
  %648 = load ptr, ptr %12, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.bs, ptr %648, i32 0, i32 1
  %650 = load ptr, ptr %649, align 8, !tbaa !27
  %651 = icmp ne ptr %647, %650
  br i1 %651, label %652, label %653

652:                                              ; preds = %643
  br label %658

653:                                              ; preds = %643
  %654 = load ptr, ptr %12, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.bs, ptr %654, i32 0, i32 3
  %656 = load ptr, ptr %655, align 8, !tbaa !28
  %657 = load ptr, ptr %12, align 8, !tbaa !5
  call void %656(ptr noundef %657)
  br label %658

658:                                              ; preds = %653, %652
  %659 = load ptr, ptr %12, align 8, !tbaa !5
  %660 = getelementptr inbounds %struct.bs, ptr %659, i32 0, i32 5
  store i32 15, ptr %660, align 4, !tbaa !25
  %661 = load ptr, ptr %12, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.bs, ptr %661, i32 0, i32 2
  %663 = load ptr, ptr %662, align 8, !tbaa !11
  %664 = load i16, ptr %663, align 2, !tbaa !29
  %665 = zext i16 %664 to i32
  %666 = load ptr, ptr %12, align 8, !tbaa !5
  %667 = getelementptr inbounds %struct.bs, ptr %666, i32 0, i32 6
  store i32 %665, ptr %667, align 8, !tbaa !26
  %668 = and i32 %665, 1
  %669 = icmp ne i32 %668, 0
  br i1 %669, label %670, label %675

670:                                              ; preds = %658, %633
  %671 = load ptr, ptr %12, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.bs, ptr %671, i32 0, i32 6
  %673 = load i32, ptr %672, align 8, !tbaa !26
  %674 = lshr i32 %673, 1
  store i32 %674, ptr %672, align 8, !tbaa !26
  br i1 true, label %680, label %684

675:                                              ; preds = %658, %633
  %676 = load ptr, ptr %12, align 8, !tbaa !5
  %677 = getelementptr inbounds %struct.bs, ptr %676, i32 0, i32 6
  %678 = load i32, ptr %677, align 8, !tbaa !26
  %679 = lshr i32 %678, 1
  store i32 %679, ptr %677, align 8, !tbaa !26
  br i1 false, label %680, label %684

680:                                              ; preds = %675, %670
  %681 = load i32, ptr %18, align 4, !tbaa !9
  %682 = load i32, ptr %9, align 4, !tbaa !9
  %683 = or i32 %682, %681
  store i32 %683, ptr %9, align 4, !tbaa !9
  br label %684

684:                                              ; preds = %680, %675, %670
  br label %685

685:                                              ; preds = %684
  %686 = load i32, ptr %18, align 4, !tbaa !9
  %687 = shl i32 %686, 1
  store i32 %687, ptr %18, align 4, !tbaa !9
  br label %624, !llvm.loop !37

688:                                              ; preds = %624
  %689 = load i32, ptr %18, align 4, !tbaa !9
  %690 = load i32, ptr %9, align 4, !tbaa !9
  %691 = or i32 %690, %689
  store i32 %691, ptr %9, align 4, !tbaa !9
  br label %692

692:                                              ; preds = %688, %621
  %693 = load i32, ptr %9, align 4, !tbaa !9
  %694 = add i32 %693, 16
  store i32 %694, ptr %9, align 4, !tbaa !9
  store i32 0, ptr %15, align 4
  br label %695

695:                                              ; preds = %692, %617
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %696 = load i32, ptr %15, align 4
  switch i32 %696, label %970 [
    i32 0, label %697
    i32 2, label %954
  ]

697:                                              ; preds = %695
  br label %698

698:                                              ; preds = %697, %546
  br label %716

699:                                              ; preds = %466
  %700 = load i32, ptr %14, align 4, !tbaa !9
  %701 = sext i32 %700 to i64
  %702 = getelementptr inbounds [256 x i8], ptr @ones_count_table, i64 0, i64 %701
  %703 = load i8, ptr %702, align 1, !tbaa !38
  %704 = sext i8 %703 to i32
  store i32 %704, ptr %9, align 4, !tbaa !9
  %705 = add i32 %704, 1
  %706 = load ptr, ptr %12, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.bs, ptr %706, i32 0, i32 5
  %708 = load i32, ptr %707, align 4, !tbaa !25
  %709 = sub i32 %708, %705
  store i32 %709, ptr %707, align 4, !tbaa !25
  %710 = load i32, ptr %9, align 4, !tbaa !9
  %711 = add i32 %710, 1
  %712 = load ptr, ptr %12, align 8, !tbaa !5
  %713 = getelementptr inbounds %struct.bs, ptr %712, i32 0, i32 6
  %714 = load i32, ptr %713, align 8, !tbaa !26
  %715 = lshr i32 %714, %711
  store i32 %715, ptr %713, align 8, !tbaa !26
  br label %716

716:                                              ; preds = %699, %698
  %717 = load ptr, ptr %5, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.WavpackStream, ptr %717, i32 0, i32 1
  %719 = getelementptr inbounds %struct.words_data, ptr %718, i32 0, i32 3
  %720 = load i32, ptr %719, align 4, !tbaa !30
  store i32 %720, ptr %10, align 4, !tbaa !9
  %721 = load i32, ptr %9, align 4, !tbaa !9
  %722 = and i32 %721, 1
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  %724 = getelementptr inbounds %struct.WavpackStream, ptr %723, i32 0, i32 1
  %725 = getelementptr inbounds %struct.words_data, ptr %724, i32 0, i32 3
  store i32 %722, ptr %725, align 4, !tbaa !30
  %726 = load i32, ptr %9, align 4, !tbaa !9
  %727 = xor i32 %726, -1
  %728 = and i32 %727, 1
  %729 = load ptr, ptr %5, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.WavpackStream, ptr %729, i32 0, i32 1
  %731 = getelementptr inbounds %struct.words_data, ptr %730, i32 0, i32 5
  store i32 %728, ptr %731, align 4, !tbaa !24
  %732 = load i32, ptr %9, align 4, !tbaa !9
  %733 = lshr i32 %732, 1
  %734 = load i32, ptr %10, align 4, !tbaa !9
  %735 = add i32 %733, %734
  store i32 %735, ptr %9, align 4, !tbaa !9
  %736 = load i32, ptr %9, align 4, !tbaa !9
  %737 = icmp eq i32 %736, 0
  br i1 %737, label %738, label %758

738:                                              ; preds = %716
  store i32 0, ptr %10, align 4, !tbaa !9
  %739 = load ptr, ptr %8, align 8, !tbaa !5
  %740 = getelementptr inbounds %struct.entropy_data, ptr %739, i32 0, i32 0
  %741 = getelementptr inbounds [3 x i32], ptr %740, i64 0, i64 0
  %742 = load i32, ptr %741, align 4, !tbaa !9
  %743 = lshr i32 %742, 4
  %744 = add i32 %743, 1
  %745 = sub i32 %744, 1
  store i32 %745, ptr %11, align 4, !tbaa !9
  %746 = load ptr, ptr %8, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.entropy_data, ptr %746, i32 0, i32 0
  %748 = getelementptr inbounds [3 x i32], ptr %747, i64 0, i64 0
  %749 = load i32, ptr %748, align 4, !tbaa !9
  %750 = add i32 %749, 126
  %751 = udiv i32 %750, 128
  %752 = mul i32 %751, 2
  %753 = load ptr, ptr %8, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.entropy_data, ptr %753, i32 0, i32 0
  %755 = getelementptr inbounds [3 x i32], ptr %754, i64 0, i64 0
  %756 = load i32, ptr %755, align 4, !tbaa !9
  %757 = sub i32 %756, %752
  store i32 %757, ptr %755, align 4, !tbaa !9
  br label %881

758:                                              ; preds = %716
  %759 = load ptr, ptr %8, align 8, !tbaa !5
  %760 = getelementptr inbounds %struct.entropy_data, ptr %759, i32 0, i32 0
  %761 = getelementptr inbounds [3 x i32], ptr %760, i64 0, i64 0
  %762 = load i32, ptr %761, align 4, !tbaa !9
  %763 = lshr i32 %762, 4
  %764 = add i32 %763, 1
  store i32 %764, ptr %10, align 4, !tbaa !9
  %765 = load ptr, ptr %8, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.entropy_data, ptr %765, i32 0, i32 0
  %767 = getelementptr inbounds [3 x i32], ptr %766, i64 0, i64 0
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = add i32 %768, 128
  %770 = udiv i32 %769, 128
  %771 = mul i32 %770, 5
  %772 = load ptr, ptr %8, align 8, !tbaa !5
  %773 = getelementptr inbounds %struct.entropy_data, ptr %772, i32 0, i32 0
  %774 = getelementptr inbounds [3 x i32], ptr %773, i64 0, i64 0
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = add i32 %775, %771
  store i32 %776, ptr %774, align 4, !tbaa !9
  %777 = load i32, ptr %9, align 4, !tbaa !9
  %778 = icmp eq i32 %777, 1
  br i1 %778, label %779, label %801

779:                                              ; preds = %758
  %780 = load i32, ptr %10, align 4, !tbaa !9
  %781 = load ptr, ptr %8, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.entropy_data, ptr %781, i32 0, i32 0
  %783 = getelementptr inbounds [3 x i32], ptr %782, i64 0, i64 1
  %784 = load i32, ptr %783, align 4, !tbaa !9
  %785 = lshr i32 %784, 4
  %786 = add i32 %785, 1
  %787 = add i32 %780, %786
  %788 = sub i32 %787, 1
  store i32 %788, ptr %11, align 4, !tbaa !9
  %789 = load ptr, ptr %8, align 8, !tbaa !5
  %790 = getelementptr inbounds %struct.entropy_data, ptr %789, i32 0, i32 0
  %791 = getelementptr inbounds [3 x i32], ptr %790, i64 0, i64 1
  %792 = load i32, ptr %791, align 4, !tbaa !9
  %793 = add i32 %792, 62
  %794 = udiv i32 %793, 64
  %795 = mul i32 %794, 2
  %796 = load ptr, ptr %8, align 8, !tbaa !5
  %797 = getelementptr inbounds %struct.entropy_data, ptr %796, i32 0, i32 0
  %798 = getelementptr inbounds [3 x i32], ptr %797, i64 0, i64 1
  %799 = load i32, ptr %798, align 4, !tbaa !9
  %800 = sub i32 %799, %795
  store i32 %800, ptr %798, align 4, !tbaa !9
  br label %880

801:                                              ; preds = %758
  %802 = load ptr, ptr %8, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.entropy_data, ptr %802, i32 0, i32 0
  %804 = getelementptr inbounds [3 x i32], ptr %803, i64 0, i64 1
  %805 = load i32, ptr %804, align 4, !tbaa !9
  %806 = lshr i32 %805, 4
  %807 = add i32 %806, 1
  %808 = load i32, ptr %10, align 4, !tbaa !9
  %809 = add i32 %808, %807
  store i32 %809, ptr %10, align 4, !tbaa !9
  %810 = load ptr, ptr %8, align 8, !tbaa !5
  %811 = getelementptr inbounds %struct.entropy_data, ptr %810, i32 0, i32 0
  %812 = getelementptr inbounds [3 x i32], ptr %811, i64 0, i64 1
  %813 = load i32, ptr %812, align 4, !tbaa !9
  %814 = add i32 %813, 64
  %815 = udiv i32 %814, 64
  %816 = mul i32 %815, 5
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  %818 = getelementptr inbounds %struct.entropy_data, ptr %817, i32 0, i32 0
  %819 = getelementptr inbounds [3 x i32], ptr %818, i64 0, i64 1
  %820 = load i32, ptr %819, align 4, !tbaa !9
  %821 = add i32 %820, %816
  store i32 %821, ptr %819, align 4, !tbaa !9
  %822 = load i32, ptr %9, align 4, !tbaa !9
  %823 = icmp eq i32 %822, 2
  br i1 %823, label %824, label %846

824:                                              ; preds = %801
  %825 = load i32, ptr %10, align 4, !tbaa !9
  %826 = load ptr, ptr %8, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.entropy_data, ptr %826, i32 0, i32 0
  %828 = getelementptr inbounds [3 x i32], ptr %827, i64 0, i64 2
  %829 = load i32, ptr %828, align 4, !tbaa !9
  %830 = lshr i32 %829, 4
  %831 = add i32 %830, 1
  %832 = add i32 %825, %831
  %833 = sub i32 %832, 1
  store i32 %833, ptr %11, align 4, !tbaa !9
  %834 = load ptr, ptr %8, align 8, !tbaa !5
  %835 = getelementptr inbounds %struct.entropy_data, ptr %834, i32 0, i32 0
  %836 = getelementptr inbounds [3 x i32], ptr %835, i64 0, i64 2
  %837 = load i32, ptr %836, align 4, !tbaa !9
  %838 = add i32 %837, 30
  %839 = udiv i32 %838, 32
  %840 = mul i32 %839, 2
  %841 = load ptr, ptr %8, align 8, !tbaa !5
  %842 = getelementptr inbounds %struct.entropy_data, ptr %841, i32 0, i32 0
  %843 = getelementptr inbounds [3 x i32], ptr %842, i64 0, i64 2
  %844 = load i32, ptr %843, align 4, !tbaa !9
  %845 = sub i32 %844, %840
  store i32 %845, ptr %843, align 4, !tbaa !9
  br label %879

846:                                              ; preds = %801
  %847 = load i32, ptr %9, align 4, !tbaa !9
  %848 = sub i32 %847, 2
  %849 = load ptr, ptr %8, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.entropy_data, ptr %849, i32 0, i32 0
  %851 = getelementptr inbounds [3 x i32], ptr %850, i64 0, i64 2
  %852 = load i32, ptr %851, align 4, !tbaa !9
  %853 = lshr i32 %852, 4
  %854 = add i32 %853, 1
  %855 = mul i32 %848, %854
  %856 = load i32, ptr %10, align 4, !tbaa !9
  %857 = add i32 %856, %855
  store i32 %857, ptr %10, align 4, !tbaa !9
  %858 = load i32, ptr %10, align 4, !tbaa !9
  %859 = load ptr, ptr %8, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.entropy_data, ptr %859, i32 0, i32 0
  %861 = getelementptr inbounds [3 x i32], ptr %860, i64 0, i64 2
  %862 = load i32, ptr %861, align 4, !tbaa !9
  %863 = lshr i32 %862, 4
  %864 = add i32 %863, 1
  %865 = add i32 %858, %864
  %866 = sub i32 %865, 1
  store i32 %866, ptr %11, align 4, !tbaa !9
  %867 = load ptr, ptr %8, align 8, !tbaa !5
  %868 = getelementptr inbounds %struct.entropy_data, ptr %867, i32 0, i32 0
  %869 = getelementptr inbounds [3 x i32], ptr %868, i64 0, i64 2
  %870 = load i32, ptr %869, align 4, !tbaa !9
  %871 = add i32 %870, 32
  %872 = udiv i32 %871, 32
  %873 = mul i32 %872, 5
  %874 = load ptr, ptr %8, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.entropy_data, ptr %874, i32 0, i32 0
  %876 = getelementptr inbounds [3 x i32], ptr %875, i64 0, i64 2
  %877 = load i32, ptr %876, align 4, !tbaa !9
  %878 = add i32 %877, %873
  store i32 %878, ptr %876, align 4, !tbaa !9
  br label %879

879:                                              ; preds = %846, %824
  br label %880

880:                                              ; preds = %879, %779
  br label %881

881:                                              ; preds = %880, %738
  %882 = load ptr, ptr %12, align 8, !tbaa !5
  %883 = load i32, ptr %11, align 4, !tbaa !9
  %884 = load i32, ptr %10, align 4, !tbaa !9
  %885 = sub i32 %883, %884
  %886 = call i32 @read_code(ptr noundef %882, i32 noundef %885)
  %887 = load i32, ptr %10, align 4, !tbaa !9
  %888 = add i32 %887, %886
  store i32 %888, ptr %10, align 4, !tbaa !9
  %889 = load ptr, ptr %12, align 8, !tbaa !5
  %890 = getelementptr inbounds %struct.bs, ptr %889, i32 0, i32 5
  %891 = load i32, ptr %890, align 4, !tbaa !25
  %892 = icmp ne i32 %891, 0
  br i1 %892, label %893, label %903

893:                                              ; preds = %881
  %894 = load ptr, ptr %12, align 8, !tbaa !5
  %895 = getelementptr inbounds %struct.bs, ptr %894, i32 0, i32 5
  %896 = load i32, ptr %895, align 4, !tbaa !25
  %897 = add nsw i32 %896, -1
  store i32 %897, ptr %895, align 4, !tbaa !25
  %898 = load ptr, ptr %12, align 8, !tbaa !5
  %899 = getelementptr inbounds %struct.bs, ptr %898, i32 0, i32 6
  %900 = load i32, ptr %899, align 8, !tbaa !26
  %901 = and i32 %900, 1
  %902 = icmp ne i32 %901, 0
  br i1 %902, label %930, label %935

903:                                              ; preds = %881
  %904 = load ptr, ptr %12, align 8, !tbaa !5
  %905 = getelementptr inbounds %struct.bs, ptr %904, i32 0, i32 2
  %906 = load ptr, ptr %905, align 8, !tbaa !11
  %907 = getelementptr inbounds i16, ptr %906, i32 1
  store ptr %907, ptr %905, align 8, !tbaa !11
  %908 = load ptr, ptr %12, align 8, !tbaa !5
  %909 = getelementptr inbounds %struct.bs, ptr %908, i32 0, i32 1
  %910 = load ptr, ptr %909, align 8, !tbaa !27
  %911 = icmp ne ptr %907, %910
  br i1 %911, label %912, label %913

912:                                              ; preds = %903
  br label %918

913:                                              ; preds = %903
  %914 = load ptr, ptr %12, align 8, !tbaa !5
  %915 = getelementptr inbounds %struct.bs, ptr %914, i32 0, i32 3
  %916 = load ptr, ptr %915, align 8, !tbaa !28
  %917 = load ptr, ptr %12, align 8, !tbaa !5
  call void %916(ptr noundef %917)
  br label %918

918:                                              ; preds = %913, %912
  %919 = load ptr, ptr %12, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.bs, ptr %919, i32 0, i32 5
  store i32 15, ptr %920, align 4, !tbaa !25
  %921 = load ptr, ptr %12, align 8, !tbaa !5
  %922 = getelementptr inbounds %struct.bs, ptr %921, i32 0, i32 2
  %923 = load ptr, ptr %922, align 8, !tbaa !11
  %924 = load i16, ptr %923, align 2, !tbaa !29
  %925 = zext i16 %924 to i32
  %926 = load ptr, ptr %12, align 8, !tbaa !5
  %927 = getelementptr inbounds %struct.bs, ptr %926, i32 0, i32 6
  store i32 %925, ptr %927, align 8, !tbaa !26
  %928 = and i32 %925, 1
  %929 = icmp ne i32 %928, 0
  br i1 %929, label %930, label %935

930:                                              ; preds = %918, %893
  %931 = load ptr, ptr %12, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.bs, ptr %931, i32 0, i32 6
  %933 = load i32, ptr %932, align 8, !tbaa !26
  %934 = lshr i32 %933, 1
  store i32 %934, ptr %932, align 8, !tbaa !26
  br i1 true, label %940, label %943

935:                                              ; preds = %918, %893
  %936 = load ptr, ptr %12, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.bs, ptr %936, i32 0, i32 6
  %938 = load i32, ptr %937, align 8, !tbaa !26
  %939 = lshr i32 %938, 1
  store i32 %939, ptr %937, align 8, !tbaa !26
  br i1 false, label %940, label %943

940:                                              ; preds = %935, %930
  %941 = load i32, ptr %10, align 4, !tbaa !9
  %942 = xor i32 %941, -1
  br label %945

943:                                              ; preds = %935, %930
  %944 = load i32, ptr %10, align 4, !tbaa !9
  br label %945

945:                                              ; preds = %943, %940
  %946 = phi i32 [ %942, %940 ], [ %944, %943 ]
  %947 = load ptr, ptr %6, align 8, !tbaa !5
  %948 = load i32, ptr %13, align 4, !tbaa !9
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds i32, ptr %947, i64 %949
  store i32 %946, ptr %950, align 4, !tbaa !9
  br label %951

951:                                              ; preds = %945, %418
  %952 = load i32, ptr %13, align 4, !tbaa !9
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %13, align 4, !tbaa !9
  br label %62, !llvm.loop !39

954:                                              ; preds = %695, %545, %418, %179, %62
  %955 = load ptr, ptr %5, align 8, !tbaa !5
  %956 = getelementptr inbounds %struct.WavpackStream, ptr %955, i32 0, i32 0
  %957 = getelementptr inbounds %struct.WavpackHeader, ptr %956, i32 0, i32 3
  %958 = load i32, ptr %957, align 8, !tbaa !13
  %959 = and i32 %958, 1073741828
  %960 = icmp ne i32 %959, 0
  br i1 %960, label %961, label %963

961:                                              ; preds = %954
  %962 = load i32, ptr %13, align 4, !tbaa !9
  br label %966

963:                                              ; preds = %954
  %964 = load i32, ptr %13, align 4, !tbaa !9
  %965 = sdiv i32 %964, 2
  br label %966

966:                                              ; preds = %963, %961
  %967 = phi i32 [ %962, %961 ], [ %965, %963 ]
  store i32 %967, ptr %4, align 4
  store i32 1, ptr %15, align 4
  br label %968

968:                                              ; preds = %966, %47
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  %969 = load i32, ptr %4, align 4
  ret i32 %969

970:                                              ; preds = %695, %418
  unreachable
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { 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 #3 = { 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 = { 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 16}
!12 = !{!"bs", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !10, i64 32, !10, i64 36, !10, i64 40}
!13 = !{!14, !10, i64 8}
!14 = !{!"", !15, i64 0, !17, i64 12, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !18, i64 128, !18, 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, !12, i64 200, !12, i64 248, !12, i64 296, !19, 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, !20, i64 360, !7, i64 432, !22, i64 1968, !6, i64 2064, !23, i64 2072}
!15 = !{!"", !7, i64 0, !16, i64 4, !16, i64 6, !10, i64 8}
!16 = !{!"short", !7, i64 0}
!17 = !{!"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}
!18 = !{!"long", !7, i64 0}
!19 = !{!"float", !7, i64 0}
!20 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !21, i64 24, !21, i64 32, !21, i64 40, !6, i64 48, !6, i64 56, !10, i64 64}
!21 = !{!"double", !7, i64 0}
!22 = !{!"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}
!23 = !{!"", !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}
!24 = !{!14, !10, i64 40}
!25 = !{!12, !10, i64 36}
!26 = !{!12, !10, i64 40}
!27 = !{!12, !6, i64 8}
!28 = !{!12, !6, i64 24}
!29 = !{!16, !16, i64 0}
!30 = !{!14, !10, i64 32}
!31 = !{!14, !10, i64 36}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = distinct !{!37, !33}
!38 = !{!7, !7, i64 0}
!39 = distinct !{!39, !33}


; 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: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0

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

; Function Attrs: nounwind uwtable
define dso_local i32 @get_words_lossless(ptr noundef %0, ptr nocapture noundef writeonly %1, i32 noundef %2) local_unnamed_addr #2 {
  %4 = getelementptr inbounds i8, ptr %0, i64 48
  %5 = getelementptr inbounds i8, ptr %0, i64 200
  %.not = icmp eq i32 %2, 0
  br i1 %.not, label %.thread392, label %7

.thread392:                                       ; preds = %3
  %6 = getelementptr inbounds i8, ptr %0, i64 8
  br label %.critedge4._crit_edge.sink.split

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %0, i64 216
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %.not259 = icmp eq ptr %9, null
  %10 = getelementptr inbounds i8, ptr %0, i64 8
  %11 = load i32, ptr %10, align 8, !tbaa !11
  %12 = and i32 %11, 1073741828
  %.not260 = icmp eq i32 %12, 0
  br i1 %.not259, label %13, label %16

13:                                               ; preds = %7
  %.v = select i1 %.not260, i32 3, i32 2
  %14 = shl nsw i32 %2, %.v
  %15 = sext i32 %14 to i64
  tail call void @llvm.memset.p0.i64(ptr align 4 %1, i8 0, i64 %15, i1 false)
  br label %484

16:                                               ; preds = %7
  %17 = zext i1 %.not260 to i32
  %spec.select = shl nsw i32 %2, %17
  %18 = icmp sgt i32 %2, 0
  br i1 %18, label %.lr.ph341, label %.critedge4._crit_edge

.lr.ph341:                                        ; preds = %16
  %19 = getelementptr inbounds i8, ptr %0, i64 40
  %20 = getelementptr inbounds i8, ptr %0, i64 236
  %21 = getelementptr inbounds i8, ptr %0, i64 240
  %22 = getelementptr inbounds i8, ptr %0, i64 216
  %23 = getelementptr inbounds i8, ptr %0, i64 208
  %24 = getelementptr inbounds i8, ptr %0, i64 224
  %25 = getelementptr inbounds i8, ptr %0, i64 32
  %26 = getelementptr inbounds i8, ptr %0, i64 68
  %27 = getelementptr inbounds i8, ptr %0, i64 36
  br label %28

28:                                               ; preds = %.lr.ph341, %.thread312
  %.0233339 = phi i32 [ 0, %.lr.ph341 ], [ %478, %.thread312 ]
  %.0241338 = phi ptr [ %4, %.lr.ph341 ], [ %.2243, %.thread312 ]
  %29 = load i32, ptr %10, align 8, !tbaa !11
  %30 = and i32 %29, 1073741828
  %.not262 = icmp eq i32 %30, 0
  %31 = and i32 %.0233339, 1
  %32 = zext nneg i32 %31 to i64
  %33 = getelementptr inbounds %struct.entropy_data, ptr %4, i64 %32
  %.1242 = select i1 %.not262, ptr %33, ptr %.0241338
  %34 = load i32, ptr %19, align 4, !tbaa !22
  %.not263 = icmp eq i32 %34, 0
  br i1 %.not263, label %80, label %35

35:                                               ; preds = %28
  store i32 0, ptr %19, align 4, !tbaa !22
  %36 = load i32, ptr %.1242, align 4, !tbaa !23
  %37 = lshr i32 %36, 4
  %38 = tail call i32 @read_code(ptr noundef nonnull %5, i32 noundef %37)
  %39 = load i32, ptr %.1242, align 4, !tbaa !23
  %40 = add i32 %39, 126
  %41 = lshr i32 %40, 6
  %42 = and i32 %41, 67108862
  %43 = sub i32 %39, %42
  store i32 %43, ptr %.1242, align 4, !tbaa !23
  %44 = load i32, ptr %20, align 4, !tbaa !24
  %.not264 = icmp eq i32 %44, 0
  br i1 %.not264, label %49, label %45

45:                                               ; preds = %35
  %46 = add nsw i32 %44, -1
  store i32 %46, ptr %20, align 4, !tbaa !24
  %47 = load i32, ptr %21, align 8, !tbaa !25
  %48 = and i32 %47, 1
  %.not267 = icmp eq i32 %48, 0
  br i1 %.not267, label %64, label %60

49:                                               ; preds = %35
  %50 = load ptr, ptr %22, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %50, i64 2
  store ptr %51, ptr %22, align 8, !tbaa !5
  %52 = load ptr, ptr %23, align 8, !tbaa !26
  %.not265 = icmp eq ptr %51, %52
  br i1 %.not265, label %53, label %55

53:                                               ; preds = %49
  %54 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %54(ptr noundef nonnull %5) #3
  %.pre = load ptr, ptr %22, align 8, !tbaa !5
  br label %55

55:                                               ; preds = %49, %53
  %56 = phi ptr [ %51, %49 ], [ %.pre, %53 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %57 = load i16, ptr %56, align 2, !tbaa !28
  %58 = zext i16 %57 to i32
  %59 = and i32 %58, 1
  %.not266 = icmp eq i32 %59, 0
  br i1 %.not266, label %64, label %60

60:                                               ; preds = %55, %45
  %61 = phi i32 [ %58, %55 ], [ %47, %45 ]
  %62 = lshr i32 %61, 1
  store i32 %62, ptr %21, align 8, !tbaa !25
  %63 = xor i32 %38, -1
  br label %67

64:                                               ; preds = %55, %45
  %65 = phi i32 [ %58, %55 ], [ %47, %45 ]
  %66 = lshr i32 %65, 1
  store i32 %66, ptr %21, align 8, !tbaa !25
  br label %67

67:                                               ; preds = %64, %60
  %68 = phi i32 [ %63, %60 ], [ %38, %64 ]
  %69 = sext i32 %.0233339 to i64
  %70 = getelementptr inbounds i32, ptr %1, i64 %69
  store i32 %68, ptr %70, align 4, !tbaa !23
  %71 = add nsw i32 %.0233339, 1
  %72 = icmp eq i32 %71, %spec.select
  br i1 %72, label %.critedge4._crit_edge.sink.split, label %73

73:                                               ; preds = %67
  %74 = load i32, ptr %10, align 8, !tbaa !11
  %75 = and i32 %74, 1073741828
  %.not268 = icmp eq i32 %75, 0
  br i1 %.not268, label %76, label %80

76:                                               ; preds = %73
  %77 = and i32 %71, 1
  %78 = zext nneg i32 %77 to i64
  %79 = getelementptr inbounds %struct.entropy_data, ptr %4, i64 %78
  br label %80

80:                                               ; preds = %73, %76, %28
  %.2243 = phi ptr [ %.1242, %73 ], [ %79, %76 ], [ %.1242, %28 ]
  %.1234 = phi i32 [ %71, %73 ], [ %71, %76 ], [ %.0233339, %28 ]
  %81 = load i32, ptr %4, align 4, !tbaa !23
  %82 = icmp ult i32 %81, 2
  br i1 %82, label %83, label %.thread309

83:                                               ; preds = %80
  %84 = load i32, ptr %25, align 4, !tbaa !29
  %.not269 = icmp eq i32 %84, 0
  br i1 %.not269, label %85, label %.thread309

85:                                               ; preds = %83
  %86 = load i32, ptr %26, align 4, !tbaa !23
  %87 = icmp ult i32 %86, 2
  br i1 %87, label %88, label %.thread309

88:                                               ; preds = %85
  %89 = load i32, ptr %27, align 4, !tbaa !30
  %.not270 = icmp eq i32 %89, 0
  br i1 %.not270, label %.preheader319.preheader, label %90

.preheader319.preheader:                          ; preds = %88
  %.pre358 = load i32, ptr %20, align 4, !tbaa !24
  br label %.preheader319

90:                                               ; preds = %88
  %91 = add i32 %89, -1
  store i32 %91, ptr %27, align 4, !tbaa !30
  %.not282 = icmp eq i32 %91, 0
  br i1 %.not282, label %.thread309, label %.thread312

.preheader319:                                    ; preds = %.preheader319.preheader, %.critedge306
  %92 = phi i32 [ %109, %.critedge306 ], [ %.pre358, %.preheader319.preheader ]
  %.0227326 = phi i32 [ %111, %.critedge306 ], [ 0, %.preheader319.preheader ]
  %.not271 = icmp eq i32 %92, 0
  br i1 %.not271, label %97, label %93

93:                                               ; preds = %.preheader319
  %94 = add nsw i32 %92, -1
  store i32 %94, ptr %20, align 4, !tbaa !24
  %95 = load i32, ptr %21, align 8, !tbaa !25
  %96 = and i32 %95, 1
  %.not274 = icmp eq i32 %96, 0
  br i1 %.not274, label %112, label %.critedge306

97:                                               ; preds = %.preheader319
  %98 = load ptr, ptr %22, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %98, i64 2
  store ptr %99, ptr %22, align 8, !tbaa !5
  %100 = load ptr, ptr %23, align 8, !tbaa !26
  %.not272 = icmp eq ptr %99, %100
  br i1 %.not272, label %101, label %103

101:                                              ; preds = %97
  %102 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %102(ptr noundef nonnull %5) #3
  %.pre359 = load ptr, ptr %22, align 8, !tbaa !5
  br label %103

103:                                              ; preds = %97, %101
  %104 = phi ptr [ %99, %97 ], [ %.pre359, %101 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %105 = load i16, ptr %104, align 2, !tbaa !28
  %106 = zext i16 %105 to i32
  store i32 %106, ptr %21, align 8, !tbaa !25
  %107 = and i32 %106, 1
  %.not273 = icmp eq i32 %107, 0
  br i1 %.not273, label %112, label %.critedge306

.critedge306:                                     ; preds = %103, %93
  %108 = phi i32 [ %106, %103 ], [ %95, %93 ]
  %109 = phi i32 [ 15, %103 ], [ %94, %93 ]
  %110 = lshr i32 %108, 1
  store i32 %110, ptr %21, align 8, !tbaa !25
  %111 = add nuw nsw i32 %.0227326, 1
  %exitcond.not = icmp eq i32 %111, 33
  br i1 %exitcond.not, label %.critedge4._crit_edge.sink.split, label %.preheader319, !llvm.loop !31

112:                                              ; preds = %93, %103
  %113 = phi i32 [ %94, %93 ], [ 15, %103 ]
  %114 = phi i32 [ %95, %93 ], [ %106, %103 ]
  %115 = lshr i32 %114, 1
  store i32 %115, ptr %21, align 8, !tbaa !25
  %116 = icmp ult i32 %.0227326, 2
  br i1 %116, label %151, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %112
  store i32 0, ptr %27, align 4, !tbaa !30
  %117 = add nsw i32 %.0227326, -1
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %145
  %118 = phi i32 [ %146, %145 ], [ %115, %.lr.ph.preheader ]
  %119 = phi i32 [ %147, %145 ], [ %113, %.lr.ph.preheader ]
  %120 = phi i32 [ %149, %145 ], [ %117, %.lr.ph.preheader ]
  %.0229328 = phi i32 [ %148, %145 ], [ 1, %.lr.ph.preheader ]
  %.not277 = icmp eq i32 %119, 0
  br i1 %.not277, label %124, label %121

121:                                              ; preds = %.lr.ph
  %122 = add nsw i32 %119, -1
  store i32 %122, ptr %20, align 4, !tbaa !24
  %123 = and i32 %118, 1
  %.not280 = icmp eq i32 %123, 0
  br i1 %.not280, label %141, label %135

124:                                              ; preds = %.lr.ph
  %125 = load ptr, ptr %22, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %125, i64 2
  store ptr %126, ptr %22, align 8, !tbaa !5
  %127 = load ptr, ptr %23, align 8, !tbaa !26
  %.not278 = icmp eq ptr %126, %127
  br i1 %.not278, label %128, label %130

128:                                              ; preds = %124
  %129 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %129(ptr noundef nonnull %5) #3
  %.pre360 = load ptr, ptr %22, align 8, !tbaa !5
  br label %130

130:                                              ; preds = %124, %128
  %131 = phi ptr [ %126, %124 ], [ %.pre360, %128 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %132 = load i16, ptr %131, align 2, !tbaa !28
  %133 = zext i16 %132 to i32
  %134 = and i32 %133, 1
  %.not279 = icmp eq i32 %134, 0
  br i1 %.not279, label %141, label %135

135:                                              ; preds = %130, %121
  %136 = phi i32 [ %133, %130 ], [ %118, %121 ]
  %137 = phi i32 [ 15, %130 ], [ %122, %121 ]
  %138 = lshr i32 %136, 1
  store i32 %138, ptr %21, align 8, !tbaa !25
  %139 = load i32, ptr %27, align 4, !tbaa !30
  %140 = or i32 %139, %.0229328
  store i32 %140, ptr %27, align 4, !tbaa !30
  br label %145

141:                                              ; preds = %130, %121
  %142 = phi i32 [ %133, %130 ], [ %118, %121 ]
  %143 = phi i32 [ 15, %130 ], [ %122, %121 ]
  %144 = lshr i32 %142, 1
  store i32 %144, ptr %21, align 8, !tbaa !25
  br label %145

145:                                              ; preds = %135, %141
  %146 = phi i32 [ %138, %135 ], [ %144, %141 ]
  %147 = phi i32 [ %137, %135 ], [ %143, %141 ]
  %148 = shl i32 %.0229328, 1
  %149 = add nsw i32 %120, -1
  %.not276 = icmp eq i32 %149, 0
  br i1 %.not276, label %._crit_edge, label %.lr.ph, !llvm.loop !33

._crit_edge:                                      ; preds = %145
  %.pre361 = load i32, ptr %27, align 4, !tbaa !30
  %150 = or i32 %.pre361, %148
  br label %151

151:                                              ; preds = %112, %._crit_edge
  %storemerge = phi i32 [ %150, %._crit_edge ], [ %.0227326, %112 ]
  store i32 %storemerge, ptr %27, align 4, !tbaa !30
  %.not281 = icmp eq i32 %storemerge, 0
  br i1 %.not281, label %.thread309, label %152

152:                                              ; preds = %151
  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) %26, i8 0, i64 12, i1 false)
  br label %.thread312

.thread309:                                       ; preds = %90, %151, %85, %83, %80
  %153 = load i32, ptr %20, align 4, !tbaa !24
  %154 = icmp slt i32 %153, 8
  br i1 %154, label %155, label %171

155:                                              ; preds = %.thread309
  %156 = load ptr, ptr %22, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 2
  store ptr %157, ptr %22, align 8, !tbaa !5
  %158 = load ptr, ptr %23, align 8, !tbaa !26
  %159 = icmp eq ptr %157, %158
  br i1 %159, label %160, label %162

160:                                              ; preds = %155
  %161 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %161(ptr noundef nonnull %5) #3
  %.pre362 = load ptr, ptr %22, align 8, !tbaa !5
  %.pre363 = load i32, ptr %20, align 4, !tbaa !24
  br label %162

162:                                              ; preds = %160, %155
  %163 = phi i32 [ %.pre363, %160 ], [ %153, %155 ]
  %164 = phi ptr [ %.pre362, %160 ], [ %157, %155 ]
  %165 = load i16, ptr %164, align 2, !tbaa !28
  %166 = zext i16 %165 to i32
  %167 = shl i32 %166, %163
  %168 = load i32, ptr %21, align 8, !tbaa !25
  %169 = or i32 %168, %167
  store i32 %169, ptr %21, align 8, !tbaa !25
  %170 = add i32 %163, 16
  store i32 %170, ptr %20, align 4, !tbaa !24
  br label %173

171:                                              ; preds = %.thread309
  %172 = load i32, ptr %21, align 8, !tbaa !25
  br label %173

173:                                              ; preds = %171, %162
  %174 = phi i32 [ %170, %162 ], [ %153, %171 ]
  %175 = phi i32 [ %169, %162 ], [ %172, %171 ]
  %.0232 = and i32 %175, 255
  %176 = icmp eq i32 %.0232, 255
  br i1 %176, label %177, label %378

177:                                              ; preds = %173
  %178 = add nsw i32 %174, -8
  store i32 %178, ptr %20, align 4, !tbaa !24
  %179 = lshr i32 %175, 8
  store i32 %179, ptr %21, align 8, !tbaa !25
  %.not283 = icmp eq i32 %178, 0
  br i1 %.not283, label %183, label %180

180:                                              ; preds = %177
  %181 = add nsw i32 %174, -9
  store i32 %181, ptr %20, align 4, !tbaa !24
  %182 = and i32 %175, 256
  %.not286 = icmp eq i32 %182, 0
  br i1 %.not286, label %.critedge2.thread, label %194

183:                                              ; preds = %177
  %184 = load ptr, ptr %22, align 8, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %184, i64 2
  store ptr %185, ptr %22, align 8, !tbaa !5
  %186 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284 = icmp eq ptr %185, %186
  br i1 %.not284, label %187, label %189

187:                                              ; preds = %183
  %188 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %188(ptr noundef nonnull %5) #3
  %.pre364 = load ptr, ptr %22, align 8, !tbaa !5
  br label %189

189:                                              ; preds = %183, %187
  %190 = phi ptr [ %185, %183 ], [ %.pre364, %187 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %191 = load i16, ptr %190, align 2, !tbaa !28
  %192 = zext i16 %191 to i32
  store i32 %192, ptr %21, align 8, !tbaa !25
  %193 = and i32 %192, 1
  %.not285 = icmp eq i32 %193, 0
  br i1 %.not285, label %.critedge2.thread, label %.thread395

.thread395:                                       ; preds = %189
  %storemerge287397 = lshr i32 %192, 1
  store i32 %storemerge287397, ptr %21, align 8, !tbaa !25
  br label %195

194:                                              ; preds = %180
  %storemerge287 = lshr i32 %175, 9
  store i32 %storemerge287, ptr %21, align 8, !tbaa !25
  %.not283.1 = icmp eq i32 %181, 0
  br i1 %.not283.1, label %199, label %195

195:                                              ; preds = %.thread395, %194
  %storemerge287400 = phi i32 [ %storemerge287397, %.thread395 ], [ %storemerge287, %194 ]
  %storemerge287.in399 = phi i32 [ %192, %.thread395 ], [ %179, %194 ]
  %196 = phi i32 [ 15, %.thread395 ], [ %181, %194 ]
  %197 = add nsw i32 %196, -1
  store i32 %197, ptr %20, align 4, !tbaa !24
  %198 = and i32 %storemerge287.in399, 2
  %.not286.1 = icmp eq i32 %198, 0
  br i1 %.not286.1, label %.critedge2.thread, label %210

199:                                              ; preds = %194
  %200 = load ptr, ptr %22, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 2
  store ptr %201, ptr %22, align 8, !tbaa !5
  %202 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.1 = icmp eq ptr %201, %202
  br i1 %.not284.1, label %203, label %205

203:                                              ; preds = %199
  %204 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %204(ptr noundef nonnull %5) #3
  %.pre366 = load ptr, ptr %22, align 8, !tbaa !5
  br label %205

205:                                              ; preds = %203, %199
  %206 = phi ptr [ %.pre366, %203 ], [ %201, %199 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %207 = load i16, ptr %206, align 2, !tbaa !28
  %208 = zext i16 %207 to i32
  store i32 %208, ptr %21, align 8, !tbaa !25
  %209 = and i32 %208, 1
  %.not285.1 = icmp eq i32 %209, 0
  br i1 %.not285.1, label %.critedge2.thread, label %.thread401

.thread401:                                       ; preds = %205
  %storemerge287.1403 = lshr i32 %208, 1
  store i32 %storemerge287.1403, ptr %21, align 8, !tbaa !25
  br label %211

210:                                              ; preds = %195
  %storemerge287.1 = lshr i32 %storemerge287400, 1
  store i32 %storemerge287.1, ptr %21, align 8, !tbaa !25
  %.not283.2 = icmp eq i32 %197, 0
  br i1 %.not283.2, label %215, label %211

211:                                              ; preds = %.thread401, %210
  %storemerge287.1406 = phi i32 [ %storemerge287.1403, %.thread401 ], [ %storemerge287.1, %210 ]
  %storemerge287.in.1405 = phi i32 [ %208, %.thread401 ], [ %storemerge287400, %210 ]
  %212 = phi i32 [ 15, %.thread401 ], [ %197, %210 ]
  %213 = add nsw i32 %212, -1
  store i32 %213, ptr %20, align 4, !tbaa !24
  %214 = and i32 %storemerge287.in.1405, 2
  %.not286.2 = icmp eq i32 %214, 0
  br i1 %.not286.2, label %.critedge2.thread, label %226

215:                                              ; preds = %210
  %216 = load ptr, ptr %22, align 8, !tbaa !5
  %217 = getelementptr inbounds i8, ptr %216, i64 2
  store ptr %217, ptr %22, align 8, !tbaa !5
  %218 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.2 = icmp eq ptr %217, %218
  br i1 %.not284.2, label %219, label %221

219:                                              ; preds = %215
  %220 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %220(ptr noundef nonnull %5) #3
  %.pre368 = load ptr, ptr %22, align 8, !tbaa !5
  br label %221

221:                                              ; preds = %219, %215
  %222 = phi ptr [ %.pre368, %219 ], [ %217, %215 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %223 = load i16, ptr %222, align 2, !tbaa !28
  %224 = zext i16 %223 to i32
  store i32 %224, ptr %21, align 8, !tbaa !25
  %225 = and i32 %224, 1
  %.not285.2 = icmp eq i32 %225, 0
  br i1 %.not285.2, label %.critedge2.thread, label %.thread407

.thread407:                                       ; preds = %221
  %storemerge287.2409 = lshr i32 %224, 1
  store i32 %storemerge287.2409, ptr %21, align 8, !tbaa !25
  br label %227

226:                                              ; preds = %211
  %storemerge287.2 = lshr i32 %storemerge287.1406, 1
  store i32 %storemerge287.2, ptr %21, align 8, !tbaa !25
  %.not283.3 = icmp eq i32 %213, 0
  br i1 %.not283.3, label %231, label %227

227:                                              ; preds = %.thread407, %226
  %storemerge287.2412 = phi i32 [ %storemerge287.2409, %.thread407 ], [ %storemerge287.2, %226 ]
  %storemerge287.in.2411 = phi i32 [ %224, %.thread407 ], [ %storemerge287.1406, %226 ]
  %228 = phi i32 [ 15, %.thread407 ], [ %213, %226 ]
  %229 = add nsw i32 %228, -1
  store i32 %229, ptr %20, align 4, !tbaa !24
  %230 = and i32 %storemerge287.in.2411, 2
  %.not286.3 = icmp eq i32 %230, 0
  br i1 %.not286.3, label %.critedge2.thread, label %242

231:                                              ; preds = %226
  %232 = load ptr, ptr %22, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %232, i64 2
  store ptr %233, ptr %22, align 8, !tbaa !5
  %234 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.3 = icmp eq ptr %233, %234
  br i1 %.not284.3, label %235, label %237

235:                                              ; preds = %231
  %236 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %236(ptr noundef nonnull %5) #3
  %.pre370 = load ptr, ptr %22, align 8, !tbaa !5
  br label %237

237:                                              ; preds = %235, %231
  %238 = phi ptr [ %.pre370, %235 ], [ %233, %231 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %239 = load i16, ptr %238, align 2, !tbaa !28
  %240 = zext i16 %239 to i32
  store i32 %240, ptr %21, align 8, !tbaa !25
  %241 = and i32 %240, 1
  %.not285.3 = icmp eq i32 %241, 0
  br i1 %.not285.3, label %.critedge2.thread, label %.thread413

.thread413:                                       ; preds = %237
  %storemerge287.3415 = lshr i32 %240, 1
  store i32 %storemerge287.3415, ptr %21, align 8, !tbaa !25
  br label %243

242:                                              ; preds = %227
  %storemerge287.3 = lshr i32 %storemerge287.2412, 1
  store i32 %storemerge287.3, ptr %21, align 8, !tbaa !25
  %.not283.4 = icmp eq i32 %229, 0
  br i1 %.not283.4, label %247, label %243

243:                                              ; preds = %.thread413, %242
  %storemerge287.3418 = phi i32 [ %storemerge287.3415, %.thread413 ], [ %storemerge287.3, %242 ]
  %storemerge287.in.3417 = phi i32 [ %240, %.thread413 ], [ %storemerge287.2412, %242 ]
  %244 = phi i32 [ 15, %.thread413 ], [ %229, %242 ]
  %245 = add nsw i32 %244, -1
  store i32 %245, ptr %20, align 4, !tbaa !24
  %246 = and i32 %storemerge287.in.3417, 2
  %.not286.4 = icmp eq i32 %246, 0
  br i1 %.not286.4, label %.critedge2.thread, label %258

247:                                              ; preds = %242
  %248 = load ptr, ptr %22, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %248, i64 2
  store ptr %249, ptr %22, align 8, !tbaa !5
  %250 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.4 = icmp eq ptr %249, %250
  br i1 %.not284.4, label %251, label %253

251:                                              ; preds = %247
  %252 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %252(ptr noundef nonnull %5) #3
  %.pre372 = load ptr, ptr %22, align 8, !tbaa !5
  br label %253

253:                                              ; preds = %251, %247
  %254 = phi ptr [ %.pre372, %251 ], [ %249, %247 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %255 = load i16, ptr %254, align 2, !tbaa !28
  %256 = zext i16 %255 to i32
  store i32 %256, ptr %21, align 8, !tbaa !25
  %257 = and i32 %256, 1
  %.not285.4 = icmp eq i32 %257, 0
  br i1 %.not285.4, label %.critedge2.thread, label %.thread419

.thread419:                                       ; preds = %253
  %storemerge287.4421 = lshr i32 %256, 1
  store i32 %storemerge287.4421, ptr %21, align 8, !tbaa !25
  br label %259

258:                                              ; preds = %243
  %storemerge287.4 = lshr i32 %storemerge287.3418, 1
  store i32 %storemerge287.4, ptr %21, align 8, !tbaa !25
  %.not283.5 = icmp eq i32 %245, 0
  br i1 %.not283.5, label %263, label %259

259:                                              ; preds = %.thread419, %258
  %storemerge287.4424 = phi i32 [ %storemerge287.4421, %.thread419 ], [ %storemerge287.4, %258 ]
  %storemerge287.in.4423 = phi i32 [ %256, %.thread419 ], [ %storemerge287.3418, %258 ]
  %260 = phi i32 [ 15, %.thread419 ], [ %245, %258 ]
  %261 = add nsw i32 %260, -1
  store i32 %261, ptr %20, align 4, !tbaa !24
  %262 = and i32 %storemerge287.in.4423, 2
  %.not286.5 = icmp eq i32 %262, 0
  br i1 %.not286.5, label %.critedge2.thread, label %274

263:                                              ; preds = %258
  %264 = load ptr, ptr %22, align 8, !tbaa !5
  %265 = getelementptr inbounds i8, ptr %264, i64 2
  store ptr %265, ptr %22, align 8, !tbaa !5
  %266 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.5 = icmp eq ptr %265, %266
  br i1 %.not284.5, label %267, label %269

267:                                              ; preds = %263
  %268 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %268(ptr noundef nonnull %5) #3
  %.pre374 = load ptr, ptr %22, align 8, !tbaa !5
  br label %269

269:                                              ; preds = %267, %263
  %270 = phi ptr [ %.pre374, %267 ], [ %265, %263 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %271 = load i16, ptr %270, align 2, !tbaa !28
  %272 = zext i16 %271 to i32
  store i32 %272, ptr %21, align 8, !tbaa !25
  %273 = and i32 %272, 1
  %.not285.5 = icmp eq i32 %273, 0
  br i1 %.not285.5, label %.critedge2.thread, label %.thread425

.thread425:                                       ; preds = %269
  %storemerge287.5427 = lshr i32 %272, 1
  store i32 %storemerge287.5427, ptr %21, align 8, !tbaa !25
  br label %275

274:                                              ; preds = %259
  %storemerge287.5 = lshr i32 %storemerge287.4424, 1
  store i32 %storemerge287.5, ptr %21, align 8, !tbaa !25
  %.not283.6 = icmp eq i32 %261, 0
  br i1 %.not283.6, label %279, label %275

275:                                              ; preds = %.thread425, %274
  %storemerge287.5430 = phi i32 [ %storemerge287.5427, %.thread425 ], [ %storemerge287.5, %274 ]
  %storemerge287.in.5429 = phi i32 [ %272, %.thread425 ], [ %storemerge287.4424, %274 ]
  %276 = phi i32 [ 15, %.thread425 ], [ %261, %274 ]
  %277 = add nsw i32 %276, -1
  store i32 %277, ptr %20, align 4, !tbaa !24
  %278 = and i32 %storemerge287.in.5429, 2
  %.not286.6 = icmp eq i32 %278, 0
  br i1 %.not286.6, label %.critedge2.thread, label %290

279:                                              ; preds = %274
  %280 = load ptr, ptr %22, align 8, !tbaa !5
  %281 = getelementptr inbounds i8, ptr %280, i64 2
  store ptr %281, ptr %22, align 8, !tbaa !5
  %282 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.6 = icmp eq ptr %281, %282
  br i1 %.not284.6, label %283, label %285

283:                                              ; preds = %279
  %284 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %284(ptr noundef nonnull %5) #3
  %.pre376 = load ptr, ptr %22, align 8, !tbaa !5
  br label %285

285:                                              ; preds = %283, %279
  %286 = phi ptr [ %.pre376, %283 ], [ %281, %279 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %287 = load i16, ptr %286, align 2, !tbaa !28
  %288 = zext i16 %287 to i32
  store i32 %288, ptr %21, align 8, !tbaa !25
  %289 = and i32 %288, 1
  %.not285.6 = icmp eq i32 %289, 0
  br i1 %.not285.6, label %.critedge2.thread, label %.thread431

.thread431:                                       ; preds = %285
  %storemerge287.6433 = lshr i32 %288, 1
  store i32 %storemerge287.6433, ptr %21, align 8, !tbaa !25
  br label %291

290:                                              ; preds = %275
  %storemerge287.6 = lshr i32 %storemerge287.5430, 1
  store i32 %storemerge287.6, ptr %21, align 8, !tbaa !25
  %.not283.7 = icmp eq i32 %277, 0
  br i1 %.not283.7, label %295, label %291

291:                                              ; preds = %.thread431, %290
  %storemerge287.6436 = phi i32 [ %storemerge287.6433, %.thread431 ], [ %storemerge287.6, %290 ]
  %storemerge287.in.6435 = phi i32 [ %288, %.thread431 ], [ %storemerge287.5430, %290 ]
  %292 = phi i32 [ 15, %.thread431 ], [ %277, %290 ]
  %293 = add nsw i32 %292, -1
  store i32 %293, ptr %20, align 4, !tbaa !24
  %294 = and i32 %storemerge287.in.6435, 2
  %.not286.7 = icmp eq i32 %294, 0
  br i1 %.not286.7, label %.critedge2.thread, label %306

295:                                              ; preds = %290
  %296 = load ptr, ptr %22, align 8, !tbaa !5
  %297 = getelementptr inbounds i8, ptr %296, i64 2
  store ptr %297, ptr %22, align 8, !tbaa !5
  %298 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.7 = icmp eq ptr %297, %298
  br i1 %.not284.7, label %299, label %301

299:                                              ; preds = %295
  %300 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %300(ptr noundef nonnull %5) #3
  %.pre378 = load ptr, ptr %22, align 8, !tbaa !5
  br label %301

301:                                              ; preds = %299, %295
  %302 = phi ptr [ %.pre378, %299 ], [ %297, %295 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %303 = load i16, ptr %302, align 2, !tbaa !28
  %304 = zext i16 %303 to i32
  store i32 %304, ptr %21, align 8, !tbaa !25
  %305 = and i32 %304, 1
  %.not285.7 = icmp eq i32 %305, 0
  br i1 %.not285.7, label %.critedge2.thread, label %.thread437

.thread437:                                       ; preds = %301
  %storemerge287.7439 = lshr i32 %304, 1
  store i32 %storemerge287.7439, ptr %21, align 8, !tbaa !25
  br label %307

306:                                              ; preds = %291
  %storemerge287.7 = lshr i32 %storemerge287.6436, 1
  store i32 %storemerge287.7, ptr %21, align 8, !tbaa !25
  %.not283.8 = icmp eq i32 %293, 0
  br i1 %.not283.8, label %311, label %307

307:                                              ; preds = %.thread437, %306
  %storemerge287.7442 = phi i32 [ %storemerge287.7439, %.thread437 ], [ %storemerge287.7, %306 ]
  %storemerge287.in.7441 = phi i32 [ %304, %.thread437 ], [ %storemerge287.6436, %306 ]
  %308 = phi i32 [ 15, %.thread437 ], [ %293, %306 ]
  %309 = add nsw i32 %308, -1
  store i32 %309, ptr %20, align 4, !tbaa !24
  %310 = and i32 %storemerge287.in.7441, 2
  %.not286.8 = icmp eq i32 %310, 0
  br i1 %.not286.8, label %.preheader318.preheader, label %.critedge2

311:                                              ; preds = %306
  %312 = load ptr, ptr %22, align 8, !tbaa !5
  %313 = getelementptr inbounds i8, ptr %312, i64 2
  store ptr %313, ptr %22, align 8, !tbaa !5
  %314 = load ptr, ptr %23, align 8, !tbaa !26
  %.not284.8 = icmp eq ptr %313, %314
  br i1 %.not284.8, label %315, label %317

315:                                              ; preds = %311
  %316 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %316(ptr noundef nonnull %5) #3
  %.pre380 = load ptr, ptr %22, align 8, !tbaa !5
  br label %317

317:                                              ; preds = %315, %311
  %318 = phi ptr [ %.pre380, %315 ], [ %313, %311 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %319 = load i16, ptr %318, align 2, !tbaa !28
  %320 = zext i16 %319 to i32
  store i32 %320, ptr %21, align 8, !tbaa !25
  %321 = and i32 %320, 1
  %.not285.8 = icmp eq i32 %321, 0
  br i1 %.not285.8, label %.preheader318.preheader, label %.critedge2

.critedge2.thread:                                ; preds = %189, %180, %195, %205, %211, %221, %227, %237, %243, %253, %259, %269, %275, %285, %291, %301
  %storemerge391.in.ph = phi i32 [ %304, %301 ], [ %storemerge287.6436, %291 ], [ %288, %285 ], [ %storemerge287.5430, %275 ], [ %272, %269 ], [ %storemerge287.4424, %259 ], [ %256, %253 ], [ %storemerge287.3418, %243 ], [ %240, %237 ], [ %storemerge287.2412, %227 ], [ %224, %221 ], [ %storemerge287.1406, %211 ], [ %208, %205 ], [ %storemerge287400, %195 ], [ %179, %180 ], [ %192, %189 ]
  %.0238323.ph = phi i32 [ 15, %301 ], [ 15, %291 ], [ 14, %285 ], [ 14, %275 ], [ 13, %269 ], [ 13, %259 ], [ 12, %253 ], [ 12, %243 ], [ 11, %237 ], [ 11, %227 ], [ 10, %221 ], [ 10, %211 ], [ 9, %205 ], [ 9, %195 ], [ 8, %180 ], [ 8, %189 ]
  %storemerge391445 = lshr i32 %storemerge391.in.ph, 1
  store i32 %storemerge391445, ptr %21, align 8, !tbaa !25
  br label %386

.critedge2:                                       ; preds = %307, %317
  %storemerge287.in.8 = phi i32 [ %320, %317 ], [ %storemerge287.7442, %307 ]
  %storemerge391 = lshr i32 %storemerge287.in.8, 1
  store i32 %storemerge391, ptr %21, align 8, !tbaa !25
  br label %.critedge4._crit_edge.sink.split

.preheader318.preheader:                          ; preds = %307, %317
  %storemerge391.in.ph447 = phi i32 [ %320, %317 ], [ %storemerge287.7442, %307 ]
  %.ph = phi i32 [ 15, %317 ], [ %309, %307 ]
  %storemerge391451 = lshr i32 %storemerge391.in.ph447, 1
  store i32 %storemerge391451, ptr %21, align 8, !tbaa !25
  br label %.preheader318

.preheader318:                                    ; preds = %.preheader318.preheader, %338
  %322 = phi i32 [ %storemerge293, %338 ], [ %storemerge391451, %.preheader318.preheader ]
  %323 = phi i32 [ %339, %338 ], [ %.ph, %.preheader318.preheader ]
  %.0330 = phi i32 [ %340, %338 ], [ 0, %.preheader318.preheader ]
  %.not289 = icmp eq i32 %323, 0
  br i1 %.not289, label %327, label %324

324:                                              ; preds = %.preheader318
  %325 = add nsw i32 %323, -1
  store i32 %325, ptr %20, align 4, !tbaa !24
  %326 = and i32 %322, 1
  %.not292 = icmp eq i32 %326, 0
  br i1 %.not292, label %341, label %338

327:                                              ; preds = %.preheader318
  %328 = load ptr, ptr %22, align 8, !tbaa !5
  %329 = getelementptr inbounds i8, ptr %328, i64 2
  store ptr %329, ptr %22, align 8, !tbaa !5
  %330 = load ptr, ptr %23, align 8, !tbaa !26
  %.not290 = icmp eq ptr %329, %330
  br i1 %.not290, label %331, label %333

331:                                              ; preds = %327
  %332 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %332(ptr noundef nonnull %5) #3
  %.pre383 = load ptr, ptr %22, align 8, !tbaa !5
  br label %333

333:                                              ; preds = %327, %331
  %334 = phi ptr [ %329, %327 ], [ %.pre383, %331 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %335 = load i16, ptr %334, align 2, !tbaa !28
  %336 = zext i16 %335 to i32
  store i32 %336, ptr %21, align 8, !tbaa !25
  %337 = and i32 %336, 1
  %.not291 = icmp eq i32 %337, 0
  br i1 %.not291, label %341, label %338

338:                                              ; preds = %324, %333
  %storemerge293.in = phi i32 [ %322, %324 ], [ %336, %333 ]
  %339 = phi i32 [ %325, %324 ], [ 15, %333 ]
  %storemerge293 = lshr i32 %storemerge293.in, 1
  store i32 %storemerge293, ptr %21, align 8, !tbaa !25
  %340 = add nuw nsw i32 %.0330, 1
  %exitcond357.not = icmp eq i32 %340, 33
  br i1 %exitcond357.not, label %.critedge4._crit_edge.sink.split, label %.preheader318, !llvm.loop !34

341:                                              ; preds = %333, %324
  %342 = phi i32 [ %325, %324 ], [ 15, %333 ]
  %storemerge293.in.c = phi i32 [ %322, %324 ], [ %336, %333 ]
  %storemerge293.c = lshr i32 %storemerge293.in.c, 1
  store i32 %storemerge293.c, ptr %21, align 8, !tbaa !25
  %343 = icmp ult i32 %.0330, 2
  br i1 %343, label %.thread314, label %.lr.ph334.preheader

.lr.ph334.preheader:                              ; preds = %341
  %344 = add nsw i32 %.0330, -1
  br label %.lr.ph334

.lr.ph334:                                        ; preds = %.lr.ph334.preheader, %371
  %345 = phi i32 [ %372, %371 ], [ %storemerge293.c, %.lr.ph334.preheader ]
  %346 = phi i32 [ %373, %371 ], [ %342, %.lr.ph334.preheader ]
  %347 = phi i32 [ %375, %371 ], [ %344, %.lr.ph334.preheader ]
  %.0226333 = phi i32 [ %374, %371 ], [ 1, %.lr.ph334.preheader ]
  %.1239332 = phi i32 [ %.2240, %371 ], [ 0, %.lr.ph334.preheader ]
  %.not296 = icmp eq i32 %346, 0
  br i1 %.not296, label %351, label %348

348:                                              ; preds = %.lr.ph334
  %349 = add nsw i32 %346, -1
  store i32 %349, ptr %20, align 4, !tbaa !24
  %350 = and i32 %345, 1
  %.not299 = icmp eq i32 %350, 0
  br i1 %.not299, label %367, label %362

351:                                              ; preds = %.lr.ph334
  %352 = load ptr, ptr %22, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i64 2
  store ptr %353, ptr %22, align 8, !tbaa !5
  %354 = load ptr, ptr %23, align 8, !tbaa !26
  %.not297 = icmp eq ptr %353, %354
  br i1 %.not297, label %355, label %357

355:                                              ; preds = %351
  %356 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %356(ptr noundef nonnull %5) #3
  %.pre387 = load ptr, ptr %22, align 8, !tbaa !5
  br label %357

357:                                              ; preds = %351, %355
  %358 = phi ptr [ %353, %351 ], [ %.pre387, %355 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %359 = load i16, ptr %358, align 2, !tbaa !28
  %360 = zext i16 %359 to i32
  %361 = and i32 %360, 1
  %.not298 = icmp eq i32 %361, 0
  br i1 %.not298, label %367, label %362

362:                                              ; preds = %357, %348
  %363 = phi i32 [ %360, %357 ], [ %345, %348 ]
  %364 = phi i32 [ 15, %357 ], [ %349, %348 ]
  %365 = lshr i32 %363, 1
  store i32 %365, ptr %21, align 8, !tbaa !25
  %366 = or i32 %.0226333, %.1239332
  br label %371

367:                                              ; preds = %357, %348
  %368 = phi i32 [ %360, %357 ], [ %345, %348 ]
  %369 = phi i32 [ 15, %357 ], [ %349, %348 ]
  %370 = lshr i32 %368, 1
  store i32 %370, ptr %21, align 8, !tbaa !25
  br label %371

371:                                              ; preds = %362, %367
  %372 = phi i32 [ %365, %362 ], [ %370, %367 ]
  %373 = phi i32 [ %364, %362 ], [ %369, %367 ]
  %.2240 = phi i32 [ %366, %362 ], [ %.1239332, %367 ]
  %374 = shl i32 %.0226333, 1
  %375 = add nsw i32 %347, -1
  %.not295 = icmp eq i32 %375, 0
  br i1 %.not295, label %._crit_edge335, label %.lr.ph334, !llvm.loop !35

._crit_edge335:                                   ; preds = %371
  %376 = or i32 %374, %.2240
  br label %.thread314

.thread314:                                       ; preds = %._crit_edge335, %341
  %.3 = phi i32 [ %376, %._crit_edge335 ], [ %.0330, %341 ]
  %377 = add i32 %.3, 16
  br label %386

378:                                              ; preds = %173
  %379 = zext nneg i32 %.0232 to i64
  %380 = getelementptr inbounds [256 x i8], ptr @ones_count_table, i64 0, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !36
  %382 = sext i8 %381 to i32
  %383 = add nsw i32 %382, 1
  %384 = sub i32 %174, %383
  store i32 %384, ptr %20, align 4, !tbaa !24
  %385 = lshr i32 %175, %383
  store i32 %385, ptr %21, align 8, !tbaa !25
  br label %386

386:                                              ; preds = %.critedge2.thread, %.thread314, %378
  %.5 = phi i32 [ %382, %378 ], [ %377, %.thread314 ], [ %.0238323.ph, %.critedge2.thread ]
  %387 = load i32, ptr %25, align 4, !tbaa !29
  %388 = and i32 %.5, 1
  store i32 %388, ptr %25, align 4, !tbaa !29
  %389 = xor i32 %388, 1
  store i32 %389, ptr %19, align 4, !tbaa !22
  %390 = lshr i32 %.5, 1
  %391 = add i32 %390, %387
  %392 = icmp eq i32 %391, 0
  %393 = load i32, ptr %.2243, align 4, !tbaa !23
  %394 = lshr i32 %393, 4
  br i1 %392, label %395, label %400

395:                                              ; preds = %386
  %396 = add i32 %393, 126
  %397 = lshr i32 %396, 6
  %398 = and i32 %397, 67108862
  %399 = sub i32 %393, %398
  store i32 %399, ptr %.2243, align 4, !tbaa !23
  br label %449

400:                                              ; preds = %386
  %401 = add i32 %393, 128
  %402 = lshr i32 %401, 7
  %403 = mul nuw nsw i32 %402, 5
  %404 = add i32 %403, %393
  store i32 %404, ptr %.2243, align 4, !tbaa !23
  %405 = icmp eq i32 %391, 1
  br i1 %405, label %406, label %416

406:                                              ; preds = %400
  %407 = add nuw nsw i32 %394, 1
  %408 = getelementptr inbounds i8, ptr %.2243, i64 4
  %409 = load i32, ptr %408, align 4, !tbaa !23
  %410 = lshr i32 %409, 4
  %411 = add nuw nsw i32 %410, %407
  %412 = add i32 %409, 62
  %413 = lshr i32 %412, 5
  %414 = and i32 %413, 134217726
  %415 = sub i32 %409, %414
  store i32 %415, ptr %408, align 4, !tbaa !23
  br label %449

416:                                              ; preds = %400
  %417 = getelementptr inbounds i8, ptr %.2243, i64 4
  %418 = load i32, ptr %417, align 4, !tbaa !23
  %419 = lshr i32 %418, 4
  %420 = add nuw nsw i32 %394, 2
  %421 = add nuw nsw i32 %420, %419
  %422 = add i32 %418, 64
  %423 = lshr i32 %422, 6
  %424 = mul nuw nsw i32 %423, 5
  %425 = add i32 %424, %418
  store i32 %425, ptr %417, align 4, !tbaa !23
  %426 = icmp eq i32 %391, 2
  br i1 %426, label %427, label %436

427:                                              ; preds = %416
  %428 = getelementptr inbounds i8, ptr %.2243, i64 8
  %429 = load i32, ptr %428, align 4, !tbaa !23
  %430 = lshr i32 %429, 4
  %431 = add nuw nsw i32 %430, %421
  %432 = add i32 %429, 30
  %433 = lshr i32 %432, 4
  %434 = and i32 %433, 268435454
  %435 = sub i32 %429, %434
  store i32 %435, ptr %428, align 4, !tbaa !23
  br label %449

436:                                              ; preds = %416
  %437 = add i32 %391, -2
  %438 = getelementptr inbounds i8, ptr %.2243, i64 8
  %439 = load i32, ptr %438, align 4, !tbaa !23
  %440 = lshr i32 %439, 4
  %441 = add nuw nsw i32 %440, 1
  %442 = mul i32 %441, %437
  %443 = add i32 %442, %421
  %444 = add i32 %443, %440
  %445 = add i32 %439, 32
  %446 = lshr i32 %445, 5
  %447 = mul nuw nsw i32 %446, 5
  %448 = add i32 %447, %439
  store i32 %448, ptr %438, align 4, !tbaa !23
  br label %449

449:                                              ; preds = %406, %436, %427, %395
  %.0237 = phi i32 [ 0, %395 ], [ %407, %406 ], [ %421, %427 ], [ %443, %436 ]
  %.0236 = phi i32 [ %394, %395 ], [ %411, %406 ], [ %431, %427 ], [ %444, %436 ]
  %450 = sub i32 %.0236, %.0237
  %451 = tail call i32 @read_code(ptr noundef nonnull %5, i32 noundef %450)
  %452 = add i32 %451, %.0237
  %453 = load i32, ptr %20, align 4, !tbaa !24
  %.not300 = icmp eq i32 %453, 0
  br i1 %.not300, label %458, label %454

454:                                              ; preds = %449
  %455 = add nsw i32 %453, -1
  store i32 %455, ptr %20, align 4, !tbaa !24
  %456 = load i32, ptr %21, align 8, !tbaa !25
  %457 = and i32 %456, 1
  %.not303 = icmp eq i32 %457, 0
  br i1 %.not303, label %473, label %469

458:                                              ; preds = %449
  %459 = load ptr, ptr %22, align 8, !tbaa !5
  %460 = getelementptr inbounds i8, ptr %459, i64 2
  store ptr %460, ptr %22, align 8, !tbaa !5
  %461 = load ptr, ptr %23, align 8, !tbaa !26
  %.not301 = icmp eq ptr %460, %461
  br i1 %.not301, label %462, label %464

462:                                              ; preds = %458
  %463 = load ptr, ptr %24, align 8, !tbaa !27
  tail call void %463(ptr noundef nonnull %5) #3
  %.pre388 = load ptr, ptr %22, align 8, !tbaa !5
  br label %464

464:                                              ; preds = %458, %462
  %465 = phi ptr [ %460, %458 ], [ %.pre388, %462 ]
  store i32 15, ptr %20, align 4, !tbaa !24
  %466 = load i16, ptr %465, align 2, !tbaa !28
  %467 = zext i16 %466 to i32
  %468 = and i32 %467, 1
  %.not302 = icmp eq i32 %468, 0
  br i1 %.not302, label %473, label %469

469:                                              ; preds = %464, %454
  %470 = phi i32 [ %467, %464 ], [ %456, %454 ]
  %471 = lshr i32 %470, 1
  store i32 %471, ptr %21, align 8, !tbaa !25
  %472 = xor i32 %452, -1
  br label %.thread312

473:                                              ; preds = %464, %454
  %474 = phi i32 [ %467, %464 ], [ %456, %454 ]
  %475 = lshr i32 %474, 1
  store i32 %475, ptr %21, align 8, !tbaa !25
  br label %.thread312

.thread312:                                       ; preds = %469, %473, %90, %152
  %.sink = phi i32 [ 0, %152 ], [ 0, %90 ], [ %472, %469 ], [ %452, %473 ]
  %476 = sext i32 %.1234 to i64
  %477 = getelementptr inbounds i32, ptr %1, i64 %476
  store i32 %.sink, ptr %477, align 4, !tbaa !23
  %478 = add nsw i32 %.1234, 1
  %479 = icmp slt i32 %478, %spec.select
  br i1 %479, label %28, label %.critedge4._crit_edge.sink.split, !llvm.loop !37

.critedge4._crit_edge.sink.split:                 ; preds = %.thread312, %67, %.critedge306, %338, %.critedge2, %.thread392
  %.sink464 = phi ptr [ %6, %.thread392 ], [ %10, %.critedge2 ], [ %10, %338 ], [ %10, %.critedge306 ], [ %10, %67 ], [ %10, %.thread312 ]
  %.2.ph462 = phi i32 [ 0, %.thread392 ], [ %.1234, %.critedge2 ], [ %.1234, %338 ], [ %.1234, %.critedge306 ], [ %478, %.thread312 ], [ %spec.select, %67 ]
  %480 = load i32, ptr %.sink464, align 8, !tbaa !11
  %481 = and i32 %480, 1073741828
  br label %.critedge4._crit_edge

.critedge4._crit_edge:                            ; preds = %.critedge4._crit_edge.sink.split, %16
  %.pre-phi = phi i32 [ %12, %16 ], [ %481, %.critedge4._crit_edge.sink.split ]
  %.2 = phi i32 [ 0, %16 ], [ %.2.ph462, %.critedge4._crit_edge.sink.split ]
  %.not304 = icmp eq i32 %.pre-phi, 0
  %482 = sdiv i32 %.2, 2
  %483 = select i1 %.not304, i32 %482, i32 %.2
  br label %484

484:                                              ; preds = %.critedge4._crit_edge, %13
  %.0235 = phi i32 [ %483, %.critedge4._crit_edge ], [ %2, %13 ]
  ret i32 %.0235
}

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

!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, !7, i64 16}
!6 = !{!"bs", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!12, !10, i64 8}
!12 = !{!"", !13, i64 0, !15, i64 12, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !16, i64 128, !16, i64 136, !10, i64 144, !10, i64 148, !10, i64 152, !8, i64 156, !8, i64 157, !8, i64 158, !8, i64 159, !8, i64 160, !8, i64 161, !8, 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, !6, i64 200, !6, i64 248, !6, i64 296, !17, 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, !18, i64 360, !8, i64 432, !20, i64 1968, !7, i64 2064, !21, i64 2072}
!13 = !{!"", !8, i64 0, !14, i64 4, !14, i64 6, !10, i64 8}
!14 = !{!"short", !8, i64 0}
!15 = !{!"words_data", !8, i64 0, !8, i64 8, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !8, i64 36}
!16 = !{!"long", !8, i64 0}
!17 = !{!"float", !8, i64 0}
!18 = !{!"", !8, i64 0, !8, i64 8, !8, i64 16, !19, i64 24, !19, i64 32, !19, i64 40, !7, i64 48, !7, i64 56, !10, i64 64}
!19 = !{!"double", !8, i64 0}
!20 = !{!"decorr_pass", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !8, i64 16, !8, i64 48, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92}
!21 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !8, i64 40, !8, i64 41, !10, i64 44, !10, i64 48, !10, i64 52, !7, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !8, i64 76, !7, i64 160}
!22 = !{!12, !10, i64 40}
!23 = !{!10, !10, i64 0}
!24 = !{!6, !10, i64 36}
!25 = !{!6, !10, i64 40}
!26 = !{!6, !7, i64 8}
!27 = !{!6, !7, i64 24}
!28 = !{!14, !14, i64 0}
!29 = !{!12, !10, i64 32}
!30 = !{!12, !10, i64 36}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !32}
!36 = !{!8, !8, i64 0}
!37 = distinct !{!37, !32}


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