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

; 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.DFFFileHeader = type <{ [4 x i8], i64, [4 x i8] }>
%struct.DFFChunkHeader = 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 [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [45 x i8], align 1
@debug_logging_mode = external global i32, align 4
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1

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

35:                                               ; preds = %5
  %36 = load i32, ptr %16, align 4, !tbaa !11
  %37 = zext i32 %36 to i64
  %38 = icmp ne i64 %37, 12
  br i1 %38, label %44, label %39

39:                                               ; preds = %35
  %40 = getelementptr inbounds %struct.DFFFileHeader, ptr %14, i32 0, i32 2
  %41 = getelementptr inbounds [4 x i8], ptr %40, i64 0, i64 0
  %42 = call i32 @strncmp(ptr noundef %41, ptr noundef @.str, i64 noundef 4) #8
  %43 = icmp ne i32 %42, 0
  br i1 %43, label %44, label %46

44:                                               ; preds = %39, %35, %5
  %45 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %45)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

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

52:                                               ; preds = %46
  %53 = load ptr, ptr %10, align 8, !tbaa !5
  %54 = call i32 @WavpackStreamAddWrapper(ptr noundef %53, ptr noundef %14, i32 noundef 16)
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %59, label %56

56:                                               ; preds = %52
  %57 = load ptr, ptr %10, align 8, !tbaa !5
  %58 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %57)
  call void (ptr, ...) @error_line(ptr noundef @.str.2, ptr noundef %58)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

59:                                               ; preds = %52, %46
  br label %60

60:                                               ; preds = %59
  call void @WavpackStreamBigEndianToNative(ptr noundef %14, ptr noundef @.str.3)
  %61 = load i64, ptr %12, align 8, !tbaa !9
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %63, label %86

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

69:                                               ; preds = %63
  %70 = getelementptr inbounds %struct.DFFFileHeader, ptr %14, i32 0, i32 1
  %71 = load i64, ptr %70, align 2, !tbaa !16
  %72 = icmp ne i64 %71, 0
  br i1 %72, label %73, label %86

73:                                               ; preds = %69
  %74 = getelementptr inbounds %struct.DFFFileHeader, ptr %14, i32 0, i32 1
  %75 = load i64, ptr %74, align 2, !tbaa !16
  %76 = add nsw i64 %75, 1
  %77 = icmp ne i64 %76, 0
  br i1 %77, label %78, label %86

78:                                               ; preds = %73
  %79 = getelementptr inbounds %struct.DFFFileHeader, ptr %14, i32 0, i32 1
  %80 = load i64, ptr %79, align 2, !tbaa !16
  %81 = add nsw i64 %80, 12
  %82 = load i64, ptr %12, align 8, !tbaa !9
  %83 = icmp ne i64 %81, %82
  br i1 %83, label %84, label %86

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

86:                                               ; preds = %78, %73, %69, %63, %60
  %87 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %88 = icmp ne i32 %87, 0
  br i1 %88, label %89, label %92

89:                                               ; preds = %86
  %90 = getelementptr inbounds %struct.DFFFileHeader, ptr %14, i32 0, i32 1
  %91 = load i64, ptr %90, align 2, !tbaa !16
  call void (ptr, ...) @error_line(ptr noundef @.str.5, i64 noundef %91)
  br label %92

92:                                               ; preds = %89, %86
  br label %93

93:                                               ; preds = %661, %92
  br label %94

94:                                               ; preds = %93
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = call i32 @DoReadFile(ptr noundef %95, ptr noundef %15, i32 noundef 12, ptr noundef %16)
  %97 = icmp ne i32 %96, 0
  br i1 %97, label %98, label %102

98:                                               ; preds = %94
  %99 = load i32, ptr %16, align 4, !tbaa !11
  %100 = zext i32 %99 to i64
  %101 = icmp ne i64 %100, 12
  br i1 %101, label %102, label %104

102:                                              ; preds = %98, %94
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %103)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

104:                                              ; preds = %98
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %105, i32 0, i32 4
  %107 = load i32, ptr %106, align 8, !tbaa !13
  %108 = and i32 %107, 512
  %109 = icmp ne i32 %108, 0
  br i1 %109, label %117, label %110

110:                                              ; preds = %104
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = call i32 @WavpackStreamAddWrapper(ptr noundef %111, ptr noundef %15, i32 noundef 12)
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %117, label %114

114:                                              ; preds = %110
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %115)
  call void (ptr, ...) @error_line(ptr noundef @.str.2, ptr noundef %116)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

117:                                              ; preds = %110, %104
  br label %118

118:                                              ; preds = %117
  call void @WavpackStreamBigEndianToNative(ptr noundef %15, ptr noundef @.str.6)
  %119 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %121, label %124

121:                                              ; preds = %118
  %122 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %123 = load i64, ptr %122, align 2, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.7, i64 noundef %123)
  br label %124

124:                                              ; preds = %121, %118
  %125 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %126 = getelementptr inbounds [4 x i8], ptr %125, i64 0, i64 0
  %127 = call i32 @strncmp(ptr noundef %126, ptr noundef @.str.8, i64 noundef 4) #8
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %166, label %129

129:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %130 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %131 = load i64, ptr %130, align 2, !tbaa !18
  %132 = icmp ne i64 %131, 4
  br i1 %132, label %141, label %133

133:                                              ; preds = %129
  %134 = load ptr, ptr %7, align 8, !tbaa !5
  %135 = call i32 @DoReadFile(ptr noundef %134, ptr noundef %18, i32 noundef 4, ptr noundef %16)
  %136 = icmp ne i32 %135, 0
  br i1 %136, label %137, label %141

137:                                              ; preds = %133
  %138 = load i32, ptr %16, align 4, !tbaa !11
  %139 = zext i32 %138 to i64
  %140 = icmp ne i64 %139, 4
  br i1 %140, label %141, label %143

141:                                              ; preds = %137, %133, %129
  %142 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %142)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %163

143:                                              ; preds = %137
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %144, i32 0, i32 4
  %146 = load i32, ptr %145, align 8, !tbaa !13
  %147 = and i32 %146, 512
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %156, label %149

149:                                              ; preds = %143
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = call i32 @WavpackStreamAddWrapper(ptr noundef %150, ptr noundef %18, i32 noundef 4)
  %152 = icmp ne i32 %151, 0
  br i1 %152, label %156, label %153

153:                                              ; preds = %149
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %154)
  call void (ptr, ...) @error_line(ptr noundef @.str.2, ptr noundef %155)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %163

156:                                              ; preds = %149, %143
  br label %157

157:                                              ; preds = %156
  call void @WavpackStreamBigEndianToNative(ptr noundef %18, ptr noundef @.str.9)
  %158 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %162

160:                                              ; preds = %157
  %161 = load i32, ptr %18, align 4, !tbaa !11
  call void (ptr, ...) @error_line(ptr noundef @.str.10, i32 noundef %161)
  br label %162

162:                                              ; preds = %160, %157
  store i32 0, ptr %17, align 4
  br label %163

163:                                              ; preds = %162, %153, %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  %164 = load i32, ptr %17, align 4
  switch i32 %164, label %678 [
    i32 0, label %165
  ]

165:                                              ; preds = %163
  br label %661

166:                                              ; preds = %124
  %167 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %168 = getelementptr inbounds [4 x i8], ptr %167, i64 0, i64 0
  %169 = call i32 @strncmp(ptr noundef %168, ptr noundef @.str.11, i64 noundef 4) #8
  %170 = icmp ne i32 %169, 0
  br i1 %170, label %565, label %171

171:                                              ; preds = %166
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %172 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %173 = load i64, ptr %172, align 2, !tbaa !18
  %174 = icmp slt i64 %173, 4
  br i1 %174, label %179, label %175

175:                                              ; preds = %171
  %176 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %177 = load i64, ptr %176, align 2, !tbaa !18
  %178 = icmp sgt i64 %177, 1024
  br i1 %178, label %179, label %181

179:                                              ; preds = %175, %171
  %180 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %180)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %562

181:                                              ; preds = %175
  %182 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %184, label %188

184:                                              ; preds = %181
  %185 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %186 = load i64, ptr %185, align 2, !tbaa !18
  %187 = trunc i64 %186 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.12, i32 noundef %187)
  br label %188

188:                                              ; preds = %184, %181
  %189 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %190 = load i64, ptr %189, align 2, !tbaa !18
  %191 = call noalias ptr @malloc(i64 noundef %190) #9
  store ptr %191, ptr %19, align 8, !tbaa !5
  %192 = load ptr, ptr %7, align 8, !tbaa !5
  %193 = load ptr, ptr %19, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %195 = load i64, ptr %194, align 2, !tbaa !18
  %196 = trunc i64 %195 to i32
  %197 = call i32 @DoReadFile(ptr noundef %192, ptr noundef %193, i32 noundef %196, ptr noundef %16)
  %198 = icmp ne i32 %197, 0
  br i1 %198, label %199, label %205

199:                                              ; preds = %188
  %200 = load i32, ptr %16, align 4, !tbaa !11
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %203 = load i64, ptr %202, align 2, !tbaa !18
  %204 = icmp ne i64 %201, %203
  br i1 %204, label %205, label %208

205:                                              ; preds = %199, %188
  %206 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %206)
  %207 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %207) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %562

208:                                              ; preds = %199
  %209 = load ptr, ptr %11, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %209, i32 0, i32 4
  %211 = load i32, ptr %210, align 8, !tbaa !13
  %212 = and i32 %211, 512
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %226, label %214

214:                                              ; preds = %208
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = load ptr, ptr %19, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %218 = load i64, ptr %217, align 2, !tbaa !18
  %219 = trunc i64 %218 to i32
  %220 = call i32 @WavpackStreamAddWrapper(ptr noundef %215, ptr noundef %216, i32 noundef %219)
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %226, label %222

222:                                              ; preds = %214
  %223 = load ptr, ptr %10, align 8, !tbaa !5
  %224 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %223)
  call void (ptr, ...) @error_line(ptr noundef @.str.2, ptr noundef %224)
  %225 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %225) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %562

226:                                              ; preds = %214, %208
  br label %227

227:                                              ; preds = %226
  %228 = load ptr, ptr %19, align 8, !tbaa !5
  %229 = call i32 @strncmp(ptr noundef %228, ptr noundef @.str.13, i64 noundef 4) #8
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %537, label %231

231:                                              ; preds = %227
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %232 = load ptr, ptr %19, align 8, !tbaa !5
  %233 = getelementptr inbounds i8, ptr %232, i64 4
  store ptr %233, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  %234 = load ptr, ptr %19, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %236 = load i64, ptr %235, align 2, !tbaa !18
  %237 = getelementptr inbounds i8, ptr %234, i64 %236
  store ptr %237, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #7
  store i16 0, ptr %22, align 2, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 2, ptr %24) #7
  store i16 0, ptr %24, align 2, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store i32 0, ptr %25, align 4, !tbaa !11
  br label %238

238:                                              ; preds = %490, %231
  %239 = load ptr, ptr %21, align 8, !tbaa !5
  %240 = load ptr, ptr %20, align 8, !tbaa !5
  %241 = ptrtoint ptr %239 to i64
  %242 = ptrtoint ptr %240 to i64
  %243 = sub i64 %241, %242
  %244 = icmp uge i64 %243, 12
  br i1 %244, label %245, label %491

245:                                              ; preds = %238
  %246 = load ptr, ptr %20, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %15, ptr align 1 %246, i64 12, i1 false)
  %247 = load ptr, ptr %20, align 8, !tbaa !5
  %248 = getelementptr inbounds i8, ptr %247, i64 12
  store ptr %248, ptr %20, align 8, !tbaa !5
  call void @WavpackStreamBigEndianToNative(ptr noundef %15, ptr noundef @.str.6)
  %249 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %250 = load i64, ptr %249, align 2, !tbaa !18
  %251 = icmp sgt i64 %250, 0
  br i1 %251, label %252, label %487

252:                                              ; preds = %245
  %253 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %254 = load i64, ptr %253, align 2, !tbaa !18
  %255 = load ptr, ptr %21, align 8, !tbaa !5
  %256 = load ptr, ptr %20, align 8, !tbaa !5
  %257 = ptrtoint ptr %255 to i64
  %258 = ptrtoint ptr %256 to i64
  %259 = sub i64 %257, %258
  %260 = icmp sle i64 %254, %259
  br i1 %260, label %261, label %487

261:                                              ; preds = %252
  %262 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %263 = getelementptr inbounds [4 x i8], ptr %262, i64 0, i64 0
  %264 = call i32 @strncmp(ptr noundef %263, ptr noundef @.str.14, i64 noundef 4) #8
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %281, label %266

266:                                              ; preds = %261
  %267 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %268 = load i64, ptr %267, align 2, !tbaa !18
  %269 = icmp eq i64 %268, 4
  br i1 %269, label %270, label %281

270:                                              ; preds = %266
  %271 = load ptr, ptr %20, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 1 %271, i64 4, i1 false)
  call void @WavpackStreamBigEndianToNative(ptr noundef %25, ptr noundef @.str.9)
  %272 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %273 = load i64, ptr %272, align 2, !tbaa !18
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %274, i64 %273
  store ptr %275, ptr %20, align 8, !tbaa !5
  %276 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %277 = icmp ne i32 %276, 0
  br i1 %277, label %278, label %280

278:                                              ; preds = %270
  %279 = load i32, ptr %25, align 4, !tbaa !11
  call void (ptr, ...) @error_line(ptr noundef @.str.15, i32 noundef %279)
  br label %280

280:                                              ; preds = %278, %270
  br label %486

281:                                              ; preds = %266, %261
  %282 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %283 = getelementptr inbounds [4 x i8], ptr %282, i64 0, i64 0
  %284 = call i32 @strncmp(ptr noundef %283, ptr noundef @.str.16, i64 noundef 4) #8
  %285 = icmp ne i32 %284, 0
  br i1 %285, label %421, label %286

286:                                              ; preds = %281
  %287 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %288 = load i64, ptr %287, align 2, !tbaa !18
  %289 = icmp sge i64 %288, 2
  br i1 %289, label %290, label %421

290:                                              ; preds = %286
  %291 = load ptr, ptr %20, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 2 %22, ptr align 1 %291, i64 2, i1 false)
  call void @WavpackStreamBigEndianToNative(ptr noundef %22, ptr noundef @.str.17)
  %292 = load ptr, ptr %20, align 8, !tbaa !5
  %293 = getelementptr inbounds i8, ptr %292, i64 2
  store ptr %293, ptr %20, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %295 = load i64, ptr %294, align 2, !tbaa !18
  %296 = sub i64 %295, 2
  %297 = trunc i64 %296 to i32
  %298 = sdiv i32 %297, 4
  %299 = trunc i32 %298 to i16
  store i16 %299, ptr %23, align 2, !tbaa !20
  %300 = load i16, ptr %22, align 2, !tbaa !20
  %301 = zext i16 %300 to i32
  %302 = load i16, ptr %23, align 2, !tbaa !20
  %303 = zext i16 %302 to i32
  %304 = icmp slt i32 %301, %303
  br i1 %304, label %313, label %305

305:                                              ; preds = %290
  %306 = load i16, ptr %22, align 2, !tbaa !20
  %307 = zext i16 %306 to i32
  %308 = icmp slt i32 %307, 1
  br i1 %308, label %313, label %309

309:                                              ; preds = %305
  %310 = load i16, ptr %22, align 2, !tbaa !20
  %311 = zext i16 %310 to i32
  %312 = icmp sgt i32 %311, 256
  br i1 %312, label %313, label %316

313:                                              ; preds = %309, %305, %290
  %314 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %314)
  %315 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %315) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %534

316:                                              ; preds = %309
  br label %317

317:                                              ; preds = %409, %316
  %318 = load i16, ptr %23, align 2, !tbaa !20
  %319 = add i16 %318, -1
  store i16 %319, ptr %23, align 2, !tbaa !20
  %320 = icmp ne i16 %318, 0
  br i1 %320, label %321, label %412

321:                                              ; preds = %317
  %322 = load ptr, ptr %20, align 8, !tbaa !5
  %323 = call i32 @strncmp(ptr noundef %322, ptr noundef @.str.18, i64 noundef 4) #8
  %324 = icmp ne i32 %323, 0
  br i1 %324, label %325, label %329

325:                                              ; preds = %321
  %326 = load ptr, ptr %20, align 8, !tbaa !5
  %327 = call i32 @strncmp(ptr noundef %326, ptr noundef @.str.19, i64 noundef 4) #8
  %328 = icmp ne i32 %327, 0
  br i1 %328, label %334, label %329

329:                                              ; preds = %325, %321
  %330 = load i16, ptr %24, align 2, !tbaa !20
  %331 = zext i16 %330 to i32
  %332 = or i32 %331, 1
  %333 = trunc i32 %332 to i16
  store i16 %333, ptr %24, align 2, !tbaa !20
  br label %409

334:                                              ; preds = %325
  %335 = load ptr, ptr %20, align 8, !tbaa !5
  %336 = call i32 @strncmp(ptr noundef %335, ptr noundef @.str.20, i64 noundef 4) #8
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %342

338:                                              ; preds = %334
  %339 = load ptr, ptr %20, align 8, !tbaa !5
  %340 = call i32 @strncmp(ptr noundef %339, ptr noundef @.str.21, i64 noundef 4) #8
  %341 = icmp ne i32 %340, 0
  br i1 %341, label %347, label %342

342:                                              ; preds = %338, %334
  %343 = load i16, ptr %24, align 2, !tbaa !20
  %344 = zext i16 %343 to i32
  %345 = or i32 %344, 2
  %346 = trunc i32 %345 to i16
  store i16 %346, ptr %24, align 2, !tbaa !20
  br label %408

347:                                              ; preds = %338
  %348 = load ptr, ptr %20, align 8, !tbaa !5
  %349 = call i32 @strncmp(ptr noundef %348, ptr noundef @.str.22, i64 noundef 4) #8
  %350 = icmp ne i32 %349, 0
  br i1 %350, label %356, label %351

351:                                              ; preds = %347
  %352 = load i16, ptr %24, align 2, !tbaa !20
  %353 = zext i16 %352 to i32
  %354 = or i32 %353, 16
  %355 = trunc i32 %354 to i16
  store i16 %355, ptr %24, align 2, !tbaa !20
  br label %407

356:                                              ; preds = %347
  %357 = load ptr, ptr %20, align 8, !tbaa !5
  %358 = call i32 @strncmp(ptr noundef %357, ptr noundef @.str.23, i64 noundef 4) #8
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %365, label %360

360:                                              ; preds = %356
  %361 = load i16, ptr %24, align 2, !tbaa !20
  %362 = zext i16 %361 to i32
  %363 = or i32 %362, 32
  %364 = trunc i32 %363 to i16
  store i16 %364, ptr %24, align 2, !tbaa !20
  br label %406

365:                                              ; preds = %356
  %366 = load ptr, ptr %20, align 8, !tbaa !5
  %367 = call i32 @strncmp(ptr noundef %366, ptr noundef @.str.24, i64 noundef 4) #8
  %368 = icmp ne i32 %367, 0
  br i1 %368, label %374, label %369

369:                                              ; preds = %365
  %370 = load i16, ptr %24, align 2, !tbaa !20
  %371 = zext i16 %370 to i32
  %372 = or i32 %371, 4
  %373 = trunc i32 %372 to i16
  store i16 %373, ptr %24, align 2, !tbaa !20
  br label %405

374:                                              ; preds = %365
  %375 = load ptr, ptr %20, align 8, !tbaa !5
  %376 = call i32 @strncmp(ptr noundef %375, ptr noundef @.str.25, i64 noundef 4) #8
  %377 = icmp ne i32 %376, 0
  br i1 %377, label %383, label %378

378:                                              ; preds = %374
  %379 = load i16, ptr %24, align 2, !tbaa !20
  %380 = zext i16 %379 to i32
  %381 = or i32 %380, 8
  %382 = trunc i32 %381 to i16
  store i16 %382, ptr %24, align 2, !tbaa !20
  br label %404

383:                                              ; preds = %374
  %384 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %386, label %403

386:                                              ; preds = %383
  %387 = load ptr, ptr %20, align 8, !tbaa !5
  %388 = getelementptr inbounds i8, ptr %387, i64 0
  %389 = load i8, ptr %388, align 1, !tbaa !22
  %390 = sext i8 %389 to i32
  %391 = load ptr, ptr %20, align 8, !tbaa !5
  %392 = getelementptr inbounds i8, ptr %391, i64 1
  %393 = load i8, ptr %392, align 1, !tbaa !22
  %394 = sext i8 %393 to i32
  %395 = load ptr, ptr %20, align 8, !tbaa !5
  %396 = getelementptr inbounds i8, ptr %395, i64 2
  %397 = load i8, ptr %396, align 1, !tbaa !22
  %398 = sext i8 %397 to i32
  %399 = load ptr, ptr %20, align 8, !tbaa !5
  %400 = getelementptr inbounds i8, ptr %399, i64 3
  %401 = load i8, ptr %400, align 1, !tbaa !22
  %402 = sext i8 %401 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.26, i32 noundef %390, i32 noundef %394, i32 noundef %398, i32 noundef %402)
  br label %403

403:                                              ; preds = %386, %383
  br label %404

404:                                              ; preds = %403, %378
  br label %405

405:                                              ; preds = %404, %369
  br label %406

406:                                              ; preds = %405, %360
  br label %407

407:                                              ; preds = %406, %351
  br label %408

408:                                              ; preds = %407, %342
  br label %409

409:                                              ; preds = %408, %329
  %410 = load ptr, ptr %20, align 8, !tbaa !5
  %411 = getelementptr inbounds i8, ptr %410, i64 4
  store ptr %411, ptr %20, align 8, !tbaa !5
  br label %317, !llvm.loop !23

412:                                              ; preds = %317
  %413 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %414 = icmp ne i32 %413, 0
  br i1 %414, label %415, label %420

415:                                              ; preds = %412
  %416 = load i16, ptr %22, align 2, !tbaa !20
  %417 = zext i16 %416 to i32
  %418 = load i16, ptr %24, align 2, !tbaa !20
  %419 = zext i16 %418 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.27, i32 noundef %417, i32 noundef %419)
  br label %420

420:                                              ; preds = %415, %412
  br label %485

421:                                              ; preds = %286, %281
  %422 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %423 = getelementptr inbounds [4 x i8], ptr %422, i64 0, i64 0
  %424 = call i32 @strncmp(ptr noundef %423, ptr noundef @.str.28, i64 noundef 4) #8
  %425 = icmp ne i32 %424, 0
  br i1 %425, label %457, label %426

426:                                              ; preds = %421
  %427 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %428 = load i64, ptr %427, align 2, !tbaa !18
  %429 = icmp sge i64 %428, 4
  br i1 %429, label %430, label %457

430:                                              ; preds = %426
  %431 = load ptr, ptr %20, align 8, !tbaa !5
  %432 = call i32 @strncmp(ptr noundef %431, ptr noundef @.str, i64 noundef 4) #8
  %433 = icmp ne i32 %432, 0
  br i1 %433, label %434, label %452

434:                                              ; preds = %430
  %435 = load ptr, ptr %20, align 8, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %435, i64 0
  %437 = load i8, ptr %436, align 1, !tbaa !22
  %438 = sext i8 %437 to i32
  %439 = load ptr, ptr %20, align 8, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %439, i64 1
  %441 = load i8, ptr %440, align 1, !tbaa !22
  %442 = sext i8 %441 to i32
  %443 = load ptr, ptr %20, align 8, !tbaa !5
  %444 = getelementptr inbounds i8, ptr %443, i64 2
  %445 = load i8, ptr %444, align 1, !tbaa !22
  %446 = sext i8 %445 to i32
  %447 = load ptr, ptr %20, align 8, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %447, i64 3
  %449 = load i8, ptr %448, align 1, !tbaa !22
  %450 = sext i8 %449 to i32
  call void (ptr, ...) @error_line(ptr noundef @.str.29, i32 noundef %438, i32 noundef %442, i32 noundef %446, i32 noundef %450)
  %451 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %451) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %534

452:                                              ; preds = %430
  %453 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %454 = load i64, ptr %453, align 2, !tbaa !18
  %455 = load ptr, ptr %20, align 8, !tbaa !5
  %456 = getelementptr inbounds i8, ptr %455, i64 %454
  store ptr %456, ptr %20, align 8, !tbaa !5
  br label %484

457:                                              ; preds = %426, %421
  %458 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %459 = icmp ne i32 %458, 0
  br i1 %459, label %460, label %479

460:                                              ; preds = %457
  %461 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %462 = getelementptr inbounds [4 x i8], ptr %461, i64 0, i64 0
  %463 = load i8, ptr %462, align 2, !tbaa !22
  %464 = sext i8 %463 to i32
  %465 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %466 = getelementptr inbounds [4 x i8], ptr %465, i64 0, i64 1
  %467 = load i8, ptr %466, align 1, !tbaa !22
  %468 = sext i8 %467 to i32
  %469 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %470 = getelementptr inbounds [4 x i8], ptr %469, i64 0, i64 2
  %471 = load i8, ptr %470, align 2, !tbaa !22
  %472 = sext i8 %471 to i32
  %473 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %474 = getelementptr inbounds [4 x i8], ptr %473, i64 0, i64 3
  %475 = load i8, ptr %474, align 1, !tbaa !22
  %476 = sext i8 %475 to i32
  %477 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %478 = load i64, ptr %477, align 2, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.30, i32 noundef %464, i32 noundef %468, i32 noundef %472, i32 noundef %476, i64 noundef %478)
  br label %479

479:                                              ; preds = %460, %457
  %480 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %481 = load i64, ptr %480, align 2, !tbaa !18
  %482 = load ptr, ptr %20, align 8, !tbaa !5
  %483 = getelementptr inbounds i8, ptr %482, i64 %481
  store ptr %483, ptr %20, align 8, !tbaa !5
  br label %484

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

485:                                              ; preds = %484, %420
  br label %486

486:                                              ; preds = %485, %280
  br label %490

487:                                              ; preds = %252, %245
  %488 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %488)
  %489 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %489) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %534

490:                                              ; preds = %486
  br label %238, !llvm.loop !25

491:                                              ; preds = %238
  %492 = load i16, ptr %24, align 2, !tbaa !20
  %493 = zext i16 %492 to i32
  %494 = icmp ne i32 %493, 0
  br i1 %494, label %495, label %508

495:                                              ; preds = %491
  %496 = load ptr, ptr %11, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %496, i32 0, i32 13
  %498 = load i32, ptr %497, align 4, !tbaa !26
  %499 = icmp ne i32 %498, 0
  br i1 %499, label %506, label %500

500:                                              ; preds = %495
  %501 = load ptr, ptr %11, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %501, i32 0, i32 4
  %503 = load i32, ptr %502, align 8, !tbaa !13
  %504 = and i32 %503, 1024
  %505 = icmp ne i32 %504, 0
  br i1 %505, label %506, label %508

506:                                              ; preds = %500, %495
  call void (ptr, ...) @error_line(ptr noundef @.str.31)
  %507 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %507) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %534

508:                                              ; preds = %500, %491
  %509 = load i16, ptr %24, align 2, !tbaa !20
  %510 = icmp ne i16 %509, 0
  br i1 %510, label %511, label %516

511:                                              ; preds = %508
  %512 = load i16, ptr %24, align 2, !tbaa !20
  %513 = zext i16 %512 to i32
  %514 = load ptr, ptr %11, align 8, !tbaa !5
  %515 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %514, i32 0, i32 13
  store i32 %513, ptr %515, align 4, !tbaa !26
  br label %516

516:                                              ; preds = %511, %508
  br label %517

517:                                              ; preds = %516
  %518 = load ptr, ptr %11, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %518, i32 0, i32 2
  store i32 8, ptr %519, align 8, !tbaa !27
  %520 = load ptr, ptr %11, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %520, i32 0, i32 3
  store i32 1, ptr %521, align 4, !tbaa !28
  %522 = load i16, ptr %22, align 2, !tbaa !20
  %523 = zext i16 %522 to i32
  %524 = load ptr, ptr %11, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %524, i32 0, i32 7
  store i32 %523, ptr %525, align 4, !tbaa !29
  %526 = load i32, ptr %25, align 4, !tbaa !11
  %527 = udiv i32 %526, 8
  %528 = load ptr, ptr %11, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %528, i32 0, i32 12
  store i32 %527, ptr %529, align 8, !tbaa !30
  %530 = load ptr, ptr %11, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %530, i32 0, i32 4
  %532 = load i32, ptr %531, align 8, !tbaa !13
  %533 = or i32 %532, 32
  store i32 %533, ptr %531, align 8, !tbaa !13
  store i32 0, ptr %17, align 4
  br label %534

534:                                              ; preds = %517, %506, %487, %434, %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  %535 = load i32, ptr %17, align 4
  switch i32 %535, label %562 [
    i32 0, label %536
  ]

536:                                              ; preds = %534
  br label %560

537:                                              ; preds = %227
  %538 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %539 = icmp ne i32 %538, 0
  br i1 %539, label %540, label %559

540:                                              ; preds = %537
  %541 = load ptr, ptr %19, align 8, !tbaa !5
  %542 = getelementptr inbounds i8, ptr %541, i64 0
  %543 = load i8, ptr %542, align 1, !tbaa !22
  %544 = sext i8 %543 to i32
  %545 = load ptr, ptr %19, align 8, !tbaa !5
  %546 = getelementptr inbounds i8, ptr %545, i64 1
  %547 = load i8, ptr %546, align 1, !tbaa !22
  %548 = sext i8 %547 to i32
  %549 = load ptr, ptr %19, align 8, !tbaa !5
  %550 = getelementptr inbounds i8, ptr %549, i64 2
  %551 = load i8, ptr %550, align 1, !tbaa !22
  %552 = sext i8 %551 to i32
  %553 = load ptr, ptr %19, align 8, !tbaa !5
  %554 = getelementptr inbounds i8, ptr %553, i64 3
  %555 = load i8, ptr %554, align 1, !tbaa !22
  %556 = sext i8 %555 to i32
  %557 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %558 = load i64, ptr %557, align 2, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.32, i32 noundef %544, i32 noundef %548, i32 noundef %552, i32 noundef %556, i64 noundef %558)
  br label %559

559:                                              ; preds = %540, %537
  br label %560

560:                                              ; preds = %559, %536
  %561 = load ptr, ptr %19, align 8, !tbaa !5
  call void @free(ptr noundef %561) #7
  store i32 0, ptr %17, align 4
  br label %562

562:                                              ; preds = %560, %534, %222, %205, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %563 = load i32, ptr %17, align 4
  switch i32 %563, label %678 [
    i32 0, label %564
  ]

564:                                              ; preds = %562
  br label %660

565:                                              ; preds = %166
  %566 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %567 = getelementptr inbounds [4 x i8], ptr %566, i64 0, i64 0
  %568 = call i32 @strncmp(ptr noundef %567, ptr noundef @.str, i64 noundef 4) #8
  %569 = icmp ne i32 %568, 0
  br i1 %569, label %590, label %570

570:                                              ; preds = %565
  %571 = load ptr, ptr %11, align 8, !tbaa !5
  %572 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %571, i32 0, i32 7
  %573 = load i32, ptr %572, align 4, !tbaa !29
  %574 = icmp ne i32 %573, 0
  br i1 %574, label %575, label %580

575:                                              ; preds = %570
  %576 = load ptr, ptr %11, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %576, i32 0, i32 12
  %578 = load i32, ptr %577, align 8, !tbaa !30
  %579 = icmp ne i32 %578, 0
  br i1 %579, label %582, label %580

580:                                              ; preds = %575, %570
  %581 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %581)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

582:                                              ; preds = %575
  %583 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %584 = load i64, ptr %583, align 2, !tbaa !18
  %585 = load ptr, ptr %11, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %585, i32 0, i32 7
  %587 = load i32, ptr %586, align 4, !tbaa !29
  %588 = sext i32 %587 to i64
  %589 = sdiv i64 %584, %588
  store i64 %589, ptr %13, align 8, !tbaa !9
  br label %662

590:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %591 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %592 = load i64, ptr %591, align 2, !tbaa !18
  %593 = add nsw i64 %592, 1
  %594 = and i64 %593, -2
  %595 = trunc i64 %594 to i32
  store i32 %595, ptr %26, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %596 = load i32, ptr %26, align 4, !tbaa !11
  %597 = icmp slt i32 %596, 0
  br i1 %597, label %601, label %598

598:                                              ; preds = %590
  %599 = load i32, ptr %26, align 4, !tbaa !11
  %600 = icmp sgt i32 %599, 4194304
  br i1 %600, label %601, label %603

601:                                              ; preds = %598, %590
  %602 = load ptr, ptr %8, align 8, !tbaa !5
  call void (ptr, ...) @error_line(ptr noundef @.str.1, ptr noundef %602)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %656

603:                                              ; preds = %598
  %604 = load i32, ptr %26, align 4, !tbaa !11
  %605 = sext i32 %604 to i64
  %606 = call noalias ptr @malloc(i64 noundef %605) #9
  store ptr %606, ptr %27, align 8, !tbaa !5
  %607 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %608 = icmp ne i32 %607, 0
  br i1 %608, label %609, label %628

609:                                              ; preds = %603
  %610 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %611 = getelementptr inbounds [4 x i8], ptr %610, i64 0, i64 0
  %612 = load i8, ptr %611, align 2, !tbaa !22
  %613 = sext i8 %612 to i32
  %614 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %615 = getelementptr inbounds [4 x i8], ptr %614, i64 0, i64 1
  %616 = load i8, ptr %615, align 1, !tbaa !22
  %617 = sext i8 %616 to i32
  %618 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %619 = getelementptr inbounds [4 x i8], ptr %618, i64 0, i64 2
  %620 = load i8, ptr %619, align 2, !tbaa !22
  %621 = sext i8 %620 to i32
  %622 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 0
  %623 = getelementptr inbounds [4 x i8], ptr %622, i64 0, i64 3
  %624 = load i8, ptr %623, align 1, !tbaa !22
  %625 = sext i8 %624 to i32
  %626 = getelementptr inbounds %struct.DFFChunkHeader, ptr %15, i32 0, i32 1
  %627 = load i64, ptr %626, align 2, !tbaa !18
  call void (ptr, ...) @error_line(ptr noundef @.str.33, i32 noundef %613, i32 noundef %617, i32 noundef %621, i32 noundef %625, i64 noundef %627)
  br label %628

628:                                              ; preds = %609, %603
  %629 = load ptr, ptr %7, align 8, !tbaa !5
  %630 = load ptr, ptr %27, align 8, !tbaa !5
  %631 = load i32, ptr %26, align 4, !tbaa !11
  %632 = call i32 @DoReadFile(ptr noundef %629, ptr noundef %630, i32 noundef %631, ptr noundef %16)
  %633 = icmp ne i32 %632, 0
  br i1 %633, label %634, label %650

634:                                              ; preds = %628
  %635 = load i32, ptr %16, align 4, !tbaa !11
  %636 = load i32, ptr %26, align 4, !tbaa !11
  %637 = icmp ne i32 %635, %636
  br i1 %637, label %650, label %638

638:                                              ; preds = %634
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds %struct.WavpackStreamConfig, ptr %639, i32 0, i32 4
  %641 = load i32, ptr %640, align 8, !tbaa !13
  %642 = and i32 %641, 512
  %643 = icmp ne i32 %642, 0
  br i1 %643, label %654, label %644

644:                                              ; preds = %638
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = load ptr, ptr %27, align 8, !tbaa !5
  %647 = load i32, ptr %26, align 4, !tbaa !11
  %648 = call i32 @WavpackStreamAddWrapper(ptr noundef %645, ptr noundef %646, i32 noundef %647)
  %649 = icmp ne i32 %648, 0
  br i1 %649, label %654, label %650

650:                                              ; preds = %644, %634, %628
  %651 = load ptr, ptr %10, align 8, !tbaa !5
  %652 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %651)
  call void (ptr, ...) @error_line(ptr noundef @.str.2, ptr noundef %652)
  %653 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %653) #7
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %656

654:                                              ; preds = %644, %638
  %655 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %655) #7
  store i32 0, ptr %17, align 4
  br label %656

656:                                              ; preds = %654, %650, %601
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  %657 = load i32, ptr %17, align 4
  switch i32 %657, label %678 [
    i32 0, label %658
  ]

658:                                              ; preds = %656
  br label %659

659:                                              ; preds = %658
  br label %660

660:                                              ; preds = %659, %564
  br label %661

661:                                              ; preds = %660, %165
  br label %93

662:                                              ; preds = %582
  %663 = load i32, ptr @debug_logging_mode, align 4, !tbaa !11
  %664 = icmp ne i32 %663, 0
  br i1 %664, label %665, label %667

665:                                              ; preds = %662
  %666 = load i64, ptr %13, align 8, !tbaa !9
  call void (ptr, ...) @error_line(ptr noundef @.str.34, i64 noundef %666)
  br label %667

667:                                              ; preds = %665, %662
  %668 = load ptr, ptr %10, align 8, !tbaa !5
  %669 = load ptr, ptr %11, align 8, !tbaa !5
  %670 = load i64, ptr %13, align 8, !tbaa !9
  %671 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %668, ptr noundef %669, i64 noundef %670, ptr noundef null)
  %672 = icmp ne i32 %671, 0
  br i1 %672, label %677, label %673

673:                                              ; preds = %667
  %674 = load ptr, ptr %8, align 8, !tbaa !5
  %675 = load ptr, ptr %10, align 8, !tbaa !5
  %676 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %675)
  call void (ptr, ...) @error_line(ptr noundef @.str.35, ptr noundef %674, ptr noundef %676)
  store i32 1, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

677:                                              ; preds = %667
  store i32 0, ptr %6, align 4
  store i32 1, ptr %17, align 4
  br label %678

678:                                              ; preds = %677, %673, %656, %580, %562, %163, %114, %102, %84, %56, %44
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 16, 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
  %679 = load i32, ptr %6, align 4
  ret i32 %679
}

; 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 @strncmp(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 @WavpackStreamBigEndianToNative(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

; 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 4}
!17 = !{!"", !7, i64 0, !10, i64 4, !7, i64 12}
!18 = !{!19, !10, i64 4}
!19 = !{!"", !7, i64 0, !10, i64 4}
!20 = !{!21, !21, i64 0}
!21 = !{!"short", !7, i64 0}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!14, !12, i64 52}
!27 = !{!14, !12, i64 8}
!28 = !{!14, !12, i64 12}
!29 = !{!14, !12, i64 28}
!30 = !{!14, !12, i64 48}


; 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.DFFFileHeader = type <{ [4 x i8], i64, [4 x i8] }>
%struct.DFFChunkHeader = type <{ [4 x i8], i64 }>

@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [45 x i8], align 1
@debug_logging_mode = external local_unnamed_addr global i32, align 4
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1

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

19:                                               ; preds = %5
  %20 = getelementptr inbounds i8, ptr %6, i64 12
  %21 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str, i64 noundef 4) #8
  %.not = icmp eq i32 %21, 0
  br i1 %.not, label %23, label %22

22:                                               ; preds = %19, %5
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge235

23:                                               ; preds = %19
  %24 = getelementptr inbounds i8, ptr %4, i64 16
  %25 = load i32, ptr %24, align 8, !tbaa !5
  %26 = and i32 %25, 512
  %.not177 = icmp eq i32 %26, 0
  br i1 %.not177, label %27, label %31

27:                                               ; preds = %23
  %28 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %6, i32 noundef 16) #7
  %.not178 = icmp eq i32 %28, 0
  br i1 %.not178, label %29, label %31

29:                                               ; preds = %27
  %30 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.2, ptr noundef %30) #7
  br label %.critedge235

31:                                               ; preds = %23, %27
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %6, ptr noundef nonnull @.str.3) #7
  %.not179 = icmp eq i64 %12, 0
  br i1 %.not179, label %41, label %32

32:                                               ; preds = %31
  %33 = load i32, ptr %24, align 8, !tbaa !5
  %34 = and i32 %33, 2048
  %35 = icmp ne i32 %34, 0
  %36 = load i64, ptr %14, align 4
  %37 = add i64 %36, 1
  %38 = icmp ult i64 %37, 2
  %or.cond228 = select i1 %35, i1 true, i1 %38
  %39 = add nsw i64 %36, 12
  %.not181 = icmp eq i64 %39, %12
  %or.cond229 = select i1 %or.cond228, i1 true, i1 %.not181
  br i1 %or.cond229, label %41, label %40

40:                                               ; preds = %32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.4, ptr noundef %1) #7
  br label %.critedge235

41:                                               ; preds = %32, %31
  %42 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not182 = icmp eq i32 %42, 0
  br i1 %.not182, label %45, label %43

43:                                               ; preds = %41
  %44 = load i64, ptr %14, align 4, !tbaa !13
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.5, i64 noundef %44) #7
  br label %45

45:                                               ; preds = %43, %41
  %46 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %7, i32 noundef 12, ptr noundef nonnull %8) #7
  %47 = icmp eq i32 %46, 0
  %48 = load i32, ptr %8, align 4
  %49 = icmp ne i32 %48, 12
  %or.cond11267 = select i1 %47, i1 true, i1 %49
  br i1 %or.cond11267, label %._crit_edge270, label %.lr.ph269

.lr.ph269:                                        ; preds = %45
  %50 = getelementptr inbounds i8, ptr %7, i64 4
  %51 = getelementptr inbounds i8, ptr %7, i64 1
  %52 = getelementptr inbounds i8, ptr %7, i64 2
  %53 = getelementptr inbounds i8, ptr %7, i64 3
  %54 = getelementptr inbounds i8, ptr %4, i64 52
  %55 = getelementptr inbounds i8, ptr %4, i64 8
  %56 = getelementptr inbounds i8, ptr %4, i64 12
  %57 = getelementptr inbounds i8, ptr %4, i64 28
  %58 = getelementptr inbounds i8, ptr %4, i64 48
  br label %59

._crit_edge270:                                   ; preds = %326, %45
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge235

59:                                               ; preds = %.lr.ph269, %326
  %60 = load i32, ptr %24, align 8, !tbaa !5
  %61 = and i32 %60, 512
  %.not183 = icmp eq i32 %61, 0
  br i1 %.not183, label %62, label %66

62:                                               ; preds = %59
  %63 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %7, i32 noundef 12) #7
  %.not184 = icmp eq i32 %63, 0
  br i1 %.not184, label %64, label %66

64:                                               ; preds = %62
  %65 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.2, ptr noundef %65) #7
  br label %.critedge235

66:                                               ; preds = %59, %62
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %7, ptr noundef nonnull @.str.6) #7
  %67 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not185 = icmp eq i32 %67, 0
  br i1 %.not185, label %70, label %68

68:                                               ; preds = %66
  %69 = load i64, ptr %50, align 2, !tbaa !16
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.7, i64 noundef %69) #7
  br label %70

70:                                               ; preds = %68, %66
  %71 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.8, i64 noundef 4) #8
  %.not186 = icmp eq i32 %71, 0
  br i1 %.not186, label %72, label %92

72:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  %73 = load i64, ptr %50, align 2, !tbaa !16
  %.not187 = icmp eq i64 %73, 4
  br i1 %.not187, label %74, label %79

74:                                               ; preds = %72
  %75 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %9, i32 noundef 4, ptr noundef nonnull %8) #7
  %76 = icmp eq i32 %75, 0
  %77 = load i32, ptr %8, align 4
  %78 = icmp ne i32 %77, 4
  %or.cond14 = select i1 %76, i1 true, i1 %78
  br i1 %or.cond14, label %79, label %80

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

80:                                               ; preds = %74
  %81 = load i32, ptr %24, align 8, !tbaa !5
  %82 = and i32 %81, 512
  %.not188 = icmp eq i32 %82, 0
  br i1 %.not188, label %83, label %87

83:                                               ; preds = %80
  %84 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef nonnull %9, i32 noundef 4) #7
  %.not189 = icmp eq i32 %84, 0
  br i1 %.not189, label %85, label %87

85:                                               ; preds = %83
  %86 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.2, ptr noundef %86) #7
  br label %.critedge

87:                                               ; preds = %80, %83
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %9, ptr noundef nonnull @.str.9) #7
  %88 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not190 = icmp eq i32 %88, 0
  br i1 %.not190, label %91, label %89

89:                                               ; preds = %87
  %90 = load i32, ptr %9, align 4, !tbaa !12
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.10, i32 noundef %90) #7
  br label %91

91:                                               ; preds = %87, %89
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %326

92:                                               ; preds = %70
  %93 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.11, i64 noundef 4) #8
  %.not191 = icmp eq i32 %93, 0
  br i1 %.not191, label %94, label %282

94:                                               ; preds = %92
  %95 = load i64, ptr %50, align 2
  %96 = add i64 %95, -1025
  %or.cond17 = icmp ult i64 %96, -1021
  br i1 %or.cond17, label %97, label %98

97:                                               ; preds = %94
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge235

98:                                               ; preds = %94
  %99 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not192 = icmp eq i32 %99, 0
  br i1 %.not192, label %102, label %100

100:                                              ; preds = %98
  %101 = trunc nuw nsw i64 %95 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.12, i32 noundef %101) #7
  %.pre = load i64, ptr %50, align 2, !tbaa !16
  br label %102

102:                                              ; preds = %100, %98
  %103 = phi i64 [ %.pre, %100 ], [ %95, %98 ]
  %104 = call noalias ptr @malloc(i64 noundef %103) #9
  %105 = trunc i64 %103 to i32
  %106 = call i32 @DoReadFile(ptr noundef %0, ptr noundef %104, i32 noundef %105, ptr noundef nonnull %8) #7
  %.not193 = icmp eq i32 %106, 0
  br i1 %.not193, label %111, label %107

107:                                              ; preds = %102
  %108 = load i32, ptr %8, align 4, !tbaa !12
  %109 = zext i32 %108 to i64
  %110 = load i64, ptr %50, align 2, !tbaa !16
  %.not194 = icmp eq i64 %110, %109
  br i1 %.not194, label %112, label %111

111:                                              ; preds = %107, %102
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  call void @free(ptr noundef %104) #7
  br label %.critedge235

112:                                              ; preds = %107
  %113 = load i32, ptr %24, align 8, !tbaa !5
  %114 = and i32 %113, 512
  %.not195 = icmp eq i32 %114, 0
  br i1 %.not195, label %115, label %119

115:                                              ; preds = %112
  %116 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef %104, i32 noundef %108) #7
  %.not196 = icmp eq i32 %116, 0
  br i1 %.not196, label %117, label %119

117:                                              ; preds = %115
  %118 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.2, ptr noundef %118) #7
  call void @free(ptr noundef %104) #7
  br label %.critedge235

119:                                              ; preds = %112, %115
  %120 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %104, ptr noundef nonnull dereferenceable(1) @.str.13, i64 noundef 4) #8
  %.not197 = icmp eq i32 %120, 0
  br i1 %.not197, label %121, label %266

121:                                              ; preds = %119
  %122 = load i64, ptr %50, align 2, !tbaa !16
  %123 = getelementptr inbounds i8, ptr %104, i64 %122
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %10) #7
  store i16 0, ptr %10, align 2, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #7
  store i32 0, ptr %11, align 4, !tbaa !12
  %124 = ptrtoint ptr %123 to i64
  %125 = add i64 %122, -16
  %126 = icmp ult i64 %125, -12
  br i1 %126, label %.lr.ph264.preheader, label %._crit_edge265._crit_edge

.lr.ph264.preheader:                              ; preds = %121
  %127 = getelementptr inbounds i8, ptr %104, i64 4
  br label %.lr.ph264

.lr.ph264:                                        ; preds = %.lr.ph264.preheader, %247
  %.0162262 = phi i16 [ %.3165, %247 ], [ 0, %.lr.ph264.preheader ]
  %.0167261 = phi ptr [ %.2169, %247 ], [ %127, %.lr.ph264.preheader ]
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 2 dereferenceable(12) %7, ptr noundef nonnull align 1 dereferenceable(12) %.0167261, i64 12, i1 false)
  %128 = getelementptr inbounds i8, ptr %.0167261, i64 12
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %7, ptr noundef nonnull @.str.6) #7
  %129 = load i64, ptr %50, align 2
  %130 = icmp slt i64 %129, 1
  %131 = ptrtoint ptr %128 to i64
  %132 = sub i64 %124, %131
  %.not202 = icmp sgt i64 %129, %132
  %or.cond231 = select i1 %130, i1 true, i1 %.not202
  br i1 %or.cond231, label %246, label %133

133:                                              ; preds = %.lr.ph264
  %134 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.14, i64 noundef 4) #8
  %135 = icmp eq i32 %134, 0
  %136 = icmp eq i64 %129, 4
  %or.cond20 = and i1 %136, %135
  br i1 %or.cond20, label %137, label %144

137:                                              ; preds = %133
  %138 = load i32, ptr %128, align 1
  store i32 %138, ptr %11, align 4
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %11, ptr noundef nonnull @.str.9) #7
  %139 = load i64, ptr %50, align 2, !tbaa !16
  %140 = getelementptr inbounds i8, ptr %128, i64 %139
  %141 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not216 = icmp eq i32 %141, 0
  br i1 %.not216, label %247, label %142

142:                                              ; preds = %137
  %143 = load i32, ptr %11, align 4, !tbaa !12
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.15, i32 noundef %143) #7
  br label %247

144:                                              ; preds = %133
  %145 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.16, i64 noundef 4) #8
  %146 = icmp eq i32 %145, 0
  %147 = icmp ne i64 %129, 1
  %or.cond23 = and i1 %147, %146
  br i1 %or.cond23, label %148, label %212

148:                                              ; preds = %144
  %149 = load i16, ptr %128, align 1
  store i16 %149, ptr %10, align 2
  call void @WavpackStreamBigEndianToNative(ptr noundef nonnull %10, ptr noundef nonnull @.str.17) #7
  %150 = load i64, ptr %50, align 2, !tbaa !16
  %151 = trunc i64 %150 to i32
  %152 = add i32 %151, -2
  %153 = sdiv i32 %152, 4
  %154 = load i16, ptr %10, align 2
  %155 = zext i16 %154 to i32
  %156 = and i32 %153, 65535
  %157 = icmp ugt i32 %156, %155
  %158 = add i16 %154, -257
  %159 = icmp ult i16 %158, -256
  %or.cond29 = or i1 %159, %157
  br i1 %or.cond29, label %162, label %.preheader

.preheader:                                       ; preds = %148
  %160 = trunc i32 %153 to i16
  %161 = getelementptr inbounds i8, ptr %.0167261, i64 14
  %.not205256 = icmp eq i16 %160, 0
  br i1 %.not205256, label %._crit_edge, label %.lr.ph

162:                                              ; preds = %148
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge233

.lr.ph:                                           ; preds = %.preheader, %205
  %.in = phi i16 [ %163, %205 ], [ %160, %.preheader ]
  %.1163259 = phi i16 [ %.2164, %205 ], [ %.0162262, %.preheader ]
  %.1168257 = phi ptr [ %206, %205 ], [ %161, %.preheader ]
  %163 = add i16 %.in, -1
  %164 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.18, i64 noundef 4) #8
  %.not207 = icmp eq i32 %164, 0
  br i1 %.not207, label %167, label %165

165:                                              ; preds = %.lr.ph
  %166 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.19, i64 noundef 4) #8
  %.not208 = icmp eq i32 %166, 0
  br i1 %.not208, label %167, label %169

167:                                              ; preds = %165, %.lr.ph
  %168 = or i16 %.1163259, 1
  br label %205

169:                                              ; preds = %165
  %170 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.20, i64 noundef 4) #8
  %.not209 = icmp eq i32 %170, 0
  br i1 %.not209, label %173, label %171

171:                                              ; preds = %169
  %172 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.21, i64 noundef 4) #8
  %.not210 = icmp eq i32 %172, 0
  br i1 %.not210, label %173, label %175

173:                                              ; preds = %171, %169
  %174 = or i16 %.1163259, 2
  br label %205

175:                                              ; preds = %171
  %176 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.22, i64 noundef 4) #8
  %.not211 = icmp eq i32 %176, 0
  br i1 %.not211, label %177, label %179

177:                                              ; preds = %175
  %178 = or i16 %.1163259, 16
  br label %205

179:                                              ; preds = %175
  %180 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.23, i64 noundef 4) #8
  %.not212 = icmp eq i32 %180, 0
  br i1 %.not212, label %181, label %183

181:                                              ; preds = %179
  %182 = or i16 %.1163259, 32
  br label %205

183:                                              ; preds = %179
  %184 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.24, i64 noundef 4) #8
  %.not213 = icmp eq i32 %184, 0
  br i1 %.not213, label %185, label %187

185:                                              ; preds = %183
  %186 = or i16 %.1163259, 4
  br label %205

187:                                              ; preds = %183
  %188 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %.1168257, ptr noundef nonnull dereferenceable(1) @.str.25, i64 noundef 4) #8
  %.not214 = icmp eq i32 %188, 0
  br i1 %.not214, label %189, label %191

189:                                              ; preds = %187
  %190 = or i16 %.1163259, 8
  br label %205

191:                                              ; preds = %187
  %192 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not215 = icmp eq i32 %192, 0
  br i1 %.not215, label %205, label %193

193:                                              ; preds = %191
  %194 = load i8, ptr %.1168257, align 1, !tbaa !20
  %195 = sext i8 %194 to i32
  %196 = getelementptr inbounds i8, ptr %.1168257, i64 1
  %197 = load i8, ptr %196, align 1, !tbaa !20
  %198 = sext i8 %197 to i32
  %199 = getelementptr inbounds i8, ptr %.1168257, i64 2
  %200 = load i8, ptr %199, align 1, !tbaa !20
  %201 = sext i8 %200 to i32
  %202 = getelementptr inbounds i8, ptr %.1168257, i64 3
  %203 = load i8, ptr %202, align 1, !tbaa !20
  %204 = sext i8 %203 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.26, i32 noundef %195, i32 noundef %198, i32 noundef %201, i32 noundef %204) #7
  br label %205

205:                                              ; preds = %173, %181, %189, %193, %191, %185, %177, %167
  %.2164 = phi i16 [ %.1163259, %193 ], [ %.1163259, %191 ], [ %190, %189 ], [ %186, %185 ], [ %182, %181 ], [ %178, %177 ], [ %174, %173 ], [ %168, %167 ]
  %206 = getelementptr inbounds i8, ptr %.1168257, i64 4
  %.not205 = icmp eq i16 %163, 0
  br i1 %.not205, label %._crit_edge, label %.lr.ph, !llvm.loop !21

._crit_edge:                                      ; preds = %205, %.preheader
  %.1168.lcssa = phi ptr [ %161, %.preheader ], [ %206, %205 ]
  %.1163.lcssa = phi i16 [ %.0162262, %.preheader ], [ %.2164, %205 ]
  %207 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not206 = icmp eq i32 %207, 0
  br i1 %.not206, label %247, label %208

208:                                              ; preds = %._crit_edge
  %209 = load i16, ptr %10, align 2, !tbaa !18
  %210 = zext i16 %209 to i32
  %211 = zext i16 %.1163.lcssa to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.27, i32 noundef %210, i32 noundef %211) #7
  br label %247

212:                                              ; preds = %144
  %213 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str.28, i64 noundef 4) #8
  %214 = icmp eq i32 %213, 0
  %215 = icmp ugt i64 %129, 3
  %or.cond32 = and i1 %215, %214
  br i1 %or.cond32, label %216, label %232

216:                                              ; preds = %212
  %217 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %128, ptr noundef nonnull dereferenceable(1) @.str, i64 noundef 4) #8
  %.not204 = icmp eq i32 %217, 0
  br i1 %.not204, label %230, label %218

218:                                              ; preds = %216
  %219 = load i8, ptr %128, align 1, !tbaa !20
  %220 = sext i8 %219 to i32
  %221 = getelementptr inbounds i8, ptr %.0167261, i64 13
  %222 = load i8, ptr %221, align 1, !tbaa !20
  %223 = sext i8 %222 to i32
  %224 = getelementptr inbounds i8, ptr %.0167261, i64 14
  %225 = load i8, ptr %224, align 1, !tbaa !20
  %226 = sext i8 %225 to i32
  %227 = getelementptr inbounds i8, ptr %.0167261, i64 15
  %228 = load i8, ptr %227, align 1, !tbaa !20
  %229 = sext i8 %228 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.29, i32 noundef %220, i32 noundef %223, i32 noundef %226, i32 noundef %229) #7
  br label %.critedge233

230:                                              ; preds = %216
  %231 = getelementptr inbounds i8, ptr %128, i64 %129
  br label %247

232:                                              ; preds = %212
  %233 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not203 = icmp eq i32 %233, 0
  br i1 %.not203, label %243, label %234

234:                                              ; preds = %232
  %235 = load i8, ptr %7, align 2, !tbaa !20
  %236 = sext i8 %235 to i32
  %237 = load i8, ptr %51, align 1, !tbaa !20
  %238 = sext i8 %237 to i32
  %239 = load i8, ptr %52, align 2, !tbaa !20
  %240 = sext i8 %239 to i32
  %241 = load i8, ptr %53, align 1, !tbaa !20
  %242 = sext i8 %241 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.30, i32 noundef %236, i32 noundef %238, i32 noundef %240, i32 noundef %242, i64 noundef %129) #7
  %.pre285 = load i64, ptr %50, align 2, !tbaa !16
  br label %243

243:                                              ; preds = %234, %232
  %244 = phi i64 [ %.pre285, %234 ], [ %129, %232 ]
  %245 = getelementptr inbounds i8, ptr %128, i64 %244
  br label %247

246:                                              ; preds = %.lr.ph264
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge233

247:                                              ; preds = %142, %137, %230, %243, %._crit_edge, %208
  %.2169 = phi ptr [ %140, %142 ], [ %140, %137 ], [ %.1168.lcssa, %208 ], [ %.1168.lcssa, %._crit_edge ], [ %231, %230 ], [ %245, %243 ]
  %.3165 = phi i16 [ %.0162262, %142 ], [ %.0162262, %137 ], [ %.1163.lcssa, %208 ], [ %.1163.lcssa, %._crit_edge ], [ %.0162262, %230 ], [ %.0162262, %243 ]
  %248 = ptrtoint ptr %.2169 to i64
  %249 = sub i64 %124, %248
  %250 = icmp ugt i64 %249, 11
  br i1 %250, label %.lr.ph264, label %._crit_edge265, !llvm.loop !23

._crit_edge265:                                   ; preds = %247
  %251 = zext i16 %.3165 to i32
  %cond = icmp eq i16 %.3165, 0
  br i1 %cond, label %._crit_edge265._crit_edge, label %252

._crit_edge265._crit_edge:                        ; preds = %121, %._crit_edge265
  %.pre286 = load i32, ptr %24, align 8, !tbaa !5
  br label %259

252:                                              ; preds = %._crit_edge265
  %253 = load i32, ptr %54, align 4, !tbaa !24
  %.not199 = icmp eq i32 %253, 0
  br i1 %.not199, label %254, label %257

254:                                              ; preds = %252
  %255 = load i32, ptr %24, align 8, !tbaa !5
  %256 = and i32 %255, 1024
  %.not200 = icmp eq i32 %256, 0
  br i1 %.not200, label %258, label %257

257:                                              ; preds = %254, %252
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.31) #7
  br label %.critedge233

258:                                              ; preds = %254
  store i32 %251, ptr %54, align 4, !tbaa !24
  br label %259

259:                                              ; preds = %._crit_edge265._crit_edge, %258
  %260 = phi i32 [ %.pre286, %._crit_edge265._crit_edge ], [ %255, %258 ]
  store i32 8, ptr %55, align 8, !tbaa !25
  store i32 1, ptr %56, align 4, !tbaa !26
  %261 = load i16, ptr %10, align 2, !tbaa !18
  %262 = zext i16 %261 to i32
  store i32 %262, ptr %57, align 4, !tbaa !27
  %263 = load i32, ptr %11, align 4, !tbaa !12
  %264 = lshr i32 %263, 3
  store i32 %264, ptr %58, align 8, !tbaa !28
  %265 = or i32 %260, 32
  store i32 %265, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #7
  br label %281

266:                                              ; preds = %119
  %267 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not217 = icmp eq i32 %267, 0
  br i1 %.not217, label %281, label %268

268:                                              ; preds = %266
  %269 = load i8, ptr %104, align 1, !tbaa !20
  %270 = sext i8 %269 to i32
  %271 = getelementptr inbounds i8, ptr %104, i64 1
  %272 = load i8, ptr %271, align 1, !tbaa !20
  %273 = sext i8 %272 to i32
  %274 = getelementptr inbounds i8, ptr %104, i64 2
  %275 = load i8, ptr %274, align 1, !tbaa !20
  %276 = sext i8 %275 to i32
  %277 = getelementptr inbounds i8, ptr %104, i64 3
  %278 = load i8, ptr %277, align 1, !tbaa !20
  %279 = sext i8 %278 to i32
  %280 = load i64, ptr %50, align 2, !tbaa !16
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.32, i32 noundef %270, i32 noundef %273, i32 noundef %276, i32 noundef %279, i64 noundef %280) #7
  br label %281

281:                                              ; preds = %259, %266, %268
  call void @free(ptr noundef %104) #7
  br label %326

.critedge233:                                     ; preds = %257, %246, %218, %162
  call void @free(ptr noundef %104) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %10) #7
  br label %.critedge235

282:                                              ; preds = %92
  %283 = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) %7, ptr noundef nonnull dereferenceable(1) @.str, i64 noundef 4) #8
  %.not218 = icmp eq i32 %283, 0
  br i1 %.not218, label %284, label %294

284:                                              ; preds = %282
  %285 = load i32, ptr %57, align 4, !tbaa !27
  %.not219 = icmp eq i32 %285, 0
  br i1 %.not219, label %288, label %286

286:                                              ; preds = %284
  %287 = load i32, ptr %58, align 8, !tbaa !28
  %.not220 = icmp eq i32 %287, 0
  br i1 %.not220, label %288, label %289

288:                                              ; preds = %286, %284
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge235

289:                                              ; preds = %286
  %290 = load i64, ptr %50, align 2, !tbaa !16
  %291 = sext i32 %285 to i64
  %292 = sdiv i64 %290, %291
  %293 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not221 = icmp eq i32 %293, 0
  br i1 %.not221, label %332, label %331

294:                                              ; preds = %282
  %295 = load i64, ptr %50, align 2, !tbaa !16
  %296 = trunc i64 %295 to i32
  %297 = add i32 %296, 1
  %298 = and i32 %297, -2
  %299 = icmp slt i32 %297, 0
  %300 = icmp sgt i32 %298, 4194304
  %or.cond34 = or i1 %299, %300
  br i1 %or.cond34, label %301, label %302

301:                                              ; preds = %294
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.1, ptr noundef %1) #7
  br label %.critedge235

302:                                              ; preds = %294
  %303 = zext nneg i32 %298 to i64
  %304 = call noalias ptr @malloc(i64 noundef %303) #9
  %305 = load i32, ptr @debug_logging_mode, align 4, !tbaa !12
  %.not223 = icmp eq i32 %305, 0
  br i1 %.not223, label %315, label %306

306:                                              ; preds = %302
  %307 = load i8, ptr %7, align 2, !tbaa !20
  %308 = sext i8 %307 to i32
  %309 = load i8, ptr %51, align 1, !tbaa !20
  %310 = sext i8 %309 to i32
  %311 = load i8, ptr %52, align 2, !tbaa !20
  %312 = sext i8 %311 to i32
  %313 = load i8, ptr %53, align 1, !tbaa !20
  %314 = sext i8 %313 to i32
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.33, i32 noundef %308, i32 noundef %310, i32 noundef %312, i32 noundef %314, i64 noundef %295) #7
  br label %315

315:                                              ; preds = %306, %302
  %316 = call i32 @DoReadFile(ptr noundef %0, ptr noundef %304, i32 noundef %298, ptr noundef nonnull %8) #7
  %.not224 = icmp ne i32 %316, 0
  %317 = load i32, ptr %8, align 4
  %.not225 = icmp eq i32 %317, %298
  %or.cond236 = select i1 %.not224, i1 %.not225, i1 false
  br i1 %or.cond236, label %318, label %323

318:                                              ; preds = %315
  %319 = load i32, ptr %24, align 8, !tbaa !5
  %320 = and i32 %319, 512
  %.not226 = icmp eq i32 %320, 0
  br i1 %.not226, label %321, label %325

321:                                              ; preds = %318
  %322 = call i32 @WavpackStreamAddWrapper(ptr noundef %3, ptr noundef %304, i32 noundef %298) #7
  %.not227 = icmp eq i32 %322, 0
  br i1 %.not227, label %323, label %325

323:                                              ; preds = %321, %315
  %324 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.2, ptr noundef %324) #7
  call void @free(ptr noundef %304) #7
  br label %.critedge235

325:                                              ; preds = %321, %318
  call void @free(ptr noundef %304) #7
  br label %326

326:                                              ; preds = %325, %281, %91
  %327 = call i32 @DoReadFile(ptr noundef %0, ptr noundef nonnull %7, i32 noundef 12, ptr noundef nonnull %8) #7
  %328 = icmp eq i32 %327, 0
  %329 = load i32, ptr %8, align 4
  %330 = icmp ne i32 %329, 12
  %or.cond11 = select i1 %328, i1 true, i1 %330
  br i1 %or.cond11, label %._crit_edge270, label %59

331:                                              ; preds = %289
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.34, i64 noundef %292) #7
  br label %332

332:                                              ; preds = %331, %289
  %333 = call i32 @WavpackStreamSetConfiguration64(ptr noundef %3, ptr noundef nonnull %4, i64 noundef %292, ptr noundef null) #7
  %.not222 = icmp eq i32 %333, 0
  br i1 %.not222, label %334, label %.critedge235

334:                                              ; preds = %332
  %335 = call ptr @WavpackStreamGetErrorMessage(ptr noundef %3) #7
  call void (ptr, ...) @error_line(ptr noundef nonnull @.str.35, ptr noundef %1, ptr noundef %335) #7
  br label %.critedge235

.critedge:                                        ; preds = %85, %79
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %.critedge235

.critedge235:                                     ; preds = %301, %323, %97, %111, %117, %.critedge233, %332, %.critedge, %334, %288, %64, %._crit_edge270, %40, %29, %22
  %.7 = phi i32 [ 1, %22 ], [ 1, %40 ], [ 1, %._crit_edge270 ], [ 1, %334 ], [ 1, %288 ], [ 1, %64 ], [ 1, %29 ], [ 1, %.critedge ], [ 0, %332 ], [ 1, %.critedge233 ], [ 1, %117 ], [ 1, %111 ], [ 1, %97 ], [ 1, %323 ], [ 1, %301 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #7
  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

declare i64 @DoGetFileSize(ptr noundef) local_unnamed_addr #2

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

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

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

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 @WavpackStreamBigEndianToNative(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

; 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 #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 = { 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 nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 #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 }
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, !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 = !{!10, !10, i64 0}
!13 = !{!14, !15, i64 4}
!14 = !{!"", !8, i64 0, !15, i64 4, !8, i64 12}
!15 = !{!"long", !8, i64 0}
!16 = !{!17, !15, i64 4}
!17 = !{!"", !8, i64 0, !15, i64 4}
!18 = !{!19, !19, i64 0}
!19 = !{!"short", !8, i64 0}
!20 = !{!8, !8, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!6, !10, i64 52}
!25 = !{!6, !10, i64 8}
!26 = !{!6, !10, i64 12}
!27 = !{!6, !10, i64 28}
!28 = !{!6, !10, i64 48}


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