; 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_stream_state = type { ptr, i64, i64, i64, ptr, ptr, i64, i64, i64, i64, [282 x i8], i32, i32, i32, i64, i64, i64, i64 }
%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.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 }
%struct.vorbis_info = type { i32, i32, i64, i64, i64, i64, i64, 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_bos(ptr noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_eos(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_init(ptr noundef, i32 noundef) #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_clear(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(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 @vorbis_synthesis_restart(ptr noundef) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @ov_raw_seek(ptr noundef %0, i64 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca %struct.ogg_stream_state, align 8
  %7 = alloca i32, align 4
  %8 = alloca %struct.ogg_page, align 8
  %9 = alloca %struct.ogg_packet, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  %21 = alloca i64, 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 408, ptr %6) #2
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.OggVorbis_File, ptr %22, i32 0, i32 13
  %24 = load i32, ptr %23, align 8, !tbaa !11
  %25 = icmp slt i32 %24, 2
  br i1 %25, label %26, label %27

26:                                               ; preds = %2
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %348

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

32:                                               ; preds = %27
  store i32 -138, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %348

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

36:                                               ; preds = %33
  %37 = load i64, ptr %5, align 8, !tbaa !9
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.OggVorbis_File, ptr %38, i32 0, i32 3
  %40 = load i64, ptr %39, align 8, !tbaa !22
  %41 = icmp sgt i64 %37, %40
  br i1 %41, label %42, label %43

42:                                               ; preds = %36, %33
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %348

43:                                               ; preds = %36
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.OggVorbis_File, ptr %44, i32 0, i32 13
  %46 = load i32, ptr %45, align 8, !tbaa !11
  %47 = icmp sge i32 %46, 3
  br i1 %47, label %48, label %76

48:                                               ; preds = %43
  %49 = load i64, ptr %5, align 8, !tbaa !9
  %50 = load ptr, ptr %4, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.OggVorbis_File, ptr %50, i32 0, i32 6
  %52 = load ptr, ptr %51, align 8, !tbaa !23
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.OggVorbis_File, ptr %53, i32 0, i32 15
  %55 = load i32, ptr %54, align 8, !tbaa !24
  %56 = sext i32 %55 to i64
  %57 = getelementptr inbounds i64, ptr %52, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !9
  %59 = icmp slt i64 %49, %58
  br i1 %59, label %73, label %60

60:                                               ; preds = %48
  %61 = load i64, ptr %5, align 8, !tbaa !9
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.OggVorbis_File, ptr %62, i32 0, i32 6
  %64 = load ptr, ptr %63, align 8, !tbaa !23
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.OggVorbis_File, ptr %65, i32 0, i32 15
  %67 = load i32, ptr %66, align 8, !tbaa !24
  %68 = add nsw i32 %67, 1
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds i64, ptr %64, i64 %69
  %71 = load i64, ptr %70, align 8, !tbaa !9
  %72 = icmp sge i64 %61, %71
  br i1 %72, label %73, label %75

73:                                               ; preds = %60, %48
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %74)
  br label %75

75:                                               ; preds = %73, %60
  br label %76

76:                                               ; preds = %75, %43
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.OggVorbis_File, ptr %77, i32 0, i32 12
  store i64 -1, ptr %78, align 8, !tbaa !25
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.OggVorbis_File, ptr %79, i32 0, i32 18
  %81 = load ptr, ptr %4, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.OggVorbis_File, ptr %81, i32 0, i32 14
  %83 = load i64, ptr %82, align 8, !tbaa !26
  %84 = trunc i64 %83 to i32
  %85 = call i32 @ogg_stream_reset_serialno(ptr noundef %80, i32 noundef %84)
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.OggVorbis_File, ptr %86, i32 0, i32 19
  %88 = call i32 @vorbis_synthesis_restart(ptr noundef %87)
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = load i64, ptr %5, align 8, !tbaa !9
  %91 = call i32 @_seek_helper(ptr noundef %89, i64 noundef %90)
  %92 = icmp ne i32 %91, 0
  br i1 %92, label %93, label %97

93:                                               ; preds = %76
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.OggVorbis_File, ptr %94, i32 0, i32 12
  store i64 -1, ptr %95, align 8, !tbaa !25
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %96)
  store i32 -137, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %348

97:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 32, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 48, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  store i32 0, ptr %10, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  store i32 0, ptr %11, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #2
  store i32 0, ptr %12, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  store i32 0, ptr %13, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  store i32 0, ptr %14, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  store i64 -1, ptr %15, align 8, !tbaa !9
  %98 = load ptr, ptr %4, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.OggVorbis_File, ptr %98, i32 0, i32 14
  %100 = load i64, ptr %99, align 8, !tbaa !26
  %101 = trunc i64 %100 to i32
  %102 = call i32 @ogg_stream_init(ptr noundef %6, i32 noundef %101)
  %103 = call i32 @ogg_stream_reset(ptr noundef %6)
  br label %104

104:                                              ; preds = %336, %333, %230, %97
  br label %105

105:                                              ; preds = %104
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.OggVorbis_File, ptr %106, i32 0, i32 13
  %108 = load i32, ptr %107, align 8, !tbaa !11
  %109 = icmp sge i32 %108, 3
  br i1 %109, label %110, label %233

110:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  %111 = call i32 @ogg_stream_packetout(ptr noundef %6, ptr noundef %9)
  store i32 %111, ptr %16, align 4, !tbaa !27
  %112 = load i32, ptr %16, align 4, !tbaa !27
  %113 = icmp sgt i32 %112, 0
  br i1 %113, label %114, label %229

114:                                              ; preds = %110
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.OggVorbis_File, ptr %115, i32 0, i32 10
  %117 = load ptr, ptr %116, align 8, !tbaa !28
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.OggVorbis_File, ptr %118, i32 0, i32 15
  %120 = load i32, ptr %119, align 8, !tbaa !24
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds %struct.vorbis_info, ptr %117, i64 %121
  %123 = getelementptr inbounds %struct.vorbis_info, ptr %122, i32 0, i32 7
  %124 = load ptr, ptr %123, align 8, !tbaa !29
  %125 = icmp ne ptr %124, null
  br i1 %125, label %126, label %224

126:                                              ; preds = %114
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.OggVorbis_File, ptr %127, i32 0, i32 10
  %129 = load ptr, ptr %128, align 8, !tbaa !28
  %130 = load ptr, ptr %4, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.OggVorbis_File, ptr %130, i32 0, i32 15
  %132 = load i32, ptr %131, align 8, !tbaa !24
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds %struct.vorbis_info, ptr %129, i64 %133
  %135 = call i64 @vorbis_packet_blocksize(ptr noundef %134, ptr noundef %9)
  %136 = trunc i64 %135 to i32
  store i32 %136, ptr %12, align 4, !tbaa !27
  %137 = load i32, ptr %12, align 4, !tbaa !27
  %138 = icmp slt i32 %137, 0
  br i1 %138, label %139, label %143

139:                                              ; preds = %126
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.OggVorbis_File, ptr %140, i32 0, i32 18
  %142 = call i32 @ogg_stream_packetout(ptr noundef %141, ptr noundef null)
  store i32 0, ptr %12, align 4, !tbaa !27
  br label %165

143:                                              ; preds = %126
  %144 = load i32, ptr %13, align 4, !tbaa !27
  %145 = icmp ne i32 %144, 0
  br i1 %145, label %146, label %153

146:                                              ; preds = %143
  %147 = load i32, ptr %14, align 4, !tbaa !27
  %148 = icmp ne i32 %147, 0
  br i1 %148, label %153, label %149

149:                                              ; preds = %146
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.OggVorbis_File, ptr %150, i32 0, i32 18
  %152 = call i32 @ogg_stream_packetout(ptr noundef %151, ptr noundef null)
  br label %164

153:                                              ; preds = %146, %143
  %154 = load i32, ptr %10, align 4, !tbaa !27
  %155 = icmp ne i32 %154, 0
  br i1 %155, label %156, label %163

156:                                              ; preds = %153
  %157 = load i32, ptr %10, align 4, !tbaa !27
  %158 = load i32, ptr %12, align 4, !tbaa !27
  %159 = add nsw i32 %157, %158
  %160 = ashr i32 %159, 2
  %161 = load i32, ptr %11, align 4, !tbaa !27
  %162 = add nsw i32 %161, %160
  store i32 %162, ptr %11, align 4, !tbaa !27
  br label %163

163:                                              ; preds = %156, %153
  br label %164

164:                                              ; preds = %163, %149
  br label %165

165:                                              ; preds = %164, %139
  %166 = getelementptr inbounds %struct.ogg_packet, ptr %9, i32 0, i32 4
  %167 = load i64, ptr %166, align 8, !tbaa !31
  %168 = icmp ne i64 %167, -1
  br i1 %168, label %169, label %222

169:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #2
  %170 = load ptr, ptr %4, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.OggVorbis_File, ptr %170, i32 0, i32 15
  %172 = load i32, ptr %171, align 8, !tbaa !24
  store i32 %172, ptr %18, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  %173 = getelementptr inbounds %struct.ogg_packet, ptr %9, i32 0, i32 4
  %174 = load i64, ptr %173, align 8, !tbaa !31
  %175 = load ptr, ptr %4, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.OggVorbis_File, ptr %175, i32 0, i32 9
  %177 = load ptr, ptr %176, align 8, !tbaa !33
  %178 = load i32, ptr %18, align 4, !tbaa !27
  %179 = mul nsw i32 %178, 2
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i64, ptr %177, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = sub nsw i64 %174, %182
  store i64 %183, ptr %19, align 8, !tbaa !9
  %184 = load i64, ptr %19, align 8, !tbaa !9
  %185 = icmp slt i64 %184, 0
  br i1 %185, label %186, label %187

186:                                              ; preds = %169
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %187

187:                                              ; preds = %186, %169
  store i32 0, ptr %17, align 4, !tbaa !27
  br label %188

188:                                              ; preds = %204, %187
  %189 = load i32, ptr %17, align 4, !tbaa !27
  %190 = load i32, ptr %18, align 4, !tbaa !27
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %192, label %207

192:                                              ; preds = %188
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.OggVorbis_File, ptr %193, i32 0, i32 9
  %195 = load ptr, ptr %194, align 8, !tbaa !33
  %196 = load i32, ptr %17, align 4, !tbaa !27
  %197 = mul nsw i32 %196, 2
  %198 = add nsw i32 %197, 1
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i64, ptr %195, i64 %199
  %201 = load i64, ptr %200, align 8, !tbaa !9
  %202 = load i64, ptr %19, align 8, !tbaa !9
  %203 = add nsw i64 %202, %201
  store i64 %203, ptr %19, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %192
  %205 = load i32, ptr %17, align 4, !tbaa !27
  %206 = add nsw i32 %205, 1
  store i32 %206, ptr %17, align 4, !tbaa !27
  br label %188, !llvm.loop !34

207:                                              ; preds = %188
  %208 = load i64, ptr %19, align 8, !tbaa !9
  %209 = load i32, ptr %11, align 4, !tbaa !27
  %210 = sext i32 %209 to i64
  %211 = sub nsw i64 %208, %210
  %212 = load ptr, ptr %4, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.OggVorbis_File, ptr %212, i32 0, i32 12
  store i64 %211, ptr %213, align 8, !tbaa !25
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.OggVorbis_File, ptr %214, i32 0, i32 12
  %216 = load i64, ptr %215, align 8, !tbaa !25
  %217 = icmp slt i64 %216, 0
  br i1 %217, label %218, label %221

218:                                              ; preds = %207
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.OggVorbis_File, ptr %219, i32 0, i32 12
  store i64 0, ptr %220, align 8, !tbaa !25
  br label %221

221:                                              ; preds = %218, %207
  store i32 3, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #2
  br label %230

222:                                              ; preds = %165
  %223 = load i32, ptr %12, align 4, !tbaa !27
  store i32 %223, ptr %10, align 4, !tbaa !27
  store i32 2, ptr %7, align 4
  br label %230

224:                                              ; preds = %114
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.OggVorbis_File, ptr %225, i32 0, i32 18
  %227 = call i32 @ogg_stream_packetout(ptr noundef %226, ptr noundef null)
  br label %228

228:                                              ; preds = %224
  br label %229

229:                                              ; preds = %228, %110
  store i32 0, ptr %7, align 4
  br label %230

230:                                              ; preds = %229, %222, %221
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  %231 = load i32, ptr %7, align 4
  switch i32 %231, label %350 [
    i32 0, label %232
    i32 3, label %342
    i32 2, label %104
  ]

232:                                              ; preds = %230
  br label %233

233:                                              ; preds = %232, %105
  %234 = load i32, ptr %10, align 4, !tbaa !27
  %235 = icmp ne i32 %234, 0
  br i1 %235, label %247, label %236

236:                                              ; preds = %233
  %237 = load ptr, ptr %4, align 8, !tbaa !5
  %238 = call i64 @_get_next_page(ptr noundef %237, ptr noundef %8, i64 noundef -1)
  store i64 %238, ptr %15, align 8, !tbaa !9
  %239 = load i64, ptr %15, align 8, !tbaa !9
  %240 = icmp slt i64 %239, 0
  br i1 %240, label %241, label %246

241:                                              ; preds = %236
  %242 = load ptr, ptr %4, align 8, !tbaa !5
  %243 = call i64 @ov_pcm_total(ptr noundef %242, i32 noundef -1)
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.OggVorbis_File, ptr %244, i32 0, i32 12
  store i64 %243, ptr %245, align 8, !tbaa !25
  br label %342

246:                                              ; preds = %236
  br label %250

247:                                              ; preds = %233
  %248 = load ptr, ptr %4, align 8, !tbaa !5
  %249 = getelementptr inbounds %struct.OggVorbis_File, ptr %248, i32 0, i32 12
  store i64 -1, ptr %249, align 8, !tbaa !25
  br label %342

250:                                              ; preds = %246
  %251 = load ptr, ptr %4, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.OggVorbis_File, ptr %251, i32 0, i32 13
  %253 = load i32, ptr %252, align 8, !tbaa !11
  %254 = icmp sge i32 %253, 3
  br i1 %254, label %255, label %270

255:                                              ; preds = %250
  %256 = load ptr, ptr %4, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.OggVorbis_File, ptr %256, i32 0, i32 14
  %258 = load i64, ptr %257, align 8, !tbaa !26
  %259 = call i32 @ogg_page_serialno(ptr noundef %8)
  %260 = sext i32 %259 to i64
  %261 = icmp ne i64 %258, %260
  br i1 %261, label %262, label %269

262:                                              ; preds = %255
  %263 = call i32 @ogg_page_bos(ptr noundef %8)
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %268

265:                                              ; preds = %262
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %266)
  %267 = call i32 @ogg_stream_clear(ptr noundef %6)
  br label %268

268:                                              ; preds = %265, %262
  br label %269

269:                                              ; preds = %268, %255
  br label %270

270:                                              ; preds = %269, %250
  %271 = load ptr, ptr %4, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.OggVorbis_File, ptr %271, i32 0, i32 13
  %273 = load i32, ptr %272, align 8, !tbaa !11
  %274 = icmp slt i32 %273, 3
  br i1 %274, label %275, label %336

275:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  %276 = call i32 @ogg_page_serialno(ptr noundef %8)
  %277 = sext i32 %276 to i64
  store i64 %277, ptr %21, align 8, !tbaa !9
  store i32 0, ptr %20, align 4, !tbaa !27
  br label %278

278:                                              ; preds = %296, %275
  %279 = load i32, ptr %20, align 4, !tbaa !27
  %280 = load ptr, ptr %4, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.OggVorbis_File, ptr %280, i32 0, i32 5
  %282 = load i32, ptr %281, align 8, !tbaa !36
  %283 = icmp slt i32 %279, %282
  br i1 %283, label %284, label %299

284:                                              ; preds = %278
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.OggVorbis_File, ptr %285, i32 0, i32 8
  %287 = load ptr, ptr %286, align 8, !tbaa !37
  %288 = load i32, ptr %20, align 4, !tbaa !27
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i64, ptr %287, i64 %289
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = load i64, ptr %21, align 8, !tbaa !9
  %293 = icmp eq i64 %291, %292
  br i1 %293, label %294, label %295

294:                                              ; preds = %284
  br label %299

295:                                              ; preds = %284
  br label %296

296:                                              ; preds = %295
  %297 = load i32, ptr %20, align 4, !tbaa !27
  %298 = add nsw i32 %297, 1
  store i32 %298, ptr %20, align 4, !tbaa !27
  br label %278, !llvm.loop !38

299:                                              ; preds = %294, %278
  %300 = load i32, ptr %20, align 4, !tbaa !27
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.OggVorbis_File, ptr %301, i32 0, i32 5
  %303 = load i32, ptr %302, align 8, !tbaa !36
  %304 = icmp eq i32 %300, %303
  br i1 %304, label %305, label %306

305:                                              ; preds = %299
  store i32 2, ptr %7, align 4
  br label %333

306:                                              ; preds = %299
  %307 = load i32, ptr %20, align 4, !tbaa !27
  %308 = load ptr, ptr %4, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.OggVorbis_File, ptr %308, i32 0, i32 15
  store i32 %307, ptr %309, align 8, !tbaa !24
  %310 = load i64, ptr %21, align 8, !tbaa !9
  %311 = load ptr, ptr %4, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.OggVorbis_File, ptr %311, i32 0, i32 14
  store i64 %310, ptr %312, align 8, !tbaa !26
  %313 = load ptr, ptr %4, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.OggVorbis_File, ptr %313, i32 0, i32 18
  %315 = load i64, ptr %21, align 8, !tbaa !9
  %316 = trunc i64 %315 to i32
  %317 = call i32 @ogg_stream_reset_serialno(ptr noundef %314, i32 noundef %316)
  %318 = load i64, ptr %21, align 8, !tbaa !9
  %319 = trunc i64 %318 to i32
  %320 = call i32 @ogg_stream_reset_serialno(ptr noundef %6, i32 noundef %319)
  %321 = load ptr, ptr %4, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.OggVorbis_File, ptr %321, i32 0, i32 13
  store i32 3, ptr %322, align 8, !tbaa !11
  %323 = load i64, ptr %15, align 8, !tbaa !9
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.OggVorbis_File, ptr %324, i32 0, i32 7
  %326 = load ptr, ptr %325, align 8, !tbaa !39
  %327 = load i32, ptr %20, align 4, !tbaa !27
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i64, ptr %326, i64 %328
  %330 = load i64, ptr %329, align 8, !tbaa !9
  %331 = icmp sle i64 %323, %330
  %332 = zext i1 %331 to i32
  store i32 %332, ptr %14, align 4, !tbaa !27
  store i32 0, ptr %7, align 4
  br label %333

333:                                              ; preds = %306, %305
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #2
  %334 = load i32, ptr %7, align 4
  switch i32 %334, label %350 [
    i32 0, label %335
    i32 2, label %104
  ]

335:                                              ; preds = %333
  br label %336

336:                                              ; preds = %335, %270
  %337 = load ptr, ptr %4, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.OggVorbis_File, ptr %337, i32 0, i32 18
  %339 = call i32 @ogg_stream_pagein(ptr noundef %338, ptr noundef %8)
  %340 = call i32 @ogg_stream_pagein(ptr noundef %6, ptr noundef %8)
  %341 = call i32 @ogg_page_eos(ptr noundef %8)
  store i32 %341, ptr %13, align 4, !tbaa !27
  br label %104

342:                                              ; preds = %247, %241, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 48, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 32, ptr %8) #2
  %343 = call i32 @ogg_stream_clear(ptr noundef %6)
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.OggVorbis_File, ptr %344, i32 0, i32 16
  store double 0.000000e+00, ptr %345, align 8, !tbaa !40
  %346 = load ptr, ptr %4, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.OggVorbis_File, ptr %346, i32 0, i32 17
  store double 0.000000e+00, ptr %347, align 8, !tbaa !41
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %348

348:                                              ; preds = %342, %93, %42, %32, %26
  call void @llvm.lifetime.end.p0(i64 408, ptr %6) #2
  %349 = load i32, ptr %3, align 4
  ret i32 %349

350:                                              ; preds = %333, %230
  unreachable
}

; 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

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, !13, i64 128}
!12 = !{!"OggVorbis_File", !6, i64 0, !13, i64 8, !10, i64 16, !10, i64 24, !14, i64 32, !13, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !10, i64 120, !13, i64 128, !10, i64 136, !13, i64 144, !15, i64 152, !15, i64 160, !16, i64 168, !17, i64 576, !18, i64 720, !20, i64 912}
!13 = !{!"int", !7, i64 0}
!14 = !{!"", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28}
!15 = !{!"double", !7, i64 0}
!16 = !{!"", !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, !13, i64 364, !13, i64 368, !13, i64 372, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400}
!17 = !{!"vorbis_dsp_state", !13, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 36, !13, i64 40, !13, i64 44, !13, 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}
!18 = !{!"vorbis_block", !6, i64 0, !19, i64 8, !10, i64 48, !10, i64 56, !10, i64 64, !13, i64 72, !13, i64 76, !13, 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}
!19 = !{!"", !10, i64 0, !13, i64 8, !6, i64 16, !6, i64 24, !10, i64 32}
!20 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!21 = !{!12, !13, i64 8}
!22 = !{!12, !10, i64 24}
!23 = !{!12, !6, i64 72}
!24 = !{!12, !13, i64 144}
!25 = !{!12, !10, i64 120}
!26 = !{!12, !10, i64 136}
!27 = !{!13, !13, i64 0}
!28 = !{!12, !6, i64 104}
!29 = !{!30, !6, i64 48}
!30 = !{!"vorbis_info", !13, i64 0, !13, i64 4, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !6, i64 48}
!31 = !{!32, !10, i64 32}
!32 = !{!"", !6, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!33 = !{!12, !6, i64 96}
!34 = distinct !{!34, !35}
!35 = !{!"llvm.loop.mustprogress"}
!36 = !{!12, !13, i64 64}
!37 = !{!12, !6, i64 88}
!38 = distinct !{!38, !35}
!39 = !{!12, !6, i64 80}
!40 = !{!12, !15, i64 152}
!41 = !{!12, !15, 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_stream_state = type { ptr, i64, i64, i64, ptr, ptr, i64, i64, i64, i64, [282 x i8], i32, i32, i32, i64, i64, i64, i64 }
%struct.ogg_page = type { ptr, i64, ptr, i64 }
%struct.ogg_packet = type { ptr, i64, i64, i64, i64, i64 }
%struct.vorbis_info = type { i32, i32, i64, i64, i64, i64, i64, ptr }

; 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_bos(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_eos(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_init(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_stream_clear(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(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 @vorbis_synthesis_restart(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i64 @vorbis_packet_blocksize(ptr noundef, 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
define dso_local range(i32 -138, 1) i32 @ov_raw_seek(ptr noundef %0, i64 noundef %1) local_unnamed_addr #1 {
  %3 = alloca %struct.ogg_stream_state, align 8
  %4 = alloca %struct.ogg_page, align 8
  %5 = alloca %struct.ogg_packet, align 8
  call void @llvm.lifetime.start.p0(i64 408, ptr nonnull %3) #4
  %6 = getelementptr inbounds i8, ptr %0, i64 128
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %8 = icmp slt i32 %7, 2
  br i1 %8, label %160, label %9

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

12:                                               ; preds = %9
  %13 = icmp slt i64 %1, 0
  br i1 %13, label %160, label %14

14:                                               ; preds = %12
  %15 = getelementptr inbounds i8, ptr %0, i64 24
  %16 = load i64, ptr %15, align 8, !tbaa !20
  %17 = icmp slt i64 %16, %1
  br i1 %17, label %160, label %18

18:                                               ; preds = %14
  %.not108 = icmp eq i32 %7, 2
  br i1 %.not108, label %32, label %19

19:                                               ; preds = %18
  %20 = getelementptr inbounds i8, ptr %0, i64 72
  %21 = load ptr, ptr %20, align 8, !tbaa !21
  %22 = getelementptr inbounds i8, ptr %0, i64 144
  %23 = load i32, ptr %22, align 8, !tbaa !22
  %24 = sext i32 %23 to i64
  %25 = getelementptr inbounds i64, ptr %21, i64 %24
  %26 = load i64, ptr %25, align 8, !tbaa !23
  %27 = icmp sgt i64 %26, %1
  br i1 %27, label %31, label %28

28:                                               ; preds = %19
  %29 = getelementptr i8, ptr %25, i64 8
  %30 = load i64, ptr %29, align 8, !tbaa !23
  %.not109 = icmp sgt i64 %30, %1
  br i1 %.not109, label %32, label %31

31:                                               ; preds = %28, %19
  tail call void @_decode_clear(ptr noundef nonnull %0)
  br label %32

32:                                               ; preds = %28, %31, %18
  %33 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 -1, ptr %33, align 8, !tbaa !24
  %34 = getelementptr inbounds i8, ptr %0, i64 168
  %35 = getelementptr inbounds i8, ptr %0, i64 136
  %36 = load i64, ptr %35, align 8, !tbaa !25
  %37 = trunc i64 %36 to i32
  %38 = tail call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %34, i32 noundef %37)
  %39 = getelementptr inbounds i8, ptr %0, i64 576
  %40 = tail call i32 @vorbis_synthesis_restart(ptr noundef nonnull %39)
  %41 = tail call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %1)
  %.not110 = icmp eq i32 %41, 0
  br i1 %.not110, label %43, label %42

42:                                               ; preds = %32
  store i64 -1, ptr %33, align 8, !tbaa !24
  tail call void @_decode_clear(ptr noundef nonnull %0)
  br label %160

43:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #4
  %44 = load i64, ptr %35, align 8, !tbaa !25
  %45 = trunc i64 %44 to i32
  %46 = call i32 @ogg_stream_init(ptr noundef nonnull %3, i32 noundef %45)
  %47 = call i32 @ogg_stream_reset(ptr noundef nonnull %3)
  %48 = getelementptr inbounds i8, ptr %0, i64 104
  %49 = getelementptr inbounds i8, ptr %0, i64 144
  %50 = getelementptr inbounds i8, ptr %0, i64 88
  %51 = getelementptr inbounds i8, ptr %0, i64 64
  %52 = getelementptr inbounds i8, ptr %0, i64 80
  %53 = getelementptr inbounds i8, ptr %5, i64 32
  br label %.outer

.outer:                                           ; preds = %83, %43
  %.0100.ph = phi i32 [ %.1101, %83 ], [ 0, %43 ]
  %.098.ph = phi i32 [ %.098.ph130, %83 ], [ 0, %43 ]
  %.095.ph = phi i32 [ %.095.ph131, %83 ], [ 0, %43 ]
  %.093.ph = phi i32 [ %.099, %83 ], [ 0, %43 ]
  br label %.outer129

.outer129:                                        ; preds = %.outer, %.loopexit
  %.098.ph130 = phi i32 [ %.098.ph, %.outer ], [ %157, %.loopexit ]
  %.095.ph131 = phi i32 [ %.095.ph, %.outer ], [ %.297, %.loopexit ]
  %.093.ph132 = phi i32 [ %.093.ph, %.outer ], [ 0, %.loopexit ]
  br label %54

54:                                               ; preds = %.outer129, %._crit_edge
  %.093 = phi i32 [ 0, %._crit_edge ], [ %.093.ph132, %.outer129 ]
  %55 = load i32, ptr %6, align 8, !tbaa !5
  %56 = icmp sgt i32 %55, 2
  br i1 %56, label %57, label %.thread

57:                                               ; preds = %54
  %58 = call i32 @ogg_stream_packetout(ptr noundef nonnull %3, ptr noundef nonnull %5)
  %59 = icmp sgt i32 %58, 0
  br i1 %59, label %60, label %.thread

60:                                               ; preds = %57
  %61 = load ptr, ptr %48, align 8, !tbaa !26
  %62 = load i32, ptr %49, align 8, !tbaa !22
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds %struct.vorbis_info, ptr %61, i64 %63
  %65 = getelementptr inbounds i8, ptr %64, i64 48
  %66 = load ptr, ptr %65, align 8, !tbaa !27
  %.not111 = icmp eq ptr %66, null
  br i1 %.not111, label %115, label %67

67:                                               ; preds = %60
  %68 = call i64 @vorbis_packet_blocksize(ptr noundef nonnull %64, ptr noundef nonnull %5)
  %69 = trunc i64 %68 to i32
  %70 = icmp slt i32 %69, 0
  br i1 %70, label %71, label %73

71:                                               ; preds = %67
  %72 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null)
  br label %83

73:                                               ; preds = %67
  %74 = icmp eq i32 %.098.ph130, 0
  %75 = icmp ne i32 %.095.ph131, 0
  %or.cond = select i1 %74, i1 true, i1 %75
  br i1 %or.cond, label %78, label %76

76:                                               ; preds = %73
  %77 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null)
  br label %83

78:                                               ; preds = %73
  %.not112 = icmp eq i32 %.093, 0
  br i1 %.not112, label %83, label %79

79:                                               ; preds = %78
  %80 = add nuw nsw i32 %.093, %69
  %81 = lshr i32 %80, 2
  %82 = add nsw i32 %81, %.0100.ph
  br label %83

83:                                               ; preds = %76, %79, %78, %71
  %.1101 = phi i32 [ %.0100.ph, %71 ], [ %82, %79 ], [ %.0100.ph, %78 ], [ %.0100.ph, %76 ]
  %.099 = phi i32 [ 0, %71 ], [ %69, %79 ], [ %69, %78 ], [ %69, %76 ]
  %84 = load i64, ptr %53, align 8, !tbaa !29
  %.not113 = icmp eq i64 %84, -1
  br i1 %.not113, label %.outer, label %85

85:                                               ; preds = %83
  %86 = load i32, ptr %49, align 8, !tbaa !22
  %87 = getelementptr inbounds i8, ptr %0, i64 96
  %88 = load ptr, ptr %87, align 8, !tbaa !31
  %89 = shl nsw i32 %86, 1
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds i64, ptr %88, i64 %90
  %92 = load i64, ptr %91, align 8, !tbaa !23
  %93 = sub nsw i64 %84, %92
  %spec.store.select = call i64 @llvm.smax.i64(i64 %93, i64 0)
  %94 = icmp sgt i32 %86, 0
  br i1 %94, label %.lr.ph157.preheader, label %.thread120

.lr.ph157.preheader:                              ; preds = %85
  %wide.trip.count178 = zext nneg i32 %86 to i64
  %min.iters.check = icmp ult i32 %86, 5
  br i1 %min.iters.check, label %.lr.ph157.preheader217, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph157.preheader
  %n.mod.vf = and i64 %wide.trip.count178, 3
  %95 = icmp eq i64 %n.mod.vf, 0
  %96 = select i1 %95, i64 4, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count178, %96
  %97 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %spec.store.select, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %97, %vector.ph ], [ %104, %vector.body ]
  %vec.phi214 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %105, %vector.body ]
  %98 = shl nuw nsw i64 %index, 1
  %99 = shl i64 %index, 1
  %100 = or disjoint i64 %98, 1
  %101 = or disjoint i64 %99, 5
  %102 = getelementptr inbounds i64, ptr %88, i64 %100
  %103 = getelementptr inbounds i64, ptr %88, i64 %101
  %wide.vec = load <4 x i64>, ptr %102, align 8, !tbaa !23
  %wide.vec215 = load <4 x i64>, ptr %103, align 8, !tbaa !23
  %strided.vec = shufflevector <4 x i64> %wide.vec, <4 x i64> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec216 = shufflevector <4 x i64> %wide.vec215, <4 x i64> poison, <2 x i32> <i32 0, i32 2>
  %104 = add <2 x i64> %strided.vec, %vec.phi
  %105 = add <2 x i64> %strided.vec216, %vec.phi214
  %index.next = add nuw i64 %index, 4
  %106 = icmp eq i64 %index.next, %n.vec
  br i1 %106, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %105, %104
  %107 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  br label %.lr.ph157.preheader217

.lr.ph157.preheader217:                           ; preds = %middle.block, %.lr.ph157.preheader
  %indvars.iv175.ph = phi i64 [ 0, %.lr.ph157.preheader ], [ %n.vec, %middle.block ]
  %.090155.ph = phi i64 [ %spec.store.select, %.lr.ph157.preheader ], [ %107, %middle.block ]
  br label %.lr.ph157

.lr.ph157:                                        ; preds = %.lr.ph157.preheader217, %.lr.ph157
  %indvars.iv175 = phi i64 [ %indvars.iv.next176, %.lr.ph157 ], [ %indvars.iv175.ph, %.lr.ph157.preheader217 ]
  %.090155 = phi i64 [ %112, %.lr.ph157 ], [ %.090155.ph, %.lr.ph157.preheader217 ]
  %108 = shl nuw nsw i64 %indvars.iv175, 1
  %109 = or disjoint i64 %108, 1
  %110 = getelementptr inbounds i64, ptr %88, i64 %109
  %111 = load i64, ptr %110, align 8, !tbaa !23
  %112 = add nsw i64 %111, %.090155
  %indvars.iv.next176 = add nuw nsw i64 %indvars.iv175, 1
  %exitcond179.not = icmp eq i64 %indvars.iv.next176, %wide.trip.count178
  br i1 %exitcond179.not, label %.thread120, label %.lr.ph157, !llvm.loop !36

.thread120:                                       ; preds = %.lr.ph157, %85
  %.090.lcssa = phi i64 [ %spec.store.select, %85 ], [ %112, %.lr.ph157 ]
  %113 = sext i32 %.1101 to i64
  %114 = sub nsw i64 %.090.lcssa, %113
  %spec.select = call i64 @llvm.smax.i64(i64 %114, i64 0)
  br label %.loopexit197

115:                                              ; preds = %60
  %116 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null)
  br label %.thread

.thread:                                          ; preds = %57, %115, %54
  %.not114 = icmp eq i32 %.093, 0
  br i1 %.not114, label %117, label %.loopexit197

117:                                              ; preds = %.thread
  %118 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef -1)
  %119 = icmp slt i64 %118, 0
  br i1 %119, label %120, label %122

120:                                              ; preds = %117
  %121 = call i64 @ov_pcm_total(ptr noundef nonnull %0, i32 noundef -1)
  br label %.loopexit197

122:                                              ; preds = %117
  %123 = load i32, ptr %6, align 8, !tbaa !5
  %124 = icmp sgt i32 %123, 2
  br i1 %124, label %125, label %.thread124

125:                                              ; preds = %122
  %126 = load i64, ptr %35, align 8, !tbaa !25
  %127 = call i32 @ogg_page_serialno(ptr noundef nonnull %4)
  %128 = sext i32 %127 to i64
  %.not115 = icmp eq i64 %126, %128
  br i1 %.not115, label %133, label %129

129:                                              ; preds = %125
  %130 = call i32 @ogg_page_bos(ptr noundef nonnull %4)
  %.not116 = icmp eq i32 %130, 0
  br i1 %.not116, label %133, label %131

131:                                              ; preds = %129
  call void @_decode_clear(ptr noundef nonnull %0)
  %132 = call i32 @ogg_stream_clear(ptr noundef nonnull %3)
  br label %133

133:                                              ; preds = %125, %131, %129
  %.pr = load i32, ptr %6, align 8, !tbaa !5
  %134 = icmp slt i32 %.pr, 3
  br i1 %134, label %.thread124, label %.loopexit

.thread124:                                       ; preds = %122, %133
  %135 = call i32 @ogg_page_serialno(ptr noundef nonnull %4)
  %136 = sext i32 %135 to i64
  %137 = load i32, ptr %51, align 8, !tbaa !37
  %138 = icmp sgt i32 %137, 0
  br i1 %138, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.thread124
  %139 = load ptr, ptr %50, align 8, !tbaa !38
  %wide.trip.count = zext nneg i32 %137 to i64
  br label %140

140:                                              ; preds = %.lr.ph, %144
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %144 ]
  %141 = getelementptr inbounds i64, ptr %139, i64 %indvars.iv
  %142 = load i64, ptr %141, align 8, !tbaa !23
  %143 = icmp eq i64 %142, %136
  br i1 %143, label %._crit_edge.loopexit.split.loop.exit, label %144

144:                                              ; preds = %140
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %140, !llvm.loop !39

._crit_edge.loopexit.split.loop.exit:             ; preds = %140
  %145 = trunc nuw nsw i64 %indvars.iv to i32
  br label %._crit_edge

._crit_edge:                                      ; preds = %144, %._crit_edge.loopexit.split.loop.exit, %.thread124
  %.089.lcssa = phi i32 [ 0, %.thread124 ], [ %145, %._crit_edge.loopexit.split.loop.exit ], [ %137, %144 ]
  %146 = icmp eq i32 %.089.lcssa, %137
  br i1 %146, label %54, label %.thread125

.thread125:                                       ; preds = %._crit_edge
  store i32 %.089.lcssa, ptr %49, align 8, !tbaa !22
  store i64 %136, ptr %35, align 8, !tbaa !25
  %147 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %34, i32 noundef %135)
  %148 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %3, i32 noundef %135)
  store i32 3, ptr %6, align 8, !tbaa !5
  %149 = load ptr, ptr %52, align 8, !tbaa !40
  %150 = zext nneg i32 %.089.lcssa to i64
  %151 = getelementptr inbounds i64, ptr %149, i64 %150
  %152 = load i64, ptr %151, align 8, !tbaa !23
  %153 = icmp sle i64 %118, %152
  %154 = zext i1 %153 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %133, %.thread125
  %.297 = phi i32 [ %154, %.thread125 ], [ %.095.ph131, %133 ]
  %155 = call i32 @ogg_stream_pagein(ptr noundef nonnull %34, ptr noundef nonnull %4)
  %156 = call i32 @ogg_stream_pagein(ptr noundef nonnull %3, ptr noundef nonnull %4)
  %157 = call i32 @ogg_page_eos(ptr noundef nonnull %4)
  br label %.outer129

.loopexit197:                                     ; preds = %.thread, %.thread120, %120
  %spec.select.sink = phi i64 [ %spec.select, %.thread120 ], [ %121, %120 ], [ -1, %.thread ]
  store i64 %spec.select.sink, ptr %33, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #4
  %158 = call i32 @ogg_stream_clear(ptr noundef nonnull %3)
  %159 = getelementptr inbounds i8, ptr %0, i64 152
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %159, i8 0, i64 16, i1 false)
  br label %160

160:                                              ; preds = %12, %14, %9, %2, %.loopexit197, %42
  %.0 = phi i32 [ -137, %42 ], [ 0, %.loopexit197 ], [ -131, %2 ], [ -138, %9 ], [ -131, %14 ], [ -131, %12 ]
  call void @llvm.lifetime.end.p0(i64 408, ptr nonnull %3) #4
  ret i32 %.0
}

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #2

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, !11, i64 24}
!21 = !{!6, !7, i64 72}
!22 = !{!6, !10, i64 144}
!23 = !{!11, !11, i64 0}
!24 = !{!6, !11, i64 120}
!25 = !{!6, !11, i64 136}
!26 = !{!6, !7, i64 104}
!27 = !{!28, !7, i64 48}
!28 = !{!"vorbis_info", !10, i64 0, !10, i64 4, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !7, i64 48}
!29 = !{!30, !11, i64 32}
!30 = !{!"", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!31 = !{!6, !7, i64 96}
!32 = distinct !{!32, !33, !34, !35}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!"llvm.loop.isvectorized", i32 1}
!35 = !{!"llvm.loop.unroll.runtime.disable"}
!36 = distinct !{!36, !33, !35, !34}
!37 = !{!6, !10, i64 64}
!38 = !{!6, !7, i64 88}
!39 = distinct !{!39, !33}
!40 = !{!6, !7, i64 80}


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