; LLVM IR from modlfo/AudioEngine :: AudioEngine/JuceLibraryCode/modules/juce_audio_formats/codecs/oggvorbis (seek)

; 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 }

declare i32 @ogg_stream_clear(ptr noundef) #0

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

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

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

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

27:                                               ; preds = %2
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %352

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

33:                                               ; preds = %28
  store i32 -138, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %352

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

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

43:                                               ; preds = %37, %34
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %352

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

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

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

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

76:                                               ; preds = %74, %61
  br label %77

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

95:                                               ; preds = %77
  br label %347

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

103:                                              ; preds = %335, %332, %229, %96
  br label %104

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

109:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %110 = call i32 @ogg_stream_packetout(ptr noundef %6, ptr noundef %10)
  store i32 %110, ptr %17, align 4, !tbaa !27
  %111 = load i32, ptr %17, align 4, !tbaa !27
  %112 = icmp sgt i32 %111, 0
  br i1 %112, label %113, label %228

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

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

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

142:                                              ; preds = %125
  %143 = load i32, ptr %14, align 4, !tbaa !27
  %144 = icmp ne i32 %143, 0
  br i1 %144, label %145, label %152

145:                                              ; preds = %142
  %146 = load i32, ptr %15, align 4, !tbaa !27
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %152, label %148

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

152:                                              ; preds = %145, %142
  %153 = load i32, ptr %11, align 4, !tbaa !27
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %162

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

162:                                              ; preds = %155, %152
  br label %163

163:                                              ; preds = %162, %148
  br label %164

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

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

185:                                              ; preds = %168
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %186

186:                                              ; preds = %185, %168
  store i32 0, ptr %18, align 4, !tbaa !27
  br label %187

187:                                              ; preds = %203, %186
  %188 = load i32, ptr %18, align 4, !tbaa !27
  %189 = load i32, ptr %19, align 4, !tbaa !27
  %190 = icmp slt i32 %188, %189
  br i1 %190, label %191, label %206

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

203:                                              ; preds = %191
  %204 = load i32, ptr %18, align 4, !tbaa !27
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %18, align 4, !tbaa !27
  br label %187, !llvm.loop !34

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

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

220:                                              ; preds = %217, %206
  store i32 4, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  br label %229

221:                                              ; preds = %164
  %222 = load i32, ptr %13, align 4, !tbaa !27
  store i32 %222, ptr %11, align 4, !tbaa !27
  store i32 3, ptr %8, align 4
  br label %229

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

227:                                              ; preds = %223
  br label %228

228:                                              ; preds = %227, %109
  store i32 0, ptr %8, align 4
  br label %229

229:                                              ; preds = %228, %221, %220
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  %230 = load i32, ptr %8, align 4
  switch i32 %230, label %354 [
    i32 0, label %231
    i32 4, label %341
    i32 3, label %103
  ]

231:                                              ; preds = %229
  br label %232

232:                                              ; preds = %231, %104
  %233 = load i32, ptr %11, align 4, !tbaa !27
  %234 = icmp ne i32 %233, 0
  br i1 %234, label %246, label %235

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

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

245:                                              ; preds = %235
  br label %249

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

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

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

261:                                              ; preds = %254
  %262 = call i32 @ogg_page_bos(ptr noundef %9)
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %267

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

267:                                              ; preds = %264, %261
  br label %268

268:                                              ; preds = %267, %254
  br label %269

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

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

277:                                              ; preds = %295, %274
  %278 = load i32, ptr %21, align 4, !tbaa !27
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.OggVorbis_File, ptr %279, i32 0, i32 5
  %281 = load i32, ptr %280, align 8, !tbaa !36
  %282 = icmp slt i32 %278, %281
  br i1 %282, label %283, label %298

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

293:                                              ; preds = %283
  br label %298

294:                                              ; preds = %283
  br label %295

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

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

304:                                              ; preds = %298
  store i32 3, ptr %8, align 4
  br label %332

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

332:                                              ; preds = %305, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  %333 = load i32, ptr %8, align 4
  switch i32 %333, label %354 [
    i32 0, label %334
    i32 3, label %103
  ]

334:                                              ; preds = %332
  br label %335

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

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

347:                                              ; preds = %95
  %348 = load ptr, ptr %4, align 8, !tbaa !5
  %349 = getelementptr inbounds %struct.OggVorbis_File, ptr %348, i32 0, i32 12
  store i64 -1, ptr %349, align 8, !tbaa !25
  %350 = call i32 @ogg_stream_clear(ptr noundef %6)
  %351 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %351)
  store i32 -137, ptr %3, align 4
  store i32 1, ptr %8, align 4
  br label %352

352:                                              ; preds = %347, %341, %43, %33, %27
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 408, ptr %6) #3
  %353 = load i32, ptr %3, align 4
  ret i32 %353

354:                                              ; preds = %332, %229
  unreachable
}

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

declare i32 @ogg_stream_reset_serialno(ptr noundef, i32 noundef) #0

declare i32 @vorbis_synthesis_restart(ptr noundef) #0

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

declare i32 @ogg_stream_init(ptr noundef, i32 noundef) #0

declare i32 @ogg_stream_reset(ptr noundef) #0

declare i32 @ogg_stream_packetout(ptr noundef, ptr noundef) #0

declare i64 @vorbis_packet_blocksize(ptr noundef, ptr noundef) #0

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

declare i32 @ogg_page_serialno(ptr noundef) #0

declare i32 @ogg_page_bos(ptr noundef) #0

declare i32 @ogg_stream_pagein(ptr noundef, ptr noundef) #0

declare i32 @ogg_page_eos(ptr noundef) #0

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind 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 #3 = { 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 }

declare i32 @ogg_stream_clear(ptr noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -138, 1) i32 @ov_raw_seek(ptr noundef %0, i64 noundef %1) local_unnamed_addr #2 {
  %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) #5
  %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 %161, 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 %161, label %12

12:                                               ; preds = %9
  %13 = icmp slt i64 %1, 0
  br i1 %13, label %161, 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 %161, label %18

18:                                               ; preds = %14
  %.not109 = icmp eq i32 %7, 2
  br i1 %.not109, 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
  %.not110 = icmp sgt i64 %30, %1
  br i1 %.not110, 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) #5
  %39 = getelementptr inbounds i8, ptr %0, i64 576
  %40 = tail call i32 @vorbis_synthesis_restart(ptr noundef nonnull %39) #5
  %41 = tail call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %1)
  %.not111 = icmp eq i32 %41, 0
  br i1 %.not111, label %42, label %159

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

.outer:                                           ; preds = %82, %42
  %.0101.ph = phi i32 [ %.1102, %82 ], [ 0, %42 ]
  %.099.ph = phi i32 [ %.099.ph131, %82 ], [ 0, %42 ]
  %.096.ph = phi i32 [ %.096.ph132, %82 ], [ 0, %42 ]
  %.094.ph = phi i32 [ %.0100, %82 ], [ 0, %42 ]
  br label %.outer130

.outer130:                                        ; preds = %.outer, %.loopexit
  %.099.ph131 = phi i32 [ %.099.ph, %.outer ], [ %156, %.loopexit ]
  %.096.ph132 = phi i32 [ %.096.ph, %.outer ], [ %.298, %.loopexit ]
  %.094.ph133 = phi i32 [ %.094.ph, %.outer ], [ 0, %.loopexit ]
  br label %53

53:                                               ; preds = %.outer130, %._crit_edge
  %.094 = phi i32 [ 0, %._crit_edge ], [ %.094.ph133, %.outer130 ]
  %54 = load i32, ptr %6, align 8, !tbaa !5
  %55 = icmp sgt i32 %54, 2
  br i1 %55, label %56, label %.thread

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

59:                                               ; preds = %56
  %60 = load ptr, ptr %47, align 8, !tbaa !26
  %61 = load i32, ptr %48, align 8, !tbaa !22
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds %struct.vorbis_info, ptr %60, i64 %62
  %64 = getelementptr inbounds i8, ptr %63, i64 48
  %65 = load ptr, ptr %64, align 8, !tbaa !27
  %.not112 = icmp eq ptr %65, null
  br i1 %.not112, label %114, label %66

66:                                               ; preds = %59
  %67 = call i64 @vorbis_packet_blocksize(ptr noundef nonnull %63, ptr noundef nonnull %5) #5
  %68 = trunc i64 %67 to i32
  %69 = icmp slt i32 %68, 0
  br i1 %69, label %70, label %72

70:                                               ; preds = %66
  %71 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null) #5
  br label %82

72:                                               ; preds = %66
  %73 = icmp eq i32 %.099.ph131, 0
  %74 = icmp ne i32 %.096.ph132, 0
  %or.cond = select i1 %73, i1 true, i1 %74
  br i1 %or.cond, label %77, label %75

75:                                               ; preds = %72
  %76 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null) #5
  br label %82

77:                                               ; preds = %72
  %.not113 = icmp eq i32 %.094, 0
  br i1 %.not113, label %82, label %78

78:                                               ; preds = %77
  %79 = add nuw nsw i32 %.094, %68
  %80 = lshr i32 %79, 2
  %81 = add nsw i32 %80, %.0101.ph
  br label %82

82:                                               ; preds = %75, %78, %77, %70
  %.1102 = phi i32 [ %.0101.ph, %70 ], [ %81, %78 ], [ %.0101.ph, %77 ], [ %.0101.ph, %75 ]
  %.0100 = phi i32 [ 0, %70 ], [ %68, %78 ], [ %68, %77 ], [ %68, %75 ]
  %83 = load i64, ptr %52, align 8, !tbaa !29
  %.not114 = icmp eq i64 %83, -1
  br i1 %.not114, label %.outer, label %84

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

.lr.ph158.preheader:                              ; preds = %84
  %wide.trip.count179 = zext nneg i32 %85 to i64
  %min.iters.check = icmp ult i32 %85, 5
  br i1 %min.iters.check, label %.lr.ph158.preheader218, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph158.preheader
  %n.mod.vf = and i64 %wide.trip.count179, 3
  %94 = icmp eq i64 %n.mod.vf, 0
  %95 = select i1 %94, i64 4, i64 %n.mod.vf
  %n.vec = sub nsw i64 %wide.trip.count179, %95
  %96 = 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> [ %96, %vector.ph ], [ %103, %vector.body ]
  %vec.phi215 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %104, %vector.body ]
  %97 = shl nuw nsw i64 %index, 1
  %98 = shl i64 %index, 1
  %99 = or disjoint i64 %97, 1
  %100 = or disjoint i64 %98, 5
  %101 = getelementptr inbounds i64, ptr %87, i64 %99
  %102 = getelementptr inbounds i64, ptr %87, i64 %100
  %wide.vec = load <4 x i64>, ptr %101, align 8, !tbaa !23
  %wide.vec216 = load <4 x i64>, ptr %102, align 8, !tbaa !23
  %strided.vec = shufflevector <4 x i64> %wide.vec, <4 x i64> poison, <2 x i32> <i32 0, i32 2>
  %strided.vec217 = shufflevector <4 x i64> %wide.vec216, <4 x i64> poison, <2 x i32> <i32 0, i32 2>
  %103 = add <2 x i64> %strided.vec, %vec.phi
  %104 = add <2 x i64> %strided.vec217, %vec.phi215
  %index.next = add nuw i64 %index, 4
  %105 = icmp eq i64 %index.next, %n.vec
  br i1 %105, label %middle.block, label %vector.body, !llvm.loop !32

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %104, %103
  %106 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  br label %.lr.ph158.preheader218

.lr.ph158.preheader218:                           ; preds = %middle.block, %.lr.ph158.preheader
  %indvars.iv176.ph = phi i64 [ 0, %.lr.ph158.preheader ], [ %n.vec, %middle.block ]
  %.091156.ph = phi i64 [ %spec.store.select, %.lr.ph158.preheader ], [ %106, %middle.block ]
  br label %.lr.ph158

.lr.ph158:                                        ; preds = %.lr.ph158.preheader218, %.lr.ph158
  %indvars.iv176 = phi i64 [ %indvars.iv.next177, %.lr.ph158 ], [ %indvars.iv176.ph, %.lr.ph158.preheader218 ]
  %.091156 = phi i64 [ %111, %.lr.ph158 ], [ %.091156.ph, %.lr.ph158.preheader218 ]
  %107 = shl nuw nsw i64 %indvars.iv176, 1
  %108 = or disjoint i64 %107, 1
  %109 = getelementptr inbounds i64, ptr %87, i64 %108
  %110 = load i64, ptr %109, align 8, !tbaa !23
  %111 = add nsw i64 %110, %.091156
  %indvars.iv.next177 = add nuw nsw i64 %indvars.iv176, 1
  %exitcond180.not = icmp eq i64 %indvars.iv.next177, %wide.trip.count179
  br i1 %exitcond180.not, label %.thread121, label %.lr.ph158, !llvm.loop !36

.thread121:                                       ; preds = %.lr.ph158, %84
  %.091.lcssa = phi i64 [ %spec.store.select, %84 ], [ %111, %.lr.ph158 ]
  %112 = sext i32 %.1102 to i64
  %113 = sub nsw i64 %.091.lcssa, %112
  %spec.select = call i64 @llvm.smax.i64(i64 %113, i64 0)
  br label %.loopexit198

114:                                              ; preds = %59
  %115 = call i32 @ogg_stream_packetout(ptr noundef nonnull %34, ptr noundef null) #5
  br label %.thread

.thread:                                          ; preds = %56, %114, %53
  %.not115 = icmp eq i32 %.094, 0
  br i1 %.not115, label %116, label %.loopexit198

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

119:                                              ; preds = %116
  %120 = call i64 @ov_pcm_total(ptr noundef nonnull %0, i32 noundef -1)
  br label %.loopexit198

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

124:                                              ; preds = %121
  %125 = load i64, ptr %35, align 8, !tbaa !25
  %126 = call i32 @ogg_page_serialno(ptr noundef nonnull %4) #5
  %127 = sext i32 %126 to i64
  %.not116 = icmp eq i64 %125, %127
  br i1 %.not116, label %132, label %128

128:                                              ; preds = %124
  %129 = call i32 @ogg_page_bos(ptr noundef nonnull %4) #5
  %.not117 = icmp eq i32 %129, 0
  br i1 %.not117, label %132, label %130

130:                                              ; preds = %128
  call void @_decode_clear(ptr noundef nonnull %0)
  %131 = call i32 @ogg_stream_clear(ptr noundef nonnull %3) #5
  br label %132

132:                                              ; preds = %124, %130, %128
  %.pr = load i32, ptr %6, align 8, !tbaa !5
  %133 = icmp slt i32 %.pr, 3
  br i1 %133, label %.thread125, label %.loopexit

.thread125:                                       ; preds = %121, %132
  %134 = call i32 @ogg_page_serialno(ptr noundef nonnull %4) #5
  %135 = sext i32 %134 to i64
  %136 = load i32, ptr %50, align 8, !tbaa !37
  %137 = icmp sgt i32 %136, 0
  br i1 %137, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.thread125
  %138 = load ptr, ptr %49, align 8, !tbaa !38
  %wide.trip.count = zext nneg i32 %136 to i64
  br label %139

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

143:                                              ; preds = %139
  %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 %139, !llvm.loop !39

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

._crit_edge:                                      ; preds = %143, %._crit_edge.loopexit.split.loop.exit, %.thread125
  %.090.lcssa = phi i32 [ 0, %.thread125 ], [ %144, %._crit_edge.loopexit.split.loop.exit ], [ %136, %143 ]
  %145 = icmp eq i32 %.090.lcssa, %136
  br i1 %145, label %53, label %.thread126

.thread126:                                       ; preds = %._crit_edge
  store i32 %.090.lcssa, ptr %48, align 8, !tbaa !22
  store i64 %135, ptr %35, align 8, !tbaa !25
  %146 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %34, i32 noundef %134) #5
  %147 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %3, i32 noundef %134) #5
  store i32 3, ptr %6, align 8, !tbaa !5
  %148 = load ptr, ptr %51, align 8, !tbaa !40
  %149 = zext nneg i32 %.090.lcssa to i64
  %150 = getelementptr inbounds i64, ptr %148, i64 %149
  %151 = load i64, ptr %150, align 8, !tbaa !23
  %152 = icmp sle i64 %117, %151
  %153 = zext i1 %152 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %132, %.thread126
  %.298 = phi i32 [ %153, %.thread126 ], [ %.096.ph132, %132 ]
  %154 = call i32 @ogg_stream_pagein(ptr noundef nonnull %34, ptr noundef nonnull %4) #5
  %155 = call i32 @ogg_stream_pagein(ptr noundef nonnull %3, ptr noundef nonnull %4) #5
  %156 = call i32 @ogg_page_eos(ptr noundef nonnull %4) #5
  br label %.outer130

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

159:                                              ; preds = %32
  store i64 -1, ptr %33, align 8, !tbaa !24
  %160 = call i32 @ogg_stream_clear(ptr noundef nonnull %3) #5
  call void @_decode_clear(ptr noundef nonnull %0)
  br label %161

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

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

declare i32 @ogg_stream_reset_serialno(ptr noundef, i32 noundef) local_unnamed_addr #0

declare i32 @vorbis_synthesis_restart(ptr noundef) local_unnamed_addr #0

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

declare i32 @ogg_stream_init(ptr noundef, i32 noundef) local_unnamed_addr #0

declare i32 @ogg_stream_reset(ptr noundef) local_unnamed_addr #0

declare i32 @ogg_stream_packetout(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i64 @vorbis_packet_blocksize(ptr noundef, ptr noundef) local_unnamed_addr #0

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

declare i32 @ogg_page_serialno(ptr noundef) local_unnamed_addr #0

declare i32 @ogg_page_bos(ptr noundef) local_unnamed_addr #0

declare i32 @ogg_stream_pagein(ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @ogg_page_eos(ptr noundef) local_unnamed_addr #0

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

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

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

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