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

; 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

declare i32 @vorbis_synthesis_halfrate_p(ptr noundef) #1

declare i32 @vorbis_synthesis_pcmout(ptr noundef, ptr noundef) #1

declare i32 @vorbis_synthesis_read(ptr noundef, i32 noundef) #1

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

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

; 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) #2 {
  %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) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %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) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %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 %442

45:                                               ; preds = %9
  br label %46

46:                                               ; preds = %76, %45
  br label %47

47:                                               ; preds = %46
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.OggVorbis_File, ptr %48, i32 0, i32 13
  %50 = load i32, ptr %49, align 8, !tbaa !11
  %51 = icmp eq i32 %50, 4
  br i1 %51, label %52, label %61

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

59:                                               ; preds = %52
  br label %77

60:                                               ; preds = %52
  br label %61

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

66:                                               ; preds = %61
  store i64 0, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %74

67:                                               ; preds = %61
  %68 = load i32, ptr %27, align 4, !tbaa !9
  %69 = icmp sle i32 %68, 0
  br i1 %69, label %70, label %73

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

73:                                               ; preds = %67
  store i32 0, ptr %26, align 4
  br label %74

74:                                               ; preds = %73, %70, %66
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  %75 = load i32, ptr %26, align 4
  switch i32 %75, label %442 [
    i32 0, label %76
  ]

76:                                               ; preds = %74
  br label %46

77:                                               ; preds = %59
  %78 = load i64, ptr %25, align 8, !tbaa !21
  %79 = icmp sgt i64 %78, 0
  br i1 %79, label %80, label %440

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

97:                                               ; preds = %80
  %98 = load i32, ptr %13, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = load i64, ptr %29, align 8, !tbaa !21
  %101 = sdiv i64 %99, %100
  store i64 %101, ptr %25, align 8, !tbaa !21
  br label %102

102:                                              ; preds = %97, %80
  %103 = load i64, ptr %25, align 8, !tbaa !21
  %104 = icmp sle i64 %103, 0
  br i1 %104, label %105, label %106

105:                                              ; preds = %102
  store i64 -131, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %439

106:                                              ; preds = %102
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  %108 = icmp ne ptr %107, null
  br i1 %108, label %109, label %115

109:                                              ; preds = %106
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  %111 = load ptr, ptr %24, align 8, !tbaa !5
  %112 = load i64, ptr %28, align 8, !tbaa !21
  %113 = load i64, ptr %25, align 8, !tbaa !21
  %114 = load ptr, ptr %19, align 8, !tbaa !5
  call void %110(ptr noundef %111, i64 noundef %112, i64 noundef %113, ptr noundef %114)
  br label %115

115:                                              ; preds = %109, %106
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %116 = load i32, ptr %15, align 4, !tbaa !9
  %117 = icmp eq i32 %116, 1
  br i1 %117, label %118, label %171

118:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %119 = load i32, ptr %16, align 4, !tbaa !9
  %120 = icmp ne i32 %119, 0
  %121 = zext i1 %120 to i64
  %122 = select i1 %120, i32 0, i32 128
  store i32 %122, 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 %123

123:                                              ; preds = %166, %118
  %124 = load i32, ptr %21, align 4, !tbaa !9
  %125 = sext i32 %124 to i64
  %126 = load i64, ptr %25, align 8, !tbaa !21
  %127 = icmp slt i64 %125, %126
  br i1 %127, label %128, label %169

128:                                              ; preds = %123
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %162, %128
  %130 = load i32, ptr %20, align 4, !tbaa !9
  %131 = sext i32 %130 to i64
  %132 = load i64, ptr %28, align 8, !tbaa !21
  %133 = icmp slt i64 %131, %132
  br i1 %133, label %134, label %165

134:                                              ; preds = %129
  %135 = load ptr, ptr %24, align 8, !tbaa !5
  %136 = load i32, ptr %20, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds ptr, ptr %135, i64 %137
  %139 = load ptr, ptr %138, align 8, !tbaa !5
  %140 = load i32, ptr %21, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds float, ptr %139, i64 %141
  %143 = load float, ptr %142, align 4, !tbaa !26
  %144 = fmul float %143, 1.280000e+02
  %145 = fpext float %144 to double
  %146 = call i32 @vorbis_ftoi(double noundef %145)
  store i32 %146, ptr %31, align 4, !tbaa !9
  %147 = load i32, ptr %31, align 4, !tbaa !9
  %148 = icmp sgt i32 %147, 127
  br i1 %148, label %149, label %150

149:                                              ; preds = %134
  store i32 127, ptr %31, align 4, !tbaa !9
  br label %155

150:                                              ; preds = %134
  %151 = load i32, ptr %31, align 4, !tbaa !9
  %152 = icmp slt i32 %151, -128
  br i1 %152, label %153, label %154

153:                                              ; preds = %150
  store i32 -128, ptr %31, align 4, !tbaa !9
  br label %154

154:                                              ; preds = %153, %150
  br label %155

155:                                              ; preds = %154, %149
  %156 = load i32, ptr %31, align 4, !tbaa !9
  %157 = load i32, ptr %32, align 4, !tbaa !9
  %158 = add nsw i32 %156, %157
  %159 = trunc i32 %158 to i8
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  %161 = getelementptr inbounds i8, ptr %160, i32 1
  store ptr %161, ptr %12, align 8, !tbaa !5
  store i8 %159, ptr %160, align 1, !tbaa !28
  br label %162

162:                                              ; preds = %155
  %163 = load i32, ptr %20, align 4, !tbaa !9
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %20, align 4, !tbaa !9
  br label %129, !llvm.loop !29

165:                                              ; preds = %129
  br label %166

166:                                              ; preds = %165
  %167 = load i32, ptr %21, align 4, !tbaa !9
  %168 = add nsw i32 %167, 1
  store i32 %168, ptr %21, align 4, !tbaa !9
  br label %123, !llvm.loop !31

169:                                              ; preds = %123
  %170 = load i16, ptr %30, align 2, !tbaa !24
  call void @vorbis_fpu_restore(i16 noundef signext %170)
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %410

171:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %172 = load i32, ptr %16, align 4, !tbaa !9
  %173 = icmp ne i32 %172, 0
  %174 = zext i1 %173 to i64
  %175 = select i1 %173, i32 0, i32 32768
  store i32 %175, ptr %33, align 4, !tbaa !9
  %176 = load i32, ptr %22, align 4, !tbaa !9
  %177 = load i32, ptr %14, align 4, !tbaa !9
  %178 = icmp eq i32 %176, %177
  br i1 %178, label %179, label %293

179:                                              ; preds = %171
  %180 = load i32, ptr %16, align 4, !tbaa !9
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %236

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

183:                                              ; preds = %231, %182
  %184 = load i32, ptr %20, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = load i64, ptr %28, align 8, !tbaa !21
  %187 = icmp slt i64 %185, %186
  br i1 %187, label %188, label %234

188:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %189 = load ptr, ptr %24, align 8, !tbaa !5
  %190 = load i32, ptr %20, align 4, !tbaa !9
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  store ptr %193, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %194 = load ptr, ptr %12, align 8, !tbaa !5
  %195 = load i32, ptr %20, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i16, ptr %194, i64 %196
  store ptr %197, ptr %35, align 8, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %198

198:                                              ; preds = %227, %188
  %199 = load i32, ptr %21, align 4, !tbaa !9
  %200 = sext i32 %199 to i64
  %201 = load i64, ptr %25, align 8, !tbaa !21
  %202 = icmp slt i64 %200, %201
  br i1 %202, label %203, label %230

203:                                              ; preds = %198
  %204 = load ptr, ptr %34, align 8, !tbaa !5
  %205 = load i32, ptr %21, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds float, ptr %204, i64 %206
  %208 = load float, ptr %207, align 4, !tbaa !26
  %209 = fmul float %208, 3.276800e+04
  %210 = fpext float %209 to double
  %211 = call i32 @vorbis_ftoi(double noundef %210)
  store i32 %211, ptr %31, align 4, !tbaa !9
  %212 = load i32, ptr %31, align 4, !tbaa !9
  %213 = icmp sgt i32 %212, 32767
  br i1 %213, label %214, label %215

214:                                              ; preds = %203
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %220

215:                                              ; preds = %203
  %216 = load i32, ptr %31, align 4, !tbaa !9
  %217 = icmp slt i32 %216, -32768
  br i1 %217, label %218, label %219

218:                                              ; preds = %215
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %219

219:                                              ; preds = %218, %215
  br label %220

220:                                              ; preds = %219, %214
  %221 = load i32, ptr %31, align 4, !tbaa !9
  %222 = trunc i32 %221 to i16
  %223 = load ptr, ptr %35, align 8, !tbaa !5
  store i16 %222, ptr %223, align 2, !tbaa !24
  %224 = load i64, ptr %28, align 8, !tbaa !21
  %225 = load ptr, ptr %35, align 8, !tbaa !5
  %226 = getelementptr inbounds i16, ptr %225, i64 %224
  store ptr %226, ptr %35, align 8, !tbaa !5
  br label %227

227:                                              ; preds = %220
  %228 = load i32, ptr %21, align 4, !tbaa !9
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %21, align 4, !tbaa !9
  br label %198, !llvm.loop !32

230:                                              ; preds = %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %231

231:                                              ; preds = %230
  %232 = load i32, ptr %20, align 4, !tbaa !9
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %20, align 4, !tbaa !9
  br label %183, !llvm.loop !33

234:                                              ; preds = %183
  %235 = load i16, ptr %30, align 2, !tbaa !24
  call void @vorbis_fpu_restore(i16 noundef signext %235)
  br label %292

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

237:                                              ; preds = %287, %236
  %238 = load i32, ptr %20, align 4, !tbaa !9
  %239 = sext i32 %238 to i64
  %240 = load i64, ptr %28, align 8, !tbaa !21
  %241 = icmp slt i64 %239, %240
  br i1 %241, label %242, label %290

242:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %243 = load ptr, ptr %24, align 8, !tbaa !5
  %244 = load i32, ptr %20, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds ptr, ptr %243, i64 %245
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  store ptr %247, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %248 = load ptr, ptr %12, align 8, !tbaa !5
  %249 = load i32, ptr %20, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i16, ptr %248, i64 %250
  store ptr %251, ptr %37, align 8, !tbaa !5
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %252

252:                                              ; preds = %283, %242
  %253 = load i32, ptr %21, align 4, !tbaa !9
  %254 = sext i32 %253 to i64
  %255 = load i64, ptr %25, align 8, !tbaa !21
  %256 = icmp slt i64 %254, %255
  br i1 %256, label %257, label %286

257:                                              ; preds = %252
  %258 = load ptr, ptr %36, align 8, !tbaa !5
  %259 = load i32, ptr %21, align 4, !tbaa !9
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds float, ptr %258, i64 %260
  %262 = load float, ptr %261, align 4, !tbaa !26
  %263 = fmul float %262, 3.276800e+04
  %264 = fpext float %263 to double
  %265 = call i32 @vorbis_ftoi(double noundef %264)
  store i32 %265, ptr %31, align 4, !tbaa !9
  %266 = load i32, ptr %31, align 4, !tbaa !9
  %267 = icmp sgt i32 %266, 32767
  br i1 %267, label %268, label %269

268:                                              ; preds = %257
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %274

269:                                              ; preds = %257
  %270 = load i32, ptr %31, align 4, !tbaa !9
  %271 = icmp slt i32 %270, -32768
  br i1 %271, label %272, label %273

272:                                              ; preds = %269
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %273

273:                                              ; preds = %272, %269
  br label %274

274:                                              ; preds = %273, %268
  %275 = load i32, ptr %31, align 4, !tbaa !9
  %276 = load i32, ptr %33, align 4, !tbaa !9
  %277 = add nsw i32 %275, %276
  %278 = trunc i32 %277 to i16
  %279 = load ptr, ptr %37, align 8, !tbaa !5
  store i16 %278, ptr %279, align 2, !tbaa !24
  %280 = load i64, ptr %28, align 8, !tbaa !21
  %281 = load ptr, ptr %37, align 8, !tbaa !5
  %282 = getelementptr inbounds i16, ptr %281, i64 %280
  store ptr %282, ptr %37, align 8, !tbaa !5
  br label %283

283:                                              ; preds = %274
  %284 = load i32, ptr %21, align 4, !tbaa !9
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %21, align 4, !tbaa !9
  br label %252, !llvm.loop !34

286:                                              ; preds = %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %287

287:                                              ; preds = %286
  %288 = load i32, ptr %20, align 4, !tbaa !9
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %20, align 4, !tbaa !9
  br label %237, !llvm.loop !35

290:                                              ; preds = %237
  %291 = load i16, ptr %30, align 2, !tbaa !24
  call void @vorbis_fpu_restore(i16 noundef signext %291)
  br label %292

292:                                              ; preds = %290, %234
  br label %409

293:                                              ; preds = %171
  %294 = load i32, ptr %14, align 4, !tbaa !9
  %295 = icmp ne i32 %294, 0
  br i1 %295, label %296, label %352

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

297:                                              ; preds = %347, %296
  %298 = load i32, ptr %21, align 4, !tbaa !9
  %299 = sext i32 %298 to i64
  %300 = load i64, ptr %25, align 8, !tbaa !21
  %301 = icmp slt i64 %299, %300
  br i1 %301, label %302, label %350

302:                                              ; preds = %297
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %303

303:                                              ; preds = %343, %302
  %304 = load i32, ptr %20, align 4, !tbaa !9
  %305 = sext i32 %304 to i64
  %306 = load i64, ptr %28, align 8, !tbaa !21
  %307 = icmp slt i64 %305, %306
  br i1 %307, label %308, label %346

308:                                              ; preds = %303
  %309 = load ptr, ptr %24, align 8, !tbaa !5
  %310 = load i32, ptr %20, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds ptr, ptr %309, i64 %311
  %313 = load ptr, ptr %312, align 8, !tbaa !5
  %314 = load i32, ptr %21, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds float, ptr %313, i64 %315
  %317 = load float, ptr %316, align 4, !tbaa !26
  %318 = fmul float %317, 3.276800e+04
  %319 = fpext float %318 to double
  %320 = call i32 @vorbis_ftoi(double noundef %319)
  store i32 %320, ptr %31, align 4, !tbaa !9
  %321 = load i32, ptr %31, align 4, !tbaa !9
  %322 = icmp sgt i32 %321, 32767
  br i1 %322, label %323, label %324

323:                                              ; preds = %308
  store i32 32767, ptr %31, align 4, !tbaa !9
  br label %329

324:                                              ; preds = %308
  %325 = load i32, ptr %31, align 4, !tbaa !9
  %326 = icmp slt i32 %325, -32768
  br i1 %326, label %327, label %328

327:                                              ; preds = %324
  store i32 -32768, ptr %31, align 4, !tbaa !9
  br label %328

328:                                              ; preds = %327, %324
  br label %329

329:                                              ; preds = %328, %323
  %330 = load i32, ptr %33, align 4, !tbaa !9
  %331 = load i32, ptr %31, align 4, !tbaa !9
  %332 = add nsw i32 %331, %330
  store i32 %332, ptr %31, align 4, !tbaa !9
  %333 = load i32, ptr %31, align 4, !tbaa !9
  %334 = ashr i32 %333, 8
  %335 = trunc i32 %334 to i8
  %336 = load ptr, ptr %12, align 8, !tbaa !5
  %337 = getelementptr inbounds i8, ptr %336, i32 1
  store ptr %337, ptr %12, align 8, !tbaa !5
  store i8 %335, ptr %336, align 1, !tbaa !28
  %338 = load i32, ptr %31, align 4, !tbaa !9
  %339 = and i32 %338, 255
  %340 = trunc i32 %339 to i8
  %341 = load ptr, ptr %12, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i32 1
  store ptr %342, ptr %12, align 8, !tbaa !5
  store i8 %340, ptr %341, align 1, !tbaa !28
  br label %343

343:                                              ; preds = %329
  %344 = load i32, ptr %20, align 4, !tbaa !9
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %20, align 4, !tbaa !9
  br label %303, !llvm.loop !36

346:                                              ; preds = %303
  br label %347

347:                                              ; preds = %346
  %348 = load i32, ptr %21, align 4, !tbaa !9
  %349 = add nsw i32 %348, 1
  store i32 %349, ptr %21, align 4, !tbaa !9
  br label %297, !llvm.loop !37

350:                                              ; preds = %297
  %351 = load i16, ptr %30, align 2, !tbaa !24
  call void @vorbis_fpu_restore(i16 noundef signext %351)
  br label %408

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

353:                                              ; preds = %403, %352
  %354 = load i32, ptr %21, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = load i64, ptr %25, align 8, !tbaa !21
  %357 = icmp slt i64 %355, %356
  br i1 %357, label %358, label %406

358:                                              ; preds = %353
  store i32 0, ptr %20, align 4, !tbaa !9
  br label %359

359:                                              ; preds = %399, %358
  %360 = load i32, ptr %20, align 4, !tbaa !9
  %361 = sext i32 %360 to i64
  %362 = load i64, ptr %28, align 8, !tbaa !21
  %363 = icmp slt i64 %361, %362
  br i1 %363, label %364, label %402

364:                                              ; preds = %359
  %365 = load ptr, ptr %24, align 8, !tbaa !5
  %366 = load i32, ptr %20, align 4, !tbaa !9
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds ptr, ptr %365, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = load i32, ptr %21, align 4, !tbaa !9
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds float, ptr %369, i64 %371
  %373 = load float, ptr %372, align 4, !tbaa !26
  %374 = fmul float %373, 3.276800e+04
  %375 = fpext float %374 to double
  %376 = call i32 @vorbis_ftoi(double noundef %375)
  store i32 %376, ptr %38, align 4, !tbaa !9
  %377 = load i32, ptr %38, align 4, !tbaa !9
  %378 = icmp sgt i32 %377, 32767
  br i1 %378, label %379, label %380

379:                                              ; preds = %364
  store i32 32767, ptr %38, align 4, !tbaa !9
  br label %385

380:                                              ; preds = %364
  %381 = load i32, ptr %38, align 4, !tbaa !9
  %382 = icmp slt i32 %381, -32768
  br i1 %382, label %383, label %384

383:                                              ; preds = %380
  store i32 -32768, ptr %38, align 4, !tbaa !9
  br label %384

384:                                              ; preds = %383, %380
  br label %385

385:                                              ; preds = %384, %379
  %386 = load i32, ptr %33, align 4, !tbaa !9
  %387 = load i32, ptr %38, align 4, !tbaa !9
  %388 = add nsw i32 %387, %386
  store i32 %388, ptr %38, align 4, !tbaa !9
  %389 = load i32, ptr %38, align 4, !tbaa !9
  %390 = and i32 %389, 255
  %391 = trunc i32 %390 to i8
  %392 = load ptr, ptr %12, align 8, !tbaa !5
  %393 = getelementptr inbounds i8, ptr %392, i32 1
  store ptr %393, ptr %12, align 8, !tbaa !5
  store i8 %391, ptr %392, align 1, !tbaa !28
  %394 = load i32, ptr %38, align 4, !tbaa !9
  %395 = ashr i32 %394, 8
  %396 = trunc i32 %395 to i8
  %397 = load ptr, ptr %12, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %397, i32 1
  store ptr %398, ptr %12, align 8, !tbaa !5
  store i8 %396, ptr %397, align 1, !tbaa !28
  br label %399

399:                                              ; preds = %385
  %400 = load i32, ptr %20, align 4, !tbaa !9
  %401 = add nsw i32 %400, 1
  store i32 %401, ptr %20, align 4, !tbaa !9
  br label %359, !llvm.loop !38

402:                                              ; preds = %359
  br label %403

403:                                              ; preds = %402
  %404 = load i32, ptr %21, align 4, !tbaa !9
  %405 = add nsw i32 %404, 1
  store i32 %405, ptr %21, align 4, !tbaa !9
  br label %353, !llvm.loop !39

406:                                              ; preds = %353
  %407 = load i16, ptr %30, align 2, !tbaa !24
  call void @vorbis_fpu_restore(i16 noundef signext %407)
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %408

408:                                              ; preds = %406, %350
  br label %409

409:                                              ; preds = %408, %292
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %410

410:                                              ; preds = %409, %169
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  %411 = load ptr, ptr %11, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.OggVorbis_File, ptr %411, i32 0, i32 19
  %413 = load i64, ptr %25, align 8, !tbaa !21
  %414 = trunc i64 %413 to i32
  %415 = call i32 @vorbis_synthesis_read(ptr noundef %412, i32 noundef %414)
  %416 = load ptr, ptr %11, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.OggVorbis_File, ptr %416, i32 0, i32 10
  %418 = load ptr, ptr %417, align 8, !tbaa !40
  %419 = call i32 @vorbis_synthesis_halfrate_p(ptr noundef %418)
  store i32 %419, ptr %23, align 4, !tbaa !9
  %420 = load i64, ptr %25, align 8, !tbaa !21
  %421 = load i32, ptr %23, align 4, !tbaa !9
  %422 = zext i32 %421 to i64
  %423 = shl i64 %420, %422
  %424 = load ptr, ptr %11, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.OggVorbis_File, ptr %424, i32 0, i32 12
  %426 = load i64, ptr %425, align 8, !tbaa !41
  %427 = add nsw i64 %426, %423
  store i64 %427, ptr %425, align 8, !tbaa !41
  %428 = load ptr, ptr %17, align 8, !tbaa !5
  %429 = icmp ne ptr %428, null
  br i1 %429, label %430, label %435

430:                                              ; preds = %410
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.OggVorbis_File, ptr %431, i32 0, i32 15
  %433 = load i32, ptr %432, align 8, !tbaa !42
  %434 = load ptr, ptr %17, align 8, !tbaa !5
  store i32 %433, ptr %434, align 4, !tbaa !9
  br label %435

435:                                              ; preds = %430, %410
  %436 = load i64, ptr %25, align 8, !tbaa !21
  %437 = load i64, ptr %29, align 8, !tbaa !21
  %438 = mul nsw i64 %436, %437
  store i64 %438, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %439

439:                                              ; preds = %435, %105
  call void @llvm.lifetime.end.p0(i64 2, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %442

440:                                              ; preds = %77
  %441 = load i64, ptr %25, align 8, !tbaa !21
  store i64 %441, ptr %10, align 8
  store i32 1, ptr %26, align 4
  br label %442

442:                                              ; preds = %440, %439, %74, %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %443 = load i64, ptr %10, align 8
  ret i64 %443
}

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind 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"="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 #4 = { 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 #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, !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 = !{!"short", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"float", !7, i64 0}
!28 = !{!7, !7, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}
!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

declare i32 @vorbis_synthesis_halfrate_p(ptr noundef) local_unnamed_addr #1

declare i32 @vorbis_synthesis_pcmout(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @vorbis_synthesis_read(ptr noundef, i32 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 #2

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

; 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 #2 {
  %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) #6
  %13 = getelementptr inbounds i8, ptr %0, i64 128
  %14 = load i32, ptr %13, align 8, !tbaa !5
  %15 = icmp slt i32 %14, 2
  br i1 %15, label %.thread, label %.preheader184

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

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

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

20:                                               ; preds = %17
  %21 = call i32 @vorbis_synthesis_pcmout(ptr noundef nonnull %16, ptr noundef nonnull %10) #6
  %.not = icmp eq i32 %21, 0
  br i1 %.not, label %22, label %27

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

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

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

30:                                               ; preds = %27
  %31 = call ptr @ov_info(ptr noundef nonnull %0, i32 noundef -1)
  %32 = getelementptr inbounds i8, ptr %31, i64 4
  %33 = load i32, ptr %32, align 4, !tbaa !19
  %34 = sext i32 %33 to i64
  %35 = sext i32 %4 to i64
  %36 = mul nsw i64 %34, %35
  call void @llvm.lifetime.start.p0(i64 2, ptr nonnull %11) #6
  %37 = sext i32 %2 to i64
  %38 = sdiv i64 %37, %36
  %spec.select = call i64 @llvm.smin.i64(i64 %38, i64 %28)
  %39 = icmp slt i64 %38, 1
  br i1 %39, label %138, label %40

40:                                               ; preds = %30
  %.not173 = icmp eq ptr %7, null
  br i1 %.not173, label %43, label %41

41:                                               ; preds = %40
  %42 = load ptr, ptr %10, align 8, !tbaa !21
  call void %7(ptr noundef %42, i64 noundef %34, i64 noundef %spec.select, ptr noundef %8) #6
  br label %43

43:                                               ; preds = %41, %40
  %44 = icmp eq i32 %4, 1
  %.not176 = icmp eq i32 %5, 0
  br i1 %44, label %.preheader.lr.ph, label %59

.preheader.lr.ph:                                 ; preds = %43
  %45 = select i1 %.not176, i32 128, i32 0
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %46 = icmp sgt i32 %33, 0
  br i1 %46, label %.preheader.us.preheader, label %._crit_edge219

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %smax281 = call i64 @llvm.smax.i64(i64 %spec.select, i64 1)
  %wide.trip.count276 = zext nneg i32 %33 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us221
  %indvars.iv278 = phi i64 [ 0, %.preheader.us.preheader ], [ %indvars.iv.next279, %._crit_edge.us221 ]
  %.0130218.us = phi ptr [ %1, %.preheader.us.preheader ], [ %58, %._crit_edge.us221 ]
  br label %47

47:                                               ; preds = %.preheader.us, %47
  %indvars.iv273 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next274, %47 ]
  %.1131216.us = phi ptr [ %.0130218.us, %.preheader.us ], [ %58, %47 ]
  %48 = load ptr, ptr %10, align 8, !tbaa !21
  %49 = getelementptr inbounds ptr, ptr %48, i64 %indvars.iv273
  %50 = load ptr, ptr %49, align 8, !tbaa !21
  %51 = getelementptr inbounds float, ptr %50, i64 %indvars.iv278
  %52 = load float, ptr %51, align 4, !tbaa !22
  %53 = fmul float %52, 1.280000e+02
  %54 = fpext float %53 to double
  %55 = call i32 @vorbis_ftoi(double noundef %54)
  %spec.store.select.us = call i32 @llvm.smax.i32(i32 %55, i32 -128)
  %.0144.us = call i32 @llvm.smin.i32(i32 %spec.store.select.us, i32 127)
  %56 = add nsw i32 %.0144.us, %45
  %57 = trunc i32 %56 to i8
  %58 = getelementptr inbounds i8, ptr %.1131216.us, i64 1
  store i8 %57, ptr %.1131216.us, align 1, !tbaa !24
  %indvars.iv.next274 = add nuw nsw i64 %indvars.iv273, 1
  %exitcond277.not = icmp eq i64 %indvars.iv.next274, %wide.trip.count276
  br i1 %exitcond277.not, label %._crit_edge.us221, label %47, !llvm.loop !25

._crit_edge.us221:                                ; preds = %47
  %indvars.iv.next279 = add nuw nsw i64 %indvars.iv278, 1
  %exitcond282.not = icmp eq i64 %indvars.iv.next279, %smax281
  br i1 %exitcond282.not, label %._crit_edge219, label %.preheader.us, !llvm.loop !27

59:                                               ; preds = %43
  %60 = select i1 %.not176, i32 32768, i32 0
  %61 = icmp eq i32 %12, %3
  br i1 %61, label %62, label %91

62:                                               ; preds = %59
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %63 = icmp sgt i32 %33, 0
  br i1 %.not176, label %77, label %64

64:                                               ; preds = %62
  br i1 %63, label %.lr.ph.us.preheader, label %._crit_edge219

.lr.ph.us.preheader:                              ; preds = %64
  %smax253 = call i64 @llvm.smax.i64(i64 %spec.select, i64 1)
  %wide.trip.count258 = zext nneg i32 %33 to i64
  br label %.lr.ph.us

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

69:                                               ; preds = %.lr.ph.us, %69
  %indvars.iv250 = phi i64 [ 0, %.lr.ph.us ], [ %indvars.iv.next251, %69 ]
  %.0129201.us = phi ptr [ %68, %.lr.ph.us ], [ %76, %69 ]
  %70 = getelementptr inbounds float, ptr %67, i64 %indvars.iv250
  %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.select1.us = call i32 @llvm.smax.i32(i32 %74, i32 -32768)
  %.1145.us = call i32 @llvm.smin.i32(i32 %spec.store.select1.us, i32 32767)
  %75 = trunc nsw i32 %.1145.us to i16
  store i16 %75, ptr %.0129201.us, align 2, !tbaa !28
  %76 = getelementptr inbounds i16, ptr %.0129201.us, i64 %34
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %exitcond254.not = icmp eq i64 %indvars.iv.next251, %smax253
  br i1 %exitcond254.not, label %._crit_edge.us206, label %69, !llvm.loop !30

._crit_edge.us206:                                ; preds = %69
  %indvars.iv.next256 = add nuw nsw i64 %indvars.iv255, 1
  %exitcond259.not = icmp eq i64 %indvars.iv.next256, %wide.trip.count258
  br i1 %exitcond259.not, label %._crit_edge219, label %.lr.ph.us, !llvm.loop !31

77:                                               ; preds = %62
  br i1 %63, label %.lr.ph.us213.preheader, label %._crit_edge219

.lr.ph.us213.preheader:                           ; preds = %77
  %smax263 = call i64 @llvm.smax.i64(i64 %spec.select, i64 1)
  %wide.trip.count268 = zext nneg i32 %33 to i64
  br label %.lr.ph.us213

.lr.ph.us213:                                     ; preds = %.lr.ph.us213.preheader, %._crit_edge.us214
  %indvars.iv265 = phi i64 [ 0, %.lr.ph.us213.preheader ], [ %indvars.iv.next266, %._crit_edge.us214 ]
  %78 = load ptr, ptr %10, align 8, !tbaa !21
  %79 = getelementptr inbounds ptr, ptr %78, i64 %indvars.iv265
  %80 = load ptr, ptr %79, align 8, !tbaa !21
  %81 = getelementptr inbounds i16, ptr %1, i64 %indvars.iv265
  br label %82

82:                                               ; preds = %.lr.ph.us213, %82
  %indvars.iv260 = phi i64 [ 0, %.lr.ph.us213 ], [ %indvars.iv.next261, %82 ]
  %.0127208.us = phi ptr [ %81, %.lr.ph.us213 ], [ %90, %82 ]
  %83 = getelementptr inbounds float, ptr %80, i64 %indvars.iv260
  %84 = load float, ptr %83, align 4, !tbaa !22
  %85 = fmul float %84, 3.276800e+04
  %86 = fpext float %85 to double
  %87 = call i32 @vorbis_ftoi(double noundef %86)
  %spec.store.select2.us = call i32 @llvm.smax.i32(i32 %87, i32 -32768)
  %.2146.us = call i32 @llvm.smin.i32(i32 %spec.store.select2.us, i32 32767)
  %88 = add nsw i32 %.2146.us, %60
  %89 = trunc i32 %88 to i16
  store i16 %89, ptr %.0127208.us, align 2, !tbaa !28
  %90 = getelementptr inbounds i16, ptr %.0127208.us, i64 %34
  %indvars.iv.next261 = add nuw nsw i64 %indvars.iv260, 1
  %exitcond264.not = icmp eq i64 %indvars.iv.next261, %smax263
  br i1 %exitcond264.not, label %._crit_edge.us214, label %82, !llvm.loop !32

._crit_edge.us214:                                ; preds = %82
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %exitcond269.not = icmp eq i64 %indvars.iv.next266, %wide.trip.count268
  br i1 %exitcond269.not, label %._crit_edge219, label %.lr.ph.us213, !llvm.loop !33

91:                                               ; preds = %59
  %.not175 = icmp eq i32 %3, 0
  call void @vorbis_fpu_setround(ptr noundef nonnull %11)
  %92 = icmp sgt i32 %33, 0
  br i1 %.not175, label %.preheader182.lr.ph, label %.preheader183.lr.ph

.preheader183.lr.ph:                              ; preds = %91
  br i1 %92, label %.preheader183.us.preheader, label %._crit_edge219

.preheader183.us.preheader:                       ; preds = %.preheader183.lr.ph
  %smax = call i64 @llvm.smax.i64(i64 %spec.select, i64 1)
  %wide.trip.count = zext nneg i32 %33 to i64
  br label %.preheader183.us

.preheader183.us:                                 ; preds = %.preheader183.us.preheader, %._crit_edge.us
  %indvars.iv233 = phi i64 [ 0, %.preheader183.us.preheader ], [ %indvars.iv.next234, %._crit_edge.us ]
  %.2132191.us = phi ptr [ %1, %.preheader183.us.preheader ], [ %107, %._crit_edge.us ]
  br label %93

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

._crit_edge.us:                                   ; preds = %93
  %indvars.iv.next234 = add nuw nsw i64 %indvars.iv233, 1
  %exitcond236.not = icmp eq i64 %indvars.iv.next234, %smax
  br i1 %exitcond236.not, label %._crit_edge219, label %.preheader183.us, !llvm.loop !35

.preheader182.lr.ph:                              ; preds = %91
  br i1 %92, label %.preheader182.us.preheader, label %._crit_edge219

.preheader182.us.preheader:                       ; preds = %.preheader182.lr.ph
  %smax248 = call i64 @llvm.smax.i64(i64 %spec.select, i64 1)
  %wide.trip.count243 = zext nneg i32 %33 to i64
  br label %.preheader182.us

.preheader182.us:                                 ; preds = %.preheader182.us.preheader, %._crit_edge.us198
  %indvars.iv245 = phi i64 [ 0, %.preheader182.us.preheader ], [ %indvars.iv.next246, %._crit_edge.us198 ]
  %.4196.us = phi ptr [ %1, %.preheader182.us.preheader ], [ %122, %._crit_edge.us198 ]
  br label %108

108:                                              ; preds = %.preheader182.us, %108
  %indvars.iv240 = phi i64 [ 0, %.preheader182.us ], [ %indvars.iv.next241, %108 ]
  %.5194.us = phi ptr [ %.4196.us, %.preheader182.us ], [ %122, %108 ]
  %109 = load ptr, ptr %10, align 8, !tbaa !21
  %110 = getelementptr inbounds ptr, ptr %109, i64 %indvars.iv240
  %111 = load ptr, ptr %110, align 8, !tbaa !21
  %112 = getelementptr inbounds float, ptr %111, i64 %indvars.iv245
  %113 = load float, ptr %112, align 4, !tbaa !22
  %114 = fmul float %113, 3.276800e+04
  %115 = fpext float %114 to double
  %116 = call i32 @vorbis_ftoi(double noundef %115)
  %spec.store.select4.us = call i32 @llvm.smax.i32(i32 %116, i32 -32768)
  %.0.us = call i32 @llvm.smin.i32(i32 %spec.store.select4.us, i32 32767)
  %117 = add nsw i32 %.0.us, %60
  %118 = trunc i32 %.0.us to i8
  %119 = getelementptr inbounds i8, ptr %.5194.us, i64 1
  store i8 %118, ptr %.5194.us, align 1, !tbaa !24
  %120 = lshr i32 %117, 8
  %121 = trunc i32 %120 to i8
  %122 = getelementptr inbounds i8, ptr %.5194.us, i64 2
  store i8 %121, ptr %119, align 1, !tbaa !24
  %indvars.iv.next241 = add nuw nsw i64 %indvars.iv240, 1
  %exitcond244.not = icmp eq i64 %indvars.iv.next241, %wide.trip.count243
  br i1 %exitcond244.not, label %._crit_edge.us198, label %108, !llvm.loop !36

._crit_edge.us198:                                ; preds = %108
  %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1
  %exitcond249.not = icmp eq i64 %indvars.iv.next246, %smax248
  br i1 %exitcond249.not, label %._crit_edge219, label %.preheader182.us, !llvm.loop !37

._crit_edge219:                                   ; preds = %._crit_edge.us, %._crit_edge.us198, %._crit_edge.us206, %._crit_edge.us214, %._crit_edge.us221, %.preheader182.lr.ph, %.preheader183.lr.ph, %77, %64, %.preheader.lr.ph
  %.sink = load i16, ptr %11, align 2, !tbaa !28
  call void @vorbis_fpu_restore(i16 noundef signext %.sink)
  %123 = trunc nuw nsw i64 %spec.select to i32
  %124 = call i32 @vorbis_synthesis_read(ptr noundef nonnull %16, i32 noundef %123) #6
  %125 = getelementptr inbounds i8, ptr %0, i64 104
  %126 = load ptr, ptr %125, align 8, !tbaa !38
  %127 = call i32 @vorbis_synthesis_halfrate_p(ptr noundef %126) #6
  %128 = zext nneg i32 %127 to i64
  %129 = shl i64 %spec.select, %128
  %130 = getelementptr inbounds i8, ptr %0, i64 120
  %131 = load i64, ptr %130, align 8, !tbaa !39
  %132 = add nsw i64 %129, %131
  store i64 %132, ptr %130, align 8, !tbaa !39
  %.not177 = icmp eq ptr %6, null
  br i1 %.not177, label %136, label %133

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

136:                                              ; preds = %133, %._crit_edge219
  %137 = mul nsw i64 %spec.select, %36
  br label %138

138:                                              ; preds = %30, %136
  %.2 = phi i64 [ %137, %136 ], [ -131, %30 ]
  call void @llvm.lifetime.end.p0(i64 2, ptr nonnull %11) #6
  br label %.thread

.thread.loopexit.split.loop.exit:                 ; preds = %25
  %139 = sext i32 %23 to i64
  br label %.thread

.thread:                                          ; preds = %22, %.thread.loopexit.split.loop.exit, %27, %9, %138
  %.3 = phi i64 [ %.2, %138 ], [ -131, %9 ], [ %28, %27 ], [ %139, %.thread.loopexit.split.loop.exit ], [ 0, %22 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  ret i64 %.3
}

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

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

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

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

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

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

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

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

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