; LLVM IR from dbry/wavpack-stream :: cli (riff)

; 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.RiffChunkHeader = type { [4 x i8], i32, [4 x i8] }
%struct.ChunkHeader = type { [4 x i8], i32 }
%struct.WaveHeader = type { i16, i16, i32, i32, i16, i16, i16, i16, i32, i16, [14 x i8] }
%struct.DS64Chunk = type <{ i64, i64, i64, i32 }>
%struct.CS64Chunk = type <{ [4 x i8], i64 }>
%struct.WavpackStreamConfig = type { float, float, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x i8], i8, i32, ptr }

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@debug_logging_mode = external global i32, align 4
@.str.8 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @ParseRiffHeaderConfig(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #0 {
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca %struct.RiffChunkHeader, align 4
  %18 = alloca %struct.ChunkHeader, align 4
  %19 = alloca %struct.WaveHeader, align 4
  %20 = alloca %struct.DS64Chunk, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca %struct.CS64Chunk, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i64, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %29 = load ptr, ptr %9, align 8, !tbaa !5
  %30 = call i32 @strncmp(ptr noundef %29, ptr noundef @.str, i64 noundef 4) #9
  %31 = icmp ne i32 %30, 0
  %32 = xor i1 %31, true
  %33 = zext i1 %32 to i32
  store i32 %33, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  store i32 0, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  store i64 0, ptr %15, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 12, ptr %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 28, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.memset.p0.i64(ptr align 4 %19, i8 0, i64 40, i1 false)
  call void @llvm.memset.p0.i64(ptr align 4 %20, i8 0, i64 28, i1 false)
  %34 = load ptr, ptr %7, align 8, !tbaa !5
  %35 = call i64 @DoGetFileSize(ptr noundef %34)
  store i64 %35, ptr %16, align 8, !tbaa !11
  %36 = load i32, ptr %12, align 4, !tbaa !9
  %37 = icmp ne i32 %36, 0
  br i1 %37, label %48, label %38

38:                                               ; preds = %5
  %39 = load i64, ptr %16, align 8, !tbaa !11
  %40 = icmp sge i64 %39, 4294967296
  br i1 %40, label %41, label %48

41:                                               ; preds = %38
  %42 = load ptr, ptr %11, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %42, i32 0, i32 4
  %44 = load i32, ptr %43, align 8, !tbaa !13
  %45 = and i32 %44, 2048
  %46 = icmp ne i32 %45, 0
  br i1 %46, label %48, label %47

47:                                               ; preds = %41
  call void (ptr, ...) @error_line(ptr noundef @.str.1)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

48:                                               ; preds = %41, %38, %5
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 1 %49, i64 4, i1 false)
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds i8, ptr %17, i64 4
  %52 = call i32 @DoReadFile(ptr noundef %50, ptr noundef %51, i32 noundef 8, ptr noundef %21)
  %53 = icmp ne i32 %52, 0
  br i1 %53, label %54, label %63

54:                                               ; preds = %48
  %55 = load i32, ptr %21, align 4, !tbaa !9
  %56 = zext i32 %55 to i64
  %57 = icmp ne i64 %56, 8
  br i1 %57, label %63, label %58

58:                                               ; preds = %54
  %59 = getelementptr inbounds %struct.RiffChunkHeader, ptr %17, i32 0, i32 2
  %60 = getelementptr inbounds [4 x i8], ptr %59, i64 0, i64 0
  %61 = call i32 @strncmp(ptr noundef %60, ptr noundef @.str.2, i64 noundef 4) #9
  %62 = icmp ne i32 %61, 0
  br i1 %62, label %63, label %65

63:                                               ; preds = %58, %54, %48
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %64)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

65:                                               ; preds = %58
  %66 = load ptr, ptr %11, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %66, i32 0, i32 4
  %68 = load i32, ptr %67, align 8, !tbaa !13
  %69 = and i32 %68, 512
  %70 = icmp ne i32 %69, 0
  br i1 %70, label %78, label %71

71:                                               ; preds = %65
  %72 = load ptr, ptr %10, align 8, !tbaa !5
  %73 = call i32 @WavpackStreamAddWrapper(ptr noundef %72, ptr noundef %17, i32 noundef 12)
  %74 = icmp ne i32 %73, 0
  br i1 %74, label %78, label %75

75:                                               ; preds = %71
  %76 = load ptr, ptr %10, align 8, !tbaa !5
  %77 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %76)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %77)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

78:                                               ; preds = %71, %65
  br label %79

79:                                               ; preds = %78
  br label %80

80:                                               ; preds = %777, %79
  br label %81

81:                                               ; preds = %80
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = call i32 @DoReadFile(ptr noundef %82, ptr noundef %18, i32 noundef 8, ptr noundef %21)
  %84 = icmp ne i32 %83, 0
  br i1 %84, label %85, label %89

85:                                               ; preds = %81
  %86 = load i32, ptr %21, align 4, !tbaa !9
  %87 = zext i32 %86 to i64
  %88 = icmp ne i64 %87, 8
  br i1 %88, label %89, label %91

89:                                               ; preds = %85, %81
  %90 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %90)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

91:                                               ; preds = %85
  %92 = load ptr, ptr %11, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %92, i32 0, i32 4
  %94 = load i32, ptr %93, align 8, !tbaa !13
  %95 = and i32 %94, 512
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %104, label %97

97:                                               ; preds = %91
  %98 = load ptr, ptr %10, align 8, !tbaa !5
  %99 = call i32 @WavpackStreamAddWrapper(ptr noundef %98, ptr noundef %18, i32 noundef 8)
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %104, label %101

101:                                              ; preds = %97
  %102 = load ptr, ptr %10, align 8, !tbaa !5
  %103 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %102)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %103)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

104:                                              ; preds = %97, %91
  br label %105

105:                                              ; preds = %104
  call void @WavpackStreamLittleEndianToNative(ptr noundef %18, ptr noundef @.str.5)
  %106 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %107 = getelementptr inbounds [4 x i8], ptr %106, i64 0, i64 0
  %108 = call i32 @strncmp(ptr noundef %107, ptr noundef @.str.6, i64 noundef 4) #9
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %195, label %110

110:                                              ; preds = %105
  %111 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %112 = load i32, ptr %111, align 4, !tbaa !16
  %113 = zext i32 %112 to i64
  %114 = icmp ult i64 %113, 28
  br i1 %114, label %123, label %115

115:                                              ; preds = %110
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = call i32 @DoReadFile(ptr noundef %116, ptr noundef %20, i32 noundef 28, ptr noundef %21)
  %118 = icmp ne i32 %117, 0
  br i1 %118, label %119, label %123

119:                                              ; preds = %115
  %120 = load i32, ptr %21, align 4, !tbaa !9
  %121 = zext i32 %120 to i64
  %122 = icmp ne i64 %121, 28
  br i1 %122, label %123, label %125

123:                                              ; preds = %119, %115, %110
  %124 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %124)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

125:                                              ; preds = %119
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %126, i32 0, i32 4
  %128 = load i32, ptr %127, align 8, !tbaa !13
  %129 = and i32 %128, 512
  %130 = icmp ne i32 %129, 0
  br i1 %130, label %138, label %131

131:                                              ; preds = %125
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = call i32 @WavpackStreamAddWrapper(ptr noundef %132, ptr noundef %20, i32 noundef 28)
  %134 = icmp ne i32 %133, 0
  br i1 %134, label %138, label %135

135:                                              ; preds = %131
  %136 = load ptr, ptr %10, align 8, !tbaa !5
  %137 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %136)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %137)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

138:                                              ; preds = %131, %125
  br label %139

139:                                              ; preds = %138
  store i32 1, ptr %13, align 4, !tbaa !9
  call void @WavpackStreamLittleEndianToNative(ptr noundef %20, ptr noundef @.str.7)
  %140 = load i32, ptr @debug_logging_mode, align 4, !tbaa !9
  %141 = icmp ne i32 %140, 0
  br i1 %141, label %142, label %151

142:                                              ; preds = %139
  %143 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 0
  %144 = load i64, ptr %143, align 4, !tbaa !18
  %145 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 1
  %146 = load i64, ptr %145, align 4, !tbaa !20
  %147 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 2
  %148 = load i64, ptr %147, align 4, !tbaa !21
  %149 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 3
  %150 = load i32, ptr %149, align 4, !tbaa !22
  call void (ptr, ...) @error_line(ptr noundef @.str.8, i64 noundef %144, i64 noundef %146, i64 noundef %148, i32 noundef %150)
  br label %151

151:                                              ; preds = %142, %139
  %152 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 3
  %153 = load i32, ptr %152, align 4, !tbaa !22
  %154 = zext i32 %153 to i64
  %155 = mul i64 %154, 12
  %156 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %157 = load i32, ptr %156, align 4, !tbaa !16
  %158 = zext i32 %157 to i64
  %159 = sub i64 %158, 28
  %160 = icmp ne i64 %155, %159
  br i1 %160, label %161, label %163

161:                                              ; preds = %151
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %162)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

163:                                              ; preds = %151
  br label %164

164:                                              ; preds = %193, %163
  %165 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 3
  %166 = load i32, ptr %165, align 4, !tbaa !22
  %167 = add i32 %166, -1
  store i32 %167, ptr %165, align 4, !tbaa !22
  %168 = icmp ne i32 %166, 0
  br i1 %168, label %169, label %194

169:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 12, ptr %23) #8
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = call i32 @DoReadFile(ptr noundef %170, ptr noundef %23, i32 noundef 12, ptr noundef %21)
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %187

173:                                              ; preds = %169
  %174 = load i32, ptr %21, align 4, !tbaa !9
  %175 = zext i32 %174 to i64
  %176 = icmp ne i64 %175, 12
  br i1 %176, label %187, label %177

177:                                              ; preds = %173
  %178 = load ptr, ptr %11, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %178, i32 0, i32 4
  %180 = load i32, ptr %179, align 8, !tbaa !13
  %181 = and i32 %180, 512
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %190, label %183

183:                                              ; preds = %177
  %184 = load ptr, ptr %10, align 8, !tbaa !5
  %185 = call i32 @WavpackStreamAddWrapper(ptr noundef %184, ptr noundef %23, i32 noundef 12)
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %190, label %187

187:                                              ; preds = %183, %173, %169
  %188 = load ptr, ptr %10, align 8, !tbaa !5
  %189 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %188)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %189)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %191

190:                                              ; preds = %183, %177
  store i32 0, ptr %22, align 4
  br label %191

191:                                              ; preds = %190, %187
  call void @llvm.lifetime.end.p0(i64 12, ptr %23) #8
  %192 = load i32, ptr %22, align 4
  switch i32 %192, label %789 [
    i32 0, label %193
  ]

193:                                              ; preds = %191
  br label %164, !llvm.loop !23

194:                                              ; preds = %164
  br label %777

195:                                              ; preds = %105
  %196 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %197 = getelementptr inbounds [4 x i8], ptr %196, i64 0, i64 0
  %198 = call i32 @strncmp(ptr noundef %197, ptr noundef @.str.9, i64 noundef 4) #9
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %568, label %200

200:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  store i32 1, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %201 = load i32, ptr %14, align 4, !tbaa !9
  %202 = add nsw i32 %201, 1
  store i32 %202, ptr %14, align 4, !tbaa !9
  %203 = icmp ne i32 %201, 0
  br i1 %203, label %204, label %206

204:                                              ; preds = %200
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %205)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %565

206:                                              ; preds = %200
  %207 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %208 = load i32, ptr %207, align 4, !tbaa !16
  %209 = icmp ult i32 %208, 16
  br i1 %209, label %226, label %210

210:                                              ; preds = %206
  %211 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %212 = load i32, ptr %211, align 4, !tbaa !16
  %213 = zext i32 %212 to i64
  %214 = icmp ugt i64 %213, 40
  br i1 %214, label %226, label %215

215:                                              ; preds = %210
  %216 = load ptr, ptr %7, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %218 = load i32, ptr %217, align 4, !tbaa !16
  %219 = call i32 @DoReadFile(ptr noundef %216, ptr noundef %19, i32 noundef %218, ptr noundef %21)
  %220 = icmp ne i32 %219, 0
  br i1 %220, label %221, label %226

221:                                              ; preds = %215
  %222 = load i32, ptr %21, align 4, !tbaa !9
  %223 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %224 = load i32, ptr %223, align 4, !tbaa !16
  %225 = icmp ne i32 %222, %224
  br i1 %225, label %226, label %228

226:                                              ; preds = %221, %215, %210, %206
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %227)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %565

228:                                              ; preds = %221
  %229 = load ptr, ptr %11, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %229, i32 0, i32 4
  %231 = load i32, ptr %230, align 8, !tbaa !13
  %232 = and i32 %231, 512
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %243, label %234

234:                                              ; preds = %228
  %235 = load ptr, ptr %10, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %237 = load i32, ptr %236, align 4, !tbaa !16
  %238 = call i32 @WavpackStreamAddWrapper(ptr noundef %235, ptr noundef %19, i32 noundef %237)
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %243, label %240

240:                                              ; preds = %234
  %241 = load ptr, ptr %10, align 8, !tbaa !5
  %242 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %241)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %242)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %565

243:                                              ; preds = %234, %228
  br label %244

244:                                              ; preds = %243
  call void @WavpackStreamLittleEndianToNative(ptr noundef %19, ptr noundef @.str.10)
  %245 = load i32, ptr @debug_logging_mode, align 4, !tbaa !9
  %246 = icmp ne i32 %245, 0
  br i1 %246, label %247, label %287

247:                                              ; preds = %244
  %248 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %249 = load i32, ptr %248, align 4, !tbaa !16
  call void (ptr, ...) @error_line(ptr noundef @.str.11, i32 noundef %249)
  %250 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 0
  %251 = load i16, ptr %250, align 4, !tbaa !25
  %252 = zext i16 %251 to i32
  %253 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %254 = load i16, ptr %253, align 2, !tbaa !28
  %255 = zext i16 %254 to i32
  %256 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 5
  %257 = load i16, ptr %256, align 2, !tbaa !29
  %258 = zext i16 %257 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.12, i32 noundef %252, i32 noundef %255, i32 noundef %258)
  %259 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %260 = load i16, ptr %259, align 4, !tbaa !30
  %261 = zext i16 %260 to i32
  %262 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 2
  %263 = load i32, ptr %262, align 4, !tbaa !31
  %264 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 3
  %265 = load i32, ptr %264, align 4, !tbaa !32
  call void (ptr, ...) @error_line(ptr noundef @.str.13, i32 noundef %261, i32 noundef %263, i32 noundef %265)
  %266 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %267 = load i32, ptr %266, align 4, !tbaa !16
  %268 = icmp ugt i32 %267, 16
  br i1 %268, label %269, label %276

269:                                              ; preds = %247
  %270 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 6
  %271 = load i16, ptr %270, align 4, !tbaa !33
  %272 = zext i16 %271 to i32
  %273 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 7
  %274 = load i16, ptr %273, align 2, !tbaa !34
  %275 = zext i16 %274 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.14, i32 noundef %272, i32 noundef %275)
  br label %276

276:                                              ; preds = %269, %247
  %277 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %278 = load i32, ptr %277, align 4, !tbaa !16
  %279 = icmp ugt i32 %278, 20
  br i1 %279, label %280, label %286

280:                                              ; preds = %276
  %281 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 8
  %282 = load i32, ptr %281, align 4, !tbaa !35
  %283 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 9
  %284 = load i16, ptr %283, align 4, !tbaa !36
  %285 = zext i16 %284 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.15, i32 noundef %282, i32 noundef %285)
  br label %286

286:                                              ; preds = %280, %276
  br label %287

287:                                              ; preds = %286, %244
  %288 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !16
  %290 = icmp ugt i32 %289, 16
  br i1 %290, label %291, label %301

291:                                              ; preds = %287
  %292 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 6
  %293 = load i16, ptr %292, align 4, !tbaa !33
  %294 = zext i16 %293 to i32
  %295 = icmp eq i32 %294, 2
  br i1 %295, label %296, label %301

296:                                              ; preds = %291
  %297 = load ptr, ptr %11, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %297, i32 0, i32 4
  %299 = load i32, ptr %298, align 8, !tbaa !13
  %300 = or i32 %299, 256
  store i32 %300, ptr %298, align 8, !tbaa !13
  br label %301

301:                                              ; preds = %296, %291, %287
  %302 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 0
  %303 = load i16, ptr %302, align 4, !tbaa !25
  %304 = zext i16 %303 to i32
  %305 = icmp eq i32 %304, 65534
  br i1 %305, label %306, label %314

306:                                              ; preds = %301
  %307 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %308 = load i32, ptr %307, align 4, !tbaa !16
  %309 = icmp eq i32 %308, 40
  br i1 %309, label %310, label %314

310:                                              ; preds = %306
  %311 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 9
  %312 = load i16, ptr %311, align 4, !tbaa !36
  %313 = zext i16 %312 to i32
  br label %318

314:                                              ; preds = %306, %301
  %315 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 0
  %316 = load i16, ptr %315, align 4, !tbaa !25
  %317 = zext i16 %316 to i32
  br label %318

318:                                              ; preds = %314, %310
  %319 = phi i32 [ %313, %310 ], [ %317, %314 ]
  store i32 %319, ptr %25, align 4, !tbaa !9
  %320 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %321 = load i32, ptr %320, align 4, !tbaa !16
  %322 = icmp eq i32 %321, 40
  br i1 %322, label %323, label %332

323:                                              ; preds = %318
  %324 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 7
  %325 = load i16, ptr %324, align 2, !tbaa !34
  %326 = zext i16 %325 to i32
  %327 = icmp ne i32 %326, 0
  br i1 %327, label %328, label %332

328:                                              ; preds = %323
  %329 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 7
  %330 = load i16, ptr %329, align 2, !tbaa !34
  %331 = zext i16 %330 to i32
  br label %336

332:                                              ; preds = %323, %318
  %333 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 5
  %334 = load i16, ptr %333, align 2, !tbaa !29
  %335 = zext i16 %334 to i32
  br label %336

336:                                              ; preds = %332, %328
  %337 = phi i32 [ %331, %328 ], [ %335, %332 ]
  %338 = load ptr, ptr %11, align 8, !tbaa !5
  %339 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %338, i32 0, i32 2
  store i32 %337, ptr %339, align 8, !tbaa !37
  %340 = load i32, ptr %25, align 4, !tbaa !9
  %341 = icmp ne i32 %340, 1
  br i1 %341, label %342, label %346

342:                                              ; preds = %336
  %343 = load i32, ptr %25, align 4, !tbaa !9
  %344 = icmp ne i32 %343, 3
  br i1 %344, label %345, label %346

345:                                              ; preds = %342
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %345, %342, %336
  %347 = load i32, ptr %25, align 4, !tbaa !9
  %348 = icmp eq i32 %347, 3
  br i1 %348, label %349, label %355

349:                                              ; preds = %346
  %350 = load ptr, ptr %11, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %350, i32 0, i32 2
  %352 = load i32, ptr %351, align 8, !tbaa !37
  %353 = icmp ne i32 %352, 32
  br i1 %353, label %354, label %355

354:                                              ; preds = %349
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %355

355:                                              ; preds = %354, %349, %346
  %356 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %357 = load i16, ptr %356, align 2, !tbaa !28
  %358 = icmp ne i16 %357, 0
  br i1 %358, label %359, label %396

359:                                              ; preds = %355
  %360 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %361 = load i16, ptr %360, align 2, !tbaa !28
  %362 = zext i16 %361 to i32
  %363 = icmp sgt i32 %362, 256
  br i1 %363, label %396, label %364

364:                                              ; preds = %359
  %365 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %366 = load i16, ptr %365, align 4, !tbaa !30
  %367 = zext i16 %366 to i32
  %368 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %369 = load i16, ptr %368, align 2, !tbaa !28
  %370 = zext i16 %369 to i32
  %371 = sdiv i32 %367, %370
  %372 = load ptr, ptr %11, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %372, i32 0, i32 2
  %374 = load i32, ptr %373, align 8, !tbaa !37
  %375 = add nsw i32 %374, 7
  %376 = sdiv i32 %375, 8
  %377 = icmp slt i32 %371, %376
  br i1 %377, label %396, label %378

378:                                              ; preds = %364
  %379 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %380 = load i16, ptr %379, align 4, !tbaa !30
  %381 = zext i16 %380 to i32
  %382 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %383 = load i16, ptr %382, align 2, !tbaa !28
  %384 = zext i16 %383 to i32
  %385 = sdiv i32 %381, %384
  %386 = icmp sgt i32 %385, 4
  br i1 %386, label %396, label %387

387:                                              ; preds = %378
  %388 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %389 = load i16, ptr %388, align 4, !tbaa !30
  %390 = zext i16 %389 to i32
  %391 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %392 = load i16, ptr %391, align 2, !tbaa !28
  %393 = zext i16 %392 to i32
  %394 = srem i32 %390, %393
  %395 = icmp ne i32 %394, 0
  br i1 %395, label %396, label %397

396:                                              ; preds = %387, %378, %364, %359, %355
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %397

397:                                              ; preds = %396, %387
  %398 = load ptr, ptr %11, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %398, i32 0, i32 2
  %400 = load i32, ptr %399, align 8, !tbaa !37
  %401 = icmp slt i32 %400, 1
  br i1 %401, label %407, label %402

402:                                              ; preds = %397
  %403 = load ptr, ptr %11, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %403, i32 0, i32 2
  %405 = load i32, ptr %404, align 8, !tbaa !37
  %406 = icmp sgt i32 %405, 32
  br i1 %406, label %407, label %408

407:                                              ; preds = %402, %397
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %408

408:                                              ; preds = %407, %402
  %409 = load i32, ptr %24, align 4, !tbaa !9
  %410 = icmp ne i32 %409, 0
  br i1 %410, label %413, label %411

411:                                              ; preds = %408
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.16, ptr noundef %412)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %565

413:                                              ; preds = %408
  %414 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %415 = load i32, ptr %414, align 4, !tbaa !16
  %416 = icmp ult i32 %415, 40
  br i1 %416, label %417, label %459

417:                                              ; preds = %413
  %418 = load ptr, ptr %11, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %418, i32 0, i32 13
  %420 = load i32, ptr %419, align 4, !tbaa !38
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %458, label %422

422:                                              ; preds = %417
  %423 = load ptr, ptr %11, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %423, i32 0, i32 4
  %425 = load i32, ptr %424, align 8, !tbaa !13
  %426 = and i32 %425, 1024
  %427 = icmp ne i32 %426, 0
  br i1 %427, label %458, label %428

428:                                              ; preds = %422
  %429 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %430 = load i16, ptr %429, align 2, !tbaa !28
  %431 = zext i16 %430 to i32
  %432 = icmp sle i32 %431, 2
  br i1 %432, label %433, label %440

433:                                              ; preds = %428
  %434 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %435 = load i16, ptr %434, align 2, !tbaa !28
  %436 = zext i16 %435 to i32
  %437 = sub nsw i32 5, %436
  %438 = load ptr, ptr %11, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %438, i32 0, i32 13
  store i32 %437, ptr %439, align 4, !tbaa !38
  br label %457

440:                                              ; preds = %428
  %441 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %442 = load i16, ptr %441, align 2, !tbaa !28
  %443 = zext i16 %442 to i32
  %444 = icmp sle i32 %443, 18
  br i1 %444, label %445, label %453

445:                                              ; preds = %440
  %446 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %447 = load i16, ptr %446, align 2, !tbaa !28
  %448 = zext i16 %447 to i32
  %449 = shl i32 1, %448
  %450 = sub nsw i32 %449, 1
  %451 = load ptr, ptr %11, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %451, i32 0, i32 13
  store i32 %450, ptr %452, align 4, !tbaa !38
  br label %456

453:                                              ; preds = %440
  %454 = load ptr, ptr %11, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %454, i32 0, i32 13
  store i32 262143, ptr %455, align 4, !tbaa !38
  br label %456

456:                                              ; preds = %453, %445
  br label %457

457:                                              ; preds = %456, %433
  br label %458

458:                                              ; preds = %457, %422, %417
  br label %486

459:                                              ; preds = %413
  %460 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 8
  %461 = load i32, ptr %460, align 4, !tbaa !35
  %462 = icmp ne i32 %461, 0
  br i1 %462, label %463, label %475

463:                                              ; preds = %459
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %464, i32 0, i32 13
  %466 = load i32, ptr %465, align 4, !tbaa !38
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %474, label %468

468:                                              ; preds = %463
  %469 = load ptr, ptr %11, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %469, i32 0, i32 4
  %471 = load i32, ptr %470, align 8, !tbaa !13
  %472 = and i32 %471, 1024
  %473 = icmp ne i32 %472, 0
  br i1 %473, label %474, label %475

474:                                              ; preds = %468, %463
  call void (ptr, ...) @error_line(ptr noundef @.str.17)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %565

475:                                              ; preds = %468, %459
  %476 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 8
  %477 = load i32, ptr %476, align 4, !tbaa !35
  %478 = icmp ne i32 %477, 0
  br i1 %478, label %479, label %484

479:                                              ; preds = %475
  %480 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 8
  %481 = load i32, ptr %480, align 4, !tbaa !35
  %482 = load ptr, ptr %11, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %482, i32 0, i32 13
  store i32 %481, ptr %483, align 4, !tbaa !38
  br label %484

484:                                              ; preds = %479, %475
  br label %485

485:                                              ; preds = %484
  br label %486

486:                                              ; preds = %485, %458
  %487 = load i32, ptr %25, align 4, !tbaa !9
  %488 = icmp eq i32 %487, 3
  br i1 %488, label %489, label %492

489:                                              ; preds = %486
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %490, i32 0, i32 8
  store i32 127, ptr %491, align 8, !tbaa !39
  br label %528

492:                                              ; preds = %486
  %493 = load ptr, ptr %11, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %493, i32 0, i32 4
  %495 = load i32, ptr %494, align 8, !tbaa !13
  %496 = and i32 %495, 256
  %497 = icmp ne i32 %496, 0
  br i1 %497, label %498, label %527

498:                                              ; preds = %492
  %499 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %500 = load i16, ptr %499, align 4, !tbaa !30
  %501 = zext i16 %500 to i32
  %502 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %503 = load i16, ptr %502, align 2, !tbaa !28
  %504 = zext i16 %503 to i32
  %505 = sdiv i32 %501, %504
  %506 = icmp eq i32 %505, 4
  br i1 %506, label %507, label %527

507:                                              ; preds = %498
  %508 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 5
  %509 = load i16, ptr %508, align 2, !tbaa !29
  %510 = zext i16 %509 to i32
  %511 = icmp eq i32 %510, 24
  br i1 %511, label %512, label %515

512:                                              ; preds = %507
  %513 = load ptr, ptr %11, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %513, i32 0, i32 8
  store i32 150, ptr %514, align 8, !tbaa !39
  br label %524

515:                                              ; preds = %507
  %516 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 5
  %517 = load i16, ptr %516, align 2, !tbaa !29
  %518 = zext i16 %517 to i32
  %519 = icmp eq i32 %518, 32
  br i1 %519, label %520, label %523

520:                                              ; preds = %515
  %521 = load ptr, ptr %11, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %521, i32 0, i32 8
  store i32 142, ptr %522, align 8, !tbaa !39
  br label %523

523:                                              ; preds = %520, %515
  br label %524

524:                                              ; preds = %523, %512
  %525 = load ptr, ptr %11, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %525, i32 0, i32 2
  store i32 32, ptr %526, align 8, !tbaa !37
  br label %527

527:                                              ; preds = %524, %498, %492
  br label %528

528:                                              ; preds = %527, %489
  %529 = load i32, ptr @debug_logging_mode, align 4, !tbaa !9
  %530 = icmp ne i32 %529, 0
  br i1 %530, label %531, label %564

531:                                              ; preds = %528
  %532 = load ptr, ptr %11, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %532, i32 0, i32 8
  %534 = load i32, ptr %533, align 8, !tbaa !39
  %535 = icmp eq i32 %534, 127
  br i1 %535, label %536, label %537

536:                                              ; preds = %531
  call void (ptr, ...) @error_line(ptr noundef @.str.18)
  br label %563

537:                                              ; preds = %531
  %538 = load ptr, ptr %11, align 8, !tbaa !5
  %539 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %538, i32 0, i32 8
  %540 = load i32, ptr %539, align 8, !tbaa !39
  %541 = icmp ne i32 %540, 0
  br i1 %541, label %542, label %551

542:                                              ; preds = %537
  %543 = load ptr, ptr %11, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %543, i32 0, i32 8
  %545 = load i32, ptr %544, align 8, !tbaa !39
  %546 = sub nsw i32 %545, 126
  %547 = load ptr, ptr %11, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %547, i32 0, i32 8
  %549 = load i32, ptr %548, align 8, !tbaa !39
  %550 = sub nsw i32 150, %549
  call void (ptr, ...) @error_line(ptr noundef @.str.19, i32 noundef %546, i32 noundef %550)
  br label %562

551:                                              ; preds = %537
  %552 = load ptr, ptr %11, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %552, i32 0, i32 2
  %554 = load i32, ptr %553, align 8, !tbaa !37
  %555 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %556 = load i16, ptr %555, align 4, !tbaa !30
  %557 = zext i16 %556 to i32
  %558 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %559 = load i16, ptr %558, align 2, !tbaa !28
  %560 = zext i16 %559 to i32
  %561 = sdiv i32 %557, %560
  call void (ptr, ...) @error_line(ptr noundef @.str.20, i32 noundef %554, i32 noundef %561)
  br label %562

562:                                              ; preds = %551, %542
  br label %563

563:                                              ; preds = %562, %536
  br label %564

564:                                              ; preds = %563, %528
  store i32 0, ptr %22, align 4
  br label %565

565:                                              ; preds = %564, %474, %411, %240, %226, %204
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  %566 = load i32, ptr %22, align 4
  switch i32 %566, label %789 [
    i32 0, label %567
  ]

567:                                              ; preds = %565
  br label %776

568:                                              ; preds = %195
  %569 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %570 = getelementptr inbounds [4 x i8], ptr %569, i64 0, i64 0
  %571 = call i32 @strncmp(ptr noundef %570, ptr noundef @.str.21, i64 noundef 4) #9
  %572 = icmp ne i32 %571, 0
  br i1 %572, label %705, label %573

573:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %574 = load i32, ptr %13, align 4, !tbaa !9
  %575 = icmp ne i32 %574, 0
  br i1 %575, label %576, label %583

576:                                              ; preds = %573
  %577 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %578 = load i32, ptr %577, align 4, !tbaa !16
  %579 = icmp eq i32 %578, -1
  br i1 %579, label %580, label %583

580:                                              ; preds = %576
  %581 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 1
  %582 = load i64, ptr %581, align 4, !tbaa !20
  br label %587

583:                                              ; preds = %576, %573
  %584 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %585 = load i32, ptr %584, align 4, !tbaa !16
  %586 = zext i32 %585 to i64
  br label %587

587:                                              ; preds = %583, %580
  %588 = phi i64 [ %582, %580 ], [ %586, %583 ]
  store i64 %588, ptr %26, align 8, !tbaa !11
  %589 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %590 = load i16, ptr %589, align 2, !tbaa !28
  %591 = icmp ne i16 %590, 0
  br i1 %591, label %592, label %598

592:                                              ; preds = %587
  %593 = load i32, ptr %12, align 4, !tbaa !9
  %594 = icmp ne i32 %593, 0
  br i1 %594, label %595, label %600

595:                                              ; preds = %592
  %596 = load i32, ptr %13, align 4, !tbaa !9
  %597 = icmp ne i32 %596, 0
  br i1 %597, label %600, label %598

598:                                              ; preds = %595, %587
  %599 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %599)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %703

600:                                              ; preds = %595, %592
  %601 = load i64, ptr %16, align 8, !tbaa !11
  %602 = icmp ne i64 %601, 0
  br i1 %602, label %603, label %615

603:                                              ; preds = %600
  %604 = load ptr, ptr %11, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %604, i32 0, i32 4
  %606 = load i32, ptr %605, align 8, !tbaa !13
  %607 = and i32 %606, 2048
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %615, label %609

609:                                              ; preds = %603
  %610 = load i64, ptr %16, align 8, !tbaa !11
  %611 = load i64, ptr %26, align 8, !tbaa !11
  %612 = sub nsw i64 %610, %611
  %613 = icmp sgt i64 %612, 16777216
  br i1 %613, label %614, label %615

614:                                              ; preds = %609
  call void (ptr, ...) @error_line(ptr noundef @.str.22)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %703

615:                                              ; preds = %609, %603, %600
  %616 = load ptr, ptr %11, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %616, i32 0, i32 4
  %618 = load i32, ptr %617, align 8, !tbaa !13
  %619 = and i32 %618, 2048
  %620 = icmp ne i32 %619, 0
  br i1 %620, label %621, label %659

621:                                              ; preds = %615
  %622 = load i64, ptr %16, align 8, !tbaa !11
  %623 = icmp ne i64 %622, 0
  br i1 %623, label %624, label %657

624:                                              ; preds = %621
  %625 = load ptr, ptr %7, align 8, !tbaa !5
  %626 = call i64 @DoGetFilePosition(ptr noundef %625)
  %627 = icmp ne i64 %626, -1
  br i1 %627, label %628, label %657

628:                                              ; preds = %624
  %629 = load i64, ptr %16, align 8, !tbaa !11
  %630 = load ptr, ptr %7, align 8, !tbaa !5
  %631 = call i64 @DoGetFilePosition(ptr noundef %630)
  %632 = sub nsw i64 %629, %631
  %633 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %634 = load i16, ptr %633, align 4, !tbaa !30
  %635 = zext i16 %634 to i64
  %636 = sdiv i64 %632, %635
  store i64 %636, ptr %15, align 8, !tbaa !11
  %637 = load i64, ptr %16, align 8, !tbaa !11
  %638 = load ptr, ptr %7, align 8, !tbaa !5
  %639 = call i64 @DoGetFilePosition(ptr noundef %638)
  %640 = sub nsw i64 %637, %639
  %641 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %642 = load i16, ptr %641, align 4, !tbaa !30
  %643 = zext i16 %642 to i64
  %644 = srem i64 %640, %643
  %645 = icmp ne i64 %644, 0
  br i1 %645, label %646, label %656

646:                                              ; preds = %628
  %647 = load i64, ptr %16, align 8, !tbaa !11
  %648 = load ptr, ptr %7, align 8, !tbaa !5
  %649 = call i64 @DoGetFilePosition(ptr noundef %648)
  %650 = sub nsw i64 %647, %649
  %651 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %652 = load i16, ptr %651, align 4, !tbaa !30
  %653 = zext i16 %652 to i64
  %654 = srem i64 %650, %653
  %655 = trunc i64 %654 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.23, i32 noundef %655)
  br label %656

656:                                              ; preds = %646, %628
  br label %658

657:                                              ; preds = %624, %621
  store i64 -1, ptr %15, align 8, !tbaa !11
  br label %658

658:                                              ; preds = %657, %656
  br label %684

659:                                              ; preds = %615
  %660 = load i64, ptr %26, align 8, !tbaa !11
  %661 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %662 = load i16, ptr %661, align 4, !tbaa !30
  %663 = zext i16 %662 to i64
  %664 = sdiv i64 %660, %663
  store i64 %664, ptr %15, align 8, !tbaa !11
  %665 = load i32, ptr %13, align 4, !tbaa !9
  %666 = icmp ne i32 %665, 0
  br i1 %666, label %667, label %674

667:                                              ; preds = %659
  %668 = load i64, ptr %15, align 8, !tbaa !11
  %669 = getelementptr inbounds %struct.DS64Chunk, ptr %20, i32 0, i32 2
  %670 = load i64, ptr %669, align 4, !tbaa !21
  %671 = icmp ne i64 %668, %670
  br i1 %671, label %672, label %674

672:                                              ; preds = %667
  %673 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %673)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %703

674:                                              ; preds = %667, %659
  %675 = load i64, ptr %15, align 8, !tbaa !11
  %676 = icmp ne i64 %675, 0
  br i1 %676, label %678, label %677

677:                                              ; preds = %674
  call void (ptr, ...) @error_line(ptr noundef @.str.24)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %703

678:                                              ; preds = %674
  %679 = load i64, ptr %15, align 8, !tbaa !11
  %680 = icmp sgt i64 %679, 1099511627519
  br i1 %680, label %681, label %683

681:                                              ; preds = %678
  %682 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.25, ptr noundef %682)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %703

683:                                              ; preds = %678
  br label %684

684:                                              ; preds = %683, %658
  %685 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 4
  %686 = load i16, ptr %685, align 4, !tbaa !30
  %687 = zext i16 %686 to i32
  %688 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %689 = load i16, ptr %688, align 2, !tbaa !28
  %690 = zext i16 %689 to i32
  %691 = sdiv i32 %687, %690
  %692 = load ptr, ptr %11, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %692, i32 0, i32 3
  store i32 %691, ptr %693, align 4, !tbaa !40
  %694 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 1
  %695 = load i16, ptr %694, align 2, !tbaa !28
  %696 = zext i16 %695 to i32
  %697 = load ptr, ptr %11, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %697, i32 0, i32 7
  store i32 %696, ptr %698, align 4, !tbaa !41
  %699 = getelementptr inbounds %struct.WaveHeader, ptr %19, i32 0, i32 2
  %700 = load i32, ptr %699, align 4, !tbaa !31
  %701 = load ptr, ptr %11, align 8, !tbaa !5
  %702 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %701, i32 0, i32 12
  store i32 %700, ptr %702, align 8, !tbaa !42
  store i32 3, ptr %22, align 4
  br label %703

703:                                              ; preds = %684, %681, %677, %672, %614, %598
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  %704 = load i32, ptr %22, align 4
  switch i32 %704, label %789 [
    i32 3, label %778
  ]

705:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  %706 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %707 = load i32, ptr %706, align 4, !tbaa !16
  %708 = add i32 %707, 1
  %709 = zext i32 %708 to i64
  %710 = and i64 %709, -2
  %711 = trunc i64 %710 to i32
  store i32 %711, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %712 = load i32, ptr %27, align 4, !tbaa !9
  %713 = icmp slt i32 %712, 0
  br i1 %713, label %717, label %714

714:                                              ; preds = %705
  %715 = load i32, ptr %27, align 4, !tbaa !9
  %716 = icmp sgt i32 %715, 4194304
  br i1 %716, label %717, label %719

717:                                              ; preds = %714, %705
  %718 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.3, ptr noundef %718)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %772

719:                                              ; preds = %714
  %720 = load i32, ptr %27, align 4, !tbaa !9
  %721 = sext i32 %720 to i64
  %722 = call noalias ptr @malloc(i64 noundef %721) #10
  store ptr %722, ptr %28, align 8, !tbaa !5
  %723 = load i32, ptr @debug_logging_mode, align 4, !tbaa !9
  %724 = icmp ne i32 %723, 0
  br i1 %724, label %725, label %744

725:                                              ; preds = %719
  %726 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %727 = getelementptr inbounds [4 x i8], ptr %726, i64 0, i64 0
  %728 = load i8, ptr %727, align 4, !tbaa !43
  %729 = sext i8 %728 to i32
  %730 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %731 = getelementptr inbounds [4 x i8], ptr %730, i64 0, i64 1
  %732 = load i8, ptr %731, align 1, !tbaa !43
  %733 = sext i8 %732 to i32
  %734 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %735 = getelementptr inbounds [4 x i8], ptr %734, i64 0, i64 2
  %736 = load i8, ptr %735, align 2, !tbaa !43
  %737 = sext i8 %736 to i32
  %738 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 0
  %739 = getelementptr inbounds [4 x i8], ptr %738, i64 0, i64 3
  %740 = load i8, ptr %739, align 1, !tbaa !43
  %741 = sext i8 %740 to i32
  %742 = getelementptr inbounds %struct.ChunkHeader, ptr %18, i32 0, i32 1
  %743 = load i32, ptr %742, align 4, !tbaa !16
  call void (ptr, ...) @error_line(ptr noundef @.str.26, i32 noundef %729, i32 noundef %733, i32 noundef %737, i32 noundef %741, i32 noundef %743)
  br label %744

744:                                              ; preds = %725, %719
  %745 = load ptr, ptr %7, align 8, !tbaa !5
  %746 = load ptr, ptr %28, align 8, !tbaa !5
  %747 = load i32, ptr %27, align 4, !tbaa !9
  %748 = call i32 @DoReadFile(ptr noundef %745, ptr noundef %746, i32 noundef %747, ptr noundef %21)
  %749 = icmp ne i32 %748, 0
  br i1 %749, label %750, label %766

750:                                              ; preds = %744
  %751 = load i32, ptr %21, align 4, !tbaa !9
  %752 = load i32, ptr %27, align 4, !tbaa !9
  %753 = icmp ne i32 %751, %752
  br i1 %753, label %766, label %754

754:                                              ; preds = %750
  %755 = load ptr, ptr %11, align 8, !tbaa !5
  %756 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %755, i32 0, i32 4
  %757 = load i32, ptr %756, align 8, !tbaa !13
  %758 = and i32 %757, 512
  %759 = icmp ne i32 %758, 0
  br i1 %759, label %770, label %760

760:                                              ; preds = %754
  %761 = load ptr, ptr %10, align 8, !tbaa !5
  %762 = load ptr, ptr %28, align 8, !tbaa !5
  %763 = load i32, ptr %27, align 4, !tbaa !9
  %764 = call i32 @WavpackStreamAddWrapper(ptr noundef %761, ptr noundef %762, i32 noundef %763)
  %765 = icmp ne i32 %764, 0
  br i1 %765, label %770, label %766

766:                                              ; preds = %760, %750, %744
  %767 = load ptr, ptr %10, align 8, !tbaa !5
  %768 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %767)
  call void (ptr, ...) @error_line(ptr noundef @.str.4, ptr noundef %768)
  %769 = load ptr, ptr %28, align 8, !tbaa !5
  call void @free(ptr noundef %769) #8
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %772

770:                                              ; preds = %760, %754
  %771 = load ptr, ptr %28, align 8, !tbaa !5
  call void @free(ptr noundef %771) #8
  store i32 0, ptr %22, align 4
  br label %772

772:                                              ; preds = %770, %766, %717
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  %773 = load i32, ptr %22, align 4
  switch i32 %773, label %789 [
    i32 0, label %774
  ]

774:                                              ; preds = %772
  br label %775

775:                                              ; preds = %774
  br label %776

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

777:                                              ; preds = %776, %194
  br label %80

778:                                              ; preds = %703
  %779 = load ptr, ptr %10, align 8, !tbaa !5
  %780 = load ptr, ptr %11, align 8, !tbaa !5
  %781 = load i64, ptr %15, align 8, !tbaa !11
  %782 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %779, ptr noundef %780, i64 noundef %781, ptr noundef null)
  %783 = icmp ne i32 %782, 0
  br i1 %783, label %788, label %784

784:                                              ; preds = %778
  %785 = load ptr, ptr %8, align 8, !tbaa !5
  %786 = load ptr, ptr %10, align 8, !tbaa !5
  %787 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %786)
  call void (ptr, ...) @error_line(ptr noundef @.str.27, ptr noundef %785, ptr noundef %787)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

788:                                              ; preds = %778
  store i32 0, ptr %6, align 4
  store i32 1, ptr %22, align 4
  br label %789

789:                                              ; preds = %788, %784, %772, %703, %565, %191, %161, %135, %123, %101, %89, %75, %63, %47
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 28, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  %790 = load i32, ptr %6, align 4
  ret i32 %790
}

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strncmp(ptr noundef, ptr noundef, i64 noundef) #2

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

declare i64 @DoGetFileSize(ptr noundef) #4

declare void @error_line(ptr noundef, ...) #4

; 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) #5

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

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

declare ptr @WavpackStreamGetErrorMessage(ptr noundef) #4

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

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

declare i64 @DoGetFilePosition(ptr noundef) #4

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

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { 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 #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 16}
!14 = !{!"", !15, i64 0, !15, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !7, i64 56, !7, i64 72, !10, i64 76, !6, i64 80}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !10, i64 4}
!17 = !{!"", !7, i64 0, !10, i64 4}
!18 = !{!19, !12, i64 0}
!19 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !10, i64 24}
!20 = !{!19, !12, i64 8}
!21 = !{!19, !12, i64 16}
!22 = !{!19, !10, i64 24}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!26, !27, i64 0}
!26 = !{!"", !27, i64 0, !27, i64 2, !10, i64 4, !10, i64 8, !27, i64 12, !27, i64 14, !27, i64 16, !27, i64 18, !10, i64 20, !27, i64 24, !7, i64 26}
!27 = !{!"short", !7, i64 0}
!28 = !{!26, !27, i64 2}
!29 = !{!26, !27, i64 14}
!30 = !{!26, !27, i64 12}
!31 = !{!26, !10, i64 4}
!32 = !{!26, !10, i64 8}
!33 = !{!26, !27, i64 16}
!34 = !{!26, !27, i64 18}
!35 = !{!26, !10, i64 20}
!36 = !{!26, !27, i64 24}
!37 = !{!14, !10, i64 8}
!38 = !{!14, !10, i64 52}
!39 = !{!14, !10, i64 32}
!40 = !{!14, !10, i64 12}
!41 = !{!14, !10, i64 28}
!42 = !{!14, !10, i64 48}
!43 = !{!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"

%struct.RiffChunkHeader = type { [4 x i8], i32, [4 x i8] }
%struct.ChunkHeader = type { [4 x i8], i32 }
%struct.WaveHeader = type { i16, i16, i32, i32, i16, i16, i16, i16, i32, i16, [14 x i8] }
%struct.DS64Chunk = type <{ i64, i64, i64, i32 }>
%struct.CS64Chunk = type <{ [4 x i8], i64 }>

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@debug_logging_mode = external local_unnamed_addr global i32, align 4
@.str.8 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @ParseRiffHeaderConfig(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca %struct.RiffChunkHeader, align 4
  %7 = alloca %struct.ChunkHeader, align 4
  %8 = alloca %struct.WaveHeader, align 4
  %9 = alloca %struct.DS64Chunk, align 8
  %10 = alloca i32, align 4
  %11 = alloca %struct.CS64Chunk, align 4
  %12 = tail call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str, i64 noundef 4) #7
  %13 = icmp ne i32 %12, 0
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(40) %8, i8 0, i64 40, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(28) %9, i8 0, i64 28, i1 false)
  %14 = tail call i64 @DoGetFileSize(ptr noundef %0) #8
  %15 = icmp sgt i64 %14, 4294967295
  %or.cond = select i1 %13, i1 %15, i1 false
  br i1 %or.cond, label %16, label %21

16:                                               ; preds = %5
  %17 = getelementptr inbounds i8, ptr %4, i64 16
  %18 = load i32, ptr %17, align 8, !tbaa !5
  %19 = and i32 %18, 2048
  %.not = icmp eq i32 %19, 0
  br i1 %.not, label %20, label %21

20:                                               ; preds = %16
  tail call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1) #8
  br label %.critedge240

21:                                               ; preds = %16, %5
  %22 = load i32, ptr %2, align 1
  store i32 %22, ptr %6, align 4
  %23 = getelementptr inbounds i8, ptr %6, i64 4
  %24 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %23, i32 noundef 8, ptr noundef nonnull %10) #8
  %25 = icmp eq i32 %24, 0
  %26 = load i32, ptr %10, align 4
  %27 = icmp ne i32 %26, 8
  %or.cond7 = select i1 %25, i1 true, i1 %27
  br i1 %or.cond7, label %31, label %28

28:                                               ; preds = %21
  %29 = getelementptr inbounds i8, ptr %6, i64 8
  %30 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %29, ptr noundef nonnull dereferenceable(1) @.str.2, i64 noundef 4) #7
  %.not188 = icmp eq i32 %30, 0
  br i1 %.not188, label %32, label %31

31:                                               ; preds = %28, %21
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

32:                                               ; preds = %28
  %33 = getelementptr inbounds i8, ptr %4, i64 16
  %34 = load i32, ptr %33, align 8, !tbaa !5
  %35 = and i32 %34, 512
  %.not189 = icmp eq i32 %35, 0
  br i1 %.not189, label %36, label %40

36:                                               ; preds = %32
  %37 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %6, i32 noundef 12) #8
  %.not190 = icmp eq i32 %37, 0
  br i1 %.not190, label %38, label %40

38:                                               ; preds = %36
  %39 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %39) #8
  br label %.critedge240

40:                                               ; preds = %32, %36
  %41 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %7, i32 noundef 8, ptr noundef nonnull %10) #8
  %42 = icmp eq i32 %41, 0
  %43 = load i32, ptr %10, align 4
  %44 = icmp ne i32 %43, 8
  %or.cond10277 = select i1 %42, i1 true, i1 %44
  br i1 %or.cond10277, label %._crit_edge, label %.lr.ph280

.lr.ph280:                                        ; preds = %40
  %45 = getelementptr inbounds i8, ptr %7, i64 4
  %46 = getelementptr inbounds i8, ptr %7, i64 1
  %47 = getelementptr inbounds i8, ptr %7, i64 2
  %48 = getelementptr inbounds i8, ptr %7, i64 3
  %49 = getelementptr inbounds i8, ptr %8, i64 2
  %50 = getelementptr inbounds i8, ptr %8, i64 14
  %51 = getelementptr inbounds i8, ptr %8, i64 12
  %52 = getelementptr inbounds i8, ptr %8, i64 4
  %53 = getelementptr inbounds i8, ptr %8, i64 8
  %54 = getelementptr inbounds i8, ptr %8, i64 16
  %55 = getelementptr inbounds i8, ptr %8, i64 18
  %56 = getelementptr inbounds i8, ptr %8, i64 20
  %57 = getelementptr inbounds i8, ptr %8, i64 24
  %58 = getelementptr inbounds i8, ptr %4, i64 8
  %59 = getelementptr inbounds i8, ptr %4, i64 52
  %60 = getelementptr inbounds i8, ptr %4, i64 32
  %61 = getelementptr inbounds i8, ptr %9, i64 8
  %62 = getelementptr inbounds i8, ptr %9, i64 16
  %63 = getelementptr inbounds i8, ptr %9, i64 24
  br label %64

._crit_edge:                                      ; preds = %.loopexit, %40
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

64:                                               ; preds = %.lr.ph280, %.loopexit
  %.0158279 = phi i32 [ 0, %.lr.ph280 ], [ %.1159, %.loopexit ]
  %.0160278 = phi i32 [ 0, %.lr.ph280 ], [ %.1161, %.loopexit ]
  %65 = load i32, ptr %33, align 8, !tbaa !5
  %66 = and i32 %65, 512
  %.not191 = icmp eq i32 %66, 0
  br i1 %.not191, label %67, label %71

67:                                               ; preds = %64
  %68 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %7, i32 noundef 8) #8
  %.not192 = icmp eq i32 %68, 0
  br i1 %.not192, label %69, label %71

69:                                               ; preds = %67
  %70 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %70) #8
  br label %.critedge240

71:                                               ; preds = %64, %67
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %7, ptr noundef nonnull @.str.5) #8
  %72 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.6, i64 noundef 4) #7
  %.not193 = icmp eq i32 %72, 0
  br i1 %.not193, label %73, label %118

73:                                               ; preds = %71
  %74 = load i32, ptr %45, align 4, !tbaa !12
  %75 = icmp ult i32 %74, 28
  br i1 %75, label %81, label %76

76:                                               ; preds = %73
  %77 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 28, ptr noundef nonnull %10) #8
  %78 = icmp eq i32 %77, 0
  %79 = load i32, ptr %10, align 4
  %80 = icmp ne i32 %79, 28
  %or.cond13 = select i1 %78, i1 true, i1 %80
  br i1 %or.cond13, label %81, label %82

81:                                               ; preds = %76, %73
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

82:                                               ; preds = %76
  %83 = load i32, ptr %33, align 8, !tbaa !5
  %84 = and i32 %83, 512
  %.not194 = icmp eq i32 %84, 0
  br i1 %.not194, label %85, label %89

85:                                               ; preds = %82
  %86 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %9, i32 noundef 28) #8
  %.not195 = icmp eq i32 %86, 0
  br i1 %.not195, label %87, label %89

87:                                               ; preds = %85
  %88 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %88) #8
  br label %.critedge240

89:                                               ; preds = %82, %85
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %9, ptr noundef nonnull @.str.7) #8
  %90 = load i32, ptr @debug_logging_mode, align 4, !tbaa !14
  %.not196 = icmp eq i32 %90, 0
  br i1 %.not196, label %96, label %91

91:                                               ; preds = %89
  %92 = load i64, ptr %9, align 8, !tbaa !15
  %93 = load i64, ptr %61, align 8, !tbaa !18
  %94 = load i64, ptr %62, align 8, !tbaa !19
  %95 = load i32, ptr %63, align 8, !tbaa !20
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.8, i64 noundef %92, i64 noundef %93, i64 noundef %94, i32 noundef %95) #8
  br label %96

96:                                               ; preds = %91, %89
  %97 = load i32, ptr %63, align 8, !tbaa !20
  %98 = zext i32 %97 to i64
  %99 = mul nuw nsw i64 %98, 12
  %100 = load i32, ptr %45, align 4, !tbaa !12
  %101 = zext i32 %100 to i64
  %102 = add nsw i64 %101, -28
  %.not197 = icmp eq i64 %99, %102
  br i1 %.not197, label %.preheader, label %104

.preheader:                                       ; preds = %96
  %103 = add i32 %97, -1
  store i32 %103, ptr %63, align 8, !tbaa !20
  %.not198276 = icmp eq i32 %97, 0
  br i1 %.not198276, label %.loopexit, label %.lr.ph

104:                                              ; preds = %96
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

.lr.ph:                                           ; preds = %.preheader, %115
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %11) #8
  %105 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %11, i32 noundef 12, ptr noundef nonnull %10) #8
  %106 = icmp eq i32 %105, 0
  %107 = load i32, ptr %10, align 4
  %108 = icmp ne i32 %107, 12
  %or.cond16 = select i1 %106, i1 true, i1 %108
  br i1 %or.cond16, label %.critedge, label %109

109:                                              ; preds = %.lr.ph
  %110 = load i32, ptr %33, align 8, !tbaa !5
  %111 = and i32 %110, 512
  %.not199 = icmp eq i32 %111, 0
  br i1 %.not199, label %112, label %115

112:                                              ; preds = %109
  %113 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %11, i32 noundef 12) #8
  %.not200 = icmp eq i32 %113, 0
  br i1 %.not200, label %.critedge, label %115

.critedge:                                        ; preds = %112, %.lr.ph
  %114 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %114) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #8
  br label %.critedge240

115:                                              ; preds = %109, %112
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %11) #8
  %116 = load i32, ptr %63, align 8, !tbaa !20
  %117 = add i32 %116, -1
  store i32 %117, ptr %63, align 8, !tbaa !20
  %.not198 = icmp eq i32 %116, 0
  br i1 %.not198, label %.loopexit, label %.lr.ph, !llvm.loop !21

118:                                              ; preds = %71
  %119 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.9, i64 noundef 4) #7
  %.not201 = icmp eq i32 %119, 0
  br i1 %.not201, label %120, label %242

120:                                              ; preds = %118
  %.not202 = icmp eq i32 %.0160278, 0
  br i1 %.not202, label %122, label %121

121:                                              ; preds = %120
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

122:                                              ; preds = %120
  %123 = load i32, ptr %45, align 4
  %124 = add i32 %123, -41
  %or.cond20 = icmp ult i32 %124, -25
  br i1 %or.cond20, label %130, label %125

125:                                              ; preds = %122
  %126 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %8, i32 noundef %123, ptr noundef nonnull %10) #8
  %.not203 = icmp eq i32 %126, 0
  br i1 %.not203, label %130, label %127

127:                                              ; preds = %125
  %128 = load i32, ptr %10, align 4, !tbaa !14
  %129 = load i32, ptr %45, align 4, !tbaa !12
  %.not204 = icmp eq i32 %128, %129
  br i1 %.not204, label %131, label %130

130:                                              ; preds = %127, %125, %122
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

131:                                              ; preds = %127
  %132 = load i32, ptr %33, align 8, !tbaa !5
  %133 = and i32 %132, 512
  %.not205 = icmp eq i32 %133, 0
  br i1 %.not205, label %134, label %138

134:                                              ; preds = %131
  %135 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %8, i32 noundef %128) #8
  %.not206 = icmp eq i32 %135, 0
  br i1 %.not206, label %136, label %138

136:                                              ; preds = %134
  %137 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %137) #8
  br label %.critedge240

138:                                              ; preds = %131, %134
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %8, ptr noundef nonnull @.str.10) #8
  %139 = load i32, ptr @debug_logging_mode, align 4, !tbaa !14
  %.not207 = icmp eq i32 %139, 0
  br i1 %.not207, label %thread-pre-split, label %140

140:                                              ; preds = %138
  %141 = load i32, ptr %45, align 4, !tbaa !12
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.11, i32 noundef %141) #8
  %142 = load i16, ptr %8, align 4, !tbaa !23
  %143 = zext i16 %142 to i32
  %144 = load i16, ptr %49, align 2, !tbaa !26
  %145 = zext i16 %144 to i32
  %146 = load i16, ptr %50, align 2, !tbaa !27
  %147 = zext i16 %146 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.12, i32 noundef %143, i32 noundef %145, i32 noundef %147) #8
  %148 = load i16, ptr %51, align 4, !tbaa !28
  %149 = zext i16 %148 to i32
  %150 = load i32, ptr %52, align 4, !tbaa !29
  %151 = load i32, ptr %53, align 4, !tbaa !30
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.13, i32 noundef %149, i32 noundef %150, i32 noundef %151) #8
  %152 = load i32, ptr %45, align 4
  %153 = icmp ugt i32 %152, 16
  br i1 %153, label %154, label %.thread.thread

154:                                              ; preds = %140
  %155 = load i16, ptr %54, align 4, !tbaa !31
  %156 = zext i16 %155 to i32
  %157 = load i16, ptr %55, align 2, !tbaa !32
  %158 = zext i16 %157 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.14, i32 noundef %156, i32 noundef %158) #8
  %.pr = load i32, ptr %45, align 4
  %159 = icmp ugt i32 %.pr, 20
  br i1 %159, label %160, label %.thread

160:                                              ; preds = %154
  %161 = load i32, ptr %56, align 4, !tbaa !33
  %162 = load i16, ptr %57, align 4, !tbaa !34
  %163 = zext i16 %162 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.15, i32 noundef %161, i32 noundef %163) #8
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %138, %160
  %.pr250 = load i32, ptr %45, align 4
  br label %.thread

.thread:                                          ; preds = %thread-pre-split, %154
  %164 = phi i32 [ %.pr250, %thread-pre-split ], [ %.pr, %154 ]
  %165 = icmp ugt i32 %164, 16
  %166 = load i16, ptr %54, align 4
  %167 = icmp eq i16 %166, 2
  %or.cond24 = select i1 %165, i1 %167, i1 false
  br i1 %or.cond24, label %168, label %.thread.thread

168:                                              ; preds = %.thread
  %169 = load i32, ptr %33, align 8, !tbaa !5
  %170 = or i32 %169, 256
  store i32 %170, ptr %33, align 8, !tbaa !5
  br label %.thread.thread

.thread.thread:                                   ; preds = %140, %168, %.thread
  %171 = phi i32 [ %164, %168 ], [ %164, %.thread ], [ %152, %140 ]
  %172 = load i16, ptr %8, align 4
  %173 = icmp eq i16 %172, -2
  %174 = icmp eq i32 %171, 40
  %or.cond27 = and i1 %174, %173
  %175 = load i16, ptr %57, align 4
  %.v = select i1 %or.cond27, i16 %175, i16 %172
  %176 = load i16, ptr %55, align 2
  %177 = icmp ne i16 %176, 0
  %or.cond31 = select i1 %174, i1 %177, i1 false
  %178 = load i16, ptr %50, align 2
  %.v208 = select i1 %or.cond31, i16 %176, i16 %178
  %179 = zext i16 %.v208 to i32
  store i32 %179, ptr %58, align 8, !tbaa !35
  %180 = and i16 %.v, -3
  %or.cond33.not = icmp ne i16 %180, 1
  %181 = icmp eq i16 %.v, 3
  %.not209 = icmp ne i16 %.v208, 32
  %.1165.v = select i1 %181, i1 %.not209, i1 %or.cond33.not
  %182 = load i16, ptr %49, align 2
  %183 = zext i16 %182 to i32
  %184 = add i16 %182, -257
  %or.cond37 = icmp ult i16 %184, -256
  br i1 %or.cond37, label %.thread294, label %185

185:                                              ; preds = %.thread.thread
  %186 = load i16, ptr %51, align 4, !tbaa !28
  %187 = udiv i16 %186, %182
  %188 = urem i16 %186, %182
  %.zext = zext i16 %187 to i32
  %189 = add nuw nsw i32 %179, 7
  %190 = lshr i32 %189, 3
  %191 = icmp ugt i32 %190, %.zext
  %192 = icmp ugt i16 %187, 4
  %or.cond237 = or i1 %192, %191
  %or.cond237.not = xor i1 %or.cond237, true
  %.not210 = icmp eq i16 %188, 0
  %or.cond352 = and i1 %or.cond237.not, %.not210
  br i1 %or.cond352, label %193, label %.thread294

193:                                              ; preds = %185
  %194 = add i16 %.v208, -33
  %or.cond238 = icmp ult i16 %194, -32
  %.not211 = select i1 %or.cond238, i1 true, i1 %.1165.v
  br i1 %.not211, label %.thread294, label %195

.thread294:                                       ; preds = %185, %.thread.thread, %193
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.16, ptr noundef %1) #8
  br label %.critedge240

195:                                              ; preds = %193
  %196 = icmp ult i32 %171, 40
  br i1 %196, label %197, label %210

197:                                              ; preds = %195
  %198 = load i32, ptr %59, align 4, !tbaa !36
  %.not216 = icmp eq i32 %198, 0
  br i1 %.not216, label %199, label %.thread251

199:                                              ; preds = %197
  %200 = load i32, ptr %33, align 8, !tbaa !5
  %201 = and i32 %200, 1024
  %.not217 = icmp eq i32 %201, 0
  br i1 %.not217, label %202, label %.thread251

202:                                              ; preds = %199
  %203 = icmp ult i16 %182, 3
  br i1 %203, label %204, label %206

204:                                              ; preds = %202
  %205 = sub nuw nsw i32 5, %183
  br label %.thread251.sink.split

206:                                              ; preds = %202
  %207 = icmp ult i16 %182, 19
  br i1 %207, label %208, label %.thread251.sink.split

208:                                              ; preds = %206
  %notmask = shl nsw i32 -1, %183
  %209 = xor i32 %notmask, -1
  br label %.thread251.sink.split

210:                                              ; preds = %195
  %211 = load i32, ptr %56, align 4, !tbaa !33
  %.not212 = icmp eq i32 %211, 0
  br i1 %.not212, label %.thread251, label %212

212:                                              ; preds = %210
  %213 = load i32, ptr %59, align 4, !tbaa !36
  %.not213 = icmp eq i32 %213, 0
  br i1 %.not213, label %214, label %217

214:                                              ; preds = %212
  %215 = load i32, ptr %33, align 8, !tbaa !5
  %216 = and i32 %215, 1024
  %.not214 = icmp eq i32 %216, 0
  br i1 %.not214, label %.thread251.sink.split, label %217

217:                                              ; preds = %214, %212
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.17) #8
  br label %.critedge240

.thread251.sink.split:                            ; preds = %214, %206, %204, %208
  %.sink = phi i32 [ %209, %208 ], [ %205, %204 ], [ 262143, %206 ], [ %211, %214 ]
  store i32 %.sink, ptr %59, align 4, !tbaa !36
  br label %.thread251

.thread251:                                       ; preds = %.thread251.sink.split, %210, %197, %199
  br i1 %181, label %218, label %219

218:                                              ; preds = %.thread251
  store i32 127, ptr %60, align 8, !tbaa !37
  br label %229

219:                                              ; preds = %.thread251
  %220 = load i32, ptr %33, align 8, !tbaa !5
  %221 = and i32 %220, 256
  %.not218 = icmp eq i32 %221, 0
  br i1 %.not218, label %229, label %222

222:                                              ; preds = %219
  %223 = load i16, ptr %51, align 4, !tbaa !28
  %224 = udiv i16 %223, %182
  %225 = icmp eq i16 %224, 4
  br i1 %225, label %226, label %229

226:                                              ; preds = %222
  switch i16 %178, label %228 [
    i16 24, label %.sink.split
    i16 32, label %227
  ]

227:                                              ; preds = %226
  br label %.sink.split

.sink.split:                                      ; preds = %226, %227
  %.sink312 = phi i32 [ 142, %227 ], [ 150, %226 ]
  store i32 %.sink312, ptr %60, align 8, !tbaa !37
  br label %228

228:                                              ; preds = %.sink.split, %226
  store i32 32, ptr %58, align 8, !tbaa !35
  br label %229

229:                                              ; preds = %219, %222, %228, %218
  %230 = phi i32 [ %179, %219 ], [ %179, %222 ], [ 32, %228 ], [ %179, %218 ]
  %231 = load i32, ptr @debug_logging_mode, align 4, !tbaa !14
  %.not219 = icmp eq i32 %231, 0
  br i1 %.not219, label %.loopexit, label %232

232:                                              ; preds = %229
  %233 = load i32, ptr %60, align 8, !tbaa !37
  switch i32 %233, label %235 [
    i32 127, label %234
    i32 0, label %238
  ]

234:                                              ; preds = %232
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.18) #8
  br label %.loopexit

235:                                              ; preds = %232
  %236 = add nsw i32 %233, -126
  %237 = sub nsw i32 150, %233
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.19, i32 noundef %236, i32 noundef %237) #8
  br label %.loopexit

238:                                              ; preds = %232
  %239 = load i16, ptr %51, align 4, !tbaa !28
  %240 = udiv i16 %239, %182
  %241 = zext i16 %240 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.20, i32 noundef %230, i32 noundef %241) #8
  br label %.loopexit

242:                                              ; preds = %118
  %243 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.21, i64 noundef 4) #7
  %.not221 = icmp eq i32 %243, 0
  br i1 %.not221, label %244, label %292

244:                                              ; preds = %242
  %245 = icmp ne i32 %.0158279, 0
  %246 = load i32, ptr %45, align 4
  %247 = icmp eq i32 %246, -1
  %or.cond40 = select i1 %245, i1 %247, i1 false
  %248 = load i64, ptr %61, align 8
  %249 = zext i32 %246 to i64
  %250 = select i1 %or.cond40, i64 %248, i64 %249
  %251 = load i16, ptr %49, align 2, !tbaa !26
  %.not222 = icmp ne i16 %251, 0
  %or.cond42 = select i1 %13, i1 true, i1 %245
  %or.cond241 = select i1 %.not222, i1 %or.cond42, i1 false
  br i1 %or.cond241, label %253, label %252

252:                                              ; preds = %244
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

253:                                              ; preds = %244
  %.not223 = icmp eq i64 %14, 0
  %254 = load i32, ptr %33, align 8, !tbaa !5
  %255 = and i32 %254, 2048
  %.not225 = icmp eq i32 %255, 0
  br i1 %.not223, label %260, label %256

256:                                              ; preds = %253
  %257 = sub nsw i64 %14, %250
  %258 = icmp sgt i64 %257, 16777216
  %or.cond243 = select i1 %.not225, i1 %258, i1 false
  br i1 %or.cond243, label %259, label %.thread252

259:                                              ; preds = %256
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.22) #8
  br label %.critedge240

260:                                              ; preds = %253
  br i1 %.not225, label %281, label %327

.thread252:                                       ; preds = %256
  br i1 %.not225, label %281, label %261

261:                                              ; preds = %.thread252
  %262 = call i64 @DoGetFilePosition(ptr noundef %0) #8
  %.not228 = icmp eq i64 %262, -1
  br i1 %.not228, label %327, label %263

263:                                              ; preds = %261
  %264 = call i64 @DoGetFilePosition(ptr noundef %0) #8
  %265 = sub nsw i64 %14, %264
  %266 = load i16, ptr %51, align 4, !tbaa !28
  %267 = zext i16 %266 to i64
  %268 = sdiv i64 %265, %267
  %269 = call i64 @DoGetFilePosition(ptr noundef %0) #8
  %270 = sub nsw i64 %14, %269
  %271 = load i16, ptr %51, align 4, !tbaa !28
  %272 = zext i16 %271 to i64
  %273 = srem i64 %270, %272
  %.not229 = icmp eq i64 %273, 0
  br i1 %.not229, label %327, label %274

274:                                              ; preds = %263
  %275 = call i64 @DoGetFilePosition(ptr noundef %0) #8
  %276 = sub nsw i64 %14, %275
  %277 = load i16, ptr %51, align 4, !tbaa !28
  %278 = zext i16 %277 to i64
  %279 = srem i64 %276, %278
  %280 = trunc nsw i64 %279 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.23, i32 noundef %280) #8
  br label %327

281:                                              ; preds = %.thread252, %260
  %282 = load i16, ptr %51, align 4, !tbaa !28
  %283 = zext i16 %282 to i64
  %284 = sdiv i64 %250, %283
  %285 = load i64, ptr %62, align 8
  %.not226 = icmp ne i64 %284, %285
  %or.cond246.not = select i1 %245, i1 %.not226, i1 false
  br i1 %or.cond246.not, label %286, label %287

286:                                              ; preds = %281
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

287:                                              ; preds = %281
  %.not227 = icmp eq i64 %284, 0
  br i1 %.not227, label %288, label %289

288:                                              ; preds = %287
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.24) #8
  br label %.critedge240

289:                                              ; preds = %287
  %290 = icmp sgt i64 %284, 1099511627519
  br i1 %290, label %291, label %327

291:                                              ; preds = %289
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.25, ptr noundef %1) #8
  br label %.critedge240

292:                                              ; preds = %242
  %293 = load i32, ptr %45, align 4, !tbaa !12
  %294 = add i32 %293, 1
  %295 = and i32 %294, -2
  %296 = icmp slt i32 %294, 0
  %297 = icmp sgt i32 %295, 4194304
  %or.cond44 = or i1 %296, %297
  br i1 %or.cond44, label %298, label %299

298:                                              ; preds = %292
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.3, ptr noundef %1) #8
  br label %.critedge240

299:                                              ; preds = %292
  %300 = zext nneg i32 %295 to i64
  %301 = call noalias ptr @malloc(i64 noundef %300) #9
  %302 = load i32, ptr @debug_logging_mode, align 4, !tbaa !14
  %.not231 = icmp eq i32 %302, 0
  br i1 %.not231, label %312, label %303

303:                                              ; preds = %299
  %304 = load i8, ptr %7, align 4, !tbaa !38
  %305 = sext i8 %304 to i32
  %306 = load i8, ptr %46, align 1, !tbaa !38
  %307 = sext i8 %306 to i32
  %308 = load i8, ptr %47, align 2, !tbaa !38
  %309 = sext i8 %308 to i32
  %310 = load i8, ptr %48, align 1, !tbaa !38
  %311 = sext i8 %310 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.26, i32 noundef %305, i32 noundef %307, i32 noundef %309, i32 noundef %311, i32 noundef %293) #8
  br label %312

312:                                              ; preds = %303, %299
  %313 = call i32 @DoReadFile(ptr noundef %0, ptr noundef %301, i32 noundef %295, ptr noundef nonnull %10) #8
  %.not232 = icmp ne i32 %313, 0
  %314 = load i32, ptr %10, align 4
  %.not233 = icmp eq i32 %314, %295
  %or.cond247 = select i1 %.not232, i1 %.not233, i1 false
  br i1 %or.cond247, label %315, label %320

315:                                              ; preds = %312
  %316 = load i32, ptr %33, align 8, !tbaa !5
  %317 = and i32 %316, 512
  %.not234 = icmp eq i32 %317, 0
  br i1 %.not234, label %318, label %322

318:                                              ; preds = %315
  %319 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef %301, i32 noundef %295) #8
  %.not235 = icmp eq i32 %319, 0
  br i1 %.not235, label %320, label %322

320:                                              ; preds = %318, %312
  %321 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %321) #8
  call void @free(ptr noundef %301) #8
  br label %.critedge240

322:                                              ; preds = %318, %315
  call void @free(ptr noundef %301) #8
  br label %.loopexit

.loopexit:                                        ; preds = %115, %.preheader, %322, %234, %238, %235, %229
  %.1161 = phi i32 [ %.0160278, %322 ], [ 1, %229 ], [ 1, %235 ], [ 1, %238 ], [ 1, %234 ], [ %.0160278, %.preheader ], [ %.0160278, %115 ]
  %.1159 = phi i32 [ %.0158279, %322 ], [ %.0158279, %229 ], [ %.0158279, %235 ], [ %.0158279, %238 ], [ %.0158279, %234 ], [ 1, %.preheader ], [ 1, %115 ]
  %323 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %7, i32 noundef 8, ptr noundef nonnull %10) #8
  %324 = icmp eq i32 %323, 0
  %325 = load i32, ptr %10, align 4
  %326 = icmp ne i32 %325, 8
  %or.cond10 = select i1 %324, i1 true, i1 %326
  br i1 %or.cond10, label %._crit_edge, label %64

327:                                              ; preds = %260, %261, %289, %274, %263
  %.0162 = phi i64 [ %268, %274 ], [ %268, %263 ], [ %284, %289 ], [ -1, %261 ], [ -1, %260 ]
  %328 = load i16, ptr %51, align 4, !tbaa !28
  %329 = load i16, ptr %49, align 2, !tbaa !26
  %330 = udiv i16 %328, %329
  %331 = zext i16 %330 to i32
  %332 = getelementptr inbounds i8, ptr %4, i64 12
  store i32 %331, ptr %332, align 4, !tbaa !39
  %333 = zext i16 %329 to i32
  %334 = getelementptr inbounds i8, ptr %4, i64 28
  store i32 %333, ptr %334, align 4, !tbaa !40
  %335 = load i32, ptr %52, align 4, !tbaa !29
  %336 = getelementptr inbounds i8, ptr %4, i64 48
  store i32 %335, ptr %336, align 8, !tbaa !41
  %337 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %3, ptr noundef nonnull %4, i64 noundef %.0162, ptr noundef null) #8
  %.not230 = icmp eq i32 %337, 0
  br i1 %.not230, label %338, label %.critedge240

338:                                              ; preds = %327
  %339 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #8
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.27, ptr noundef %1, ptr noundef %339) #8
  br label %.critedge240

.critedge240:                                     ; preds = %252, %259, %288, %291, %286, %298, %320, %121, %130, %217, %.thread294, %136, %327, %.critedge, %338, %104, %87, %81, %69, %._crit_edge, %38, %31, %20
  %.7 = phi i32 [ 1, %31 ], [ 1, %._crit_edge ], [ 1, %338 ], [ 1, %81 ], [ 1, %104 ], [ 1, %87 ], [ 1, %69 ], [ 1, %38 ], [ 1, %20 ], [ 1, %.critedge ], [ 0, %327 ], [ 1, %136 ], [ 1, %.thread294 ], [ 1, %217 ], [ 1, %130 ], [ 1, %121 ], [ 1, %320 ], [ 1, %298 ], [ 1, %286 ], [ 1, %291 ], [ 1, %288 ], [ 1, %259 ], [ 1, %252 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #8
  ret i32 %.7
}

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

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

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

declare i64 @DoGetFileSize(ptr noundef) local_unnamed_addr #4

declare void @error_line(ptr noundef, ...) local_unnamed_addr #4

declare i32 @DoReadFile(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare i32 @WavpackStreamAddWrapper(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare ptr @WavpackStreamGetErrorMessage(ptr noundef) local_unnamed_addr #4

declare void @WavpackStreamLittleEndianToNative(ptr noundef, ptr noundef) local_unnamed_addr #4

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

declare i64 @DoGetFilePosition(ptr noundef) local_unnamed_addr #4

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

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

declare i32 @WavpackStreamSetConfiguration64(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { 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 #7 = { nounwind willreturn memory(read) }
attributes #8 = { nounwind }
attributes #9 = { 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, !10, i64 16}
!6 = !{!"", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !8, i64 56, !8, i64 72, !10, i64 76, !11, i64 80}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!13, !10, i64 4}
!13 = !{!"", !8, i64 0, !10, i64 4}
!14 = !{!10, !10, i64 0}
!15 = !{!16, !17, i64 0}
!16 = !{!"", !17, i64 0, !17, i64 8, !17, i64 16, !10, i64 24}
!17 = !{!"long", !8, i64 0}
!18 = !{!16, !17, i64 8}
!19 = !{!16, !17, i64 16}
!20 = !{!16, !10, i64 24}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !25, i64 0}
!24 = !{!"", !25, i64 0, !25, i64 2, !10, i64 4, !10, i64 8, !25, i64 12, !25, i64 14, !25, i64 16, !25, i64 18, !10, i64 20, !25, i64 24, !8, i64 26}
!25 = !{!"short", !8, i64 0}
!26 = !{!24, !25, i64 2}
!27 = !{!24, !25, i64 14}
!28 = !{!24, !25, i64 12}
!29 = !{!24, !10, i64 4}
!30 = !{!24, !10, i64 8}
!31 = !{!24, !25, i64 16}
!32 = !{!24, !25, i64 18}
!33 = !{!24, !10, i64 20}
!34 = !{!24, !25, i64 24}
!35 = !{!6, !10, i64 8}
!36 = !{!6, !10, i64 52}
!37 = !{!6, !10, i64 32}
!38 = !{!8, !8, i64 0}
!39 = !{!6, !10, i64 12}
!40 = !{!6, !10, i64 28}
!41 = !{!6, !10, i64 48}


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