; LLVM IR from dbry/wavpack-stream :: src (write_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 }

@nbits_table = external constant [256 x i8], align 16
@bitmask = external constant [32 x i32], 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nounwind uwtable
define dso_local void @flush_word(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %5 = load ptr, ptr %2, align 8, !tbaa !5
  %6 = getelementptr inbounds %struct.WavpackStream, ptr %5, i32 0, i32 1
  %7 = getelementptr inbounds %struct.words_data, ptr %6, i32 0, i32 4
  %8 = load i32, ptr %7, align 4, !tbaa !9
  %9 = icmp ne i32 %8, 0
  br i1 %9, label %10, label %263

10:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #2
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct.WavpackStream, ptr %11, i32 0, i32 1
  %13 = getelementptr inbounds %struct.words_data, ptr %12, i32 0, i32 4
  %14 = load i32, ptr %13, align 4, !tbaa !9
  %15 = icmp ult i32 %14, 256
  br i1 %15, label %16, label %25

16:                                               ; preds = %10
  %17 = load ptr, ptr %2, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.WavpackStream, ptr %17, i32 0, i32 1
  %19 = getelementptr inbounds %struct.words_data, ptr %18, i32 0, i32 4
  %20 = load i32, ptr %19, align 4, !tbaa !9
  %21 = zext i32 %20 to i64
  %22 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %21
  %23 = load i8, ptr %22, align 1, !tbaa !22
  %24 = sext i8 %23 to i32
  br label %76

25:                                               ; preds = %10
  %26 = load ptr, ptr %2, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.WavpackStream, ptr %26, i32 0, i32 1
  %28 = getelementptr inbounds %struct.words_data, ptr %27, i32 0, i32 4
  %29 = load i32, ptr %28, align 4, !tbaa !9
  %30 = zext i32 %29 to i64
  %31 = icmp slt i64 %30, 65536
  br i1 %31, label %32, label %43

32:                                               ; preds = %25
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.WavpackStream, ptr %33, i32 0, i32 1
  %35 = getelementptr inbounds %struct.words_data, ptr %34, i32 0, i32 4
  %36 = load i32, ptr %35, align 4, !tbaa !9
  %37 = lshr i32 %36, 8
  %38 = zext i32 %37 to i64
  %39 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %38
  %40 = load i8, ptr %39, align 1, !tbaa !22
  %41 = sext i8 %40 to i32
  %42 = add nsw i32 %41, 8
  br label %74

43:                                               ; preds = %25
  %44 = load ptr, ptr %2, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.WavpackStream, ptr %44, i32 0, i32 1
  %46 = getelementptr inbounds %struct.words_data, ptr %45, i32 0, i32 4
  %47 = load i32, ptr %46, align 4, !tbaa !9
  %48 = zext i32 %47 to i64
  %49 = icmp slt i64 %48, 16777216
  br i1 %49, label %50, label %61

50:                                               ; preds = %43
  %51 = load ptr, ptr %2, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.WavpackStream, ptr %51, i32 0, i32 1
  %53 = getelementptr inbounds %struct.words_data, ptr %52, i32 0, i32 4
  %54 = load i32, ptr %53, align 4, !tbaa !9
  %55 = lshr i32 %54, 16
  %56 = zext i32 %55 to i64
  %57 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %56
  %58 = load i8, ptr %57, align 1, !tbaa !22
  %59 = sext i8 %58 to i32
  %60 = add nsw i32 %59, 16
  br label %72

61:                                               ; preds = %43
  %62 = load ptr, ptr %2, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.WavpackStream, ptr %62, i32 0, i32 1
  %64 = getelementptr inbounds %struct.words_data, ptr %63, i32 0, i32 4
  %65 = load i32, ptr %64, align 4, !tbaa !9
  %66 = lshr i32 %65, 24
  %67 = zext i32 %66 to i64
  %68 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %67
  %69 = load i8, ptr %68, align 1, !tbaa !22
  %70 = sext i8 %69 to i32
  %71 = add nsw i32 %70, 24
  br label %72

72:                                               ; preds = %61, %50
  %73 = phi i32 [ %60, %50 ], [ %71, %61 ]
  br label %74

74:                                               ; preds = %72, %32
  %75 = phi i32 [ %42, %32 ], [ %73, %72 ]
  br label %76

76:                                               ; preds = %74, %16
  %77 = phi i32 [ %24, %16 ], [ %75, %74 ]
  store i32 %77, ptr %3, align 4, !tbaa !23
  br label %78

78:                                               ; preds = %137, %76
  %79 = load i32, ptr %3, align 4, !tbaa !23
  %80 = add nsw i32 %79, -1
  store i32 %80, ptr %3, align 4, !tbaa !23
  %81 = icmp ne i32 %79, 0
  br i1 %81, label %82, label %138

82:                                               ; preds = %78
  br label %83

83:                                               ; preds = %82
  %84 = load ptr, ptr %2, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.WavpackStream, ptr %84, i32 0, i32 27
  %86 = getelementptr inbounds %struct.bs, ptr %85, i32 0, i32 5
  %87 = load i32, ptr %86, align 4, !tbaa !24
  %88 = shl i32 1, %87
  %89 = load ptr, ptr %2, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.WavpackStream, ptr %89, i32 0, i32 27
  %91 = getelementptr inbounds %struct.bs, ptr %90, i32 0, i32 6
  %92 = load i32, ptr %91, align 8, !tbaa !25
  %93 = or i32 %92, %88
  store i32 %93, ptr %91, align 8, !tbaa !25
  %94 = load ptr, ptr %2, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.WavpackStream, ptr %94, i32 0, i32 27
  %96 = getelementptr inbounds %struct.bs, ptr %95, i32 0, i32 5
  %97 = load i32, ptr %96, align 4, !tbaa !24
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %96, align 4, !tbaa !24
  %99 = sext i32 %98 to i64
  %100 = icmp eq i64 %99, 16
  br i1 %100, label %101, label %135

101:                                              ; preds = %83
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.WavpackStream, ptr %102, i32 0, i32 27
  %104 = getelementptr inbounds %struct.bs, ptr %103, i32 0, i32 6
  %105 = load i32, ptr %104, align 8, !tbaa !25
  %106 = trunc i32 %105 to i16
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.WavpackStream, ptr %107, i32 0, i32 27
  %109 = getelementptr inbounds %struct.bs, ptr %108, i32 0, i32 2
  %110 = load ptr, ptr %109, align 8, !tbaa !26
  store i16 %106, ptr %110, align 2, !tbaa !27
  %111 = load ptr, ptr %2, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.WavpackStream, ptr %111, i32 0, i32 27
  %113 = getelementptr inbounds %struct.bs, ptr %112, i32 0, i32 5
  store i32 0, ptr %113, align 4, !tbaa !24
  %114 = load ptr, ptr %2, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.WavpackStream, ptr %114, i32 0, i32 27
  %116 = getelementptr inbounds %struct.bs, ptr %115, i32 0, i32 6
  store i32 0, ptr %116, align 8, !tbaa !25
  %117 = load ptr, ptr %2, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.WavpackStream, ptr %117, i32 0, i32 27
  %119 = getelementptr inbounds %struct.bs, ptr %118, i32 0, i32 2
  %120 = load ptr, ptr %119, align 8, !tbaa !26
  %121 = getelementptr inbounds i16, ptr %120, i32 1
  store ptr %121, ptr %119, align 8, !tbaa !26
  %122 = load ptr, ptr %2, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.WavpackStream, ptr %122, i32 0, i32 27
  %124 = getelementptr inbounds %struct.bs, ptr %123, i32 0, i32 1
  %125 = load ptr, ptr %124, align 8, !tbaa !28
  %126 = icmp eq ptr %121, %125
  br i1 %126, label %127, label %134

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

134:                                              ; preds = %127, %101
  br label %135

135:                                              ; preds = %134, %83
  br label %136

136:                                              ; preds = %135
  br label %137

137:                                              ; preds = %136
  br label %78, !llvm.loop !30

138:                                              ; preds = %78
  br label %139

139:                                              ; preds = %138
  %140 = load ptr, ptr %2, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.WavpackStream, ptr %140, i32 0, i32 27
  %142 = getelementptr inbounds %struct.bs, ptr %141, i32 0, i32 5
  %143 = load i32, ptr %142, align 4, !tbaa !24
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %142, align 4, !tbaa !24
  %145 = sext i32 %144 to i64
  %146 = icmp eq i64 %145, 16
  br i1 %146, label %147, label %181

147:                                              ; preds = %139
  %148 = load ptr, ptr %2, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.WavpackStream, ptr %148, i32 0, i32 27
  %150 = getelementptr inbounds %struct.bs, ptr %149, i32 0, i32 6
  %151 = load i32, ptr %150, align 8, !tbaa !25
  %152 = trunc i32 %151 to i16
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.WavpackStream, ptr %153, i32 0, i32 27
  %155 = getelementptr inbounds %struct.bs, ptr %154, i32 0, i32 2
  %156 = load ptr, ptr %155, align 8, !tbaa !26
  store i16 %152, ptr %156, align 2, !tbaa !27
  %157 = load ptr, ptr %2, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.WavpackStream, ptr %157, i32 0, i32 27
  %159 = getelementptr inbounds %struct.bs, ptr %158, i32 0, i32 5
  store i32 0, ptr %159, align 4, !tbaa !24
  %160 = load ptr, ptr %2, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.WavpackStream, ptr %160, i32 0, i32 27
  %162 = getelementptr inbounds %struct.bs, ptr %161, i32 0, i32 6
  store i32 0, ptr %162, align 8, !tbaa !25
  %163 = load ptr, ptr %2, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.WavpackStream, ptr %163, i32 0, i32 27
  %165 = getelementptr inbounds %struct.bs, ptr %164, i32 0, i32 2
  %166 = load ptr, ptr %165, align 8, !tbaa !26
  %167 = getelementptr inbounds i16, ptr %166, i32 1
  store ptr %167, ptr %165, align 8, !tbaa !26
  %168 = load ptr, ptr %2, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.WavpackStream, ptr %168, i32 0, i32 27
  %170 = getelementptr inbounds %struct.bs, ptr %169, i32 0, i32 1
  %171 = load ptr, ptr %170, align 8, !tbaa !28
  %172 = icmp eq ptr %167, %171
  br i1 %172, label %173, label %180

173:                                              ; preds = %147
  %174 = load ptr, ptr %2, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.WavpackStream, ptr %174, i32 0, i32 27
  %176 = getelementptr inbounds %struct.bs, ptr %175, i32 0, i32 3
  %177 = load ptr, ptr %176, align 8, !tbaa !29
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.WavpackStream, ptr %178, i32 0, i32 27
  call void %177(ptr noundef %179)
  br label %180

180:                                              ; preds = %173, %147
  br label %181

181:                                              ; preds = %180, %139
  br label %182

182:                                              ; preds = %181
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %253, %183
  %185 = load ptr, ptr %2, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.WavpackStream, ptr %185, i32 0, i32 1
  %187 = getelementptr inbounds %struct.words_data, ptr %186, i32 0, i32 4
  %188 = load i32, ptr %187, align 4, !tbaa !9
  %189 = icmp ugt i32 %188, 1
  br i1 %189, label %190, label %259

190:                                              ; preds = %184
  br label %191

191:                                              ; preds = %190
  %192 = load ptr, ptr %2, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.WavpackStream, ptr %192, i32 0, i32 1
  %194 = getelementptr inbounds %struct.words_data, ptr %193, i32 0, i32 4
  %195 = load i32, ptr %194, align 4, !tbaa !9
  %196 = and i32 %195, 1
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %209

198:                                              ; preds = %191
  %199 = load ptr, ptr %2, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.WavpackStream, ptr %199, i32 0, i32 27
  %201 = getelementptr inbounds %struct.bs, ptr %200, i32 0, i32 5
  %202 = load i32, ptr %201, align 4, !tbaa !24
  %203 = shl i32 1, %202
  %204 = load ptr, ptr %2, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.WavpackStream, ptr %204, i32 0, i32 27
  %206 = getelementptr inbounds %struct.bs, ptr %205, i32 0, i32 6
  %207 = load i32, ptr %206, align 8, !tbaa !25
  %208 = or i32 %207, %203
  store i32 %208, ptr %206, align 8, !tbaa !25
  br label %209

209:                                              ; preds = %198, %191
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.WavpackStream, ptr %210, i32 0, i32 27
  %212 = getelementptr inbounds %struct.bs, ptr %211, i32 0, i32 5
  %213 = load i32, ptr %212, align 4, !tbaa !24
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %212, align 4, !tbaa !24
  %215 = sext i32 %214 to i64
  %216 = icmp eq i64 %215, 16
  br i1 %216, label %217, label %251

217:                                              ; preds = %209
  %218 = load ptr, ptr %2, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.WavpackStream, ptr %218, i32 0, i32 27
  %220 = getelementptr inbounds %struct.bs, ptr %219, i32 0, i32 6
  %221 = load i32, ptr %220, align 8, !tbaa !25
  %222 = trunc i32 %221 to i16
  %223 = load ptr, ptr %2, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.WavpackStream, ptr %223, i32 0, i32 27
  %225 = getelementptr inbounds %struct.bs, ptr %224, i32 0, i32 2
  %226 = load ptr, ptr %225, align 8, !tbaa !26
  store i16 %222, ptr %226, align 2, !tbaa !27
  %227 = load ptr, ptr %2, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.WavpackStream, ptr %227, i32 0, i32 27
  %229 = getelementptr inbounds %struct.bs, ptr %228, i32 0, i32 5
  store i32 0, ptr %229, align 4, !tbaa !24
  %230 = load ptr, ptr %2, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.WavpackStream, ptr %230, i32 0, i32 27
  %232 = getelementptr inbounds %struct.bs, ptr %231, i32 0, i32 6
  store i32 0, ptr %232, align 8, !tbaa !25
  %233 = load ptr, ptr %2, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.WavpackStream, ptr %233, i32 0, i32 27
  %235 = getelementptr inbounds %struct.bs, ptr %234, i32 0, i32 2
  %236 = load ptr, ptr %235, align 8, !tbaa !26
  %237 = getelementptr inbounds i16, ptr %236, i32 1
  store ptr %237, ptr %235, align 8, !tbaa !26
  %238 = load ptr, ptr %2, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.WavpackStream, ptr %238, i32 0, i32 27
  %240 = getelementptr inbounds %struct.bs, ptr %239, i32 0, i32 1
  %241 = load ptr, ptr %240, align 8, !tbaa !28
  %242 = icmp eq ptr %237, %241
  br i1 %242, label %243, label %250

243:                                              ; preds = %217
  %244 = load ptr, ptr %2, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.WavpackStream, ptr %244, i32 0, i32 27
  %246 = getelementptr inbounds %struct.bs, ptr %245, i32 0, i32 3
  %247 = load ptr, ptr %246, align 8, !tbaa !29
  %248 = load ptr, ptr %2, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.WavpackStream, ptr %248, i32 0, i32 27
  call void %247(ptr noundef %249)
  br label %250

250:                                              ; preds = %243, %217
  br label %251

251:                                              ; preds = %250, %209
  br label %252

252:                                              ; preds = %251
  br label %253

253:                                              ; preds = %252
  %254 = load ptr, ptr %2, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.WavpackStream, ptr %254, i32 0, i32 1
  %256 = getelementptr inbounds %struct.words_data, ptr %255, i32 0, i32 4
  %257 = load i32, ptr %256, align 4, !tbaa !9
  %258 = lshr i32 %257, 1
  store i32 %258, ptr %256, align 4, !tbaa !9
  br label %184, !llvm.loop !32

259:                                              ; preds = %184
  %260 = load ptr, ptr %2, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct.WavpackStream, ptr %260, i32 0, i32 1
  %262 = getelementptr inbounds %struct.words_data, ptr %261, i32 0, i32 4
  store i32 0, ptr %262, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #2
  br label %263

263:                                              ; preds = %259, %1
  %264 = load ptr, ptr %2, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.WavpackStream, ptr %264, i32 0, i32 1
  %266 = getelementptr inbounds %struct.words_data, ptr %265, i32 0, i32 3
  %267 = load i32, ptr %266, align 4, !tbaa !33
  %268 = icmp ne i32 %267, 0
  br i1 %268, label %269, label %732

269:                                              ; preds = %263
  %270 = load ptr, ptr %2, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct.WavpackStream, ptr %270, i32 0, i32 1
  %272 = getelementptr inbounds %struct.words_data, ptr %271, i32 0, i32 3
  %273 = load i32, ptr %272, align 4, !tbaa !33
  %274 = icmp uge i32 %273, 16
  br i1 %274, label %275, label %621

275:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #2
  br label %276

276:                                              ; preds = %275
  %277 = load ptr, ptr %2, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.WavpackStream, ptr %277, i32 0, i32 27
  %279 = getelementptr inbounds %struct.bs, ptr %278, i32 0, i32 5
  %280 = load i32, ptr %279, align 4, !tbaa !24
  %281 = shl i32 65535, %280
  %282 = load ptr, ptr %2, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.WavpackStream, ptr %282, i32 0, i32 27
  %284 = getelementptr inbounds %struct.bs, ptr %283, i32 0, i32 6
  %285 = load i32, ptr %284, align 8, !tbaa !25
  %286 = or i32 %285, %281
  store i32 %286, ptr %284, align 8, !tbaa !25
  %287 = load ptr, ptr %2, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.WavpackStream, ptr %287, i32 0, i32 27
  %289 = getelementptr inbounds %struct.bs, ptr %288, i32 0, i32 5
  %290 = load i32, ptr %289, align 4, !tbaa !24
  %291 = add nsw i32 %290, 17
  store i32 %291, ptr %289, align 4, !tbaa !24
  %292 = sext i32 %291 to i64
  %293 = icmp uge i64 %292, 16
  br i1 %293, label %294, label %361

294:                                              ; preds = %276
  br label %295

295:                                              ; preds = %353, %294
  %296 = load ptr, ptr %2, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.WavpackStream, ptr %296, i32 0, i32 27
  %298 = getelementptr inbounds %struct.bs, ptr %297, i32 0, i32 6
  %299 = load i32, ptr %298, align 8, !tbaa !25
  %300 = trunc i32 %299 to i16
  %301 = load ptr, ptr %2, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.WavpackStream, ptr %301, i32 0, i32 27
  %303 = getelementptr inbounds %struct.bs, ptr %302, i32 0, i32 2
  %304 = load ptr, ptr %303, align 8, !tbaa !26
  store i16 %300, ptr %304, align 2, !tbaa !27
  %305 = load ptr, ptr %2, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.WavpackStream, ptr %305, i32 0, i32 27
  %307 = getelementptr inbounds %struct.bs, ptr %306, i32 0, i32 6
  %308 = load i32, ptr %307, align 8, !tbaa !25
  %309 = lshr i32 %308, 16
  store i32 %309, ptr %307, align 8, !tbaa !25
  %310 = load ptr, ptr %2, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.WavpackStream, ptr %310, i32 0, i32 27
  %312 = getelementptr inbounds %struct.bs, ptr %311, i32 0, i32 5
  %313 = load i32, ptr %312, align 4, !tbaa !24
  %314 = sext i32 %313 to i64
  %315 = sub i64 %314, 16
  %316 = trunc i64 %315 to i32
  store i32 %316, ptr %312, align 4, !tbaa !24
  %317 = sext i32 %316 to i64
  %318 = icmp ugt i64 %317, 16
  br i1 %318, label %319, label %334

319:                                              ; preds = %295
  %320 = load ptr, ptr %2, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.WavpackStream, ptr %320, i32 0, i32 27
  %322 = getelementptr inbounds %struct.bs, ptr %321, i32 0, i32 5
  %323 = load i32, ptr %322, align 4, !tbaa !24
  %324 = sub nsw i32 17, %323
  %325 = zext i32 %324 to i64
  %326 = ashr i64 65535, %325
  %327 = load ptr, ptr %2, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.WavpackStream, ptr %327, i32 0, i32 27
  %329 = getelementptr inbounds %struct.bs, ptr %328, i32 0, i32 6
  %330 = load i32, ptr %329, align 8, !tbaa !25
  %331 = zext i32 %330 to i64
  %332 = or i64 %331, %326
  %333 = trunc i64 %332 to i32
  store i32 %333, ptr %329, align 8, !tbaa !25
  br label %334

334:                                              ; preds = %319, %295
  %335 = load ptr, ptr %2, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.WavpackStream, ptr %335, i32 0, i32 27
  %337 = getelementptr inbounds %struct.bs, ptr %336, i32 0, i32 2
  %338 = load ptr, ptr %337, align 8, !tbaa !26
  %339 = getelementptr inbounds i16, ptr %338, i32 1
  store ptr %339, ptr %337, align 8, !tbaa !26
  %340 = load ptr, ptr %2, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.WavpackStream, ptr %340, i32 0, i32 27
  %342 = getelementptr inbounds %struct.bs, ptr %341, i32 0, i32 1
  %343 = load ptr, ptr %342, align 8, !tbaa !28
  %344 = icmp eq ptr %339, %343
  br i1 %344, label %345, label %352

345:                                              ; preds = %334
  %346 = load ptr, ptr %2, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.WavpackStream, ptr %346, i32 0, i32 27
  %348 = getelementptr inbounds %struct.bs, ptr %347, i32 0, i32 3
  %349 = load ptr, ptr %348, align 8, !tbaa !29
  %350 = load ptr, ptr %2, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.WavpackStream, ptr %350, i32 0, i32 27
  call void %349(ptr noundef %351)
  br label %352

352:                                              ; preds = %345, %334
  br label %353

353:                                              ; preds = %352
  %354 = load ptr, ptr %2, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.WavpackStream, ptr %354, i32 0, i32 27
  %356 = getelementptr inbounds %struct.bs, ptr %355, i32 0, i32 5
  %357 = load i32, ptr %356, align 4, !tbaa !24
  %358 = sext i32 %357 to i64
  %359 = icmp uge i64 %358, 16
  br i1 %359, label %295, label %360, !llvm.loop !34

360:                                              ; preds = %353
  br label %361

361:                                              ; preds = %360, %276
  br label %362

362:                                              ; preds = %361
  br label %363

363:                                              ; preds = %362
  %364 = load ptr, ptr %2, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.WavpackStream, ptr %364, i32 0, i32 1
  %366 = getelementptr inbounds %struct.words_data, ptr %365, i32 0, i32 3
  %367 = load i32, ptr %366, align 4, !tbaa !33
  %368 = sub i32 %367, 16
  store i32 %368, ptr %366, align 4, !tbaa !33
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.WavpackStream, ptr %369, i32 0, i32 1
  %371 = getelementptr inbounds %struct.words_data, ptr %370, i32 0, i32 3
  %372 = load i32, ptr %371, align 4, !tbaa !33
  %373 = icmp ult i32 %372, 256
  br i1 %373, label %374, label %383

374:                                              ; preds = %363
  %375 = load ptr, ptr %2, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.WavpackStream, ptr %375, i32 0, i32 1
  %377 = getelementptr inbounds %struct.words_data, ptr %376, i32 0, i32 3
  %378 = load i32, ptr %377, align 4, !tbaa !33
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %379
  %381 = load i8, ptr %380, align 1, !tbaa !22
  %382 = sext i8 %381 to i32
  br label %434

383:                                              ; preds = %363
  %384 = load ptr, ptr %2, align 8, !tbaa !5
  %385 = getelementptr inbounds %struct.WavpackStream, ptr %384, i32 0, i32 1
  %386 = getelementptr inbounds %struct.words_data, ptr %385, i32 0, i32 3
  %387 = load i32, ptr %386, align 4, !tbaa !33
  %388 = zext i32 %387 to i64
  %389 = icmp slt i64 %388, 65536
  br i1 %389, label %390, label %401

390:                                              ; preds = %383
  %391 = load ptr, ptr %2, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.WavpackStream, ptr %391, i32 0, i32 1
  %393 = getelementptr inbounds %struct.words_data, ptr %392, i32 0, i32 3
  %394 = load i32, ptr %393, align 4, !tbaa !33
  %395 = lshr i32 %394, 8
  %396 = zext i32 %395 to i64
  %397 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %396
  %398 = load i8, ptr %397, align 1, !tbaa !22
  %399 = sext i8 %398 to i32
  %400 = add nsw i32 %399, 8
  br label %432

401:                                              ; preds = %383
  %402 = load ptr, ptr %2, 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 3
  %405 = load i32, ptr %404, align 4, !tbaa !33
  %406 = zext i32 %405 to i64
  %407 = icmp slt i64 %406, 16777216
  br i1 %407, label %408, label %419

408:                                              ; preds = %401
  %409 = load ptr, ptr %2, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.WavpackStream, ptr %409, i32 0, i32 1
  %411 = getelementptr inbounds %struct.words_data, ptr %410, i32 0, i32 3
  %412 = load i32, ptr %411, align 4, !tbaa !33
  %413 = lshr i32 %412, 16
  %414 = zext i32 %413 to i64
  %415 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %414
  %416 = load i8, ptr %415, align 1, !tbaa !22
  %417 = sext i8 %416 to i32
  %418 = add nsw i32 %417, 16
  br label %430

419:                                              ; preds = %401
  %420 = load ptr, ptr %2, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.WavpackStream, ptr %420, i32 0, i32 1
  %422 = getelementptr inbounds %struct.words_data, ptr %421, i32 0, i32 3
  %423 = load i32, ptr %422, align 4, !tbaa !33
  %424 = lshr i32 %423, 24
  %425 = zext i32 %424 to i64
  %426 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %425
  %427 = load i8, ptr %426, align 1, !tbaa !22
  %428 = sext i8 %427 to i32
  %429 = add nsw i32 %428, 24
  br label %430

430:                                              ; preds = %419, %408
  %431 = phi i32 [ %418, %408 ], [ %429, %419 ]
  br label %432

432:                                              ; preds = %430, %390
  %433 = phi i32 [ %400, %390 ], [ %431, %430 ]
  br label %434

434:                                              ; preds = %432, %374
  %435 = phi i32 [ %382, %374 ], [ %433, %432 ]
  store i32 %435, ptr %4, align 4, !tbaa !23
  br label %436

436:                                              ; preds = %495, %434
  %437 = load i32, ptr %4, align 4, !tbaa !23
  %438 = add nsw i32 %437, -1
  store i32 %438, ptr %4, align 4, !tbaa !23
  %439 = icmp ne i32 %437, 0
  br i1 %439, label %440, label %496

440:                                              ; preds = %436
  br label %441

441:                                              ; preds = %440
  %442 = load ptr, ptr %2, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.WavpackStream, ptr %442, i32 0, i32 27
  %444 = getelementptr inbounds %struct.bs, ptr %443, i32 0, i32 5
  %445 = load i32, ptr %444, align 4, !tbaa !24
  %446 = shl i32 1, %445
  %447 = load ptr, ptr %2, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.WavpackStream, ptr %447, i32 0, i32 27
  %449 = getelementptr inbounds %struct.bs, ptr %448, i32 0, i32 6
  %450 = load i32, ptr %449, align 8, !tbaa !25
  %451 = or i32 %450, %446
  store i32 %451, ptr %449, align 8, !tbaa !25
  %452 = load ptr, ptr %2, align 8, !tbaa !5
  %453 = getelementptr inbounds %struct.WavpackStream, ptr %452, i32 0, i32 27
  %454 = getelementptr inbounds %struct.bs, ptr %453, i32 0, i32 5
  %455 = load i32, ptr %454, align 4, !tbaa !24
  %456 = add nsw i32 %455, 1
  store i32 %456, ptr %454, align 4, !tbaa !24
  %457 = sext i32 %456 to i64
  %458 = icmp eq i64 %457, 16
  br i1 %458, label %459, label %493

459:                                              ; preds = %441
  %460 = load ptr, ptr %2, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.WavpackStream, ptr %460, i32 0, i32 27
  %462 = getelementptr inbounds %struct.bs, ptr %461, i32 0, i32 6
  %463 = load i32, ptr %462, align 8, !tbaa !25
  %464 = trunc i32 %463 to i16
  %465 = load ptr, ptr %2, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.WavpackStream, ptr %465, i32 0, i32 27
  %467 = getelementptr inbounds %struct.bs, ptr %466, i32 0, i32 2
  %468 = load ptr, ptr %467, align 8, !tbaa !26
  store i16 %464, ptr %468, align 2, !tbaa !27
  %469 = load ptr, ptr %2, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.WavpackStream, ptr %469, i32 0, i32 27
  %471 = getelementptr inbounds %struct.bs, ptr %470, i32 0, i32 5
  store i32 0, ptr %471, align 4, !tbaa !24
  %472 = load ptr, ptr %2, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.WavpackStream, ptr %472, i32 0, i32 27
  %474 = getelementptr inbounds %struct.bs, ptr %473, i32 0, i32 6
  store i32 0, ptr %474, align 8, !tbaa !25
  %475 = load ptr, ptr %2, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.WavpackStream, ptr %475, i32 0, i32 27
  %477 = getelementptr inbounds %struct.bs, ptr %476, i32 0, i32 2
  %478 = load ptr, ptr %477, align 8, !tbaa !26
  %479 = getelementptr inbounds i16, ptr %478, i32 1
  store ptr %479, ptr %477, align 8, !tbaa !26
  %480 = load ptr, ptr %2, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.WavpackStream, ptr %480, i32 0, i32 27
  %482 = getelementptr inbounds %struct.bs, ptr %481, i32 0, i32 1
  %483 = load ptr, ptr %482, align 8, !tbaa !28
  %484 = icmp eq ptr %479, %483
  br i1 %484, label %485, label %492

485:                                              ; preds = %459
  %486 = load ptr, ptr %2, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.WavpackStream, ptr %486, i32 0, i32 27
  %488 = getelementptr inbounds %struct.bs, ptr %487, i32 0, i32 3
  %489 = load ptr, ptr %488, align 8, !tbaa !29
  %490 = load ptr, ptr %2, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.WavpackStream, ptr %490, i32 0, i32 27
  call void %489(ptr noundef %491)
  br label %492

492:                                              ; preds = %485, %459
  br label %493

493:                                              ; preds = %492, %441
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494
  br label %436, !llvm.loop !35

496:                                              ; preds = %436
  br label %497

497:                                              ; preds = %496
  %498 = load ptr, ptr %2, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.WavpackStream, ptr %498, i32 0, i32 27
  %500 = getelementptr inbounds %struct.bs, ptr %499, i32 0, i32 5
  %501 = load i32, ptr %500, align 4, !tbaa !24
  %502 = add nsw i32 %501, 1
  store i32 %502, ptr %500, align 4, !tbaa !24
  %503 = sext i32 %502 to i64
  %504 = icmp eq i64 %503, 16
  br i1 %504, label %505, label %539

505:                                              ; preds = %497
  %506 = load ptr, ptr %2, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.WavpackStream, ptr %506, i32 0, i32 27
  %508 = getelementptr inbounds %struct.bs, ptr %507, i32 0, i32 6
  %509 = load i32, ptr %508, align 8, !tbaa !25
  %510 = trunc i32 %509 to i16
  %511 = load ptr, ptr %2, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.WavpackStream, ptr %511, i32 0, i32 27
  %513 = getelementptr inbounds %struct.bs, ptr %512, i32 0, i32 2
  %514 = load ptr, ptr %513, align 8, !tbaa !26
  store i16 %510, ptr %514, align 2, !tbaa !27
  %515 = load ptr, ptr %2, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.WavpackStream, ptr %515, i32 0, i32 27
  %517 = getelementptr inbounds %struct.bs, ptr %516, i32 0, i32 5
  store i32 0, ptr %517, align 4, !tbaa !24
  %518 = load ptr, ptr %2, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.WavpackStream, ptr %518, i32 0, i32 27
  %520 = getelementptr inbounds %struct.bs, ptr %519, i32 0, i32 6
  store i32 0, ptr %520, align 8, !tbaa !25
  %521 = load ptr, ptr %2, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.WavpackStream, ptr %521, i32 0, i32 27
  %523 = getelementptr inbounds %struct.bs, ptr %522, i32 0, i32 2
  %524 = load ptr, ptr %523, align 8, !tbaa !26
  %525 = getelementptr inbounds i16, ptr %524, i32 1
  store ptr %525, ptr %523, align 8, !tbaa !26
  %526 = load ptr, ptr %2, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.WavpackStream, ptr %526, i32 0, i32 27
  %528 = getelementptr inbounds %struct.bs, ptr %527, i32 0, i32 1
  %529 = load ptr, ptr %528, align 8, !tbaa !28
  %530 = icmp eq ptr %525, %529
  br i1 %530, label %531, label %538

531:                                              ; preds = %505
  %532 = load ptr, ptr %2, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.WavpackStream, ptr %532, i32 0, i32 27
  %534 = getelementptr inbounds %struct.bs, ptr %533, i32 0, i32 3
  %535 = load ptr, ptr %534, align 8, !tbaa !29
  %536 = load ptr, ptr %2, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.WavpackStream, ptr %536, i32 0, i32 27
  call void %535(ptr noundef %537)
  br label %538

538:                                              ; preds = %531, %505
  br label %539

539:                                              ; preds = %538, %497
  br label %540

540:                                              ; preds = %539
  br label %541

541:                                              ; preds = %540
  br label %542

542:                                              ; preds = %611, %541
  %543 = load ptr, ptr %2, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.WavpackStream, ptr %543, i32 0, i32 1
  %545 = getelementptr inbounds %struct.words_data, ptr %544, i32 0, i32 3
  %546 = load i32, ptr %545, align 4, !tbaa !33
  %547 = icmp ugt i32 %546, 1
  br i1 %547, label %548, label %617

548:                                              ; preds = %542
  br label %549

549:                                              ; preds = %548
  %550 = load ptr, ptr %2, align 8, !tbaa !5
  %551 = getelementptr inbounds %struct.WavpackStream, ptr %550, i32 0, i32 1
  %552 = getelementptr inbounds %struct.words_data, ptr %551, i32 0, i32 3
  %553 = load i32, ptr %552, align 4, !tbaa !33
  %554 = and i32 %553, 1
  %555 = icmp ne i32 %554, 0
  br i1 %555, label %556, label %567

556:                                              ; preds = %549
  %557 = load ptr, ptr %2, align 8, !tbaa !5
  %558 = getelementptr inbounds %struct.WavpackStream, ptr %557, i32 0, i32 27
  %559 = getelementptr inbounds %struct.bs, ptr %558, i32 0, i32 5
  %560 = load i32, ptr %559, align 4, !tbaa !24
  %561 = shl i32 1, %560
  %562 = load ptr, ptr %2, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.WavpackStream, ptr %562, i32 0, i32 27
  %564 = getelementptr inbounds %struct.bs, ptr %563, i32 0, i32 6
  %565 = load i32, ptr %564, align 8, !tbaa !25
  %566 = or i32 %565, %561
  store i32 %566, ptr %564, align 8, !tbaa !25
  br label %567

567:                                              ; preds = %556, %549
  %568 = load ptr, ptr %2, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.WavpackStream, ptr %568, i32 0, i32 27
  %570 = getelementptr inbounds %struct.bs, ptr %569, i32 0, i32 5
  %571 = load i32, ptr %570, align 4, !tbaa !24
  %572 = add nsw i32 %571, 1
  store i32 %572, ptr %570, align 4, !tbaa !24
  %573 = sext i32 %572 to i64
  %574 = icmp eq i64 %573, 16
  br i1 %574, label %575, label %609

575:                                              ; preds = %567
  %576 = load ptr, ptr %2, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.WavpackStream, ptr %576, i32 0, i32 27
  %578 = getelementptr inbounds %struct.bs, ptr %577, i32 0, i32 6
  %579 = load i32, ptr %578, align 8, !tbaa !25
  %580 = trunc i32 %579 to i16
  %581 = load ptr, ptr %2, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.WavpackStream, ptr %581, i32 0, i32 27
  %583 = getelementptr inbounds %struct.bs, ptr %582, i32 0, i32 2
  %584 = load ptr, ptr %583, align 8, !tbaa !26
  store i16 %580, ptr %584, align 2, !tbaa !27
  %585 = load ptr, ptr %2, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.WavpackStream, ptr %585, i32 0, i32 27
  %587 = getelementptr inbounds %struct.bs, ptr %586, i32 0, i32 5
  store i32 0, ptr %587, align 4, !tbaa !24
  %588 = load ptr, ptr %2, align 8, !tbaa !5
  %589 = getelementptr inbounds %struct.WavpackStream, ptr %588, i32 0, i32 27
  %590 = getelementptr inbounds %struct.bs, ptr %589, i32 0, i32 6
  store i32 0, ptr %590, align 8, !tbaa !25
  %591 = load ptr, ptr %2, align 8, !tbaa !5
  %592 = getelementptr inbounds %struct.WavpackStream, ptr %591, i32 0, i32 27
  %593 = getelementptr inbounds %struct.bs, ptr %592, i32 0, i32 2
  %594 = load ptr, ptr %593, align 8, !tbaa !26
  %595 = getelementptr inbounds i16, ptr %594, i32 1
  store ptr %595, ptr %593, align 8, !tbaa !26
  %596 = load ptr, ptr %2, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.WavpackStream, ptr %596, i32 0, i32 27
  %598 = getelementptr inbounds %struct.bs, ptr %597, i32 0, i32 1
  %599 = load ptr, ptr %598, align 8, !tbaa !28
  %600 = icmp eq ptr %595, %599
  br i1 %600, label %601, label %608

601:                                              ; preds = %575
  %602 = load ptr, ptr %2, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.WavpackStream, ptr %602, i32 0, i32 27
  %604 = getelementptr inbounds %struct.bs, ptr %603, i32 0, i32 3
  %605 = load ptr, ptr %604, align 8, !tbaa !29
  %606 = load ptr, ptr %2, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.WavpackStream, ptr %606, i32 0, i32 27
  call void %605(ptr noundef %607)
  br label %608

608:                                              ; preds = %601, %575
  br label %609

609:                                              ; preds = %608, %567
  br label %610

610:                                              ; preds = %609
  br label %611

611:                                              ; preds = %610
  %612 = load ptr, ptr %2, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.WavpackStream, ptr %612, i32 0, i32 1
  %614 = getelementptr inbounds %struct.words_data, ptr %613, i32 0, i32 3
  %615 = load i32, ptr %614, align 4, !tbaa !33
  %616 = lshr i32 %615, 1
  store i32 %616, ptr %614, align 4, !tbaa !33
  br label %542, !llvm.loop !36

617:                                              ; preds = %542
  %618 = load ptr, ptr %2, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.WavpackStream, ptr %618, i32 0, i32 1
  %620 = getelementptr inbounds %struct.words_data, ptr %619, i32 0, i32 5
  store i32 0, ptr %620, align 4, !tbaa !37
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #2
  br label %728

621:                                              ; preds = %269
  br label %622

622:                                              ; preds = %621
  %623 = load ptr, ptr %2, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.WavpackStream, ptr %623, i32 0, i32 1
  %625 = getelementptr inbounds %struct.words_data, ptr %624, i32 0, i32 3
  %626 = load i32, ptr %625, align 4, !tbaa !33
  %627 = zext i32 %626 to i64
  %628 = getelementptr inbounds [32 x i32], ptr @bitmask, i64 0, i64 %627
  %629 = load i32, ptr %628, align 4, !tbaa !23
  %630 = load ptr, ptr %2, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.WavpackStream, ptr %630, i32 0, i32 27
  %632 = getelementptr inbounds %struct.bs, ptr %631, i32 0, i32 5
  %633 = load i32, ptr %632, align 4, !tbaa !24
  %634 = shl i32 %629, %633
  %635 = load ptr, ptr %2, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.WavpackStream, ptr %635, i32 0, i32 27
  %637 = getelementptr inbounds %struct.bs, ptr %636, i32 0, i32 6
  %638 = load i32, ptr %637, align 8, !tbaa !25
  %639 = or i32 %638, %634
  store i32 %639, ptr %637, align 8, !tbaa !25
  %640 = load ptr, ptr %2, align 8, !tbaa !5
  %641 = getelementptr inbounds %struct.WavpackStream, ptr %640, i32 0, i32 1
  %642 = getelementptr inbounds %struct.words_data, ptr %641, i32 0, i32 3
  %643 = load i32, ptr %642, align 4, !tbaa !33
  %644 = load ptr, ptr %2, align 8, !tbaa !5
  %645 = getelementptr inbounds %struct.WavpackStream, ptr %644, i32 0, i32 27
  %646 = getelementptr inbounds %struct.bs, ptr %645, i32 0, i32 5
  %647 = load i32, ptr %646, align 4, !tbaa !24
  %648 = add i32 %647, %643
  store i32 %648, ptr %646, align 4, !tbaa !24
  %649 = sext i32 %648 to i64
  %650 = icmp uge i64 %649, 16
  br i1 %650, label %651, label %726

651:                                              ; preds = %622
  br label %652

652:                                              ; preds = %718, %651
  %653 = load ptr, ptr %2, align 8, !tbaa !5
  %654 = getelementptr inbounds %struct.WavpackStream, ptr %653, i32 0, i32 27
  %655 = getelementptr inbounds %struct.bs, ptr %654, i32 0, i32 6
  %656 = load i32, ptr %655, align 8, !tbaa !25
  %657 = trunc i32 %656 to i16
  %658 = load ptr, ptr %2, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.WavpackStream, ptr %658, i32 0, i32 27
  %660 = getelementptr inbounds %struct.bs, ptr %659, i32 0, i32 2
  %661 = load ptr, ptr %660, align 8, !tbaa !26
  store i16 %657, ptr %661, align 2, !tbaa !27
  %662 = load ptr, ptr %2, align 8, !tbaa !5
  %663 = getelementptr inbounds %struct.WavpackStream, ptr %662, i32 0, i32 27
  %664 = getelementptr inbounds %struct.bs, ptr %663, i32 0, i32 6
  %665 = load i32, ptr %664, align 8, !tbaa !25
  %666 = lshr i32 %665, 16
  store i32 %666, ptr %664, align 8, !tbaa !25
  %667 = load ptr, ptr %2, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.WavpackStream, ptr %667, i32 0, i32 27
  %669 = getelementptr inbounds %struct.bs, ptr %668, i32 0, i32 5
  %670 = load i32, ptr %669, align 4, !tbaa !24
  %671 = sext i32 %670 to i64
  %672 = sub i64 %671, 16
  %673 = trunc i64 %672 to i32
  store i32 %673, ptr %669, align 4, !tbaa !24
  %674 = sext i32 %673 to i64
  %675 = icmp ugt i64 %674, 16
  br i1 %675, label %676, label %699

676:                                              ; preds = %652
  %677 = load ptr, ptr %2, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.WavpackStream, ptr %677, i32 0, i32 1
  %679 = getelementptr inbounds %struct.words_data, ptr %678, i32 0, i32 3
  %680 = load i32, ptr %679, align 4, !tbaa !33
  %681 = zext i32 %680 to i64
  %682 = getelementptr inbounds [32 x i32], ptr @bitmask, i64 0, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !23
  %684 = load ptr, ptr %2, align 8, !tbaa !5
  %685 = getelementptr inbounds %struct.WavpackStream, ptr %684, i32 0, i32 1
  %686 = getelementptr inbounds %struct.words_data, ptr %685, i32 0, i32 3
  %687 = load i32, ptr %686, align 4, !tbaa !33
  %688 = load ptr, ptr %2, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.WavpackStream, ptr %688, i32 0, i32 27
  %690 = getelementptr inbounds %struct.bs, ptr %689, i32 0, i32 5
  %691 = load i32, ptr %690, align 4, !tbaa !24
  %692 = sub i32 %687, %691
  %693 = lshr i32 %683, %692
  %694 = load ptr, ptr %2, align 8, !tbaa !5
  %695 = getelementptr inbounds %struct.WavpackStream, ptr %694, i32 0, i32 27
  %696 = getelementptr inbounds %struct.bs, ptr %695, i32 0, i32 6
  %697 = load i32, ptr %696, align 8, !tbaa !25
  %698 = or i32 %697, %693
  store i32 %698, ptr %696, align 8, !tbaa !25
  br label %699

699:                                              ; preds = %676, %652
  %700 = load ptr, ptr %2, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.WavpackStream, ptr %700, i32 0, i32 27
  %702 = getelementptr inbounds %struct.bs, ptr %701, i32 0, i32 2
  %703 = load ptr, ptr %702, align 8, !tbaa !26
  %704 = getelementptr inbounds i16, ptr %703, i32 1
  store ptr %704, ptr %702, align 8, !tbaa !26
  %705 = load ptr, ptr %2, align 8, !tbaa !5
  %706 = getelementptr inbounds %struct.WavpackStream, ptr %705, i32 0, i32 27
  %707 = getelementptr inbounds %struct.bs, ptr %706, i32 0, i32 1
  %708 = load ptr, ptr %707, align 8, !tbaa !28
  %709 = icmp eq ptr %704, %708
  br i1 %709, label %710, label %717

710:                                              ; preds = %699
  %711 = load ptr, ptr %2, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.WavpackStream, ptr %711, i32 0, i32 27
  %713 = getelementptr inbounds %struct.bs, ptr %712, i32 0, i32 3
  %714 = load ptr, ptr %713, align 8, !tbaa !29
  %715 = load ptr, ptr %2, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.WavpackStream, ptr %715, i32 0, i32 27
  call void %714(ptr noundef %716)
  br label %717

717:                                              ; preds = %710, %699
  br label %718

718:                                              ; preds = %717
  %719 = load ptr, ptr %2, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.WavpackStream, ptr %719, i32 0, i32 27
  %721 = getelementptr inbounds %struct.bs, ptr %720, i32 0, i32 5
  %722 = load i32, ptr %721, align 4, !tbaa !24
  %723 = sext i32 %722 to i64
  %724 = icmp uge i64 %723, 16
  br i1 %724, label %652, label %725, !llvm.loop !38

725:                                              ; preds = %718
  br label %726

726:                                              ; preds = %725, %622
  br label %727

727:                                              ; preds = %726
  br label %728

728:                                              ; preds = %727, %617
  %729 = load ptr, ptr %2, 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 3
  store i32 0, ptr %731, align 4, !tbaa !33
  br label %732

732:                                              ; preds = %728, %263
  %733 = load ptr, ptr %2, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.WavpackStream, ptr %733, i32 0, i32 1
  %735 = getelementptr inbounds %struct.words_data, ptr %734, i32 0, i32 5
  %736 = load i32, ptr %735, align 4, !tbaa !37
  %737 = icmp ne i32 %736, 0
  br i1 %737, label %738, label %786

738:                                              ; preds = %732
  br label %739

739:                                              ; preds = %738
  %740 = load ptr, ptr %2, align 8, !tbaa !5
  %741 = getelementptr inbounds %struct.WavpackStream, ptr %740, i32 0, i32 27
  %742 = getelementptr inbounds %struct.bs, ptr %741, i32 0, i32 5
  %743 = load i32, ptr %742, align 4, !tbaa !24
  %744 = add nsw i32 %743, 1
  store i32 %744, ptr %742, align 4, !tbaa !24
  %745 = sext i32 %744 to i64
  %746 = icmp eq i64 %745, 16
  br i1 %746, label %747, label %781

747:                                              ; preds = %739
  %748 = load ptr, ptr %2, align 8, !tbaa !5
  %749 = getelementptr inbounds %struct.WavpackStream, ptr %748, i32 0, i32 27
  %750 = getelementptr inbounds %struct.bs, ptr %749, i32 0, i32 6
  %751 = load i32, ptr %750, align 8, !tbaa !25
  %752 = trunc i32 %751 to i16
  %753 = load ptr, ptr %2, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.WavpackStream, ptr %753, i32 0, i32 27
  %755 = getelementptr inbounds %struct.bs, ptr %754, i32 0, i32 2
  %756 = load ptr, ptr %755, align 8, !tbaa !26
  store i16 %752, ptr %756, align 2, !tbaa !27
  %757 = load ptr, ptr %2, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.WavpackStream, ptr %757, i32 0, i32 27
  %759 = getelementptr inbounds %struct.bs, ptr %758, i32 0, i32 5
  store i32 0, ptr %759, align 4, !tbaa !24
  %760 = load ptr, ptr %2, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.WavpackStream, ptr %760, i32 0, i32 27
  %762 = getelementptr inbounds %struct.bs, ptr %761, i32 0, i32 6
  store i32 0, ptr %762, align 8, !tbaa !25
  %763 = load ptr, ptr %2, align 8, !tbaa !5
  %764 = getelementptr inbounds %struct.WavpackStream, ptr %763, i32 0, i32 27
  %765 = getelementptr inbounds %struct.bs, ptr %764, i32 0, i32 2
  %766 = load ptr, ptr %765, align 8, !tbaa !26
  %767 = getelementptr inbounds i16, ptr %766, i32 1
  store ptr %767, ptr %765, align 8, !tbaa !26
  %768 = load ptr, ptr %2, align 8, !tbaa !5
  %769 = getelementptr inbounds %struct.WavpackStream, ptr %768, i32 0, i32 27
  %770 = getelementptr inbounds %struct.bs, ptr %769, i32 0, i32 1
  %771 = load ptr, ptr %770, align 8, !tbaa !28
  %772 = icmp eq ptr %767, %771
  br i1 %772, label %773, label %780

773:                                              ; preds = %747
  %774 = load ptr, ptr %2, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.WavpackStream, ptr %774, i32 0, i32 27
  %776 = getelementptr inbounds %struct.bs, ptr %775, i32 0, i32 3
  %777 = load ptr, ptr %776, align 8, !tbaa !29
  %778 = load ptr, ptr %2, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.WavpackStream, ptr %778, i32 0, i32 27
  call void %777(ptr noundef %779)
  br label %780

780:                                              ; preds = %773, %747
  br label %781

781:                                              ; preds = %780, %739
  br label %782

782:                                              ; preds = %781
  %783 = load ptr, ptr %2, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.WavpackStream, ptr %783, i32 0, i32 1
  %785 = getelementptr inbounds %struct.words_data, ptr %784, i32 0, i32 5
  store i32 0, ptr %785, align 4, !tbaa !37
  br label %786

786:                                              ; preds = %782, %732
  %787 = load ptr, ptr %2, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.WavpackStream, ptr %787, i32 0, i32 1
  %789 = getelementptr inbounds %struct.words_data, ptr %788, i32 0, i32 6
  %790 = load i32, ptr %789, align 4, !tbaa !39
  %791 = icmp ne i32 %790, 0
  br i1 %791, label %792, label %899

792:                                              ; preds = %786
  br label %793

793:                                              ; preds = %792
  %794 = load ptr, ptr %2, align 8, !tbaa !5
  %795 = getelementptr inbounds %struct.WavpackStream, ptr %794, i32 0, i32 1
  %796 = getelementptr inbounds %struct.words_data, ptr %795, i32 0, i32 2
  %797 = load i32, ptr %796, align 4, !tbaa !40
  %798 = load ptr, ptr %2, align 8, !tbaa !5
  %799 = getelementptr inbounds %struct.WavpackStream, ptr %798, i32 0, i32 27
  %800 = getelementptr inbounds %struct.bs, ptr %799, i32 0, i32 5
  %801 = load i32, ptr %800, align 4, !tbaa !24
  %802 = shl i32 %797, %801
  %803 = load ptr, ptr %2, align 8, !tbaa !5
  %804 = getelementptr inbounds %struct.WavpackStream, ptr %803, i32 0, i32 27
  %805 = getelementptr inbounds %struct.bs, ptr %804, i32 0, i32 6
  %806 = load i32, ptr %805, align 8, !tbaa !25
  %807 = or i32 %806, %802
  store i32 %807, ptr %805, align 8, !tbaa !25
  %808 = load ptr, ptr %2, align 8, !tbaa !5
  %809 = getelementptr inbounds %struct.WavpackStream, ptr %808, i32 0, i32 1
  %810 = getelementptr inbounds %struct.words_data, ptr %809, i32 0, i32 6
  %811 = load i32, ptr %810, align 4, !tbaa !39
  %812 = load ptr, ptr %2, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.WavpackStream, ptr %812, i32 0, i32 27
  %814 = getelementptr inbounds %struct.bs, ptr %813, i32 0, i32 5
  %815 = load i32, ptr %814, align 4, !tbaa !24
  %816 = add nsw i32 %815, %811
  store i32 %816, ptr %814, align 4, !tbaa !24
  %817 = sext i32 %816 to i64
  %818 = icmp uge i64 %817, 16
  br i1 %818, label %819, label %891

819:                                              ; preds = %793
  br label %820

820:                                              ; preds = %883, %819
  %821 = load ptr, ptr %2, align 8, !tbaa !5
  %822 = getelementptr inbounds %struct.WavpackStream, ptr %821, i32 0, i32 27
  %823 = getelementptr inbounds %struct.bs, ptr %822, i32 0, i32 6
  %824 = load i32, ptr %823, align 8, !tbaa !25
  %825 = trunc i32 %824 to i16
  %826 = load ptr, ptr %2, align 8, !tbaa !5
  %827 = getelementptr inbounds %struct.WavpackStream, ptr %826, i32 0, i32 27
  %828 = getelementptr inbounds %struct.bs, ptr %827, i32 0, i32 2
  %829 = load ptr, ptr %828, align 8, !tbaa !26
  store i16 %825, ptr %829, align 2, !tbaa !27
  %830 = load ptr, ptr %2, align 8, !tbaa !5
  %831 = getelementptr inbounds %struct.WavpackStream, ptr %830, i32 0, i32 27
  %832 = getelementptr inbounds %struct.bs, ptr %831, i32 0, i32 6
  %833 = load i32, ptr %832, align 8, !tbaa !25
  %834 = lshr i32 %833, 16
  store i32 %834, ptr %832, align 8, !tbaa !25
  %835 = load ptr, ptr %2, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.WavpackStream, ptr %835, i32 0, i32 27
  %837 = getelementptr inbounds %struct.bs, ptr %836, i32 0, i32 5
  %838 = load i32, ptr %837, align 4, !tbaa !24
  %839 = sext i32 %838 to i64
  %840 = sub i64 %839, 16
  %841 = trunc i64 %840 to i32
  store i32 %841, ptr %837, align 4, !tbaa !24
  %842 = sext i32 %841 to i64
  %843 = icmp ugt i64 %842, 16
  br i1 %843, label %844, label %864

844:                                              ; preds = %820
  %845 = load ptr, ptr %2, align 8, !tbaa !5
  %846 = getelementptr inbounds %struct.WavpackStream, ptr %845, i32 0, i32 1
  %847 = getelementptr inbounds %struct.words_data, ptr %846, i32 0, i32 2
  %848 = load i32, ptr %847, align 4, !tbaa !40
  %849 = load ptr, ptr %2, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.WavpackStream, ptr %849, i32 0, i32 1
  %851 = getelementptr inbounds %struct.words_data, ptr %850, i32 0, i32 6
  %852 = load i32, ptr %851, align 4, !tbaa !39
  %853 = load ptr, ptr %2, align 8, !tbaa !5
  %854 = getelementptr inbounds %struct.WavpackStream, ptr %853, i32 0, i32 27
  %855 = getelementptr inbounds %struct.bs, ptr %854, i32 0, i32 5
  %856 = load i32, ptr %855, align 4, !tbaa !24
  %857 = sub nsw i32 %852, %856
  %858 = lshr i32 %848, %857
  %859 = load ptr, ptr %2, align 8, !tbaa !5
  %860 = getelementptr inbounds %struct.WavpackStream, ptr %859, i32 0, i32 27
  %861 = getelementptr inbounds %struct.bs, ptr %860, i32 0, i32 6
  %862 = load i32, ptr %861, align 8, !tbaa !25
  %863 = or i32 %862, %858
  store i32 %863, ptr %861, align 8, !tbaa !25
  br label %864

864:                                              ; preds = %844, %820
  %865 = load ptr, ptr %2, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.WavpackStream, ptr %865, i32 0, i32 27
  %867 = getelementptr inbounds %struct.bs, ptr %866, i32 0, i32 2
  %868 = load ptr, ptr %867, align 8, !tbaa !26
  %869 = getelementptr inbounds i16, ptr %868, i32 1
  store ptr %869, ptr %867, align 8, !tbaa !26
  %870 = load ptr, ptr %2, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.WavpackStream, ptr %870, i32 0, i32 27
  %872 = getelementptr inbounds %struct.bs, ptr %871, i32 0, i32 1
  %873 = load ptr, ptr %872, align 8, !tbaa !28
  %874 = icmp eq ptr %869, %873
  br i1 %874, label %875, label %882

875:                                              ; preds = %864
  %876 = load ptr, ptr %2, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.WavpackStream, ptr %876, i32 0, i32 27
  %878 = getelementptr inbounds %struct.bs, ptr %877, i32 0, i32 3
  %879 = load ptr, ptr %878, align 8, !tbaa !29
  %880 = load ptr, ptr %2, align 8, !tbaa !5
  %881 = getelementptr inbounds %struct.WavpackStream, ptr %880, i32 0, i32 27
  call void %879(ptr noundef %881)
  br label %882

882:                                              ; preds = %875, %864
  br label %883

883:                                              ; preds = %882
  %884 = load ptr, ptr %2, align 8, !tbaa !5
  %885 = getelementptr inbounds %struct.WavpackStream, ptr %884, i32 0, i32 27
  %886 = getelementptr inbounds %struct.bs, ptr %885, i32 0, i32 5
  %887 = load i32, ptr %886, align 4, !tbaa !24
  %888 = sext i32 %887 to i64
  %889 = icmp uge i64 %888, 16
  br i1 %889, label %820, label %890, !llvm.loop !41

890:                                              ; preds = %883
  br label %891

891:                                              ; preds = %890, %793
  br label %892

892:                                              ; preds = %891
  %893 = load ptr, ptr %2, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.WavpackStream, ptr %893, i32 0, i32 1
  %895 = getelementptr inbounds %struct.words_data, ptr %894, i32 0, i32 6
  store i32 0, ptr %895, align 4, !tbaa !39
  %896 = load ptr, ptr %2, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.WavpackStream, ptr %896, i32 0, i32 1
  %898 = getelementptr inbounds %struct.words_data, ptr %897, i32 0, i32 2
  store i32 0, ptr %898, align 4, !tbaa !40
  br label %899

899:                                              ; preds = %892, %786
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 }

!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, !13, i64 36}
!10 = !{!"", !11, i64 0, !14, i64 12, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !15, i64 128, !15, i64 136, !13, i64 144, !13, i64 148, !13, i64 152, !7, i64 156, !7, i64 157, !7, i64 158, !7, i64 159, !7, i64 160, !7, i64 161, !7, i64 162, !13, i64 164, !13, i64 168, !13, i64 172, !13, i64 176, !13, i64 180, !13, i64 184, !13, i64 188, !13, i64 192, !16, i64 200, !16, i64 248, !16, i64 296, !17, 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, !18, i64 360, !7, i64 432, !20, i64 1968, !6, i64 2064, !21, i64 2072}
!11 = !{!"", !7, i64 0, !12, i64 4, !12, i64 6, !13, i64 8}
!12 = !{!"short", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"words_data", !7, i64 0, !7, i64 8, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !7, i64 36}
!15 = !{!"long", !7, i64 0}
!16 = !{!"bs", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 36, !13, i64 40}
!17 = !{!"float", !7, i64 0}
!18 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !19, i64 24, !19, i64 32, !19, i64 40, !6, i64 48, !6, i64 56, !13, i64 64}
!19 = !{!"double", !7, i64 0}
!20 = !{!"decorr_pass", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !7, i64 16, !7, i64 48, !13, i64 80, !13, i64 84, !13, i64 88, !13, i64 92}
!21 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !7, i64 40, !7, i64 41, !13, i64 44, !13, i64 48, !13, i64 52, !6, i64 56, !13, i64 64, !13, i64 68, !13, i64 72, !7, i64 76, !6, i64 160}
!22 = !{!7, !7, i64 0}
!23 = !{!13, !13, i64 0}
!24 = !{!10, !13, i64 236}
!25 = !{!10, !13, i64 240}
!26 = !{!10, !6, i64 216}
!27 = !{!12, !12, i64 0}
!28 = !{!10, !6, i64 208}
!29 = !{!10, !6, i64 224}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!10, !13, i64 32}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = !{!10, !13, i64 40}
!38 = distinct !{!38, !31}
!39 = !{!10, !13, i64 44}
!40 = !{!10, !13, i64 28}
!41 = distinct !{!41, !31}


; 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"

@nbits_table = external local_unnamed_addr constant [256 x i8], align 16
@bitmask = external local_unnamed_addr constant [32 x i32], align 16

; Function Attrs: nounwind uwtable
define dso_local void @flush_word(ptr noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 36
  %3 = load i32, ptr %2, align 4, !tbaa !5
  %.not = icmp eq i32 %3, 0
  br i1 %.not, label %108, label %4

4:                                                ; preds = %1
  %5 = icmp ult i32 %3, 256
  br i1 %5, label %6, label %11

6:                                                ; preds = %4
  %7 = zext nneg i32 %3 to i64
  %8 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %7
  %9 = load i8, ptr %8, align 1, !tbaa !21
  %10 = sext i8 %9 to i32
  br label %36

11:                                               ; preds = %4
  %12 = icmp ult i32 %3, 65536
  br i1 %12, label %13, label %20

13:                                               ; preds = %11
  %14 = lshr i32 %3, 8
  %15 = zext nneg i32 %14 to i64
  %16 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %15
  %17 = load i8, ptr %16, align 1, !tbaa !21
  %18 = sext i8 %17 to i32
  %19 = add nsw i32 %18, 8
  br label %36

20:                                               ; preds = %11
  %21 = icmp ult i32 %3, 16777216
  br i1 %21, label %22, label %29

22:                                               ; preds = %20
  %23 = lshr i32 %3, 16
  %24 = zext nneg i32 %23 to i64
  %25 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %24
  %26 = load i8, ptr %25, align 1, !tbaa !21
  %27 = sext i8 %26 to i32
  %28 = add nsw i32 %27, 16
  br label %36

29:                                               ; preds = %20
  %30 = lshr i32 %3, 24
  %31 = zext nneg i32 %30 to i64
  %32 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %31
  %33 = load i8, ptr %32, align 1, !tbaa !21
  %34 = sext i8 %33 to i32
  %35 = add nsw i32 %34, 24
  br label %36

36:                                               ; preds = %13, %29, %22, %6
  %37 = phi i32 [ %10, %6 ], [ %19, %13 ], [ %28, %22 ], [ %35, %29 ]
  %.not162174 = icmp eq i32 %37, 0
  br i1 %.not162174, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %36
  %38 = getelementptr inbounds i8, ptr %0, i64 200
  %39 = getelementptr inbounds i8, ptr %0, i64 236
  %40 = getelementptr inbounds i8, ptr %0, i64 240
  %41 = getelementptr inbounds i8, ptr %0, i64 216
  %42 = getelementptr inbounds i8, ptr %0, i64 208
  %43 = getelementptr inbounds i8, ptr %0, i64 224
  br label %44

44:                                               ; preds = %.lr.ph, %60
  %.in = phi i32 [ %37, %.lr.ph ], [ %45, %60 ]
  %45 = add nsw i32 %.in, -1
  %46 = load i32, ptr %39, align 4, !tbaa !22
  %47 = shl nuw i32 1, %46
  %48 = load i32, ptr %40, align 8, !tbaa !23
  %49 = or i32 %48, %47
  store i32 %49, ptr %40, align 8, !tbaa !23
  %50 = add nsw i32 %46, 1
  store i32 %50, ptr %39, align 4, !tbaa !22
  %51 = icmp eq i32 %50, 16
  br i1 %51, label %52, label %60

52:                                               ; preds = %44
  %53 = trunc i32 %49 to i16
  %54 = load ptr, ptr %41, align 8, !tbaa !24
  store i16 %53, ptr %54, align 2, !tbaa !25
  store i32 0, ptr %39, align 4, !tbaa !22
  store i32 0, ptr %40, align 8, !tbaa !23
  %55 = getelementptr inbounds i8, ptr %54, i64 2
  store ptr %55, ptr %41, align 8, !tbaa !24
  %56 = load ptr, ptr %42, align 8, !tbaa !26
  %57 = icmp eq ptr %55, %56
  br i1 %57, label %58, label %60

58:                                               ; preds = %52
  %59 = load ptr, ptr %43, align 8, !tbaa !27
  tail call void %59(ptr noundef nonnull %38) #1
  br label %60

60:                                               ; preds = %52, %58, %44
  %.not162 = icmp eq i32 %45, 0
  br i1 %.not162, label %._crit_edge, label %44, !llvm.loop !28

._crit_edge:                                      ; preds = %60, %36
  %61 = getelementptr inbounds i8, ptr %0, i64 200
  %62 = getelementptr inbounds i8, ptr %0, i64 236
  %63 = load i32, ptr %62, align 4, !tbaa !22
  %64 = add nsw i32 %63, 1
  store i32 %64, ptr %62, align 4, !tbaa !22
  %65 = icmp eq i32 %64, 16
  br i1 %65, label %66, label %79

66:                                               ; preds = %._crit_edge
  %67 = getelementptr inbounds i8, ptr %0, i64 240
  %68 = load i32, ptr %67, align 8, !tbaa !23
  %69 = trunc i32 %68 to i16
  %70 = getelementptr inbounds i8, ptr %0, i64 216
  %71 = load ptr, ptr %70, align 8, !tbaa !24
  store i16 %69, ptr %71, align 2, !tbaa !25
  store i32 0, ptr %62, align 4, !tbaa !22
  store i32 0, ptr %67, align 8, !tbaa !23
  %72 = getelementptr inbounds i8, ptr %71, i64 2
  store ptr %72, ptr %70, align 8, !tbaa !24
  %73 = getelementptr inbounds i8, ptr %0, i64 208
  %74 = load ptr, ptr %73, align 8, !tbaa !26
  %75 = icmp eq ptr %72, %74
  br i1 %75, label %76, label %79

76:                                               ; preds = %66
  %77 = getelementptr inbounds i8, ptr %0, i64 224
  %78 = load ptr, ptr %77, align 8, !tbaa !27
  tail call void %78(ptr noundef nonnull %61) #1
  br label %79

79:                                               ; preds = %66, %76, %._crit_edge
  %.pr = load i32, ptr %2, align 4, !tbaa !5
  %80 = icmp ugt i32 %.pr, 1
  br i1 %80, label %.lr.ph176, label %._crit_edge177

.lr.ph176:                                        ; preds = %79
  %81 = getelementptr inbounds i8, ptr %0, i64 240
  %82 = getelementptr inbounds i8, ptr %0, i64 216
  %83 = getelementptr inbounds i8, ptr %0, i64 208
  %84 = getelementptr inbounds i8, ptr %0, i64 224
  br label %85

85:                                               ; preds = %.lr.ph176, %104
  %86 = phi i32 [ %.pr, %.lr.ph176 ], [ %106, %104 ]
  %87 = and i32 %86, 1
  %.not168 = icmp eq i32 %87, 0
  %.pre = load i32, ptr %62, align 4, !tbaa !22
  br i1 %.not168, label %92, label %88

88:                                               ; preds = %85
  %89 = shl nuw i32 1, %.pre
  %90 = load i32, ptr %81, align 8, !tbaa !23
  %91 = or i32 %90, %89
  store i32 %91, ptr %81, align 8, !tbaa !23
  br label %92

92:                                               ; preds = %88, %85
  %93 = add nsw i32 %.pre, 1
  store i32 %93, ptr %62, align 4, !tbaa !22
  %94 = icmp eq i32 %93, 16
  br i1 %94, label %95, label %104

95:                                               ; preds = %92
  %96 = load i32, ptr %81, align 8, !tbaa !23
  %97 = trunc i32 %96 to i16
  %98 = load ptr, ptr %82, align 8, !tbaa !24
  store i16 %97, ptr %98, align 2, !tbaa !25
  store i32 0, ptr %62, align 4, !tbaa !22
  store i32 0, ptr %81, align 8, !tbaa !23
  %99 = getelementptr inbounds i8, ptr %98, i64 2
  store ptr %99, ptr %82, align 8, !tbaa !24
  %100 = load ptr, ptr %83, align 8, !tbaa !26
  %101 = icmp eq ptr %99, %100
  br i1 %101, label %102, label %104

102:                                              ; preds = %95
  %103 = load ptr, ptr %84, align 8, !tbaa !27
  tail call void %103(ptr noundef nonnull %61) #1
  %.pre186 = load i32, ptr %2, align 4, !tbaa !5
  br label %104

104:                                              ; preds = %95, %102, %92
  %105 = phi i32 [ %86, %95 ], [ %.pre186, %102 ], [ %86, %92 ]
  %106 = lshr i32 %105, 1
  store i32 %106, ptr %2, align 4, !tbaa !5
  %107 = icmp ugt i32 %105, 3
  br i1 %107, label %85, label %._crit_edge177, !llvm.loop !30

._crit_edge177:                                   ; preds = %104, %79
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %108

108:                                              ; preds = %._crit_edge177, %1
  %109 = getelementptr inbounds i8, ptr %0, i64 32
  %110 = load i32, ptr %109, align 4, !tbaa !31
  %.not163 = icmp eq i32 %110, 0
  br i1 %.not163, label %290, label %111

111:                                              ; preds = %108
  %112 = icmp ugt i32 %110, 15
  br i1 %112, label %113, label %249

113:                                              ; preds = %111
  %114 = getelementptr inbounds i8, ptr %0, i64 200
  %115 = getelementptr inbounds i8, ptr %0, i64 236
  %116 = load i32, ptr %115, align 4, !tbaa !22
  %117 = shl i32 65535, %116
  %118 = getelementptr inbounds i8, ptr %0, i64 240
  %119 = load i32, ptr %118, align 8, !tbaa !23
  %120 = or i32 %119, %117
  store i32 %120, ptr %118, align 8, !tbaa !23
  %121 = add nsw i32 %116, 17
  store i32 %121, ptr %115, align 4, !tbaa !22
  %122 = icmp ugt i32 %121, 15
  br i1 %122, label %.preheader170, label %.loopexit171

.preheader170:                                    ; preds = %113
  %123 = getelementptr inbounds i8, ptr %0, i64 216
  %124 = getelementptr inbounds i8, ptr %0, i64 208
  %125 = getelementptr inbounds i8, ptr %0, i64 224
  br label %126

126:                                              ; preds = %.preheader170, %146
  %127 = phi i32 [ %121, %.preheader170 ], [ %147, %146 ]
  %128 = load i32, ptr %118, align 8, !tbaa !23
  %129 = trunc i32 %128 to i16
  %130 = load ptr, ptr %123, align 8, !tbaa !24
  store i16 %129, ptr %130, align 2, !tbaa !25
  %131 = lshr i32 %128, 16
  store i32 %131, ptr %118, align 8, !tbaa !23
  %132 = add i32 %127, -16
  store i32 %132, ptr %115, align 4, !tbaa !22
  %133 = icmp ugt i32 %132, 16
  br i1 %133, label %134, label %140

134:                                              ; preds = %126
  %135 = sub i32 33, %127
  %136 = zext nneg i32 %135 to i64
  %137 = lshr i64 65535, %136
  %138 = trunc nuw nsw i64 %137 to i32
  %139 = or i32 %131, %138
  store i32 %139, ptr %118, align 8, !tbaa !23
  br label %140

140:                                              ; preds = %134, %126
  %141 = getelementptr inbounds i8, ptr %130, i64 2
  store ptr %141, ptr %123, align 8, !tbaa !24
  %142 = load ptr, ptr %124, align 8, !tbaa !26
  %143 = icmp eq ptr %141, %142
  br i1 %143, label %144, label %146

144:                                              ; preds = %140
  %145 = load ptr, ptr %125, align 8, !tbaa !27
  tail call void %145(ptr noundef nonnull %114) #1
  %.pre188 = load i32, ptr %115, align 4, !tbaa !22
  br label %146

146:                                              ; preds = %140, %144
  %147 = phi i32 [ %132, %140 ], [ %.pre188, %144 ]
  %148 = icmp ugt i32 %147, 15
  br i1 %148, label %126, label %.loopexit171.loopexit, !llvm.loop !32

.loopexit171.loopexit:                            ; preds = %146
  %.pre189 = load i32, ptr %109, align 4, !tbaa !31
  br label %.loopexit171

.loopexit171:                                     ; preds = %.loopexit171.loopexit, %113
  %149 = phi i32 [ %147, %.loopexit171.loopexit ], [ %121, %113 ]
  %150 = phi i32 [ %.pre189, %.loopexit171.loopexit ], [ %110, %113 ]
  %151 = add i32 %150, -16
  store i32 %151, ptr %109, align 4, !tbaa !31
  %152 = icmp ult i32 %151, 256
  br i1 %152, label %153, label %158

153:                                              ; preds = %.loopexit171
  %154 = zext nneg i32 %151 to i64
  %155 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %154
  %156 = load i8, ptr %155, align 1, !tbaa !21
  %157 = sext i8 %156 to i32
  br label %183

158:                                              ; preds = %.loopexit171
  %159 = icmp ult i32 %151, 65536
  br i1 %159, label %160, label %167

160:                                              ; preds = %158
  %161 = lshr i32 %151, 8
  %162 = zext nneg i32 %161 to i64
  %163 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %162
  %164 = load i8, ptr %163, align 1, !tbaa !21
  %165 = sext i8 %164 to i32
  %166 = add nsw i32 %165, 8
  br label %183

167:                                              ; preds = %158
  %168 = icmp ult i32 %151, 16777216
  br i1 %168, label %169, label %176

169:                                              ; preds = %167
  %170 = lshr i32 %151, 16
  %171 = zext nneg i32 %170 to i64
  %172 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %171
  %173 = load i8, ptr %172, align 1, !tbaa !21
  %174 = sext i8 %173 to i32
  %175 = add nsw i32 %174, 16
  br label %183

176:                                              ; preds = %167
  %177 = lshr i32 %151, 24
  %178 = zext nneg i32 %177 to i64
  %179 = getelementptr inbounds [256 x i8], ptr @nbits_table, i64 0, i64 %178
  %180 = load i8, ptr %179, align 1, !tbaa !21
  %181 = sext i8 %180 to i32
  %182 = add nsw i32 %181, 24
  br label %183

183:                                              ; preds = %160, %176, %169, %153
  %184 = phi i32 [ %157, %153 ], [ %166, %160 ], [ %175, %169 ], [ %182, %176 ]
  %.not164178 = icmp eq i32 %184, 0
  br i1 %.not164178, label %._crit_edge181, label %.lr.ph180

.lr.ph180:                                        ; preds = %183
  %185 = getelementptr inbounds i8, ptr %0, i64 216
  %186 = getelementptr inbounds i8, ptr %0, i64 208
  %187 = getelementptr inbounds i8, ptr %0, i64 224
  br label %188

188:                                              ; preds = %.lr.ph180, %204
  %.in185 = phi i32 [ %184, %.lr.ph180 ], [ %189, %204 ]
  %189 = add nsw i32 %.in185, -1
  %190 = load i32, ptr %115, align 4, !tbaa !22
  %191 = shl nuw i32 1, %190
  %192 = load i32, ptr %118, align 8, !tbaa !23
  %193 = or i32 %192, %191
  store i32 %193, ptr %118, align 8, !tbaa !23
  %194 = add nsw i32 %190, 1
  store i32 %194, ptr %115, align 4, !tbaa !22
  %195 = icmp eq i32 %194, 16
  br i1 %195, label %196, label %204

196:                                              ; preds = %188
  %197 = trunc i32 %193 to i16
  %198 = load ptr, ptr %185, align 8, !tbaa !24
  store i16 %197, ptr %198, align 2, !tbaa !25
  store i32 0, ptr %115, align 4, !tbaa !22
  store i32 0, ptr %118, align 8, !tbaa !23
  %199 = getelementptr inbounds i8, ptr %198, i64 2
  store ptr %199, ptr %185, align 8, !tbaa !24
  %200 = load ptr, ptr %186, align 8, !tbaa !26
  %201 = icmp eq ptr %199, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %196
  %203 = load ptr, ptr %187, align 8, !tbaa !27
  tail call void %203(ptr noundef nonnull %114) #1
  br label %204

204:                                              ; preds = %196, %202, %188
  %.not164 = icmp eq i32 %189, 0
  br i1 %.not164, label %._crit_edge181.loopexit, label %188, !llvm.loop !33

._crit_edge181.loopexit:                          ; preds = %204
  %.pre190 = load i32, ptr %115, align 4, !tbaa !22
  br label %._crit_edge181

._crit_edge181:                                   ; preds = %._crit_edge181.loopexit, %183
  %205 = phi i32 [ %.pre190, %._crit_edge181.loopexit ], [ %149, %183 ]
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %115, align 4, !tbaa !22
  %207 = icmp eq i32 %206, 16
  br i1 %207, label %208, label %220

208:                                              ; preds = %._crit_edge181
  %209 = load i32, ptr %118, align 8, !tbaa !23
  %210 = trunc i32 %209 to i16
  %211 = getelementptr inbounds i8, ptr %0, i64 216
  %212 = load ptr, ptr %211, align 8, !tbaa !24
  store i16 %210, ptr %212, align 2, !tbaa !25
  store i32 0, ptr %115, align 4, !tbaa !22
  store i32 0, ptr %118, align 8, !tbaa !23
  %213 = getelementptr inbounds i8, ptr %212, i64 2
  store ptr %213, ptr %211, align 8, !tbaa !24
  %214 = getelementptr inbounds i8, ptr %0, i64 208
  %215 = load ptr, ptr %214, align 8, !tbaa !26
  %216 = icmp eq ptr %213, %215
  br i1 %216, label %217, label %220

217:                                              ; preds = %208
  %218 = getelementptr inbounds i8, ptr %0, i64 224
  %219 = load ptr, ptr %218, align 8, !tbaa !27
  tail call void %219(ptr noundef nonnull %114) #1
  br label %220

220:                                              ; preds = %208, %217, %._crit_edge181
  %.pr169 = load i32, ptr %109, align 4, !tbaa !31
  %221 = icmp ugt i32 %.pr169, 1
  br i1 %221, label %.lr.ph183, label %._crit_edge184

.lr.ph183:                                        ; preds = %220
  %222 = getelementptr inbounds i8, ptr %0, i64 216
  %223 = getelementptr inbounds i8, ptr %0, i64 208
  %224 = getelementptr inbounds i8, ptr %0, i64 224
  br label %225

225:                                              ; preds = %.lr.ph183, %244
  %226 = phi i32 [ %.pr169, %.lr.ph183 ], [ %246, %244 ]
  %227 = and i32 %226, 1
  %.not167 = icmp eq i32 %227, 0
  %.pre191 = load i32, ptr %115, align 4, !tbaa !22
  br i1 %.not167, label %232, label %228

228:                                              ; preds = %225
  %229 = shl nuw i32 1, %.pre191
  %230 = load i32, ptr %118, align 8, !tbaa !23
  %231 = or i32 %230, %229
  store i32 %231, ptr %118, align 8, !tbaa !23
  br label %232

232:                                              ; preds = %228, %225
  %233 = add nsw i32 %.pre191, 1
  store i32 %233, ptr %115, align 4, !tbaa !22
  %234 = icmp eq i32 %233, 16
  br i1 %234, label %235, label %244

235:                                              ; preds = %232
  %236 = load i32, ptr %118, align 8, !tbaa !23
  %237 = trunc i32 %236 to i16
  %238 = load ptr, ptr %222, align 8, !tbaa !24
  store i16 %237, ptr %238, align 2, !tbaa !25
  store i32 0, ptr %115, align 4, !tbaa !22
  store i32 0, ptr %118, align 8, !tbaa !23
  %239 = getelementptr inbounds i8, ptr %238, i64 2
  store ptr %239, ptr %222, align 8, !tbaa !24
  %240 = load ptr, ptr %223, align 8, !tbaa !26
  %241 = icmp eq ptr %239, %240
  br i1 %241, label %242, label %244

242:                                              ; preds = %235
  %243 = load ptr, ptr %224, align 8, !tbaa !27
  tail call void %243(ptr noundef nonnull %114) #1
  %.pre192 = load i32, ptr %109, align 4, !tbaa !31
  br label %244

244:                                              ; preds = %235, %242, %232
  %245 = phi i32 [ %226, %235 ], [ %.pre192, %242 ], [ %226, %232 ]
  %246 = lshr i32 %245, 1
  store i32 %246, ptr %109, align 4, !tbaa !31
  %247 = icmp ugt i32 %245, 3
  br i1 %247, label %225, label %._crit_edge184, !llvm.loop !34

._crit_edge184:                                   ; preds = %244, %220
  %248 = getelementptr inbounds i8, ptr %0, i64 40
  store i32 0, ptr %248, align 4, !tbaa !35
  br label %.loopexit173

249:                                              ; preds = %111
  %250 = zext nneg i32 %110 to i64
  %251 = getelementptr inbounds [32 x i32], ptr @bitmask, i64 0, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !36
  %253 = getelementptr inbounds i8, ptr %0, i64 200
  %254 = getelementptr inbounds i8, ptr %0, i64 236
  %255 = load i32, ptr %254, align 4, !tbaa !22
  %256 = shl i32 %252, %255
  %257 = getelementptr inbounds i8, ptr %0, i64 240
  %258 = load i32, ptr %257, align 8, !tbaa !23
  %259 = or i32 %258, %256
  store i32 %259, ptr %257, align 8, !tbaa !23
  %260 = add i32 %255, %110
  store i32 %260, ptr %254, align 4, !tbaa !22
  %261 = icmp ugt i32 %260, 15
  br i1 %261, label %.preheader172, label %.loopexit173

.preheader172:                                    ; preds = %249
  %262 = getelementptr inbounds i8, ptr %0, i64 216
  %263 = getelementptr inbounds i8, ptr %0, i64 208
  %264 = getelementptr inbounds i8, ptr %0, i64 224
  br label %265

265:                                              ; preds = %.preheader172, %287
  %266 = phi i32 [ %260, %.preheader172 ], [ %288, %287 ]
  %267 = load i32, ptr %257, align 8, !tbaa !23
  %268 = trunc i32 %267 to i16
  %269 = load ptr, ptr %262, align 8, !tbaa !24
  store i16 %268, ptr %269, align 2, !tbaa !25
  %270 = lshr i32 %267, 16
  store i32 %270, ptr %257, align 8, !tbaa !23
  %271 = add i32 %266, -16
  store i32 %271, ptr %254, align 4, !tbaa !22
  %272 = icmp ugt i32 %271, 16
  br i1 %272, label %273, label %281

273:                                              ; preds = %265
  %274 = load i32, ptr %109, align 4, !tbaa !31
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds [32 x i32], ptr @bitmask, i64 0, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !36
  %278 = sub i32 %274, %271
  %279 = lshr i32 %277, %278
  %280 = or i32 %279, %270
  store i32 %280, ptr %257, align 8, !tbaa !23
  br label %281

281:                                              ; preds = %273, %265
  %282 = getelementptr inbounds i8, ptr %269, i64 2
  store ptr %282, ptr %262, align 8, !tbaa !24
  %283 = load ptr, ptr %263, align 8, !tbaa !26
  %284 = icmp eq ptr %282, %283
  br i1 %284, label %285, label %287

285:                                              ; preds = %281
  %286 = load ptr, ptr %264, align 8, !tbaa !27
  tail call void %286(ptr noundef nonnull %253) #1
  %.pre187 = load i32, ptr %254, align 4, !tbaa !22
  br label %287

287:                                              ; preds = %281, %285
  %288 = phi i32 [ %271, %281 ], [ %.pre187, %285 ]
  %289 = icmp ugt i32 %288, 15
  br i1 %289, label %265, label %.loopexit173, !llvm.loop !37

.loopexit173:                                     ; preds = %287, %249, %._crit_edge184
  store i32 0, ptr %109, align 4, !tbaa !31
  br label %290

290:                                              ; preds = %.loopexit173, %108
  %291 = getelementptr inbounds i8, ptr %0, i64 40
  %292 = load i32, ptr %291, align 4, !tbaa !35
  %.not165 = icmp eq i32 %292, 0
  br i1 %.not165, label %313, label %293

293:                                              ; preds = %290
  %294 = getelementptr inbounds i8, ptr %0, i64 200
  %295 = getelementptr inbounds i8, ptr %0, i64 236
  %296 = load i32, ptr %295, align 4, !tbaa !22
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %295, align 4, !tbaa !22
  %298 = icmp eq i32 %297, 16
  br i1 %298, label %299, label %312

299:                                              ; preds = %293
  %300 = getelementptr inbounds i8, ptr %0, i64 240
  %301 = load i32, ptr %300, align 8, !tbaa !23
  %302 = trunc i32 %301 to i16
  %303 = getelementptr inbounds i8, ptr %0, i64 216
  %304 = load ptr, ptr %303, align 8, !tbaa !24
  store i16 %302, ptr %304, align 2, !tbaa !25
  store i32 0, ptr %295, align 4, !tbaa !22
  store i32 0, ptr %300, align 8, !tbaa !23
  %305 = getelementptr inbounds i8, ptr %304, i64 2
  store ptr %305, ptr %303, align 8, !tbaa !24
  %306 = getelementptr inbounds i8, ptr %0, i64 208
  %307 = load ptr, ptr %306, align 8, !tbaa !26
  %308 = icmp eq ptr %305, %307
  br i1 %308, label %309, label %312

309:                                              ; preds = %299
  %310 = getelementptr inbounds i8, ptr %0, i64 224
  %311 = load ptr, ptr %310, align 8, !tbaa !27
  tail call void %311(ptr noundef nonnull %294) #1
  br label %312

312:                                              ; preds = %293, %309, %299
  store i32 0, ptr %291, align 4, !tbaa !35
  br label %313

313:                                              ; preds = %312, %290
  %314 = getelementptr inbounds i8, ptr %0, i64 44
  %315 = load i32, ptr %314, align 4, !tbaa !38
  %.not166 = icmp eq i32 %315, 0
  br i1 %.not166, label %354, label %316

316:                                              ; preds = %313
  %317 = getelementptr inbounds i8, ptr %0, i64 28
  %318 = load i32, ptr %317, align 4, !tbaa !39
  %319 = getelementptr inbounds i8, ptr %0, i64 200
  %320 = getelementptr inbounds i8, ptr %0, i64 236
  %321 = load i32, ptr %320, align 4, !tbaa !22
  %322 = shl i32 %318, %321
  %323 = getelementptr inbounds i8, ptr %0, i64 240
  %324 = load i32, ptr %323, align 8, !tbaa !23
  %325 = or i32 %324, %322
  store i32 %325, ptr %323, align 8, !tbaa !23
  %326 = add nsw i32 %321, %315
  store i32 %326, ptr %320, align 4, !tbaa !22
  %327 = icmp ugt i32 %326, 15
  br i1 %327, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %316
  %328 = getelementptr inbounds i8, ptr %0, i64 216
  %329 = getelementptr inbounds i8, ptr %0, i64 208
  %330 = getelementptr inbounds i8, ptr %0, i64 224
  br label %331

331:                                              ; preds = %.preheader, %351
  %332 = phi i32 [ %326, %.preheader ], [ %352, %351 ]
  %333 = load i32, ptr %323, align 8, !tbaa !23
  %334 = trunc i32 %333 to i16
  %335 = load ptr, ptr %328, align 8, !tbaa !24
  store i16 %334, ptr %335, align 2, !tbaa !25
  %336 = lshr i32 %333, 16
  store i32 %336, ptr %323, align 8, !tbaa !23
  %337 = add i32 %332, -16
  store i32 %337, ptr %320, align 4, !tbaa !22
  %338 = icmp ugt i32 %337, 16
  br i1 %338, label %339, label %345

339:                                              ; preds = %331
  %340 = load i32, ptr %317, align 4, !tbaa !39
  %341 = load i32, ptr %314, align 4, !tbaa !38
  %342 = sub nsw i32 %341, %337
  %343 = lshr i32 %340, %342
  %344 = or i32 %343, %336
  store i32 %344, ptr %323, align 8, !tbaa !23
  br label %345

345:                                              ; preds = %339, %331
  %346 = getelementptr inbounds i8, ptr %335, i64 2
  store ptr %346, ptr %328, align 8, !tbaa !24
  %347 = load ptr, ptr %329, align 8, !tbaa !26
  %348 = icmp eq ptr %346, %347
  br i1 %348, label %349, label %351

349:                                              ; preds = %345
  %350 = load ptr, ptr %330, align 8, !tbaa !27
  tail call void %350(ptr noundef nonnull %319) #1
  %.pre193 = load i32, ptr %320, align 4, !tbaa !22
  br label %351

351:                                              ; preds = %345, %349
  %352 = phi i32 [ %337, %345 ], [ %.pre193, %349 ]
  %353 = icmp ugt i32 %352, 15
  br i1 %353, label %331, label %.loopexit, !llvm.loop !40

.loopexit:                                        ; preds = %351, %316
  store i32 0, ptr %314, align 4, !tbaa !38
  store i32 0, ptr %317, align 4, !tbaa !39
  br label %354

354:                                              ; preds = %.loopexit, %313
  ret void
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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, !11, i64 36}
!6 = !{!"", !7, i64 0, !12, i64 12, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !14, i64 128, !14, i64 136, !11, i64 144, !11, i64 148, !11, i64 152, !8, i64 156, !8, i64 157, !8, i64 158, !8, i64 159, !8, i64 160, !8, i64 161, !8, i64 162, !11, i64 164, !11, i64 168, !11, i64 172, !11, i64 176, !11, i64 180, !11, i64 184, !11, i64 188, !11, i64 192, !15, i64 200, !15, i64 248, !15, i64 296, !16, i64 344, !8, i64 348, !8, i64 349, !8, i64 350, !8, i64 351, !8, i64 352, !8, i64 353, !8, i64 354, !8, i64 355, !17, i64 360, !8, i64 432, !19, i64 1968, !13, i64 2064, !20, i64 2072}
!7 = !{!"", !8, i64 0, !10, i64 4, !10, i64 6, !11, i64 8}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!"words_data", !8, i64 0, !8, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !8, i64 36}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"long", !8, i64 0}
!15 = !{!"bs", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !11, i64 32, !11, i64 36, !11, i64 40}
!16 = !{!"float", !8, i64 0}
!17 = !{!"", !8, i64 0, !8, i64 8, !8, i64 16, !18, i64 24, !18, i64 32, !18, i64 40, !13, i64 48, !13, i64 56, !11, i64 64}
!18 = !{!"double", !8, i64 0}
!19 = !{!"decorr_pass", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !8, i64 16, !8, i64 48, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92}
!20 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !8, i64 40, !8, i64 41, !11, i64 44, !11, i64 48, !11, i64 52, !13, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !8, i64 76, !13, i64 160}
!21 = !{!8, !8, i64 0}
!22 = !{!6, !11, i64 236}
!23 = !{!6, !11, i64 240}
!24 = !{!6, !13, i64 216}
!25 = !{!10, !10, i64 0}
!26 = !{!6, !13, i64 208}
!27 = !{!6, !13, i64 224}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{!6, !11, i64 32}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !29}
!34 = distinct !{!34, !29}
!35 = !{!6, !11, i64 40}
!36 = !{!11, !11, i64 0}
!37 = distinct !{!37, !29}
!38 = !{!6, !11, i64 44}
!39 = !{!6, !11, i64 28}
!40 = distinct !{!40, !29}


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