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

; 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_stream_state = type { ptr, i64, i64, i64, ptr, ptr, i64, i64, i64, i64, [282 x i8], i32, i32, i32, i64, i64, i64, i64 }

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_version(ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_bos(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i32 @ogg_page_eos(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ogg_page_granulepos(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 i32 @ogg_page_serialno(ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local i64 @ogg_page_pageno(ptr noundef) #0

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

; Function Attrs: nounwind uwtable
declare hidden void @_os_body_expand(ptr noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @_os_lacing_expand(ptr noundef, i32 noundef) #0

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

; Function Attrs: nounwind uwtable
define dso_local i32 @ogg_stream_pagein(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i64, align 8
  %15 = alloca i32, align 4
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %25 = load ptr, ptr %5, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.ogg_page, ptr %25, i32 0, i32 0
  %27 = load ptr, ptr %26, align 8, !tbaa !9
  store ptr %27, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %28 = load ptr, ptr %5, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.ogg_page, ptr %28, i32 0, i32 2
  %30 = load ptr, ptr %29, align 8, !tbaa !12
  store ptr %30, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.ogg_page, ptr %31, i32 0, i32 3
  %33 = load i64, ptr %32, align 8, !tbaa !13
  store i64 %33, ptr %8, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #3
  store i32 0, ptr %9, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #3
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = call i32 @ogg_page_version(ptr noundef %34)
  store i32 %35, ptr %10, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = call i32 @ogg_page_continued(ptr noundef %36)
  store i32 %37, ptr %11, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = call i32 @ogg_page_bos(ptr noundef %38)
  store i32 %39, ptr %12, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  %40 = load ptr, ptr %5, align 8, !tbaa !5
  %41 = call i32 @ogg_page_eos(ptr noundef %40)
  store i32 %41, ptr %13, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #3
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = call i64 @ogg_page_granulepos(ptr noundef %42)
  store i64 %43, ptr %14, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = call i32 @ogg_page_serialno(ptr noundef %44)
  store i32 %45, ptr %15, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = call i64 @ogg_page_pageno(ptr noundef %46)
  store i64 %47, ptr %16, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #3
  %48 = load ptr, ptr %6, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %48, i64 26
  %50 = load i8, ptr %49, align 1, !tbaa !17
  %51 = zext i8 %50 to i32
  store i32 %51, ptr %17, align 4, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.ogg_stream_state, ptr %52, i32 0, i32 9
  %54 = load i64, ptr %53, align 8, !tbaa !18
  store i64 %54, ptr %18, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %55 = load ptr, ptr %4, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.ogg_stream_state, ptr %55, i32 0, i32 3
  %57 = load i64, ptr %56, align 8, !tbaa !20
  store i64 %57, ptr %19, align 8, !tbaa !14
  %58 = load i64, ptr %19, align 8, !tbaa !14
  %59 = icmp ne i64 %58, 0
  br i1 %59, label %60, label %85

60:                                               ; preds = %2
  %61 = load i64, ptr %19, align 8, !tbaa !14
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.ogg_stream_state, ptr %62, i32 0, i32 2
  %64 = load i64, ptr %63, align 8, !tbaa !21
  %65 = sub nsw i64 %64, %61
  store i64 %65, ptr %63, align 8, !tbaa !21
  %66 = load ptr, ptr %4, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.ogg_stream_state, ptr %66, i32 0, i32 2
  %68 = load i64, ptr %67, align 8, !tbaa !21
  %69 = icmp ne i64 %68, 0
  br i1 %69, label %70, label %82

70:                                               ; preds = %60
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ogg_stream_state, ptr %71, i32 0, i32 0
  %73 = load ptr, ptr %72, align 8, !tbaa !22
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.ogg_stream_state, ptr %74, i32 0, i32 0
  %76 = load ptr, ptr %75, align 8, !tbaa !22
  %77 = load i64, ptr %19, align 8, !tbaa !14
  %78 = getelementptr inbounds i8, ptr %76, i64 %77
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.ogg_stream_state, ptr %79, i32 0, i32 2
  %81 = load i64, ptr %80, align 8, !tbaa !21
  call void @llvm.memmove.p0.p0.i64(ptr align 1 %73, ptr align 1 %78, i64 %81, i1 false)
  br label %82

82:                                               ; preds = %70, %60
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.ogg_stream_state, ptr %83, i32 0, i32 3
  store i64 0, ptr %84, align 8, !tbaa !20
  br label %85

85:                                               ; preds = %82, %2
  %86 = load i64, ptr %18, align 8, !tbaa !14
  %87 = icmp ne i64 %86, 0
  br i1 %87, label %88, label %137

88:                                               ; preds = %85
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.ogg_stream_state, ptr %89, i32 0, i32 7
  %91 = load i64, ptr %90, align 8, !tbaa !23
  %92 = load i64, ptr %18, align 8, !tbaa !14
  %93 = sub nsw i64 %91, %92
  %94 = icmp ne i64 %93, 0
  br i1 %94, label %95, label %124

95:                                               ; preds = %88
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.ogg_stream_state, ptr %96, i32 0, i32 4
  %98 = load ptr, ptr %97, align 8, !tbaa !24
  %99 = load ptr, ptr %4, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.ogg_stream_state, ptr %99, i32 0, i32 4
  %101 = load ptr, ptr %100, align 8, !tbaa !24
  %102 = load i64, ptr %18, align 8, !tbaa !14
  %103 = getelementptr inbounds i32, ptr %101, i64 %102
  %104 = load ptr, ptr %4, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.ogg_stream_state, ptr %104, i32 0, i32 7
  %106 = load i64, ptr %105, align 8, !tbaa !23
  %107 = load i64, ptr %18, align 8, !tbaa !14
  %108 = sub nsw i64 %106, %107
  %109 = mul i64 %108, 4
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %98, ptr align 4 %103, i64 %109, i1 false)
  %110 = load ptr, ptr %4, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.ogg_stream_state, ptr %110, i32 0, i32 5
  %112 = load ptr, ptr %111, align 8, !tbaa !25
  %113 = load ptr, ptr %4, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.ogg_stream_state, ptr %113, i32 0, i32 5
  %115 = load ptr, ptr %114, align 8, !tbaa !25
  %116 = load i64, ptr %18, align 8, !tbaa !14
  %117 = getelementptr inbounds i64, ptr %115, i64 %116
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.ogg_stream_state, ptr %118, i32 0, i32 7
  %120 = load i64, ptr %119, align 8, !tbaa !23
  %121 = load i64, ptr %18, align 8, !tbaa !14
  %122 = sub nsw i64 %120, %121
  %123 = mul i64 %122, 8
  call void @llvm.memmove.p0.p0.i64(ptr align 8 %112, ptr align 8 %117, i64 %123, i1 false)
  br label %124

124:                                              ; preds = %95, %88
  %125 = load i64, ptr %18, align 8, !tbaa !14
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.ogg_stream_state, ptr %126, i32 0, i32 7
  %128 = load i64, ptr %127, align 8, !tbaa !23
  %129 = sub nsw i64 %128, %125
  store i64 %129, ptr %127, align 8, !tbaa !23
  %130 = load i64, ptr %18, align 8, !tbaa !14
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.ogg_stream_state, ptr %131, i32 0, i32 8
  %133 = load i64, ptr %132, align 8, !tbaa !26
  %134 = sub nsw i64 %133, %130
  store i64 %134, ptr %132, align 8, !tbaa !26
  %135 = load ptr, ptr %4, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.ogg_stream_state, ptr %135, i32 0, i32 9
  store i64 0, ptr %136, align 8, !tbaa !18
  br label %137

137:                                              ; preds = %124, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  %138 = load i32, ptr %15, align 4, !tbaa !15
  %139 = sext i32 %138 to i64
  %140 = load ptr, ptr %4, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.ogg_stream_state, ptr %140, i32 0, i32 14
  %142 = load i64, ptr %141, align 8, !tbaa !27
  %143 = icmp ne i64 %139, %142
  br i1 %143, label %144, label %145

144:                                              ; preds = %137
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %388

145:                                              ; preds = %137
  %146 = load i32, ptr %10, align 4, !tbaa !15
  %147 = icmp sgt i32 %146, 0
  br i1 %147, label %148, label %149

148:                                              ; preds = %145
  store i32 -1, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %388

149:                                              ; preds = %145
  %150 = load ptr, ptr %4, align 8, !tbaa !5
  %151 = load i32, ptr %17, align 4, !tbaa !15
  %152 = add nsw i32 %151, 1
  call void @_os_lacing_expand(ptr noundef %150, i32 noundef %152)
  %153 = load i64, ptr %16, align 8, !tbaa !14
  %154 = load ptr, ptr %4, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.ogg_stream_state, ptr %154, i32 0, i32 15
  %156 = load i64, ptr %155, align 8, !tbaa !28
  %157 = icmp ne i64 %153, %156
  br i1 %157, label %158, label %211

158:                                              ; preds = %149
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.ogg_stream_state, ptr %159, i32 0, i32 8
  %161 = load i64, ptr %160, align 8, !tbaa !26
  %162 = trunc i64 %161 to i32
  store i32 %162, ptr %21, align 4, !tbaa !15
  br label %163

163:                                              ; preds = %184, %158
  %164 = load i32, ptr %21, align 4, !tbaa !15
  %165 = sext i32 %164 to i64
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = getelementptr inbounds %struct.ogg_stream_state, ptr %166, i32 0, i32 7
  %168 = load i64, ptr %167, align 8, !tbaa !23
  %169 = icmp slt i64 %165, %168
  br i1 %169, label %170, label %187

170:                                              ; preds = %163
  %171 = load ptr, ptr %4, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.ogg_stream_state, ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !24
  %174 = load i32, ptr %21, align 4, !tbaa !15
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i32, ptr %173, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !15
  %178 = and i32 %177, 255
  %179 = sext i32 %178 to i64
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.ogg_stream_state, ptr %180, i32 0, i32 2
  %182 = load i64, ptr %181, align 8, !tbaa !21
  %183 = sub nsw i64 %182, %179
  store i64 %183, ptr %181, align 8, !tbaa !21
  br label %184

184:                                              ; preds = %170
  %185 = load i32, ptr %21, align 4, !tbaa !15
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %21, align 4, !tbaa !15
  br label %163, !llvm.loop !29

187:                                              ; preds = %163
  %188 = load ptr, ptr %4, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.ogg_stream_state, ptr %188, i32 0, i32 8
  %190 = load i64, ptr %189, align 8, !tbaa !26
  %191 = load ptr, ptr %4, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.ogg_stream_state, ptr %191, i32 0, i32 7
  store i64 %190, ptr %192, align 8, !tbaa !23
  %193 = load ptr, ptr %4, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.ogg_stream_state, ptr %193, i32 0, i32 15
  %195 = load i64, ptr %194, align 8, !tbaa !28
  %196 = icmp ne i64 %195, -1
  br i1 %196, label %197, label %210

197:                                              ; preds = %187
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ogg_stream_state, ptr %198, i32 0, i32 4
  %200 = load ptr, ptr %199, align 8, !tbaa !24
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.ogg_stream_state, ptr %201, i32 0, i32 7
  %203 = load i64, ptr %202, align 8, !tbaa !23
  %204 = add nsw i64 %203, 1
  store i64 %204, ptr %202, align 8, !tbaa !23
  %205 = getelementptr inbounds i32, ptr %200, i64 %203
  store i32 1024, ptr %205, align 4, !tbaa !15
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ogg_stream_state, ptr %206, i32 0, i32 8
  %208 = load i64, ptr %207, align 8, !tbaa !26
  %209 = add nsw i64 %208, 1
  store i64 %209, ptr %207, align 8, !tbaa !26
  br label %210

210:                                              ; preds = %197, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  br label %211

211:                                              ; preds = %210, %149
  %212 = load i32, ptr %11, align 4, !tbaa !15
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %214, label %265

214:                                              ; preds = %211
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.ogg_stream_state, ptr %215, i32 0, i32 7
  %217 = load i64, ptr %216, align 8, !tbaa !23
  %218 = icmp slt i64 %217, 1
  br i1 %218, label %230, label %219

219:                                              ; preds = %214
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.ogg_stream_state, ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !24
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.ogg_stream_state, ptr %223, i32 0, i32 7
  %225 = load i64, ptr %224, align 8, !tbaa !23
  %226 = sub nsw i64 %225, 1
  %227 = getelementptr inbounds i32, ptr %222, i64 %226
  %228 = load i32, ptr %227, align 4, !tbaa !15
  %229 = icmp eq i32 %228, 1024
  br i1 %229, label %230, label %264

230:                                              ; preds = %219, %214
  store i32 0, ptr %12, align 4, !tbaa !15
  br label %231

231:                                              ; preds = %260, %230
  %232 = load i32, ptr %9, align 4, !tbaa !15
  %233 = load i32, ptr %17, align 4, !tbaa !15
  %234 = icmp slt i32 %232, %233
  br i1 %234, label %235, label %263

235:                                              ; preds = %231
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = load i32, ptr %9, align 4, !tbaa !15
  %238 = add nsw i32 27, %237
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds i8, ptr %236, i64 %239
  %241 = load i8, ptr %240, align 1, !tbaa !17
  %242 = zext i8 %241 to i32
  store i32 %242, ptr %22, align 4, !tbaa !15
  %243 = load i32, ptr %22, align 4, !tbaa !15
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = sext i32 %243 to i64
  %246 = getelementptr inbounds i8, ptr %244, i64 %245
  store ptr %246, ptr %7, align 8, !tbaa !5
  %247 = load i32, ptr %22, align 4, !tbaa !15
  %248 = sext i32 %247 to i64
  %249 = load i64, ptr %8, align 8, !tbaa !14
  %250 = sub nsw i64 %249, %248
  store i64 %250, ptr %8, align 8, !tbaa !14
  %251 = load i32, ptr %22, align 4, !tbaa !15
  %252 = icmp slt i32 %251, 255
  br i1 %252, label %253, label %256

253:                                              ; preds = %235
  %254 = load i32, ptr %9, align 4, !tbaa !15
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %9, align 4, !tbaa !15
  store i32 5, ptr %20, align 4
  br label %257

256:                                              ; preds = %235
  store i32 0, ptr %20, align 4
  br label %257

257:                                              ; preds = %256, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  %258 = load i32, ptr %20, align 4
  switch i32 %258, label %390 [
    i32 0, label %259
    i32 5, label %263
  ]

259:                                              ; preds = %257
  br label %260

260:                                              ; preds = %259
  %261 = load i32, ptr %9, align 4, !tbaa !15
  %262 = add nsw i32 %261, 1
  store i32 %262, ptr %9, align 4, !tbaa !15
  br label %231, !llvm.loop !31

263:                                              ; preds = %257, %231
  br label %264

264:                                              ; preds = %263, %219
  br label %265

265:                                              ; preds = %264, %211
  %266 = load i64, ptr %8, align 8, !tbaa !14
  %267 = icmp ne i64 %266, 0
  br i1 %267, label %268, label %286

268:                                              ; preds = %265
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = load i64, ptr %8, align 8, !tbaa !14
  %271 = trunc i64 %270 to i32
  call void @_os_body_expand(ptr noundef %269, i32 noundef %271)
  %272 = load ptr, ptr %4, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.ogg_stream_state, ptr %272, i32 0, i32 0
  %274 = load ptr, ptr %273, align 8, !tbaa !22
  %275 = load ptr, ptr %4, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.ogg_stream_state, ptr %275, i32 0, i32 2
  %277 = load i64, ptr %276, align 8, !tbaa !21
  %278 = getelementptr inbounds i8, ptr %274, i64 %277
  %279 = load ptr, ptr %7, align 8, !tbaa !5
  %280 = load i64, ptr %8, align 8, !tbaa !14
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %278, ptr align 1 %279, i64 %280, i1 false)
  %281 = load i64, ptr %8, align 8, !tbaa !14
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.ogg_stream_state, ptr %282, i32 0, i32 2
  %284 = load i64, ptr %283, align 8, !tbaa !21
  %285 = add nsw i64 %284, %281
  store i64 %285, ptr %283, align 8, !tbaa !21
  br label %286

286:                                              ; preds = %268, %265
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  store i32 -1, ptr %23, align 4, !tbaa !15
  br label %287

287:                                              ; preds = %349, %286
  %288 = load i32, ptr %9, align 4, !tbaa !15
  %289 = load i32, ptr %17, align 4, !tbaa !15
  %290 = icmp slt i32 %288, %289
  br i1 %290, label %291, label %350

291:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = load i32, ptr %9, align 4, !tbaa !15
  %294 = add nsw i32 27, %293
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i8, ptr %292, i64 %295
  %297 = load i8, ptr %296, align 1, !tbaa !17
  %298 = zext i8 %297 to i32
  store i32 %298, ptr %24, align 4, !tbaa !15
  %299 = load i32, ptr %24, align 4, !tbaa !15
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.ogg_stream_state, ptr %300, i32 0, i32 4
  %302 = load ptr, ptr %301, align 8, !tbaa !24
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.ogg_stream_state, ptr %303, i32 0, i32 7
  %305 = load i64, ptr %304, align 8, !tbaa !23
  %306 = getelementptr inbounds i32, ptr %302, i64 %305
  store i32 %299, ptr %306, align 4, !tbaa !15
  %307 = load ptr, ptr %4, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.ogg_stream_state, ptr %307, i32 0, i32 5
  %309 = load ptr, ptr %308, align 8, !tbaa !25
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.ogg_stream_state, ptr %310, i32 0, i32 7
  %312 = load i64, ptr %311, align 8, !tbaa !23
  %313 = getelementptr inbounds i64, ptr %309, i64 %312
  store i64 -1, ptr %313, align 8, !tbaa !14
  %314 = load i32, ptr %12, align 4, !tbaa !15
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %316, label %326

316:                                              ; preds = %291
  %317 = load ptr, ptr %4, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.ogg_stream_state, ptr %317, i32 0, i32 4
  %319 = load ptr, ptr %318, align 8, !tbaa !24
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.ogg_stream_state, ptr %320, i32 0, i32 7
  %322 = load i64, ptr %321, align 8, !tbaa !23
  %323 = getelementptr inbounds i32, ptr %319, i64 %322
  %324 = load i32, ptr %323, align 4, !tbaa !15
  %325 = or i32 %324, 256
  store i32 %325, ptr %323, align 4, !tbaa !15
  store i32 0, ptr %12, align 4, !tbaa !15
  br label %326

326:                                              ; preds = %316, %291
  %327 = load i32, ptr %24, align 4, !tbaa !15
  %328 = icmp slt i32 %327, 255
  br i1 %328, label %329, label %334

329:                                              ; preds = %326
  %330 = load ptr, ptr %4, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.ogg_stream_state, ptr %330, i32 0, i32 7
  %332 = load i64, ptr %331, align 8, !tbaa !23
  %333 = trunc i64 %332 to i32
  store i32 %333, ptr %23, align 4, !tbaa !15
  br label %334

334:                                              ; preds = %329, %326
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.ogg_stream_state, ptr %335, i32 0, i32 7
  %337 = load i64, ptr %336, align 8, !tbaa !23
  %338 = add nsw i64 %337, 1
  store i64 %338, ptr %336, align 8, !tbaa !23
  %339 = load i32, ptr %9, align 4, !tbaa !15
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %9, align 4, !tbaa !15
  %341 = load i32, ptr %24, align 4, !tbaa !15
  %342 = icmp slt i32 %341, 255
  br i1 %342, label %343, label %349

343:                                              ; preds = %334
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.ogg_stream_state, ptr %344, i32 0, i32 7
  %346 = load i64, ptr %345, align 8, !tbaa !23
  %347 = load ptr, ptr %4, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.ogg_stream_state, ptr %347, i32 0, i32 8
  store i64 %346, ptr %348, align 8, !tbaa !26
  br label %349

349:                                              ; preds = %343, %334
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  br label %287, !llvm.loop !32

350:                                              ; preds = %287
  %351 = load i32, ptr %23, align 4, !tbaa !15
  %352 = icmp ne i32 %351, -1
  br i1 %352, label %353, label %361

353:                                              ; preds = %350
  %354 = load i64, ptr %14, align 8, !tbaa !14
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.ogg_stream_state, ptr %355, i32 0, i32 5
  %357 = load ptr, ptr %356, align 8, !tbaa !25
  %358 = load i32, ptr %23, align 4, !tbaa !15
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds i64, ptr %357, i64 %359
  store i64 %354, ptr %360, align 8, !tbaa !14
  br label %361

361:                                              ; preds = %353, %350
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  %362 = load i32, ptr %13, align 4, !tbaa !15
  %363 = icmp ne i32 %362, 0
  br i1 %363, label %364, label %383

364:                                              ; preds = %361
  %365 = load ptr, ptr %4, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.ogg_stream_state, ptr %365, i32 0, i32 12
  store i32 1, ptr %366, align 8, !tbaa !33
  %367 = load ptr, ptr %4, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.ogg_stream_state, ptr %367, i32 0, i32 7
  %369 = load i64, ptr %368, align 8, !tbaa !23
  %370 = icmp sgt i64 %369, 0
  br i1 %370, label %371, label %382

371:                                              ; preds = %364
  %372 = load ptr, ptr %4, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.ogg_stream_state, ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !24
  %375 = load ptr, ptr %4, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.ogg_stream_state, ptr %375, i32 0, i32 7
  %377 = load i64, ptr %376, align 8, !tbaa !23
  %378 = sub nsw i64 %377, 1
  %379 = getelementptr inbounds i32, ptr %374, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !15
  %381 = or i32 %380, 512
  store i32 %381, ptr %379, align 4, !tbaa !15
  br label %382

382:                                              ; preds = %371, %364
  br label %383

383:                                              ; preds = %382, %361
  %384 = load i64, ptr %16, align 8, !tbaa !14
  %385 = add nsw i64 %384, 1
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.ogg_stream_state, ptr %386, i32 0, i32 15
  store i64 %385, ptr %387, align 8, !tbaa !28
  store i32 0, ptr %3, align 4
  store i32 1, ptr %20, align 4
  br label %388

388:                                              ; preds = %383, %148, %144
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  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 8, 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 4, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #3
  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 8, ptr %6) #3
  %389 = load i32, ptr %3, align 4
  ret i32 %389

390:                                              ; preds = %257
  unreachable
}

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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, !6, i64 0}
!10 = !{!"", !6, i64 0, !11, i64 8, !6, i64 16, !11, i64 24}
!11 = !{!"long", !7, i64 0}
!12 = !{!10, !6, i64 16}
!13 = !{!10, !11, i64 24}
!14 = !{!11, !11, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!19, !11, i64 72}
!19 = !{!"", !6, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !7, i64 80, !16, i64 364, !16, i64 368, !16, i64 372, !11, i64 376, !11, i64 384, !11, i64 392, !11, i64 400}
!20 = !{!19, !11, i64 24}
!21 = !{!19, !11, i64 16}
!22 = !{!19, !6, i64 0}
!23 = !{!19, !11, i64 56}
!24 = !{!19, !6, i64 32}
!25 = !{!19, !6, i64 40}
!26 = !{!19, !11, i64 64}
!27 = !{!19, !11, i64 376}
!28 = !{!19, !11, i64 384}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = !{!19, !16, i64 368}


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

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
declare hidden void @_os_body_expand(ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @_os_lacing_expand(ptr noundef, i32 noundef) local_unnamed_addr #0

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

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @ogg_stream_pagein(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = load ptr, ptr %1, align 8, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %1, i64 16
  %5 = load ptr, ptr %4, align 8, !tbaa !11
  %6 = getelementptr inbounds i8, ptr %1, i64 24
  %7 = load i64, ptr %6, align 8, !tbaa !12
  %8 = tail call i32 @ogg_page_version(ptr noundef nonnull %1)
  %9 = tail call i32 @ogg_page_continued(ptr noundef nonnull %1)
  %10 = tail call i32 @ogg_page_bos(ptr noundef nonnull %1)
  %11 = tail call i32 @ogg_page_eos(ptr noundef nonnull %1)
  %12 = tail call i64 @ogg_page_granulepos(ptr noundef nonnull %1)
  %13 = tail call i32 @ogg_page_serialno(ptr noundef nonnull %1)
  %14 = tail call i64 @ogg_page_pageno(ptr noundef nonnull %1)
  %15 = getelementptr inbounds i8, ptr %3, i64 26
  %16 = load i8, ptr %15, align 1, !tbaa !13
  %17 = zext i8 %16 to i32
  %18 = getelementptr inbounds i8, ptr %0, i64 72
  %19 = load i64, ptr %18, align 8, !tbaa !14
  %20 = getelementptr inbounds i8, ptr %0, i64 24
  %21 = load i64, ptr %20, align 8, !tbaa !17
  %.not = icmp eq i64 %21, 0
  br i1 %.not, label %30, label %22

22:                                               ; preds = %2
  %23 = getelementptr inbounds i8, ptr %0, i64 16
  %24 = load i64, ptr %23, align 8, !tbaa !18
  %25 = sub nsw i64 %24, %21
  store i64 %25, ptr %23, align 8, !tbaa !18
  %.not134 = icmp eq i64 %24, %21
  br i1 %.not134, label %29, label %26

26:                                               ; preds = %22
  %27 = load ptr, ptr %0, align 8, !tbaa !19
  %28 = getelementptr inbounds i8, ptr %27, i64 %21
  tail call void @llvm.memmove.p0.p0.i64(ptr align 1 %27, ptr nonnull align 1 %28, i64 %25, i1 false)
  br label %29

29:                                               ; preds = %26, %22
  store i64 0, ptr %20, align 8, !tbaa !17
  br label %30

30:                                               ; preds = %29, %2
  %.not135 = icmp eq i64 %19, 0
  br i1 %.not135, label %52, label %31

31:                                               ; preds = %30
  %32 = getelementptr inbounds i8, ptr %0, i64 56
  %33 = load i64, ptr %32, align 8, !tbaa !20
  %.not136 = icmp eq i64 %33, %19
  br i1 %.not136, label %46, label %34

34:                                               ; preds = %31
  %35 = sub nsw i64 %33, %19
  %36 = getelementptr inbounds i8, ptr %0, i64 32
  %37 = load ptr, ptr %36, align 8, !tbaa !21
  %38 = getelementptr inbounds i32, ptr %37, i64 %19
  %39 = shl i64 %35, 2
  tail call void @llvm.memmove.p0.p0.i64(ptr align 4 %37, ptr nonnull align 4 %38, i64 %39, i1 false)
  %40 = getelementptr inbounds i8, ptr %0, i64 40
  %41 = load ptr, ptr %40, align 8, !tbaa !22
  %42 = getelementptr inbounds i64, ptr %41, i64 %19
  %43 = load i64, ptr %32, align 8, !tbaa !20
  %44 = sub nsw i64 %43, %19
  %45 = shl i64 %44, 3
  tail call void @llvm.memmove.p0.p0.i64(ptr align 8 %41, ptr nonnull align 8 %42, i64 %45, i1 false)
  %.pre = load i64, ptr %32, align 8, !tbaa !20
  br label %46

46:                                               ; preds = %34, %31
  %47 = phi i64 [ %.pre, %34 ], [ %19, %31 ]
  %48 = sub nsw i64 %47, %19
  store i64 %48, ptr %32, align 8, !tbaa !20
  %49 = getelementptr inbounds i8, ptr %0, i64 64
  %50 = load i64, ptr %49, align 8, !tbaa !23
  %51 = sub nsw i64 %50, %19
  store i64 %51, ptr %49, align 8, !tbaa !23
  store i64 0, ptr %18, align 8, !tbaa !14
  br label %52

52:                                               ; preds = %46, %30
  %53 = sext i32 %13 to i64
  %54 = getelementptr inbounds i8, ptr %0, i64 376
  %55 = load i64, ptr %54, align 8, !tbaa !24
  %.not137 = icmp ne i64 %55, %53
  %56 = icmp sgt i32 %8, 0
  %or.cond = select i1 %.not137, i1 true, i1 %56
  br i1 %or.cond, label %182, label %57

57:                                               ; preds = %52
  %58 = add nuw nsw i32 %17, 1
  tail call void @_os_lacing_expand(ptr noundef nonnull %0, i32 noundef %58)
  %59 = getelementptr inbounds i8, ptr %0, i64 384
  %60 = load i64, ptr %59, align 8, !tbaa !25
  %.not138 = icmp eq i64 %14, %60
  br i1 %.not138, label %97, label %61

61:                                               ; preds = %57
  %62 = getelementptr inbounds i8, ptr %0, i64 64
  %63 = load i64, ptr %62, align 8, !tbaa !23
  %64 = getelementptr inbounds i8, ptr %0, i64 56
  %65 = load i64, ptr %64, align 8, !tbaa !20
  %sext = shl i64 %63, 32
  %66 = ashr exact i64 %sext, 32
  %67 = icmp sgt i64 %65, %66
  br i1 %67, label %.lr.ph, label %91

.lr.ph:                                           ; preds = %61
  %68 = getelementptr inbounds i8, ptr %0, i64 32
  %69 = load ptr, ptr %68, align 8, !tbaa !21
  %70 = getelementptr inbounds i8, ptr %0, i64 16
  %.promoted = load i64, ptr %70, align 8, !tbaa !18
  %71 = sub i64 %65, %66
  %min.iters.check = icmp ult i64 %71, 4
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph
  %n.vec = and i64 %71, -4
  %ind.end = add i64 %66, %n.vec
  %72 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.promoted, i64 0
  %73 = getelementptr i32, ptr %69, i64 %66
  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> [ %72, %vector.ph ], [ %80, %vector.body ]
  %vec.phi199 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %81, %vector.body ]
  %74 = getelementptr i32, ptr %73, i64 %index
  %75 = getelementptr inbounds i8, ptr %74, i64 8
  %wide.load = load <2 x i32>, ptr %74, align 4, !tbaa !26
  %wide.load200 = load <2 x i32>, ptr %75, align 4, !tbaa !26
  %76 = and <2 x i32> %wide.load, <i32 255, i32 255>
  %77 = and <2 x i32> %wide.load200, <i32 255, i32 255>
  %78 = zext nneg <2 x i32> %76 to <2 x i64>
  %79 = zext nneg <2 x i32> %77 to <2 x i64>
  %80 = sub <2 x i64> %vec.phi, %78
  %81 = sub <2 x i64> %vec.phi199, %79
  %index.next = add nuw i64 %index, 4
  %82 = icmp eq i64 %index.next, %n.vec
  br i1 %82, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %81, %80
  %83 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %71, %n.vec
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph
  %indvars.iv.ph = phi i64 [ %66, %.lr.ph ], [ %ind.end, %middle.block ]
  %.ph = phi i64 [ %.promoted, %.lr.ph ], [ %83, %middle.block ]
  br label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %scalar.ph ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %84 = phi i64 [ %89, %scalar.ph ], [ %.ph, %scalar.ph.preheader ]
  %85 = getelementptr inbounds i32, ptr %69, i64 %indvars.iv
  %86 = load i32, ptr %85, align 4, !tbaa !26
  %87 = and i32 %86, 255
  %88 = zext nneg i32 %87 to i64
  %89 = sub nsw i64 %84, %88
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %90 = icmp sgt i64 %65, %indvars.iv.next
  br i1 %90, label %scalar.ph, label %._crit_edge, !llvm.loop !31

._crit_edge:                                      ; preds = %scalar.ph, %middle.block
  %.lcssa198 = phi i64 [ %83, %middle.block ], [ %89, %scalar.ph ]
  store i64 %.lcssa198, ptr %70, align 8, !tbaa !18
  br label %91

91:                                               ; preds = %._crit_edge, %61
  store i64 %63, ptr %64, align 8, !tbaa !20
  %.not139 = icmp eq i64 %60, -1
  br i1 %.not139, label %97, label %92

92:                                               ; preds = %91
  %93 = getelementptr inbounds i8, ptr %0, i64 32
  %94 = load ptr, ptr %93, align 8, !tbaa !21
  %95 = add nsw i64 %63, 1
  store i64 %95, ptr %64, align 8, !tbaa !20
  %96 = getelementptr inbounds i32, ptr %94, i64 %63
  store i32 1024, ptr %96, align 4, !tbaa !26
  store i64 %95, ptr %62, align 8, !tbaa !23
  br label %97

97:                                               ; preds = %91, %92, %57
  %.not140 = icmp eq i32 %9, 0
  br i1 %.not140, label %.loopexit, label %98

98:                                               ; preds = %97
  %99 = getelementptr inbounds i8, ptr %0, i64 56
  %100 = load i64, ptr %99, align 8, !tbaa !20
  %101 = icmp slt i64 %100, 1
  br i1 %101, label %109, label %102

102:                                              ; preds = %98
  %103 = getelementptr inbounds i8, ptr %0, i64 32
  %104 = load ptr, ptr %103, align 8, !tbaa !21
  %105 = getelementptr i32, ptr %104, i64 %100
  %106 = getelementptr i8, ptr %105, i64 -4
  %107 = load i32, ptr %106, align 4, !tbaa !26
  %108 = icmp eq i32 %107, 1024
  br i1 %108, label %109, label %.loopexit

109:                                              ; preds = %102, %98
  %invariant.gep = getelementptr i8, ptr %3, i64 27
  %.not170 = icmp eq i8 %16, 0
  br i1 %.not170, label %.loopexit, label %.lr.ph158.preheader

.lr.ph158.preheader:                              ; preds = %109
  %wide.trip.count = zext i8 %16 to i64
  br label %.lr.ph158

.lr.ph158:                                        ; preds = %.lr.ph158.preheader, %114
  %indvars.iv178 = phi i64 [ 0, %.lr.ph158.preheader ], [ %indvars.iv.next179, %114 ]
  %.0116156 = phi ptr [ %5, %.lr.ph158.preheader ], [ %112, %114 ]
  %.0120155 = phi i64 [ %7, %.lr.ph158.preheader ], [ %113, %114 ]
  %gep = getelementptr i8, ptr %invariant.gep, i64 %indvars.iv178
  %110 = load i8, ptr %gep, align 1, !tbaa !13
  %111 = zext i8 %110 to i64
  %112 = getelementptr inbounds i8, ptr %.0116156, i64 %111
  %113 = sub nsw i64 %.0120155, %111
  %.not141 = icmp eq i8 %110, -1
  br i1 %.not141, label %114, label %.loopexit.split.loop.exit150

114:                                              ; preds = %.lr.ph158
  %indvars.iv.next179 = add nuw nsw i64 %indvars.iv178, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next179, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %.lr.ph158, !llvm.loop !32

.loopexit.split.loop.exit150:                     ; preds = %.lr.ph158
  %115 = trunc nuw nsw i64 %indvars.iv178 to i32
  %116 = add nuw nsw i32 %115, 1
  br label %.loopexit

.loopexit:                                        ; preds = %114, %.loopexit.split.loop.exit150, %109, %102, %97
  %.0124 = phi i32 [ %10, %102 ], [ %10, %97 ], [ 0, %109 ], [ 0, %.loopexit.split.loop.exit150 ], [ 0, %114 ]
  %.2 = phi i32 [ 0, %102 ], [ 0, %97 ], [ 0, %109 ], [ %116, %.loopexit.split.loop.exit150 ], [ %17, %114 ]
  %.1121 = phi i64 [ %7, %102 ], [ %7, %97 ], [ %7, %109 ], [ %113, %.loopexit.split.loop.exit150 ], [ %113, %114 ]
  %.1117 = phi ptr [ %5, %102 ], [ %5, %97 ], [ %5, %109 ], [ %112, %.loopexit.split.loop.exit150 ], [ %112, %114 ]
  %.not142 = icmp eq i64 %.1121, 0
  br i1 %.not142, label %125, label %117

117:                                              ; preds = %.loopexit
  %118 = trunc i64 %.1121 to i32
  tail call void @_os_body_expand(ptr noundef %0, i32 noundef %118)
  %119 = load ptr, ptr %0, align 8, !tbaa !19
  %120 = getelementptr inbounds i8, ptr %0, i64 16
  %121 = load i64, ptr %120, align 8, !tbaa !18
  %122 = getelementptr inbounds i8, ptr %119, i64 %121
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 1 %122, ptr align 1 %.1117, i64 %.1121, i1 false)
  %123 = load i64, ptr %120, align 8, !tbaa !18
  %124 = add nsw i64 %123, %.1121
  store i64 %124, ptr %120, align 8, !tbaa !18
  br label %125

125:                                              ; preds = %117, %.loopexit
  %invariant.gep161 = getelementptr i8, ptr %3, i64 27
  %126 = icmp slt i32 %.2, %17
  br i1 %126, label %.lr.ph167, label %._crit_edge168.thread

.lr.ph167:                                        ; preds = %125
  %127 = icmp eq i32 %.0124, 0
  %128 = getelementptr inbounds i8, ptr %0, i64 32
  %129 = load ptr, ptr %128, align 8, !tbaa !21
  %130 = getelementptr inbounds i8, ptr %0, i64 56
  %131 = getelementptr inbounds i8, ptr %0, i64 40
  %132 = load ptr, ptr %131, align 8, !tbaa !22
  %133 = getelementptr inbounds i8, ptr %0, i64 64
  %134 = zext nneg i32 %.2 to i64
  %wide.trip.count183 = zext i8 %16 to i64
  %gep162.peel = getelementptr i8, ptr %invariant.gep161, i64 %134
  %135 = load i8, ptr %gep162.peel, align 1, !tbaa !13
  %136 = zext i8 %135 to i32
  %137 = load i64, ptr %130, align 8, !tbaa !20
  %138 = getelementptr inbounds i32, ptr %129, i64 %137
  store i32 %136, ptr %138, align 4, !tbaa !26
  %139 = getelementptr inbounds i64, ptr %132, i64 %137
  store i64 -1, ptr %139, align 8, !tbaa !33
  br i1 %127, label %145, label %140

140:                                              ; preds = %.lr.ph167
  %141 = load i64, ptr %130, align 8, !tbaa !20
  %142 = getelementptr inbounds i32, ptr %129, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !26
  %144 = or i32 %143, 256
  store i32 %144, ptr %142, align 4, !tbaa !26
  br label %145

145:                                              ; preds = %140, %.lr.ph167
  %.not146.peel = icmp eq i8 %135, -1
  %146 = load i64, ptr %130, align 8, !tbaa !20
  br i1 %.not146.peel, label %.thread.peel, label %147

147:                                              ; preds = %145
  %148 = trunc i64 %146 to i32
  %149 = add nsw i64 %146, 1
  store i64 %149, ptr %133, align 8, !tbaa !23
  br label %151

.thread.peel:                                     ; preds = %145
  %150 = add nsw i64 %146, 1
  br label %151

151:                                              ; preds = %.thread.peel, %147
  %.sink = phi i64 [ %150, %.thread.peel ], [ %149, %147 ]
  %.1148.peel = phi i32 [ -1, %.thread.peel ], [ %148, %147 ]
  store i64 %.sink, ptr %130, align 8
  %indvars.iv.next182.peel = add nuw nsw i64 %134, 1
  %exitcond184.peel.not = icmp eq i64 %indvars.iv.next182.peel, %wide.trip.count183
  br i1 %exitcond184.peel.not, label %._crit_edge168, label %.peel.next

.peel.next:                                       ; preds = %151, %162
  %152 = phi i64 [ %.sink186, %162 ], [ %.sink, %151 ]
  %indvars.iv181 = phi i64 [ %indvars.iv.next182, %162 ], [ %indvars.iv.next182.peel, %151 ]
  %.0115165 = phi i32 [ %.1148, %162 ], [ %.1148.peel, %151 ]
  %gep162 = getelementptr i8, ptr %invariant.gep161, i64 %indvars.iv181
  %153 = load i8, ptr %gep162, align 1, !tbaa !13
  %154 = zext i8 %153 to i32
  %155 = getelementptr inbounds i32, ptr %129, i64 %152
  store i32 %154, ptr %155, align 4, !tbaa !26
  %156 = getelementptr inbounds i64, ptr %132, i64 %152
  store i64 -1, ptr %156, align 8, !tbaa !33
  %.not146 = icmp eq i8 %153, -1
  %157 = load i64, ptr %130, align 8, !tbaa !20
  br i1 %.not146, label %.thread, label %159

.thread:                                          ; preds = %.peel.next
  %158 = add nsw i64 %157, 1
  br label %162

159:                                              ; preds = %.peel.next
  %160 = trunc i64 %157 to i32
  %161 = add nsw i64 %157, 1
  store i64 %161, ptr %133, align 8, !tbaa !23
  br label %162

162:                                              ; preds = %.thread, %159
  %.sink186 = phi i64 [ %158, %.thread ], [ %161, %159 ]
  %.1148 = phi i32 [ %.0115165, %.thread ], [ %160, %159 ]
  store i64 %.sink186, ptr %130, align 8
  %indvars.iv.next182 = add nuw nsw i64 %indvars.iv181, 1
  %exitcond184.not = icmp eq i64 %indvars.iv.next182, %wide.trip.count183
  br i1 %exitcond184.not, label %._crit_edge168, label %.peel.next, !llvm.loop !34

._crit_edge168:                                   ; preds = %162, %151
  %.0115.lcssa = phi i32 [ %.1148.peel, %151 ], [ %.1148, %162 ]
  %.not143 = icmp eq i32 %.0115.lcssa, -1
  br i1 %.not143, label %._crit_edge168.thread, label %163

163:                                              ; preds = %._crit_edge168
  %164 = getelementptr inbounds i8, ptr %0, i64 40
  %165 = load ptr, ptr %164, align 8, !tbaa !22
  %166 = sext i32 %.0115.lcssa to i64
  %167 = getelementptr inbounds i64, ptr %165, i64 %166
  store i64 %12, ptr %167, align 8, !tbaa !33
  br label %._crit_edge168.thread

._crit_edge168.thread:                            ; preds = %125, %163, %._crit_edge168
  %.not144 = icmp eq i32 %11, 0
  br i1 %.not144, label %180, label %168

168:                                              ; preds = %._crit_edge168.thread
  %169 = getelementptr inbounds i8, ptr %0, i64 368
  store i32 1, ptr %169, align 8, !tbaa !36
  %170 = getelementptr inbounds i8, ptr %0, i64 56
  %171 = load i64, ptr %170, align 8, !tbaa !20
  %172 = icmp sgt i64 %171, 0
  br i1 %172, label %173, label %180

173:                                              ; preds = %168
  %174 = getelementptr inbounds i8, ptr %0, i64 32
  %175 = load ptr, ptr %174, align 8, !tbaa !21
  %176 = getelementptr i32, ptr %175, i64 %171
  %177 = getelementptr i8, ptr %176, i64 -4
  %178 = load i32, ptr %177, align 4, !tbaa !26
  %179 = or i32 %178, 512
  store i32 %179, ptr %177, align 4, !tbaa !26
  br label %180

180:                                              ; preds = %168, %173, %._crit_edge168.thread
  %181 = add nsw i64 %14, 1
  store i64 %181, ptr %59, align 8, !tbaa !25
  br label %182

182:                                              ; preds = %52, %180
  %.0 = phi i32 [ 0, %180 ], [ -1, %52 ]
  ret i32 %.0
}

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

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

!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, !7, i64 0}
!6 = !{!"", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!6, !7, i64 16}
!12 = !{!6, !10, i64 24}
!13 = !{!8, !8, i64 0}
!14 = !{!15, !10, i64 72}
!15 = !{!"", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !8, i64 80, !16, i64 364, !16, i64 368, !16, i64 372, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400}
!16 = !{!"int", !8, i64 0}
!17 = !{!15, !10, i64 24}
!18 = !{!15, !10, i64 16}
!19 = !{!15, !7, i64 0}
!20 = !{!15, !10, i64 56}
!21 = !{!15, !7, i64 32}
!22 = !{!15, !7, i64 40}
!23 = !{!15, !10, i64 64}
!24 = !{!15, !10, i64 376}
!25 = !{!15, !10, i64 384}
!26 = !{!16, !16, i64 0}
!27 = distinct !{!27, !28, !29, !30}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!"llvm.loop.isvectorized", i32 1}
!30 = !{!"llvm.loop.unroll.runtime.disable"}
!31 = distinct !{!31, !28, !30, !29}
!32 = distinct !{!32, !28}
!33 = !{!10, !10, i64 0}
!34 = distinct !{!34, !28, !35}
!35 = !{!"llvm.loop.peeled.count", i32 1}
!36 = !{!15, !16, i64 368}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MergedLoadStoreMotionPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass