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

; 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.WavpackContext = type { %struct.WavpackStreamConfig, ptr, i32, i32, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i64, i64, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, i8, ptr, ptr, i32, i32, ptr, [8 x i8], ptr, [80 x i8] }
%struct.WavpackStreamConfig = type { float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x i8], i8, i32, ptr }
%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 }

; 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 allocsize(0)
declare noalias ptr @malloc(i64 noundef) #1

declare void @init_words(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @pack_block(ptr noundef %0, ptr noundef %1) #3 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.WavpackContext, ptr %24, i32 0, i32 36
  %26 = load ptr, ptr %25, align 8, !tbaa !9
  %27 = load ptr, ptr %4, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.WavpackContext, ptr %27, i32 0, i32 33
  %29 = load i32, ptr %28, align 4, !tbaa !15
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds ptr, ptr %26, i64 %30
  %32 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %32, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %33 = load ptr, ptr %6, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.WavpackStream, ptr %33, i32 0, i32 0
  %35 = getelementptr inbounds %struct.WavpackHeader, ptr %34, i32 0, i32 3
  %36 = load i32, ptr %35, align 8, !tbaa !16
  store i32 %36, ptr %7, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.WavpackStream, ptr %37, i32 0, i32 0
  %39 = getelementptr inbounds %struct.WavpackHeader, ptr %38, i32 0, i32 3
  %40 = load i32, ptr %39, align 8, !tbaa !16
  store i32 %40, ptr %8, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.WavpackStream, ptr %41, i32 0, i32 0
  %43 = getelementptr inbounds %struct.WavpackHeader, ptr %42, i32 0, i32 2
  %44 = load i16, ptr %43, align 2, !tbaa !27
  %45 = zext i16 %44 to i32
  store i32 %45, ptr %9, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !26
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.WavpackContext, ptr %46, i32 0, i32 33
  %48 = load i32, ptr %47, align 4, !tbaa !15
  %49 = icmp ne i32 %48, 0
  br i1 %49, label %91, label %50

50:                                               ; preds = %2
  %51 = load i32, ptr %7, align 4, !tbaa !26
  %52 = and i32 %51, 128
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %91, label %54

54:                                               ; preds = %50
  %55 = load i32, ptr %7, align 4, !tbaa !26
  %56 = zext i32 %55 to i64
  %57 = and i64 %56, 8126464
  %58 = ashr i64 %57, 18
  %59 = icmp slt i64 %58, 24
  br i1 %59, label %60, label %91

60:                                               ; preds = %54
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.WavpackContext, ptr %61, i32 0, i32 0
  %63 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %62, i32 0, i32 5
  %64 = load i32, ptr %63, align 4, !tbaa !28
  %65 = and i32 %64, 131072
  %66 = icmp ne i32 %65, 0
  br i1 %66, label %67, label %90

67:                                               ; preds = %60
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.WavpackContext, ptr %68, i32 0, i32 0
  %70 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %69, i32 0, i32 9
  %71 = load i32, ptr %70, align 4, !tbaa !29
  %72 = icmp ne i32 %71, 0
  br i1 %72, label %90, label %73

73:                                               ; preds = %67
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  call void @dynamic_noise_shaping(ptr noundef %74, ptr noundef %75, i32 noundef 1)
  %76 = load i32, ptr %9, align 4, !tbaa !26
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.WavpackStream, ptr %77, i32 0, i32 0
  %79 = getelementptr inbounds %struct.WavpackHeader, ptr %78, i32 0, i32 2
  %80 = load i16, ptr %79, align 2, !tbaa !27
  %81 = zext i16 %80 to i32
  %82 = icmp ne i32 %76, %81
  br i1 %82, label %83, label %89

83:                                               ; preds = %73
  %84 = load ptr, ptr %6, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.WavpackStream, ptr %84, i32 0, i32 0
  %86 = getelementptr inbounds %struct.WavpackHeader, ptr %85, i32 0, i32 2
  %87 = load i16, ptr %86, align 2, !tbaa !27
  %88 = zext i16 %87 to i32
  store i32 %88, ptr %9, align 4, !tbaa !26
  br label %89

89:                                               ; preds = %83, %73
  store i32 1, ptr %11, align 4, !tbaa !26
  br label %90

90:                                               ; preds = %89, %67, %60
  br label %91

91:                                               ; preds = %90, %54, %50, %2
  %92 = load i32, ptr %7, align 4, !tbaa !26
  %93 = and i32 %92, 4
  %94 = icmp ne i32 %93, 0
  br i1 %94, label %191, label %95

95:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  %96 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %96, ptr %14, align 8, !tbaa !5
  store i32 0, ptr %16, align 4, !tbaa !26
  br label %97

97:                                               ; preds = %127, %95
  %98 = load i32, ptr %16, align 4, !tbaa !26
  %99 = load i32, ptr %9, align 4, !tbaa !26
  %100 = icmp slt i32 %98, %99
  br i1 %100, label %101, label %132

101:                                              ; preds = %97
  %102 = load ptr, ptr %14, align 8, !tbaa !5
  %103 = getelementptr inbounds i32, ptr %102, i64 0
  %104 = load i32, ptr %103, align 4, !tbaa !26
  %105 = load ptr, ptr %14, align 8, !tbaa !5
  %106 = getelementptr inbounds i32, ptr %105, i64 1
  %107 = load i32, ptr %106, align 4, !tbaa !26
  %108 = or i32 %104, %107
  %109 = load i32, ptr %12, align 4, !tbaa !26
  %110 = or i32 %109, %108
  store i32 %110, ptr %12, align 4, !tbaa !26
  %111 = load ptr, ptr %14, align 8, !tbaa !5
  %112 = getelementptr inbounds i32, ptr %111, i64 0
  %113 = load i32, ptr %112, align 4, !tbaa !26
  %114 = load ptr, ptr %14, align 8, !tbaa !5
  %115 = getelementptr inbounds i32, ptr %114, i64 1
  %116 = load i32, ptr %115, align 4, !tbaa !26
  %117 = xor i32 %113, %116
  %118 = load i32, ptr %13, align 4, !tbaa !26
  %119 = or i32 %118, %117
  store i32 %119, ptr %13, align 4, !tbaa !26
  %120 = load i32, ptr %12, align 4, !tbaa !26
  %121 = icmp ne i32 %120, 0
  br i1 %121, label %122, label %126

122:                                              ; preds = %101
  %123 = load i32, ptr %13, align 4, !tbaa !26
  %124 = icmp ne i32 %123, 0
  br i1 %124, label %125, label %126

125:                                              ; preds = %122
  br label %132

126:                                              ; preds = %122, %101
  br label %127

127:                                              ; preds = %126
  %128 = load ptr, ptr %14, align 8, !tbaa !5
  %129 = getelementptr inbounds i32, ptr %128, i64 2
  store ptr %129, ptr %14, align 8, !tbaa !5
  %130 = load i32, ptr %16, align 4, !tbaa !26
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %16, align 4, !tbaa !26
  br label %97, !llvm.loop !30

132:                                              ; preds = %125, %97
  %133 = load i32, ptr %16, align 4, !tbaa !26
  %134 = load i32, ptr %9, align 4, !tbaa !26
  %135 = icmp eq i32 %133, %134
  br i1 %135, label %136, label %178

136:                                              ; preds = %132
  %137 = load i32, ptr %12, align 4, !tbaa !26
  %138 = icmp ne i32 %137, 0
  br i1 %138, label %139, label %178

139:                                              ; preds = %136
  %140 = load i32, ptr %13, align 4, !tbaa !26
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %178, label %142

142:                                              ; preds = %139
  %143 = load i32, ptr %7, align 4, !tbaa !26
  %144 = and i32 %143, -1073
  store i32 %144, ptr %7, align 4, !tbaa !26
  %145 = load i32, ptr %7, align 4, !tbaa !26
  %146 = or i32 %145, 1073741824
  store i32 %146, ptr %7, align 4, !tbaa !26
  %147 = load ptr, ptr %6, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.WavpackStream, ptr %147, i32 0, i32 0
  %149 = getelementptr inbounds %struct.WavpackHeader, ptr %148, i32 0, i32 3
  store i32 %146, ptr %149, align 8, !tbaa !16
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %150, ptr %15, align 8, !tbaa !5
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %151, ptr %14, align 8, !tbaa !5
  %152 = load i32, ptr %9, align 4, !tbaa !26
  store i32 %152, ptr %16, align 4, !tbaa !26
  br label %153

153:                                              ; preds = %163, %142
  %154 = load i32, ptr %16, align 4, !tbaa !26
  %155 = add nsw i32 %154, -1
  store i32 %155, ptr %16, align 4, !tbaa !26
  %156 = icmp ne i32 %154, 0
  br i1 %156, label %157, label %166

157:                                              ; preds = %153
  %158 = load ptr, ptr %14, align 8, !tbaa !5
  %159 = getelementptr inbounds i32, ptr %158, i32 1
  store ptr %159, ptr %14, align 8, !tbaa !5
  %160 = load i32, ptr %158, align 4, !tbaa !26
  %161 = load ptr, ptr %15, align 8, !tbaa !5
  %162 = getelementptr inbounds i32, ptr %161, i32 1
  store ptr %162, ptr %15, align 8, !tbaa !5
  store i32 %160, ptr %161, align 4, !tbaa !26
  br label %163

163:                                              ; preds = %157
  %164 = load ptr, ptr %14, align 8, !tbaa !5
  %165 = getelementptr inbounds i32, ptr %164, i32 1
  store ptr %165, ptr %14, align 8, !tbaa !5
  br label %153, !llvm.loop !32

166:                                              ; preds = %153
  %167 = load ptr, ptr %6, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.WavpackStream, ptr %167, i32 0, i32 14
  %169 = load i8, ptr %168, align 2, !tbaa !33
  %170 = icmp ne i8 %169, 0
  br i1 %170, label %177, label %171

171:                                              ; preds = %166
  %172 = load ptr, ptr %6, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.WavpackStream, ptr %172, i32 0, i32 14
  store i8 1, ptr %173, align 2, !tbaa !33
  %174 = load ptr, ptr %6, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.WavpackStream, ptr %174, i32 0, i32 10
  store i32 0, ptr %175, align 4, !tbaa !34
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  call void @init_words(ptr noundef %176)
  br label %177

177:                                              ; preds = %171, %166
  br label %190

178:                                              ; preds = %139, %136, %132
  %179 = load ptr, ptr %6, align 8, !tbaa !5
  %180 = getelementptr inbounds %struct.WavpackStream, ptr %179, i32 0, i32 14
  %181 = load i8, ptr %180, align 2, !tbaa !33
  %182 = icmp ne i8 %181, 0
  br i1 %182, label %183, label %189

183:                                              ; preds = %178
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.WavpackStream, ptr %184, i32 0, i32 14
  store i8 0, ptr %185, align 2, !tbaa !33
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.WavpackStream, ptr %186, i32 0, i32 10
  store i32 0, ptr %187, align 4, !tbaa !34
  %188 = load ptr, ptr %6, align 8, !tbaa !5
  call void @init_words(ptr noundef %188)
  br label %189

189:                                              ; preds = %183, %178
  br label %190

190:                                              ; preds = %189, %177
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %191

191:                                              ; preds = %190, %91
  %192 = load i32, ptr %7, align 4, !tbaa !26
  %193 = zext i32 %192 to i64
  %194 = and i64 %193, 253952
  %195 = icmp ne i64 %194, 0
  br i1 %195, label %196, label %261

196:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %197 = load i32, ptr %7, align 4, !tbaa !26
  %198 = zext i32 %197 to i64
  %199 = and i64 %198, 253952
  %200 = ashr i64 %199, 13
  %201 = trunc i64 %200 to i32
  store i32 %201, ptr %17, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %202 = load i32, ptr %7, align 4, !tbaa !26
  %203 = zext i32 %202 to i64
  %204 = and i64 %203, 8126464
  %205 = ashr i64 %204, 18
  %206 = trunc i64 %205 to i32
  store i32 %206, ptr %18, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %207 = load i32, ptr %9, align 4, !tbaa !26
  store i32 %207, ptr %19, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %208, ptr %20, align 8, !tbaa !5
  %209 = load i32, ptr %7, align 4, !tbaa !26
  %210 = and i32 %209, 1073741828
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %212, label %224

212:                                              ; preds = %196
  br label %213

213:                                              ; preds = %217, %212
  %214 = load i32, ptr %19, align 4, !tbaa !26
  %215 = add i32 %214, -1
  store i32 %215, ptr %19, align 4, !tbaa !26
  %216 = icmp ne i32 %214, 0
  br i1 %216, label %217, label %223

217:                                              ; preds = %213
  %218 = load i32, ptr %17, align 4, !tbaa !26
  %219 = load ptr, ptr %20, align 8, !tbaa !5
  %220 = getelementptr inbounds i32, ptr %219, i32 1
  store ptr %220, ptr %20, align 8, !tbaa !5
  %221 = load i32, ptr %219, align 4, !tbaa !26
  %222 = ashr i32 %221, %218
  store i32 %222, ptr %219, align 4, !tbaa !26
  br label %213, !llvm.loop !35

223:                                              ; preds = %213
  br label %241

224:                                              ; preds = %196
  br label %225

225:                                              ; preds = %229, %224
  %226 = load i32, ptr %19, align 4, !tbaa !26
  %227 = add i32 %226, -1
  store i32 %227, ptr %19, align 4, !tbaa !26
  %228 = icmp ne i32 %226, 0
  br i1 %228, label %229, label %240

229:                                              ; preds = %225
  %230 = load i32, ptr %17, align 4, !tbaa !26
  %231 = load ptr, ptr %20, align 8, !tbaa !5
  %232 = getelementptr inbounds i32, ptr %231, i32 1
  store ptr %232, ptr %20, align 8, !tbaa !5
  %233 = load i32, ptr %231, align 4, !tbaa !26
  %234 = ashr i32 %233, %230
  store i32 %234, ptr %231, align 4, !tbaa !26
  %235 = load i32, ptr %17, align 4, !tbaa !26
  %236 = load ptr, ptr %20, align 8, !tbaa !5
  %237 = getelementptr inbounds i32, ptr %236, i32 1
  store ptr %237, ptr %20, align 8, !tbaa !5
  %238 = load i32, ptr %236, align 4, !tbaa !26
  %239 = ashr i32 %238, %235
  store i32 %239, ptr %236, align 4, !tbaa !26
  br label %225, !llvm.loop !36

240:                                              ; preds = %225
  br label %241

241:                                              ; preds = %240, %223
  %242 = load i32, ptr %17, align 4, !tbaa !26
  %243 = load i32, ptr %18, align 4, !tbaa !26
  %244 = sub nsw i32 %243, %242
  store i32 %244, ptr %18, align 4, !tbaa !26
  %245 = icmp slt i32 %244, 0
  br i1 %245, label %246, label %251

246:                                              ; preds = %241
  %247 = load i32, ptr %7, align 4, !tbaa !26
  %248 = zext i32 %247 to i64
  %249 = and i64 %248, -8126465
  %250 = trunc i64 %249 to i32
  store i32 %250, ptr %7, align 4, !tbaa !26
  br label %256

251:                                              ; preds = %241
  %252 = load i32, ptr %17, align 4, !tbaa !26
  %253 = mul nsw i32 262144, %252
  %254 = load i32, ptr %7, align 4, !tbaa !26
  %255 = sub i32 %254, %253
  store i32 %255, ptr %7, align 4, !tbaa !26
  br label %256

256:                                              ; preds = %251, %246
  %257 = load i32, ptr %7, align 4, !tbaa !26
  %258 = load ptr, ptr %6, align 8, !tbaa !5
  %259 = getelementptr inbounds %struct.WavpackStream, ptr %258, i32 0, i32 0
  %260 = getelementptr inbounds %struct.WavpackHeader, ptr %259, i32 0, i32 3
  store i32 %257, ptr %260, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %261

261:                                              ; preds = %256, %191
  %262 = load i32, ptr %7, align 4, !tbaa !26
  %263 = and i32 %262, 128
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %271, label %265

265:                                              ; preds = %261
  %266 = load i32, ptr %7, align 4, !tbaa !26
  %267 = zext i32 %266 to i64
  %268 = and i64 %267, 8126464
  %269 = ashr i64 %268, 18
  %270 = icmp sge i64 %269, 24
  br i1 %270, label %271, label %423

271:                                              ; preds = %265, %261
  %272 = load i32, ptr %7, align 4, !tbaa !26
  %273 = and i32 %272, 8
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %280

275:                                              ; preds = %271
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.WavpackContext, ptr %276, i32 0, i32 20
  %278 = load i32, ptr %277, align 8, !tbaa !37
  %279 = icmp ne i32 %278, 0
  br i1 %279, label %280, label %362

280:                                              ; preds = %275, %271
  %281 = load ptr, ptr %4, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.WavpackContext, ptr %281, i32 0, i32 0
  %283 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %282, i32 0, i32 5
  %284 = load i32, ptr %283, align 4, !tbaa !28
  %285 = and i32 %284, 67108864
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %362, label %287

287:                                              ; preds = %280
  %288 = load i32, ptr %7, align 4, !tbaa !26
  %289 = and i32 %288, 1073741828
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %293

291:                                              ; preds = %287
  %292 = load i32, ptr %9, align 4, !tbaa !26
  br label %296

293:                                              ; preds = %287
  %294 = load i32, ptr %9, align 4, !tbaa !26
  %295 = mul nsw i32 %294, 2
  br label %296

296:                                              ; preds = %293, %291
  %297 = phi i32 [ %292, %291 ], [ %295, %293 ]
  %298 = sext i32 %297 to i64
  %299 = mul i64 4, %298
  %300 = call noalias ptr @malloc(i64 noundef %299) #7
  store ptr %300, ptr %10, align 8, !tbaa !5
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = load i32, ptr %7, align 4, !tbaa !26
  %304 = and i32 %303, 1073741828
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %306, label %308

306:                                              ; preds = %296
  %307 = load i32, ptr %9, align 4, !tbaa !26
  br label %311

308:                                              ; preds = %296
  %309 = load i32, ptr %9, align 4, !tbaa !26
  %310 = mul nsw i32 %309, 2
  br label %311

311:                                              ; preds = %308, %306
  %312 = phi i32 [ %307, %306 ], [ %310, %308 ]
  %313 = sext i32 %312 to i64
  %314 = mul i64 4, %313
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %301, ptr align 4 %302, i64 %314, i1 false)
  %315 = load i32, ptr %7, align 4, !tbaa !26
  %316 = and i32 %315, 128
  %317 = icmp ne i32 %316, 0
  br i1 %317, label %318, label %343

318:                                              ; preds = %311
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.WavpackContext, ptr %319, i32 0, i32 0
  %321 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %320, i32 0, i32 8
  %322 = load i32, ptr %321, align 8, !tbaa !38
  %323 = trunc i32 %322 to i8
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.WavpackStream, ptr %324, i32 0, i32 38
  store i8 %323, ptr %325, align 1, !tbaa !39
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = load ptr, ptr %5, align 8, !tbaa !5
  %328 = load i32, ptr %7, align 4, !tbaa !26
  %329 = and i32 %328, 1073741828
  %330 = icmp ne i32 %329, 0
  br i1 %330, label %331, label %333

331:                                              ; preds = %318
  %332 = load i32, ptr %9, align 4, !tbaa !26
  br label %336

333:                                              ; preds = %318
  %334 = load i32, ptr %9, align 4, !tbaa !26
  %335 = mul nsw i32 %334, 2
  br label %336

336:                                              ; preds = %333, %331
  %337 = phi i32 [ %332, %331 ], [ %335, %333 ]
  %338 = call i32 @scan_float_data(ptr noundef %326, ptr noundef %327, i32 noundef %337)
  %339 = icmp ne i32 %338, 0
  br i1 %339, label %342, label %340

340:                                              ; preds = %336
  %341 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %341) #6
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %342

342:                                              ; preds = %340, %336
  br label %361

343:                                              ; preds = %311
  %344 = load ptr, ptr %6, align 8, !tbaa !5
  %345 = load ptr, ptr %5, align 8, !tbaa !5
  %346 = load i32, ptr %7, align 4, !tbaa !26
  %347 = and i32 %346, 1073741828
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %349, label %351

349:                                              ; preds = %343
  %350 = load i32, ptr %9, align 4, !tbaa !26
  br label %354

351:                                              ; preds = %343
  %352 = load i32, ptr %9, align 4, !tbaa !26
  %353 = mul nsw i32 %352, 2
  br label %354

354:                                              ; preds = %351, %349
  %355 = phi i32 [ %350, %349 ], [ %353, %351 ]
  %356 = call i32 @scan_int32_data(ptr noundef %344, ptr noundef %345, i32 noundef %355)
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %360, label %358

358:                                              ; preds = %354
  %359 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %359) #6
  store ptr null, ptr %10, align 8, !tbaa !5
  br label %360

360:                                              ; preds = %358, %354
  br label %361

361:                                              ; preds = %360, %342
  br label %412

362:                                              ; preds = %280, %275
  %363 = load i32, ptr %7, align 4, !tbaa !26
  %364 = and i32 %363, 128
  %365 = icmp ne i32 %364, 0
  br i1 %365, label %366, label %392

366:                                              ; preds = %362
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.WavpackContext, ptr %367, i32 0, i32 0
  %369 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %368, i32 0, i32 8
  %370 = load i32, ptr %369, align 8, !tbaa !38
  %371 = trunc i32 %370 to i8
  %372 = load ptr, ptr %6, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.WavpackStream, ptr %372, i32 0, i32 38
  store i8 %371, ptr %373, align 1, !tbaa !39
  %374 = load ptr, ptr %6, align 8, !tbaa !5
  %375 = load ptr, ptr %5, align 8, !tbaa !5
  %376 = load i32, ptr %7, align 4, !tbaa !26
  %377 = and i32 %376, 1073741828
  %378 = icmp ne i32 %377, 0
  br i1 %378, label %379, label %381

379:                                              ; preds = %366
  %380 = load i32, ptr %9, align 4, !tbaa !26
  br label %384

381:                                              ; preds = %366
  %382 = load i32, ptr %9, align 4, !tbaa !26
  %383 = mul nsw i32 %382, 2
  br label %384

384:                                              ; preds = %381, %379
  %385 = phi i32 [ %380, %379 ], [ %383, %381 ]
  %386 = call i32 @scan_float_data(ptr noundef %374, ptr noundef %375, i32 noundef %385)
  %387 = icmp ne i32 %386, 0
  br i1 %387, label %388, label %391

388:                                              ; preds = %384
  %389 = load ptr, ptr %4, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.WavpackContext, ptr %389, i32 0, i32 24
  store i32 1, ptr %390, align 8, !tbaa !40
  br label %391

391:                                              ; preds = %388, %384
  br label %411

392:                                              ; preds = %362
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = load ptr, ptr %5, align 8, !tbaa !5
  %395 = load i32, ptr %7, align 4, !tbaa !26
  %396 = and i32 %395, 1073741828
  %397 = icmp ne i32 %396, 0
  br i1 %397, label %398, label %400

398:                                              ; preds = %392
  %399 = load i32, ptr %9, align 4, !tbaa !26
  br label %403

400:                                              ; preds = %392
  %401 = load i32, ptr %9, align 4, !tbaa !26
  %402 = mul nsw i32 %401, 2
  br label %403

403:                                              ; preds = %400, %398
  %404 = phi i32 [ %399, %398 ], [ %402, %400 ]
  %405 = call i32 @scan_int32_data(ptr noundef %393, ptr noundef %394, i32 noundef %404)
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %410

407:                                              ; preds = %403
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.WavpackContext, ptr %408, i32 0, i32 24
  store i32 1, ptr %409, align 8, !tbaa !40
  br label %410

410:                                              ; preds = %407, %403
  br label %411

411:                                              ; preds = %410, %391
  br label %412

412:                                              ; preds = %411, %361
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.WavpackStream, ptr %413, i32 0, i32 39
  %415 = getelementptr inbounds %struct.anon, ptr %414, i32 0, i32 2
  %416 = getelementptr inbounds [2 x i32], ptr %415, i64 0, i64 1
  store i32 0, ptr %416, align 4, !tbaa !26
  %417 = load ptr, ptr %6, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.WavpackStream, ptr %417, i32 0, i32 39
  %419 = getelementptr inbounds %struct.anon, ptr %418, i32 0, i32 2
  %420 = getelementptr inbounds [2 x i32], ptr %419, i64 0, i64 0
  store i32 0, ptr %420, align 8, !tbaa !26
  %421 = load ptr, ptr %6, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.WavpackStream, ptr %421, i32 0, i32 10
  store i32 0, ptr %422, align 4, !tbaa !34
  br label %482

423:                                              ; preds = %265
  %424 = load ptr, ptr %6, align 8, !tbaa !5
  %425 = load ptr, ptr %5, align 8, !tbaa !5
  %426 = load i32, ptr %7, align 4, !tbaa !26
  %427 = and i32 %426, 1073741828
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %429, label %431

429:                                              ; preds = %423
  %430 = load i32, ptr %9, align 4, !tbaa !26
  br label %434

431:                                              ; preds = %423
  %432 = load i32, ptr %9, align 4, !tbaa !26
  %433 = mul nsw i32 %432, 2
  br label %434

434:                                              ; preds = %431, %429
  %435 = phi i32 [ %430, %429 ], [ %433, %431 ]
  call void @scan_int32_quick(ptr noundef %424, ptr noundef %425, i32 noundef %435)
  %436 = load ptr, ptr %6, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.WavpackStream, ptr %436, i32 0, i32 11
  %438 = load i32, ptr %437, align 8, !tbaa !41
  %439 = load ptr, ptr %6, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.WavpackStream, ptr %439, i32 0, i32 32
  %441 = load i8, ptr %440, align 1, !tbaa !42
  %442 = zext i8 %441 to i32
  %443 = load ptr, ptr %6, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.WavpackStream, ptr %443, i32 0, i32 33
  %445 = load i8, ptr %444, align 2, !tbaa !43
  %446 = zext i8 %445 to i32
  %447 = add nsw i32 %442, %446
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.WavpackStream, ptr %448, i32 0, i32 34
  %450 = load i8, ptr %449, align 1, !tbaa !44
  %451 = zext i8 %450 to i32
  %452 = add nsw i32 %447, %451
  %453 = icmp ne i32 %438, %452
  br i1 %453, label %454, label %481

454:                                              ; preds = %434
  %455 = load ptr, ptr %6, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.WavpackStream, ptr %455, i32 0, i32 32
  %457 = load i8, ptr %456, align 1, !tbaa !42
  %458 = zext i8 %457 to i32
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.WavpackStream, ptr %459, i32 0, i32 33
  %461 = load i8, ptr %460, align 2, !tbaa !43
  %462 = zext i8 %461 to i32
  %463 = add nsw i32 %458, %462
  %464 = load ptr, ptr %6, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.WavpackStream, ptr %464, i32 0, i32 34
  %466 = load i8, ptr %465, align 1, !tbaa !44
  %467 = zext i8 %466 to i32
  %468 = add nsw i32 %463, %467
  %469 = load ptr, ptr %6, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.WavpackStream, ptr %469, i32 0, i32 11
  store i32 %468, ptr %470, align 8, !tbaa !41
  %471 = load ptr, ptr %6, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.WavpackStream, ptr %471, i32 0, i32 39
  %473 = getelementptr inbounds %struct.anon, ptr %472, i32 0, i32 2
  %474 = getelementptr inbounds [2 x i32], ptr %473, i64 0, i64 1
  store i32 0, ptr %474, align 4, !tbaa !26
  %475 = load ptr, ptr %6, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.WavpackStream, ptr %475, i32 0, i32 39
  %477 = getelementptr inbounds %struct.anon, ptr %476, i32 0, i32 2
  %478 = getelementptr inbounds [2 x i32], ptr %477, i64 0, i64 0
  store i32 0, ptr %478, align 8, !tbaa !26
  %479 = load ptr, ptr %6, align 8, !tbaa !5
  %480 = getelementptr inbounds %struct.WavpackStream, ptr %479, i32 0, i32 10
  store i32 0, ptr %480, align 4, !tbaa !34
  br label %481

481:                                              ; preds = %454, %434
  br label %482

482:                                              ; preds = %481, %412
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.WavpackContext, ptr %483, i32 0, i32 0
  %485 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %484, i32 0, i32 5
  %486 = load i32, ptr %485, align 4, !tbaa !28
  %487 = and i32 %486, 131072
  %488 = icmp ne i32 %487, 0
  br i1 %488, label %489, label %495

489:                                              ; preds = %482
  %490 = load i32, ptr %11, align 4, !tbaa !26
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %495, label %492

492:                                              ; preds = %489
  %493 = load ptr, ptr %4, align 8, !tbaa !5
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  call void @dynamic_noise_shaping(ptr noundef %493, ptr noundef %494, i32 noundef 0)
  br label %495

495:                                              ; preds = %492, %489, %482
  %496 = load ptr, ptr %6, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.WavpackStream, ptr %496, i32 0, i32 20
  %498 = load i32, ptr %497, align 8, !tbaa !45
  %499 = icmp ne i32 %498, 0
  br i1 %499, label %520, label %500

500:                                              ; preds = %495
  %501 = load ptr, ptr %6, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.WavpackStream, ptr %501, i32 0, i32 10
  %503 = load i32, ptr %502, align 4, !tbaa !34
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %520, label %505

505:                                              ; preds = %500
  %506 = load ptr, ptr %6, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.WavpackStream, ptr %506, i32 0, i32 20
  store i32 1, ptr %507, align 8, !tbaa !45
  %508 = load i32, ptr %7, align 4, !tbaa !26
  %509 = and i32 %508, 1073741828
  %510 = icmp ne i32 %509, 0
  br i1 %510, label %511, label %514

511:                                              ; preds = %505
  %512 = load ptr, ptr %4, align 8, !tbaa !5
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  call void @execute_mono(ptr noundef %512, ptr noundef %513, i32 noundef 1, i32 noundef 0)
  br label %517

514:                                              ; preds = %505
  %515 = load ptr, ptr %4, align 8, !tbaa !5
  %516 = load ptr, ptr %5, align 8, !tbaa !5
  call void @execute_stereo(ptr noundef %515, ptr noundef %516, i32 noundef 1, i32 noundef 0)
  br label %517

517:                                              ; preds = %514, %511
  %518 = load ptr, ptr %6, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.WavpackStream, ptr %518, i32 0, i32 20
  store i32 0, ptr %519, align 8, !tbaa !45
  br label %520

520:                                              ; preds = %517, %500, %495
  %521 = load ptr, ptr %4, align 8, !tbaa !5
  %522 = load ptr, ptr %5, align 8, !tbaa !5
  %523 = call i32 @pack_samples(ptr noundef %521, ptr noundef %522)
  %524 = icmp ne i32 %523, 0
  br i1 %524, label %535, label %525

525:                                              ; preds = %520
  %526 = load i32, ptr %8, align 4, !tbaa !26
  %527 = load ptr, ptr %6, align 8, !tbaa !5
  %528 = getelementptr inbounds %struct.WavpackStream, ptr %527, i32 0, i32 0
  %529 = getelementptr inbounds %struct.WavpackHeader, ptr %528, i32 0, i32 3
  store i32 %526, ptr %529, align 8, !tbaa !16
  %530 = load ptr, ptr %10, align 8, !tbaa !5
  %531 = icmp ne ptr %530, null
  br i1 %531, label %532, label %534

532:                                              ; preds = %525
  %533 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %533) #6
  br label %534

534:                                              ; preds = %532, %525
  store i32 0, ptr %3, align 4
  store i32 1, ptr %21, align 4
  br label %782

535:                                              ; preds = %520
  %536 = load i32, ptr %8, align 4, !tbaa !26
  %537 = load ptr, ptr %6, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.WavpackStream, ptr %537, i32 0, i32 0
  %539 = getelementptr inbounds %struct.WavpackHeader, ptr %538, i32 0, i32 3
  store i32 %536, ptr %539, align 8, !tbaa !16
  br label %540

540:                                              ; preds = %535
  %541 = load i32, ptr %9, align 4, !tbaa !26
  %542 = load ptr, ptr %6, align 8, !tbaa !5
  %543 = getelementptr inbounds %struct.WavpackStream, ptr %542, i32 0, i32 0
  %544 = getelementptr inbounds %struct.WavpackHeader, ptr %543, i32 0, i32 2
  %545 = load i16, ptr %544, align 2, !tbaa !27
  %546 = zext i16 %545 to i32
  %547 = icmp ne i32 %541, %546
  br i1 %547, label %548, label %554

548:                                              ; preds = %540
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.WavpackStream, ptr %549, i32 0, i32 0
  %551 = getelementptr inbounds %struct.WavpackHeader, ptr %550, i32 0, i32 2
  %552 = load i16, ptr %551, align 2, !tbaa !27
  %553 = zext i16 %552 to i32
  store i32 %553, ptr %9, align 4, !tbaa !26
  br label %554

554:                                              ; preds = %548, %540
  %555 = load ptr, ptr %6, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.WavpackStream, ptr %555, i32 0, i32 39
  %557 = getelementptr inbounds %struct.anon, ptr %556, i32 0, i32 6
  %558 = load ptr, ptr %557, align 8, !tbaa !46
  %559 = icmp ne ptr %558, null
  br i1 %559, label %560, label %594

560:                                              ; preds = %554
  %561 = load ptr, ptr %6, align 8, !tbaa !5
  %562 = getelementptr inbounds %struct.WavpackStream, ptr %561, i32 0, i32 39
  %563 = getelementptr inbounds %struct.anon, ptr %562, i32 0, i32 8
  %564 = load i32, ptr %563, align 8, !tbaa !47
  %565 = load i32, ptr %9, align 4, !tbaa !26
  %566 = icmp ne i32 %564, %565
  br i1 %566, label %567, label %587

567:                                              ; preds = %560
  %568 = load ptr, ptr %6, align 8, !tbaa !5
  %569 = getelementptr inbounds %struct.WavpackStream, ptr %568, i32 0, i32 39
  %570 = getelementptr inbounds %struct.anon, ptr %569, i32 0, i32 6
  %571 = load ptr, ptr %570, align 8, !tbaa !46
  %572 = load ptr, ptr %6, align 8, !tbaa !5
  %573 = getelementptr inbounds %struct.WavpackStream, ptr %572, i32 0, i32 39
  %574 = getelementptr inbounds %struct.anon, ptr %573, i32 0, i32 6
  %575 = load ptr, ptr %574, align 8, !tbaa !46
  %576 = load i32, ptr %9, align 4, !tbaa !26
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i16, ptr %575, i64 %577
  %579 = load ptr, ptr %6, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.WavpackStream, ptr %579, i32 0, i32 39
  %581 = getelementptr inbounds %struct.anon, ptr %580, i32 0, i32 8
  %582 = load i32, ptr %581, align 8, !tbaa !47
  %583 = load i32, ptr %9, align 4, !tbaa !26
  %584 = sub nsw i32 %582, %583
  %585 = sext i32 %584 to i64
  %586 = mul i64 %585, 2
  call void @llvm.memmove.p0.p0.i64(ptr align 2 %571, ptr align 2 %578, i64 %586, i1 false)
  br label %587

587:                                              ; preds = %567, %560
  %588 = load i32, ptr %9, align 4, !tbaa !26
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.WavpackStream, ptr %589, i32 0, i32 39
  %591 = getelementptr inbounds %struct.anon, ptr %590, i32 0, i32 8
  %592 = load i32, ptr %591, align 8, !tbaa !47
  %593 = sub nsw i32 %592, %588
  store i32 %593, ptr %591, align 8, !tbaa !47
  br label %594

594:                                              ; preds = %587, %554
  %595 = load ptr, ptr %10, align 8, !tbaa !5
  %596 = icmp ne ptr %595, null
  br i1 %596, label %597, label %781

597:                                              ; preds = %594
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %598 = load ptr, ptr %4, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.WavpackContext, ptr %598, i32 0, i32 20
  %600 = load i32, ptr %599, align 8, !tbaa !37
  %601 = icmp ne i32 %600, 0
  br i1 %601, label %602, label %615

602:                                              ; preds = %597
  %603 = load ptr, ptr %6, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.WavpackStream, ptr %603, i32 0, i32 4
  %605 = load ptr, ptr %604, align 8, !tbaa !48
  %606 = load ptr, ptr %6, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.WavpackStream, ptr %606, i32 0, i32 4
  %608 = load ptr, ptr %607, align 8, !tbaa !48
  %609 = getelementptr inbounds %struct.WavpackHeader, ptr %608, i32 0, i32 1
  %610 = load i16, ptr %609, align 4, !tbaa !49
  %611 = zext i16 %610 to i32
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds i8, ptr %605, i64 %612
  %614 = getelementptr inbounds i8, ptr %613, i64 6
  store ptr %614, ptr %23, align 8, !tbaa !5
  br label %628

615:                                              ; preds = %597
  %616 = load ptr, ptr %6, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.WavpackStream, ptr %616, i32 0, i32 2
  %618 = load ptr, ptr %617, align 8, !tbaa !50
  %619 = load ptr, ptr %6, align 8, !tbaa !5
  %620 = getelementptr inbounds %struct.WavpackStream, ptr %619, i32 0, i32 2
  %621 = load ptr, ptr %620, align 8, !tbaa !50
  %622 = getelementptr inbounds %struct.WavpackHeader, ptr %621, i32 0, i32 1
  %623 = load i16, ptr %622, align 4, !tbaa !49
  %624 = zext i16 %623 to i32
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds i8, ptr %618, i64 %625
  %627 = getelementptr inbounds i8, ptr %626, i64 6
  store ptr %627, ptr %23, align 8, !tbaa !5
  br label %628

628:                                              ; preds = %615, %602
  %629 = load ptr, ptr %6, align 8, !tbaa !5
  %630 = getelementptr inbounds %struct.WavpackStream, ptr %629, i32 0, i32 29
  %631 = load ptr, ptr %23, align 8, !tbaa !5
  %632 = getelementptr inbounds i8, ptr %631, i64 4
  %633 = load ptr, ptr %4, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.WavpackContext, ptr %633, i32 0, i32 20
  %635 = load i32, ptr %634, align 8, !tbaa !37
  %636 = icmp ne i32 %635, 0
  br i1 %636, label %637, label %641

637:                                              ; preds = %628
  %638 = load ptr, ptr %6, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.WavpackStream, ptr %638, i32 0, i32 5
  %640 = load ptr, ptr %639, align 8, !tbaa !51
  br label %645

641:                                              ; preds = %628
  %642 = load ptr, ptr %6, align 8, !tbaa !5
  %643 = getelementptr inbounds %struct.WavpackStream, ptr %642, i32 0, i32 3
  %644 = load ptr, ptr %643, align 8, !tbaa !52
  br label %645

645:                                              ; preds = %641, %637
  %646 = phi ptr [ %640, %637 ], [ %644, %641 ]
  call void @bs_open_write(ptr noundef %630, ptr noundef %632, ptr noundef %646)
  %647 = load i32, ptr %7, align 4, !tbaa !26
  %648 = and i32 %647, 128
  %649 = icmp ne i32 %648, 0
  br i1 %649, label %650, label %663

650:                                              ; preds = %645
  %651 = load ptr, ptr %6, align 8, !tbaa !5
  %652 = load ptr, ptr %10, align 8, !tbaa !5
  %653 = load i32, ptr %7, align 4, !tbaa !26
  %654 = and i32 %653, 1073741828
  %655 = icmp ne i32 %654, 0
  br i1 %655, label %656, label %658

656:                                              ; preds = %650
  %657 = load i32, ptr %9, align 4, !tbaa !26
  br label %661

658:                                              ; preds = %650
  %659 = load i32, ptr %9, align 4, !tbaa !26
  %660 = mul nsw i32 %659, 2
  br label %661

661:                                              ; preds = %658, %656
  %662 = phi i32 [ %657, %656 ], [ %660, %658 ]
  call void @send_float_data(ptr noundef %651, ptr noundef %652, i32 noundef %662)
  br label %676

663:                                              ; preds = %645
  %664 = load ptr, ptr %6, align 8, !tbaa !5
  %665 = load ptr, ptr %10, align 8, !tbaa !5
  %666 = load i32, ptr %7, align 4, !tbaa !26
  %667 = and i32 %666, 1073741828
  %668 = icmp ne i32 %667, 0
  br i1 %668, label %669, label %671

669:                                              ; preds = %663
  %670 = load i32, ptr %9, align 4, !tbaa !26
  br label %674

671:                                              ; preds = %663
  %672 = load i32, ptr %9, align 4, !tbaa !26
  %673 = mul nsw i32 %672, 2
  br label %674

674:                                              ; preds = %671, %669
  %675 = phi i32 [ %670, %669 ], [ %673, %671 ]
  call void @send_int32_data(ptr noundef %664, ptr noundef %665, i32 noundef %675)
  br label %676

676:                                              ; preds = %674, %661
  %677 = load ptr, ptr %6, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.WavpackStream, ptr %677, i32 0, i32 29
  %679 = call i32 @bs_close_write(ptr noundef %678)
  store i32 %679, ptr %22, align 4, !tbaa !26
  %680 = load ptr, ptr %10, align 8, !tbaa !5
  call void @free(ptr noundef %680) #6
  %681 = load i32, ptr %22, align 4, !tbaa !26
  %682 = icmp ne i32 %681, 0
  br i1 %682, label %683, label %777

683:                                              ; preds = %676
  %684 = load i32, ptr %22, align 4, !tbaa !26
  %685 = icmp ult i32 %684, 512
  br i1 %685, label %686, label %726

686:                                              ; preds = %683
  %687 = load ptr, ptr %23, align 8, !tbaa !5
  %688 = getelementptr inbounds i8, ptr %687, i32 1
  store ptr %688, ptr %23, align 8, !tbaa !5
  store i8 12, ptr %687, align 1, !tbaa !53
  %689 = load i32, ptr %22, align 4, !tbaa !26
  %690 = lshr i32 %689, 1
  %691 = trunc i32 %690 to i8
  %692 = load ptr, ptr %23, align 8, !tbaa !5
  %693 = getelementptr inbounds i8, ptr %692, i32 1
  store ptr %693, ptr %23, align 8, !tbaa !5
  store i8 %691, ptr %692, align 1, !tbaa !53
  %694 = load ptr, ptr %23, align 8, !tbaa !5
  %695 = load ptr, ptr %23, align 8, !tbaa !5
  %696 = getelementptr inbounds i8, ptr %695, i64 2
  %697 = load i32, ptr %22, align 4, !tbaa !26
  %698 = zext i32 %697 to i64
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %694, ptr align 1 %696, i64 %698, i1 false)
  %699 = load ptr, ptr %4, align 8, !tbaa !5
  %700 = getelementptr inbounds %struct.WavpackContext, ptr %699, i32 0, i32 20
  %701 = load i32, ptr %700, align 8, !tbaa !37
  %702 = icmp ne i32 %701, 0
  br i1 %702, label %703, label %714

703:                                              ; preds = %686
  %704 = load i32, ptr %22, align 4, !tbaa !26
  %705 = add i32 %704, 2
  %706 = load ptr, ptr %6, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.WavpackStream, ptr %706, i32 0, i32 4
  %708 = load ptr, ptr %707, align 8, !tbaa !48
  %709 = getelementptr inbounds %struct.WavpackHeader, ptr %708, i32 0, i32 1
  %710 = load i16, ptr %709, align 4, !tbaa !49
  %711 = zext i16 %710 to i32
  %712 = add i32 %711, %705
  %713 = trunc i32 %712 to i16
  store i16 %713, ptr %709, align 4, !tbaa !49
  br label %725

714:                                              ; preds = %686
  %715 = load i32, ptr %22, align 4, !tbaa !26
  %716 = add i32 %715, 2
  %717 = load ptr, ptr %6, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.WavpackStream, ptr %717, i32 0, i32 2
  %719 = load ptr, ptr %718, align 8, !tbaa !50
  %720 = getelementptr inbounds %struct.WavpackHeader, ptr %719, i32 0, i32 1
  %721 = load i16, ptr %720, align 4, !tbaa !49
  %722 = zext i16 %721 to i32
  %723 = add i32 %722, %716
  %724 = trunc i32 %723 to i16
  store i16 %724, ptr %720, align 4, !tbaa !49
  br label %725

725:                                              ; preds = %714, %703
  br label %776

726:                                              ; preds = %683
  %727 = load i32, ptr %22, align 4, !tbaa !26
  %728 = icmp ne i32 %727, -1
  br i1 %728, label %729, label %774

729:                                              ; preds = %726
  %730 = load ptr, ptr %23, align 8, !tbaa !5
  %731 = getelementptr inbounds i8, ptr %730, i32 1
  store ptr %731, ptr %23, align 8, !tbaa !5
  store i8 -116, ptr %730, align 1, !tbaa !53
  %732 = load i32, ptr %22, align 4, !tbaa !26
  %733 = lshr i32 %732, 1
  %734 = trunc i32 %733 to i8
  %735 = load ptr, ptr %23, align 8, !tbaa !5
  %736 = getelementptr inbounds i8, ptr %735, i32 1
  store ptr %736, ptr %23, align 8, !tbaa !5
  store i8 %734, ptr %735, align 1, !tbaa !53
  %737 = load i32, ptr %22, align 4, !tbaa !26
  %738 = lshr i32 %737, 9
  %739 = trunc i32 %738 to i8
  %740 = load ptr, ptr %23, align 8, !tbaa !5
  %741 = getelementptr inbounds i8, ptr %740, i32 1
  store ptr %741, ptr %23, align 8, !tbaa !5
  store i8 %739, ptr %740, align 1, !tbaa !53
  %742 = load i32, ptr %22, align 4, !tbaa !26
  %743 = lshr i32 %742, 17
  %744 = trunc i32 %743 to i8
  %745 = load ptr, ptr %23, align 8, !tbaa !5
  %746 = getelementptr inbounds i8, ptr %745, i32 1
  store ptr %746, ptr %23, align 8, !tbaa !5
  store i8 %744, ptr %745, align 1, !tbaa !53
  %747 = load ptr, ptr %4, align 8, !tbaa !5
  %748 = getelementptr inbounds %struct.WavpackContext, ptr %747, i32 0, i32 20
  %749 = load i32, ptr %748, align 8, !tbaa !37
  %750 = icmp ne i32 %749, 0
  br i1 %750, label %751, label %762

751:                                              ; preds = %729
  %752 = load i32, ptr %22, align 4, !tbaa !26
  %753 = add i32 %752, 4
  %754 = load ptr, ptr %6, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.WavpackStream, ptr %754, i32 0, i32 4
  %756 = load ptr, ptr %755, align 8, !tbaa !48
  %757 = getelementptr inbounds %struct.WavpackHeader, ptr %756, i32 0, i32 1
  %758 = load i16, ptr %757, align 4, !tbaa !49
  %759 = zext i16 %758 to i32
  %760 = add i32 %759, %753
  %761 = trunc i32 %760 to i16
  store i16 %761, ptr %757, align 4, !tbaa !49
  br label %773

762:                                              ; preds = %729
  %763 = load i32, ptr %22, align 4, !tbaa !26
  %764 = add i32 %763, 4
  %765 = load ptr, ptr %6, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.WavpackStream, ptr %765, i32 0, i32 2
  %767 = load ptr, ptr %766, align 8, !tbaa !50
  %768 = getelementptr inbounds %struct.WavpackHeader, ptr %767, i32 0, i32 1
  %769 = load i16, ptr %768, align 4, !tbaa !49
  %770 = zext i16 %769 to i32
  %771 = add i32 %770, %764
  %772 = trunc i32 %771 to i16
  store i16 %772, ptr %768, align 4, !tbaa !49
  br label %773

773:                                              ; preds = %762, %751
  br label %775

774:                                              ; preds = %726
  store i32 0, ptr %3, align 4
  store i32 1, ptr %21, align 4
  br label %778

775:                                              ; preds = %773
  br label %776

776:                                              ; preds = %775, %725
  br label %777

777:                                              ; preds = %776, %676
  store i32 0, ptr %21, align 4
  br label %778

778:                                              ; preds = %777, %774
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  %779 = load i32, ptr %21, align 4
  switch i32 %779, label %782 [
    i32 0, label %780
  ]

780:                                              ; preds = %778
  br label %781

781:                                              ; preds = %780, %594
  store i32 1, ptr %3, align 4
  store i32 1, ptr %21, align 4
  br label %782

782:                                              ; preds = %781, %778, %534
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  %783 = load i32, ptr %3, align 4
  ret i32 %783
}

declare void @dynamic_noise_shaping(ptr noundef, ptr noundef, i32 noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare i32 @scan_float_data(ptr noundef, ptr noundef, i32 noundef) #2

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

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

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

declare void @execute_mono(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

declare void @execute_stereo(ptr noundef, ptr noundef, i32 noundef, i32 noundef) #2

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #4

; Function Attrs: nounwind uwtable
declare hidden void @bs_open_write(ptr noundef, ptr noundef, ptr noundef) #3

declare void @send_float_data(ptr noundef, ptr noundef, i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare hidden i32 @bs_close_write(ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 288}
!10 = !{!"WavpackContext", !11, i64 0, !6, i64 88, !13, i64 96, !13, i64 100, !6, i64 104, !13, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !13, i64 216, !13, i64 220, !13, i64 224, !13, i64 228, !13, i64 232, !13, i64 236, !13, i64 240, !13, i64 244, !13, i64 248, !13, i64 252, !13, i64 256, !13, i64 260, !13, i64 264, !13, i64 268, !13, i64 272, !13, i64 276, !13, i64 280, !13, i64 284, !6, i64 288, !6, i64 296, !7, i64 304, !6, i64 312, !6, i64 320, !13, i64 328, !13, i64 332, !6, i64 336, !7, i64 344, !6, i64 352, !7, i64 360}
!11 = !{!"", !12, i64 0, !12, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !7, i64 56, !7, i64 72, !13, i64 76, !6, i64 80}
!12 = !{!"float", !7, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!10, !13, i64 276}
!16 = !{!17, !13, i64 8}
!17 = !{!"", !18, i64 0, !20, i64 12, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !14, i64 128, !14, 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, !21, i64 200, !21, i64 248, !21, i64 296, !12, 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, !22, i64 360, !7, i64 432, !24, i64 1968, !6, i64 2064, !25, i64 2072}
!18 = !{!"", !7, i64 0, !19, i64 4, !19, i64 6, !13, i64 8}
!19 = !{!"short", !7, i64 0}
!20 = !{!"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}
!21 = !{!"bs", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 36, !13, i64 40}
!22 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !23, i64 24, !23, i64 32, !23, i64 40, !6, i64 48, !6, i64 56, !13, i64 64}
!23 = !{!"double", !7, i64 0}
!24 = !{!"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}
!25 = !{!"", !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}
!26 = !{!13, !13, i64 0}
!27 = !{!17, !19, i64 6}
!28 = !{!10, !13, i64 20}
!29 = !{!10, !13, i64 36}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = !{!17, !7, i64 158}
!34 = !{!17, !13, i64 148}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = !{!10, !13, i64 224}
!38 = !{!10, !13, i64 32}
!39 = !{!17, !7, i64 355}
!40 = !{!10, !13, i64 240}
!41 = !{!17, !13, i64 152}
!42 = !{!17, !7, i64 349}
!43 = !{!17, !7, i64 350}
!44 = !{!17, !7, i64 351}
!45 = !{!17, !13, i64 168}
!46 = !{!17, !6, i64 408}
!47 = !{!17, !13, i64 424}
!48 = !{!17, !6, i64 104}
!49 = !{!18, !19, i64 4}
!50 = !{!17, !6, i64 88}
!51 = !{!17, !6, i64 112}
!52 = !{!17, !6, i64 96}
!53 = !{!7, !7, i64 0}


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

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

declare void @init_words(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @pack_block(ptr noundef %0, ptr noundef %1) local_unnamed_addr #2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 288
  %4 = load ptr, ptr %3, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 276
  %6 = load i32, ptr %5, align 4, !tbaa !14
  %7 = sext i32 %6 to i64
  %8 = getelementptr inbounds ptr, ptr %4, i64 %7
  %9 = load ptr, ptr %8, align 8, !tbaa !15
  %10 = getelementptr inbounds i8, ptr %9, i64 8
  %11 = load i32, ptr %10, align 8, !tbaa !16
  %12 = getelementptr inbounds i8, ptr %9, i64 6
  %13 = load i16, ptr %12, align 2, !tbaa !26
  %14 = zext i16 %13 to i32
  %.not = icmp ne i32 %6, 0
  %15 = and i32 %11, 128
  %.not259 = icmp ne i32 %15, 0
  %16 = and i32 %11, 6291456
  %.not260 = icmp eq i32 %16, 6291456
  %17 = or i1 %.not259, %.not260
  %or.cond306 = select i1 %.not, i1 true, i1 %17
  br i1 %or.cond306, label %28, label %18

18:                                               ; preds = %2
  %19 = getelementptr inbounds i8, ptr %0, i64 20
  %20 = load i32, ptr %19, align 4, !tbaa !27
  %21 = and i32 %20, 131072
  %.not261 = icmp eq i32 %21, 0
  br i1 %.not261, label %28, label %22

22:                                               ; preds = %18
  %23 = getelementptr inbounds i8, ptr %0, i64 36
  %24 = load i32, ptr %23, align 4, !tbaa !28
  %.not262 = icmp eq i32 %24, 0
  br i1 %.not262, label %25, label %28

25:                                               ; preds = %22
  tail call void @dynamic_noise_shaping(ptr noundef nonnull %0, ptr noundef %1, i32 noundef 1) #5
  %26 = load i16, ptr %12, align 2, !tbaa !26
  %.not263 = icmp eq i16 %13, %26
  %27 = zext i16 %26 to i32
  %spec.select = select i1 %.not263, i32 %14, i32 %27
  br label %28

28:                                               ; preds = %18, %22, %25, %2
  %.1247 = phi i32 [ %14, %2 ], [ %14, %22 ], [ %spec.select, %25 ], [ %14, %18 ]
  %29 = phi i1 [ false, %2 ], [ false, %22 ], [ true, %25 ], [ false, %18 ]
  %30 = and i32 %11, 4
  %.not264 = icmp eq i32 %30, 0
  br i1 %.not264, label %.preheader317, label %66

.preheader317:                                    ; preds = %28
  %.not364 = icmp eq i32 %.1247, 0
  br i1 %.not364, label %.thread, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader317, %40
  %.0234324 = phi i32 [ %42, %40 ], [ 0, %.preheader317 ]
  %.0237323 = phi ptr [ %41, %40 ], [ %1, %.preheader317 ]
  %.0239322 = phi i32 [ %37, %40 ], [ 0, %.preheader317 ]
  %.0241321 = phi i32 [ %35, %40 ], [ 0, %.preheader317 ]
  %31 = load i32, ptr %.0237323, align 4, !tbaa !29
  %32 = getelementptr inbounds i8, ptr %.0237323, i64 4
  %33 = load i32, ptr %32, align 4, !tbaa !29
  %34 = or i32 %31, %.0241321
  %35 = or i32 %34, %33
  %36 = xor i32 %33, %31
  %37 = or i32 %36, %.0239322
  %38 = icmp ne i32 %35, 0
  %39 = icmp ne i32 %37, 0
  %or.cond = select i1 %38, i1 %39, i1 false
  br i1 %or.cond, label %.thread, label %40

40:                                               ; preds = %.lr.ph
  %41 = getelementptr inbounds i8, ptr %.0237323, i64 8
  %42 = add nuw nsw i32 %.0234324, 1
  %exitcond.not = icmp eq i32 %42, %.1247
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %40
  %43 = icmp eq i32 %35, 0
  %44 = icmp ne i32 %37, 0
  %or.cond5 = select i1 %43, i1 true, i1 %44
  br i1 %or.cond5, label %.thread, label %.lr.ph332.preheader

.lr.ph332.preheader:                              ; preds = %._crit_edge
  %45 = and i32 %11, -1073742901
  %46 = or disjoint i32 %45, 1073741824
  store i32 %46, ptr %10, align 8, !tbaa !16
  %min.iters.check = icmp ult i32 %.1247, 9
  br i1 %min.iters.check, label %.lr.ph332.preheader422, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph332.preheader
  %47 = zext nneg i32 %.1247 to i64
  %n.mod.vf = and i64 %47, 7
  %48 = icmp eq i64 %n.mod.vf, 0
  %49 = select i1 %48, i64 8, i64 %n.mod.vf
  %n.vec = sub nsw i64 %47, %49
  %.cast = trunc i64 %n.vec to i32
  %ind.end = sub i32 %.1247, %.cast
  %50 = shl nsw i64 %n.vec, 2
  %ind.end369 = getelementptr i8, ptr %1, i64 %50
  %51 = shl nsw i64 %n.vec, 3
  %ind.end371 = getelementptr i8, ptr %1, i64 %51
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = shl i64 %index, 2
  %next.gep = getelementptr i8, ptr %1, i64 %offset.idx
  %offset.idx374 = shl i64 %index, 3
  %52 = or disjoint i64 %offset.idx374, 32
  %next.gep375 = getelementptr i8, ptr %1, i64 %offset.idx374
  %next.gep376 = getelementptr i8, ptr %1, i64 %52
  %wide.vec = load <8 x i32>, ptr %next.gep375, align 4, !tbaa !29
  %wide.vec377 = load <8 x i32>, ptr %next.gep376, align 4, !tbaa !29
  %strided.vec = shufflevector <8 x i32> %wide.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %strided.vec378 = shufflevector <8 x i32> %wide.vec377, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
  %53 = getelementptr i8, ptr %next.gep, i64 16
  store <4 x i32> %strided.vec, ptr %next.gep, align 4, !tbaa !29
  store <4 x i32> %strided.vec378, ptr %53, align 4, !tbaa !29
  %index.next = add nuw i64 %index, 8
  %54 = icmp eq i64 %index.next, %n.vec
  br i1 %54, label %.lr.ph332.preheader422, label %vector.body, !llvm.loop !32

.lr.ph332.preheader422:                           ; preds = %vector.body, %.lr.ph332.preheader
  %.1235330.ph = phi i32 [ %.1247, %.lr.ph332.preheader ], [ %ind.end, %vector.body ]
  %.0236329.ph = phi ptr [ %1, %.lr.ph332.preheader ], [ %ind.end369, %vector.body ]
  %.1238328.ph = phi ptr [ %1, %.lr.ph332.preheader ], [ %ind.end371, %vector.body ]
  br label %.lr.ph332

.lr.ph332:                                        ; preds = %.lr.ph332.preheader422, %.lr.ph332
  %.1235330 = phi i32 [ %55, %.lr.ph332 ], [ %.1235330.ph, %.lr.ph332.preheader422 ]
  %.0236329 = phi ptr [ %57, %.lr.ph332 ], [ %.0236329.ph, %.lr.ph332.preheader422 ]
  %.1238328 = phi ptr [ %58, %.lr.ph332 ], [ %.1238328.ph, %.lr.ph332.preheader422 ]
  %55 = add nsw i32 %.1235330, -1
  %56 = load i32, ptr %.1238328, align 4, !tbaa !29
  %57 = getelementptr inbounds i8, ptr %.0236329, i64 4
  store i32 %56, ptr %.0236329, align 4, !tbaa !29
  %58 = getelementptr inbounds i8, ptr %.1238328, i64 8
  %.not268 = icmp eq i32 %55, 0
  br i1 %.not268, label %._crit_edge333, label %.lr.ph332, !llvm.loop !35

._crit_edge333:                                   ; preds = %.lr.ph332
  %59 = getelementptr inbounds i8, ptr %9, i64 158
  %60 = load i8, ptr %59, align 2, !tbaa !36
  %.not269 = icmp eq i8 %60, 0
  br i1 %.not269, label %61, label %66

61:                                               ; preds = %._crit_edge333
  store i8 1, ptr %59, align 2, !tbaa !36
  br label %.sink.split

.thread:                                          ; preds = %.lr.ph, %.preheader317, %._crit_edge
  %62 = getelementptr inbounds i8, ptr %9, i64 158
  %63 = load i8, ptr %62, align 2, !tbaa !36
  %.not270 = icmp eq i8 %63, 0
  br i1 %.not270, label %66, label %64

64:                                               ; preds = %.thread
  store i8 0, ptr %62, align 2, !tbaa !36
  br label %.sink.split

.sink.split:                                      ; preds = %64, %61
  %.1233.ph = phi i32 [ %46, %61 ], [ %11, %64 ]
  %65 = getelementptr inbounds i8, ptr %9, i64 148
  store i32 0, ptr %65, align 4, !tbaa !37
  tail call void @init_words(ptr noundef nonnull %9) #5
  br label %66

66:                                               ; preds = %.sink.split, %._crit_edge333, %.thread, %28
  %.1233 = phi i32 [ %11, %28 ], [ %11, %.thread ], [ %46, %._crit_edge333 ], [ %.1233.ph, %.sink.split ]
  %67 = and i32 %.1233, 253952
  %.not271 = icmp eq i32 %67, 0
  br i1 %.not271, label %99, label %68

68:                                               ; preds = %66
  %69 = lshr exact i32 %67, 13
  %70 = lshr i32 %.1233, 18
  %71 = and i32 %70, 31
  %72 = and i32 %.1233, 1073741828
  %.not272 = icmp eq i32 %72, 0
  %.not273338 = icmp eq i32 %.1247, 0
  br i1 %.not272, label %.preheader, label %.preheader315

.preheader315:                                    ; preds = %68
  br i1 %.not273338, label %.loopexit, label %.lr.ph337.preheader

.lr.ph337.preheader:                              ; preds = %.preheader315
  %73 = zext nneg i32 %.1247 to i64
  %min.iters.check381 = icmp ult i32 %.1247, 8
  br i1 %min.iters.check381, label %.lr.ph337.preheader420, label %vector.ph382

.lr.ph337.preheader420:                           ; preds = %middle.block379, %.lr.ph337.preheader
  %.0228336.ph = phi ptr [ %1, %.lr.ph337.preheader ], [ %ind.end385, %middle.block379 ]
  %.0230335.ph = phi i32 [ %.1247, %.lr.ph337.preheader ], [ %ind.end388, %middle.block379 ]
  br label %.lr.ph337

vector.ph382:                                     ; preds = %.lr.ph337.preheader
  %n.vec384 = and i64 %73, 2147483640
  %74 = shl nuw nsw i64 %n.vec384, 2
  %ind.end385 = getelementptr i8, ptr %1, i64 %74
  %.cast387 = trunc nuw nsw i64 %n.vec384 to i32
  %ind.end388 = sub i32 %.1247, %.cast387
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %69, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body390

vector.body390:                                   ; preds = %vector.body390, %vector.ph382
  %index391 = phi i64 [ 0, %vector.ph382 ], [ %index.next396, %vector.body390 ]
  %offset.idx392 = shl i64 %index391, 2
  %next.gep393 = getelementptr i8, ptr %1, i64 %offset.idx392
  %75 = getelementptr i8, ptr %next.gep393, i64 16
  %wide.load = load <4 x i32>, ptr %next.gep393, align 4, !tbaa !29
  %wide.load395 = load <4 x i32>, ptr %75, align 4, !tbaa !29
  %76 = ashr <4 x i32> %wide.load, %broadcast.splat
  %77 = ashr <4 x i32> %wide.load395, %broadcast.splat
  store <4 x i32> %76, ptr %next.gep393, align 4, !tbaa !29
  store <4 x i32> %77, ptr %75, align 4, !tbaa !29
  %index.next396 = add nuw i64 %index391, 8
  %78 = icmp eq i64 %index.next396, %n.vec384
  br i1 %78, label %middle.block379, label %vector.body390, !llvm.loop !38

middle.block379:                                  ; preds = %vector.body390
  %cmp.n = icmp eq i64 %n.vec384, %73
  br i1 %cmp.n, label %.loopexit, label %.lr.ph337.preheader420

.preheader:                                       ; preds = %68
  br i1 %.not273338, label %.loopexit, label %.lr.ph341.preheader

.lr.ph341.preheader:                              ; preds = %.preheader
  %79 = zext nneg i32 %.1247 to i64
  %min.iters.check399 = icmp eq i32 %.1247, 1
  br i1 %min.iters.check399, label %.lr.ph341.preheader419, label %vector.ph400

.lr.ph341.preheader419:                           ; preds = %middle.block397, %.lr.ph341.preheader
  %.1229340.ph = phi ptr [ %1, %.lr.ph341.preheader ], [ %ind.end403, %middle.block397 ]
  %.1231339.ph = phi i32 [ %.1247, %.lr.ph341.preheader ], [ %ind.end406, %middle.block397 ]
  br label %.lr.ph341

vector.ph400:                                     ; preds = %.lr.ph341.preheader
  %n.vec402 = and i64 %79, 2147483646
  %80 = shl nuw nsw i64 %n.vec402, 3
  %ind.end403 = getelementptr i8, ptr %1, i64 %80
  %.cast405 = trunc nuw nsw i64 %n.vec402 to i32
  %ind.end406 = sub i32 %.1247, %.cast405
  %broadcast.splatinsert415 = insertelement <2 x i32> poison, i32 %69, i64 0
  %81 = shufflevector <2 x i32> %broadcast.splatinsert415, <2 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body408

vector.body408:                                   ; preds = %vector.body408, %vector.ph400
  %index409 = phi i64 [ 0, %vector.ph400 ], [ %index.next417, %vector.body408 ]
  %offset.idx410 = shl i64 %index409, 3
  %next.gep411 = getelementptr i8, ptr %1, i64 %offset.idx410
  %82 = load <4 x i32>, ptr %next.gep411, align 4, !tbaa !29
  %interleaved.vec = ashr <4 x i32> %82, %81
  store <4 x i32> %interleaved.vec, ptr %next.gep411, align 4, !tbaa !29
  %index.next417 = add nuw i64 %index409, 2
  %83 = icmp eq i64 %index.next417, %n.vec402
  br i1 %83, label %middle.block397, label %vector.body408, !llvm.loop !39

middle.block397:                                  ; preds = %vector.body408
  %cmp.n418 = icmp eq i64 %n.vec402, %79
  br i1 %cmp.n418, label %.loopexit, label %.lr.ph341.preheader419

.lr.ph337:                                        ; preds = %.lr.ph337.preheader420, %.lr.ph337
  %.0228336 = phi ptr [ %85, %.lr.ph337 ], [ %.0228336.ph, %.lr.ph337.preheader420 ]
  %.0230335 = phi i32 [ %84, %.lr.ph337 ], [ %.0230335.ph, %.lr.ph337.preheader420 ]
  %84 = add nsw i32 %.0230335, -1
  %85 = getelementptr inbounds i8, ptr %.0228336, i64 4
  %86 = load i32, ptr %.0228336, align 4, !tbaa !29
  %87 = ashr i32 %86, %69
  store i32 %87, ptr %.0228336, align 4, !tbaa !29
  %.not274 = icmp eq i32 %84, 0
  br i1 %.not274, label %.loopexit, label %.lr.ph337, !llvm.loop !40

.lr.ph341:                                        ; preds = %.lr.ph341.preheader419, %.lr.ph341
  %.1229340 = phi ptr [ %92, %.lr.ph341 ], [ %.1229340.ph, %.lr.ph341.preheader419 ]
  %.1231339 = phi i32 [ %88, %.lr.ph341 ], [ %.1231339.ph, %.lr.ph341.preheader419 ]
  %88 = add nsw i32 %.1231339, -1
  %89 = getelementptr inbounds i8, ptr %.1229340, i64 4
  %90 = load i32, ptr %.1229340, align 4, !tbaa !29
  %91 = ashr i32 %90, %69
  store i32 %91, ptr %.1229340, align 4, !tbaa !29
  %92 = getelementptr inbounds i8, ptr %.1229340, i64 8
  %93 = load i32, ptr %89, align 4, !tbaa !29
  %94 = ashr i32 %93, %69
  store i32 %94, ptr %89, align 4, !tbaa !29
  %.not273 = icmp eq i32 %88, 0
  br i1 %.not273, label %.loopexit, label %.lr.ph341, !llvm.loop !41

.loopexit:                                        ; preds = %.lr.ph337, %.lr.ph341, %middle.block379, %middle.block397, %.preheader315, %.preheader
  %95 = icmp ult i32 %71, %69
  %96 = and i32 %.1233, -8126465
  %97 = shl nuw nsw i32 %67, 5
  %98 = sub i32 %.1233, %97
  %.2 = select i1 %95, i32 %96, i32 %98
  store i32 %.2, ptr %10, align 8, !tbaa !16
  br label %99

99:                                               ; preds = %.loopexit, %66
  %.3 = phi i32 [ %.2, %.loopexit ], [ %.1233, %66 ]
  %100 = and i32 %.3, 128
  %.not275 = icmp ne i32 %100, 0
  %101 = and i32 %.3, 6291456
  %102 = icmp eq i32 %101, 6291456
  %or.cond308 = or i1 %.not275, %102
  br i1 %or.cond308, label %103, label %148

103:                                              ; preds = %99
  %104 = and i32 %.3, 8
  %.not278 = icmp eq i32 %104, 0
  br i1 %.not278, label %108, label %105

105:                                              ; preds = %103
  %106 = getelementptr inbounds i8, ptr %0, i64 224
  %107 = load i32, ptr %106, align 8, !tbaa !42
  %.not279 = icmp eq i32 %107, 0
  br i1 %.not279, label %129, label %108

108:                                              ; preds = %105, %103
  %109 = getelementptr inbounds i8, ptr %0, i64 20
  %110 = load i32, ptr %109, align 4, !tbaa !27
  %111 = and i32 %110, 67108864
  %.not280 = icmp eq i32 %111, 0
  br i1 %.not280, label %112, label %129

112:                                              ; preds = %108
  %113 = and i32 %.3, 1073741828
  %.not281 = icmp eq i32 %113, 0
  %114 = zext i1 %.not281 to i32
  %115 = shl nuw nsw i32 %.1247, %114
  %116 = zext nneg i32 %115 to i64
  %117 = shl nuw nsw i64 %116, 2
  %118 = tail call noalias ptr @malloc(i64 noundef %117) #6
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %118, ptr align 4 %1, i64 %117, i1 false)
  br i1 %.not275, label %119, label %126

119:                                              ; preds = %112
  %120 = getelementptr inbounds i8, ptr %0, i64 32
  %121 = load i32, ptr %120, align 8, !tbaa !43
  %122 = trunc i32 %121 to i8
  %123 = getelementptr inbounds i8, ptr %9, i64 355
  store i8 %122, ptr %123, align 1, !tbaa !44
  %124 = tail call i32 @scan_float_data(ptr noundef nonnull %9, ptr noundef %1, i32 noundef %115) #5
  %.not283 = icmp eq i32 %124, 0
  br i1 %.not283, label %125, label %.sink.split356

125:                                              ; preds = %119
  tail call void @free(ptr noundef %118) #5
  br label %.sink.split356

126:                                              ; preds = %112
  %127 = tail call i32 @scan_int32_data(ptr noundef nonnull %9, ptr noundef %1, i32 noundef %115)
  %.not282 = icmp eq i32 %127, 0
  br i1 %.not282, label %128, label %.sink.split356

128:                                              ; preds = %126
  tail call void @free(ptr noundef %118) #5
  br label %.sink.split356

129:                                              ; preds = %108, %105
  br i1 %.not275, label %130, label %141

130:                                              ; preds = %129
  %131 = getelementptr inbounds i8, ptr %0, i64 32
  %132 = load i32, ptr %131, align 8, !tbaa !43
  %133 = trunc i32 %132 to i8
  %134 = getelementptr inbounds i8, ptr %9, i64 355
  store i8 %133, ptr %134, align 1, !tbaa !44
  %135 = and i32 %.3, 1073741828
  %.not286 = icmp eq i32 %135, 0
  %136 = zext i1 %.not286 to i32
  %137 = shl nuw nsw i32 %.1247, %136
  %138 = tail call i32 @scan_float_data(ptr noundef nonnull %9, ptr noundef %1, i32 noundef %137) #5
  %.not287 = icmp eq i32 %138, 0
  br i1 %.not287, label %.sink.split356, label %139

139:                                              ; preds = %130
  %140 = getelementptr inbounds i8, ptr %0, i64 240
  store i32 1, ptr %140, align 8, !tbaa !45
  br label %.sink.split356

141:                                              ; preds = %129
  %142 = and i32 %.3, 1073741828
  %.not284 = icmp eq i32 %142, 0
  %143 = zext i1 %.not284 to i32
  %144 = shl nuw nsw i32 %.1247, %143
  %145 = tail call i32 @scan_int32_data(ptr noundef nonnull %9, ptr noundef %1, i32 noundef %144)
  %.not285 = icmp eq i32 %145, 0
  br i1 %.not285, label %.sink.split356, label %146

146:                                              ; preds = %141
  %147 = getelementptr inbounds i8, ptr %0, i64 240
  store i32 1, ptr %147, align 8, !tbaa !45
  br label %.sink.split356

148:                                              ; preds = %99
  %149 = and i32 %.3, 1073741828
  %.not276 = icmp eq i32 %149, 0
  %150 = zext i1 %.not276 to i32
  %151 = shl nuw nsw i32 %.1247, %150
  tail call void @scan_int32_quick(ptr noundef nonnull %9, ptr noundef %1, i32 noundef %151)
  %152 = getelementptr inbounds i8, ptr %9, i64 152
  %153 = load i32, ptr %152, align 8, !tbaa !46
  %154 = getelementptr inbounds i8, ptr %9, i64 349
  %155 = load i8, ptr %154, align 1, !tbaa !47
  %156 = zext i8 %155 to i32
  %157 = getelementptr inbounds i8, ptr %9, i64 350
  %158 = load i8, ptr %157, align 2, !tbaa !48
  %159 = zext i8 %158 to i32
  %160 = add nuw nsw i32 %159, %156
  %161 = getelementptr inbounds i8, ptr %9, i64 351
  %162 = load i8, ptr %161, align 1, !tbaa !49
  %163 = zext i8 %162 to i32
  %164 = add nuw nsw i32 %160, %163
  %.not277 = icmp eq i32 %153, %164
  br i1 %.not277, label %169, label %165

165:                                              ; preds = %148
  store i32 %164, ptr %152, align 8, !tbaa !46
  br label %.sink.split356

.sink.split356:                                   ; preds = %126, %128, %119, %125, %141, %146, %130, %139, %165
  %.1245.ph = phi ptr [ null, %165 ], [ null, %139 ], [ null, %130 ], [ null, %146 ], [ null, %141 ], [ %118, %119 ], [ null, %125 ], [ %118, %126 ], [ null, %128 ]
  %166 = getelementptr inbounds i8, ptr %9, i64 376
  %167 = getelementptr inbounds i8, ptr %9, i64 380
  store i32 0, ptr %167, align 4, !tbaa !29
  store i32 0, ptr %166, align 8, !tbaa !29
  %168 = getelementptr inbounds i8, ptr %9, i64 148
  store i32 0, ptr %168, align 4, !tbaa !37
  br label %169

169:                                              ; preds = %.sink.split356, %148
  %.1245 = phi ptr [ null, %148 ], [ %.1245.ph, %.sink.split356 ]
  %170 = getelementptr inbounds i8, ptr %0, i64 20
  %171 = load i32, ptr %170, align 4, !tbaa !27
  %172 = and i32 %171, 131072
  %173 = icmp eq i32 %172, 0
  %or.cond7 = or i1 %29, %173
  br i1 %or.cond7, label %175, label %174

174:                                              ; preds = %169
  tail call void @dynamic_noise_shaping(ptr noundef nonnull %0, ptr noundef %1, i32 noundef 0) #5
  br label %175

175:                                              ; preds = %174, %169
  %176 = getelementptr inbounds i8, ptr %9, i64 168
  %177 = load i32, ptr %176, align 8, !tbaa !50
  %.not288 = icmp eq i32 %177, 0
  br i1 %.not288, label %178, label %186

178:                                              ; preds = %175
  %179 = getelementptr inbounds i8, ptr %9, i64 148
  %180 = load i32, ptr %179, align 4, !tbaa !37
  %.not289 = icmp eq i32 %180, 0
  br i1 %.not289, label %181, label %186

181:                                              ; preds = %178
  store i32 1, ptr %176, align 8, !tbaa !50
  %182 = and i32 %.3, 1073741828
  %.not290 = icmp eq i32 %182, 0
  br i1 %.not290, label %184, label %183

183:                                              ; preds = %181
  tail call void @execute_mono(ptr noundef nonnull %0, ptr noundef %1, i32 noundef 1, i32 noundef 0) #5
  br label %185

184:                                              ; preds = %181
  tail call void @execute_stereo(ptr noundef nonnull %0, ptr noundef %1, i32 noundef 1, i32 noundef 0) #5
  br label %185

185:                                              ; preds = %184, %183
  store i32 0, ptr %176, align 8, !tbaa !50
  br label %186

186:                                              ; preds = %185, %178, %175
  %187 = tail call i32 @pack_samples(ptr noundef nonnull %0, ptr noundef %1)
  %.not291 = icmp eq i32 %187, 0
  store i32 %11, ptr %10, align 8, !tbaa !16
  br i1 %.not291, label %188, label %190

188:                                              ; preds = %186
  %.not292 = icmp eq ptr %.1245, null
  br i1 %.not292, label %.critedge, label %189

189:                                              ; preds = %188
  tail call void @free(ptr noundef nonnull %.1245) #5
  br label %.critedge

190:                                              ; preds = %186
  %191 = load i16, ptr %12, align 2, !tbaa !26
  %192 = zext i16 %191 to i32
  %193 = getelementptr inbounds i8, ptr %9, i64 408
  %194 = load ptr, ptr %193, align 8, !tbaa !51
  %.not294 = icmp eq ptr %194, null
  br i1 %.not294, label %207, label %195

195:                                              ; preds = %190
  %196 = getelementptr inbounds i8, ptr %9, i64 424
  %197 = load i32, ptr %196, align 8, !tbaa !52
  %.not295 = icmp eq i32 %197, %192
  br i1 %.not295, label %204, label %198

198:                                              ; preds = %195
  %199 = zext i16 %191 to i64
  %200 = getelementptr inbounds i16, ptr %194, i64 %199
  %201 = sub nsw i32 %197, %192
  %202 = sext i32 %201 to i64
  %203 = shl nsw i64 %202, 1
  tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 2 %194, ptr nonnull align 2 %200, i64 %203, i1 false)
  %.pre = load i32, ptr %196, align 8, !tbaa !52
  br label %204

204:                                              ; preds = %198, %195
  %205 = phi i32 [ %.pre, %198 ], [ %192, %195 ]
  %206 = sub nsw i32 %205, %192
  store i32 %206, ptr %196, align 8, !tbaa !52
  br label %207

207:                                              ; preds = %204, %190
  %.not296 = icmp eq ptr %.1245, null
  br i1 %.not296, label %.critedge, label %208

208:                                              ; preds = %207
  %209 = getelementptr inbounds i8, ptr %0, i64 224
  %210 = load i32, ptr %209, align 8, !tbaa !42
  %.not297 = icmp eq i32 %210, 0
  %. = select i1 %.not297, i64 88, i64 104
  %.363 = select i1 %.not297, i64 96, i64 112
  %211 = getelementptr inbounds i8, ptr %9, i64 %.
  %212 = load ptr, ptr %211, align 8, !tbaa !15
  %213 = getelementptr inbounds i8, ptr %212, i64 4
  %214 = load i16, ptr %213, align 4, !tbaa !53
  %215 = zext i16 %214 to i64
  %216 = getelementptr inbounds i8, ptr %212, i64 %215
  %.0 = getelementptr inbounds i8, ptr %216, i64 6
  %217 = getelementptr inbounds i8, ptr %9, i64 296
  %218 = getelementptr inbounds i8, ptr %216, i64 10
  %.in = getelementptr inbounds i8, ptr %9, i64 %.363
  %219 = load ptr, ptr %.in, align 8, !tbaa !15
  tail call void @bs_open_write(ptr noundef nonnull %217, ptr noundef nonnull %218, ptr noundef %219)
  %220 = and i32 %.3, 1073741828
  %.not300 = icmp eq i32 %220, 0
  %221 = zext i1 %.not300 to i32
  %222 = shl nuw nsw i32 %192, %221
  br i1 %.not275, label %223, label %224

223:                                              ; preds = %208
  tail call void @send_float_data(ptr noundef nonnull %9, ptr noundef nonnull %.1245, i32 noundef %222) #5
  br label %225

224:                                              ; preds = %208
  tail call void @send_int32_data(ptr noundef nonnull %9, ptr noundef nonnull %.1245, i32 noundef %222)
  br label %225

225:                                              ; preds = %224, %223
  %226 = tail call i32 @bs_close_write(ptr noundef nonnull %217)
  tail call void @free(ptr noundef nonnull %.1245) #5
  %.not301 = icmp eq i32 %226, 0
  br i1 %.not301, label %.critedge, label %227

227:                                              ; preds = %225
  %228 = icmp ult i32 %226, 512
  br i1 %228, label %229, label %250

229:                                              ; preds = %227
  %230 = getelementptr inbounds i8, ptr %216, i64 7
  store i8 12, ptr %.0, align 1, !tbaa !54
  %231 = lshr i32 %226, 1
  %232 = trunc nuw i32 %231 to i8
  %233 = getelementptr inbounds i8, ptr %216, i64 8
  store i8 %232, ptr %230, align 1, !tbaa !54
  %234 = zext nneg i32 %226 to i64
  tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 1 %233, ptr nonnull align 1 %218, i64 %234, i1 false)
  %235 = load i32, ptr %209, align 8, !tbaa !42
  %.not304 = icmp eq i32 %235, 0
  %236 = trunc nuw i32 %226 to i16
  %237 = add nuw nsw i16 %236, 2
  br i1 %.not304, label %244, label %238

238:                                              ; preds = %229
  %239 = getelementptr inbounds i8, ptr %9, i64 104
  %240 = load ptr, ptr %239, align 8, !tbaa !55
  %241 = getelementptr inbounds i8, ptr %240, i64 4
  %242 = load i16, ptr %241, align 4, !tbaa !53
  %243 = add i16 %237, %242
  store i16 %243, ptr %241, align 4, !tbaa !53
  br label %.critedge

244:                                              ; preds = %229
  %245 = getelementptr inbounds i8, ptr %9, i64 88
  %246 = load ptr, ptr %245, align 8, !tbaa !56
  %247 = getelementptr inbounds i8, ptr %246, i64 4
  %248 = load i16, ptr %247, align 4, !tbaa !53
  %249 = add i16 %237, %248
  store i16 %249, ptr %247, align 4, !tbaa !53
  br label %.critedge

250:                                              ; preds = %227
  %.not302 = icmp eq i32 %226, -1
  br i1 %.not302, label %.critedge, label %251

251:                                              ; preds = %250
  %252 = getelementptr inbounds i8, ptr %216, i64 7
  store i8 -116, ptr %.0, align 1, !tbaa !54
  %253 = lshr i32 %226, 1
  %254 = trunc i32 %253 to i8
  %255 = getelementptr inbounds i8, ptr %216, i64 8
  store i8 %254, ptr %252, align 1, !tbaa !54
  %256 = lshr i32 %226, 9
  %257 = trunc i32 %256 to i8
  %258 = getelementptr inbounds i8, ptr %216, i64 9
  store i8 %257, ptr %255, align 1, !tbaa !54
  %259 = lshr i32 %226, 17
  %260 = trunc i32 %259 to i8
  store i8 %260, ptr %258, align 1, !tbaa !54
  %261 = load i32, ptr %209, align 8, !tbaa !42
  %.not303 = icmp eq i32 %261, 0
  %262 = trunc i32 %226 to i16
  %263 = add i16 %262, 4
  br i1 %.not303, label %270, label %264

264:                                              ; preds = %251
  %265 = getelementptr inbounds i8, ptr %9, i64 104
  %266 = load ptr, ptr %265, align 8, !tbaa !55
  %267 = getelementptr inbounds i8, ptr %266, i64 4
  %268 = load i16, ptr %267, align 4, !tbaa !53
  %269 = add i16 %263, %268
  store i16 %269, ptr %267, align 4, !tbaa !53
  br label %.critedge

270:                                              ; preds = %251
  %271 = getelementptr inbounds i8, ptr %9, i64 88
  %272 = load ptr, ptr %271, align 8, !tbaa !56
  %273 = getelementptr inbounds i8, ptr %272, i64 4
  %274 = load i16, ptr %273, align 4, !tbaa !53
  %275 = add i16 %263, %274
  store i16 %275, ptr %273, align 4, !tbaa !53
  br label %.critedge

.critedge:                                        ; preds = %250, %207, %225, %270, %264, %238, %244, %188, %189
  %.1 = phi i32 [ 0, %189 ], [ 0, %188 ], [ 1, %244 ], [ 1, %238 ], [ 1, %264 ], [ 1, %270 ], [ 1, %225 ], [ 1, %207 ], [ 0, %250 ]
  ret i32 %.1
}

declare void @dynamic_noise_shaping(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

declare i32 @scan_float_data(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

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

declare void @execute_mono(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @execute_stereo(ptr noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #3

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

declare void @send_float_data(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

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

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

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !12, i64 288}
!6 = !{!"WavpackContext", !7, i64 0, !12, i64 88, !11, i64 96, !11, i64 100, !12, i64 104, !11, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !13, i64 168, !13, i64 176, !13, i64 184, !13, i64 192, !13, i64 200, !13, i64 208, !11, i64 216, !11, i64 220, !11, i64 224, !11, i64 228, !11, i64 232, !11, i64 236, !11, i64 240, !11, i64 244, !11, i64 248, !11, i64 252, !11, i64 256, !11, i64 260, !11, i64 264, !11, i64 268, !11, i64 272, !11, i64 276, !11, i64 280, !11, i64 284, !12, i64 288, !12, i64 296, !9, i64 304, !12, i64 312, !12, i64 320, !11, i64 328, !11, i64 332, !12, i64 336, !9, i64 344, !12, i64 352, !9, i64 360}
!7 = !{!"", !8, i64 0, !8, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !9, i64 56, !9, i64 72, !11, i64 76, !12, i64 80}
!8 = !{!"float", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C/C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"any pointer", !9, i64 0}
!13 = !{!"long", !9, i64 0}
!14 = !{!6, !11, i64 276}
!15 = !{!12, !12, i64 0}
!16 = !{!17, !11, i64 8}
!17 = !{!"", !18, i64 0, !20, i64 12, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !13, i64 128, !13, i64 136, !11, i64 144, !11, i64 148, !11, i64 152, !9, i64 156, !9, i64 157, !9, i64 158, !9, i64 159, !9, i64 160, !9, i64 161, !9, 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, !21, i64 200, !21, i64 248, !21, i64 296, !8, i64 344, !9, i64 348, !9, i64 349, !9, i64 350, !9, i64 351, !9, i64 352, !9, i64 353, !9, i64 354, !9, i64 355, !22, i64 360, !9, i64 432, !24, i64 1968, !12, i64 2064, !25, i64 2072}
!18 = !{!"", !9, i64 0, !19, i64 4, !19, i64 6, !11, i64 8}
!19 = !{!"short", !9, i64 0}
!20 = !{!"words_data", !9, i64 0, !9, i64 8, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !9, i64 36}
!21 = !{!"bs", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !11, i64 32, !11, i64 36, !11, i64 40}
!22 = !{!"", !9, i64 0, !9, i64 8, !9, i64 16, !23, i64 24, !23, i64 32, !23, i64 40, !12, i64 48, !12, i64 56, !11, i64 64}
!23 = !{!"double", !9, i64 0}
!24 = !{!"decorr_pass", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !9, i64 16, !9, i64 48, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92}
!25 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !9, i64 40, !9, i64 41, !11, i64 44, !11, i64 48, !11, i64 52, !12, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !9, i64 76, !12, i64 160}
!26 = !{!17, !19, i64 6}
!27 = !{!6, !11, i64 20}
!28 = !{!6, !11, i64 36}
!29 = !{!11, !11, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31, !33, !34}
!33 = !{!"llvm.loop.isvectorized", i32 1}
!34 = !{!"llvm.loop.unroll.runtime.disable"}
!35 = distinct !{!35, !31, !34, !33}
!36 = !{!17, !9, i64 158}
!37 = !{!17, !11, i64 148}
!38 = distinct !{!38, !31, !33, !34}
!39 = distinct !{!39, !31, !33, !34}
!40 = distinct !{!40, !31, !34, !33}
!41 = distinct !{!41, !31, !34, !33}
!42 = !{!6, !11, i64 224}
!43 = !{!6, !11, i64 32}
!44 = !{!17, !9, i64 355}
!45 = !{!6, !11, i64 240}
!46 = !{!17, !11, i64 152}
!47 = !{!17, !9, i64 349}
!48 = !{!17, !9, i64 350}
!49 = !{!17, !9, i64 351}
!50 = !{!17, !11, i64 168}
!51 = !{!17, !12, i64 408}
!52 = !{!17, !11, i64 424}
!53 = !{!18, !19, i64 4}
!54 = !{!9, !9, i64 0}
!55 = !{!17, !12, i64 104}
!56 = !{!17, !12, i64 88}


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