; LLVM IR from VoidRune/Audio-engine :: src (minivorbis)

; 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.ogg_page = type { ptr, i64, ptr, i64 }
%struct.ogg_packet = type { ptr, i64, i64, i64, i64, i64 }
%struct.OggVorbis_File = type { ptr, i32, i64, i64, %struct.ogg_sync_state, i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i32, i64, i32, double, double, %struct.ogg_stream_state, %struct.vorbis_dsp_state, %struct.vorbis_block, %struct.ov_callbacks }
%struct.ogg_sync_state = type { ptr, i32, i32, i32, i32, i32, i32 }
%struct.ogg_stream_state = type { ptr, i64, i64, i64, ptr, ptr, i64, i64, i64, i64, [282 x i8], i32, i32, i32, i64, i64, i64, i64 }
%struct.vorbis_dsp_state = type { i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, ptr }
%struct.vorbis_block = type { ptr, %struct.oggpack_buffer, i64, i64, i64, i32, i32, i32, i64, i64, ptr, ptr, i64, i64, i64, ptr, i64, i64, i64, i64, ptr }
%struct.oggpack_buffer = type { i64, i32, ptr, ptr, i64 }
%struct.ov_callbacks = type { ptr, ptr, ptr, ptr }

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_continued(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i64 @ogg_page_granulepos(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_serialno(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_pagein(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_reset_serialno(ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_packetout(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_packetpeek(ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @vorbis_synthesis_restart(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i64 @ov_pcm_total(ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ov_raw_seek(ptr noundef, i64 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden void @_decode_clear(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i32 @_seek_helper(ptr noundef, i64 noundef) #1

; Function Attrs: nounwind uwtable
declare hidden i64 @_get_next_page(ptr noundef, ptr noundef, i64 noundef) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @ov_pcm_seek_page(ptr noundef %0, i64 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca %struct.ogg_page, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca %struct.ogg_page, align 8
  %21 = alloca %struct.ogg_packet, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #2
  store i32 -1, ptr %6, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #2
  store i64 0, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #2
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = call i64 @ov_pcm_total(ptr noundef %22, i32 noundef -1)
  store i64 %23, ptr %8, align 8, !tbaa !9
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.OggVorbis_File, ptr %24, i32 0, i32 13
  %26 = load i32, ptr %25, align 8, !tbaa !13
  %27 = icmp slt i32 %26, 2
  br i1 %27, label %28, label %29

28:                                               ; preds = %2
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %545

29:                                               ; preds = %2
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.OggVorbis_File, ptr %30, i32 0, i32 1
  %32 = load i32, ptr %31, align 8, !tbaa !22
  %33 = icmp ne i32 %32, 0
  br i1 %33, label %35, label %34

34:                                               ; preds = %29
  store i32 -138, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %545

35:                                               ; preds = %29
  %36 = load i64, ptr %5, align 8, !tbaa !9
  %37 = icmp slt i64 %36, 0
  br i1 %37, label %42, label %38

38:                                               ; preds = %35
  %39 = load i64, ptr %5, align 8, !tbaa !9
  %40 = load i64, ptr %8, align 8, !tbaa !9
  %41 = icmp sgt i64 %39, %40
  br i1 %41, label %42, label %43

42:                                               ; preds = %38, %35
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %545

43:                                               ; preds = %38
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.OggVorbis_File, ptr %44, i32 0, i32 5
  %46 = load i32, ptr %45, align 8, !tbaa !23
  %47 = sub nsw i32 %46, 1
  store i32 %47, ptr %6, align 4, !tbaa !11
  br label %48

48:                                               ; preds = %68, %43
  %49 = load i32, ptr %6, align 4, !tbaa !11
  %50 = icmp sge i32 %49, 0
  br i1 %50, label %51, label %71

51:                                               ; preds = %48
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.OggVorbis_File, ptr %52, i32 0, i32 9
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  %55 = load i32, ptr %6, align 4, !tbaa !11
  %56 = mul nsw i32 %55, 2
  %57 = add nsw i32 %56, 1
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds i64, ptr %54, i64 %58
  %60 = load i64, ptr %59, align 8, !tbaa !9
  %61 = load i64, ptr %8, align 8, !tbaa !9
  %62 = sub nsw i64 %61, %60
  store i64 %62, ptr %8, align 8, !tbaa !9
  %63 = load i64, ptr %5, align 8, !tbaa !9
  %64 = load i64, ptr %8, align 8, !tbaa !9
  %65 = icmp sge i64 %63, %64
  br i1 %65, label %66, label %67

66:                                               ; preds = %51
  br label %71

67:                                               ; preds = %51
  br label %68

68:                                               ; preds = %67
  %69 = load i32, ptr %6, align 4, !tbaa !11
  %70 = add nsw i32 %69, -1
  store i32 %70, ptr %6, align 4, !tbaa !11
  br label %48, !llvm.loop !25

71:                                               ; preds = %66, %48
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.OggVorbis_File, ptr %72, i32 0, i32 6
  %74 = load ptr, ptr %73, align 8, !tbaa !27
  %75 = load i32, ptr %6, align 4, !tbaa !11
  %76 = add nsw i32 %75, 1
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i64, ptr %74, i64 %77
  %79 = load i64, ptr %78, align 8, !tbaa !9
  store i64 %79, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.OggVorbis_File, ptr %80, i32 0, i32 7
  %82 = load ptr, ptr %81, align 8, !tbaa !28
  %83 = load i32, ptr %6, align 4, !tbaa !11
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds i64, ptr %82, i64 %84
  %86 = load i64, ptr %85, align 8, !tbaa !9
  store i64 %86, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #2
  %87 = load ptr, ptr %4, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.OggVorbis_File, ptr %87, i32 0, i32 9
  %89 = load ptr, ptr %88, align 8, !tbaa !24
  %90 = load i32, ptr %6, align 4, !tbaa !11
  %91 = mul nsw i32 %90, 2
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds i64, ptr %89, i64 %92
  %94 = load i64, ptr %93, align 8, !tbaa !9
  store i64 %94, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.OggVorbis_File, ptr %95, i32 0, i32 9
  %97 = load ptr, ptr %96, align 8, !tbaa !24
  %98 = load i32, ptr %6, align 4, !tbaa !11
  %99 = mul nsw i32 %98, 2
  %100 = add nsw i32 %99, 1
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i64, ptr %97, i64 %101
  %103 = load i64, ptr %102, align 8, !tbaa !9
  %104 = load i64, ptr %12, align 8, !tbaa !9
  %105 = add nsw i64 %103, %104
  store i64 %105, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  %106 = load i64, ptr %5, align 8, !tbaa !9
  %107 = load i64, ptr %8, align 8, !tbaa !9
  %108 = sub nsw i64 %106, %107
  %109 = load i64, ptr %12, align 8, !tbaa !9
  %110 = add nsw i64 %108, %109
  store i64 %110, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  store i64 -1, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  store i32 0, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #2
  %111 = load i64, ptr %11, align 8, !tbaa !9
  %112 = load i64, ptr %10, align 8, !tbaa !9
  %113 = icmp eq i64 %111, %112
  br i1 %113, label %114, label %129

114:                                              ; preds = %71
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = load i64, ptr %11, align 8, !tbaa !9
  %117 = call i32 @_seek_helper(ptr noundef %115, i64 noundef %116)
  %118 = sext i32 %117 to i64
  store i64 %118, ptr %7, align 8, !tbaa !9
  %119 = load i64, ptr %7, align 8, !tbaa !9
  %120 = icmp ne i64 %119, 0
  br i1 %120, label %121, label %122

121:                                              ; preds = %114
  store i32 5, ptr %9, align 4
  br label %520

122:                                              ; preds = %114
  %123 = load ptr, ptr %4, align 8, !tbaa !5
  %124 = call i64 @_get_next_page(ptr noundef %123, ptr noundef %17, i64 noundef 1)
  store i64 %124, ptr %7, align 8, !tbaa !9
  %125 = load i64, ptr %7, align 8, !tbaa !9
  %126 = icmp slt i64 %125, 0
  br i1 %126, label %127, label %128

127:                                              ; preds = %122
  store i32 5, ptr %9, align 4
  br label %520

128:                                              ; preds = %122
  store i32 1, ptr %16, align 4, !tbaa !11
  br label %129

129:                                              ; preds = %128, %71
  br label %130

130:                                              ; preds = %303, %129
  %131 = load i64, ptr %11, align 8, !tbaa !9
  %132 = load i64, ptr %10, align 8, !tbaa !9
  %133 = icmp slt i64 %131, %132
  br i1 %133, label %134, label %304

134:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  %135 = load i64, ptr %10, align 8, !tbaa !9
  %136 = load i64, ptr %11, align 8, !tbaa !9
  %137 = sub nsw i64 %135, %136
  %138 = icmp slt i64 %137, 65536
  br i1 %138, label %139, label %141

139:                                              ; preds = %134
  %140 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %140, ptr %18, align 8, !tbaa !9
  br label %167

141:                                              ; preds = %134
  %142 = load i64, ptr %11, align 8, !tbaa !9
  %143 = load i64, ptr %14, align 8, !tbaa !9
  %144 = load i64, ptr %12, align 8, !tbaa !9
  %145 = sub nsw i64 %143, %144
  %146 = sitofp i64 %145 to double
  %147 = load i64, ptr %10, align 8, !tbaa !9
  %148 = load i64, ptr %11, align 8, !tbaa !9
  %149 = sub nsw i64 %147, %148
  %150 = sitofp i64 %149 to double
  %151 = fmul double %146, %150
  %152 = load i64, ptr %13, align 8, !tbaa !9
  %153 = load i64, ptr %12, align 8, !tbaa !9
  %154 = sub nsw i64 %152, %153
  %155 = sitofp i64 %154 to double
  %156 = fdiv double %151, %155
  %157 = fptosi double %156 to i64
  %158 = add nsw i64 %142, %157
  %159 = sub nsw i64 %158, 65536
  store i64 %159, ptr %18, align 8, !tbaa !9
  %160 = load i64, ptr %18, align 8, !tbaa !9
  %161 = load i64, ptr %11, align 8, !tbaa !9
  %162 = add nsw i64 %161, 65536
  %163 = icmp slt i64 %160, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %141
  %165 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %165, ptr %18, align 8, !tbaa !9
  br label %166

166:                                              ; preds = %164, %141
  br label %167

167:                                              ; preds = %166, %139
  %168 = load ptr, ptr %4, align 8, !tbaa !5
  %169 = load i64, ptr %18, align 8, !tbaa !9
  %170 = call i32 @_seek_helper(ptr noundef %168, i64 noundef %169)
  %171 = sext i32 %170 to i64
  store i64 %171, ptr %7, align 8, !tbaa !9
  %172 = load i64, ptr %7, align 8, !tbaa !9
  %173 = icmp ne i64 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %167
  store i32 5, ptr %9, align 4
  br label %301

175:                                              ; preds = %167
  br label %176

176:                                              ; preds = %299, %296, %175
  %177 = load i64, ptr %11, align 8, !tbaa !9
  %178 = load i64, ptr %10, align 8, !tbaa !9
  %179 = icmp slt i64 %177, %178
  br i1 %179, label %180, label %300

180:                                              ; preds = %176
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = load i64, ptr %10, align 8, !tbaa !9
  %183 = load ptr, ptr %4, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.OggVorbis_File, ptr %183, i32 0, i32 2
  %185 = load i64, ptr %184, align 8, !tbaa !29
  %186 = sub nsw i64 %182, %185
  %187 = call i64 @_get_next_page(ptr noundef %181, ptr noundef %17, i64 noundef %186)
  store i64 %187, ptr %7, align 8, !tbaa !9
  %188 = load i64, ptr %7, align 8, !tbaa !9
  %189 = icmp eq i64 %188, -128
  br i1 %189, label %190, label %191

190:                                              ; preds = %180
  store i32 5, ptr %9, align 4
  br label %301

191:                                              ; preds = %180
  %192 = load i64, ptr %7, align 8, !tbaa !9
  %193 = icmp slt i64 %192, 0
  br i1 %193, label %194, label %224

194:                                              ; preds = %191
  %195 = load i64, ptr %18, align 8, !tbaa !9
  %196 = load i64, ptr %11, align 8, !tbaa !9
  %197 = add nsw i64 %196, 1
  %198 = icmp sle i64 %195, %197
  br i1 %198, label %199, label %201

199:                                              ; preds = %194
  %200 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %200, ptr %10, align 8, !tbaa !9
  br label %223

201:                                              ; preds = %194
  %202 = load i64, ptr %18, align 8, !tbaa !9
  %203 = icmp eq i64 %202, 0
  br i1 %203, label %204, label %205

204:                                              ; preds = %201
  store i32 5, ptr %9, align 4
  br label %301

205:                                              ; preds = %201
  %206 = load i64, ptr %18, align 8, !tbaa !9
  %207 = sub nsw i64 %206, 65536
  store i64 %207, ptr %18, align 8, !tbaa !9
  %208 = load i64, ptr %18, align 8, !tbaa !9
  %209 = load i64, ptr %11, align 8, !tbaa !9
  %210 = icmp sle i64 %208, %209
  br i1 %210, label %211, label %214

211:                                              ; preds = %205
  %212 = load i64, ptr %11, align 8, !tbaa !9
  %213 = add nsw i64 %212, 1
  store i64 %213, ptr %18, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %211, %205
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  %216 = load i64, ptr %18, align 8, !tbaa !9
  %217 = call i32 @_seek_helper(ptr noundef %215, i64 noundef %216)
  %218 = sext i32 %217 to i64
  store i64 %218, ptr %7, align 8, !tbaa !9
  %219 = load i64, ptr %7, align 8, !tbaa !9
  %220 = icmp ne i64 %219, 0
  br i1 %220, label %221, label %222

221:                                              ; preds = %214
  store i32 5, ptr %9, align 4
  br label %301

222:                                              ; preds = %214
  br label %223

223:                                              ; preds = %222, %199
  br label %299

224:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  store i32 1, ptr %16, align 4, !tbaa !11
  %225 = call i32 @ogg_page_serialno(ptr noundef %17)
  %226 = sext i32 %225 to i64
  %227 = load ptr, ptr %4, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.OggVorbis_File, ptr %227, i32 0, i32 8
  %229 = load ptr, ptr %228, align 8, !tbaa !30
  %230 = load i32, ptr %6, align 4, !tbaa !11
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i64, ptr %229, i64 %231
  %233 = load i64, ptr %232, align 8, !tbaa !9
  %234 = icmp ne i64 %226, %233
  br i1 %234, label %235, label %236

235:                                              ; preds = %224
  store i32 8, ptr %9, align 4
  br label %296, !llvm.loop !31

236:                                              ; preds = %224
  %237 = call i64 @ogg_page_granulepos(ptr noundef %17)
  store i64 %237, ptr %19, align 8, !tbaa !9
  %238 = load i64, ptr %19, align 8, !tbaa !9
  %239 = icmp eq i64 %238, -1
  br i1 %239, label %240, label %241

240:                                              ; preds = %236
  store i32 8, ptr %9, align 4
  br label %296, !llvm.loop !31

241:                                              ; preds = %236
  %242 = load i64, ptr %19, align 8, !tbaa !9
  %243 = load i64, ptr %14, align 8, !tbaa !9
  %244 = icmp slt i64 %242, %243
  br i1 %244, label %245, label %258

245:                                              ; preds = %241
  %246 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %246, ptr %15, align 8, !tbaa !9
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.OggVorbis_File, ptr %247, i32 0, i32 2
  %249 = load i64, ptr %248, align 8, !tbaa !29
  store i64 %249, ptr %11, align 8, !tbaa !9
  %250 = load i64, ptr %19, align 8, !tbaa !9
  store i64 %250, ptr %12, align 8, !tbaa !9
  %251 = load i64, ptr %14, align 8, !tbaa !9
  %252 = load i64, ptr %12, align 8, !tbaa !9
  %253 = sub nsw i64 %251, %252
  %254 = icmp sgt i64 %253, 44100
  br i1 %254, label %255, label %256

255:                                              ; preds = %245
  store i32 9, ptr %9, align 4
  br label %296

256:                                              ; preds = %245
  %257 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %257, ptr %18, align 8, !tbaa !9
  br label %295

258:                                              ; preds = %241
  %259 = load i64, ptr %18, align 8, !tbaa !9
  %260 = load i64, ptr %11, align 8, !tbaa !9
  %261 = add nsw i64 %260, 1
  %262 = icmp sle i64 %259, %261
  br i1 %262, label %263, label %265

263:                                              ; preds = %258
  %264 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %264, ptr %10, align 8, !tbaa !9
  br label %294

265:                                              ; preds = %258
  %266 = load i64, ptr %10, align 8, !tbaa !9
  %267 = load ptr, ptr %4, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.OggVorbis_File, ptr %267, i32 0, i32 2
  %269 = load i64, ptr %268, align 8, !tbaa !29
  %270 = icmp eq i64 %266, %269
  br i1 %270, label %271, label %290

271:                                              ; preds = %265
  %272 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %272, ptr %10, align 8, !tbaa !9
  %273 = load i64, ptr %18, align 8, !tbaa !9
  %274 = sub nsw i64 %273, 65536
  store i64 %274, ptr %18, align 8, !tbaa !9
  %275 = load i64, ptr %18, align 8, !tbaa !9
  %276 = load i64, ptr %11, align 8, !tbaa !9
  %277 = icmp sle i64 %275, %276
  br i1 %277, label %278, label %281

278:                                              ; preds = %271
  %279 = load i64, ptr %11, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %18, align 8, !tbaa !9
  br label %281

281:                                              ; preds = %278, %271
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = load i64, ptr %18, align 8, !tbaa !9
  %284 = call i32 @_seek_helper(ptr noundef %282, i64 noundef %283)
  %285 = sext i32 %284 to i64
  store i64 %285, ptr %7, align 8, !tbaa !9
  %286 = load i64, ptr %7, align 8, !tbaa !9
  %287 = icmp ne i64 %286, 0
  br i1 %287, label %288, label %289

288:                                              ; preds = %281
  store i32 5, ptr %9, align 4
  br label %296

289:                                              ; preds = %281
  br label %293

290:                                              ; preds = %265
  %291 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %291, ptr %10, align 8, !tbaa !9
  %292 = load i64, ptr %19, align 8, !tbaa !9
  store i64 %292, ptr %13, align 8, !tbaa !9
  store i32 9, ptr %9, align 4
  br label %296

293:                                              ; preds = %289
  br label %294

294:                                              ; preds = %293, %263
  br label %295

295:                                              ; preds = %294, %256
  store i32 0, ptr %9, align 4
  br label %296

296:                                              ; preds = %295, %290, %288, %255, %240, %235
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  %297 = load i32, ptr %9, align 4
  switch i32 %297, label %301 [
    i32 0, label %298
    i32 8, label %176
    i32 9, label %300
  ]

298:                                              ; preds = %296
  br label %299

299:                                              ; preds = %298, %223
  br label %176, !llvm.loop !31

300:                                              ; preds = %296, %176
  store i32 0, ptr %9, align 4
  br label %301

301:                                              ; preds = %300, %296, %221, %204, %190, %174
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  %302 = load i32, ptr %9, align 4
  switch i32 %302, label %520 [
    i32 0, label %303
  ]

303:                                              ; preds = %301
  br label %130, !llvm.loop !32

304:                                              ; preds = %130
  %305 = load i64, ptr %15, align 8, !tbaa !9
  %306 = icmp eq i64 %305, -1
  br i1 %306, label %307, label %373

307:                                              ; preds = %304
  %308 = load i32, ptr %16, align 4, !tbaa !11
  %309 = icmp ne i32 %308, 0
  br i1 %309, label %310, label %371

310:                                              ; preds = %307
  %311 = load i64, ptr %11, align 8, !tbaa !9
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.OggVorbis_File, ptr %312, i32 0, i32 7
  %314 = load ptr, ptr %313, align 8, !tbaa !28
  %315 = load i32, ptr %6, align 4, !tbaa !11
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i64, ptr %314, i64 %316
  %318 = load i64, ptr %317, align 8, !tbaa !9
  %319 = icmp eq i64 %311, %318
  br i1 %319, label %320, label %371

320:                                              ; preds = %310
  %321 = call i32 @ogg_page_serialno(ptr noundef %17)
  %322 = sext i32 %321 to i64
  %323 = load ptr, ptr %4, align 8, !tbaa !5
  %324 = getelementptr inbounds %struct.OggVorbis_File, ptr %323, i32 0, i32 8
  %325 = load ptr, ptr %324, align 8, !tbaa !30
  %326 = load i32, ptr %6, align 4, !tbaa !11
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i64, ptr %325, i64 %327
  %329 = load i64, ptr %328, align 8, !tbaa !9
  %330 = icmp eq i64 %322, %329
  br i1 %330, label %331, label %371

331:                                              ; preds = %320
  %332 = load i64, ptr %8, align 8, !tbaa !9
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.OggVorbis_File, ptr %333, i32 0, i32 12
  store i64 %332, ptr %334, align 8, !tbaa !33
  %335 = load i32, ptr %6, align 4, !tbaa !11
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.OggVorbis_File, ptr %336, i32 0, i32 15
  %338 = load i32, ptr %337, align 8, !tbaa !34
  %339 = icmp ne i32 %335, %338
  br i1 %339, label %340, label %356

340:                                              ; preds = %331
  %341 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %341)
  %342 = load i32, ptr %6, align 4, !tbaa !11
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.OggVorbis_File, ptr %343, i32 0, i32 15
  store i32 %342, ptr %344, align 8, !tbaa !34
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.OggVorbis_File, ptr %345, i32 0, i32 8
  %347 = load ptr, ptr %346, align 8, !tbaa !30
  %348 = load i32, ptr %6, align 4, !tbaa !11
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i64, ptr %347, i64 %349
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %4, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.OggVorbis_File, ptr %352, i32 0, i32 14
  store i64 %351, ptr %353, align 8, !tbaa !35
  %354 = load ptr, ptr %4, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.OggVorbis_File, ptr %354, i32 0, i32 13
  store i32 3, ptr %355, align 8, !tbaa !13
  br label %360

356:                                              ; preds = %331
  %357 = load ptr, ptr %4, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.OggVorbis_File, ptr %357, i32 0, i32 19
  %359 = call i32 @vorbis_synthesis_restart(ptr noundef %358)
  br label %360

360:                                              ; preds = %356, %340
  %361 = load ptr, ptr %4, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.OggVorbis_File, ptr %361, i32 0, i32 18
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.OggVorbis_File, ptr %363, i32 0, i32 14
  %365 = load i64, ptr %364, align 8, !tbaa !35
  %366 = trunc i64 %365 to i32
  %367 = call i32 @ogg_stream_reset_serialno(ptr noundef %362, i32 noundef %366)
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.OggVorbis_File, ptr %368, i32 0, i32 18
  %370 = call i32 @ogg_stream_pagein(ptr noundef %369, ptr noundef %17)
  br label %372

371:                                              ; preds = %320, %310, %307
  store i32 5, ptr %9, align 4
  br label %520

372:                                              ; preds = %360
  br label %519

373:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 48, ptr %21) #2
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = load i64, ptr %15, align 8, !tbaa !9
  %376 = call i32 @_seek_helper(ptr noundef %374, i64 noundef %375)
  %377 = sext i32 %376 to i64
  store i64 %377, ptr %7, align 8, !tbaa !9
  %378 = load ptr, ptr %4, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.OggVorbis_File, ptr %378, i32 0, i32 12
  store i64 -1, ptr %379, align 8, !tbaa !33
  %380 = load i64, ptr %7, align 8, !tbaa !9
  %381 = icmp ne i64 %380, 0
  br i1 %381, label %382, label %383

382:                                              ; preds = %373
  store i32 5, ptr %9, align 4
  br label %516

383:                                              ; preds = %373
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = call i64 @_get_next_page(ptr noundef %384, ptr noundef %20, i64 noundef -1)
  store i64 %385, ptr %7, align 8, !tbaa !9
  %386 = load i64, ptr %7, align 8, !tbaa !9
  %387 = icmp slt i64 %386, 0
  br i1 %387, label %388, label %389

388:                                              ; preds = %383
  store i32 5, ptr %9, align 4
  br label %516

389:                                              ; preds = %383
  %390 = load i32, ptr %6, align 4, !tbaa !11
  %391 = load ptr, ptr %4, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.OggVorbis_File, ptr %391, i32 0, i32 15
  %393 = load i32, ptr %392, align 8, !tbaa !34
  %394 = icmp ne i32 %390, %393
  br i1 %394, label %395, label %411

395:                                              ; preds = %389
  %396 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %396)
  %397 = load i32, ptr %6, align 4, !tbaa !11
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.OggVorbis_File, ptr %398, i32 0, i32 15
  store i32 %397, ptr %399, align 8, !tbaa !34
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.OggVorbis_File, ptr %400, i32 0, i32 8
  %402 = load ptr, ptr %401, align 8, !tbaa !30
  %403 = load i32, ptr %6, align 4, !tbaa !11
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds i64, ptr %402, i64 %404
  %406 = load i64, ptr %405, align 8, !tbaa !9
  %407 = load ptr, ptr %4, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.OggVorbis_File, ptr %407, i32 0, i32 14
  store i64 %406, ptr %408, align 8, !tbaa !35
  %409 = load ptr, ptr %4, align 8, !tbaa !5
  %410 = getelementptr inbounds %struct.OggVorbis_File, ptr %409, i32 0, i32 13
  store i32 3, ptr %410, align 8, !tbaa !13
  br label %415

411:                                              ; preds = %389
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.OggVorbis_File, ptr %412, i32 0, i32 19
  %414 = call i32 @vorbis_synthesis_restart(ptr noundef %413)
  br label %415

415:                                              ; preds = %411, %395
  %416 = load ptr, ptr %4, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.OggVorbis_File, ptr %416, i32 0, i32 18
  %418 = load ptr, ptr %4, align 8, !tbaa !5
  %419 = getelementptr inbounds %struct.OggVorbis_File, ptr %418, i32 0, i32 14
  %420 = load i64, ptr %419, align 8, !tbaa !35
  %421 = trunc i64 %420 to i32
  %422 = call i32 @ogg_stream_reset_serialno(ptr noundef %417, i32 noundef %421)
  %423 = load ptr, ptr %4, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.OggVorbis_File, ptr %423, i32 0, i32 18
  %425 = call i32 @ogg_stream_pagein(ptr noundef %424, ptr noundef %20)
  br label %426

426:                                              ; preds = %514, %415
  br label %427

427:                                              ; preds = %426
  %428 = load ptr, ptr %4, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.OggVorbis_File, ptr %428, i32 0, i32 18
  %430 = call i32 @ogg_stream_packetpeek(ptr noundef %429, ptr noundef %21)
  %431 = sext i32 %430 to i64
  store i64 %431, ptr %7, align 8, !tbaa !9
  %432 = load i64, ptr %7, align 8, !tbaa !9
  %433 = icmp eq i64 %432, 0
  br i1 %433, label %434, label %472

434:                                              ; preds = %427
  %435 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %435, ptr %7, align 8, !tbaa !9
  br label %436

436:                                              ; preds = %470, %434
  %437 = load i64, ptr %7, align 8, !tbaa !9
  %438 = load ptr, ptr %4, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.OggVorbis_File, ptr %438, i32 0, i32 7
  %440 = load ptr, ptr %439, align 8, !tbaa !28
  %441 = load i32, ptr %6, align 4, !tbaa !11
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i64, ptr %440, i64 %442
  %444 = load i64, ptr %443, align 8, !tbaa !9
  %445 = icmp sgt i64 %437, %444
  br i1 %445, label %446, label %471

446:                                              ; preds = %436
  %447 = load ptr, ptr %4, align 8, !tbaa !5
  %448 = load i64, ptr %7, align 8, !tbaa !9
  %449 = call i64 @_get_prev_page(ptr noundef %447, i64 noundef %448, ptr noundef %20)
  store i64 %449, ptr %7, align 8, !tbaa !9
  %450 = load i64, ptr %7, align 8, !tbaa !9
  %451 = icmp slt i64 %450, 0
  br i1 %451, label %452, label %453

452:                                              ; preds = %446
  store i32 5, ptr %9, align 4
  br label %516

453:                                              ; preds = %446
  %454 = call i32 @ogg_page_serialno(ptr noundef %20)
  %455 = sext i32 %454 to i64
  %456 = load ptr, ptr %4, align 8, !tbaa !5
  %457 = getelementptr inbounds %struct.OggVorbis_File, ptr %456, i32 0, i32 14
  %458 = load i64, ptr %457, align 8, !tbaa !35
  %459 = icmp eq i64 %455, %458
  br i1 %459, label %460, label %470

460:                                              ; preds = %453
  %461 = call i64 @ogg_page_granulepos(ptr noundef %20)
  %462 = icmp sgt i64 %461, -1
  br i1 %462, label %466, label %463

463:                                              ; preds = %460
  %464 = call i32 @ogg_page_continued(ptr noundef %20)
  %465 = icmp ne i32 %464, 0
  br i1 %465, label %470, label %466

466:                                              ; preds = %463, %460
  %467 = load ptr, ptr %4, align 8, !tbaa !5
  %468 = load i64, ptr %7, align 8, !tbaa !9
  %469 = call i32 @ov_raw_seek(ptr noundef %467, i64 noundef %468)
  store i32 %469, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %516

470:                                              ; preds = %463, %453
  br label %436, !llvm.loop !36

471:                                              ; preds = %436
  br label %472

472:                                              ; preds = %471, %427
  %473 = load i64, ptr %7, align 8, !tbaa !9
  %474 = icmp slt i64 %473, 0
  br i1 %474, label %475, label %476

475:                                              ; preds = %472
  store i64 -136, ptr %7, align 8, !tbaa !9
  store i32 5, ptr %9, align 4
  br label %516

476:                                              ; preds = %472
  %477 = getelementptr inbounds %struct.ogg_packet, ptr %21, i32 0, i32 4
  %478 = load i64, ptr %477, align 8, !tbaa !37
  %479 = icmp ne i64 %478, -1
  br i1 %479, label %480, label %509

480:                                              ; preds = %476
  %481 = getelementptr inbounds %struct.ogg_packet, ptr %21, i32 0, i32 4
  %482 = load i64, ptr %481, align 8, !tbaa !37
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.OggVorbis_File, ptr %483, i32 0, i32 9
  %485 = load ptr, ptr %484, align 8, !tbaa !24
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.OggVorbis_File, ptr %486, i32 0, i32 15
  %488 = load i32, ptr %487, align 8, !tbaa !34
  %489 = mul nsw i32 %488, 2
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i64, ptr %485, i64 %490
  %492 = load i64, ptr %491, align 8, !tbaa !9
  %493 = sub nsw i64 %482, %492
  %494 = load ptr, ptr %4, align 8, !tbaa !5
  %495 = getelementptr inbounds %struct.OggVorbis_File, ptr %494, i32 0, i32 12
  store i64 %493, ptr %495, align 8, !tbaa !33
  %496 = load ptr, ptr %4, align 8, !tbaa !5
  %497 = getelementptr inbounds %struct.OggVorbis_File, ptr %496, i32 0, i32 12
  %498 = load i64, ptr %497, align 8, !tbaa !33
  %499 = icmp slt i64 %498, 0
  br i1 %499, label %500, label %503

500:                                              ; preds = %480
  %501 = load ptr, ptr %4, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.OggVorbis_File, ptr %501, i32 0, i32 12
  store i64 0, ptr %502, align 8, !tbaa !33
  br label %503

503:                                              ; preds = %500, %480
  %504 = load i64, ptr %8, align 8, !tbaa !9
  %505 = load ptr, ptr %4, align 8, !tbaa !5
  %506 = getelementptr inbounds %struct.OggVorbis_File, ptr %505, i32 0, i32 12
  %507 = load i64, ptr %506, align 8, !tbaa !33
  %508 = add nsw i64 %507, %504
  store i64 %508, ptr %506, align 8, !tbaa !33
  br label %515

509:                                              ; preds = %476
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.OggVorbis_File, ptr %510, i32 0, i32 18
  %512 = call i32 @ogg_stream_packetout(ptr noundef %511, ptr noundef null)
  %513 = sext i32 %512 to i64
  store i64 %513, ptr %7, align 8, !tbaa !9
  br label %514

514:                                              ; preds = %509
  br label %426

515:                                              ; preds = %503
  store i32 0, ptr %9, align 4
  br label %516

516:                                              ; preds = %515, %475, %466, %452, %388, %382
  call void @llvm.lifetime.end.p0(i64 48, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #2
  %517 = load i32, ptr %9, align 4
  switch i32 %517, label %520 [
    i32 0, label %518
  ]

518:                                              ; preds = %516
  br label %519

519:                                              ; preds = %518, %372
  store i32 0, ptr %9, align 4
  br label %520

520:                                              ; preds = %519, %516, %371, %301, %127, %121
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  %521 = load i32, ptr %9, align 4
  switch i32 %521, label %545 [
    i32 0, label %522
    i32 5, label %539
  ]

522:                                              ; preds = %520
  %523 = load ptr, ptr %4, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.OggVorbis_File, ptr %523, i32 0, i32 12
  %525 = load i64, ptr %524, align 8, !tbaa !33
  %526 = load i64, ptr %5, align 8, !tbaa !9
  %527 = icmp sgt i64 %525, %526
  br i1 %527, label %533, label %528

528:                                              ; preds = %522
  %529 = load i64, ptr %5, align 8, !tbaa !9
  %530 = load ptr, ptr %4, align 8, !tbaa !5
  %531 = call i64 @ov_pcm_total(ptr noundef %530, i32 noundef -1)
  %532 = icmp sgt i64 %529, %531
  br i1 %532, label %533, label %534

533:                                              ; preds = %528, %522
  store i64 -129, ptr %7, align 8, !tbaa !9
  br label %539

534:                                              ; preds = %528
  %535 = load ptr, ptr %4, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.OggVorbis_File, ptr %535, i32 0, i32 16
  store double 0.000000e+00, ptr %536, align 8, !tbaa !39
  %537 = load ptr, ptr %4, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.OggVorbis_File, ptr %537, i32 0, i32 17
  store double 0.000000e+00, ptr %538, align 8, !tbaa !40
  store i32 0, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %545

539:                                              ; preds = %533, %520
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.OggVorbis_File, ptr %540, i32 0, i32 12
  store i64 -1, ptr %541, align 8, !tbaa !33
  %542 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %542)
  %543 = load i64, ptr %7, align 8, !tbaa !9
  %544 = trunc i64 %543 to i32
  store i32 %544, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %545

545:                                              ; preds = %539, %534, %520, %42, %34, %28
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #2
  %546 = load i32, ptr %3, align 4
  ret i32 %546
}

; Function Attrs: nounwind uwtable
declare hidden i64 @_get_prev_page(ptr noundef, i64 noundef, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !12, i64 128}
!14 = !{!"OggVorbis_File", !6, i64 0, !12, i64 8, !10, i64 16, !10, i64 24, !15, i64 32, !12, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !12, i64 128, !10, i64 136, !12, i64 144, !16, i64 152, !16, i64 160, !17, i64 168, !18, i64 576, !19, i64 720, !21, i64 912}
!15 = !{!"", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28}
!16 = !{!"double", !7, i64 0}
!17 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !6, i64 32, !6, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !12, i64 364, !12, i64 368, !12, i64 372, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400}
!18 = !{!"vorbis_dsp_state", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !12, i64 32, !12, i64 36, !12, i64 40, !12, i64 44, !12, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !10, i64 128, !6, i64 136}
!19 = !{!"vorbis_block", !6, i64 0, !20, i64 8, !10, i64 48, !10, i64 56, !10, i64 64, !12, i64 72, !12, i64 76, !12, i64 80, !10, i64 88, !10, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !10, i64 128, !10, i64 136, !6, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !6, i64 184}
!20 = !{!"", !10, i64 0, !12, i64 8, !6, i64 16, !6, i64 24, !10, i64 32}
!21 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!22 = !{!14, !12, i64 8}
!23 = !{!14, !12, i64 64}
!24 = !{!14, !6, i64 96}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!14, !6, i64 72}
!28 = !{!14, !6, i64 80}
!29 = !{!14, !10, i64 16}
!30 = !{!14, !6, i64 88}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = !{!14, !10, i64 120}
!34 = !{!14, !12, i64 144}
!35 = !{!14, !10, i64 136}
!36 = distinct !{!36, !26}
!37 = !{!38, !10, i64 32}
!38 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!39 = !{!14, !16, i64 152}
!40 = !{!14, !16, i64 160}


; 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.ogg_page = type { ptr, i64, ptr, i64 }
%struct.ogg_packet = type { ptr, i64, i64, i64, i64, i64 }

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

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_continued(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i64 @ogg_page_granulepos(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_serialno(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_pagein(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_reset_serialno(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_packetout(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_packetpeek(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @vorbis_synthesis_restart(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i64 @ov_pcm_total(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ov_raw_seek(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden void @_decode_clear(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i32 @_seek_helper(ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare hidden i64 @_get_next_page(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local i32 @ov_pcm_seek_page(ptr noundef %0, i64 noundef %1) local_unnamed_addr #1 {
  %3 = alloca %struct.ogg_page, align 8
  %4 = alloca %struct.ogg_page, align 8
  %5 = alloca %struct.ogg_packet, align 8
  %6 = tail call i64 @ov_pcm_total(ptr noundef %0, i32 noundef -1)
  %7 = getelementptr inbounds i8, ptr %0, i64 128
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %9 = icmp slt i32 %8, 2
  br i1 %9, label %254, label %10

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %0, i64 8
  %12 = load i32, ptr %11, align 8, !tbaa !19
  %.not = icmp eq i32 %12, 0
  br i1 %.not, label %254, label %13

13:                                               ; preds = %10
  %14 = icmp slt i64 %1, 0
  %15 = icmp slt i64 %6, %1
  %or.cond = select i1 %14, i1 true, i1 %15
  br i1 %or.cond, label %254, label %16

16:                                               ; preds = %13
  %17 = getelementptr inbounds i8, ptr %0, i64 64
  %18 = load i32, ptr %17, align 8, !tbaa !20
  %19 = getelementptr inbounds i8, ptr %0, i64 96
  %20 = zext i32 %18 to i64
  %smin = tail call i32 @llvm.smin.i32(i32 %18, i32 0)
  %21 = add i32 %smin, -1
  %.pre.pre = load ptr, ptr %19, align 8, !tbaa !21
  br label %22

22:                                               ; preds = %25, %16
  %indvars.iv = phi i64 [ %indvars.iv.next, %25 ], [ %20, %16 ]
  %.0220 = phi i64 [ %31, %25 ], [ %6, %16 ]
  %23 = trunc nuw i64 %indvars.iv to i32
  %24 = icmp sgt i32 %23, 0
  br i1 %24, label %25, label %._crit_edge516

._crit_edge516:                                   ; preds = %22
  %.pre = shl nsw i32 %21, 1
  %.pre517 = or disjoint i32 %.pre, 1
  br label %split

25:                                               ; preds = %22
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %indvars = trunc i64 %indvars.iv.next to i32
  %26 = shl nsw i32 %indvars, 1
  %27 = or disjoint i32 %26, 1
  %28 = zext nneg i32 %27 to i64
  %29 = getelementptr inbounds i64, ptr %.pre.pre, i64 %28
  %30 = load i64, ptr %29, align 8, !tbaa !22
  %31 = sub nsw i64 %.0220, %30
  %.not259 = icmp sgt i64 %31, %1
  br i1 %.not259, label %22, label %split, !llvm.loop !23

split:                                            ; preds = %25, %._crit_edge516
  %.pre-phi518 = phi i32 [ %.pre517, %._crit_edge516 ], [ %27, %25 ]
  %.pre-phi = phi i32 [ %.pre, %._crit_edge516 ], [ %26, %25 ]
  %.0188.in.lcssa = phi i32 [ %smin, %._crit_edge516 ], [ %23, %25 ]
  %.0188.lcssa = phi i32 [ %21, %._crit_edge516 ], [ %indvars, %25 ]
  %.1221 = phi i64 [ %.0220, %._crit_edge516 ], [ %31, %25 ]
  %32 = getelementptr inbounds i8, ptr %0, i64 72
  %33 = load ptr, ptr %32, align 8, !tbaa !25
  %34 = sext i32 %.0188.in.lcssa to i64
  %35 = getelementptr inbounds i64, ptr %33, i64 %34
  %36 = load i64, ptr %35, align 8, !tbaa !22
  %37 = getelementptr inbounds i8, ptr %0, i64 80
  %38 = load ptr, ptr %37, align 8, !tbaa !26
  %39 = sext i32 %.0188.lcssa to i64
  %40 = getelementptr inbounds i64, ptr %38, i64 %39
  %41 = load i64, ptr %40, align 8, !tbaa !22
  %42 = sext i32 %.pre-phi to i64
  %43 = getelementptr inbounds i64, ptr %.pre.pre, i64 %42
  %44 = load i64, ptr %43, align 8, !tbaa !22
  %45 = sext i32 %.pre-phi518 to i64
  %46 = getelementptr inbounds i64, ptr %.pre.pre, i64 %45
  %47 = load i64, ptr %46, align 8, !tbaa !22
  %48 = add nsw i64 %47, %44
  %49 = sub nsw i64 %1, %.1221
  %50 = add nsw i64 %44, %49
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #4
  %51 = icmp eq i64 %41, %36
  br i1 %51, label %52, label %59

52:                                               ; preds = %split
  %53 = tail call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %36)
  %.not260 = icmp eq i32 %53, 0
  br i1 %.not260, label %56, label %54

54:                                               ; preds = %52
  %55 = zext i32 %53 to i64
  br label %.thread342

56:                                               ; preds = %52
  %57 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %3, i64 noundef 1)
  %58 = icmp slt i64 %57, 0
  br i1 %58, label %.thread342, label %59

59:                                               ; preds = %56, %split
  %.0222 = phi i64 [ 0, %split ], [ %57, %56 ]
  %.0175 = phi i32 [ 0, %split ], [ 1, %56 ]
  %60 = icmp slt i64 %41, %36
  br i1 %60, label %.lr.ph481, label %._crit_edge.thread

.lr.ph481:                                        ; preds = %59
  %61 = getelementptr inbounds i8, ptr %0, i64 16
  %62 = getelementptr inbounds i8, ptr %0, i64 88
  br label %63

63:                                               ; preds = %.lr.ph481, %select.unfold283
  %.1176480 = phi i32 [ %.0175, %.lr.ph481 ], [ %.5180, %select.unfold283 ]
  %.0181479 = phi i64 [ -1, %.lr.ph481 ], [ %.6187, %select.unfold283 ]
  %.0189478 = phi i64 [ %48, %.lr.ph481 ], [ %.5194, %select.unfold283 ]
  %.0195477 = phi i64 [ %44, %.lr.ph481 ], [ %.6201, %select.unfold283 ]
  %.0202476 = phi i64 [ %41, %.lr.ph481 ], [ %.6208, %select.unfold283 ]
  %.0209475 = phi i64 [ %36, %.lr.ph481 ], [ %.6215, %select.unfold283 ]
  %64 = sub nsw i64 %.0209475, %.0202476
  %65 = icmp slt i64 %64, 65536
  br i1 %65, label %79, label %66

66:                                               ; preds = %63
  %67 = sub nsw i64 %50, %.0195477
  %68 = sitofp i64 %67 to double
  %69 = uitofp nneg i64 %64 to double
  %70 = fmul double %69, %68
  %71 = sub nsw i64 %.0189478, %.0195477
  %72 = sitofp i64 %71 to double
  %73 = fdiv double %70, %72
  %74 = fptosi double %73 to i64
  %75 = add i64 %.0202476, -65536
  %76 = add i64 %75, %74
  %77 = add nsw i64 %.0202476, 65536
  %78 = icmp slt i64 %76, %77
  %spec.select = select i1 %78, i64 %.0202476, i64 %76
  br label %79

79:                                               ; preds = %66, %63
  %.0171 = phi i64 [ %.0202476, %63 ], [ %spec.select, %66 ]
  %80 = call i32 @_seek_helper(ptr noundef %0, i64 noundef %.0171)
  %.not267 = icmp eq i32 %80, 0
  br i1 %.not267, label %.preheader358, label %82

.preheader358:                                    ; preds = %79
  %81 = icmp slt i64 %.0202476, %.0209475
  br i1 %81, label %.lr.ph.split.us, label %select.unfold283

82:                                               ; preds = %79
  %83 = zext i32 %80 to i64
  br label %.thread342

.split:                                           ; preds = %.lr.ph459, %.lr.ph459.preheader
  %.lcssa497 = phi i64 [ %108, %.lr.ph459.preheader ], [ %125, %.lr.ph459 ]
  %.2177415.us458.lcssa = phi i32 [ %.2177.ph467, %.lr.ph459.preheader ], [ 1, %.lr.ph459 ]
  %84 = add nsw i64 %.1203.ph464, 1
  %.not272 = icmp sgt i64 %.1172.ph468, %84
  br i1 %.not272, label %85, label %._crit_edge

85:                                               ; preds = %.split
  %86 = icmp eq i64 %.1172.ph468, 0
  br i1 %86, label %.thread342, label %87

87:                                               ; preds = %85
  %88 = add nsw i64 %.1172.ph468, -65536
  %.not273 = icmp sgt i64 %88, %.1203.ph464
  %spec.select275 = select i1 %.not273, i64 %88, i64 %84
  %89 = call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %spec.select275)
  %.not274 = icmp eq i32 %89, 0
  br i1 %.not274, label %.thread, label %90

90:                                               ; preds = %87
  %91 = zext i32 %89 to i64
  br label %.thread342

.split429:                                        ; preds = %133, %117
  %.lcssa498 = phi i64 [ %108, %117 ], [ %125, %133 ]
  %.lcssa494 = phi i64 [ %118, %117 ], [ %134, %133 ]
  %92 = icmp slt i64 %.lcssa494, %50
  br i1 %92, label %93, label %97

93:                                               ; preds = %.split429
  %94 = load i64, ptr %61, align 8, !tbaa !27
  %95 = sub nsw i64 %50, %.lcssa494
  %96 = icmp sgt i64 %95, 44100
  br i1 %96, label %select.unfold283, label %.thread

97:                                               ; preds = %.split429
  %98 = add nsw i64 %.1203.ph464, 1
  %.not269 = icmp sgt i64 %.1172.ph468, %98
  br i1 %.not269, label %99, label %._crit_edge

99:                                               ; preds = %97
  %100 = load i64, ptr %61, align 8, !tbaa !27
  %101 = icmp eq i64 %.1210.ph463, %100
  br i1 %101, label %102, label %select.unfold283

102:                                              ; preds = %99
  %103 = add nsw i64 %.1172.ph468, -65536
  %.not270 = icmp sgt i64 %103, %.1203.ph464
  %spec.select276 = select i1 %.not270, i64 %103, i64 %98
  %104 = call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %spec.select276)
  %.not271 = icmp eq i32 %104, 0
  br i1 %.not271, label %.thread, label %.thread342.loopexit.loopexit360.split.loop.exit460

.thread:                                          ; preds = %102, %93, %87
  %.5227 = phi i64 [ 0, %87 ], [ %.lcssa498, %93 ], [ 0, %102 ]
  %.4213 = phi i64 [ %.1210.ph463, %87 ], [ %.1210.ph463, %93 ], [ %.lcssa498, %102 ]
  %.4206 = phi i64 [ %.1203.ph464, %87 ], [ %94, %93 ], [ %.1203.ph464, %102 ]
  %.4199 = phi i64 [ %.1196.ph465, %87 ], [ %.lcssa494, %93 ], [ %.1196.ph465, %102 ]
  %.4185 = phi i64 [ %.1182.ph466, %87 ], [ %.lcssa498, %93 ], [ %.1182.ph466, %102 ]
  %.3178 = phi i32 [ %.2177415.us458.lcssa, %87 ], [ 1, %93 ], [ 1, %102 ]
  %.6 = phi i64 [ %spec.select275, %87 ], [ %94, %93 ], [ %spec.select276, %102 ]
  %105 = icmp slt i64 %.4206, %.4213
  br i1 %105, label %.lr.ph.split.us, label %select.unfold283, !llvm.loop !28

.lr.ph.split.us:                                  ; preds = %.preheader358, %.thread
  %.1172.ph468 = phi i64 [ %.6, %.thread ], [ %.0171, %.preheader358 ]
  %.2177.ph467 = phi i32 [ %.3178, %.thread ], [ %.1176480, %.preheader358 ]
  %.1182.ph466 = phi i64 [ %.4185, %.thread ], [ %.0181479, %.preheader358 ]
  %.1196.ph465 = phi i64 [ %.4199, %.thread ], [ %.0195477, %.preheader358 ]
  %.1203.ph464 = phi i64 [ %.4206, %.thread ], [ %.0202476, %.preheader358 ]
  %.1210.ph463 = phi i64 [ %.4213, %.thread ], [ %.0209475, %.preheader358 ]
  %106 = load i64, ptr %61, align 8, !tbaa !27
  %107 = sub nsw i64 %.1210.ph463, %106
  %108 = call i64 @_get_next_page(ptr noundef %0, ptr noundef nonnull %3, i64 noundef %107)
  %109 = icmp eq i64 %108, -128
  br i1 %109, label %.thread342, label %.lr.ph459.preheader

.lr.ph459.preheader:                              ; preds = %.lr.ph.split.us
  %110 = icmp slt i64 %108, 0
  br i1 %110, label %.split, label %111

111:                                              ; preds = %.lr.ph459.preheader
  %112 = call i32 @ogg_page_serialno(ptr noundef nonnull %3)
  %113 = sext i32 %112 to i64
  %114 = load ptr, ptr %62, align 8, !tbaa !29
  %115 = getelementptr inbounds i64, ptr %114, i64 %39
  %116 = load i64, ptr %115, align 8, !tbaa !22
  %.not268.us.peel = icmp eq i64 %116, %113
  br i1 %.not268.us.peel, label %117, label %120, !llvm.loop !28

117:                                              ; preds = %111
  %118 = call i64 @ogg_page_granulepos(ptr noundef nonnull %3)
  %119 = icmp eq i64 %118, -1
  br i1 %119, label %120, label %.split429, !llvm.loop !28

120:                                              ; preds = %117, %111
  %121 = load i64, ptr %61, align 8, !tbaa !27
  %122 = sub nsw i64 %.1210.ph463, %121
  %123 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %3, i64 noundef %122)
  %124 = icmp eq i64 %123, -128
  br i1 %124, label %.thread342, label %.lr.ph459

.lr.ph459:                                        ; preds = %120, %136
  %125 = phi i64 [ %139, %136 ], [ %123, %120 ]
  %126 = icmp slt i64 %125, 0
  br i1 %126, label %.split, label %127

127:                                              ; preds = %.lr.ph459
  %128 = call i32 @ogg_page_serialno(ptr noundef nonnull %3)
  %129 = sext i32 %128 to i64
  %130 = load ptr, ptr %62, align 8, !tbaa !29
  %131 = getelementptr inbounds i64, ptr %130, i64 %39
  %132 = load i64, ptr %131, align 8, !tbaa !22
  %.not268.us = icmp eq i64 %132, %129
  br i1 %.not268.us, label %133, label %136, !llvm.loop !28

133:                                              ; preds = %127
  %134 = call i64 @ogg_page_granulepos(ptr noundef nonnull %3)
  %135 = icmp eq i64 %134, -1
  br i1 %135, label %136, label %.split429, !llvm.loop !28

136:                                              ; preds = %133, %127
  %137 = load i64, ptr %61, align 8, !tbaa !27
  %138 = sub nsw i64 %.1210.ph463, %137
  %139 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %3, i64 noundef %138)
  %140 = icmp eq i64 %139, -128
  br i1 %140, label %.thread342, label %.lr.ph459, !llvm.loop !30

select.unfold283:                                 ; preds = %93, %99, %.thread, %.preheader358
  %.7 = phi i64 [ 0, %.preheader358 ], [ %.lcssa498, %93 ], [ %.lcssa498, %99 ], [ %.5227, %.thread ]
  %.6215 = phi i64 [ %.0209475, %.preheader358 ], [ %.1210.ph463, %93 ], [ %.1172.ph468, %99 ], [ %.4213, %.thread ]
  %.6208 = phi i64 [ %.0202476, %.preheader358 ], [ %94, %93 ], [ %.1203.ph464, %99 ], [ %.4206, %.thread ]
  %.6201 = phi i64 [ %.0195477, %.preheader358 ], [ %.lcssa494, %93 ], [ %.1196.ph465, %99 ], [ %.4199, %.thread ]
  %.5194 = phi i64 [ %.0189478, %.preheader358 ], [ %.0189478, %93 ], [ %.lcssa494, %99 ], [ %.0189478, %.thread ]
  %.6187 = phi i64 [ %.0181479, %.preheader358 ], [ %.lcssa498, %93 ], [ %.1182.ph466, %99 ], [ %.4185, %.thread ]
  %.5180 = phi i32 [ %.1176480, %.preheader358 ], [ 1, %93 ], [ 1, %99 ], [ %.3178, %.thread ]
  %141 = icmp slt i64 %.6208, %.6215
  br i1 %141, label %63, label %._crit_edge, !llvm.loop !32

._crit_edge:                                      ; preds = %select.unfold283, %.split, %97
  %.1223.lcssa = phi i64 [ %.lcssa497, %.split ], [ %.lcssa498, %97 ], [ %.7, %select.unfold283 ]
  %.0202.lcssa = phi i64 [ %.1203.ph464, %97 ], [ %.1203.ph464, %.split ], [ %.6208, %select.unfold283 ]
  %.0181.lcssa = phi i64 [ %.1182.ph466, %97 ], [ %.1182.ph466, %.split ], [ %.6187, %select.unfold283 ]
  %.1176.lcssa = phi i32 [ %.2177415.us458.lcssa, %.split ], [ 1, %97 ], [ %.5180, %select.unfold283 ]
  %142 = icmp eq i64 %.0181.lcssa, -1
  br i1 %142, label %._crit_edge.thread, label %174

._crit_edge.thread:                               ; preds = %59, %._crit_edge
  %.1176.lcssa543 = phi i32 [ %.1176.lcssa, %._crit_edge ], [ %.0175, %59 ]
  %.0202.lcssa542 = phi i64 [ %.0202.lcssa, %._crit_edge ], [ %41, %59 ]
  %.1223.lcssa541 = phi i64 [ %.1223.lcssa, %._crit_edge ], [ %.0222, %59 ]
  %.not265 = icmp eq i32 %.1176.lcssa543, 0
  br i1 %.not265, label %.thread342, label %143

143:                                              ; preds = %._crit_edge.thread
  %144 = load ptr, ptr %37, align 8, !tbaa !26
  %145 = getelementptr inbounds i64, ptr %144, i64 %39
  %146 = load i64, ptr %145, align 8, !tbaa !22
  %147 = icmp eq i64 %.0202.lcssa542, %146
  br i1 %147, label %148, label %.thread342

148:                                              ; preds = %143
  %149 = call i32 @ogg_page_serialno(ptr noundef nonnull %3)
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i8, ptr %0, i64 88
  %152 = load ptr, ptr %151, align 8, !tbaa !29
  %153 = getelementptr inbounds i64, ptr %152, i64 %39
  %154 = load i64, ptr %153, align 8, !tbaa !22
  %155 = icmp eq i64 %154, %150
  br i1 %155, label %156, label %.thread342

156:                                              ; preds = %148
  %157 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 %.1221, ptr %157, align 8, !tbaa !33
  %158 = getelementptr inbounds i8, ptr %0, i64 144
  %159 = load i32, ptr %158, align 8, !tbaa !34
  %.not266 = icmp eq i32 %.0188.lcssa, %159
  br i1 %.not266, label %165, label %160

160:                                              ; preds = %156
  call void @_decode_clear(ptr noundef nonnull %0)
  store i32 %.0188.lcssa, ptr %158, align 8, !tbaa !34
  %161 = load ptr, ptr %151, align 8, !tbaa !29
  %162 = getelementptr inbounds i64, ptr %161, i64 %39
  %163 = load i64, ptr %162, align 8, !tbaa !22
  %164 = getelementptr inbounds i8, ptr %0, i64 136
  store i64 %163, ptr %164, align 8, !tbaa !35
  store i32 3, ptr %7, align 8, !tbaa !5
  br label %168

165:                                              ; preds = %156
  %166 = getelementptr inbounds i8, ptr %0, i64 576
  %167 = call i32 @vorbis_synthesis_restart(ptr noundef nonnull %166)
  %.phi.trans.insert512 = getelementptr inbounds i8, ptr %0, i64 136
  %.pre513 = load i64, ptr %.phi.trans.insert512, align 8, !tbaa !35
  br label %168

168:                                              ; preds = %165, %160
  %169 = phi i64 [ %.pre513, %165 ], [ %163, %160 ]
  %170 = getelementptr inbounds i8, ptr %0, i64 168
  %171 = trunc i64 %169 to i32
  %172 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %170, i32 noundef %171)
  %173 = call i32 @ogg_stream_pagein(ptr noundef nonnull %170, ptr noundef nonnull %3)
  %.pre515 = load i64, ptr %157, align 8, !tbaa !33
  br label %243

174:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #4
  %175 = call i32 @_seek_helper(ptr noundef %0, i64 noundef %.0181.lcssa)
  %176 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 -1, ptr %176, align 8, !tbaa !33
  %.not261 = icmp eq i32 %175, 0
  br i1 %.not261, label %179, label %177

177:                                              ; preds = %174
  %178 = zext i32 %175 to i64
  br label %.thread353

179:                                              ; preds = %174
  %180 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef -1)
  %181 = icmp slt i64 %180, 0
  br i1 %181, label %.thread353, label %182

182:                                              ; preds = %179
  %183 = getelementptr inbounds i8, ptr %0, i64 144
  %184 = load i32, ptr %183, align 8, !tbaa !34
  %.not262 = icmp eq i32 %.0188.lcssa, %184
  br i1 %.not262, label %191, label %185

185:                                              ; preds = %182
  call void @_decode_clear(ptr noundef nonnull %0)
  store i32 %.0188.lcssa, ptr %183, align 8, !tbaa !34
  %186 = getelementptr inbounds i8, ptr %0, i64 88
  %187 = load ptr, ptr %186, align 8, !tbaa !29
  %188 = getelementptr inbounds i64, ptr %187, i64 %39
  %189 = load i64, ptr %188, align 8, !tbaa !22
  %190 = getelementptr inbounds i8, ptr %0, i64 136
  store i64 %189, ptr %190, align 8, !tbaa !35
  store i32 3, ptr %7, align 8, !tbaa !5
  br label %194

191:                                              ; preds = %182
  %192 = getelementptr inbounds i8, ptr %0, i64 576
  %193 = call i32 @vorbis_synthesis_restart(ptr noundef nonnull %192)
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 136
  %.pre511 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !35
  br label %194

194:                                              ; preds = %191, %185
  %195 = phi i64 [ %.pre511, %191 ], [ %189, %185 ]
  %196 = getelementptr inbounds i8, ptr %0, i64 168
  %197 = getelementptr inbounds i8, ptr %0, i64 136
  %198 = trunc i64 %195 to i32
  %199 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %196, i32 noundef %198)
  %200 = call i32 @ogg_stream_pagein(ptr noundef nonnull %196, ptr noundef nonnull %4)
  %201 = getelementptr inbounds i8, ptr %5, i64 32
  br label %202

202:                                              ; preds = %229, %194
  %203 = call i32 @ogg_stream_packetpeek(ptr noundef nonnull %196, ptr noundef nonnull %5)
  %204 = sext i32 %203 to i64
  %205 = icmp eq i32 %203, 0
  br i1 %205, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %202
  %206 = load ptr, ptr %37, align 8, !tbaa !26
  %207 = getelementptr inbounds i64, ptr %206, i64 %39
  %208 = load i64, ptr %207, align 8, !tbaa !22
  %209 = icmp sgt i64 %.0181.lcssa, %208
  br i1 %209, label %.lr.ph487, label %.loopexit

.lr.ph487:                                        ; preds = %.preheader, %222
  %.8486 = phi i64 [ %210, %222 ], [ %.0181.lcssa, %.preheader ]
  %210 = call i64 @_get_prev_page(ptr noundef nonnull %0, i64 noundef %.8486, ptr noundef nonnull %4)
  %211 = icmp slt i64 %210, 0
  br i1 %211, label %.thread353, label %212

212:                                              ; preds = %.lr.ph487
  %213 = call i32 @ogg_page_serialno(ptr noundef nonnull %4)
  %214 = sext i32 %213 to i64
  %215 = load i64, ptr %197, align 8, !tbaa !35
  %216 = icmp eq i64 %215, %214
  br i1 %216, label %217, label %222

217:                                              ; preds = %212
  %218 = call i64 @ogg_page_granulepos(ptr noundef nonnull %4)
  %219 = icmp sgt i64 %218, -1
  br i1 %219, label %241, label %220

220:                                              ; preds = %217
  %221 = call i32 @ogg_page_continued(ptr noundef nonnull %4)
  %.not264 = icmp eq i32 %221, 0
  br i1 %.not264, label %241, label %222

222:                                              ; preds = %220, %212
  %223 = load ptr, ptr %37, align 8, !tbaa !26
  %224 = getelementptr inbounds i64, ptr %223, i64 %39
  %225 = load i64, ptr %224, align 8, !tbaa !22
  %226 = icmp sgt i64 %210, %225
  br i1 %226, label %.lr.ph487, label %.loopexit.thread, !llvm.loop !36

.loopexit:                                        ; preds = %.preheader, %202
  %.9 = phi i64 [ %204, %202 ], [ %.0181.lcssa, %.preheader ]
  %227 = icmp slt i64 %.9, 0
  br i1 %227, label %.thread353, label %.loopexit.thread

.loopexit.thread:                                 ; preds = %222, %.loopexit
  %228 = load i64, ptr %201, align 8, !tbaa !37
  %.not263 = icmp eq i64 %228, -1
  br i1 %.not263, label %229, label %231

229:                                              ; preds = %.loopexit.thread
  %230 = call i32 @ogg_stream_packetout(ptr noundef nonnull %196, ptr noundef null)
  br label %202

231:                                              ; preds = %.loopexit.thread
  %232 = load ptr, ptr %19, align 8, !tbaa !21
  %233 = load i32, ptr %183, align 8, !tbaa !34
  %234 = shl nsw i32 %233, 1
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i64, ptr %232, i64 %235
  %237 = load i64, ptr %236, align 8, !tbaa !22
  %238 = sub nsw i64 %228, %237
  %spec.select277 = call i64 @llvm.smax.i64(i64 %238, i64 0)
  %239 = add nsw i64 %spec.select277, %.1221
  store i64 %239, ptr %176, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #4
  br label %243

.thread342.loopexit.loopexit360.split.loop.exit460: ; preds = %102
  %240 = zext i32 %104 to i64
  br label %.thread342

.thread342:                                       ; preds = %.lr.ph.split.us, %85, %120, %136, %.thread342.loopexit.loopexit360.split.loop.exit460, %54, %56, %148, %143, %._crit_edge.thread, %82, %90
  %.12.ph = phi i64 [ %.1223.lcssa541, %._crit_edge.thread ], [ %.1223.lcssa541, %143 ], [ %.1223.lcssa541, %148 ], [ %57, %56 ], [ %55, %54 ], [ %91, %90 ], [ %83, %82 ], [ %240, %.thread342.loopexit.loopexit360.split.loop.exit460 ], [ -128, %136 ], [ %.lcssa497, %85 ], [ -128, %.lr.ph.split.us ], [ -128, %120 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  br label %251

.thread353:                                       ; preds = %.loopexit, %.lr.ph487, %179, %177
  %.10.ph.ph = phi i64 [ %178, %177 ], [ %180, %179 ], [ %210, %.lr.ph487 ], [ -136, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  br label %251

241:                                              ; preds = %217, %220
  %242 = call i32 @ov_raw_seek(ptr noundef nonnull %0, i64 noundef %210)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  br label %254

243:                                              ; preds = %168, %231
  %244 = phi i64 [ %.pre515, %168 ], [ %239, %231 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  %245 = icmp sgt i64 %244, %1
  br i1 %245, label %251, label %246

246:                                              ; preds = %243
  %247 = call i64 @ov_pcm_total(ptr noundef nonnull %0, i32 noundef -1)
  %248 = icmp slt i64 %247, %1
  br i1 %248, label %251, label %249

249:                                              ; preds = %246
  %250 = getelementptr inbounds i8, ptr %0, i64 152
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %250, i8 0, i64 16, i1 false)
  br label %254

251:                                              ; preds = %.thread353, %.thread342, %243, %246
  %.13 = phi i64 [ -129, %246 ], [ -129, %243 ], [ %.12.ph, %.thread342 ], [ %.10.ph.ph, %.thread353 ]
  %252 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 -1, ptr %252, align 8, !tbaa !33
  call void @_decode_clear(ptr noundef %0)
  %253 = trunc i64 %.13 to i32
  br label %254

254:                                              ; preds = %241, %13, %10, %2, %251, %249
  %.3 = phi i32 [ %242, %241 ], [ %253, %251 ], [ 0, %249 ], [ -131, %2 ], [ -138, %10 ], [ -131, %13 ]
  ret i32 %.3
}

; Function Attrs: nounwind uwtable
declare hidden i64 @_get_prev_page(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !10, i64 128}
!6 = !{!"OggVorbis_File", !7, i64 0, !10, i64 8, !11, i64 16, !11, i64 24, !12, i64 32, !10, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !11, i64 120, !10, i64 128, !11, i64 136, !10, i64 144, !13, i64 152, !13, i64 160, !14, i64 168, !15, i64 576, !16, i64 720, !18, i64 912}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28}
!13 = !{!"double", !8, i64 0}
!14 = !{!"", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !7, i64 32, !7, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !8, i64 80, !10, i64 364, !10, i64 368, !10, i64 372, !11, i64 376, !11, i64 384, !11, i64 392, !11, i64 400}
!15 = !{!"vorbis_dsp_state", !10, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !7, i64 136}
!16 = !{!"vorbis_block", !7, i64 0, !17, i64 8, !11, i64 48, !11, i64 56, !11, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !11, i64 88, !11, i64 96, !7, i64 104, !7, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !7, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !7, i64 184}
!17 = !{!"", !11, i64 0, !10, i64 8, !7, i64 16, !7, i64 24, !11, i64 32}
!18 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!19 = !{!6, !10, i64 8}
!20 = !{!6, !10, i64 64}
!21 = !{!6, !7, i64 96}
!22 = !{!11, !11, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!6, !7, i64 72}
!26 = !{!6, !7, i64 80}
!27 = !{!6, !11, i64 16}
!28 = distinct !{!28, !24}
!29 = !{!6, !7, i64 88}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.peeled.count", i32 1}
!32 = distinct !{!32, !24}
!33 = !{!6, !11, i64 120}
!34 = !{!6, !10, i64 144}
!35 = !{!6, !11, i64 136}
!36 = distinct !{!36, !24}
!37 = !{!38, !11, i64 32}
!38 = !{!"", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass