; LLVM IR from Overload-Technologies/Overload :: Dependencies/soloud/src/audiosource/wav (soloud_wavstream)

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

%"class.SoLoud::WavStreamInstance" = type { %"class.SoLoud::AudioSourceInstance", ptr, i32, ptr, %"union.SoLoud::WavStreamInstance::codec", i32, i32, ptr }
%"class.SoLoud::AudioSourceInstance" = type { ptr, i32, i32, i32, float, [8 x float], float, float, float, float, i32, float, float, double, double, %"class.SoLoud::Fader", %"class.SoLoud::Fader", %"class.SoLoud::Fader", %"class.SoLoud::Fader", %"class.SoLoud::Fader", i32, [8 x float], i32, i32, [8 x ptr], [2 x ptr], i32, i32, i32, double }
%"class.SoLoud::Fader" = type { float, float, float, double, double, double, float, i32 }
%"union.SoLoud::WavStreamInstance::codec" = type { ptr }
%"class.SoLoud::WavStream" = type <{ %"class.SoLoud::AudioSource", i32, [4 x i8], ptr, ptr, ptr, i32, [4 x i8] }>
%"class.SoLoud::AudioSource" = type { ptr, i32, float, float, i32, i32, float, float, float, i32, float, [8 x ptr], ptr, ptr, ptr, i32, double }
%struct.drflac = type { ptr, ptr, %struct.drflac_allocation_callbacks, i32, i8, i8, i16, i64, i32, i32, %struct.drflac_frame, i64, i64, %struct.drflac__memory_stream, ptr, ptr, ptr, i8, %struct.drflac_bs, [1 x i8] }
%struct.drflac_allocation_callbacks = type { ptr, ptr, ptr, ptr }
%struct.drflac_frame = type { %struct.drflac_frame_header, i32, [8 x %struct.drflac_subframe] }
%struct.drflac_frame_header = type { i64, i32, i32, i16, i8, i8, i8 }
%struct.drflac_subframe = type { i8, i8, i8, ptr }
%struct.drflac__memory_stream = type { ptr, i64, i64 }
%struct.drflac_bs = type { ptr, ptr, ptr, i64, i64, i32, i32, [512 x i64], i64, i16, i64, i32 }
%struct.drmp3 = type { %struct.drmp3dec, %struct.drmp3dec_frame_info, i32, i32, ptr, ptr, ptr, %struct.drmp3_allocation_callbacks, i32, i32, i32, i32, [9216 x i8], i64, i64, ptr, i32, i64, i64, i64, ptr, i8, %struct.anon.1 }
%struct.drmp3dec = type { [2 x [288 x float]], [960 x float], i32, i32, [4 x i8], [511 x i8] }
%struct.drmp3dec_frame_info = type { i32, i32, i32, i32, i32 }
%struct.drmp3_allocation_callbacks = type { ptr, ptr, ptr, ptr }
%struct.anon.1 = type { ptr, i64, i64 }
%struct.drwav = type { ptr, ptr, ptr, ptr, %struct.drwav_allocation_callbacks, i32, %struct.drwav_fmt, i32, i16, i16, i16, i64, i64, i64, i64, i64, i64, i32, i32, ptr, i32, %struct.drwav__memory_stream, %struct.drwav__memory_stream_write, %struct.anon, %struct.anon.0 }
%struct.drwav_allocation_callbacks = type { ptr, ptr, ptr, ptr }
%struct.drwav_fmt = type { i16, i16, i32, i32, i16, i16, i16, i16, i32, [16 x i8] }
%struct.drwav__memory_stream = type { ptr, i64, i64 }
%struct.drwav__memory_stream_write = type { ptr, ptr, i64, i64, i64 }
%struct.anon = type { i32, [2 x i16], [2 x i32], [4 x i32], i32, [2 x [2 x i32]] }
%struct.anon.0 = type { i32, [2 x i32], [2 x i32], [16 x i32], i32 }

; 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: mustprogress uwtable
define dso_local noundef i32 @_ZN6SoLoud17WavStreamInstance8getAudioEPfjj(ptr noundef nonnull align 8 dereferenceable(544) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) unnamed_addr #1 align 2 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca [4096 x float], align 16
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store i32 %2, ptr %8, align 4, !tbaa !9
  store i32 %3, ptr %9, align 4, !tbaa !9
  %27 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16384, ptr %11) #4
  %28 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 3
  %29 = load ptr, ptr %28, align 8, !tbaa !11
  %30 = icmp eq ptr %29, null
  br i1 %30, label %31, label %32

31:                                               ; preds = %4
  store i32 0, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %357

32:                                               ; preds = %4
  %33 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 1
  %34 = load ptr, ptr %33, align 8, !tbaa !17
  %35 = getelementptr inbounds %"class.SoLoud::WavStream", ptr %34, i32 0, i32 1
  %36 = load i32, ptr %35, align 8, !tbaa !18
  switch i32 %36, label %355 [
    i32 2, label %37
    i32 3, label %113
    i32 1, label %188
    i32 0, label %279
  ]

37:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %38

38:                                               ; preds = %104, %37
  %39 = load i32, ptr %13, align 4, !tbaa !9
  %40 = load i32, ptr %8, align 4, !tbaa !9
  %41 = icmp ult i32 %39, %40
  br i1 %41, label %42, label %107

42:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  %43 = load i32, ptr %8, align 4, !tbaa !9
  %44 = load i32, ptr %13, align 4, !tbaa !9
  %45 = sub i32 %43, %44
  %46 = icmp ugt i32 %45, 512
  br i1 %46, label %47, label %48

47:                                               ; preds = %42
  br label %52

48:                                               ; preds = %42
  %49 = load i32, ptr %8, align 4, !tbaa !9
  %50 = load i32, ptr %13, align 4, !tbaa !9
  %51 = sub i32 %49, %50
  br label %52

52:                                               ; preds = %48, %47
  %53 = phi i32 [ 512, %47 ], [ %51, %48 ]
  store i32 %53, ptr %16, align 4, !tbaa !9
  %54 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !21
  %56 = load i32, ptr %16, align 4, !tbaa !9
  %57 = zext i32 %56 to i64
  %58 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 0
  %59 = call i64 @drflac_read_pcm_frames_f32(ptr noundef %55, i64 noundef %57, ptr noundef %58)
  %60 = trunc i64 %59 to i32
  %61 = load i32, ptr %10, align 4, !tbaa !9
  %62 = add i32 %61, %60
  store i32 %62, ptr %10, align 4, !tbaa !9
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %63

63:                                               ; preds = %100, %52
  %64 = load i32, ptr %14, align 4, !tbaa !9
  %65 = load i32, ptr %16, align 4, !tbaa !9
  %66 = icmp ult i32 %64, %65
  br i1 %66, label %67, label %103

67:                                               ; preds = %63
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %68

68:                                               ; preds = %96, %67
  %69 = load i32, ptr %15, align 4, !tbaa !9
  %70 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %27, i32 0, i32 10
  %71 = load i32, ptr %70, align 8, !tbaa !22
  %72 = icmp ult i32 %69, %71
  br i1 %72, label %73, label %99

73:                                               ; preds = %68
  %74 = load i32, ptr %14, align 4, !tbaa !9
  %75 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  %77 = getelementptr inbounds %struct.drflac, ptr %76, i32 0, i32 4
  %78 = load i8, ptr %77, align 4, !tbaa !23
  %79 = zext i8 %78 to i32
  %80 = mul i32 %74, %79
  %81 = load i32, ptr %15, align 4, !tbaa !9
  %82 = add i32 %80, %81
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 %83
  %85 = load float, ptr %84, align 4, !tbaa !34
  %86 = load ptr, ptr %7, align 8, !tbaa !5
  %87 = load i32, ptr %15, align 4, !tbaa !9
  %88 = load i32, ptr %8, align 4, !tbaa !9
  %89 = mul i32 %87, %88
  %90 = load i32, ptr %13, align 4, !tbaa !9
  %91 = add i32 %89, %90
  %92 = load i32, ptr %14, align 4, !tbaa !9
  %93 = add i32 %91, %92
  %94 = zext i32 %93 to i64
  %95 = getelementptr inbounds float, ptr %86, i64 %94
  store float %85, ptr %95, align 4, !tbaa !34
  br label %96

96:                                               ; preds = %73
  %97 = load i32, ptr %15, align 4, !tbaa !9
  %98 = add i32 %97, 1
  store i32 %98, ptr %15, align 4, !tbaa !9
  br label %68, !llvm.loop !35

99:                                               ; preds = %68
  br label %100

100:                                              ; preds = %99
  %101 = load i32, ptr %14, align 4, !tbaa !9
  %102 = add i32 %101, 1
  store i32 %102, ptr %14, align 4, !tbaa !9
  br label %63, !llvm.loop !37

103:                                              ; preds = %63
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  br label %104

104:                                              ; preds = %103
  %105 = load i32, ptr %13, align 4, !tbaa !9
  %106 = add i32 %105, 512
  store i32 %106, ptr %13, align 4, !tbaa !9
  br label %38, !llvm.loop !38

107:                                              ; preds = %38
  %108 = load i32, ptr %10, align 4, !tbaa !9
  %109 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %110 = load i32, ptr %109, align 8, !tbaa !39
  %111 = add i32 %110, %108
  store i32 %111, ptr %109, align 8, !tbaa !39
  %112 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %112, ptr %5, align 4
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %357

113:                                              ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %114

114:                                              ; preds = %179, %113
  %115 = load i32, ptr %17, align 4, !tbaa !9
  %116 = load i32, ptr %8, align 4, !tbaa !9
  %117 = icmp ult i32 %115, %116
  br i1 %117, label %118, label %182

118:                                              ; preds = %114
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  %119 = load i32, ptr %8, align 4, !tbaa !9
  %120 = load i32, ptr %17, align 4, !tbaa !9
  %121 = sub i32 %119, %120
  %122 = icmp ugt i32 %121, 512
  br i1 %122, label %123, label %124

123:                                              ; preds = %118
  br label %128

124:                                              ; preds = %118
  %125 = load i32, ptr %8, align 4, !tbaa !9
  %126 = load i32, ptr %17, align 4, !tbaa !9
  %127 = sub i32 %125, %126
  br label %128

128:                                              ; preds = %124, %123
  %129 = phi i32 [ 512, %123 ], [ %127, %124 ]
  store i32 %129, ptr %20, align 4, !tbaa !9
  %130 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !21
  %132 = load i32, ptr %20, align 4, !tbaa !9
  %133 = zext i32 %132 to i64
  %134 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 0
  %135 = call i64 @drmp3_read_pcm_frames_f32(ptr noundef %131, i64 noundef %133, ptr noundef %134)
  %136 = trunc i64 %135 to i32
  %137 = load i32, ptr %10, align 4, !tbaa !9
  %138 = add i32 %137, %136
  store i32 %138, ptr %10, align 4, !tbaa !9
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %175, %128
  %140 = load i32, ptr %18, align 4, !tbaa !9
  %141 = load i32, ptr %20, align 4, !tbaa !9
  %142 = icmp ult i32 %140, %141
  br i1 %142, label %143, label %178

143:                                              ; preds = %139
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %144

144:                                              ; preds = %171, %143
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %27, i32 0, i32 10
  %147 = load i32, ptr %146, align 8, !tbaa !22
  %148 = icmp ult i32 %145, %147
  br i1 %148, label %149, label %174

149:                                              ; preds = %144
  %150 = load i32, ptr %18, align 4, !tbaa !9
  %151 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %152 = load ptr, ptr %151, align 8, !tbaa !21
  %153 = getelementptr inbounds %struct.drmp3, ptr %152, i32 0, i32 2
  %154 = load i32, ptr %153, align 8, !tbaa !40
  %155 = mul i32 %150, %154
  %156 = load i32, ptr %19, align 4, !tbaa !9
  %157 = add i32 %155, %156
  %158 = zext i32 %157 to i64
  %159 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 %158
  %160 = load float, ptr %159, align 4, !tbaa !34
  %161 = load ptr, ptr %7, align 8, !tbaa !5
  %162 = load i32, ptr %19, align 4, !tbaa !9
  %163 = load i32, ptr %8, align 4, !tbaa !9
  %164 = mul i32 %162, %163
  %165 = load i32, ptr %17, align 4, !tbaa !9
  %166 = add i32 %164, %165
  %167 = load i32, ptr %18, align 4, !tbaa !9
  %168 = add i32 %166, %167
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds float, ptr %161, i64 %169
  store float %160, ptr %170, align 4, !tbaa !34
  br label %171

171:                                              ; preds = %149
  %172 = load i32, ptr %19, align 4, !tbaa !9
  %173 = add i32 %172, 1
  store i32 %173, ptr %19, align 4, !tbaa !9
  br label %144, !llvm.loop !46

174:                                              ; preds = %144
  br label %175

175:                                              ; preds = %174
  %176 = load i32, ptr %18, align 4, !tbaa !9
  %177 = add i32 %176, 1
  store i32 %177, ptr %18, align 4, !tbaa !9
  br label %139, !llvm.loop !47

178:                                              ; preds = %139
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %179

179:                                              ; preds = %178
  %180 = load i32, ptr %17, align 4, !tbaa !9
  %181 = add i32 %180, 512
  store i32 %181, ptr %17, align 4, !tbaa !9
  br label %114, !llvm.loop !48

182:                                              ; preds = %114
  %183 = load i32, ptr %10, align 4, !tbaa !9
  %184 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %185 = load i32, ptr %184, align 8, !tbaa !39
  %186 = add i32 %185, %183
  store i32 %186, ptr %184, align 8, !tbaa !39
  %187 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %187, ptr %5, align 4
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %357

188:                                              ; preds = %32
  %189 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  %190 = load i32, ptr %189, align 4, !tbaa !49
  %191 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 5
  %192 = load i32, ptr %191, align 8, !tbaa !50
  %193 = icmp ult i32 %190, %192
  br i1 %193, label %194, label %218

194:                                              ; preds = %188
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %195 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 7
  %196 = load ptr, ptr %195, align 8, !tbaa !51
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = load i32, ptr %8, align 4, !tbaa !9
  %199 = load i32, ptr %9, align 4, !tbaa !9
  %200 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 5
  %201 = load i32, ptr %200, align 8, !tbaa !50
  %202 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  %203 = load i32, ptr %202, align 4, !tbaa !49
  %204 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %27, i32 0, i32 10
  %205 = load i32, ptr %204, align 8, !tbaa !22
  %206 = call noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef %196, ptr noundef %197, i32 noundef %198, i32 noundef %199, i32 noundef %201, i32 noundef %203, i32 noundef %205)
  store i32 %206, ptr %21, align 4, !tbaa !9
  %207 = load i32, ptr %21, align 4, !tbaa !9
  %208 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %209 = load i32, ptr %208, align 8, !tbaa !39
  %210 = add i32 %209, %207
  store i32 %210, ptr %208, align 8, !tbaa !39
  %211 = load i32, ptr %21, align 4, !tbaa !9
  %212 = load i32, ptr %10, align 4, !tbaa !9
  %213 = add i32 %212, %211
  store i32 %213, ptr %10, align 4, !tbaa !9
  %214 = load i32, ptr %21, align 4, !tbaa !9
  %215 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  %216 = load i32, ptr %215, align 4, !tbaa !49
  %217 = add i32 %216, %214
  store i32 %217, ptr %215, align 4, !tbaa !49
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %218

218:                                              ; preds = %194, %188
  br label %219

219:                                              ; preds = %277, %218
  %220 = load i32, ptr %10, align 4, !tbaa !9
  %221 = load i32, ptr %8, align 4, !tbaa !9
  %222 = icmp ult i32 %220, %221
  br i1 %222, label %223, label %278

223:                                              ; preds = %219
  %224 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %225 = load ptr, ptr %224, align 8, !tbaa !21
  %226 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 7
  %227 = call i32 @stb_vorbis_get_frame_float(ptr noundef %225, ptr noundef null, ptr noundef %226)
  %228 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 5
  store i32 %227, ptr %228, align 8, !tbaa !50
  %229 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  store i32 0, ptr %229, align 4, !tbaa !49
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %230 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 7
  %231 = load ptr, ptr %230, align 8, !tbaa !51
  %232 = load ptr, ptr %7, align 8, !tbaa !5
  %233 = load i32, ptr %10, align 4, !tbaa !9
  %234 = zext i32 %233 to i64
  %235 = getelementptr inbounds float, ptr %232, i64 %234
  %236 = load i32, ptr %8, align 4, !tbaa !9
  %237 = load i32, ptr %10, align 4, !tbaa !9
  %238 = sub i32 %236, %237
  %239 = load i32, ptr %9, align 4, !tbaa !9
  %240 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 5
  %241 = load i32, ptr %240, align 8, !tbaa !50
  %242 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  %243 = load i32, ptr %242, align 4, !tbaa !49
  %244 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %27, i32 0, i32 10
  %245 = load i32, ptr %244, align 8, !tbaa !22
  %246 = call noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef %231, ptr noundef %235, i32 noundef %238, i32 noundef %239, i32 noundef %241, i32 noundef %243, i32 noundef %245)
  store i32 %246, ptr %22, align 4, !tbaa !9
  %247 = load i32, ptr %22, align 4, !tbaa !9
  %248 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %249 = load i32, ptr %248, align 8, !tbaa !39
  %250 = add i32 %249, %247
  store i32 %250, ptr %248, align 8, !tbaa !39
  %251 = load i32, ptr %22, align 4, !tbaa !9
  %252 = load i32, ptr %10, align 4, !tbaa !9
  %253 = add i32 %252, %251
  store i32 %253, ptr %10, align 4, !tbaa !9
  %254 = load i32, ptr %22, align 4, !tbaa !9
  %255 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 6
  %256 = load i32, ptr %255, align 4, !tbaa !49
  %257 = add i32 %256, %254
  store i32 %257, ptr %255, align 4, !tbaa !49
  %258 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %259 = load i32, ptr %258, align 8, !tbaa !39
  %260 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 1
  %261 = load ptr, ptr %260, align 8, !tbaa !17
  %262 = getelementptr inbounds %"class.SoLoud::WavStream", ptr %261, i32 0, i32 6
  %263 = load i32, ptr %262, align 8, !tbaa !52
  %264 = icmp uge i32 %259, %263
  br i1 %264, label %268, label %265

265:                                              ; preds = %223
  %266 = load i32, ptr %22, align 4, !tbaa !9
  %267 = icmp eq i32 %266, 0
  br i1 %267, label %268, label %274

268:                                              ; preds = %265, %223
  %269 = load i32, ptr %10, align 4, !tbaa !9
  %270 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %271 = load i32, ptr %270, align 8, !tbaa !39
  %272 = add i32 %271, %269
  store i32 %272, ptr %270, align 8, !tbaa !39
  %273 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %273, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %275

274:                                              ; preds = %265
  store i32 0, ptr %12, align 4
  br label %275

275:                                              ; preds = %274, %268
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  %276 = load i32, ptr %12, align 4
  switch i32 %276, label %357 [
    i32 0, label %277
  ]

277:                                              ; preds = %275
  br label %219, !llvm.loop !53

278:                                              ; preds = %219
  br label %355

279:                                              ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %280

280:                                              ; preds = %346, %279
  %281 = load i32, ptr %23, align 4, !tbaa !9
  %282 = load i32, ptr %8, align 4, !tbaa !9
  %283 = icmp ult i32 %281, %282
  br i1 %283, label %284, label %349

284:                                              ; preds = %280
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %285 = load i32, ptr %8, align 4, !tbaa !9
  %286 = load i32, ptr %23, align 4, !tbaa !9
  %287 = sub i32 %285, %286
  %288 = icmp ugt i32 %287, 512
  br i1 %288, label %289, label %290

289:                                              ; preds = %284
  br label %294

290:                                              ; preds = %284
  %291 = load i32, ptr %8, align 4, !tbaa !9
  %292 = load i32, ptr %23, align 4, !tbaa !9
  %293 = sub i32 %291, %292
  br label %294

294:                                              ; preds = %290, %289
  %295 = phi i32 [ 512, %289 ], [ %293, %290 ]
  store i32 %295, ptr %26, align 4, !tbaa !9
  %296 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %297 = load ptr, ptr %296, align 8, !tbaa !21
  %298 = load i32, ptr %26, align 4, !tbaa !9
  %299 = zext i32 %298 to i64
  %300 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 0
  %301 = call i64 @drwav_read_pcm_frames_f32(ptr noundef %297, i64 noundef %299, ptr noundef %300)
  %302 = trunc i64 %301 to i32
  %303 = load i32, ptr %10, align 4, !tbaa !9
  %304 = add i32 %303, %302
  store i32 %304, ptr %10, align 4, !tbaa !9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %305

305:                                              ; preds = %342, %294
  %306 = load i32, ptr %24, align 4, !tbaa !9
  %307 = load i32, ptr %26, align 4, !tbaa !9
  %308 = icmp ult i32 %306, %307
  br i1 %308, label %309, label %345

309:                                              ; preds = %305
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %310

310:                                              ; preds = %338, %309
  %311 = load i32, ptr %25, align 4, !tbaa !9
  %312 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %27, i32 0, i32 10
  %313 = load i32, ptr %312, align 8, !tbaa !22
  %314 = icmp ult i32 %311, %313
  br i1 %314, label %315, label %341

315:                                              ; preds = %310
  %316 = load i32, ptr %24, align 4, !tbaa !9
  %317 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 4
  %318 = load ptr, ptr %317, align 8, !tbaa !21
  %319 = getelementptr inbounds %struct.drwav, ptr %318, i32 0, i32 8
  %320 = load i16, ptr %319, align 8, !tbaa !54
  %321 = zext i16 %320 to i32
  %322 = mul i32 %316, %321
  %323 = load i32, ptr %25, align 4, !tbaa !9
  %324 = add i32 %322, %323
  %325 = zext i32 %324 to i64
  %326 = getelementptr inbounds [4096 x float], ptr %11, i64 0, i64 %325
  %327 = load float, ptr %326, align 4, !tbaa !34
  %328 = load ptr, ptr %7, align 8, !tbaa !5
  %329 = load i32, ptr %25, align 4, !tbaa !9
  %330 = load i32, ptr %8, align 4, !tbaa !9
  %331 = mul i32 %329, %330
  %332 = load i32, ptr %23, align 4, !tbaa !9
  %333 = add i32 %331, %332
  %334 = load i32, ptr %24, align 4, !tbaa !9
  %335 = add i32 %333, %334
  %336 = zext i32 %335 to i64
  %337 = getelementptr inbounds float, ptr %328, i64 %336
  store float %327, ptr %337, align 4, !tbaa !34
  br label %338

338:                                              ; preds = %315
  %339 = load i32, ptr %25, align 4, !tbaa !9
  %340 = add i32 %339, 1
  store i32 %340, ptr %25, align 4, !tbaa !9
  br label %310, !llvm.loop !64

341:                                              ; preds = %310
  br label %342

342:                                              ; preds = %341
  %343 = load i32, ptr %24, align 4, !tbaa !9
  %344 = add i32 %343, 1
  store i32 %344, ptr %24, align 4, !tbaa !9
  br label %305, !llvm.loop !65

345:                                              ; preds = %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %346

346:                                              ; preds = %345
  %347 = load i32, ptr %23, align 4, !tbaa !9
  %348 = add i32 %347, 512
  store i32 %348, ptr %23, align 4, !tbaa !9
  br label %280, !llvm.loop !66

349:                                              ; preds = %280
  %350 = load i32, ptr %10, align 4, !tbaa !9
  %351 = getelementptr inbounds %"class.SoLoud::WavStreamInstance", ptr %27, i32 0, i32 2
  %352 = load i32, ptr %351, align 8, !tbaa !39
  %353 = add i32 %352, %350
  store i32 %353, ptr %351, align 8, !tbaa !39
  %354 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %354, ptr %5, align 4
  store i32 1, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %357

355:                                              ; preds = %278, %32
  %356 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %356, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %357

357:                                              ; preds = %355, %349, %275, %182, %107, %31
  call void @llvm.lifetime.end.p0(i64 16384, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %358 = load i32, ptr %5, align 4
  ret i32 %358
}

declare i64 @drflac_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) #2

declare i64 @drmp3_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

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

declare i64 @drwav_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 = { 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 512}
!12 = !{!"_ZTSN6SoLoud17WavStreamInstanceE", !13, i64 0, !6, i64 496, !10, i64 504, !6, i64 512, !7, i64 520, !10, i64 528, !10, i64 532, !6, i64 536}
!13 = !{!"_ZTSN6SoLoud19AudioSourceInstanceE", !10, i64 8, !10, i64 12, !10, i64 16, !14, i64 20, !7, i64 24, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !10, i64 72, !14, i64 76, !14, i64 80, !15, i64 88, !15, i64 96, !16, i64 104, !16, i64 152, !16, i64 200, !16, i64 248, !16, i64 296, !10, i64 344, !7, i64 348, !10, i64 380, !10, i64 384, !7, i64 392, !7, i64 456, !10, i64 472, !10, i64 476, !10, i64 480, !15, i64 488}
!14 = !{!"float", !7, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!"_ZTSN6SoLoud5FaderE", !14, i64 0, !14, i64 4, !14, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !14, i64 40, !10, i64 44}
!17 = !{!12, !6, i64 496}
!18 = !{!19, !10, i64 152}
!19 = !{!"_ZTSN6SoLoud9WavStreamE", !20, i64 0, !10, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !10, i64 184}
!20 = !{!"_ZTSN6SoLoud11AudioSourceE", !10, i64 8, !14, i64 12, !14, i64 16, !10, i64 20, !10, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !10, i64 40, !14, i64 44, !7, i64 48, !6, i64 112, !6, i64 120, !6, i64 128, !10, i64 136, !15, i64 144}
!21 = !{!7, !7, i64 0}
!22 = !{!13, !10, i64 72}
!23 = !{!24, !7, i64 52}
!24 = !{!"_ZTS6drflac", !6, i64 0, !6, i64 8, !25, i64 16, !10, i64 48, !7, i64 52, !7, i64 53, !26, i64 54, !27, i64 56, !28, i64 64, !10, i64 68, !29, i64 72, !27, i64 232, !27, i64 240, !31, i64 248, !6, i64 272, !6, i64 280, !6, i64 288, !10, i64 296, !10, i64 296, !10, i64 296, !33, i64 304, !7, i64 4480}
!25 = !{!"_ZTS27drflac_allocation_callbacks", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!26 = !{!"short", !7, i64 0}
!27 = !{!"long long", !7, i64 0}
!28 = !{!"_ZTS16drflac_container", !7, i64 0}
!29 = !{!"_ZTS12drflac_frame", !30, i64 0, !10, i64 24, !7, i64 32}
!30 = !{!"_ZTS19drflac_frame_header", !27, i64 0, !10, i64 8, !10, i64 12, !26, i64 16, !7, i64 18, !7, i64 19, !7, i64 20}
!31 = !{!"_ZTS21drflac__memory_stream", !6, i64 0, !32, i64 8, !32, i64 16}
!32 = !{!"long", !7, i64 0}
!33 = !{!"_ZTS9drflac_bs", !6, i64 0, !6, i64 8, !6, i64 16, !32, i64 24, !27, i64 32, !10, i64 40, !10, i64 44, !7, i64 48, !27, i64 4144, !26, i64 4152, !27, i64 4160, !10, i64 4168}
!34 = !{!14, !14, i64 0}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !36}
!38 = distinct !{!38, !36}
!39 = !{!12, !10, i64 504}
!40 = !{!41, !10, i64 6688}
!41 = !{!"_ZTS5drmp3", !42, i64 0, !43, i64 6668, !10, i64 6688, !10, i64 6692, !6, i64 6696, !6, i64 6704, !6, i64 6712, !44, i64 6720, !10, i64 6752, !10, i64 6756, !10, i64 6760, !10, i64 6764, !7, i64 6768, !27, i64 15984, !27, i64 15992, !6, i64 16000, !10, i64 16008, !32, i64 16016, !32, i64 16024, !32, i64 16032, !6, i64 16040, !10, i64 16048, !45, i64 16056}
!42 = !{!"_ZTS8drmp3dec", !7, i64 0, !7, i64 2304, !10, i64 6144, !10, i64 6148, !7, i64 6152, !7, i64 6156}
!43 = !{!"_ZTS19drmp3dec_frame_info", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16}
!44 = !{!"_ZTS26drmp3_allocation_callbacks", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!45 = !{!"_ZTSN5drmp3Ut_E", !6, i64 0, !32, i64 8, !32, i64 16}
!46 = distinct !{!46, !36}
!47 = distinct !{!47, !36}
!48 = distinct !{!48, !36}
!49 = !{!12, !10, i64 532}
!50 = !{!12, !10, i64 528}
!51 = !{!12, !6, i64 536}
!52 = !{!19, !10, i64 184}
!53 = distinct !{!53, !36}
!54 = !{!55, !26, i64 112}
!55 = !{!"_ZTS5drwav", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !56, i64 32, !57, i64 64, !58, i64 68, !10, i64 108, !26, i64 112, !26, i64 114, !26, i64 116, !27, i64 120, !27, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !10, i64 168, !59, i64 172, !6, i64 176, !10, i64 184, !60, i64 192, !61, i64 216, !62, i64 256, !63, i64 308}
!56 = !{!"_ZTS26drwav_allocation_callbacks", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!57 = !{!"_ZTS15drwav_container", !7, i64 0}
!58 = !{!"_ZTS9drwav_fmt", !26, i64 0, !26, i64 2, !10, i64 4, !10, i64 8, !26, i64 12, !26, i64 14, !26, i64 16, !26, i64 18, !10, i64 20, !7, i64 24}
!59 = !{!"_ZTS19drwav_metadata_type", !7, i64 0}
!60 = !{!"_ZTS20drwav__memory_stream", !6, i64 0, !32, i64 8, !32, i64 16}
!61 = !{!"_ZTS26drwav__memory_stream_write", !6, i64 0, !6, i64 8, !32, i64 16, !32, i64 24, !32, i64 32}
!62 = !{!"_ZTSN5drwavUt_E", !10, i64 0, !7, i64 4, !7, i64 8, !7, i64 16, !10, i64 32, !7, i64 36}
!63 = !{!"_ZTSN5drwavUt0_E", !10, i64 0, !7, i64 4, !7, i64 12, !7, i64 20, !10, i64 84}
!64 = distinct !{!64, !36}
!65 = distinct !{!65, !36}
!66 = distinct !{!66, !36}


; 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: mustprogress uwtable
define dso_local noundef i32 @_ZN6SoLoud17WavStreamInstance8getAudioEPfjj(ptr noundef nonnull align 8 dereferenceable(544) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) unnamed_addr #1 align 2 {
  %5 = alloca [4096 x float], align 16
  call void @llvm.lifetime.start.p0(i64 16384, ptr nonnull %5) #5
  %6 = getelementptr inbounds i8, ptr %0, i64 512
  %7 = load ptr, ptr %6, align 8, !tbaa !5
  %8 = icmp eq ptr %7, null
  br i1 %8, label %.loopexit, label %9

9:                                                ; preds = %4
  %10 = getelementptr inbounds i8, ptr %0, i64 496
  %11 = load ptr, ptr %10, align 8, !tbaa !15
  %12 = getelementptr inbounds i8, ptr %11, i64 152
  %13 = load i32, ptr %12, align 8, !tbaa !16
  switch i32 %13, label %.loopexit [
    i32 2, label %.preheader115
    i32 3, label %.preheader117
    i32 1, label %135
    i32 0, label %.preheader119
  ]

.preheader119:                                    ; preds = %9
  %.not = icmp eq i32 %2, 0
  br i1 %.not, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader119
  %14 = getelementptr inbounds i8, ptr %0, i64 520
  %15 = getelementptr inbounds i8, ptr %0, i64 72
  br label %.preheader118.lr.ph

.preheader117:                                    ; preds = %9
  %.not152 = icmp eq i32 %2, 0
  br i1 %.not152, label %._crit_edge137, label %.lr.ph136

.lr.ph136:                                        ; preds = %.preheader117
  %16 = getelementptr inbounds i8, ptr %0, i64 520
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  br label %.preheader116.lr.ph

.preheader115:                                    ; preds = %9
  %.not155 = icmp eq i32 %2, 0
  br i1 %.not155, label %._crit_edge148, label %.lr.ph147

.lr.ph147:                                        ; preds = %.preheader115
  %18 = getelementptr inbounds i8, ptr %0, i64 520
  %19 = getelementptr inbounds i8, ptr %0, i64 72
  br label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %._crit_edge143, %.lr.ph147
  %indvars.iv184 = phi i32 [ %2, %.lr.ph147 ], [ %indvars.iv.next185, %._crit_edge143 ]
  %.097146 = phi i32 [ 0, %.lr.ph147 ], [ %26, %._crit_edge143 ]
  %.0101144 = phi i32 [ 0, %.lr.ph147 ], [ %74, %._crit_edge143 ]
  %umin186 = call i32 @llvm.umin.i32(i32 %indvars.iv184, i32 512)
  %umax187 = call i32 @llvm.umax.i32(i32 %umin186, i32 1)
  %20 = sub i32 %2, %.0101144
  %21 = call i32 @llvm.umin.i32(i32 %20, i32 512)
  %22 = load ptr, ptr %18, align 8, !tbaa !19
  %23 = zext nneg i32 %21 to i64
  %24 = call i64 @drflac_read_pcm_frames_f32(ptr noundef %22, i64 noundef %23, ptr noundef nonnull %5)
  %25 = trunc i64 %24 to i32
  %26 = add i32 %.097146, %25
  %27 = load i32, ptr %19, align 8, !tbaa !20
  %.not157 = icmp eq i32 %27, 0
  br i1 %.not157, label %._crit_edge143, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %wide.trip.count182 = zext i32 %27 to i64
  %xtraiter207 = and i64 %wide.trip.count182, 1
  %28 = icmp eq i32 %27, 1
  %unroll_iter209 = and i64 %wide.trip.count182, 4294967294
  %lcmp.mod208.not = icmp eq i64 %xtraiter207, 0
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge141.us
  %.0105142.us = phi i32 [ %73, %._crit_edge141.us ], [ 0, %.preheader.us.preheader ]
  %29 = add nuw nsw i32 %.0105142.us, %.0101144
  br i1 %28, label %._crit_edge141.us.unr-lcssa, label %.preheader.us.new

.preheader.us.new:                                ; preds = %.preheader.us, %.preheader.us.new
  %indvars.iv179 = phi i64 [ %indvars.iv.next180.1, %.preheader.us.new ], [ 0, %.preheader.us ]
  %niter210 = phi i64 [ %niter210.next.1, %.preheader.us.new ], [ 0, %.preheader.us ]
  %30 = load ptr, ptr %18, align 8, !tbaa !19
  %31 = getelementptr inbounds i8, ptr %30, i64 52
  %32 = load i8, ptr %31, align 4, !tbaa !21
  %33 = zext i8 %32 to i32
  %34 = mul i32 %.0105142.us, %33
  %35 = trunc nuw i64 %indvars.iv179 to i32
  %36 = add i32 %34, %35
  %37 = zext i32 %36 to i64
  %38 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %37
  %39 = load float, ptr %38, align 4, !tbaa !32
  %40 = mul i32 %35, %2
  %41 = add i32 %29, %40
  %42 = zext i32 %41 to i64
  %43 = getelementptr inbounds float, ptr %1, i64 %42
  store float %39, ptr %43, align 4, !tbaa !32
  %44 = load ptr, ptr %18, align 8, !tbaa !19
  %45 = getelementptr inbounds i8, ptr %44, i64 52
  %46 = load i8, ptr %45, align 4, !tbaa !21
  %47 = zext i8 %46 to i32
  %48 = mul i32 %.0105142.us, %47
  %49 = trunc i64 %indvars.iv179 to i32
  %50 = or disjoint i32 %49, 1
  %51 = add i32 %48, %50
  %52 = zext i32 %51 to i64
  %53 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %52
  %54 = load float, ptr %53, align 4, !tbaa !32
  %55 = mul i32 %50, %2
  %56 = add i32 %29, %55
  %57 = zext i32 %56 to i64
  %58 = getelementptr inbounds float, ptr %1, i64 %57
  store float %54, ptr %58, align 4, !tbaa !32
  %indvars.iv.next180.1 = add nuw nsw i64 %indvars.iv179, 2
  %niter210.next.1 = add i64 %niter210, 2
  %niter210.ncmp.1 = icmp eq i64 %niter210.next.1, %unroll_iter209
  br i1 %niter210.ncmp.1, label %._crit_edge141.us.unr-lcssa, label %.preheader.us.new, !llvm.loop !33

._crit_edge141.us.unr-lcssa:                      ; preds = %.preheader.us.new, %.preheader.us
  %indvars.iv179.unr = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next180.1, %.preheader.us.new ]
  br i1 %lcmp.mod208.not, label %._crit_edge141.us, label %._crit_edge141.us.epilog-lcssa

._crit_edge141.us.epilog-lcssa:                   ; preds = %._crit_edge141.us.unr-lcssa
  %59 = load ptr, ptr %18, align 8, !tbaa !19
  %60 = getelementptr inbounds i8, ptr %59, i64 52
  %61 = load i8, ptr %60, align 4, !tbaa !21
  %62 = zext i8 %61 to i32
  %63 = mul i32 %.0105142.us, %62
  %64 = trunc nuw i64 %indvars.iv179.unr to i32
  %65 = add i32 %63, %64
  %66 = zext i32 %65 to i64
  %67 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %66
  %68 = load float, ptr %67, align 4, !tbaa !32
  %69 = mul i32 %64, %2
  %70 = add i32 %29, %69
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds float, ptr %1, i64 %71
  store float %68, ptr %72, align 4, !tbaa !32
  br label %._crit_edge141.us

._crit_edge141.us:                                ; preds = %._crit_edge141.us.unr-lcssa, %._crit_edge141.us.epilog-lcssa
  %73 = add nuw nsw i32 %.0105142.us, 1
  %exitcond188.not = icmp eq i32 %73, %umax187
  br i1 %exitcond188.not, label %._crit_edge143, label %.preheader.us, !llvm.loop !35

._crit_edge143:                                   ; preds = %._crit_edge141.us, %.preheader.lr.ph
  %74 = add i32 %.0101144, 512
  %75 = icmp ult i32 %74, %2
  %indvars.iv.next185 = add i32 %indvars.iv184, -512
  br i1 %75, label %.preheader.lr.ph, label %._crit_edge148, !llvm.loop !36

._crit_edge148:                                   ; preds = %._crit_edge143, %.preheader115
  %.097.lcssa = phi i32 [ 0, %.preheader115 ], [ %26, %._crit_edge143 ]
  %76 = getelementptr inbounds i8, ptr %0, i64 504
  %77 = load i32, ptr %76, align 8, !tbaa !37
  %78 = add i32 %77, %.097.lcssa
  store i32 %78, ptr %76, align 8, !tbaa !37
  br label %.loopexit

.preheader116.lr.ph:                              ; preds = %._crit_edge132, %.lr.ph136
  %indvars.iv174 = phi i32 [ %2, %.lr.ph136 ], [ %indvars.iv.next175, %._crit_edge132 ]
  %.198135 = phi i32 [ 0, %.lr.ph136 ], [ %85, %._crit_edge132 ]
  %.0104133 = phi i32 [ 0, %.lr.ph136 ], [ %130, %._crit_edge132 ]
  %umin176 = call i32 @llvm.umin.i32(i32 %indvars.iv174, i32 512)
  %umax177 = call i32 @llvm.umax.i32(i32 %umin176, i32 1)
  %79 = sub i32 %2, %.0104133
  %80 = call i32 @llvm.umin.i32(i32 %79, i32 512)
  %81 = load ptr, ptr %16, align 8, !tbaa !19
  %82 = zext nneg i32 %80 to i64
  %83 = call i64 @drmp3_read_pcm_frames_f32(ptr noundef %81, i64 noundef %82, ptr noundef nonnull %5)
  %84 = trunc i64 %83 to i32
  %85 = add i32 %.198135, %84
  %86 = load i32, ptr %17, align 8, !tbaa !20
  %.not154 = icmp eq i32 %86, 0
  br i1 %.not154, label %._crit_edge132, label %.preheader116.us.preheader

.preheader116.us.preheader:                       ; preds = %.preheader116.lr.ph
  %wide.trip.count172 = zext i32 %86 to i64
  %xtraiter202 = and i64 %wide.trip.count172, 1
  %87 = icmp eq i32 %86, 1
  %unroll_iter204 = and i64 %wide.trip.count172, 4294967294
  %lcmp.mod203.not = icmp eq i64 %xtraiter202, 0
  br label %.preheader116.us

.preheader116.us:                                 ; preds = %.preheader116.us.preheader, %._crit_edge130.us
  %.0103131.us = phi i32 [ %129, %._crit_edge130.us ], [ 0, %.preheader116.us.preheader ]
  %88 = add nuw nsw i32 %.0103131.us, %.0104133
  br i1 %87, label %._crit_edge130.us.unr-lcssa, label %.preheader116.us.new

.preheader116.us.new:                             ; preds = %.preheader116.us, %.preheader116.us.new
  %indvars.iv169 = phi i64 [ %indvars.iv.next170.1, %.preheader116.us.new ], [ 0, %.preheader116.us ]
  %niter205 = phi i64 [ %niter205.next.1, %.preheader116.us.new ], [ 0, %.preheader116.us ]
  %89 = load ptr, ptr %16, align 8, !tbaa !19
  %90 = getelementptr inbounds i8, ptr %89, i64 6688
  %91 = load i32, ptr %90, align 8, !tbaa !38
  %92 = mul i32 %91, %.0103131.us
  %93 = trunc nuw i64 %indvars.iv169 to i32
  %94 = add i32 %92, %93
  %95 = zext i32 %94 to i64
  %96 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %95
  %97 = load float, ptr %96, align 4, !tbaa !32
  %98 = mul i32 %93, %2
  %99 = add i32 %88, %98
  %100 = zext i32 %99 to i64
  %101 = getelementptr inbounds float, ptr %1, i64 %100
  store float %97, ptr %101, align 4, !tbaa !32
  %102 = load ptr, ptr %16, align 8, !tbaa !19
  %103 = getelementptr inbounds i8, ptr %102, i64 6688
  %104 = load i32, ptr %103, align 8, !tbaa !38
  %105 = mul i32 %104, %.0103131.us
  %106 = trunc i64 %indvars.iv169 to i32
  %107 = or disjoint i32 %106, 1
  %108 = add i32 %105, %107
  %109 = zext i32 %108 to i64
  %110 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %109
  %111 = load float, ptr %110, align 4, !tbaa !32
  %112 = mul i32 %107, %2
  %113 = add i32 %88, %112
  %114 = zext i32 %113 to i64
  %115 = getelementptr inbounds float, ptr %1, i64 %114
  store float %111, ptr %115, align 4, !tbaa !32
  %indvars.iv.next170.1 = add nuw nsw i64 %indvars.iv169, 2
  %niter205.next.1 = add i64 %niter205, 2
  %niter205.ncmp.1 = icmp eq i64 %niter205.next.1, %unroll_iter204
  br i1 %niter205.ncmp.1, label %._crit_edge130.us.unr-lcssa, label %.preheader116.us.new, !llvm.loop !44

._crit_edge130.us.unr-lcssa:                      ; preds = %.preheader116.us.new, %.preheader116.us
  %indvars.iv169.unr = phi i64 [ 0, %.preheader116.us ], [ %indvars.iv.next170.1, %.preheader116.us.new ]
  br i1 %lcmp.mod203.not, label %._crit_edge130.us, label %._crit_edge130.us.epilog-lcssa

._crit_edge130.us.epilog-lcssa:                   ; preds = %._crit_edge130.us.unr-lcssa
  %116 = load ptr, ptr %16, align 8, !tbaa !19
  %117 = getelementptr inbounds i8, ptr %116, i64 6688
  %118 = load i32, ptr %117, align 8, !tbaa !38
  %119 = mul i32 %118, %.0103131.us
  %120 = trunc nuw i64 %indvars.iv169.unr to i32
  %121 = add i32 %119, %120
  %122 = zext i32 %121 to i64
  %123 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %122
  %124 = load float, ptr %123, align 4, !tbaa !32
  %125 = mul i32 %120, %2
  %126 = add i32 %88, %125
  %127 = zext i32 %126 to i64
  %128 = getelementptr inbounds float, ptr %1, i64 %127
  store float %124, ptr %128, align 4, !tbaa !32
  br label %._crit_edge130.us

._crit_edge130.us:                                ; preds = %._crit_edge130.us.unr-lcssa, %._crit_edge130.us.epilog-lcssa
  %129 = add nuw nsw i32 %.0103131.us, 1
  %exitcond178.not = icmp eq i32 %129, %umax177
  br i1 %exitcond178.not, label %._crit_edge132, label %.preheader116.us, !llvm.loop !45

._crit_edge132:                                   ; preds = %._crit_edge130.us, %.preheader116.lr.ph
  %130 = add i32 %.0104133, 512
  %131 = icmp ult i32 %130, %2
  %indvars.iv.next175 = add i32 %indvars.iv174, -512
  br i1 %131, label %.preheader116.lr.ph, label %._crit_edge137, !llvm.loop !46

._crit_edge137:                                   ; preds = %._crit_edge132, %.preheader117
  %.198.lcssa = phi i32 [ 0, %.preheader117 ], [ %85, %._crit_edge132 ]
  %132 = getelementptr inbounds i8, ptr %0, i64 504
  %133 = load i32, ptr %132, align 8, !tbaa !37
  %134 = add i32 %133, %.198.lcssa
  store i32 %134, ptr %132, align 8, !tbaa !37
  br label %.loopexit

135:                                              ; preds = %9
  %136 = getelementptr inbounds i8, ptr %0, i64 532
  %137 = load i32, ptr %136, align 4, !tbaa !47
  %138 = getelementptr inbounds i8, ptr %0, i64 528
  %139 = load i32, ptr %138, align 8, !tbaa !48
  %140 = icmp ult i32 %137, %139
  br i1 %140, label %141, label %152

141:                                              ; preds = %135
  %142 = getelementptr inbounds i8, ptr %0, i64 536
  %143 = load ptr, ptr %142, align 8, !tbaa !49
  %144 = getelementptr inbounds i8, ptr %0, i64 72
  %145 = load i32, ptr %144, align 8, !tbaa !20
  %146 = tail call noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef %143, ptr noundef %1, i32 noundef %2, i32 noundef %3, i32 noundef %139, i32 noundef %137, i32 noundef %145)
  %147 = getelementptr inbounds i8, ptr %0, i64 504
  %148 = load i32, ptr %147, align 8, !tbaa !37
  %149 = add i32 %148, %146
  store i32 %149, ptr %147, align 8, !tbaa !37
  %150 = load i32, ptr %136, align 4, !tbaa !47
  %151 = add i32 %150, %146
  store i32 %151, ptr %136, align 4, !tbaa !47
  br label %152

152:                                              ; preds = %141, %135
  %.299 = phi i32 [ %146, %141 ], [ 0, %135 ]
  %153 = getelementptr inbounds i8, ptr %0, i64 520
  %154 = getelementptr inbounds i8, ptr %0, i64 536
  %155 = getelementptr inbounds i8, ptr %0, i64 72
  %156 = getelementptr inbounds i8, ptr %0, i64 504
  br label %157

157:                                              ; preds = %159, %152
  %.3 = phi i32 [ %.299, %152 ], [ %170, %159 ]
  %158 = icmp ult i32 %.3, %2
  br i1 %158, label %159, label %.loopexit

159:                                              ; preds = %157
  %160 = load ptr, ptr %153, align 8, !tbaa !19
  %161 = tail call i32 @stb_vorbis_get_frame_float(ptr noundef %160, ptr noundef null, ptr noundef nonnull %154)
  store i32 %161, ptr %138, align 8, !tbaa !48
  store i32 0, ptr %136, align 4, !tbaa !47
  %162 = load ptr, ptr %154, align 8, !tbaa !49
  %163 = zext i32 %.3 to i64
  %164 = getelementptr inbounds float, ptr %1, i64 %163
  %165 = sub i32 %2, %.3
  %166 = load i32, ptr %155, align 8, !tbaa !20
  %167 = tail call noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef %162, ptr noundef %164, i32 noundef %165, i32 noundef %3, i32 noundef %161, i32 noundef 0, i32 noundef %166)
  %168 = load i32, ptr %156, align 8, !tbaa !37
  %169 = add i32 %168, %167
  store i32 %169, ptr %156, align 8, !tbaa !37
  %170 = add i32 %167, %.3
  %171 = load i32, ptr %136, align 4, !tbaa !47
  %172 = add i32 %171, %167
  store i32 %172, ptr %136, align 4, !tbaa !47
  %173 = load ptr, ptr %10, align 8, !tbaa !15
  %174 = getelementptr inbounds i8, ptr %173, i64 184
  %175 = load i32, ptr %174, align 8, !tbaa !50
  %176 = icmp ult i32 %169, %175
  %177 = icmp ne i32 %167, 0
  %or.cond.not = and i1 %177, %176
  br i1 %or.cond.not, label %157, label %.thread

.thread:                                          ; preds = %159
  %178 = add i32 %169, %170
  store i32 %178, ptr %156, align 8, !tbaa !37
  br label %.loopexit

.preheader118.lr.ph:                              ; preds = %._crit_edge124, %.lr.ph
  %indvars.iv166 = phi i32 [ %2, %.lr.ph ], [ %indvars.iv.next167, %._crit_edge124 ]
  %.096126 = phi i32 [ 0, %.lr.ph ], [ %233, %._crit_edge124 ]
  %.4125 = phi i32 [ 0, %.lr.ph ], [ %185, %._crit_edge124 ]
  %umin = call i32 @llvm.umin.i32(i32 %indvars.iv166, i32 512)
  %umax = call i32 @llvm.umax.i32(i32 %umin, i32 1)
  %179 = sub i32 %2, %.096126
  %180 = call i32 @llvm.umin.i32(i32 %179, i32 512)
  %181 = load ptr, ptr %14, align 8, !tbaa !19
  %182 = zext nneg i32 %180 to i64
  %183 = call i64 @drwav_read_pcm_frames_f32(ptr noundef %181, i64 noundef %182, ptr noundef nonnull %5)
  %184 = trunc i64 %183 to i32
  %185 = add i32 %.4125, %184
  %186 = load i32, ptr %15, align 8, !tbaa !20
  %.not151 = icmp eq i32 %186, 0
  br i1 %.not151, label %._crit_edge124, label %.preheader118.us.preheader

.preheader118.us.preheader:                       ; preds = %.preheader118.lr.ph
  %wide.trip.count = zext i32 %186 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %187 = icmp eq i32 %186, 1
  %unroll_iter = and i64 %wide.trip.count, 4294967294
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader118.us

.preheader118.us:                                 ; preds = %.preheader118.us.preheader, %._crit_edge.us
  %.095123.us = phi i32 [ %232, %._crit_edge.us ], [ 0, %.preheader118.us.preheader ]
  %188 = add nuw nsw i32 %.095123.us, %.096126
  br i1 %187, label %._crit_edge.us.unr-lcssa, label %.preheader118.us.new

.preheader118.us.new:                             ; preds = %.preheader118.us, %.preheader118.us.new
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader118.us.new ], [ 0, %.preheader118.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader118.us.new ], [ 0, %.preheader118.us ]
  %189 = load ptr, ptr %14, align 8, !tbaa !19
  %190 = getelementptr inbounds i8, ptr %189, i64 112
  %191 = load i16, ptr %190, align 8, !tbaa !51
  %192 = zext i16 %191 to i32
  %193 = mul i32 %.095123.us, %192
  %194 = trunc nuw i64 %indvars.iv to i32
  %195 = add i32 %193, %194
  %196 = zext i32 %195 to i64
  %197 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %196
  %198 = load float, ptr %197, align 4, !tbaa !32
  %199 = mul i32 %194, %2
  %200 = add i32 %188, %199
  %201 = zext i32 %200 to i64
  %202 = getelementptr inbounds float, ptr %1, i64 %201
  store float %198, ptr %202, align 4, !tbaa !32
  %203 = load ptr, ptr %14, align 8, !tbaa !19
  %204 = getelementptr inbounds i8, ptr %203, i64 112
  %205 = load i16, ptr %204, align 8, !tbaa !51
  %206 = zext i16 %205 to i32
  %207 = mul i32 %.095123.us, %206
  %208 = trunc i64 %indvars.iv to i32
  %209 = or disjoint i32 %208, 1
  %210 = add i32 %207, %209
  %211 = zext i32 %210 to i64
  %212 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %211
  %213 = load float, ptr %212, align 4, !tbaa !32
  %214 = mul i32 %209, %2
  %215 = add i32 %188, %214
  %216 = zext i32 %215 to i64
  %217 = getelementptr inbounds float, ptr %1, i64 %216
  store float %213, ptr %217, align 4, !tbaa !32
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader118.us.new, !llvm.loop !61

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader118.us.new, %.preheader118.us
  %indvars.iv.unr = phi i64 [ 0, %.preheader118.us ], [ %indvars.iv.next.1, %.preheader118.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %218 = load ptr, ptr %14, align 8, !tbaa !19
  %219 = getelementptr inbounds i8, ptr %218, i64 112
  %220 = load i16, ptr %219, align 8, !tbaa !51
  %221 = zext i16 %220 to i32
  %222 = mul i32 %.095123.us, %221
  %223 = trunc nuw i64 %indvars.iv.unr to i32
  %224 = add i32 %222, %223
  %225 = zext i32 %224 to i64
  %226 = getelementptr inbounds [4096 x float], ptr %5, i64 0, i64 %225
  %227 = load float, ptr %226, align 4, !tbaa !32
  %228 = mul i32 %223, %2
  %229 = add i32 %188, %228
  %230 = zext i32 %229 to i64
  %231 = getelementptr inbounds float, ptr %1, i64 %230
  store float %227, ptr %231, align 4, !tbaa !32
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %232 = add nuw nsw i32 %.095123.us, 1
  %exitcond168.not = icmp eq i32 %232, %umax
  br i1 %exitcond168.not, label %._crit_edge124, label %.preheader118.us, !llvm.loop !62

._crit_edge124:                                   ; preds = %._crit_edge.us, %.preheader118.lr.ph
  %233 = add i32 %.096126, 512
  %234 = icmp ult i32 %233, %2
  %indvars.iv.next167 = add i32 %indvars.iv166, -512
  br i1 %234, label %.preheader118.lr.ph, label %._crit_edge, !llvm.loop !63

._crit_edge:                                      ; preds = %._crit_edge124, %.preheader119
  %.4.lcssa = phi i32 [ 0, %.preheader119 ], [ %185, %._crit_edge124 ]
  %235 = getelementptr inbounds i8, ptr %0, i64 504
  %236 = load i32, ptr %235, align 8, !tbaa !37
  %237 = add i32 %236, %.4.lcssa
  store i32 %237, ptr %235, align 8, !tbaa !37
  br label %.loopexit

.loopexit:                                        ; preds = %157, %.thread, %9, %4, %._crit_edge, %._crit_edge137, %._crit_edge148
  %.2 = phi i32 [ %.4.lcssa, %._crit_edge ], [ %.198.lcssa, %._crit_edge137 ], [ %.097.lcssa, %._crit_edge148 ], [ 0, %4 ], [ %2, %9 ], [ %170, %.thread ], [ %2, %157 ]
  call void @llvm.lifetime.end.p0(i64 16384, ptr nonnull %5) #5
  ret i32 %.2
}

declare i64 @drflac_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare i64 @drmp3_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN6SoLoudL10getOggDataEPPfS0_iiiii(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

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

declare i64 @drwav_read_pcm_frames_f32(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 = { 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, !14, i64 512}
!6 = !{!"_ZTSN6SoLoud17WavStreamInstanceE", !7, i64 0, !14, i64 496, !8, i64 504, !14, i64 512, !9, i64 520, !8, i64 528, !8, i64 532, !14, i64 536}
!7 = !{!"_ZTSN6SoLoud19AudioSourceInstanceE", !8, i64 8, !8, i64 12, !8, i64 16, !11, i64 20, !9, i64 24, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !8, i64 72, !11, i64 76, !11, i64 80, !12, i64 88, !12, i64 96, !13, i64 104, !13, i64 152, !13, i64 200, !13, i64 248, !13, i64 296, !8, i64 344, !9, i64 348, !8, i64 380, !8, i64 384, !9, i64 392, !9, i64 456, !8, i64 472, !8, i64 476, !8, i64 480, !12, i64 488}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"float", !9, i64 0}
!12 = !{!"double", !9, i64 0}
!13 = !{!"_ZTSN6SoLoud5FaderE", !11, i64 0, !11, i64 4, !11, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !8, i64 44}
!14 = !{!"any pointer", !9, i64 0}
!15 = !{!6, !14, i64 496}
!16 = !{!17, !8, i64 152}
!17 = !{!"_ZTSN6SoLoud9WavStreamE", !18, i64 0, !8, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !8, i64 184}
!18 = !{!"_ZTSN6SoLoud11AudioSourceE", !8, i64 8, !11, i64 12, !11, i64 16, !8, i64 20, !8, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !8, i64 40, !11, i64 44, !9, i64 48, !14, i64 112, !14, i64 120, !14, i64 128, !8, i64 136, !12, i64 144}
!19 = !{!9, !9, i64 0}
!20 = !{!7, !8, i64 72}
!21 = !{!22, !9, i64 52}
!22 = !{!"_ZTS6drflac", !14, i64 0, !14, i64 8, !23, i64 16, !8, i64 48, !9, i64 52, !9, i64 53, !24, i64 54, !25, i64 56, !26, i64 64, !8, i64 68, !27, i64 72, !25, i64 232, !25, i64 240, !29, i64 248, !14, i64 272, !14, i64 280, !14, i64 288, !8, i64 296, !8, i64 296, !8, i64 296, !31, i64 304, !9, i64 4480}
!23 = !{!"_ZTS27drflac_allocation_callbacks", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!24 = !{!"short", !9, i64 0}
!25 = !{!"long long", !9, i64 0}
!26 = !{!"_ZTS16drflac_container", !9, i64 0}
!27 = !{!"_ZTS12drflac_frame", !28, i64 0, !8, i64 24, !9, i64 32}
!28 = !{!"_ZTS19drflac_frame_header", !25, i64 0, !8, i64 8, !8, i64 12, !24, i64 16, !9, i64 18, !9, i64 19, !9, i64 20}
!29 = !{!"_ZTS21drflac__memory_stream", !14, i64 0, !30, i64 8, !30, i64 16}
!30 = !{!"long", !9, i64 0}
!31 = !{!"_ZTS9drflac_bs", !14, i64 0, !14, i64 8, !14, i64 16, !30, i64 24, !25, i64 32, !8, i64 40, !8, i64 44, !9, i64 48, !25, i64 4144, !24, i64 4152, !25, i64 4160, !8, i64 4168}
!32 = !{!11, !11, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = distinct !{!35, !34}
!36 = distinct !{!36, !34}
!37 = !{!6, !8, i64 504}
!38 = !{!39, !8, i64 6688}
!39 = !{!"_ZTS5drmp3", !40, i64 0, !41, i64 6668, !8, i64 6688, !8, i64 6692, !14, i64 6696, !14, i64 6704, !14, i64 6712, !42, i64 6720, !8, i64 6752, !8, i64 6756, !8, i64 6760, !8, i64 6764, !9, i64 6768, !25, i64 15984, !25, i64 15992, !14, i64 16000, !8, i64 16008, !30, i64 16016, !30, i64 16024, !30, i64 16032, !14, i64 16040, !8, i64 16048, !43, i64 16056}
!40 = !{!"_ZTS8drmp3dec", !9, i64 0, !9, i64 2304, !8, i64 6144, !8, i64 6148, !9, i64 6152, !9, i64 6156}
!41 = !{!"_ZTS19drmp3dec_frame_info", !8, i64 0, !8, i64 4, !8, i64 8, !8, i64 12, !8, i64 16}
!42 = !{!"_ZTS26drmp3_allocation_callbacks", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!43 = !{!"_ZTSN5drmp3Ut_E", !14, i64 0, !30, i64 8, !30, i64 16}
!44 = distinct !{!44, !34}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = !{!6, !8, i64 532}
!48 = !{!6, !8, i64 528}
!49 = !{!6, !14, i64 536}
!50 = !{!17, !8, i64 184}
!51 = !{!52, !24, i64 112}
!52 = !{!"_ZTS5drwav", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !53, i64 32, !54, i64 64, !55, i64 68, !8, i64 108, !24, i64 112, !24, i64 114, !24, i64 116, !25, i64 120, !25, i64 128, !25, i64 136, !25, i64 144, !25, i64 152, !25, i64 160, !8, i64 168, !56, i64 172, !14, i64 176, !8, i64 184, !57, i64 192, !58, i64 216, !59, i64 256, !60, i64 308}
!53 = !{!"_ZTS26drwav_allocation_callbacks", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!54 = !{!"_ZTS15drwav_container", !9, i64 0}
!55 = !{!"_ZTS9drwav_fmt", !24, i64 0, !24, i64 2, !8, i64 4, !8, i64 8, !24, i64 12, !24, i64 14, !24, i64 16, !24, i64 18, !8, i64 20, !9, i64 24}
!56 = !{!"_ZTS19drwav_metadata_type", !9, i64 0}
!57 = !{!"_ZTS20drwav__memory_stream", !14, i64 0, !30, i64 8, !30, i64 16}
!58 = !{!"_ZTS26drwav__memory_stream_write", !14, i64 0, !14, i64 8, !30, i64 16, !30, i64 24, !30, i64 32}
!59 = !{!"_ZTSN5drwavUt_E", !8, i64 0, !9, i64 4, !9, i64 8, !9, i64 16, !8, i64 32, !9, i64 36}
!60 = !{!"_ZTSN5drwavUt0_E", !8, i64 0, !9, i64 4, !9, i64 12, !9, i64 20, !8, i64 84}
!61 = distinct !{!61, !34}
!62 = distinct !{!62, !34}
!63 = distinct !{!63, !34}


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