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

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

%struct.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 }
%struct.vorbis_info = type { i32, i32, i64, i64, i64, i64, i64, ptr }

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @ov_read_filter(ptr noundef %0, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #1 {
  %10 = alloca i64, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i16, align 2
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i32 %2, ptr %13, align 4, !tbaa !9
  store i32 %3, ptr %14, align 4, !tbaa !9
  store i32 %4, ptr %15, align 4, !tbaa !9
  store i32 %5, ptr %16, align 4, !tbaa !9
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %39 = call i32 @host_is_big_endian()
  store i32 %39, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %40 = load ptr, ptr %11, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.OggVorbis_File, ptr %40, i32 0, i32 13
  %42 = load i32, ptr %41, align 8, !tbaa !11
  %43 = icmp slt i32 %42, 2
  br i1 %43, label %44, label %45

44:                                               ; preds = %9
  store i64 -131, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %452

45:                                               ; preds = %9
  %46 = load i32, ptr %15, align 4, !tbaa !9
  %47 = icmp sle i32 %46, 0
  br i1 %47, label %48, label %49

48:                                               ; preds = %45
  store i64 -131, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %452

49:                                               ; preds = %45
  br label %50

50:                                               ; preds = %80, %49
  br label %51

51:                                               ; preds = %50
  %52 = load ptr, ptr %11, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.OggVorbis_File, ptr %52, i32 0, i32 13
  %54 = load i32, ptr %53, align 8, !tbaa !11
  %55 = icmp eq i32 %54, 4
  br i1 %55, label %56, label %65

56:                                               ; preds = %51
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.OggVorbis_File, ptr %57, i32 0, i32 19
  %59 = call i32 @vorbis_synthesis_pcmout(ptr noundef %58, ptr noundef %24)
  %60 = sext i32 %59 to i64
  store i64 %60, ptr %25, align 8, !tbaa !21
  %61 = load i64, ptr %25, align 8, !tbaa !21
  %62 = icmp ne i64 %61, 0
  br i1 %62, label %63, label %64

63:                                               ; preds = %56
  br label %81

64:                                               ; preds = %56
  br label %65

65:                                               ; preds = %64, %51
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %66 = load ptr, ptr %11, align 8, !tbaa !5
  %67 = call i32 @_fetch_and_process_packet(ptr noundef %66, ptr noundef null, i32 noundef 1, i32 noundef 1)
  store i32 %67, ptr %27, align 4, !tbaa !9
  %68 = load i32, ptr %27, align 4, !tbaa !9
  %69 = icmp eq i32 %68, -2
  br i1 %69, label %70, label %71

70:                                               ; preds = %65
  store i64 0, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %78

71:                                               ; preds = %65
  %72 = load i32, ptr %27, align 4, !tbaa !9
  %73 = icmp sle i32 %72, 0
  br i1 %73, label %74, label %77

74:                                               ; preds = %71
  %75 = load i32, ptr %27, align 4, !tbaa !9
  %76 = sext i32 %75 to i64
  store i64 %76, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %78

77:                                               ; preds = %71
  store i32 0, ptr %26, align 4
  br label %78

78:                                               ; preds = %77, %74, %70
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  %79 = load i32, ptr %26, align 4
  switch i32 %79, label %452 [
    i32 0, label %80
  ]

80:                                               ; preds = %78
  br label %50

81:                                               ; preds = %63
  %82 = load i64, ptr %25, align 8, !tbaa !21
  %83 = icmp sgt i64 %82, 0
  br i1 %83, label %84, label %450

84:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %85 = load ptr, ptr %11, align 8, !tbaa !5
  %86 = call ptr @ov_info(ptr noundef %85, i32 noundef -1)
  %87 = getelementptr inbounds %struct.vorbis_info, ptr %86, i32 0, i32 1
  %88 = load i32, ptr %87, align 4, !tbaa !22
  %89 = sext i32 %88 to i64
  store i64 %89, ptr %28, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  %90 = load i32, ptr %15, align 4, !tbaa !9
  %91 = sext i32 %90 to i64
  %92 = load i64, ptr %28, align 8, !tbaa !21
  %93 = mul nsw i64 %91, %92
  store i64 %93, ptr %29, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 2, ptr %30) #4
  %94 = load i64, ptr %28, align 8, !tbaa !21
  %95 = icmp slt i64 %94, 1
  br i1 %95, label %99, label %96

96:                                               ; preds = %84
  %97 = load i64, ptr %28, align 8, !tbaa !21
  %98 = icmp sgt i64 %97, 255
  br i1 %98, label %99, label %100

99:                                               ; preds = %96, %84
  store i64 -131, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %449

100:                                              ; preds = %96
  %101 = load i64, ptr %25, align 8, !tbaa !21
  %102 = load i32, ptr %13, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = load i64, ptr %29, align 8, !tbaa !21
  %105 = sdiv i64 %103, %104
  %106 = icmp sgt i64 %101, %105
  br i1 %106, label %107, label %112

107:                                              ; preds = %100
  %108 = load i32, ptr %13, align 4, !tbaa !9
  %109 = sext i32 %108 to i64
  %110 = load i64, ptr %29, align 8, !tbaa !21
  %111 = sdiv i64 %109, %110
  store i64 %111, ptr %25, align 8, !tbaa !21
  br label %112

112:                                              ; preds = %107, %100
  %113 = load i64, ptr %25, align 8, !tbaa !21
  %114 = icmp sle i64 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %112
  store i64 -131, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %449

116:                                              ; preds = %112
  %117 = load ptr, ptr %18, align 8, !tbaa !5
  %118 = icmp ne ptr %117, null
  br i1 %118, label %119, label %125

119:                                              ; preds = %116
  %120 = load ptr, ptr %18, align 8, !tbaa !5
  %121 = load ptr, ptr %24, align 8, !tbaa !5
  %122 = load i64, ptr %28, align 8, !tbaa !21
  %123 = load i64, ptr %25, align 8, !tbaa !21
  %124 = load ptr, ptr %19, align 8, !tbaa !5
  call void %120(ptr noundef %121, i64 noundef %122, i64 noundef %123, ptr noundef %124)
  br label %125

125:                                              ; preds = %119, %116
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %126 = load i32, ptr %15, align 4, !tbaa !9
  %127 = icmp eq i32 %126, 1
  br i1 %127, label %128, label %181

128:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  %129 = load i32, ptr %16, align 4, !tbaa !9
  %130 = icmp ne i32 %129, 0
  %131 = zext i1 %130 to i64
  %132 = select i1 %130, i32 0, i32 128
  store i32 %132, ptr %32, align 4, !tbaa !9
  call void @vorbis_fpu_setround(ptr noundef %30)
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %133

133:                                              ; preds = %176, %128
  %134 = load i32, ptr %21, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = load i64, ptr %25, align 8, !tbaa !21
  %137 = icmp slt i64 %135, %136
  br i1 %137, label %138, label %179

138:                                              ; preds = %133
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %172, %138
  %140 = load i32, ptr %20, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = load i64, ptr %28, align 8, !tbaa !21
  %143 = icmp slt i64 %141, %142
  br i1 %143, label %144, label %175

144:                                              ; preds = %139
  %145 = load ptr, ptr %24, align 8, !tbaa !5
  %146 = load i32, ptr %20, align 4, !tbaa !9
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds ptr, ptr %145, i64 %147
  %149 = load ptr, ptr %148, align 8, !tbaa !5
  %150 = load i32, ptr %21, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds float, ptr %149, i64 %151
  %153 = load float, ptr %152, align 4, !tbaa !24
  %154 = fmul float %153, 1.280000e+02
  %155 = fpext float %154 to double
  %156 = call i32 @vorbis_ftoi(double noundef %155)
  store i32 %156, ptr %31, align 4, !tbaa !9
  %157 = load i32, ptr %31, align 4, !tbaa !9
  %158 = icmp sgt i32 %157, 127
  br i1 %158, label %159, label %160

159:                                              ; preds = %144
  store i32 127, ptr %31, align 4, !tbaa !9
  br label %165

160:                                              ; preds = %144
  %161 = load i32, ptr %31, align 4, !tbaa !9
  %162 = icmp slt i32 %161, -128
  br i1 %162, label %163, label %164

163:                                              ; preds = %160
  store i32 -128, ptr %31, align 4, !tbaa !9
  br label %164

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

165:                                              ; preds = %164, %159
  %166 = load i32, ptr %31, align 4, !tbaa !9
  %167 = load i32, ptr %32, align 4, !tbaa !9
  %168 = add nsw i32 %166, %167
  %169 = trunc i32 %168 to i8
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = getelementptr inbounds i8, ptr %170, i32 1
  store ptr %171, ptr %12, align 8, !tbaa !5
  store i8 %169, ptr %170, align 1, !tbaa !26
  br label %172

172:                                              ; preds = %165
  %173 = load i32, ptr %20, align 4, !tbaa !9
  %174 = add nsw i32 %173, 1
  store i32 %174, ptr %20, align 4, !tbaa !9
  br label %139, !llvm.loop !27

175:                                              ; preds = %139
  br label %176

176:                                              ; preds = %175
  %177 = load i32, ptr %21, align 4, !tbaa !9
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %21, align 4, !tbaa !9
  br label %133, !llvm.loop !29

179:                                              ; preds = %133
  %180 = load i16, ptr %30, align 2, !tbaa !30
  call void @vorbis_fpu_restore(i16 noundef signext %180)
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %420

181:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  %182 = load i32, ptr %16, align 4, !tbaa !9
  %183 = icmp ne i32 %182, 0
  %184 = zext i1 %183 to i64
  %185 = select i1 %183, i32 0, i32 32768
  store i32 %185, ptr %33, align 4, !tbaa !9
  %186 = load i32, ptr %22, align 4, !tbaa !9
  %187 = load i32, ptr %14, align 4, !tbaa !9
  %188 = icmp eq i32 %186, %187
  br i1 %188, label %189, label %303

189:                                              ; preds = %181
  %190 = load i32, ptr %16, align 4, !tbaa !9
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %246

192:                                              ; preds = %189
  call void @vorbis_fpu_setround(ptr noundef %30)
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %193

193:                                              ; preds = %241, %192
  %194 = load i32, ptr %20, align 4, !tbaa !9
  %195 = sext i32 %194 to i64
  %196 = load i64, ptr %28, align 8, !tbaa !21
  %197 = icmp slt i64 %195, %196
  br i1 %197, label %198, label %244

198:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %199 = load ptr, ptr %24, align 8, !tbaa !5
  %200 = load i32, ptr %20, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds ptr, ptr %199, i64 %201
  %203 = load ptr, ptr %202, align 8, !tbaa !5
  store ptr %203, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = load i32, ptr %20, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i16, ptr %204, i64 %206
  store ptr %207, ptr %35, align 8, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %237, %198
  %209 = load i32, ptr %21, align 4, !tbaa !9
  %210 = sext i32 %209 to i64
  %211 = load i64, ptr %25, align 8, !tbaa !21
  %212 = icmp slt i64 %210, %211
  br i1 %212, label %213, label %240

213:                                              ; preds = %208
  %214 = load ptr, ptr %34, align 8, !tbaa !5
  %215 = load i32, ptr %21, align 4, !tbaa !9
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %214, i64 %216
  %218 = load float, ptr %217, align 4, !tbaa !24
  %219 = fmul float %218, 3.276800e+04
  %220 = fpext float %219 to double
  %221 = call i32 @vorbis_ftoi(double noundef %220)
  store i32 %221, ptr %31, align 4, !tbaa !9
  %222 = load i32, ptr %31, align 4, !tbaa !9
  %223 = icmp sgt i32 %222, 32767
  br i1 %223, label %224, label %225

224:                                              ; preds = %213
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %230

225:                                              ; preds = %213
  %226 = load i32, ptr %31, align 4, !tbaa !9
  %227 = icmp slt i32 %226, -32768
  br i1 %227, label %228, label %229

228:                                              ; preds = %225
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %229

229:                                              ; preds = %228, %225
  br label %230

230:                                              ; preds = %229, %224
  %231 = load i32, ptr %31, align 4, !tbaa !9
  %232 = trunc i32 %231 to i16
  %233 = load ptr, ptr %35, align 8, !tbaa !5
  store i16 %232, ptr %233, align 2, !tbaa !30
  %234 = load i64, ptr %28, align 8, !tbaa !21
  %235 = load ptr, ptr %35, align 8, !tbaa !5
  %236 = getelementptr inbounds i16, ptr %235, i64 %234
  store ptr %236, ptr %35, align 8, !tbaa !5
  br label %237

237:                                              ; preds = %230
  %238 = load i32, ptr %21, align 4, !tbaa !9
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %21, align 4, !tbaa !9
  br label %208, !llvm.loop !32

240:                                              ; preds = %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  br label %241

241:                                              ; preds = %240
  %242 = load i32, ptr %20, align 4, !tbaa !9
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %20, align 4, !tbaa !9
  br label %193, !llvm.loop !33

244:                                              ; preds = %193
  %245 = load i16, ptr %30, align 2, !tbaa !30
  call void @vorbis_fpu_restore(i16 noundef signext %245)
  br label %302

246:                                              ; preds = %189
  call void @vorbis_fpu_setround(ptr noundef %30)
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %247

247:                                              ; preds = %297, %246
  %248 = load i32, ptr %20, align 4, !tbaa !9
  %249 = sext i32 %248 to i64
  %250 = load i64, ptr %28, align 8, !tbaa !21
  %251 = icmp slt i64 %249, %250
  br i1 %251, label %252, label %300

252:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %253 = load ptr, ptr %24, align 8, !tbaa !5
  %254 = load i32, ptr %20, align 4, !tbaa !9
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds ptr, ptr %253, i64 %255
  %257 = load ptr, ptr %256, align 8, !tbaa !5
  store ptr %257, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %258 = load ptr, ptr %12, align 8, !tbaa !5
  %259 = load i32, ptr %20, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds i16, ptr %258, i64 %260
  store ptr %261, ptr %37, align 8, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %262

262:                                              ; preds = %293, %252
  %263 = load i32, ptr %21, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = load i64, ptr %25, align 8, !tbaa !21
  %266 = icmp slt i64 %264, %265
  br i1 %266, label %267, label %296

267:                                              ; preds = %262
  %268 = load ptr, ptr %36, align 8, !tbaa !5
  %269 = load i32, ptr %21, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds float, ptr %268, i64 %270
  %272 = load float, ptr %271, align 4, !tbaa !24
  %273 = fmul float %272, 3.276800e+04
  %274 = fpext float %273 to double
  %275 = call i32 @vorbis_ftoi(double noundef %274)
  store i32 %275, ptr %31, align 4, !tbaa !9
  %276 = load i32, ptr %31, align 4, !tbaa !9
  %277 = icmp sgt i32 %276, 32767
  br i1 %277, label %278, label %279

278:                                              ; preds = %267
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %284

279:                                              ; preds = %267
  %280 = load i32, ptr %31, align 4, !tbaa !9
  %281 = icmp slt i32 %280, -32768
  br i1 %281, label %282, label %283

282:                                              ; preds = %279
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %282, %279
  br label %284

284:                                              ; preds = %283, %278
  %285 = load i32, ptr %31, align 4, !tbaa !9
  %286 = load i32, ptr %33, align 4, !tbaa !9
  %287 = add nsw i32 %285, %286
  %288 = trunc i32 %287 to i16
  %289 = load ptr, ptr %37, align 8, !tbaa !5
  store i16 %288, ptr %289, align 2, !tbaa !30
  %290 = load i64, ptr %28, align 8, !tbaa !21
  %291 = load ptr, ptr %37, align 8, !tbaa !5
  %292 = getelementptr inbounds i16, ptr %291, i64 %290
  store ptr %292, ptr %37, align 8, !tbaa !5
  br label %293

293:                                              ; preds = %284
  %294 = load i32, ptr %21, align 4, !tbaa !9
  %295 = add nsw i32 %294, 1
  store i32 %295, ptr %21, align 4, !tbaa !9
  br label %262, !llvm.loop !34

296:                                              ; preds = %262
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  br label %297

297:                                              ; preds = %296
  %298 = load i32, ptr %20, align 4, !tbaa !9
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %20, align 4, !tbaa !9
  br label %247, !llvm.loop !35

300:                                              ; preds = %247
  %301 = load i16, ptr %30, align 2, !tbaa !30
  call void @vorbis_fpu_restore(i16 noundef signext %301)
  br label %302

302:                                              ; preds = %300, %244
  br label %419

303:                                              ; preds = %181
  %304 = load i32, ptr %14, align 4, !tbaa !9
  %305 = icmp ne i32 %304, 0
  br i1 %305, label %306, label %362

306:                                              ; preds = %303
  call void @vorbis_fpu_setround(ptr noundef %30)
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %357, %306
  %308 = load i32, ptr %21, align 4, !tbaa !9
  %309 = sext i32 %308 to i64
  %310 = load i64, ptr %25, align 8, !tbaa !21
  %311 = icmp slt i64 %309, %310
  br i1 %311, label %312, label %360

312:                                              ; preds = %307
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %313

313:                                              ; preds = %353, %312
  %314 = load i32, ptr %20, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = load i64, ptr %28, align 8, !tbaa !21
  %317 = icmp slt i64 %315, %316
  br i1 %317, label %318, label %356

318:                                              ; preds = %313
  %319 = load ptr, ptr %24, align 8, !tbaa !5
  %320 = load i32, ptr %20, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds ptr, ptr %319, i64 %321
  %323 = load ptr, ptr %322, align 8, !tbaa !5
  %324 = load i32, ptr %21, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds float, ptr %323, i64 %325
  %327 = load float, ptr %326, align 4, !tbaa !24
  %328 = fmul float %327, 3.276800e+04
  %329 = fpext float %328 to double
  %330 = call i32 @vorbis_ftoi(double noundef %329)
  store i32 %330, ptr %31, align 4, !tbaa !9
  %331 = load i32, ptr %31, align 4, !tbaa !9
  %332 = icmp sgt i32 %331, 32767
  br i1 %332, label %333, label %334

333:                                              ; preds = %318
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %339

334:                                              ; preds = %318
  %335 = load i32, ptr %31, align 4, !tbaa !9
  %336 = icmp slt i32 %335, -32768
  br i1 %336, label %337, label %338

337:                                              ; preds = %334
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %338

338:                                              ; preds = %337, %334
  br label %339

339:                                              ; preds = %338, %333
  %340 = load i32, ptr %33, align 4, !tbaa !9
  %341 = load i32, ptr %31, align 4, !tbaa !9
  %342 = add nsw i32 %341, %340
  store i32 %342, ptr %31, align 4, !tbaa !9
  %343 = load i32, ptr %31, align 4, !tbaa !9
  %344 = ashr i32 %343, 8
  %345 = trunc i32 %344 to i8
  %346 = load ptr, ptr %12, align 8, !tbaa !5
  %347 = getelementptr inbounds i8, ptr %346, i32 1
  store ptr %347, ptr %12, align 8, !tbaa !5
  store i8 %345, ptr %346, align 1, !tbaa !26
  %348 = load i32, ptr %31, align 4, !tbaa !9
  %349 = and i32 %348, 255
  %350 = trunc i32 %349 to i8
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = getelementptr inbounds i8, ptr %351, i32 1
  store ptr %352, ptr %12, align 8, !tbaa !5
  store i8 %350, ptr %351, align 1, !tbaa !26
  br label %353

353:                                              ; preds = %339
  %354 = load i32, ptr %20, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %20, align 4, !tbaa !9
  br label %313, !llvm.loop !36

356:                                              ; preds = %313
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %21, align 4, !tbaa !9
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %21, align 4, !tbaa !9
  br label %307, !llvm.loop !37

360:                                              ; preds = %307
  %361 = load i16, ptr %30, align 2, !tbaa !30
  call void @vorbis_fpu_restore(i16 noundef signext %361)
  br label %418

362:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  call void @vorbis_fpu_setround(ptr noundef %30)
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %363

363:                                              ; preds = %413, %362
  %364 = load i32, ptr %21, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = load i64, ptr %25, align 8, !tbaa !21
  %367 = icmp slt i64 %365, %366
  br i1 %367, label %368, label %416

368:                                              ; preds = %363
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %409, %368
  %370 = load i32, ptr %20, align 4, !tbaa !9
  %371 = sext i32 %370 to i64
  %372 = load i64, ptr %28, align 8, !tbaa !21
  %373 = icmp slt i64 %371, %372
  br i1 %373, label %374, label %412

374:                                              ; preds = %369
  %375 = load ptr, ptr %24, align 8, !tbaa !5
  %376 = load i32, ptr %20, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds ptr, ptr %375, i64 %377
  %379 = load ptr, ptr %378, align 8, !tbaa !5
  %380 = load i32, ptr %21, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds float, ptr %379, i64 %381
  %383 = load float, ptr %382, align 4, !tbaa !24
  %384 = fmul float %383, 3.276800e+04
  %385 = fpext float %384 to double
  %386 = call i32 @vorbis_ftoi(double noundef %385)
  store i32 %386, ptr %38, align 4, !tbaa !9
  %387 = load i32, ptr %38, align 4, !tbaa !9
  %388 = icmp sgt i32 %387, 32767
  br i1 %388, label %389, label %390

389:                                              ; preds = %374
  store i32 32767, ptr %38, align 4, !tbaa !9
  br label %395

390:                                              ; preds = %374
  %391 = load i32, ptr %38, align 4, !tbaa !9
  %392 = icmp slt i32 %391, -32768
  br i1 %392, label %393, label %394

393:                                              ; preds = %390
  store i32 -32768, ptr %38, align 4, !tbaa !9
  br label %394

394:                                              ; preds = %393, %390
  br label %395

395:                                              ; preds = %394, %389
  %396 = load i32, ptr %33, align 4, !tbaa !9
  %397 = load i32, ptr %38, align 4, !tbaa !9
  %398 = add nsw i32 %397, %396
  store i32 %398, ptr %38, align 4, !tbaa !9
  %399 = load i32, ptr %38, align 4, !tbaa !9
  %400 = and i32 %399, 255
  %401 = trunc i32 %400 to i8
  %402 = load ptr, ptr %12, align 8, !tbaa !5
  %403 = getelementptr inbounds i8, ptr %402, i32 1
  store ptr %403, ptr %12, align 8, !tbaa !5
  store i8 %401, ptr %402, align 1, !tbaa !26
  %404 = load i32, ptr %38, align 4, !tbaa !9
  %405 = ashr i32 %404, 8
  %406 = trunc i32 %405 to i8
  %407 = load ptr, ptr %12, align 8, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %407, i32 1
  store ptr %408, ptr %12, align 8, !tbaa !5
  store i8 %406, ptr %407, align 1, !tbaa !26
  br label %409

409:                                              ; preds = %395
  %410 = load i32, ptr %20, align 4, !tbaa !9
  %411 = add nsw i32 %410, 1
  store i32 %411, ptr %20, align 4, !tbaa !9
  br label %369, !llvm.loop !38

412:                                              ; preds = %369
  br label %413

413:                                              ; preds = %412
  %414 = load i32, ptr %21, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  store i32 %415, ptr %21, align 4, !tbaa !9
  br label %363, !llvm.loop !39

416:                                              ; preds = %363
  %417 = load i16, ptr %30, align 2, !tbaa !30
  call void @vorbis_fpu_restore(i16 noundef signext %417)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %418

418:                                              ; preds = %416, %360
  br label %419

419:                                              ; preds = %418, %302
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  br label %420

420:                                              ; preds = %419, %179
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  %421 = load ptr, ptr %11, align 8, !tbaa !5
  %422 = getelementptr inbounds %struct.OggVorbis_File, ptr %421, i32 0, i32 19
  %423 = load i64, ptr %25, align 8, !tbaa !21
  %424 = trunc i64 %423 to i32
  %425 = call i32 @vorbis_synthesis_read(ptr noundef %422, i32 noundef %424)
  %426 = load ptr, ptr %11, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.OggVorbis_File, ptr %426, i32 0, i32 10
  %428 = load ptr, ptr %427, align 8, !tbaa !40
  %429 = call i32 @vorbis_synthesis_halfrate_p(ptr noundef %428)
  store i32 %429, ptr %23, align 4, !tbaa !9
  %430 = load i64, ptr %25, align 8, !tbaa !21
  %431 = load i32, ptr %23, align 4, !tbaa !9
  %432 = zext i32 %431 to i64
  %433 = shl i64 %430, %432
  %434 = load ptr, ptr %11, align 8, !tbaa !5
  %435 = getelementptr inbounds %struct.OggVorbis_File, ptr %434, i32 0, i32 12
  %436 = load i64, ptr %435, align 8, !tbaa !41
  %437 = add nsw i64 %436, %433
  store i64 %437, ptr %435, align 8, !tbaa !41
  %438 = load ptr, ptr %17, align 8, !tbaa !5
  %439 = icmp ne ptr %438, null
  br i1 %439, label %440, label %445

440:                                              ; preds = %420
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.OggVorbis_File, ptr %441, i32 0, i32 15
  %443 = load i32, ptr %442, align 8, !tbaa !42
  %444 = load ptr, ptr %17, align 8, !tbaa !5
  store i32 %443, ptr %444, align 4, !tbaa !9
  br label %445

445:                                              ; preds = %440, %420
  %446 = load i64, ptr %25, align 8, !tbaa !21
  %447 = load i64, ptr %29, align 8, !tbaa !21
  %448 = mul nsw i64 %446, %447
  store i64 %448, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %449

449:                                              ; preds = %445, %115, %99
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %452

450:                                              ; preds = %81
  %451 = load i64, ptr %25, align 8, !tbaa !21
  store i64 %451, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %452

452:                                              ; preds = %450, %449, %78, %48, %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  %453 = load i64, ptr %10, align 8
  ret i64 %453
}

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @vorbis_ftoi(double noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @vorbis_fpu_restore(i16 noundef signext) #2

; Function Attrs: nounwind uwtable
declare hidden i32 @host_is_big_endian() #1

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

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

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


; 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i64 @ov_read_filter(ptr noundef %0, ptr nocapture noundef writeonly %1, i32 noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, ptr noundef writeonly %6, ptr noundef readonly %7, ptr noundef %8) local_unnamed_addr #1 {
  %10 = alloca ptr, align 8
  %11 = alloca i16, align 2
  %12 = tail call i32 @host_is_big_endian()
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  %13 = getelementptr inbounds i8, ptr %0, i64 128
  %14 = load i32, ptr %13, align 8, !tbaa !5
  %15 = icmp slt i32 %14, 2
  %16 = icmp slt i32 %4, 1
  %or.cond181 = or i1 %16, %15
  br i1 %or.cond181, label %.thread, label %.preheader188

.preheader188:                                    ; preds = %9
  %17 = getelementptr inbounds i8, ptr %0, i64 576
  br label %18

thread-pre-split:                                 ; preds = %26
  %.pr = load i32, ptr %13, align 8, !tbaa !5
  br label %18

18:                                               ; preds = %.preheader188, %thread-pre-split
  %19 = phi i32 [ %.pr, %thread-pre-split ], [ %14, %.preheader188 ]
  %20 = icmp eq i32 %19, 4
  br i1 %20, label %21, label %23

21:                                               ; preds = %18
  %22 = call i32 @vorbis_synthesis_pcmout(ptr noundef nonnull %17, ptr noundef nonnull %10)
  %.not = icmp eq i32 %22, 0
  br i1 %.not, label %23, label %28

23:                                               ; preds = %21, %18
  %24 = call i32 @_fetch_and_process_packet(ptr noundef nonnull %0, ptr noundef null, i32 noundef 1, i32 noundef 1)
  %25 = icmp eq i32 %24, -2
  br i1 %25, label %.thread, label %26

26:                                               ; preds = %23
  %27 = icmp sgt i32 %24, 0
  br i1 %27, label %thread-pre-split, label %.thread.loopexit.split.loop.exit

28:                                               ; preds = %21
  %29 = sext i32 %22 to i64
  %30 = icmp sgt i32 %22, 0
  br i1 %30, label %31, label %.thread

31:                                               ; preds = %28
  %32 = call ptr @ov_info(ptr noundef nonnull %0, i32 noundef -1)
  %33 = getelementptr inbounds i8, ptr %32, i64 4
  %34 = load i32, ptr %33, align 4, !tbaa !19
  %35 = sext i32 %34 to i64
  %36 = zext nneg i32 %4 to i64
  %37 = mul nsw i64 %35, %36
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %11) #5
  %38 = add i32 %34, -256
  %or.cond = icmp ult i32 %38, -255
  br i1 %or.cond, label %136, label %39

39:                                               ; preds = %31
  %40 = sext i32 %2 to i64
  %41 = sdiv i64 %40, %37
  %spec.select = call i64 @llvm.smin.i64(i64 %41, i64 %29)
  %42 = icmp slt i64 %spec.select, 1
  br i1 %42, label %136, label %43

43:                                               ; preds = %39
  %.not176 = icmp eq ptr %7, null
  br i1 %.not176, label %46, label %44

44:                                               ; preds = %43
  %45 = load ptr, ptr %10, align 8, !tbaa !21
  call void %7(ptr noundef %45, i64 noundef %35, i64 noundef %spec.select, ptr noundef %8) #5
  br label %46

46:                                               ; preds = %44, %43
  %47 = icmp eq i32 %4, 1
  %.not179 = icmp eq i32 %5, 0
  br i1 %47, label %.preheader.us.preheader, label %61

.preheader.us.preheader:                          ; preds = %46
  %48 = select i1 %.not179, i32 128, i32 0
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %wide.trip.count280 = zext nneg i32 %34 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us225
  %indvars.iv282 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next283, %._crit_edge.us225 ]
  %.0134222.us = phi ptr [ %1, %.preheader.us.preheader ], [ %60, %._crit_edge.us225 ]
  br label %49

49:                                               ; preds = %.preheader.us, %49
  %indvars.iv277 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next278, %49 ]
  %.1135220.us = phi ptr [ %.0134222.us, %.preheader.us ], [ %60, %49 ]
  %50 = load ptr, ptr %10, align 8, !tbaa !21
  %51 = getelementptr inbounds ptr, ptr %50, i64 %indvars.iv277
  %52 = load ptr, ptr %51, align 8, !tbaa !21
  %53 = getelementptr inbounds float, ptr %52, i64 %indvars.iv282
  %54 = load float, ptr %53, align 4, !tbaa !22
  %55 = fmul float %54, 1.280000e+02
  %56 = fpext float %55 to double
  %57 = call i32 @vorbis_ftoi(double noundef %56)
  %spec.store.select.us = call i32 @llvm.smax.i32(i32 %57, i32 -128)
  %.0148.us = call i32 @llvm.smin.i32(i32 %spec.store.select.us, i32 127)
  %58 = add nsw i32 %.0148.us, %48
  %59 = trunc i32 %58 to i8
  %60 = getelementptr inbounds i8, ptr %.1135220.us, i64 1
  store i8 %59, ptr %.1135220.us, align 1, !tbaa !24
  %indvars.iv.next278 = add nuw nsw i64 %indvars.iv277, 1
  %exitcond281.not = icmp eq i64 %indvars.iv.next278, %wide.trip.count280
  br i1 %exitcond281.not, label %._crit_edge.us225, label %49, !llvm.loop !25

._crit_edge.us225:                                ; preds = %49
  %indvars.iv.next283 = add nuw nsw i64 %indvars.iv282, 1
  %exitcond286.not = icmp eq i64 %indvars.iv.next283, %spec.select
  br i1 %exitcond286.not, label %._crit_edge223, label %.preheader.us, !llvm.loop !27

61:                                               ; preds = %46
  %62 = select i1 %.not179, i32 32768, i32 0
  %63 = icmp eq i32 %12, %3
  br i1 %63, label %64, label %90

64:                                               ; preds = %61
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %wide.trip.count272 = zext nneg i32 %34 to i64
  br i1 %.not179, label %.lr.ph.us217, label %.lr.ph.us

.lr.ph.us:                                        ; preds = %64, %._crit_edge.us210
  %indvars.iv259 = phi i64 [ %indvars.iv.next260, %._crit_edge.us210 ], [ 0, %64 ]
  %65 = load ptr, ptr %10, align 8, !tbaa !21
  %66 = getelementptr inbounds ptr, ptr %65, i64 %indvars.iv259
  %67 = load ptr, ptr %66, align 8, !tbaa !21
  %68 = getelementptr inbounds i16, ptr %1, i64 %indvars.iv259
  br label %69

69:                                               ; preds = %.lr.ph.us, %69
  %indvars.iv254 = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next255, %69 ]
  %.0133205.us = phi ptr [ %68, %.lr.ph.us ], [ %76, %69 ]
  %70 = getelementptr inbounds float, ptr %67, i64 %indvars.iv254
  %71 = load float, ptr %70, align 4, !tbaa !22
  %72 = fmul float %71, 3.276800e+04
  %73 = fpext float %72 to double
  %74 = call i32 @vorbis_ftoi(double noundef %73)
  %spec.store.select2.us = call i32 @llvm.smax.i32(i32 %74, i32 -32768)
  %.1149.us = call i32 @llvm.smin.i32(i32 %spec.store.select2.us, i32 32767)
  %75 = trunc nsw i32 %.1149.us to i16
  store i16 %75, ptr %.0133205.us, align 2, !tbaa !28
  %76 = getelementptr inbounds i16, ptr %.0133205.us, i64 %35
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %exitcond258.not = icmp eq i64 %indvars.iv.next255, %spec.select
  br i1 %exitcond258.not, label %._crit_edge.us210, label %69, !llvm.loop !30

._crit_edge.us210:                                ; preds = %69
  %indvars.iv.next260 = add nuw nsw i64 %indvars.iv259, 1
  %exitcond263.not = icmp eq i64 %indvars.iv.next260, %wide.trip.count272
  br i1 %exitcond263.not, label %._crit_edge223, label %.lr.ph.us, !llvm.loop !31

.lr.ph.us217:                                     ; preds = %64, %._crit_edge.us218
  %indvars.iv269 = phi i64 [ %indvars.iv.next270, %._crit_edge.us218 ], [ 0, %64 ]
  %77 = load ptr, ptr %10, align 8, !tbaa !21
  %78 = getelementptr inbounds ptr, ptr %77, i64 %indvars.iv269
  %79 = load ptr, ptr %78, align 8, !tbaa !21
  %80 = getelementptr inbounds i16, ptr %1, i64 %indvars.iv269
  br label %81

81:                                               ; preds = %.lr.ph.us217, %81
  %indvars.iv264 = phi i64 [ 0, %.lr.ph.us217 ], [ %indvars.iv.next265, %81 ]
  %.0131212.us = phi ptr [ %80, %.lr.ph.us217 ], [ %89, %81 ]
  %82 = getelementptr inbounds float, ptr %79, i64 %indvars.iv264
  %83 = load float, ptr %82, align 4, !tbaa !22
  %84 = fmul float %83, 3.276800e+04
  %85 = fpext float %84 to double
  %86 = call i32 @vorbis_ftoi(double noundef %85)
  %spec.store.select3.us = call i32 @llvm.smax.i32(i32 %86, i32 -32768)
  %.2150.us = call i32 @llvm.smin.i32(i32 %spec.store.select3.us, i32 32767)
  %87 = add nsw i32 %.2150.us, %62
  %88 = trunc i32 %87 to i16
  store i16 %88, ptr %.0131212.us, align 2, !tbaa !28
  %89 = getelementptr inbounds i16, ptr %.0131212.us, i64 %35
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %exitcond268.not = icmp eq i64 %indvars.iv.next265, %spec.select
  br i1 %exitcond268.not, label %._crit_edge.us218, label %81, !llvm.loop !32

._crit_edge.us218:                                ; preds = %81
  %indvars.iv.next270 = add nuw nsw i64 %indvars.iv269, 1
  %exitcond273.not = icmp eq i64 %indvars.iv.next270, %wide.trip.count272
  br i1 %exitcond273.not, label %._crit_edge223, label %.lr.ph.us217, !llvm.loop !33

90:                                               ; preds = %61
  %.not178 = icmp eq i32 %3, 0
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %wide.trip.count247 = zext nneg i32 %34 to i64
  br i1 %.not178, label %.preheader186.us, label %.preheader187.us

.preheader187.us:                                 ; preds = %90, %._crit_edge.us
  %indvars.iv237 = phi i64 [ %indvars.iv.next238, %._crit_edge.us ], [ 0, %90 ]
  %.2136195.us = phi ptr [ %105, %._crit_edge.us ], [ %1, %90 ]
  br label %91

91:                                               ; preds = %.preheader187.us, %91
  %indvars.iv = phi i64 [ 0, %.preheader187.us ], [ %indvars.iv.next, %91 ]
  %.3137193.us = phi ptr [ %.2136195.us, %.preheader187.us ], [ %105, %91 ]
  %92 = load ptr, ptr %10, align 8, !tbaa !21
  %93 = getelementptr inbounds ptr, ptr %92, i64 %indvars.iv
  %94 = load ptr, ptr %93, align 8, !tbaa !21
  %95 = getelementptr inbounds float, ptr %94, i64 %indvars.iv237
  %96 = load float, ptr %95, align 4, !tbaa !22
  %97 = fmul float %96, 3.276800e+04
  %98 = fpext float %97 to double
  %99 = call i32 @vorbis_ftoi(double noundef %98)
  %spec.store.select4.us = call i32 @llvm.smax.i32(i32 %99, i32 -32768)
  %.3151.us = call i32 @llvm.smin.i32(i32 %spec.store.select4.us, i32 32767)
  %100 = add nsw i32 %.3151.us, %62
  %101 = lshr i32 %100, 8
  %102 = trunc i32 %101 to i8
  %103 = getelementptr inbounds i8, ptr %.3137193.us, i64 1
  store i8 %102, ptr %.3137193.us, align 1, !tbaa !24
  %104 = trunc i32 %.3151.us to i8
  %105 = getelementptr inbounds i8, ptr %.3137193.us, i64 2
  store i8 %104, ptr %103, align 1, !tbaa !24
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count247
  br i1 %exitcond.not, label %._crit_edge.us, label %91, !llvm.loop !34

._crit_edge.us:                                   ; preds = %91
  %indvars.iv.next238 = add nuw nsw i64 %indvars.iv237, 1
  %exitcond240.not = icmp eq i64 %indvars.iv.next238, %spec.select
  br i1 %exitcond240.not, label %._crit_edge223, label %.preheader187.us, !llvm.loop !35

.preheader186.us:                                 ; preds = %90, %._crit_edge.us202
  %indvars.iv249 = phi i64 [ %indvars.iv.next250, %._crit_edge.us202 ], [ 0, %90 ]
  %.4200.us = phi ptr [ %120, %._crit_edge.us202 ], [ %1, %90 ]
  br label %106

106:                                              ; preds = %.preheader186.us, %106
  %indvars.iv244 = phi i64 [ 0, %.preheader186.us ], [ %indvars.iv.next245, %106 ]
  %.5198.us = phi ptr [ %.4200.us, %.preheader186.us ], [ %120, %106 ]
  %107 = load ptr, ptr %10, align 8, !tbaa !21
  %108 = getelementptr inbounds ptr, ptr %107, i64 %indvars.iv244
  %109 = load ptr, ptr %108, align 8, !tbaa !21
  %110 = getelementptr inbounds float, ptr %109, i64 %indvars.iv249
  %111 = load float, ptr %110, align 4, !tbaa !22
  %112 = fmul float %111, 3.276800e+04
  %113 = fpext float %112 to double
  %114 = call i32 @vorbis_ftoi(double noundef %113)
  %spec.store.select5.us = call i32 @llvm.smax.i32(i32 %114, i32 -32768)
  %.0.us = call i32 @llvm.smin.i32(i32 %spec.store.select5.us, i32 32767)
  %115 = add nsw i32 %.0.us, %62
  %116 = trunc i32 %.0.us to i8
  %117 = getelementptr inbounds i8, ptr %.5198.us, i64 1
  store i8 %116, ptr %.5198.us, align 1, !tbaa !24
  %118 = lshr i32 %115, 8
  %119 = trunc i32 %118 to i8
  %120 = getelementptr inbounds i8, ptr %.5198.us, i64 2
  store i8 %119, ptr %117, align 1, !tbaa !24
  %indvars.iv.next245 = add nuw nsw i64 %indvars.iv244, 1
  %exitcond248.not = icmp eq i64 %indvars.iv.next245, %wide.trip.count247
  br i1 %exitcond248.not, label %._crit_edge.us202, label %106, !llvm.loop !36

._crit_edge.us202:                                ; preds = %106
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %exitcond253.not = icmp eq i64 %indvars.iv.next250, %spec.select
  br i1 %exitcond253.not, label %._crit_edge223, label %.preheader186.us, !llvm.loop !37

._crit_edge223:                                   ; preds = %._crit_edge.us, %._crit_edge.us202, %._crit_edge.us210, %._crit_edge.us218, %._crit_edge.us225
  %.sink = load i16, ptr %11, align 2, !tbaa !28
  call void @vorbis_fpu_restore(i16 noundef signext %.sink)
  %121 = trunc nuw nsw i64 %spec.select to i32
  %122 = call i32 @vorbis_synthesis_read(ptr noundef nonnull %17, i32 noundef %121)
  %123 = getelementptr inbounds i8, ptr %0, i64 104
  %124 = load ptr, ptr %123, align 8, !tbaa !38
  %125 = call i32 @vorbis_synthesis_halfrate_p(ptr noundef %124)
  %126 = zext nneg i32 %125 to i64
  %127 = shl i64 %spec.select, %126
  %128 = getelementptr inbounds i8, ptr %0, i64 120
  %129 = load i64, ptr %128, align 8, !tbaa !39
  %130 = add nsw i64 %127, %129
  store i64 %130, ptr %128, align 8, !tbaa !39
  %.not180 = icmp eq ptr %6, null
  br i1 %.not180, label %134, label %131

131:                                              ; preds = %._crit_edge223
  %132 = getelementptr inbounds i8, ptr %0, i64 144
  %133 = load i32, ptr %132, align 8, !tbaa !40
  store i32 %133, ptr %6, align 4, !tbaa !41
  br label %134

134:                                              ; preds = %131, %._crit_edge223
  %135 = mul nuw nsw i64 %spec.select, %37
  br label %136

136:                                              ; preds = %39, %31, %134
  %.2 = phi i64 [ %135, %134 ], [ -131, %31 ], [ -131, %39 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %11) #5
  br label %.thread

.thread.loopexit.split.loop.exit:                 ; preds = %26
  %137 = sext i32 %24 to i64
  br label %.thread

.thread:                                          ; preds = %23, %.thread.loopexit.split.loop.exit, %28, %9, %136
  %.3 = phi i64 [ %.2, %136 ], [ -131, %9 ], [ %29, %28 ], [ %137, %.thread.loopexit.split.loop.exit ], [ 0, %23 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  ret i64 %.3
}

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @vorbis_ftoi(double noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @vorbis_fpu_restore(i16 noundef signext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden i32 @host_is_big_endian() local_unnamed_addr #1

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #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 = { inlinehint nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint nounwind uwtable "min-legal-vector-width"="128" "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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!20, !10, i64 4}
!20 = !{!"vorbis_info", !10, i64 0, !10, i64 4, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !7, i64 48}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !8, i64 0}
!24 = !{!8, !8, i64 0}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!29, !29, i64 0}
!29 = !{!"short", !8, i64 0}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !26}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !26}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !26}
!38 = !{!6, !7, i64 104}
!39 = !{!6, !11, i64 120}
!40 = !{!6, !10, i64 144}
!41 = !{!10, !10, i64 0}


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