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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.ogg_page = type { ptr, i64, ptr, i64 }
%struct.ogg_packet = type { ptr, i64, i64, i64, i64, i64 }
%struct.OggVorbis_File = type { ptr, i32, i64, i64, %struct.ogg_sync_state, i32, ptr, ptr, ptr, ptr, ptr, ptr, i64, i32, i64, i32, double, double, %struct.ogg_stream_state, %struct.vorbis_dsp_state, %struct.vorbis_block, %struct.ov_callbacks }
%struct.ogg_sync_state = type { ptr, i32, i32, i32, i32, i32, i32 }
%struct.ogg_stream_state = type { ptr, i64, i64, i64, ptr, ptr, i64, i64, i64, i64, [282 x i8], i32, i32, i32, i64, i64, i64, i64 }
%struct.vorbis_dsp_state = type { i32, ptr, ptr, ptr, i32, i32, i32, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, ptr }
%struct.vorbis_block = type { ptr, %struct.oggpack_buffer, i64, i64, i64, i32, i32, i32, i64, i64, ptr, ptr, i64, i64, i64, ptr, i64, i64, i64, i64, ptr }
%struct.oggpack_buffer = type { i64, i32, ptr, ptr, i64 }
%struct.ov_callbacks = type { ptr, ptr, ptr, ptr }

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

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

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

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

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

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

declare i32 @vorbis_synthesis_restart(ptr noundef) #2

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

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

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

declare i32 @ogg_page_serialno(ptr noundef) #2

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

; Function Attrs: nounwind uwtable
define dso_local i32 @ov_pcm_seek_page(ptr noundef %0, i64 noundef %1) #1 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i64, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca %struct.ogg_page, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca %struct.ogg_page, align 8
  %20 = alloca %struct.ogg_packet, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i64 %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  store i32 -1, ptr %6, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  store i64 0, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  %22 = call i64 @ov_pcm_total(ptr noundef %21, i32 noundef -1)
  store i64 %22, ptr %8, align 8, !tbaa !9
  %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 !13
  %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 %9, align 4
  br label %463

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 !22
  %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 %9, align 4
  br label %463

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

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

41:                                               ; preds = %37, %34
  store i32 -131, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %463

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

47:                                               ; preds = %67, %42
  %48 = load i32, ptr %6, align 4, !tbaa !11
  %49 = icmp sge i32 %48, 0
  br i1 %49, label %50, label %70

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

65:                                               ; preds = %50
  br label %70

66:                                               ; preds = %50
  br label %67

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

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

111:                                              ; preds = %291, %70
  %112 = load i64, ptr %11, align 8, !tbaa !9
  %113 = load i64, ptr %10, align 8, !tbaa !9
  %114 = icmp slt i64 %112, %113
  br i1 %114, label %115, label %292

115:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  %116 = load i64, ptr %10, align 8, !tbaa !9
  %117 = load i64, ptr %11, align 8, !tbaa !9
  %118 = sub nsw i64 %116, %117
  %119 = icmp slt i64 %118, 65536
  br i1 %119, label %120, label %122

120:                                              ; preds = %115
  %121 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %121, ptr %17, align 8, !tbaa !9
  br label %148

122:                                              ; preds = %115
  %123 = load i64, ptr %11, align 8, !tbaa !9
  %124 = load i64, ptr %14, align 8, !tbaa !9
  %125 = load i64, ptr %12, align 8, !tbaa !9
  %126 = sub nsw i64 %124, %125
  %127 = sitofp i64 %126 to double
  %128 = load i64, ptr %10, align 8, !tbaa !9
  %129 = load i64, ptr %11, align 8, !tbaa !9
  %130 = sub nsw i64 %128, %129
  %131 = sitofp i64 %130 to double
  %132 = fmul double %127, %131
  %133 = load i64, ptr %13, align 8, !tbaa !9
  %134 = load i64, ptr %12, align 8, !tbaa !9
  %135 = sub nsw i64 %133, %134
  %136 = sitofp i64 %135 to double
  %137 = fdiv double %132, %136
  %138 = fptosi double %137 to i64
  %139 = add nsw i64 %123, %138
  %140 = sub nsw i64 %139, 65536
  store i64 %140, ptr %17, align 8, !tbaa !9
  %141 = load i64, ptr %17, align 8, !tbaa !9
  %142 = load i64, ptr %11, align 8, !tbaa !9
  %143 = add nsw i64 %142, 65536
  %144 = icmp slt i64 %141, %143
  br i1 %144, label %145, label %147

145:                                              ; preds = %122
  %146 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %146, ptr %17, align 8, !tbaa !9
  br label %147

147:                                              ; preds = %145, %122
  br label %148

148:                                              ; preds = %147, %120
  %149 = load i64, ptr %17, align 8, !tbaa !9
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.OggVorbis_File, ptr %150, i32 0, i32 2
  %152 = load i64, ptr %151, align 8, !tbaa !28
  %153 = icmp ne i64 %149, %152
  br i1 %153, label %154, label %163

154:                                              ; preds = %148
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = load i64, ptr %17, align 8, !tbaa !9
  %157 = call i32 @_seek_helper(ptr noundef %155, i64 noundef %156)
  %158 = sext i32 %157 to i64
  store i64 %158, ptr %7, align 8, !tbaa !9
  %159 = load i64, ptr %7, align 8, !tbaa !9
  %160 = icmp ne i64 %159, 0
  br i1 %160, label %161, label %162

161:                                              ; preds = %154
  store i32 7, ptr %9, align 4
  br label %289

162:                                              ; preds = %154
  br label %163

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

164:                                              ; preds = %287, %284, %163
  %165 = load i64, ptr %11, align 8, !tbaa !9
  %166 = load i64, ptr %10, align 8, !tbaa !9
  %167 = icmp slt i64 %165, %166
  br i1 %167, label %168, label %288

168:                                              ; preds = %164
  %169 = load ptr, ptr %4, align 8, !tbaa !5
  %170 = load i64, ptr %10, align 8, !tbaa !9
  %171 = load ptr, ptr %4, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.OggVorbis_File, ptr %171, i32 0, i32 2
  %173 = load i64, ptr %172, align 8, !tbaa !28
  %174 = sub nsw i64 %170, %173
  %175 = call i64 @_get_next_page(ptr noundef %169, ptr noundef %16, i64 noundef %174)
  store i64 %175, ptr %7, align 8, !tbaa !9
  %176 = load i64, ptr %7, align 8, !tbaa !9
  %177 = icmp eq i64 %176, -128
  br i1 %177, label %178, label %179

178:                                              ; preds = %168
  store i32 7, ptr %9, align 4
  br label %289

179:                                              ; preds = %168
  %180 = load i64, ptr %7, align 8, !tbaa !9
  %181 = icmp slt i64 %180, 0
  br i1 %181, label %182, label %212

182:                                              ; preds = %179
  %183 = load i64, ptr %17, align 8, !tbaa !9
  %184 = load i64, ptr %11, align 8, !tbaa !9
  %185 = add nsw i64 %184, 1
  %186 = icmp sle i64 %183, %185
  br i1 %186, label %187, label %189

187:                                              ; preds = %182
  %188 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %188, ptr %10, align 8, !tbaa !9
  br label %211

189:                                              ; preds = %182
  %190 = load i64, ptr %17, align 8, !tbaa !9
  %191 = icmp eq i64 %190, 0
  br i1 %191, label %192, label %193

192:                                              ; preds = %189
  store i32 7, ptr %9, align 4
  br label %289

193:                                              ; preds = %189
  %194 = load i64, ptr %17, align 8, !tbaa !9
  %195 = sub nsw i64 %194, 65536
  store i64 %195, ptr %17, align 8, !tbaa !9
  %196 = load i64, ptr %17, align 8, !tbaa !9
  %197 = load i64, ptr %11, align 8, !tbaa !9
  %198 = icmp sle i64 %196, %197
  br i1 %198, label %199, label %202

199:                                              ; preds = %193
  %200 = load i64, ptr %11, align 8, !tbaa !9
  %201 = add nsw i64 %200, 1
  store i64 %201, ptr %17, align 8, !tbaa !9
  br label %202

202:                                              ; preds = %199, %193
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = load i64, ptr %17, align 8, !tbaa !9
  %205 = call i32 @_seek_helper(ptr noundef %203, i64 noundef %204)
  %206 = sext i32 %205 to i64
  store i64 %206, ptr %7, align 8, !tbaa !9
  %207 = load i64, ptr %7, align 8, !tbaa !9
  %208 = icmp ne i64 %207, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %202
  store i32 7, ptr %9, align 4
  br label %289

210:                                              ; preds = %202
  br label %211

211:                                              ; preds = %210, %187
  br label %287

212:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %213 = call i32 @ogg_page_serialno(ptr noundef %16)
  %214 = sext i32 %213 to i64
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.OggVorbis_File, ptr %215, i32 0, i32 8
  %217 = load ptr, ptr %216, align 8, !tbaa !29
  %218 = load i32, ptr %6, align 4, !tbaa !11
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i64, ptr %217, i64 %219
  %221 = load i64, ptr %220, align 8, !tbaa !9
  %222 = icmp ne i64 %214, %221
  br i1 %222, label %223, label %224

223:                                              ; preds = %212
  store i32 8, ptr %9, align 4
  br label %284, !llvm.loop !30

224:                                              ; preds = %212
  %225 = call i64 @ogg_page_granulepos(ptr noundef %16)
  store i64 %225, ptr %18, align 8, !tbaa !9
  %226 = load i64, ptr %18, align 8, !tbaa !9
  %227 = icmp eq i64 %226, -1
  br i1 %227, label %228, label %229

228:                                              ; preds = %224
  store i32 8, ptr %9, align 4
  br label %284, !llvm.loop !30

229:                                              ; preds = %224
  %230 = load i64, ptr %18, align 8, !tbaa !9
  %231 = load i64, ptr %14, align 8, !tbaa !9
  %232 = icmp slt i64 %230, %231
  br i1 %232, label %233, label %246

233:                                              ; preds = %229
  %234 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %234, ptr %15, align 8, !tbaa !9
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.OggVorbis_File, ptr %235, i32 0, i32 2
  %237 = load i64, ptr %236, align 8, !tbaa !28
  store i64 %237, ptr %11, align 8, !tbaa !9
  %238 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %238, ptr %12, align 8, !tbaa !9
  %239 = load i64, ptr %14, align 8, !tbaa !9
  %240 = load i64, ptr %12, align 8, !tbaa !9
  %241 = sub nsw i64 %239, %240
  %242 = icmp sgt i64 %241, 44100
  br i1 %242, label %243, label %244

243:                                              ; preds = %233
  store i32 9, ptr %9, align 4
  br label %284

244:                                              ; preds = %233
  %245 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %245, ptr %17, align 8, !tbaa !9
  br label %283

246:                                              ; preds = %229
  %247 = load i64, ptr %17, align 8, !tbaa !9
  %248 = load i64, ptr %11, align 8, !tbaa !9
  %249 = add nsw i64 %248, 1
  %250 = icmp sle i64 %247, %249
  br i1 %250, label %251, label %253

251:                                              ; preds = %246
  %252 = load i64, ptr %11, align 8, !tbaa !9
  store i64 %252, ptr %10, align 8, !tbaa !9
  br label %282

253:                                              ; preds = %246
  %254 = load i64, ptr %10, align 8, !tbaa !9
  %255 = load ptr, ptr %4, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.OggVorbis_File, ptr %255, i32 0, i32 2
  %257 = load i64, ptr %256, align 8, !tbaa !28
  %258 = icmp eq i64 %254, %257
  br i1 %258, label %259, label %278

259:                                              ; preds = %253
  %260 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %260, ptr %10, align 8, !tbaa !9
  %261 = load i64, ptr %17, align 8, !tbaa !9
  %262 = sub nsw i64 %261, 65536
  store i64 %262, ptr %17, align 8, !tbaa !9
  %263 = load i64, ptr %17, align 8, !tbaa !9
  %264 = load i64, ptr %11, align 8, !tbaa !9
  %265 = icmp sle i64 %263, %264
  br i1 %265, label %266, label %269

266:                                              ; preds = %259
  %267 = load i64, ptr %11, align 8, !tbaa !9
  %268 = add nsw i64 %267, 1
  store i64 %268, ptr %17, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %266, %259
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = load i64, ptr %17, align 8, !tbaa !9
  %272 = call i32 @_seek_helper(ptr noundef %270, i64 noundef %271)
  %273 = sext i32 %272 to i64
  store i64 %273, ptr %7, align 8, !tbaa !9
  %274 = load i64, ptr %7, align 8, !tbaa !9
  %275 = icmp ne i64 %274, 0
  br i1 %275, label %276, label %277

276:                                              ; preds = %269
  store i32 7, ptr %9, align 4
  br label %284

277:                                              ; preds = %269
  br label %281

278:                                              ; preds = %253
  %279 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %279, ptr %10, align 8, !tbaa !9
  %280 = load i64, ptr %18, align 8, !tbaa !9
  store i64 %280, ptr %13, align 8, !tbaa !9
  store i32 9, ptr %9, align 4
  br label %284

281:                                              ; preds = %277
  br label %282

282:                                              ; preds = %281, %251
  br label %283

283:                                              ; preds = %282, %244
  store i32 0, ptr %9, align 4
  br label %284

284:                                              ; preds = %283, %278, %276, %243, %228, %223
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %285 = load i32, ptr %9, align 4
  switch i32 %285, label %289 [
    i32 0, label %286
    i32 8, label %164
    i32 9, label %288
  ]

286:                                              ; preds = %284
  br label %287

287:                                              ; preds = %286, %211
  br label %164, !llvm.loop !30

288:                                              ; preds = %284, %164
  store i32 0, ptr %9, align 4
  br label %289

289:                                              ; preds = %288, %284, %209, %192, %178, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  %290 = load i32, ptr %9, align 4
  switch i32 %290, label %438 [
    i32 0, label %291
  ]

291:                                              ; preds = %289
  br label %111, !llvm.loop !31

292:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #3
  call void @llvm.lifetime.start.p0(i64 48, ptr %20) #3
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  %294 = load i64, ptr %15, align 8, !tbaa !9
  %295 = call i32 @_seek_helper(ptr noundef %293, i64 noundef %294)
  %296 = sext i32 %295 to i64
  store i64 %296, ptr %7, align 8, !tbaa !9
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.OggVorbis_File, ptr %297, i32 0, i32 12
  store i64 -1, ptr %298, align 8, !tbaa !32
  %299 = load i64, ptr %7, align 8, !tbaa !9
  %300 = icmp ne i64 %299, 0
  br i1 %300, label %301, label %302

301:                                              ; preds = %292
  store i32 7, ptr %9, align 4
  br label %435

302:                                              ; preds = %292
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = call i64 @_get_next_page(ptr noundef %303, ptr noundef %19, i64 noundef -1)
  store i64 %304, ptr %7, align 8, !tbaa !9
  %305 = load i64, ptr %7, align 8, !tbaa !9
  %306 = icmp slt i64 %305, 0
  br i1 %306, label %307, label %308

307:                                              ; preds = %302
  store i32 7, ptr %9, align 4
  br label %435

308:                                              ; preds = %302
  %309 = load i32, ptr %6, align 4, !tbaa !11
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.OggVorbis_File, ptr %310, i32 0, i32 15
  %312 = load i32, ptr %311, align 8, !tbaa !33
  %313 = icmp ne i32 %309, %312
  br i1 %313, label %314, label %330

314:                                              ; preds = %308
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %315)
  %316 = load i32, ptr %6, align 4, !tbaa !11
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.OggVorbis_File, ptr %317, i32 0, i32 15
  store i32 %316, ptr %318, align 8, !tbaa !33
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.OggVorbis_File, ptr %319, i32 0, i32 8
  %321 = load ptr, ptr %320, align 8, !tbaa !29
  %322 = load i32, ptr %6, align 4, !tbaa !11
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds i64, ptr %321, i64 %323
  %325 = load i64, ptr %324, align 8, !tbaa !9
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.OggVorbis_File, ptr %326, i32 0, i32 14
  store i64 %325, ptr %327, align 8, !tbaa !34
  %328 = load ptr, ptr %4, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.OggVorbis_File, ptr %328, i32 0, i32 13
  store i32 3, ptr %329, align 8, !tbaa !13
  br label %334

330:                                              ; preds = %308
  %331 = load ptr, ptr %4, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.OggVorbis_File, ptr %331, i32 0, i32 19
  %333 = call i32 @vorbis_synthesis_restart(ptr noundef %332)
  br label %334

334:                                              ; preds = %330, %314
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.OggVorbis_File, ptr %335, i32 0, i32 18
  %337 = load ptr, ptr %4, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.OggVorbis_File, ptr %337, i32 0, i32 14
  %339 = load i64, ptr %338, align 8, !tbaa !34
  %340 = trunc i64 %339 to i32
  %341 = call i32 @ogg_stream_reset_serialno(ptr noundef %336, i32 noundef %340)
  %342 = load ptr, ptr %4, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.OggVorbis_File, ptr %342, i32 0, i32 18
  %344 = call i32 @ogg_stream_pagein(ptr noundef %343, ptr noundef %19)
  br label %345

345:                                              ; preds = %432, %334
  br label %346

346:                                              ; preds = %345
  %347 = load ptr, ptr %4, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.OggVorbis_File, ptr %347, i32 0, i32 18
  %349 = call i32 @ogg_stream_packetpeek(ptr noundef %348, ptr noundef %20)
  %350 = sext i32 %349 to i64
  store i64 %350, ptr %7, align 8, !tbaa !9
  %351 = load i64, ptr %7, align 8, !tbaa !9
  %352 = icmp eq i64 %351, 0
  br i1 %352, label %353, label %390

353:                                              ; preds = %346
  %354 = load ptr, ptr %4, align 8, !tbaa !5
  %355 = load i64, ptr %15, align 8, !tbaa !9
  %356 = call i32 @_seek_helper(ptr noundef %354, i64 noundef %355)
  %357 = sext i32 %356 to i64
  store i64 %357, ptr %7, align 8, !tbaa !9
  %358 = load i64, ptr %7, align 8, !tbaa !9
  %359 = icmp slt i64 %358, 0
  br i1 %359, label %360, label %361

360:                                              ; preds = %353
  store i32 7, ptr %9, align 4
  br label %435

361:                                              ; preds = %353
  br label %362

362:                                              ; preds = %386, %361
  br label %363

363:                                              ; preds = %362
  %364 = load ptr, ptr %4, align 8, !tbaa !5
  %365 = call i64 @_get_prev_page(ptr noundef %364, ptr noundef %19)
  store i64 %365, ptr %7, align 8, !tbaa !9
  %366 = load i64, ptr %7, align 8, !tbaa !9
  %367 = icmp slt i64 %366, 0
  br i1 %367, label %368, label %369

368:                                              ; preds = %363
  store i32 7, ptr %9, align 4
  br label %435

369:                                              ; preds = %363
  %370 = call i32 @ogg_page_serialno(ptr noundef %19)
  %371 = sext i32 %370 to i64
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.OggVorbis_File, ptr %372, i32 0, i32 14
  %374 = load i64, ptr %373, align 8, !tbaa !34
  %375 = icmp eq i64 %371, %374
  br i1 %375, label %376, label %386

376:                                              ; preds = %369
  %377 = call i64 @ogg_page_granulepos(ptr noundef %19)
  %378 = icmp sgt i64 %377, -1
  br i1 %378, label %382, label %379

379:                                              ; preds = %376
  %380 = call i32 @ogg_page_continued(ptr noundef %19)
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %386, label %382

382:                                              ; preds = %379, %376
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = load i64, ptr %7, align 8, !tbaa !9
  %385 = call i32 @ov_raw_seek(ptr noundef %383, i64 noundef %384)
  store i32 %385, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %435

386:                                              ; preds = %379, %369
  %387 = load i64, ptr %7, align 8, !tbaa !9
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  %389 = getelementptr inbounds %struct.OggVorbis_File, ptr %388, i32 0, i32 2
  store i64 %387, ptr %389, align 8, !tbaa !28
  br label %362

390:                                              ; preds = %346
  %391 = load i64, ptr %7, align 8, !tbaa !9
  %392 = icmp slt i64 %391, 0
  br i1 %392, label %393, label %394

393:                                              ; preds = %390
  store i64 -136, ptr %7, align 8, !tbaa !9
  store i32 7, ptr %9, align 4
  br label %435

394:                                              ; preds = %390
  %395 = getelementptr inbounds %struct.ogg_packet, ptr %20, i32 0, i32 4
  %396 = load i64, ptr %395, align 8, !tbaa !35
  %397 = icmp ne i64 %396, -1
  br i1 %397, label %398, label %427

398:                                              ; preds = %394
  %399 = getelementptr inbounds %struct.ogg_packet, ptr %20, i32 0, i32 4
  %400 = load i64, ptr %399, align 8, !tbaa !35
  %401 = load ptr, ptr %4, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.OggVorbis_File, ptr %401, i32 0, i32 9
  %403 = load ptr, ptr %402, align 8, !tbaa !24
  %404 = load ptr, ptr %4, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.OggVorbis_File, ptr %404, i32 0, i32 15
  %406 = load i32, ptr %405, align 8, !tbaa !33
  %407 = mul nsw i32 %406, 2
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i64, ptr %403, i64 %408
  %410 = load i64, ptr %409, align 8, !tbaa !9
  %411 = sub nsw i64 %400, %410
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = getelementptr inbounds %struct.OggVorbis_File, ptr %412, i32 0, i32 12
  store i64 %411, ptr %413, align 8, !tbaa !32
  %414 = load ptr, ptr %4, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.OggVorbis_File, ptr %414, i32 0, i32 12
  %416 = load i64, ptr %415, align 8, !tbaa !32
  %417 = icmp slt i64 %416, 0
  br i1 %417, label %418, label %421

418:                                              ; preds = %398
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.OggVorbis_File, ptr %419, i32 0, i32 12
  store i64 0, ptr %420, align 8, !tbaa !32
  br label %421

421:                                              ; preds = %418, %398
  %422 = load i64, ptr %8, align 8, !tbaa !9
  %423 = load ptr, ptr %4, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.OggVorbis_File, ptr %423, i32 0, i32 12
  %425 = load i64, ptr %424, align 8, !tbaa !32
  %426 = add nsw i64 %425, %422
  store i64 %426, ptr %424, align 8, !tbaa !32
  br label %434

427:                                              ; preds = %394
  %428 = load ptr, ptr %4, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.OggVorbis_File, ptr %428, i32 0, i32 18
  %430 = call i32 @ogg_stream_packetout(ptr noundef %429, ptr noundef null)
  %431 = sext i32 %430 to i64
  store i64 %431, ptr %7, align 8, !tbaa !9
  br label %432

432:                                              ; preds = %427
  %433 = load i64, ptr %7, align 8, !tbaa !9
  br label %345

434:                                              ; preds = %421
  store i32 0, ptr %9, align 4
  br label %435

435:                                              ; preds = %434, %393, %382, %368, %360, %307, %301
  call void @llvm.lifetime.end.p0(i64 48, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #3
  %436 = load i32, ptr %9, align 4
  switch i32 %436, label %438 [
    i32 0, label %437
  ]

437:                                              ; preds = %435
  store i32 0, ptr %9, align 4
  br label %438

438:                                              ; preds = %437, %435, %289
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  %439 = load i32, ptr %9, align 4
  switch i32 %439, label %463 [
    i32 0, label %440
    i32 7, label %457
  ]

440:                                              ; preds = %438
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.OggVorbis_File, ptr %441, i32 0, i32 12
  %443 = load i64, ptr %442, align 8, !tbaa !32
  %444 = load i64, ptr %5, align 8, !tbaa !9
  %445 = icmp sgt i64 %443, %444
  br i1 %445, label %451, label %446

446:                                              ; preds = %440
  %447 = load i64, ptr %5, align 8, !tbaa !9
  %448 = load ptr, ptr %4, align 8, !tbaa !5
  %449 = call i64 @ov_pcm_total(ptr noundef %448, i32 noundef -1)
  %450 = icmp sgt i64 %447, %449
  br i1 %450, label %451, label %452

451:                                              ; preds = %446, %440
  store i64 -129, ptr %7, align 8, !tbaa !9
  br label %457

452:                                              ; preds = %446
  %453 = load ptr, ptr %4, align 8, !tbaa !5
  %454 = getelementptr inbounds %struct.OggVorbis_File, ptr %453, i32 0, i32 16
  store double 0.000000e+00, ptr %454, align 8, !tbaa !37
  %455 = load ptr, ptr %4, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.OggVorbis_File, ptr %455, i32 0, i32 17
  store double 0.000000e+00, ptr %456, align 8, !tbaa !38
  store i32 0, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %463

457:                                              ; preds = %451, %438
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.OggVorbis_File, ptr %458, i32 0, i32 12
  store i64 -1, ptr %459, align 8, !tbaa !32
  %460 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_decode_clear(ptr noundef %460)
  %461 = load i64, ptr %7, align 8, !tbaa !9
  %462 = trunc i64 %461 to i32
  store i32 %462, ptr %3, align 4
  store i32 1, ptr %9, align 4
  br label %463

463:                                              ; preds = %457, %452, %438, %41, %33, %27
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  %464 = load i32, ptr %3, align 4
  ret i32 %464
}

declare i64 @ogg_page_granulepos(ptr noundef) #2

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

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

declare i32 @ogg_page_continued(ptr noundef) #2

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.ogg_page = type { ptr, i64, ptr, i64 }
%struct.ogg_packet = type { ptr, i64, i64, i64, i64, i64 }

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

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

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

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

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

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

declare i32 @vorbis_synthesis_restart(ptr noundef) local_unnamed_addr #2

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

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

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

declare i32 @ogg_page_serialno(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

split:                                            ; preds = %25, %._crit_edge413
  %.pre-phi415 = phi i32 [ %.pre414, %._crit_edge413 ], [ %27, %25 ]
  %.pre-phi = phi i32 [ %.pre, %._crit_edge413 ], [ %26, %25 ]
  %.0156.in.lcssa = phi i32 [ %smin, %._crit_edge413 ], [ %23, %25 ]
  %.0156.lcssa = phi i32 [ %21, %._crit_edge413 ], [ %indvars, %25 ]
  %.1189 = phi i64 [ %.0188, %._crit_edge413 ], [ %31, %25 ]
  %32 = getelementptr inbounds i8, ptr %0, i64 72
  %33 = load ptr, ptr %32, align 8, !tbaa !25
  %34 = sext i32 %.0156.in.lcssa to i64
  %35 = getelementptr inbounds i64, ptr %33, i64 %34
  %36 = load i64, ptr %35, align 8, !tbaa !22
  %37 = sext i32 %.0156.lcssa to i64
  %38 = getelementptr inbounds i64, ptr %33, i64 %37
  %39 = load i64, ptr %38, align 8, !tbaa !22
  %40 = sext i32 %.pre-phi to i64
  %41 = getelementptr inbounds i64, ptr %.pre.pre, i64 %40
  %42 = load i64, ptr %41, align 8, !tbaa !22
  %43 = sext i32 %.pre-phi415 to i64
  %44 = getelementptr inbounds i64, ptr %.pre.pre, i64 %43
  %45 = load i64, ptr %44, align 8, !tbaa !22
  %46 = sub nsw i64 %1, %.1189
  %47 = add nsw i64 %42, %46
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #5
  %48 = icmp slt i64 %39, %36
  br i1 %48, label %.lr.ph391, label %._crit_edge

.lr.ph391:                                        ; preds = %split
  %49 = add nsw i64 %45, %42
  %50 = getelementptr inbounds i8, ptr %0, i64 16
  %51 = getelementptr inbounds i8, ptr %0, i64 88
  br label %52

52:                                               ; preds = %.lr.ph391, %select.unfold245
  %.0149390 = phi i64 [ %39, %.lr.ph391 ], [ %.6155, %select.unfold245 ]
  %.0157389 = phi i64 [ %49, %.lr.ph391 ], [ %.5162, %select.unfold245 ]
  %.0163388 = phi i64 [ %42, %.lr.ph391 ], [ %.6169, %select.unfold245 ]
  %.0170387 = phi i64 [ %39, %.lr.ph391 ], [ %.6176, %select.unfold245 ]
  %.0177386 = phi i64 [ %36, %.lr.ph391 ], [ %.6183, %select.unfold245 ]
  %53 = sub nsw i64 %.0177386, %.0170387
  %54 = icmp slt i64 %53, 65536
  br i1 %54, label %68, label %55

55:                                               ; preds = %52
  %56 = sub nsw i64 %47, %.0163388
  %57 = sitofp i64 %56 to double
  %58 = uitofp nneg i64 %53 to double
  %59 = fmul double %58, %57
  %60 = sub nsw i64 %.0157389, %.0163388
  %61 = sitofp i64 %60 to double
  %62 = fdiv double %59, %61
  %63 = fptosi double %62 to i64
  %64 = add i64 %.0170387, -65536
  %65 = add i64 %64, %63
  %66 = add nsw i64 %.0170387, 65536
  %67 = icmp slt i64 %65, %66
  %spec.select = select i1 %67, i64 %.0170387, i64 %65
  br label %68

68:                                               ; preds = %55, %52
  %.0146 = phi i64 [ %.0170387, %52 ], [ %spec.select, %55 ]
  %69 = load i64, ptr %50, align 8, !tbaa !26
  %.not229 = icmp eq i64 %.0146, %69
  br i1 %.not229, label %74, label %70

70:                                               ; preds = %68
  %71 = call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %.0146)
  %.not230 = icmp eq i32 %71, 0
  br i1 %.not230, label %74, label %72

72:                                               ; preds = %70
  %73 = zext i32 %71 to i64
  br label %.thread294

74:                                               ; preds = %70, %68
  %75 = icmp slt i64 %.0170387, %.0177386
  br i1 %75, label %.lr.ph.split.us, label %select.unfold245

.lr.ph.split.us:                                  ; preds = %74, %.thread
  %.1147.ph381 = phi i64 [ %.6, %.thread ], [ %.0146, %74 ]
  %.1150.ph380 = phi i64 [ %.4153, %.thread ], [ %.0149390, %74 ]
  %.1164.ph379 = phi i64 [ %.4167, %.thread ], [ %.0163388, %74 ]
  %.1171.ph378 = phi i64 [ %.4174, %.thread ], [ %.0170387, %74 ]
  %.1178.ph377 = phi i64 [ %.4181, %.thread ], [ %.0177386, %74 ]
  %76 = load i64, ptr %50, align 8, !tbaa !26
  %77 = sub nsw i64 %.1178.ph377, %76
  %78 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %3, i64 noundef %77)
  %79 = icmp eq i64 %78, -128
  br i1 %79, label %.thread294, label %.lr.ph373

.lr.ph373:                                        ; preds = %.lr.ph.split.us, %91
  %80 = phi i64 [ %94, %91 ], [ %78, %.lr.ph.split.us ]
  %81 = icmp slt i64 %80, 0
  br i1 %81, label %.split.us, label %82

82:                                               ; preds = %.lr.ph373
  %83 = call i32 @ogg_page_serialno(ptr noundef nonnull %3) #5
  %84 = sext i32 %83 to i64
  %85 = load ptr, ptr %51, align 8, !tbaa !27
  %86 = getelementptr inbounds i64, ptr %85, i64 %37
  %87 = load i64, ptr %86, align 8, !tbaa !22
  %.not231.us = icmp eq i64 %87, %84
  br i1 %.not231.us, label %88, label %91, !llvm.loop !28

88:                                               ; preds = %82
  %89 = call i64 @ogg_page_granulepos(ptr noundef nonnull %3) #5
  %90 = icmp eq i64 %89, -1
  br i1 %90, label %91, label %.split346.us, !llvm.loop !28

91:                                               ; preds = %88, %82
  %92 = load i64, ptr %50, align 8, !tbaa !26
  %93 = sub nsw i64 %.1178.ph377, %92
  %94 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %3, i64 noundef %93)
  %95 = icmp eq i64 %94, -128
  br i1 %95, label %.thread294, label %.lr.ph373

.split.us:                                        ; preds = %.lr.ph373
  %96 = add nsw i64 %.1171.ph378, 1
  %.not235 = icmp sgt i64 %.1147.ph381, %96
  br i1 %.not235, label %97, label %._crit_edge

97:                                               ; preds = %.split.us
  %98 = icmp eq i64 %.1147.ph381, 0
  br i1 %98, label %.thread294, label %99

99:                                               ; preds = %97
  %100 = add nsw i64 %.1147.ph381, -65536
  %.not236 = icmp sgt i64 %100, %.1171.ph378
  %spec.select238 = select i1 %.not236, i64 %100, i64 %96
  %101 = call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %spec.select238)
  %.not237 = icmp eq i32 %101, 0
  br i1 %.not237, label %.thread, label %102

102:                                              ; preds = %99
  %103 = zext i32 %101 to i64
  br label %.thread294

.split346.us:                                     ; preds = %88
  %104 = icmp slt i64 %89, %47
  br i1 %104, label %105, label %109

105:                                              ; preds = %.split346.us
  %106 = load i64, ptr %50, align 8, !tbaa !26
  %107 = sub nsw i64 %47, %89
  %108 = icmp sgt i64 %107, 44100
  br i1 %108, label %select.unfold245, label %.thread

109:                                              ; preds = %.split346.us
  %110 = add nsw i64 %.1171.ph378, 1
  %.not232 = icmp sgt i64 %.1147.ph381, %110
  br i1 %.not232, label %111, label %._crit_edge

111:                                              ; preds = %109
  %112 = load i64, ptr %50, align 8, !tbaa !26
  %113 = icmp eq i64 %.1178.ph377, %112
  br i1 %113, label %114, label %select.unfold245

114:                                              ; preds = %111
  %115 = add nsw i64 %.1147.ph381, -65536
  %.not233 = icmp sgt i64 %115, %.1171.ph378
  %spec.select239 = select i1 %.not233, i64 %115, i64 %110
  %116 = call i32 @_seek_helper(ptr noundef nonnull %0, i64 noundef %spec.select239)
  %.not234 = icmp eq i32 %116, 0
  br i1 %.not234, label %.thread, label %.thread294.loopexit.loopexit309.split.loop.exit

.thread:                                          ; preds = %114, %105, %99
  %.4181 = phi i64 [ %.1178.ph377, %99 ], [ %.1178.ph377, %105 ], [ %80, %114 ]
  %.4174 = phi i64 [ %.1171.ph378, %99 ], [ %106, %105 ], [ %.1171.ph378, %114 ]
  %.4167 = phi i64 [ %.1164.ph379, %99 ], [ %89, %105 ], [ %.1164.ph379, %114 ]
  %.4153 = phi i64 [ %.1150.ph380, %99 ], [ %80, %105 ], [ %.1150.ph380, %114 ]
  %.6 = phi i64 [ %spec.select238, %99 ], [ %106, %105 ], [ %spec.select239, %114 ]
  %117 = icmp slt i64 %.4174, %.4181
  br i1 %117, label %.lr.ph.split.us, label %select.unfold245, !llvm.loop !28

.thread294.loopexit.loopexit309.split.loop.exit:  ; preds = %114
  %118 = zext i32 %116 to i64
  br label %.thread294

.thread294:                                       ; preds = %.lr.ph.split.us, %97, %91, %.thread294.loopexit.loopexit309.split.loop.exit, %102, %72
  %.7.ph = phi i64 [ %103, %102 ], [ %73, %72 ], [ %118, %.thread294.loopexit.loopexit309.split.loop.exit ], [ -128, %91 ], [ %80, %97 ], [ -128, %.lr.ph.split.us ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  br label %195

select.unfold245:                                 ; preds = %105, %111, %.thread, %74
  %.6183 = phi i64 [ %.0177386, %74 ], [ %.1147.ph381, %111 ], [ %.1178.ph377, %105 ], [ %.4181, %.thread ]
  %.6176 = phi i64 [ %.0170387, %74 ], [ %.1171.ph378, %111 ], [ %106, %105 ], [ %.4174, %.thread ]
  %.6169 = phi i64 [ %.0163388, %74 ], [ %.1164.ph379, %111 ], [ %89, %105 ], [ %.4167, %.thread ]
  %.5162 = phi i64 [ %.0157389, %74 ], [ %89, %111 ], [ %.0157389, %105 ], [ %.0157389, %.thread ]
  %.6155 = phi i64 [ %.0149390, %74 ], [ %.1150.ph380, %111 ], [ %80, %105 ], [ %.4153, %.thread ]
  %119 = icmp slt i64 %.6176, %.6183
  br i1 %119, label %52, label %._crit_edge, !llvm.loop !29

._crit_edge:                                      ; preds = %select.unfold245, %.split.us, %109, %split
  %.0149.lcssa = phi i64 [ %39, %split ], [ %.1150.ph380, %109 ], [ %.1150.ph380, %.split.us ], [ %.6155, %select.unfold245 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %5) #5
  %120 = call i32 @_seek_helper(ptr noundef %0, i64 noundef %.0149.lcssa)
  %121 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 -1, ptr %121, align 8, !tbaa !30
  %.not225 = icmp eq i32 %120, 0
  br i1 %.not225, label %124, label %122

122:                                              ; preds = %._crit_edge
  %123 = zext i32 %120 to i64
  br label %.thread299

124:                                              ; preds = %._crit_edge
  %125 = call i64 @_get_next_page(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef -1)
  %126 = icmp slt i64 %125, 0
  br i1 %126, label %.thread299, label %127

127:                                              ; preds = %124
  %128 = getelementptr inbounds i8, ptr %0, i64 144
  %129 = load i32, ptr %128, align 8, !tbaa !31
  %.not226 = icmp eq i32 %.0156.lcssa, %129
  br i1 %.not226, label %136, label %130

130:                                              ; preds = %127
  call void @_decode_clear(ptr noundef nonnull %0)
  store i32 %.0156.lcssa, ptr %128, align 8, !tbaa !31
  %131 = getelementptr inbounds i8, ptr %0, i64 88
  %132 = load ptr, ptr %131, align 8, !tbaa !27
  %133 = getelementptr inbounds i64, ptr %132, i64 %37
  %134 = load i64, ptr %133, align 8, !tbaa !22
  %135 = getelementptr inbounds i8, ptr %0, i64 136
  store i64 %134, ptr %135, align 8, !tbaa !32
  store i32 3, ptr %7, align 8, !tbaa !5
  br label %139

136:                                              ; preds = %127
  %137 = getelementptr inbounds i8, ptr %0, i64 576
  %138 = call i32 @vorbis_synthesis_restart(ptr noundef nonnull %137) #5
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 136
  %.pre412 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !32
  br label %139

139:                                              ; preds = %136, %130
  %140 = phi i64 [ %.pre412, %136 ], [ %134, %130 ]
  %141 = getelementptr inbounds i8, ptr %0, i64 168
  %142 = getelementptr inbounds i8, ptr %0, i64 136
  %143 = trunc i64 %140 to i32
  %144 = call i32 @ogg_stream_reset_serialno(ptr noundef nonnull %141, i32 noundef %143) #5
  %145 = call i32 @ogg_stream_pagein(ptr noundef nonnull %141, ptr noundef nonnull %4) #5
  %146 = call i32 @ogg_stream_packetpeek(ptr noundef nonnull %141, ptr noundef nonnull %5) #5
  %147 = icmp eq i32 %146, 0
  br i1 %147, label %._crit_edge395, label %.lr.ph394

.lr.ph394:                                        ; preds = %139
  %148 = getelementptr inbounds i8, ptr %5, i64 32
  br label %171

._crit_edge395:                                   ; preds = %176, %139
  %149 = call i32 @_seek_helper(ptr noundef %0, i64 noundef %.0149.lcssa)
  %150 = icmp slt i32 %149, 0
  br i1 %150, label %154, label %.preheader

.preheader:                                       ; preds = %._crit_edge395
  %151 = call i64 @_get_prev_page(ptr noundef %0, ptr noundef nonnull %4)
  %152 = icmp slt i64 %151, 0
  br i1 %152, label %.thread299, label %.lr.ph396

.lr.ph396:                                        ; preds = %.preheader
  %153 = getelementptr inbounds i8, ptr %0, i64 16
  br label %156

154:                                              ; preds = %._crit_edge395
  %155 = zext i32 %149 to i64
  br label %.thread299

156:                                              ; preds = %.lr.ph396, %168
  %157 = phi i64 [ %151, %.lr.ph396 ], [ %169, %168 ]
  %158 = call i32 @ogg_page_serialno(ptr noundef nonnull %4) #5
  %159 = sext i32 %158 to i64
  %160 = load i64, ptr %142, align 8, !tbaa !32
  %161 = icmp eq i64 %160, %159
  br i1 %161, label %162, label %168

162:                                              ; preds = %156
  %163 = call i64 @ogg_page_granulepos(ptr noundef nonnull %4) #5
  %164 = icmp sgt i64 %163, -1
  br i1 %164, label %.thread303, label %165

165:                                              ; preds = %162
  %166 = call i32 @ogg_page_continued(ptr noundef nonnull %4) #5
  %.not228 = icmp eq i32 %166, 0
  br i1 %.not228, label %.thread303, label %168

.thread303:                                       ; preds = %162, %165
  %167 = call i32 @ov_raw_seek(ptr noundef nonnull %0, i64 noundef %157)
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  br label %198

168:                                              ; preds = %165, %156
  store i64 %157, ptr %153, align 8, !tbaa !26
  %169 = call i64 @_get_prev_page(ptr noundef nonnull %0, ptr noundef nonnull %4)
  %170 = icmp slt i64 %169, 0
  br i1 %170, label %.thread299, label %156

171:                                              ; preds = %.lr.ph394, %176
  %172 = phi i32 [ %146, %.lr.ph394 ], [ %178, %176 ]
  %173 = icmp slt i32 %172, 0
  br i1 %173, label %.thread299, label %174

174:                                              ; preds = %171
  %175 = load i64, ptr %148, align 8, !tbaa !33
  %.not227 = icmp eq i64 %175, -1
  br i1 %.not227, label %176, label %180

176:                                              ; preds = %174
  %177 = call i32 @ogg_stream_packetout(ptr noundef nonnull %141, ptr noundef null) #5
  %178 = call i32 @ogg_stream_packetpeek(ptr noundef nonnull %141, ptr noundef nonnull %5) #5
  %179 = icmp eq i32 %178, 0
  br i1 %179, label %._crit_edge395, label %171

.thread299:                                       ; preds = %171, %168, %.preheader, %122, %154, %124
  %.8.ph = phi i64 [ %125, %124 ], [ %155, %154 ], [ %123, %122 ], [ %151, %.preheader ], [ %169, %168 ], [ -136, %171 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  br label %195

180:                                              ; preds = %174
  %181 = load ptr, ptr %19, align 8, !tbaa !21
  %182 = load i32, ptr %128, align 8, !tbaa !31
  %183 = shl nsw i32 %182, 1
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds i64, ptr %181, i64 %184
  %186 = load i64, ptr %185, align 8, !tbaa !22
  %187 = sub nsw i64 %175, %186
  %spec.select240 = call i64 @llvm.smax.i64(i64 %187, i64 0)
  %188 = add nsw i64 %spec.select240, %.1189
  store i64 %188, ptr %121, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #5
  %189 = icmp sgt i64 %188, %1
  br i1 %189, label %195, label %190

190:                                              ; preds = %180
  %191 = call i64 @ov_pcm_total(ptr noundef nonnull %0, i32 noundef -1)
  %192 = icmp slt i64 %191, %1
  br i1 %192, label %195, label %193

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

195:                                              ; preds = %.thread299, %.thread294, %180, %190
  %.10 = phi i64 [ -129, %190 ], [ -129, %180 ], [ %.7.ph, %.thread294 ], [ %.8.ph, %.thread299 ]
  %196 = getelementptr inbounds i8, ptr %0, i64 120
  store i64 -1, ptr %196, align 8, !tbaa !30
  call void @_decode_clear(ptr noundef %0)
  %197 = trunc i64 %.10 to i32
  br label %198

198:                                              ; preds = %.thread303, %13, %10, %2, %195, %193
  %.2 = phi i32 [ %197, %195 ], [ 0, %193 ], [ -131, %2 ], [ -138, %10 ], [ -131, %13 ], [ %167, %.thread303 ]
  ret i32 %.2
}

declare i64 @ogg_page_granulepos(ptr noundef) local_unnamed_addr #2

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

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

declare i32 @ogg_page_continued(ptr noundef) local_unnamed_addr #2

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

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

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

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 = { "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, !10, i64 64}
!21 = !{!6, !7, i64 96}
!22 = !{!11, !11, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!6, !7, i64 72}
!26 = !{!6, !11, i64 16}
!27 = !{!6, !7, i64 88}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = !{!6, !11, i64 120}
!31 = !{!6, !10, i64 144}
!32 = !{!6, !11, i64 136}
!33 = !{!34, !11, i64 32}
!34 = !{!"", !7, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}


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