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

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

@riff_guid = external hidden constant [16 x i8], align 16
@wave_guid = external hidden constant [16 x i8], align 16
@.str = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@fmt_guid = external hidden constant [16 x i8], align 16
@.str.3 = external hidden unnamed_addr constant [11 x i8], align 1
@debug_logging_mode = external global i32, align 4
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [50 x i8], align 1
@data_guid = external hidden constant [16 x i8], align 16
@.str.13 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @ParseWave64HeaderConfig(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 i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca %struct.Wave64ChunkHeader, align 8
  %15 = alloca %struct.Wave64FileHeader, align 8
  %16 = alloca %struct.WaveHeader, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = 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 8, ptr %12) #7
  store i64 0, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %24 = load ptr, ptr %7, align 8, !tbaa !5
  %25 = call i64 @DoGetFileSize(ptr noundef %24)
  store i64 %25, ptr %13, align 8, !tbaa !9
  %26 = load ptr, ptr %9, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %15, ptr align 1 %26, i64 4, i1 false)
  %27 = load ptr, ptr %7, align 8, !tbaa !5
  %28 = getelementptr inbounds i8, ptr %15, i64 4
  %29 = call i32 @DoReadFile(ptr noundef %27, ptr noundef %28, i32 noundef 36, ptr noundef %18)
  %30 = icmp ne i32 %29, 0
  br i1 %30, label %31, label %45

31:                                               ; preds = %5
  %32 = load i32, ptr %18, align 4, !tbaa !11
  %33 = zext i32 %32 to i64
  %34 = icmp ne i64 %33, 36
  br i1 %34, label %45, label %35

35:                                               ; preds = %31
  %36 = getelementptr inbounds %struct.Wave64FileHeader, ptr %15, i32 0, i32 0
  %37 = getelementptr inbounds [16 x i8], ptr %36, i64 0, i64 0
  %38 = call i32 @memcmp(ptr noundef %37, ptr noundef @riff_guid, i64 noundef 16) #8
  %39 = icmp ne i32 %38, 0
  br i1 %39, label %45, label %40

40:                                               ; preds = %35
  %41 = getelementptr inbounds %struct.Wave64FileHeader, ptr %15, i32 0, i32 2
  %42 = getelementptr inbounds [16 x i8], ptr %41, i64 0, i64 0
  %43 = call i32 @memcmp(ptr noundef %42, ptr noundef @wave_guid, i64 noundef 16) #8
  %44 = icmp ne i32 %43, 0
  br i1 %44, label %45, label %47

45:                                               ; preds = %40, %35, %31, %5
  %46 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %46)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

47:                                               ; preds = %40
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %48, i32 0, i32 4
  %50 = load i32, ptr %49, align 8, !tbaa !13
  %51 = and i32 %50, 512
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %60, label %53

53:                                               ; preds = %47
  %54 = load ptr, ptr %10, align 8, !tbaa !5
  %55 = call i32 @WavpackStreamAddWrapper(ptr noundef %54, ptr noundef %15, i32 noundef 40)
  %56 = icmp ne i32 %55, 0
  br i1 %56, label %60, label %57

57:                                               ; preds = %53
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  %59 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %58)
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %59)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

60:                                               ; preds = %53, %47
  br label %61

61:                                               ; preds = %60
  call void @WavpackStreamLittleEndianToNative(ptr noundef %15, ptr noundef @.str.2)
  %62 = load i64, ptr %13, align 8, !tbaa !9
  %63 = icmp ne i64 %62, 0
  br i1 %63, label %64, label %86

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

70:                                               ; preds = %64
  %71 = getelementptr inbounds %struct.Wave64FileHeader, ptr %15, i32 0, i32 1
  %72 = load i64, ptr %71, align 8, !tbaa !16
  %73 = icmp ne i64 %72, 0
  br i1 %73, label %74, label %86

74:                                               ; preds = %70
  %75 = getelementptr inbounds %struct.Wave64FileHeader, ptr %15, i32 0, i32 1
  %76 = load i64, ptr %75, align 8, !tbaa !16
  %77 = add nsw i64 %76, 1
  %78 = icmp ne i64 %77, 0
  br i1 %78, label %79, label %86

79:                                               ; preds = %74
  %80 = getelementptr inbounds %struct.Wave64FileHeader, ptr %15, i32 0, i32 1
  %81 = load i64, ptr %80, align 8, !tbaa !16
  %82 = load i64, ptr %13, align 8, !tbaa !9
  %83 = icmp ne i64 %81, %82
  br i1 %83, label %84, label %86

84:                                               ; preds = %79
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %85)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

86:                                               ; preds = %79, %74, %70, %64, %61
  br label %87

87:                                               ; preds = %636, %86
  br label %88

88:                                               ; preds = %87
  %89 = load ptr, ptr %7, align 8, !tbaa !5
  %90 = call i32 @DoReadFile(ptr noundef %89, ptr noundef %14, i32 noundef 24, ptr noundef %18)
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %92, label %96

92:                                               ; preds = %88
  %93 = load i32, ptr %18, align 4, !tbaa !11
  %94 = zext i32 %93 to i64
  %95 = icmp ne i64 %94, 24
  br i1 %95, label %96, label %98

96:                                               ; preds = %92, %88
  %97 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %97)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

98:                                               ; preds = %92
  %99 = load ptr, ptr %11, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %99, i32 0, i32 4
  %101 = load i32, ptr %100, align 8, !tbaa !13
  %102 = and i32 %101, 512
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %111, label %104

104:                                              ; preds = %98
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = call i32 @WavpackStreamAddWrapper(ptr noundef %105, ptr noundef %14, i32 noundef 24)
  %107 = icmp ne i32 %106, 0
  br i1 %107, label %111, label %108

108:                                              ; preds = %104
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %109)
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %110)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

111:                                              ; preds = %104, %98
  br label %112

112:                                              ; preds = %111
  call void @WavpackStreamLittleEndianToNative(ptr noundef %14, ptr noundef @.str.2)
  %113 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %114 = load i64, ptr %113, align 8, !tbaa !18
  %115 = sub i64 %114, 24
  store i64 %115, ptr %113, align 8, !tbaa !18
  %116 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %117 = getelementptr inbounds [16 x i8], ptr %116, i64 0, i64 0
  %118 = call i32 @memcmp(ptr noundef %117, ptr noundef @fmt_guid, i64 noundef 16) #8
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %478, label %120

120:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  store i32 1, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %121 = load i32, ptr %17, align 4, !tbaa !11
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %17, align 4, !tbaa !11
  %123 = icmp ne i32 %121, 0
  br i1 %123, label %124, label %126

124:                                              ; preds = %120
  %125 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %125)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %475

126:                                              ; preds = %120
  %127 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %128 = load i64, ptr %127, align 8, !tbaa !18
  %129 = add nsw i64 %128, 7
  %130 = and i64 %129, -8
  %131 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  store i64 %130, ptr %131, align 8, !tbaa !18
  %132 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %133 = load i64, ptr %132, align 8, !tbaa !18
  %134 = icmp slt i64 %133, 16
  br i1 %134, label %152, label %135

135:                                              ; preds = %126
  %136 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %137 = load i64, ptr %136, align 8, !tbaa !18
  %138 = icmp ugt i64 %137, 40
  br i1 %138, label %152, label %139

139:                                              ; preds = %135
  %140 = load ptr, ptr %7, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %142 = load i64, ptr %141, align 8, !tbaa !18
  %143 = trunc i64 %142 to i32
  %144 = call i32 @DoReadFile(ptr noundef %140, ptr noundef %16, i32 noundef %143, ptr noundef %18)
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %152

146:                                              ; preds = %139
  %147 = load i32, ptr %18, align 4, !tbaa !11
  %148 = zext i32 %147 to i64
  %149 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %150 = load i64, ptr %149, align 8, !tbaa !18
  %151 = icmp ne i64 %148, %150
  br i1 %151, label %152, label %154

152:                                              ; preds = %146, %139, %135, %126
  %153 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %153)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %475

154:                                              ; preds = %146
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %155, i32 0, i32 4
  %157 = load i32, ptr %156, align 8, !tbaa !13
  %158 = and i32 %157, 512
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %170, label %160

160:                                              ; preds = %154
  %161 = load ptr, ptr %10, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %163 = load i64, ptr %162, align 8, !tbaa !18
  %164 = trunc i64 %163 to i32
  %165 = call i32 @WavpackStreamAddWrapper(ptr noundef %161, ptr noundef %16, i32 noundef %164)
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %170, label %167

167:                                              ; preds = %160
  %168 = load ptr, ptr %10, align 8, !tbaa !5
  %169 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %168)
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %169)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %475

170:                                              ; preds = %160, %154
  br label %171

171:                                              ; preds = %170
  call void @WavpackStreamLittleEndianToNative(ptr noundef %16, ptr noundef @.str.3)
  %172 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %173 = icmp ne i32 %172, 0
  br i1 %173, label %174, label %214

174:                                              ; preds = %171
  %175 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %176 = load i64, ptr %175, align 8, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.4, i64 noundef %176)
  %177 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 0
  %178 = load i16, ptr %177, align 4, !tbaa !20
  %179 = zext i16 %178 to i32
  %180 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %181 = load i16, ptr %180, align 2, !tbaa !23
  %182 = zext i16 %181 to i32
  %183 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 5
  %184 = load i16, ptr %183, align 2, !tbaa !24
  %185 = zext i16 %184 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.5, i32 noundef %179, i32 noundef %182, i32 noundef %185)
  %186 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %187 = load i16, ptr %186, align 4, !tbaa !25
  %188 = zext i16 %187 to i32
  %189 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 2
  %190 = load i32, ptr %189, align 4, !tbaa !26
  %191 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 3
  %192 = load i32, ptr %191, align 4, !tbaa !27
  call void (ptr, ...) @error_line(ptr noundef @.str.6, i32 noundef %188, i32 noundef %190, i32 noundef %192)
  %193 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %194 = load i64, ptr %193, align 8, !tbaa !18
  %195 = icmp sgt i64 %194, 16
  br i1 %195, label %196, label %203

196:                                              ; preds = %174
  %197 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 6
  %198 = load i16, ptr %197, align 4, !tbaa !28
  %199 = zext i16 %198 to i32
  %200 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 7
  %201 = load i16, ptr %200, align 2, !tbaa !29
  %202 = zext i16 %201 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.7, i32 noundef %199, i32 noundef %202)
  br label %203

203:                                              ; preds = %196, %174
  %204 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %205 = load i64, ptr %204, align 8, !tbaa !18
  %206 = icmp sgt i64 %205, 20
  br i1 %206, label %207, label %213

207:                                              ; preds = %203
  %208 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 8
  %209 = load i32, ptr %208, align 4, !tbaa !30
  %210 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 9
  %211 = load i16, ptr %210, align 4, !tbaa !31
  %212 = zext i16 %211 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.8, i32 noundef %209, i32 noundef %212)
  br label %213

213:                                              ; preds = %207, %203
  br label %214

214:                                              ; preds = %213, %171
  %215 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %216 = load i64, ptr %215, align 8, !tbaa !18
  %217 = icmp sgt i64 %216, 16
  br i1 %217, label %218, label %228

218:                                              ; preds = %214
  %219 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 6
  %220 = load i16, ptr %219, align 4, !tbaa !28
  %221 = zext i16 %220 to i32
  %222 = icmp eq i32 %221, 2
  br i1 %222, label %223, label %228

223:                                              ; preds = %218
  %224 = load ptr, ptr %11, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %224, i32 0, i32 4
  %226 = load i32, ptr %225, align 8, !tbaa !13
  %227 = or i32 %226, 256
  store i32 %227, ptr %225, align 8, !tbaa !13
  br label %228

228:                                              ; preds = %223, %218, %214
  %229 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 0
  %230 = load i16, ptr %229, align 4, !tbaa !20
  %231 = zext i16 %230 to i32
  %232 = icmp eq i32 %231, 65534
  br i1 %232, label %233, label %241

233:                                              ; preds = %228
  %234 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %235 = load i64, ptr %234, align 8, !tbaa !18
  %236 = icmp eq i64 %235, 40
  br i1 %236, label %237, label %241

237:                                              ; preds = %233
  %238 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 9
  %239 = load i16, ptr %238, align 4, !tbaa !31
  %240 = zext i16 %239 to i32
  br label %245

241:                                              ; preds = %233, %228
  %242 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 0
  %243 = load i16, ptr %242, align 4, !tbaa !20
  %244 = zext i16 %243 to i32
  br label %245

245:                                              ; preds = %241, %237
  %246 = phi i32 [ %240, %237 ], [ %244, %241 ]
  store i32 %246, ptr %21, align 4, !tbaa !11
  %247 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %248 = load i64, ptr %247, align 8, !tbaa !18
  %249 = icmp eq i64 %248, 40
  br i1 %249, label %250, label %259

250:                                              ; preds = %245
  %251 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 7
  %252 = load i16, ptr %251, align 2, !tbaa !29
  %253 = zext i16 %252 to i32
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %259

255:                                              ; preds = %250
  %256 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 7
  %257 = load i16, ptr %256, align 2, !tbaa !29
  %258 = zext i16 %257 to i32
  br label %263

259:                                              ; preds = %250, %245
  %260 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 5
  %261 = load i16, ptr %260, align 2, !tbaa !24
  %262 = zext i16 %261 to i32
  br label %263

263:                                              ; preds = %259, %255
  %264 = phi i32 [ %258, %255 ], [ %262, %259 ]
  %265 = load ptr, ptr %11, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %265, i32 0, i32 2
  store i32 %264, ptr %266, align 8, !tbaa !32
  %267 = load i32, ptr %21, align 4, !tbaa !11
  %268 = icmp ne i32 %267, 1
  br i1 %268, label %269, label %273

269:                                              ; preds = %263
  %270 = load i32, ptr %21, align 4, !tbaa !11
  %271 = icmp ne i32 %270, 3
  br i1 %271, label %272, label %273

272:                                              ; preds = %269
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %273

273:                                              ; preds = %272, %269, %263
  %274 = load i32, ptr %21, align 4, !tbaa !11
  %275 = icmp eq i32 %274, 3
  br i1 %275, label %276, label %282

276:                                              ; preds = %273
  %277 = load ptr, ptr %11, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %277, i32 0, i32 2
  %279 = load i32, ptr %278, align 8, !tbaa !32
  %280 = icmp ne i32 %279, 32
  br i1 %280, label %281, label %282

281:                                              ; preds = %276
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %282

282:                                              ; preds = %281, %276, %273
  %283 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %284 = load i16, ptr %283, align 2, !tbaa !23
  %285 = icmp ne i16 %284, 0
  br i1 %285, label %286, label %323

286:                                              ; preds = %282
  %287 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %288 = load i16, ptr %287, align 2, !tbaa !23
  %289 = zext i16 %288 to i32
  %290 = icmp sgt i32 %289, 256
  br i1 %290, label %323, label %291

291:                                              ; preds = %286
  %292 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %293 = load i16, ptr %292, align 4, !tbaa !25
  %294 = zext i16 %293 to i32
  %295 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %296 = load i16, ptr %295, align 2, !tbaa !23
  %297 = zext i16 %296 to i32
  %298 = sdiv i32 %294, %297
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %299, i32 0, i32 2
  %301 = load i32, ptr %300, align 8, !tbaa !32
  %302 = add nsw i32 %301, 7
  %303 = sdiv i32 %302, 8
  %304 = icmp slt i32 %298, %303
  br i1 %304, label %323, label %305

305:                                              ; preds = %291
  %306 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %307 = load i16, ptr %306, align 4, !tbaa !25
  %308 = zext i16 %307 to i32
  %309 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %310 = load i16, ptr %309, align 2, !tbaa !23
  %311 = zext i16 %310 to i32
  %312 = sdiv i32 %308, %311
  %313 = icmp sgt i32 %312, 4
  br i1 %313, label %323, label %314

314:                                              ; preds = %305
  %315 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %316 = load i16, ptr %315, align 4, !tbaa !25
  %317 = zext i16 %316 to i32
  %318 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %319 = load i16, ptr %318, align 2, !tbaa !23
  %320 = zext i16 %319 to i32
  %321 = srem i32 %317, %320
  %322 = icmp ne i32 %321, 0
  br i1 %322, label %323, label %324

323:                                              ; preds = %314, %305, %291, %286, %282
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %324

324:                                              ; preds = %323, %314
  %325 = load ptr, ptr %11, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %325, i32 0, i32 2
  %327 = load i32, ptr %326, align 8, !tbaa !32
  %328 = icmp slt i32 %327, 1
  br i1 %328, label %334, label %329

329:                                              ; preds = %324
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %330, i32 0, i32 2
  %332 = load i32, ptr %331, align 8, !tbaa !32
  %333 = icmp sgt i32 %332, 32
  br i1 %333, label %334, label %335

334:                                              ; preds = %329, %324
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %335

335:                                              ; preds = %334, %329
  %336 = load i32, ptr %20, align 4, !tbaa !11
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %340, label %338

338:                                              ; preds = %335
  %339 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.9, ptr noundef %339)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %475

340:                                              ; preds = %335
  %341 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %342 = load i64, ptr %341, align 8, !tbaa !18
  %343 = icmp slt i64 %342, 40
  br i1 %343, label %344, label %386

344:                                              ; preds = %340
  %345 = load ptr, ptr %11, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %345, i32 0, i32 13
  %347 = load i32, ptr %346, align 4, !tbaa !33
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %385, label %349

349:                                              ; preds = %344
  %350 = load ptr, ptr %11, align 8, !tbaa !5
  %351 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %350, i32 0, i32 4
  %352 = load i32, ptr %351, align 8, !tbaa !13
  %353 = and i32 %352, 1024
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %385, label %355

355:                                              ; preds = %349
  %356 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %357 = load i16, ptr %356, align 2, !tbaa !23
  %358 = zext i16 %357 to i32
  %359 = icmp sle i32 %358, 2
  br i1 %359, label %360, label %367

360:                                              ; preds = %355
  %361 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %362 = load i16, ptr %361, align 2, !tbaa !23
  %363 = zext i16 %362 to i32
  %364 = sub nsw i32 5, %363
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %365, i32 0, i32 13
  store i32 %364, ptr %366, align 4, !tbaa !33
  br label %384

367:                                              ; preds = %355
  %368 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %369 = load i16, ptr %368, align 2, !tbaa !23
  %370 = zext i16 %369 to i32
  %371 = icmp sle i32 %370, 18
  br i1 %371, label %372, label %380

372:                                              ; preds = %367
  %373 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %374 = load i16, ptr %373, align 2, !tbaa !23
  %375 = zext i16 %374 to i32
  %376 = shl i32 1, %375
  %377 = sub nsw i32 %376, 1
  %378 = load ptr, ptr %11, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %378, i32 0, i32 13
  store i32 %377, ptr %379, align 4, !tbaa !33
  br label %383

380:                                              ; preds = %367
  %381 = load ptr, ptr %11, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %381, i32 0, i32 13
  store i32 262143, ptr %382, align 4, !tbaa !33
  br label %383

383:                                              ; preds = %380, %372
  br label %384

384:                                              ; preds = %383, %360
  br label %385

385:                                              ; preds = %384, %349, %344
  br label %413

386:                                              ; preds = %340
  %387 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 8
  %388 = load i32, ptr %387, align 4, !tbaa !30
  %389 = icmp ne i32 %388, 0
  br i1 %389, label %390, label %402

390:                                              ; preds = %386
  %391 = load ptr, ptr %11, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %391, i32 0, i32 13
  %393 = load i32, ptr %392, align 4, !tbaa !33
  %394 = icmp ne i32 %393, 0
  br i1 %394, label %401, label %395

395:                                              ; preds = %390
  %396 = load ptr, ptr %11, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %396, i32 0, i32 4
  %398 = load i32, ptr %397, align 8, !tbaa !13
  %399 = and i32 %398, 1024
  %400 = icmp ne i32 %399, 0
  br i1 %400, label %401, label %402

401:                                              ; preds = %395, %390
  call void (ptr, ...) @error_line(ptr noundef @.str.10)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %475

402:                                              ; preds = %395, %386
  %403 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 8
  %404 = load i32, ptr %403, align 4, !tbaa !30
  %405 = icmp ne i32 %404, 0
  br i1 %405, label %406, label %411

406:                                              ; preds = %402
  %407 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 8
  %408 = load i32, ptr %407, align 4, !tbaa !30
  %409 = load ptr, ptr %11, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %409, i32 0, i32 13
  store i32 %408, ptr %410, align 4, !tbaa !33
  br label %411

411:                                              ; preds = %406, %402
  br label %412

412:                                              ; preds = %411
  br label %413

413:                                              ; preds = %412, %385
  %414 = load i32, ptr %21, align 4, !tbaa !11
  %415 = icmp eq i32 %414, 3
  br i1 %415, label %416, label %419

416:                                              ; preds = %413
  %417 = load ptr, ptr %11, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %417, i32 0, i32 8
  store i32 127, ptr %418, align 8, !tbaa !34
  br label %453

419:                                              ; preds = %413
  %420 = load ptr, ptr %11, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %420, i32 0, i32 4
  %422 = load i32, ptr %421, align 8, !tbaa !13
  %423 = and i32 %422, 256
  %424 = icmp ne i32 %423, 0
  br i1 %424, label %425, label %452

425:                                              ; preds = %419
  %426 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %427 = load i16, ptr %426, align 4, !tbaa !25
  %428 = zext i16 %427 to i32
  %429 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %430 = load i16, ptr %429, align 2, !tbaa !23
  %431 = zext i16 %430 to i32
  %432 = sdiv i32 %428, %431
  %433 = icmp eq i32 %432, 4
  br i1 %433, label %434, label %452

434:                                              ; preds = %425
  %435 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 5
  %436 = load i16, ptr %435, align 2, !tbaa !24
  %437 = zext i16 %436 to i32
  %438 = icmp eq i32 %437, 24
  br i1 %438, label %439, label %442

439:                                              ; preds = %434
  %440 = load ptr, ptr %11, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %440, i32 0, i32 8
  store i32 150, ptr %441, align 8, !tbaa !34
  br label %451

442:                                              ; preds = %434
  %443 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 5
  %444 = load i16, ptr %443, align 2, !tbaa !24
  %445 = zext i16 %444 to i32
  %446 = icmp eq i32 %445, 32
  br i1 %446, label %447, label %450

447:                                              ; preds = %442
  %448 = load ptr, ptr %11, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %448, i32 0, i32 8
  store i32 142, ptr %449, align 8, !tbaa !34
  br label %450

450:                                              ; preds = %447, %442
  br label %451

451:                                              ; preds = %450, %439
  br label %452

452:                                              ; preds = %451, %425, %419
  br label %453

453:                                              ; preds = %452, %416
  %454 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %474

456:                                              ; preds = %453
  %457 = load ptr, ptr %11, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %457, i32 0, i32 8
  %459 = load i32, ptr %458, align 8, !tbaa !34
  %460 = icmp eq i32 %459, 127
  br i1 %460, label %461, label %462

461:                                              ; preds = %456
  call void (ptr, ...) @error_line(ptr noundef @.str.11)
  br label %473

462:                                              ; preds = %456
  %463 = load ptr, ptr %11, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %463, i32 0, i32 2
  %465 = load i32, ptr %464, align 8, !tbaa !32
  %466 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %467 = load i16, ptr %466, align 4, !tbaa !25
  %468 = zext i16 %467 to i32
  %469 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %470 = load i16, ptr %469, align 2, !tbaa !23
  %471 = zext i16 %470 to i32
  %472 = sdiv i32 %468, %471
  call void (ptr, ...) @error_line(ptr noundef @.str.12, i32 noundef %465, i32 noundef %472)
  br label %473

473:                                              ; preds = %462, %461
  br label %474

474:                                              ; preds = %473, %453
  store i32 0, ptr %19, align 4
  br label %475

475:                                              ; preds = %474, %401, %338, %167, %152, %124
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  %476 = load i32, ptr %19, align 4
  switch i32 %476, label %648 [
    i32 0, label %477
  ]

477:                                              ; preds = %475
  br label %636

478:                                              ; preds = %112
  %479 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %480 = getelementptr inbounds [16 x i8], ptr %479, i64 0, i64 0
  %481 = call i32 @memcmp(ptr noundef %480, ptr noundef @data_guid, i64 noundef 16) #8
  %482 = icmp ne i32 %481, 0
  br i1 %482, label %566, label %483

483:                                              ; preds = %478
  %484 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %485 = load i16, ptr %484, align 2, !tbaa !23
  %486 = icmp ne i16 %485, 0
  br i1 %486, label %489, label %487

487:                                              ; preds = %483
  %488 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %488)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

489:                                              ; preds = %483
  %490 = load ptr, ptr %11, align 8, !tbaa !5
  %491 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %490, i32 0, i32 4
  %492 = load i32, ptr %491, align 8, !tbaa !13
  %493 = and i32 %492, 2048
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %499, label %495

495:                                              ; preds = %489
  %496 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %497 = load i64, ptr %496, align 8, !tbaa !18
  %498 = icmp sle i64 %497, 0
  br i1 %498, label %499, label %521

499:                                              ; preds = %495, %489
  %500 = load ptr, ptr %11, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %500, i32 0, i32 4
  %502 = load i32, ptr %501, align 8, !tbaa !13
  %503 = or i32 %502, 2048
  store i32 %503, ptr %501, align 8, !tbaa !13
  %504 = load i64, ptr %13, align 8, !tbaa !9
  %505 = icmp ne i64 %504, 0
  br i1 %505, label %506, label %519

506:                                              ; preds = %499
  %507 = load ptr, ptr %7, align 8, !tbaa !5
  %508 = call i64 @DoGetFilePosition(ptr noundef %507)
  %509 = icmp ne i64 %508, -1
  br i1 %509, label %510, label %519

510:                                              ; preds = %506
  %511 = load i64, ptr %13, align 8, !tbaa !9
  %512 = load ptr, ptr %7, align 8, !tbaa !5
  %513 = call i64 @DoGetFilePosition(ptr noundef %512)
  %514 = sub nsw i64 %511, %513
  %515 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %516 = load i16, ptr %515, align 4, !tbaa !25
  %517 = zext i16 %516 to i64
  %518 = sdiv i64 %514, %517
  store i64 %518, ptr %12, align 8, !tbaa !9
  br label %520

519:                                              ; preds = %506, %499
  store i64 -1, ptr %12, align 8, !tbaa !9
  br label %520

520:                                              ; preds = %519, %510
  br label %547

521:                                              ; preds = %495
  %522 = load i64, ptr %13, align 8, !tbaa !9
  %523 = icmp ne i64 %522, 0
  br i1 %523, label %524, label %531

524:                                              ; preds = %521
  %525 = load i64, ptr %13, align 8, !tbaa !9
  %526 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %527 = load i64, ptr %526, align 8, !tbaa !18
  %528 = sub nsw i64 %525, %527
  %529 = icmp sgt i64 %528, 16777216
  br i1 %529, label %530, label %531

530:                                              ; preds = %524
  call void (ptr, ...) @error_line(ptr noundef @.str.13)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

531:                                              ; preds = %524, %521
  %532 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %533 = load i64, ptr %532, align 8, !tbaa !18
  %534 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %535 = load i16, ptr %534, align 4, !tbaa !25
  %536 = zext i16 %535 to i64
  %537 = sdiv i64 %533, %536
  store i64 %537, ptr %12, align 8, !tbaa !9
  %538 = load i64, ptr %12, align 8, !tbaa !9
  %539 = icmp ne i64 %538, 0
  br i1 %539, label %541, label %540

540:                                              ; preds = %531
  call void (ptr, ...) @error_line(ptr noundef @.str.14)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

541:                                              ; preds = %531
  %542 = load i64, ptr %12, align 8, !tbaa !9
  %543 = icmp sgt i64 %542, 1099511627519
  br i1 %543, label %544, label %546

544:                                              ; preds = %541
  %545 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.15, ptr noundef %545)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

546:                                              ; preds = %541
  br label %547

547:                                              ; preds = %546, %520
  %548 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 4
  %549 = load i16, ptr %548, align 4, !tbaa !25
  %550 = zext i16 %549 to i32
  %551 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %552 = load i16, ptr %551, align 2, !tbaa !23
  %553 = zext i16 %552 to i32
  %554 = sdiv i32 %550, %553
  %555 = load ptr, ptr %11, align 8, !tbaa !5
  %556 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %555, i32 0, i32 3
  store i32 %554, ptr %556, align 4, !tbaa !35
  %557 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 1
  %558 = load i16, ptr %557, align 2, !tbaa !23
  %559 = zext i16 %558 to i32
  %560 = load ptr, ptr %11, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %560, i32 0, i32 7
  store i32 %559, ptr %561, align 4, !tbaa !36
  %562 = getelementptr inbounds %struct.WaveHeader, ptr %16, i32 0, i32 2
  %563 = load i32, ptr %562, align 4, !tbaa !26
  %564 = load ptr, ptr %11, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %564, i32 0, i32 12
  store i32 %563, ptr %565, align 8, !tbaa !37
  br label %637

566:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %567 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %568 = load i64, ptr %567, align 8, !tbaa !18
  %569 = add nsw i64 %568, 7
  %570 = and i64 %569, -8
  %571 = trunc i64 %570 to i32
  store i32 %571, ptr %22, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %572 = load i32, ptr %22, align 4, !tbaa !11
  %573 = icmp slt i32 %572, 0
  br i1 %573, label %577, label %574

574:                                              ; preds = %566
  %575 = load i32, ptr %22, align 4, !tbaa !11
  %576 = icmp sgt i32 %575, 4194304
  br i1 %576, label %577, label %579

577:                                              ; preds = %574, %566
  %578 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str, ptr noundef %578)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %632

579:                                              ; preds = %574
  %580 = load i32, ptr %22, align 4, !tbaa !11
  %581 = sext i32 %580 to i64
  %582 = call noalias ptr @malloc(i64 noundef %581) #9
  store ptr %582, ptr %23, align 8, !tbaa !5
  %583 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %584 = icmp ne i32 %583, 0
  br i1 %584, label %585, label %604

585:                                              ; preds = %579
  %586 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %587 = getelementptr inbounds [16 x i8], ptr %586, i64 0, i64 0
  %588 = load i8, ptr %587, align 8, !tbaa !38
  %589 = sext i8 %588 to i32
  %590 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %591 = getelementptr inbounds [16 x i8], ptr %590, i64 0, i64 1
  %592 = load i8, ptr %591, align 1, !tbaa !38
  %593 = sext i8 %592 to i32
  %594 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %595 = getelementptr inbounds [16 x i8], ptr %594, i64 0, i64 2
  %596 = load i8, ptr %595, align 2, !tbaa !38
  %597 = sext i8 %596 to i32
  %598 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 0
  %599 = getelementptr inbounds [16 x i8], ptr %598, i64 0, i64 3
  %600 = load i8, ptr %599, align 1, !tbaa !38
  %601 = sext i8 %600 to i32
  %602 = getelementptr inbounds %struct.Wave64ChunkHeader, ptr %14, i32 0, i32 1
  %603 = load i64, ptr %602, align 8, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.16, i32 noundef %589, i32 noundef %593, i32 noundef %597, i32 noundef %601, i64 noundef %603)
  br label %604

604:                                              ; preds = %585, %579
  %605 = load ptr, ptr %7, align 8, !tbaa !5
  %606 = load ptr, ptr %23, align 8, !tbaa !5
  %607 = load i32, ptr %22, align 4, !tbaa !11
  %608 = call i32 @DoReadFile(ptr noundef %605, ptr noundef %606, i32 noundef %607, ptr noundef %18)
  %609 = icmp ne i32 %608, 0
  br i1 %609, label %610, label %626

610:                                              ; preds = %604
  %611 = load i32, ptr %18, align 4, !tbaa !11
  %612 = load i32, ptr %22, align 4, !tbaa !11
  %613 = icmp ne i32 %611, %612
  br i1 %613, label %626, label %614

614:                                              ; preds = %610
  %615 = load ptr, ptr %11, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %615, i32 0, i32 4
  %617 = load i32, ptr %616, align 8, !tbaa !13
  %618 = and i32 %617, 512
  %619 = icmp ne i32 %618, 0
  br i1 %619, label %630, label %620

620:                                              ; preds = %614
  %621 = load ptr, ptr %10, align 8, !tbaa !5
  %622 = load ptr, ptr %23, align 8, !tbaa !5
  %623 = load i32, ptr %22, align 4, !tbaa !11
  %624 = call i32 @WavpackStreamAddWrapper(ptr noundef %621, ptr noundef %622, i32 noundef %623)
  %625 = icmp ne i32 %624, 0
  br i1 %625, label %630, label %626

626:                                              ; preds = %620, %610, %604
  %627 = load ptr, ptr %10, align 8, !tbaa !5
  %628 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %627)
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %628)
  %629 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %629) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %632

630:                                              ; preds = %620, %614
  %631 = load ptr, ptr %23, align 8, !tbaa !5
  call void @free(ptr noundef %631) #7
  store i32 0, ptr %19, align 4
  br label %632

632:                                              ; preds = %630, %626, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  %633 = load i32, ptr %19, align 4
  switch i32 %633, label %648 [
    i32 0, label %634
  ]

634:                                              ; preds = %632
  br label %635

635:                                              ; preds = %634
  br label %636

636:                                              ; preds = %635, %477
  br label %87

637:                                              ; preds = %547
  %638 = load ptr, ptr %10, align 8, !tbaa !5
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = load i64, ptr %12, align 8, !tbaa !9
  %641 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %638, ptr noundef %639, i64 noundef %640, ptr noundef null)
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %647, label %643

643:                                              ; preds = %637
  %644 = load ptr, ptr %8, align 8, !tbaa !5
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %645)
  call void (ptr, ...) @error_line(ptr noundef @.str.17, ptr noundef %644, ptr noundef %646)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

647:                                              ; preds = %637
  store i32 0, ptr %6, align 4
  store i32 1, ptr %19, align 4
  br label %648

648:                                              ; preds = %647, %643, %632, %544, %540, %530, %487, %475, %108, %96, %84, %57, %45
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  %649 = load i32, ptr %6, align 4
  ret i32 %649
}

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

declare i64 @DoGetFileSize(ptr noundef) #2

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

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

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

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

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

declare ptr @WavpackStreamGetErrorMessage(ptr noundef) #2

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

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

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

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

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

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 = { "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: readwrite) }
attributes #4 = { 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 #5 = { 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 #6 = { 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 #7 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }
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, !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 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 16}
!14 = !{!"", !15, i64 0, !15, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !12, i64 52, !7, i64 56, !7, i64 72, !12, i64 76, !6, i64 80}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !10, i64 16}
!17 = !{!"", !7, i64 0, !10, i64 16, !7, i64 24}
!18 = !{!19, !10, i64 16}
!19 = !{!"", !7, i64 0, !10, i64 16}
!20 = !{!21, !22, i64 0}
!21 = !{!"", !22, i64 0, !22, i64 2, !12, i64 4, !12, i64 8, !22, i64 12, !22, i64 14, !22, i64 16, !22, i64 18, !12, i64 20, !22, i64 24, !7, i64 26}
!22 = !{!"short", !7, i64 0}
!23 = !{!21, !22, i64 2}
!24 = !{!21, !22, i64 14}
!25 = !{!21, !22, i64 12}
!26 = !{!21, !12, i64 4}
!27 = !{!21, !12, i64 8}
!28 = !{!21, !22, i64 16}
!29 = !{!21, !22, i64 18}
!30 = !{!21, !12, i64 20}
!31 = !{!21, !22, i64 24}
!32 = !{!14, !12, i64 8}
!33 = !{!14, !12, i64 52}
!34 = !{!14, !12, i64 32}
!35 = !{!14, !12, i64 12}
!36 = !{!14, !12, i64 28}
!37 = !{!14, !12, i64 48}
!38 = !{!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.Wave64ChunkHeader = type { [16 x i8], i64 }
%struct.Wave64FileHeader = type { [16 x i8], i64, [16 x i8] }
%struct.WaveHeader = type { i16, i16, i32, i32, i16, i16, i16, i16, i32, i16, [14 x i8] }

@riff_guid = external hidden constant [16 x i8], align 16
@wave_guid = external hidden constant [16 x i8], align 16
@.str = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@fmt_guid = external hidden constant [16 x i8], align 16
@.str.3 = external hidden unnamed_addr constant [11 x i8], align 1
@debug_logging_mode = external local_unnamed_addr global i32, align 4
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [50 x i8], align 1
@data_guid = external hidden constant [16 x i8], align 16
@.str.13 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @ParseWave64HeaderConfig(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #0 {
  %6 = alloca %struct.Wave64ChunkHeader, align 8
  %7 = alloca %struct.Wave64FileHeader, align 8
  %8 = alloca %struct.WaveHeader, align 4
  %9 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #6
  %10 = tail call i64 @DoGetFileSize(ptr noundef %0) #6
  %11 = load i32, ptr %2, align 1
  store i32 %11, ptr %7, align 8
  %12 = getelementptr inbounds i8, ptr %7, i64 4
  %13 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %12, i32 noundef 36, ptr noundef nonnull %9) #6
  %14 = icmp eq i32 %13, 0
  %15 = load i32, ptr %9, align 4
  %16 = icmp ne i32 %15, 36
  %or.cond = select i1 %14, i1 true, i1 %16
  br i1 %or.cond, label %20, label %17

17:                                               ; preds = %5
  %bcmp = call i32 @bcmp(ptr noundef nonnull dereferenceable(16) %7, ptr noundef nonnull dereferenceable(16) @riff_guid, i64 16)
  %.not = icmp eq i32 %bcmp, 0
  br i1 %.not, label %18, label %20

18:                                               ; preds = %17
  %19 = getelementptr inbounds i8, ptr %7, i64 24
  %bcmp145 = call i32 @bcmp(ptr noundef nonnull dereferenceable(16) %19, ptr noundef nonnull dereferenceable(16) @wave_guid, i64 16)
  %.not146 = icmp eq i32 %bcmp145, 0
  br i1 %.not146, label %21, label %20

20:                                               ; preds = %18, %17, %5
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

21:                                               ; preds = %18
  %22 = getelementptr inbounds i8, ptr %4, i64 16
  %23 = load i32, ptr %22, align 8, !tbaa !5
  %24 = and i32 %23, 512
  %.not147 = icmp eq i32 %24, 0
  br i1 %.not147, label %25, label %29

25:                                               ; preds = %21
  %26 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %7, i32 noundef 40) #6
  %.not148 = icmp eq i32 %26, 0
  br i1 %.not148, label %27, label %29

27:                                               ; preds = %25
  %28 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #6
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %28) #6
  br label %.critedge

29:                                               ; preds = %21, %25
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %7, ptr noundef nonnull @.str.2) #6
  %.not149 = icmp ne i64 %10, 0
  br i1 %.not149, label %30, label %39

30:                                               ; preds = %29
  %31 = load i32, ptr %22, align 8, !tbaa !5
  %32 = and i32 %31, 2048
  %33 = icmp ne i32 %32, 0
  %34 = getelementptr inbounds i8, ptr %7, i64 16
  %35 = load i64, ptr %34, align 8
  %36 = add i64 %35, 1
  %37 = icmp ult i64 %36, 2
  %or.cond185 = select i1 %33, i1 true, i1 %37
  %.not151 = icmp eq i64 %35, %10
  %or.cond186 = select i1 %or.cond185, i1 true, i1 %.not151
  br i1 %or.cond186, label %39, label %38

38:                                               ; preds = %30
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

39:                                               ; preds = %30, %29
  %40 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %6, i32 noundef 24, ptr noundef nonnull %9) #6
  %41 = icmp eq i32 %40, 0
  %42 = load i32, ptr %9, align 4
  %43 = icmp ne i32 %42, 24
  %or.cond9213 = select i1 %41, i1 true, i1 %43
  br i1 %or.cond9213, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %39
  %44 = getelementptr inbounds i8, ptr %6, i64 16
  %45 = getelementptr inbounds i8, ptr %6, i64 1
  %46 = getelementptr inbounds i8, ptr %6, i64 2
  %47 = getelementptr inbounds i8, ptr %6, i64 3
  %48 = getelementptr inbounds i8, ptr %8, i64 2
  %49 = getelementptr inbounds i8, ptr %8, i64 14
  %50 = getelementptr inbounds i8, ptr %8, i64 12
  %51 = getelementptr inbounds i8, ptr %8, i64 4
  %52 = getelementptr inbounds i8, ptr %8, i64 8
  %53 = getelementptr inbounds i8, ptr %8, i64 16
  %54 = getelementptr inbounds i8, ptr %8, i64 18
  %55 = getelementptr inbounds i8, ptr %8, i64 20
  %56 = getelementptr inbounds i8, ptr %8, i64 24
  %57 = getelementptr inbounds i8, ptr %4, i64 8
  %58 = getelementptr inbounds i8, ptr %4, i64 52
  %59 = getelementptr inbounds i8, ptr %4, i64 32
  br label %60

._crit_edge:                                      ; preds = %263, %39
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

60:                                               ; preds = %.lr.ph, %263
  %.0121214 = phi i32 [ 0, %.lr.ph ], [ %.1122, %263 ]
  %61 = load i32, ptr %22, align 8, !tbaa !5
  %62 = and i32 %61, 512
  %.not152 = icmp eq i32 %62, 0
  br i1 %.not152, label %63, label %67

63:                                               ; preds = %60
  %64 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %6, i32 noundef 24) #6
  %.not153 = icmp eq i32 %64, 0
  br i1 %.not153, label %65, label %67

65:                                               ; preds = %63
  %66 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #6
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %66) #6
  br label %.critedge

67:                                               ; preds = %60, %63
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %6, ptr noundef nonnull @.str.2) #6
  %68 = load i64, ptr %44, align 8, !tbaa !12
  %69 = add i64 %68, -24
  store i64 %69, ptr %44, align 8, !tbaa !12
  %bcmp154 = call i32 @bcmp(ptr noundef nonnull dereferenceable(16) %6, ptr noundef nonnull dereferenceable(16) @fmt_guid, i64 16)
  %.not155 = icmp eq i32 %bcmp154, 0
  br i1 %.not155, label %70, label %190

70:                                               ; preds = %67
  %.not156 = icmp eq i32 %.0121214, 0
  br i1 %.not156, label %72, label %71

71:                                               ; preds = %70
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

72:                                               ; preds = %70
  %73 = add i64 %68, -17
  %74 = and i64 %73, -8
  store i64 %74, ptr %44, align 8, !tbaa !12
  %75 = add i64 %74, -41
  %or.cond12 = icmp ult i64 %75, -25
  br i1 %or.cond12, label %83, label %76

76:                                               ; preds = %72
  %77 = trunc nuw nsw i64 %74 to i32
  %78 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %8, i32 noundef %77, ptr noundef nonnull %9) #6
  %.not157 = icmp eq i32 %78, 0
  br i1 %.not157, label %83, label %79

79:                                               ; preds = %76
  %80 = load i32, ptr %9, align 4, !tbaa !15
  %81 = zext i32 %80 to i64
  %82 = load i64, ptr %44, align 8, !tbaa !12
  %.not158 = icmp eq i64 %82, %81
  br i1 %.not158, label %84, label %83

83:                                               ; preds = %79, %76, %72
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

84:                                               ; preds = %79
  %85 = load i32, ptr %22, align 8, !tbaa !5
  %86 = and i32 %85, 512
  %.not159 = icmp eq i32 %86, 0
  br i1 %.not159, label %87, label %91

87:                                               ; preds = %84
  %88 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %8, i32 noundef %80) #6
  %.not160 = icmp eq i32 %88, 0
  br i1 %.not160, label %89, label %91

89:                                               ; preds = %87
  %90 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #6
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %90) #6
  br label %.critedge

91:                                               ; preds = %84, %87
  call void @WavpackStreamLittleEndianToNative(ptr noundef nonnull %8, ptr noundef nonnull @.str.3) #6
  %92 = load i32, ptr @debug_logging_mode, align 4, !tbaa !15
  %.not161 = icmp eq i32 %92, 0
  br i1 %.not161, label %thread-pre-split, label %93

93:                                               ; preds = %91
  %94 = load i64, ptr %44, align 8, !tbaa !12
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, i64 noundef %94) #6
  %95 = load i16, ptr %8, align 4, !tbaa !16
  %96 = zext i16 %95 to i32
  %97 = load i16, ptr %48, align 2, !tbaa !19
  %98 = zext i16 %97 to i32
  %99 = load i16, ptr %49, align 2, !tbaa !20
  %100 = zext i16 %99 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.5, i32 noundef %96, i32 noundef %98, i32 noundef %100) #6
  %101 = load i16, ptr %50, align 4, !tbaa !21
  %102 = zext i16 %101 to i32
  %103 = load i32, ptr %51, align 4, !tbaa !22
  %104 = load i32, ptr %52, align 4, !tbaa !23
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.6, i32 noundef %102, i32 noundef %103, i32 noundef %104) #6
  %105 = load i64, ptr %44, align 8
  %106 = icmp sgt i64 %105, 16
  br i1 %106, label %107, label %.thread.thread

107:                                              ; preds = %93
  %108 = load i16, ptr %53, align 4, !tbaa !24
  %109 = zext i16 %108 to i32
  %110 = load i16, ptr %54, align 2, !tbaa !25
  %111 = zext i16 %110 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.7, i32 noundef %109, i32 noundef %111) #6
  %.pr = load i64, ptr %44, align 8
  %112 = icmp sgt i64 %.pr, 20
  br i1 %112, label %113, label %.thread

113:                                              ; preds = %107
  %114 = load i32, ptr %55, align 4, !tbaa !26
  %115 = load i16, ptr %56, align 4, !tbaa !27
  %116 = zext i16 %115 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.8, i32 noundef %114, i32 noundef %116) #6
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %91, %113
  %.pr195 = load i64, ptr %44, align 8
  br label %.thread

.thread:                                          ; preds = %thread-pre-split, %107
  %117 = phi i64 [ %.pr195, %thread-pre-split ], [ %.pr, %107 ]
  %118 = icmp sgt i64 %117, 16
  %119 = load i16, ptr %53, align 4
  %120 = icmp eq i16 %119, 2
  %or.cond16 = select i1 %118, i1 %120, i1 false
  br i1 %or.cond16, label %121, label %.thread.thread

121:                                              ; preds = %.thread
  %122 = load i32, ptr %22, align 8, !tbaa !5
  %123 = or i32 %122, 256
  store i32 %123, ptr %22, align 8, !tbaa !5
  br label %.thread.thread

.thread.thread:                                   ; preds = %93, %121, %.thread
  %124 = phi i64 [ %117, %121 ], [ %117, %.thread ], [ %105, %93 ]
  %125 = load i16, ptr %8, align 4
  %126 = icmp eq i16 %125, -2
  %127 = icmp eq i64 %124, 40
  %or.cond19 = and i1 %127, %126
  %128 = load i16, ptr %56, align 4
  %.v = select i1 %or.cond19, i16 %128, i16 %125
  %129 = load i16, ptr %54, align 2
  %130 = icmp ne i16 %129, 0
  %or.cond23 = select i1 %127, i1 %130, i1 false
  %131 = load i16, ptr %49, align 2
  %.v162 = select i1 %or.cond23, i16 %129, i16 %131
  %132 = zext i16 %.v162 to i32
  store i32 %132, ptr %57, align 8, !tbaa !28
  %133 = and i16 %.v, -3
  %or.cond25.not = icmp ne i16 %133, 1
  %134 = icmp eq i16 %.v, 3
  %.not163 = icmp ne i16 %.v162, 32
  %.1124.v = select i1 %134, i1 %.not163, i1 %or.cond25.not
  %135 = load i16, ptr %48, align 2
  %136 = zext i16 %135 to i32
  %137 = add i16 %135, -257
  %or.cond29 = icmp ult i16 %137, -256
  br i1 %or.cond29, label %.thread224, label %138

138:                                              ; preds = %.thread.thread
  %139 = load i16, ptr %50, align 4, !tbaa !21
  %140 = udiv i16 %139, %135
  %141 = urem i16 %139, %135
  %.zext = zext i16 %140 to i32
  %142 = add nuw nsw i32 %132, 7
  %143 = lshr i32 %142, 3
  %144 = icmp ugt i32 %143, %.zext
  %145 = icmp ugt i16 %140, 4
  %or.cond188 = or i1 %145, %144
  %or.cond188.not = xor i1 %or.cond188, true
  %.not164 = icmp eq i16 %141, 0
  %or.cond266 = and i1 %or.cond188.not, %.not164
  br i1 %or.cond266, label %146, label %.thread224

146:                                              ; preds = %138
  %147 = add i16 %.v162, -33
  %or.cond189 = icmp ult i16 %147, -32
  %.not165 = select i1 %or.cond189, i1 true, i1 %.1124.v
  br i1 %.not165, label %.thread224, label %148

.thread224:                                       ; preds = %138, %.thread.thread, %146
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.9, ptr noundef %1) #6
  br label %.critedge

148:                                              ; preds = %146
  %149 = icmp slt i64 %124, 40
  br i1 %149, label %150, label %163

150:                                              ; preds = %148
  %151 = load i32, ptr %58, align 4, !tbaa !29
  %.not170 = icmp eq i32 %151, 0
  br i1 %.not170, label %152, label %.thread196

152:                                              ; preds = %150
  %153 = load i32, ptr %22, align 8, !tbaa !5
  %154 = and i32 %153, 1024
  %.not171 = icmp eq i32 %154, 0
  br i1 %.not171, label %155, label %.thread196

155:                                              ; preds = %152
  %156 = icmp ult i16 %135, 3
  br i1 %156, label %157, label %159

157:                                              ; preds = %155
  %158 = sub nuw nsw i32 5, %136
  br label %.thread196.sink.split

159:                                              ; preds = %155
  %160 = icmp ult i16 %135, 19
  br i1 %160, label %161, label %.thread196.sink.split

161:                                              ; preds = %159
  %notmask = shl nsw i32 -1, %136
  %162 = xor i32 %notmask, -1
  br label %.thread196.sink.split

163:                                              ; preds = %148
  %164 = load i32, ptr %55, align 4, !tbaa !26
  %.not166 = icmp eq i32 %164, 0
  br i1 %.not166, label %.thread196, label %165

165:                                              ; preds = %163
  %166 = load i32, ptr %58, align 4, !tbaa !29
  %.not167 = icmp eq i32 %166, 0
  br i1 %.not167, label %167, label %170

167:                                              ; preds = %165
  %168 = load i32, ptr %22, align 8, !tbaa !5
  %169 = and i32 %168, 1024
  %.not168 = icmp eq i32 %169, 0
  br i1 %.not168, label %.thread196.sink.split, label %170

170:                                              ; preds = %167, %165
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.10) #6
  br label %.critedge

.thread196.sink.split:                            ; preds = %167, %159, %157, %161
  %.sink = phi i32 [ %162, %161 ], [ %158, %157 ], [ 262143, %159 ], [ %164, %167 ]
  store i32 %.sink, ptr %58, align 4, !tbaa !29
  br label %.thread196

.thread196:                                       ; preds = %.thread196.sink.split, %163, %150, %152
  br i1 %134, label %.sink.split, label %171

171:                                              ; preds = %.thread196
  %172 = load i32, ptr %22, align 8, !tbaa !5
  %173 = and i32 %172, 256
  %.not172 = icmp eq i32 %173, 0
  br i1 %.not172, label %180, label %174

174:                                              ; preds = %171
  %175 = load i16, ptr %50, align 4, !tbaa !21
  %176 = udiv i16 %175, %135
  %177 = icmp eq i16 %176, 4
  br i1 %177, label %178, label %180

178:                                              ; preds = %174
  switch i16 %131, label %180 [
    i16 24, label %.sink.split
    i16 32, label %179
  ]

179:                                              ; preds = %178
  br label %.sink.split

.sink.split:                                      ; preds = %178, %.thread196, %179
  %.sink238 = phi i32 [ 142, %179 ], [ 127, %.thread196 ], [ 150, %178 ]
  store i32 %.sink238, ptr %59, align 8, !tbaa !30
  br label %180

180:                                              ; preds = %.sink.split, %178, %171, %174
  %181 = load i32, ptr @debug_logging_mode, align 4, !tbaa !15
  %.not173 = icmp eq i32 %181, 0
  br i1 %.not173, label %263, label %182

182:                                              ; preds = %180
  %183 = load i32, ptr %59, align 8, !tbaa !30
  %184 = icmp eq i32 %183, 127
  br i1 %184, label %185, label %186

185:                                              ; preds = %182
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.11) #6
  br label %263

186:                                              ; preds = %182
  %187 = load i16, ptr %50, align 4, !tbaa !21
  %188 = udiv i16 %187, %135
  %189 = zext i16 %188 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.12, i32 noundef %132, i32 noundef %189) #6
  br label %263

190:                                              ; preds = %67
  %bcmp174 = call i32 @bcmp(ptr noundef nonnull dereferenceable(16) %6, ptr noundef nonnull dereferenceable(16) @data_guid, i64 16)
  %.not175 = icmp eq i32 %bcmp174, 0
  br i1 %.not175, label %191, label %232

191:                                              ; preds = %190
  %192 = load i16, ptr %48, align 2, !tbaa !19
  %.not176 = icmp eq i16 %192, 0
  br i1 %.not176, label %193, label %194

193:                                              ; preds = %191
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

194:                                              ; preds = %191
  %195 = load i32, ptr %22, align 8, !tbaa !5
  %196 = and i32 %195, 2048
  %197 = icmp ne i32 %196, 0
  %198 = icmp slt i64 %69, 1
  %or.cond32 = select i1 %197, i1 true, i1 %198
  br i1 %or.cond32, label %199, label %209

199:                                              ; preds = %194
  %200 = or i32 %195, 2048
  store i32 %200, ptr %22, align 8, !tbaa !5
  br i1 %.not149, label %201, label %221

201:                                              ; preds = %199
  %202 = call i64 @DoGetFilePosition(ptr noundef %0) #6
  %.not178 = icmp eq i64 %202, -1
  br i1 %.not178, label %221, label %203

203:                                              ; preds = %201
  %204 = call i64 @DoGetFilePosition(ptr noundef %0) #6
  %205 = sub nsw i64 %10, %204
  %206 = load i16, ptr %50, align 4, !tbaa !21
  %207 = zext i16 %206 to i64
  %208 = sdiv i64 %205, %207
  br label %221

209:                                              ; preds = %194
  %210 = sub nsw i64 %10, %69
  %211 = icmp sgt i64 %210, 16777216
  %or.cond191 = select i1 %.not149, i1 %211, i1 false
  br i1 %or.cond191, label %212, label %213

212:                                              ; preds = %209
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.13) #6
  br label %.critedge

213:                                              ; preds = %209
  %214 = load i16, ptr %50, align 4, !tbaa !21
  %215 = zext i16 %214 to i64
  %.not177 = icmp ult i64 %69, %215
  br i1 %.not177, label %216, label %217

216:                                              ; preds = %213
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.14) #6
  br label %.critedge

217:                                              ; preds = %213
  %218 = udiv i64 %69, %215
  %219 = icmp ugt i64 %218, 1099511627519
  br i1 %219, label %220, label %221

220:                                              ; preds = %217
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.15, ptr noundef %1) #6
  br label %.critedge

221:                                              ; preds = %199, %201, %217, %203
  %.0120 = phi i64 [ %208, %203 ], [ %218, %217 ], [ -1, %201 ], [ -1, %199 ]
  %222 = load i16, ptr %50, align 4, !tbaa !21
  %223 = load i16, ptr %48, align 2, !tbaa !19
  %224 = udiv i16 %222, %223
  %225 = zext i16 %224 to i32
  %226 = getelementptr inbounds i8, ptr %4, i64 12
  store i32 %225, ptr %226, align 4, !tbaa !31
  %227 = zext i16 %223 to i32
  %228 = getelementptr inbounds i8, ptr %4, i64 28
  store i32 %227, ptr %228, align 4, !tbaa !32
  %229 = load i32, ptr %51, align 4, !tbaa !22
  %230 = getelementptr inbounds i8, ptr %4, i64 48
  store i32 %229, ptr %230, align 8, !tbaa !33
  %231 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %3, ptr noundef nonnull %4, i64 noundef %.0120, ptr noundef null) #6
  %.not179 = icmp eq i32 %231, 0
  br i1 %.not179, label %268, label %.critedge

232:                                              ; preds = %190
  %233 = trunc i64 %68 to i32
  %234 = add i32 %233, -17
  %235 = and i32 %234, -8
  %236 = icmp slt i32 %234, 0
  %237 = icmp sgt i32 %235, 4194304
  %or.cond34 = or i1 %236, %237
  br i1 %or.cond34, label %238, label %239

238:                                              ; preds = %232
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str, ptr noundef %1) #6
  br label %.critedge

239:                                              ; preds = %232
  %240 = zext nneg i32 %235 to i64
  %241 = call noalias ptr @malloc(i64 noundef %240) #7
  %242 = load i32, ptr @debug_logging_mode, align 4, !tbaa !15
  %.not180 = icmp eq i32 %242, 0
  br i1 %.not180, label %252, label %243

243:                                              ; preds = %239
  %244 = load i8, ptr %6, align 8, !tbaa !34
  %245 = sext i8 %244 to i32
  %246 = load i8, ptr %45, align 1, !tbaa !34
  %247 = sext i8 %246 to i32
  %248 = load i8, ptr %46, align 2, !tbaa !34
  %249 = sext i8 %248 to i32
  %250 = load i8, ptr %47, align 1, !tbaa !34
  %251 = sext i8 %250 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.16, i32 noundef %245, i32 noundef %247, i32 noundef %249, i32 noundef %251, i64 noundef %69) #6
  br label %252

252:                                              ; preds = %243, %239
  %253 = call i32 @DoReadFile(ptr noundef %0, ptr noundef %241, i32 noundef %235, ptr noundef nonnull %9) #6
  %.not181 = icmp ne i32 %253, 0
  %254 = load i32, ptr %9, align 4
  %.not182 = icmp eq i32 %254, %235
  %or.cond192 = select i1 %.not181, i1 %.not182, i1 false
  br i1 %or.cond192, label %255, label %260

255:                                              ; preds = %252
  %256 = load i32, ptr %22, align 8, !tbaa !5
  %257 = and i32 %256, 512
  %.not183 = icmp eq i32 %257, 0
  br i1 %.not183, label %258, label %262

258:                                              ; preds = %255
  %259 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef %241, i32 noundef %235) #6
  %.not184 = icmp eq i32 %259, 0
  br i1 %.not184, label %260, label %262

260:                                              ; preds = %258, %252
  %261 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #6
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %261) #6
  call void @free(ptr noundef %241) #6
  br label %.critedge

262:                                              ; preds = %258, %255
  call void @free(ptr noundef %241) #6
  br label %263

263:                                              ; preds = %262, %185, %186, %180
  %.1122 = phi i32 [ %.0121214, %262 ], [ 1, %180 ], [ 1, %186 ], [ 1, %185 ]
  %264 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %6, i32 noundef 24, ptr noundef nonnull %9) #6
  %265 = icmp eq i32 %264, 0
  %266 = load i32, ptr %9, align 4
  %267 = icmp ne i32 %266, 24
  %or.cond9 = select i1 %265, i1 true, i1 %267
  br i1 %or.cond9, label %._crit_edge, label %60

268:                                              ; preds = %221
  %269 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #6
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.17, ptr noundef %1, ptr noundef %269) #6
  br label %.critedge

.critedge:                                        ; preds = %238, %260, %71, %83, %170, %.thread224, %89, %221, %268, %220, %216, %212, %193, %65, %._crit_edge, %38, %27, %20
  %.4 = phi i32 [ 1, %20 ], [ 1, %38 ], [ 1, %._crit_edge ], [ 1, %268 ], [ 1, %212 ], [ 1, %220 ], [ 1, %216 ], [ 1, %193 ], [ 1, %65 ], [ 1, %27 ], [ 0, %221 ], [ 1, %89 ], [ 1, %.thread224 ], [ 1, %170 ], [ 1, %83 ], [ 1, %71 ], [ 1, %260 ], [ 1, %238 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #6
  ret i32 %.4
}

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

declare i64 @DoGetFileSize(ptr noundef) local_unnamed_addr #2

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

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

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

declare ptr @WavpackStreamGetErrorMessage(ptr noundef) local_unnamed_addr #2

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

; 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 #2

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

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

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

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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, !14, i64 16}
!13 = !{!"", !8, i64 0, !14, i64 16}
!14 = !{!"long", !8, i64 0}
!15 = !{!10, !10, i64 0}
!16 = !{!17, !18, i64 0}
!17 = !{!"", !18, i64 0, !18, i64 2, !10, i64 4, !10, i64 8, !18, i64 12, !18, i64 14, !18, i64 16, !18, i64 18, !10, i64 20, !18, i64 24, !8, i64 26}
!18 = !{!"short", !8, i64 0}
!19 = !{!17, !18, i64 2}
!20 = !{!17, !18, i64 14}
!21 = !{!17, !18, i64 12}
!22 = !{!17, !10, i64 4}
!23 = !{!17, !10, i64 8}
!24 = !{!17, !18, i64 16}
!25 = !{!17, !18, i64 18}
!26 = !{!17, !10, i64 20}
!27 = !{!17, !18, i64 24}
!28 = !{!6, !10, i64 8}
!29 = !{!6, !10, i64 52}
!30 = !{!6, !10, i64 32}
!31 = !{!6, !10, i64 12}
!32 = !{!6, !10, i64 28}
!33 = !{!6, !10, i64 48}
!34 = !{!8, !8, i64 0}


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