; LLVM IR from Overload-Technologies/Overload :: Dependencies/soloud/src/audiosource/sfxr (soloud_sfxr)

; 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::SfxrInstance" = type { %"class.SoLoud::AudioSourceInstance", ptr, %"class.SoLoud::Misc::Prg", %"struct.SoLoud::SfxrParams", i8, i32, double, double, double, double, i32, float, float, i32, i32, [3 x i32], float, float, float, i32, [1024 x float], i32, [32 x float], float, float, float, float, float, float, float, float, float, float, float, i32, i32, i32, i32, double }
%"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 }
%"class.SoLoud::Misc::Prg" = type { [16 x i32], i32 }
%"struct.SoLoud::SfxrParams" = type { i32, float, float, float, float, float, float, float, float, float, float, float, float, float, i8, float, float, float, float, float, float, float, float, float, float, float, float }

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064), i1 noundef zeroext) #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6SoLoud12SfxrInstance8getAudioEPfjj(ptr noundef nonnull align 8 dereferenceable(5064) %0, ptr noundef %1, i32 noundef %2, i32 noundef %3) unnamed_addr #0 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 ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca i32, align 4
  %16 = alloca float, align 4
  %17 = alloca i32, align 4
  %18 = alloca float, align 4
  %19 = alloca float, 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
  %20 = load ptr, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %21 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %21, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %22

22:                                               ; preds = %511, %4
  %23 = load i32, ptr %11, align 4, !tbaa !9
  %24 = load i32, ptr %8, align 4, !tbaa !9
  %25 = icmp ult i32 %23, %24
  br i1 %25, label %26, label %514

26:                                               ; preds = %22
  %27 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 34
  %28 = load i32, ptr %27, align 8, !tbaa !11
  %29 = add nsw i32 %28, 1
  store i32 %29, ptr %27, align 8, !tbaa !11
  %30 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 35
  %31 = load i32, ptr %30, align 4, !tbaa !20
  %32 = icmp ne i32 %31, 0
  br i1 %32, label %33, label %41

33:                                               ; preds = %26
  %34 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 34
  %35 = load i32, ptr %34, align 8, !tbaa !11
  %36 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 35
  %37 = load i32, ptr %36, align 4, !tbaa !20
  %38 = icmp sge i32 %35, %37
  br i1 %38, label %39, label %41

39:                                               ; preds = %33
  %40 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 34
  store i32 0, ptr %40, align 8, !tbaa !11
  call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %20, i1 noundef zeroext true)
  br label %41

41:                                               ; preds = %39, %33, %26
  %42 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 36
  %43 = load i32, ptr %42, align 8, !tbaa !21
  %44 = add nsw i32 %43, 1
  store i32 %44, ptr %42, align 8, !tbaa !21
  %45 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 37
  %46 = load i32, ptr %45, align 4, !tbaa !22
  %47 = icmp ne i32 %46, 0
  br i1 %47, label %48, label %61

48:                                               ; preds = %41
  %49 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 36
  %50 = load i32, ptr %49, align 8, !tbaa !21
  %51 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 37
  %52 = load i32, ptr %51, align 4, !tbaa !22
  %53 = icmp sge i32 %50, %52
  br i1 %53, label %54, label %61

54:                                               ; preds = %48
  %55 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 37
  store i32 0, ptr %55, align 4, !tbaa !22
  %56 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 38
  %57 = load double, ptr %56, align 8, !tbaa !23
  %58 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  %59 = load double, ptr %58, align 8, !tbaa !24
  %60 = fmul double %59, %57
  store double %60, ptr %58, align 8, !tbaa !24
  br label %61

61:                                               ; preds = %54, %48, %41
  %62 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 9
  %63 = load double, ptr %62, align 8, !tbaa !25
  %64 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 8
  %65 = load double, ptr %64, align 8, !tbaa !26
  %66 = fadd double %65, %63
  store double %66, ptr %64, align 8, !tbaa !26
  %67 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 8
  %68 = load double, ptr %67, align 8, !tbaa !26
  %69 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  %70 = load double, ptr %69, align 8, !tbaa !24
  %71 = fmul double %70, %68
  store double %71, ptr %69, align 8, !tbaa !24
  %72 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  %73 = load double, ptr %72, align 8, !tbaa !24
  %74 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 7
  %75 = load double, ptr %74, align 8, !tbaa !27
  %76 = fcmp ogt double %73, %75
  br i1 %76, label %77, label %96

77:                                               ; preds = %61
  %78 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 7
  %79 = load double, ptr %78, align 8, !tbaa !27
  %80 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  store double %79, ptr %80, align 8, !tbaa !24
  %81 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %82 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %81, i32 0, i32 2
  %83 = load float, ptr %82, align 4, !tbaa !28
  %84 = fcmp ogt float %83, 0.000000e+00
  br i1 %84, label %85, label %95

85:                                               ; preds = %77
  %86 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %20, i32 0, i32 3
  %87 = load i32, ptr %86, align 8, !tbaa !29
  %88 = and i32 %87, 1
  %89 = icmp ne i32 %88, 0
  br i1 %89, label %90, label %91

90:                                               ; preds = %85
  call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %20, i1 noundef zeroext false)
  br label %94

91:                                               ; preds = %85
  %92 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 4
  store i8 0, ptr %92, align 8, !tbaa !30
  %93 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %93, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %516

94:                                               ; preds = %90
  br label %95

95:                                               ; preds = %94, %77
  br label %96

96:                                               ; preds = %95, %61
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  %97 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  %98 = load double, ptr %97, align 8, !tbaa !24
  %99 = fptrunc double %98 to float
  store float %99, ptr %13, align 4, !tbaa !31
  %100 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 33
  %101 = load float, ptr %100, align 4, !tbaa !32
  %102 = fcmp ogt float %101, 0.000000e+00
  br i1 %102, label %103, label %121

103:                                              ; preds = %96
  %104 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 32
  %105 = load float, ptr %104, align 8, !tbaa !33
  %106 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 31
  %107 = load float, ptr %106, align 4, !tbaa !34
  %108 = fadd float %107, %105
  store float %108, ptr %106, align 4, !tbaa !34
  %109 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 6
  %110 = load double, ptr %109, align 8, !tbaa !24
  %111 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 31
  %112 = load float, ptr %111, align 4, !tbaa !34
  %113 = call noundef float @_ZSt3sinf(float noundef %112)
  %114 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 33
  %115 = load float, ptr %114, align 4, !tbaa !32
  %116 = fmul float %113, %115
  %117 = fpext float %116 to double
  %118 = fadd double 1.000000e+00, %117
  %119 = fmul double %110, %118
  %120 = fptrunc double %119 to float
  store float %120, ptr %13, align 4, !tbaa !31
  br label %121

121:                                              ; preds = %103, %96
  %122 = load float, ptr %13, align 4, !tbaa !31
  %123 = fptosi float %122 to i32
  %124 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  store i32 %123, ptr %124, align 8, !tbaa !35
  %125 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  %126 = load i32, ptr %125, align 8, !tbaa !35
  %127 = icmp slt i32 %126, 8
  br i1 %127, label %128, label %130

128:                                              ; preds = %121
  %129 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  store i32 8, ptr %129, align 8, !tbaa !35
  br label %130

130:                                              ; preds = %128, %121
  %131 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 12
  %132 = load float, ptr %131, align 8, !tbaa !36
  %133 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  %134 = load float, ptr %133, align 4, !tbaa !37
  %135 = fadd float %134, %132
  store float %135, ptr %133, align 4, !tbaa !37
  %136 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  %137 = load float, ptr %136, align 4, !tbaa !37
  %138 = fcmp olt float %137, 0.000000e+00
  br i1 %138, label %139, label %141

139:                                              ; preds = %130
  %140 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  store float 0.000000e+00, ptr %140, align 4, !tbaa !37
  br label %141

141:                                              ; preds = %139, %130
  %142 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  %143 = load float, ptr %142, align 4, !tbaa !37
  %144 = fcmp ogt float %143, 5.000000e-01
  br i1 %144, label %145, label %147

145:                                              ; preds = %141
  %146 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  store float 5.000000e-01, ptr %146, align 4, !tbaa !37
  br label %147

147:                                              ; preds = %145, %141
  %148 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  %149 = load i32, ptr %148, align 8, !tbaa !38
  %150 = add nsw i32 %149, 1
  store i32 %150, ptr %148, align 8, !tbaa !38
  %151 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  %152 = load i32, ptr %151, align 8, !tbaa !38
  %153 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %154 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %155 = load i32, ptr %154, align 4, !tbaa !39
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds [3 x i32], ptr %153, i64 0, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = icmp sgt i32 %152, %158
  br i1 %159, label %160, label %179

160:                                              ; preds = %147
  %161 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  store i32 0, ptr %161, align 8, !tbaa !38
  %162 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %163 = load i32, ptr %162, align 4, !tbaa !39
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %162, align 4, !tbaa !39
  %165 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %166 = load i32, ptr %165, align 4, !tbaa !39
  %167 = icmp eq i32 %166, 3
  br i1 %167, label %168, label %178

168:                                              ; preds = %160
  %169 = getelementptr inbounds %"class.SoLoud::AudioSourceInstance", ptr %20, i32 0, i32 3
  %170 = load i32, ptr %169, align 8, !tbaa !29
  %171 = and i32 %170, 1
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %174

173:                                              ; preds = %168
  call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %20, i1 noundef zeroext false)
  br label %177

174:                                              ; preds = %168
  %175 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 4
  store i8 0, ptr %175, align 8, !tbaa !30
  %176 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %176, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %508

177:                                              ; preds = %173
  br label %178

178:                                              ; preds = %177, %160
  br label %179

179:                                              ; preds = %178, %147
  %180 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %181 = load i32, ptr %180, align 4, !tbaa !39
  %182 = icmp eq i32 %181, 0
  br i1 %182, label %183, label %201

183:                                              ; preds = %179
  %184 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %185 = getelementptr inbounds [3 x i32], ptr %184, i64 0, i64 0
  %186 = load i32, ptr %185, align 4, !tbaa !9
  %187 = icmp ne i32 %186, 0
  br i1 %187, label %188, label %198

188:                                              ; preds = %183
  %189 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  %190 = load i32, ptr %189, align 8, !tbaa !38
  %191 = sitofp i32 %190 to float
  %192 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %193 = getelementptr inbounds [3 x i32], ptr %192, i64 0, i64 0
  %194 = load i32, ptr %193, align 4, !tbaa !9
  %195 = sitofp i32 %194 to float
  %196 = fdiv float %191, %195
  %197 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float %196, ptr %197, align 8, !tbaa !40
  br label %200

198:                                              ; preds = %183
  %199 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float 0.000000e+00, ptr %199, align 8, !tbaa !40
  br label %200

200:                                              ; preds = %198, %188
  br label %201

201:                                              ; preds = %200, %179
  %202 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %203 = load i32, ptr %202, align 4, !tbaa !39
  %204 = icmp eq i32 %203, 1
  br i1 %204, label %205, label %230

205:                                              ; preds = %201
  %206 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %207 = getelementptr inbounds [3 x i32], ptr %206, i64 0, i64 1
  %208 = load i32, ptr %207, align 4, !tbaa !9
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %227

210:                                              ; preds = %205
  %211 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  %212 = load i32, ptr %211, align 8, !tbaa !38
  %213 = sitofp i32 %212 to float
  %214 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %215 = getelementptr inbounds [3 x i32], ptr %214, i64 0, i64 1
  %216 = load i32, ptr %215, align 4, !tbaa !9
  %217 = sitofp i32 %216 to float
  %218 = fdiv float %213, %217
  %219 = fsub float 1.000000e+00, %218
  %220 = call noundef float @_ZSt3powff(float noundef %219, float noundef 1.000000e+00)
  %221 = fmul float %220, 2.000000e+00
  %222 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %223 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %222, i32 0, i32 13
  %224 = load float, ptr %223, align 4, !tbaa !41
  %225 = call float @llvm.fmuladd.f32(float %221, float %224, float 1.000000e+00)
  %226 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float %225, ptr %226, align 8, !tbaa !40
  br label %229

227:                                              ; preds = %205
  %228 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float 0.000000e+00, ptr %228, align 8, !tbaa !40
  br label %229

229:                                              ; preds = %227, %210
  br label %230

230:                                              ; preds = %229, %201
  %231 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 13
  %232 = load i32, ptr %231, align 4, !tbaa !39
  %233 = icmp eq i32 %232, 2
  br i1 %233, label %234, label %253

234:                                              ; preds = %230
  %235 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %236 = getelementptr inbounds [3 x i32], ptr %235, i64 0, i64 2
  %237 = load i32, ptr %236, align 4, !tbaa !9
  %238 = icmp ne i32 %237, 0
  br i1 %238, label %239, label %250

239:                                              ; preds = %234
  %240 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 14
  %241 = load i32, ptr %240, align 8, !tbaa !38
  %242 = sitofp i32 %241 to float
  %243 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 15
  %244 = getelementptr inbounds [3 x i32], ptr %243, i64 0, i64 2
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = sitofp i32 %245 to float
  %247 = fdiv float %242, %246
  %248 = fsub float 1.000000e+00, %247
  %249 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float %248, ptr %249, align 8, !tbaa !40
  br label %252

250:                                              ; preds = %234
  %251 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  store float 0.000000e+00, ptr %251, align 8, !tbaa !40
  br label %252

252:                                              ; preds = %250, %239
  br label %253

253:                                              ; preds = %252, %230
  %254 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 18
  %255 = load float, ptr %254, align 8, !tbaa !42
  %256 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 17
  %257 = load float, ptr %256, align 4, !tbaa !43
  %258 = fadd float %257, %255
  store float %258, ptr %256, align 4, !tbaa !43
  %259 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 17
  %260 = load float, ptr %259, align 4, !tbaa !43
  %261 = fptosi float %260 to i32
  %262 = call i32 @llvm.abs.i32(i32 %261, i1 true)
  %263 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 19
  store i32 %262, ptr %263, align 4, !tbaa !44
  %264 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 19
  %265 = load i32, ptr %264, align 4, !tbaa !44
  %266 = icmp sgt i32 %265, 1023
  br i1 %266, label %267, label %269

267:                                              ; preds = %253
  %268 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 19
  store i32 1023, ptr %268, align 4, !tbaa !44
  br label %269

269:                                              ; preds = %267, %253
  %270 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 30
  %271 = load float, ptr %270, align 8, !tbaa !45
  %272 = fcmp une float %271, 0.000000e+00
  br i1 %272, label %273, label %291

273:                                              ; preds = %269
  %274 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 30
  %275 = load float, ptr %274, align 8, !tbaa !45
  %276 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  %277 = load float, ptr %276, align 4, !tbaa !46
  %278 = fmul float %277, %275
  store float %278, ptr %276, align 4, !tbaa !46
  %279 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  %280 = load float, ptr %279, align 4, !tbaa !46
  %281 = fcmp olt float %280, 0x3EE4F8B580000000
  br i1 %281, label %282, label %284

282:                                              ; preds = %273
  %283 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  store float 0x3EE4F8B580000000, ptr %283, align 4, !tbaa !46
  br label %284

284:                                              ; preds = %282, %273
  %285 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  %286 = load float, ptr %285, align 4, !tbaa !46
  %287 = fcmp ogt float %286, 0x3FB99999A0000000
  br i1 %287, label %288, label %290

288:                                              ; preds = %284
  %289 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  store float 0x3FB99999A0000000, ptr %289, align 4, !tbaa !46
  br label %290

290:                                              ; preds = %288, %284
  br label %291

291:                                              ; preds = %290, %269
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store float 0.000000e+00, ptr %14, align 4, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %292

292:                                              ; preds = %476, %291
  %293 = load i32, ptr %15, align 4, !tbaa !9
  %294 = icmp slt i32 %293, 8
  br i1 %294, label %296, label %295

295:                                              ; preds = %292
  store i32 5, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %479

296:                                              ; preds = %292
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store float 0.000000e+00, ptr %16, align 4, !tbaa !31
  %297 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 5
  %298 = load i32, ptr %297, align 4, !tbaa !47
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %297, align 4, !tbaa !47
  %300 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 5
  %301 = load i32, ptr %300, align 4, !tbaa !47
  %302 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  %303 = load i32, ptr %302, align 8, !tbaa !35
  %304 = icmp sge i32 %301, %303
  br i1 %304, label %305, label %336

305:                                              ; preds = %296
  %306 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  %307 = load i32, ptr %306, align 8, !tbaa !35
  %308 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 5
  %309 = load i32, ptr %308, align 4, !tbaa !47
  %310 = srem i32 %309, %307
  store i32 %310, ptr %308, align 4, !tbaa !47
  %311 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %312 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %311, i32 0, i32 0
  %313 = load i32, ptr %312, align 4, !tbaa !48
  %314 = icmp eq i32 %313, 3
  br i1 %314, label %315, label %335

315:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %316

316:                                              ; preds = %331, %315
  %317 = load i32, ptr %17, align 4, !tbaa !9
  %318 = icmp slt i32 %317, 32
  br i1 %318, label %320, label %319

319:                                              ; preds = %316
  store i32 8, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %334

320:                                              ; preds = %316
  %321 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 2
  %322 = call noundef i32 @_ZN6SoLoud4Misc3Prg4randEv(ptr noundef nonnull align 4 dereferenceable(68) %321)
  %323 = urem i32 %322, 10001
  %324 = uitofp i32 %323 to float
  %325 = fdiv float %324, 1.000000e+04
  %326 = call float @llvm.fmuladd.f32(float %325, float 2.000000e+00, float -1.000000e+00)
  %327 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 22
  %328 = load i32, ptr %17, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds [32 x float], ptr %327, i64 0, i64 %329
  store float %326, ptr %330, align 4, !tbaa !31
  br label %331

331:                                              ; preds = %320
  %332 = load i32, ptr %17, align 4, !tbaa !9
  %333 = add nsw i32 %332, 1
  store i32 %333, ptr %17, align 4, !tbaa !9
  br label %316, !llvm.loop !49

334:                                              ; preds = %319
  br label %335

335:                                              ; preds = %334, %305
  br label %336

336:                                              ; preds = %335, %296
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  %337 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 5
  %338 = load i32, ptr %337, align 4, !tbaa !47
  %339 = sitofp i32 %338 to float
  %340 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  %341 = load i32, ptr %340, align 8, !tbaa !35
  %342 = sitofp i32 %341 to float
  %343 = fdiv float %339, %342
  store float %343, ptr %18, align 4, !tbaa !31
  %344 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %345 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %344, i32 0, i32 0
  %346 = load i32, ptr %345, align 4, !tbaa !48
  switch i32 %346, label %377 [
    i32 0, label %347
    i32 1, label %355
    i32 2, label %359
    i32 3, label %366
  ]

347:                                              ; preds = %336
  %348 = load float, ptr %18, align 4, !tbaa !31
  %349 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 11
  %350 = load float, ptr %349, align 4, !tbaa !37
  %351 = fcmp olt float %348, %350
  br i1 %351, label %352, label %353

352:                                              ; preds = %347
  store float 5.000000e-01, ptr %16, align 4, !tbaa !31
  br label %354

353:                                              ; preds = %347
  store float -5.000000e-01, ptr %16, align 4, !tbaa !31
  br label %354

354:                                              ; preds = %353, %352
  br label %377

355:                                              ; preds = %336
  %356 = load float, ptr %18, align 4, !tbaa !31
  %357 = fneg float %356
  %358 = call float @llvm.fmuladd.f32(float %357, float 2.000000e+00, float 1.000000e+00)
  store float %358, ptr %16, align 4, !tbaa !31
  br label %377

359:                                              ; preds = %336
  %360 = load float, ptr %18, align 4, !tbaa !31
  %361 = fmul float %360, 2.000000e+00
  %362 = fpext float %361 to double
  %363 = fmul double %362, 0x400921FB54442D18
  %364 = call double @sin(double noundef %363) #6
  %365 = fptrunc double %364 to float
  store float %365, ptr %16, align 4, !tbaa !31
  br label %377

366:                                              ; preds = %336
  %367 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 22
  %368 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 5
  %369 = load i32, ptr %368, align 4, !tbaa !47
  %370 = mul nsw i32 %369, 32
  %371 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 10
  %372 = load i32, ptr %371, align 8, !tbaa !35
  %373 = sdiv i32 %370, %372
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds [32 x float], ptr %367, i64 0, i64 %374
  %376 = load float, ptr %375, align 4, !tbaa !31
  store float %376, ptr %16, align 4, !tbaa !31
  br label %377

377:                                              ; preds = %366, %359, %355, %354, %336
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  %378 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 23
  %379 = load float, ptr %378, align 4, !tbaa !51
  store float %379, ptr %19, align 4, !tbaa !31
  %380 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 26
  %381 = load float, ptr %380, align 8, !tbaa !52
  %382 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  %383 = load float, ptr %382, align 4, !tbaa !53
  %384 = fmul float %383, %381
  store float %384, ptr %382, align 4, !tbaa !53
  %385 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  %386 = load float, ptr %385, align 4, !tbaa !53
  %387 = fcmp olt float %386, 0.000000e+00
  br i1 %387, label %388, label %390

388:                                              ; preds = %377
  %389 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  store float 0.000000e+00, ptr %389, align 4, !tbaa !53
  br label %390

390:                                              ; preds = %388, %377
  %391 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  %392 = load float, ptr %391, align 4, !tbaa !53
  %393 = fcmp ogt float %392, 0x3FB99999A0000000
  br i1 %393, label %394, label %396

394:                                              ; preds = %390
  %395 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  store float 0x3FB99999A0000000, ptr %395, align 4, !tbaa !53
  br label %396

396:                                              ; preds = %394, %390
  %397 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %398 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %397, i32 0, i32 16
  %399 = load float, ptr %398, align 4, !tbaa !54
  %400 = fcmp une float %399, 1.000000e+00
  br i1 %400, label %401, label %419

401:                                              ; preds = %396
  %402 = load float, ptr %16, align 4, !tbaa !31
  %403 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 23
  %404 = load float, ptr %403, align 4, !tbaa !51
  %405 = fsub float %402, %404
  %406 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 25
  %407 = load float, ptr %406, align 4, !tbaa !53
  %408 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 24
  %409 = load float, ptr %408, align 8, !tbaa !55
  %410 = call float @llvm.fmuladd.f32(float %405, float %407, float %409)
  store float %410, ptr %408, align 8, !tbaa !55
  %411 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 24
  %412 = load float, ptr %411, align 8, !tbaa !55
  %413 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 27
  %414 = load float, ptr %413, align 4, !tbaa !56
  %415 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 24
  %416 = load float, ptr %415, align 8, !tbaa !55
  %417 = fneg float %412
  %418 = call float @llvm.fmuladd.f32(float %417, float %414, float %416)
  store float %418, ptr %415, align 8, !tbaa !55
  br label %423

419:                                              ; preds = %396
  %420 = load float, ptr %16, align 4, !tbaa !31
  %421 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 23
  store float %420, ptr %421, align 4, !tbaa !51
  %422 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 24
  store float 0.000000e+00, ptr %422, align 8, !tbaa !55
  br label %423

423:                                              ; preds = %419, %401
  %424 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 24
  %425 = load float, ptr %424, align 8, !tbaa !55
  %426 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 23
  %427 = load float, ptr %426, align 4, !tbaa !51
  %428 = fadd float %427, %425
  store float %428, ptr %426, align 4, !tbaa !51
  %429 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 23
  %430 = load float, ptr %429, align 4, !tbaa !51
  %431 = load float, ptr %19, align 4, !tbaa !31
  %432 = fsub float %430, %431
  %433 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 28
  %434 = load float, ptr %433, align 8, !tbaa !57
  %435 = fadd float %434, %432
  store float %435, ptr %433, align 8, !tbaa !57
  %436 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 28
  %437 = load float, ptr %436, align 8, !tbaa !57
  %438 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 29
  %439 = load float, ptr %438, align 4, !tbaa !46
  %440 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 28
  %441 = load float, ptr %440, align 8, !tbaa !57
  %442 = fneg float %437
  %443 = call float @llvm.fmuladd.f32(float %442, float %439, float %441)
  store float %443, ptr %440, align 8, !tbaa !57
  %444 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 28
  %445 = load float, ptr %444, align 8, !tbaa !57
  store float %445, ptr %16, align 4, !tbaa !31
  %446 = load float, ptr %16, align 4, !tbaa !31
  %447 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 20
  %448 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 21
  %449 = load i32, ptr %448, align 8, !tbaa !58
  %450 = and i32 %449, 1023
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds [1024 x float], ptr %447, i64 0, i64 %451
  store float %446, ptr %452, align 4, !tbaa !31
  %453 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 20
  %454 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 21
  %455 = load i32, ptr %454, align 8, !tbaa !58
  %456 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 19
  %457 = load i32, ptr %456, align 4, !tbaa !44
  %458 = sub nsw i32 %455, %457
  %459 = add nsw i32 %458, 1024
  %460 = and i32 %459, 1023
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds [1024 x float], ptr %453, i64 0, i64 %461
  %463 = load float, ptr %462, align 4, !tbaa !31
  %464 = load float, ptr %16, align 4, !tbaa !31
  %465 = fadd float %464, %463
  store float %465, ptr %16, align 4, !tbaa !31
  %466 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 21
  %467 = load i32, ptr %466, align 8, !tbaa !58
  %468 = add nsw i32 %467, 1
  %469 = and i32 %468, 1023
  %470 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 21
  store i32 %469, ptr %470, align 8, !tbaa !58
  %471 = load float, ptr %16, align 4, !tbaa !31
  %472 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 16
  %473 = load float, ptr %472, align 8, !tbaa !40
  %474 = load float, ptr %14, align 4, !tbaa !31
  %475 = call float @llvm.fmuladd.f32(float %471, float %473, float %474)
  store float %475, ptr %14, align 4, !tbaa !31
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %476

476:                                              ; preds = %423
  %477 = load i32, ptr %15, align 4, !tbaa !9
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr %15, align 4, !tbaa !9
  br label %292, !llvm.loop !59

479:                                              ; preds = %295
  %480 = load float, ptr %14, align 4, !tbaa !31
  %481 = fdiv float %480, 8.000000e+00
  %482 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %483 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %482, i32 0, i32 25
  %484 = load float, ptr %483, align 4, !tbaa !60
  %485 = fmul float %481, %484
  store float %485, ptr %14, align 4, !tbaa !31
  %486 = getelementptr inbounds %"class.SoLoud::SfxrInstance", ptr %20, i32 0, i32 3
  %487 = getelementptr inbounds %"struct.SoLoud::SfxrParams", ptr %486, i32 0, i32 26
  %488 = load float, ptr %487, align 4, !tbaa !61
  %489 = fmul float 2.000000e+00, %488
  %490 = load float, ptr %14, align 4, !tbaa !31
  %491 = fmul float %490, %489
  store float %491, ptr %14, align 4, !tbaa !31
  %492 = load ptr, ptr %10, align 8, !tbaa !5
  %493 = icmp ne ptr %492, null
  br i1 %493, label %494, label %507

494:                                              ; preds = %479
  %495 = load float, ptr %14, align 4, !tbaa !31
  %496 = fcmp ogt float %495, 1.000000e+00
  br i1 %496, label %497, label %498

497:                                              ; preds = %494
  store float 1.000000e+00, ptr %14, align 4, !tbaa !31
  br label %498

498:                                              ; preds = %497, %494
  %499 = load float, ptr %14, align 4, !tbaa !31
  %500 = fcmp olt float %499, -1.000000e+00
  br i1 %500, label %501, label %502

501:                                              ; preds = %498
  store float -1.000000e+00, ptr %14, align 4, !tbaa !31
  br label %502

502:                                              ; preds = %501, %498
  %503 = load float, ptr %14, align 4, !tbaa !31
  %504 = load ptr, ptr %10, align 8, !tbaa !5
  store float %503, ptr %504, align 4, !tbaa !31
  %505 = load ptr, ptr %10, align 8, !tbaa !5
  %506 = getelementptr inbounds float, ptr %505, i32 1
  store ptr %506, ptr %10, align 8, !tbaa !5
  br label %507

507:                                              ; preds = %502, %479
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  store i32 0, ptr %12, align 4
  br label %508

508:                                              ; preds = %507, %174
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  %509 = load i32, ptr %12, align 4
  switch i32 %509, label %516 [
    i32 0, label %510
  ]

510:                                              ; preds = %508
  br label %511

511:                                              ; preds = %510
  %512 = load i32, ptr %11, align 4, !tbaa !9
  %513 = add i32 %512, 1
  store i32 %513, ptr %11, align 4, !tbaa !9
  br label %22, !llvm.loop !62

514:                                              ; preds = %22
  %515 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %515, ptr %5, align 4
  store i32 1, ptr %12, align 4
  br label %516

516:                                              ; preds = %514, %508, %91
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  %517 = load i32, ptr %5, align 4
  ret i32 %517
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3sinf(float noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3powff(float noundef, float noundef) #2

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

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

declare noundef i32 @_ZN6SoLoud4Misc3Prg4randEv(ptr noundef nonnull align 4 dereferenceable(68)) #4

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

; Function Attrs: nounwind
declare double @sin(double noundef) #5

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { "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 "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 #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, !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, !10, i64 5040}
!12 = !{!"_ZTSN6SoLoud12SfxrInstanceE", !13, i64 0, !6, i64 496, !17, i64 504, !18, i64 572, !19, i64 680, !10, i64 684, !15, i64 688, !15, i64 696, !15, i64 704, !15, i64 712, !10, i64 720, !14, i64 724, !14, i64 728, !10, i64 732, !10, i64 736, !7, i64 740, !14, i64 752, !14, i64 756, !14, i64 760, !10, i64 764, !7, i64 768, !10, i64 4864, !7, i64 4868, !14, i64 4996, !14, i64 5000, !14, i64 5004, !14, i64 5008, !14, i64 5012, !14, i64 5016, !14, i64 5020, !14, i64 5024, !14, i64 5028, !14, i64 5032, !14, i64 5036, !10, i64 5040, !10, i64 5044, !10, i64 5048, !10, i64 5052, !15, i64 5056}
!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 = !{!"_ZTSN6SoLoud4Misc3PrgE", !7, i64 0, !10, i64 64}
!18 = !{!"_ZTSN6SoLoud10SfxrParamsE", !10, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !14, i64 44, !14, i64 48, !14, i64 52, !19, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76, !14, i64 80, !14, i64 84, !14, i64 88, !14, i64 92, !14, i64 96, !14, i64 100, !14, i64 104}
!19 = !{!"bool", !7, i64 0}
!20 = !{!12, !10, i64 5044}
!21 = !{!12, !10, i64 5048}
!22 = !{!12, !10, i64 5052}
!23 = !{!12, !15, i64 5056}
!24 = !{!12, !15, i64 688}
!25 = !{!12, !15, i64 712}
!26 = !{!12, !15, i64 704}
!27 = !{!12, !15, i64 696}
!28 = !{!12, !14, i64 580}
!29 = !{!13, !10, i64 16}
!30 = !{!12, !19, i64 680}
!31 = !{!14, !14, i64 0}
!32 = !{!12, !14, i64 5036}
!33 = !{!12, !14, i64 5032}
!34 = !{!12, !14, i64 5028}
!35 = !{!12, !10, i64 720}
!36 = !{!12, !14, i64 728}
!37 = !{!12, !14, i64 724}
!38 = !{!12, !10, i64 736}
!39 = !{!12, !10, i64 732}
!40 = !{!12, !14, i64 752}
!41 = !{!12, !14, i64 624}
!42 = !{!12, !14, i64 760}
!43 = !{!12, !14, i64 756}
!44 = !{!12, !10, i64 764}
!45 = !{!12, !14, i64 5024}
!46 = !{!12, !14, i64 5020}
!47 = !{!12, !10, i64 684}
!48 = !{!12, !10, i64 572}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = !{!12, !14, i64 4996}
!52 = !{!12, !14, i64 5008}
!53 = !{!12, !14, i64 5004}
!54 = !{!12, !14, i64 636}
!55 = !{!12, !14, i64 5000}
!56 = !{!12, !14, i64 5012}
!57 = !{!12, !14, i64 5016}
!58 = !{!12, !10, i64 4864}
!59 = distinct !{!59, !50}
!60 = !{!12, !14, i64 672}
!61 = !{!12, !14, i64 676}
!62 = distinct !{!62, !50}


; 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 uwtable
declare dso_local void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064), i1 noundef zeroext) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN6SoLoud12SfxrInstance8getAudioEPfjj(ptr noundef nonnull align 8 dereferenceable(5064) %0, ptr noundef writeonly %1, i32 noundef %2, i32 noundef %3) unnamed_addr #0 align 2 {
  %.not90 = icmp eq i32 %2, 0
  br i1 %.not90, label %.loopexit82, label %.lr.ph

.lr.ph:                                           ; preds = %4
  %5 = getelementptr inbounds i8, ptr %0, i64 5040
  %6 = getelementptr inbounds i8, ptr %0, i64 5044
  %7 = getelementptr inbounds i8, ptr %0, i64 5048
  %8 = getelementptr inbounds i8, ptr %0, i64 5052
  %9 = getelementptr inbounds i8, ptr %0, i64 5056
  %10 = getelementptr inbounds i8, ptr %0, i64 688
  %11 = getelementptr inbounds i8, ptr %0, i64 712
  %12 = getelementptr inbounds i8, ptr %0, i64 704
  %13 = getelementptr inbounds i8, ptr %0, i64 696
  %14 = getelementptr inbounds i8, ptr %0, i64 580
  %15 = getelementptr inbounds i8, ptr %0, i64 16
  %16 = getelementptr inbounds i8, ptr %0, i64 5036
  %17 = getelementptr inbounds i8, ptr %0, i64 5032
  %18 = getelementptr inbounds i8, ptr %0, i64 5028
  %19 = getelementptr inbounds i8, ptr %0, i64 720
  %20 = getelementptr inbounds i8, ptr %0, i64 728
  %21 = getelementptr inbounds i8, ptr %0, i64 724
  %22 = getelementptr inbounds i8, ptr %0, i64 736
  %23 = getelementptr inbounds i8, ptr %0, i64 740
  %24 = getelementptr inbounds i8, ptr %0, i64 732
  %25 = getelementptr inbounds i8, ptr %0, i64 744
  %26 = getelementptr inbounds i8, ptr %0, i64 624
  %27 = getelementptr inbounds i8, ptr %0, i64 752
  %28 = getelementptr inbounds i8, ptr %0, i64 748
  %29 = getelementptr inbounds i8, ptr %0, i64 760
  %30 = getelementptr inbounds i8, ptr %0, i64 756
  %31 = getelementptr inbounds i8, ptr %0, i64 764
  %32 = getelementptr inbounds i8, ptr %0, i64 5024
  %33 = getelementptr inbounds i8, ptr %0, i64 5020
  %34 = getelementptr inbounds i8, ptr %0, i64 684
  %35 = getelementptr inbounds i8, ptr %0, i64 572
  %36 = getelementptr inbounds i8, ptr %0, i64 504
  %37 = getelementptr inbounds i8, ptr %0, i64 4868
  %38 = getelementptr inbounds i8, ptr %0, i64 4996
  %39 = getelementptr inbounds i8, ptr %0, i64 5008
  %40 = getelementptr inbounds i8, ptr %0, i64 5004
  %41 = getelementptr inbounds i8, ptr %0, i64 636
  %42 = getelementptr inbounds i8, ptr %0, i64 5000
  %43 = getelementptr inbounds i8, ptr %0, i64 5012
  %44 = getelementptr inbounds i8, ptr %0, i64 5016
  %45 = getelementptr inbounds i8, ptr %0, i64 768
  %46 = getelementptr inbounds i8, ptr %0, i64 4864
  %47 = getelementptr inbounds i8, ptr %0, i64 672
  br label %48

48:                                               ; preds = %.lr.ph, %243
  %.03389 = phi ptr [ %1, %.lr.ph ], [ %.235.ph, %243 ]
  %.04488 = phi i32 [ 0, %.lr.ph ], [ %244, %243 ]
  %49 = load i32, ptr %5, align 8, !tbaa !5
  %50 = add nsw i32 %49, 1
  store i32 %50, ptr %5, align 8, !tbaa !5
  %51 = load i32, ptr %6, align 4, !tbaa !18
  %.not = icmp eq i32 %51, 0
  %.not56 = icmp slt i32 %50, %51
  %or.cond = select i1 %.not, i1 true, i1 %.not56
  br i1 %or.cond, label %53, label %52

52:                                               ; preds = %48
  store i32 0, ptr %5, align 8, !tbaa !5
  tail call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %0, i1 noundef zeroext true)
  br label %53

53:                                               ; preds = %52, %48
  %54 = load i32, ptr %7, align 8, !tbaa !19
  %55 = add nsw i32 %54, 1
  store i32 %55, ptr %7, align 8, !tbaa !19
  %56 = load i32, ptr %8, align 4, !tbaa !20
  %.not57 = icmp eq i32 %56, 0
  %.not58 = icmp slt i32 %55, %56
  %or.cond73 = select i1 %.not57, i1 true, i1 %.not58
  %.pre = load double, ptr %10, align 8, !tbaa !21
  br i1 %or.cond73, label %60, label %57

57:                                               ; preds = %53
  store i32 0, ptr %8, align 4, !tbaa !20
  %58 = load double, ptr %9, align 8, !tbaa !22
  %59 = fmul double %58, %.pre
  br label %60

60:                                               ; preds = %57, %53
  %61 = phi double [ %59, %57 ], [ %.pre, %53 ]
  %62 = load double, ptr %11, align 8, !tbaa !23
  %63 = load double, ptr %12, align 8, !tbaa !24
  %64 = fadd double %62, %63
  store double %64, ptr %12, align 8, !tbaa !24
  %65 = fmul double %64, %61
  store double %65, ptr %10, align 8, !tbaa !21
  %66 = load double, ptr %13, align 8, !tbaa !25
  %67 = fcmp ogt double %65, %66
  br i1 %67, label %68, label %75

68:                                               ; preds = %60
  store double %66, ptr %10, align 8, !tbaa !21
  %69 = load float, ptr %14, align 4, !tbaa !26
  %70 = fcmp ogt float %69, 0.000000e+00
  br i1 %70, label %71, label %75

71:                                               ; preds = %68
  %72 = load i32, ptr %15, align 8, !tbaa !27
  %73 = and i32 %72, 1
  %.not59 = icmp eq i32 %73, 0
  br i1 %.not59, label %.loopexit82.sink.split, label %74

74:                                               ; preds = %71
  tail call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %0, i1 noundef zeroext false)
  %.pre96 = load double, ptr %10, align 8, !tbaa !21
  br label %75

75:                                               ; preds = %68, %74, %60
  %76 = phi double [ %66, %68 ], [ %.pre96, %74 ], [ %65, %60 ]
  %77 = load float, ptr %16, align 4, !tbaa !28
  %78 = fcmp ogt float %77, 0.000000e+00
  br i1 %78, label %79, label %89

79:                                               ; preds = %75
  %80 = load float, ptr %17, align 8, !tbaa !29
  %81 = load float, ptr %18, align 4, !tbaa !30
  %82 = fadd float %80, %81
  store float %82, ptr %18, align 4, !tbaa !30
  %83 = tail call noundef float @_ZSt3sinf(float noundef %82)
  %84 = load float, ptr %16, align 4, !tbaa !28
  %85 = fmul float %83, %84
  %86 = fpext float %85 to double
  %87 = fadd double %86, 1.000000e+00
  %88 = fmul double %76, %87
  br label %89

89:                                               ; preds = %79, %75
  %.042.in = phi double [ %88, %79 ], [ %76, %75 ]
  %.042 = fptrunc double %.042.in to float
  %90 = fptosi float %.042 to i32
  %spec.select = tail call i32 @llvm.smax.i32(i32 %90, i32 8)
  store i32 %spec.select, ptr %19, align 8, !tbaa !31
  %91 = load float, ptr %20, align 8, !tbaa !32
  %92 = load float, ptr %21, align 4, !tbaa !33
  %93 = fadd float %91, %92
  %94 = fcmp olt float %93, 0.000000e+00
  %storemerge60 = select i1 %94, float 0.000000e+00, float %93
  %95 = fcmp ogt float %storemerge60, 5.000000e-01
  %storemerge61 = select i1 %95, float 5.000000e-01, float %storemerge60
  store float %storemerge61, ptr %21, align 4, !tbaa !33
  %96 = load i32, ptr %22, align 8, !tbaa !34
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %22, align 8, !tbaa !34
  %98 = load i32, ptr %24, align 4, !tbaa !35
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [3 x i32], ptr %23, i64 0, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !36
  %.not62 = icmp slt i32 %96, %101
  br i1 %.not62, label %109, label %102

102:                                              ; preds = %89
  store i32 0, ptr %22, align 8, !tbaa !34
  %103 = add nsw i32 %98, 1
  store i32 %103, ptr %24, align 4, !tbaa !35
  %104 = icmp eq i32 %103, 3
  br i1 %104, label %105, label %109

105:                                              ; preds = %102
  %106 = load i32, ptr %15, align 8, !tbaa !27
  %107 = and i32 %106, 1
  %.not63 = icmp eq i32 %107, 0
  br i1 %.not63, label %.loopexit82.sink.split, label %108

108:                                              ; preds = %105
  tail call void @_ZN6SoLoud12SfxrInstance11resetSampleEb(ptr noundef nonnull align 8 dereferenceable(5064) %0, i1 noundef zeroext false)
  %.pr = load i32, ptr %24, align 4, !tbaa !35
  br label %109

109:                                              ; preds = %102, %108, %89
  %110 = phi i32 [ %103, %102 ], [ %.pr, %108 ], [ %98, %89 ]
  switch i32 %110, label %.thread [
    i32 0, label %111
    i32 1, label %118
  ]

111:                                              ; preds = %109
  %112 = load i32, ptr %23, align 4, !tbaa !36
  %.not64 = icmp eq i32 %112, 0
  br i1 %.not64, label %.thread.thread.sink.split, label %113

113:                                              ; preds = %111
  %114 = load i32, ptr %22, align 8, !tbaa !34
  %115 = sitofp i32 %114 to float
  %116 = sitofp i32 %112 to float
  %117 = fdiv float %115, %116
  br label %.thread.thread.sink.split

118:                                              ; preds = %109
  %119 = load i32, ptr %25, align 8, !tbaa !36
  %.not65 = icmp eq i32 %119, 0
  br i1 %.not65, label %.thread.thread.sink.split, label %120

120:                                              ; preds = %118
  %121 = load i32, ptr %22, align 8, !tbaa !34
  %122 = sitofp i32 %121 to float
  %123 = sitofp i32 %119 to float
  %124 = fdiv float %122, %123
  %125 = fsub float 1.000000e+00, %124
  %126 = tail call noundef float @_ZSt3powff(float noundef %125, float noundef 1.000000e+00)
  %127 = fmul float %126, 2.000000e+00
  %128 = load float, ptr %26, align 8, !tbaa !37
  %129 = tail call float @llvm.fmuladd.f32(float %127, float %128, float 1.000000e+00)
  store float %129, ptr %27, align 8, !tbaa !38
  %.pre97 = load i32, ptr %24, align 4, !tbaa !35
  br label %.thread

.thread:                                          ; preds = %109, %120
  %130 = phi i32 [ %110, %109 ], [ %.pre97, %120 ]
  %131 = icmp eq i32 %130, 2
  br i1 %131, label %132, label %.thread.thread

132:                                              ; preds = %.thread
  %133 = load i32, ptr %28, align 4, !tbaa !36
  %.not66 = icmp eq i32 %133, 0
  br i1 %.not66, label %.thread.thread.sink.split, label %134

134:                                              ; preds = %132
  %135 = load i32, ptr %22, align 8, !tbaa !34
  %136 = sitofp i32 %135 to float
  %137 = sitofp i32 %133 to float
  %138 = fdiv float %136, %137
  %139 = fsub float 1.000000e+00, %138
  br label %.thread.thread.sink.split

.thread.thread.sink.split:                        ; preds = %132, %118, %111, %134, %113
  %.sink = phi float [ %117, %113 ], [ %139, %134 ], [ 0.000000e+00, %111 ], [ 0.000000e+00, %118 ], [ 0.000000e+00, %132 ]
  store float %.sink, ptr %27, align 8, !tbaa !38
  br label %.thread.thread

.thread.thread:                                   ; preds = %.thread.thread.sink.split, %.thread
  %140 = load float, ptr %29, align 8, !tbaa !39
  %141 = load float, ptr %30, align 4, !tbaa !40
  %142 = fadd float %140, %141
  store float %142, ptr %30, align 4, !tbaa !40
  %143 = fptosi float %142 to i32
  %144 = tail call i32 @llvm.abs.i32(i32 %143, i1 true)
  %spec.select74 = tail call i32 @llvm.umin.i32(i32 %144, i32 1023)
  store i32 %spec.select74, ptr %31, align 4, !tbaa !41
  %145 = load float, ptr %32, align 8, !tbaa !42
  %146 = fcmp une float %145, 0.000000e+00
  br i1 %146, label %147, label %.preheader106

.preheader106:                                    ; preds = %147, %152, %.thread.thread
  br label %154

147:                                              ; preds = %.thread.thread
  %148 = load float, ptr %33, align 4, !tbaa !43
  %149 = fmul float %145, %148
  %150 = fcmp olt float %149, 0x3EE4F8B580000000
  %storemerge68 = select i1 %150, float 0x3EE4F8B580000000, float %149
  store float %storemerge68, ptr %33, align 4, !tbaa !43
  %151 = fcmp ogt float %storemerge68, 0x3FB99999A0000000
  br i1 %151, label %152, label %.preheader106

152:                                              ; preds = %147
  store float 0x3FB99999A0000000, ptr %33, align 4, !tbaa !43
  br label %.preheader106

153:                                              ; preds = %207
  %.not69 = icmp eq ptr %.03389, null
  br i1 %.not69, label %243, label %233

154:                                              ; preds = %.preheader106, %207
  %.03887 = phi i32 [ %232, %207 ], [ 0, %.preheader106 ]
  %.03986 = phi float [ %231, %207 ], [ 0.000000e+00, %.preheader106 ]
  %155 = load i32, ptr %34, align 4, !tbaa !44
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %34, align 4, !tbaa !44
  %157 = load i32, ptr %19, align 8, !tbaa !31
  %.not70 = icmp slt i32 %156, %157
  %.pre101 = load i32, ptr %35, align 4, !tbaa !45
  br i1 %.not70, label %.loopexit, label %158

158:                                              ; preds = %154
  %159 = srem i32 %156, %157
  store i32 %159, ptr %34, align 4, !tbaa !44
  %160 = icmp eq i32 %.pre101, 3
  br i1 %160, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %158, %.preheader
  %indvars.iv = phi i64 [ %indvars.iv.next, %.preheader ], [ 0, %158 ]
  %161 = tail call noundef i32 @_ZN6SoLoud4Misc3Prg4randEv(ptr noundef nonnull align 4 dereferenceable(68) %36)
  %162 = urem i32 %161, 10001
  %163 = uitofp nneg i32 %162 to float
  %164 = fdiv float %163, 1.000000e+04
  %165 = tail call float @llvm.fmuladd.f32(float %164, float 2.000000e+00, float -1.000000e+00)
  %166 = getelementptr inbounds [32 x float], ptr %37, i64 0, i64 %indvars.iv
  store float %165, ptr %166, align 4, !tbaa !46
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 32
  br i1 %exitcond.not, label %.loopexit.loopexit, label %.preheader, !llvm.loop !47

.loopexit.loopexit:                               ; preds = %.preheader
  %.pre98 = load i32, ptr %34, align 4, !tbaa !44
  %.pre99 = load i32, ptr %19, align 8, !tbaa !31
  %.pre100 = load i32, ptr %35, align 4, !tbaa !45
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %158, %154
  %167 = phi i32 [ %.pre100, %.loopexit.loopexit ], [ %.pre101, %158 ], [ %.pre101, %154 ]
  %168 = phi i32 [ %.pre99, %.loopexit.loopexit ], [ %157, %158 ], [ %157, %154 ]
  %169 = phi i32 [ %.pre98, %.loopexit.loopexit ], [ %159, %158 ], [ %156, %154 ]
  %170 = sitofp i32 %169 to float
  %171 = sitofp i32 %168 to float
  %172 = fdiv float %170, %171
  switch i32 %167, label %191 [
    i32 0, label %173
    i32 1, label %176
    i32 2, label %179
    i32 3, label %185
  ]

173:                                              ; preds = %.loopexit
  %174 = load float, ptr %21, align 4, !tbaa !33
  %175 = fcmp olt float %172, %174
  %. = select i1 %175, float 5.000000e-01, float -5.000000e-01
  br label %191

176:                                              ; preds = %.loopexit
  %177 = fneg float %172
  %178 = tail call float @llvm.fmuladd.f32(float %177, float 2.000000e+00, float 1.000000e+00)
  br label %191

179:                                              ; preds = %.loopexit
  %180 = fmul float %172, 2.000000e+00
  %181 = fpext float %180 to double
  %182 = fmul double %181, 0x400921FB54442D18
  %183 = tail call double @sin(double noundef %182) #6
  %184 = fptrunc double %183 to float
  br label %191

185:                                              ; preds = %.loopexit
  %186 = shl nsw i32 %169, 5
  %187 = sdiv i32 %186, %168
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [32 x float], ptr %37, i64 0, i64 %188
  %190 = load float, ptr %189, align 4, !tbaa !46
  br label %191

191:                                              ; preds = %173, %185, %179, %176, %.loopexit
  %.037 = phi float [ 0.000000e+00, %.loopexit ], [ %190, %185 ], [ %184, %179 ], [ %178, %176 ], [ %., %173 ]
  %192 = load float, ptr %38, align 4, !tbaa !49
  %193 = load float, ptr %39, align 8, !tbaa !50
  %194 = load float, ptr %40, align 4, !tbaa !51
  %195 = fmul float %193, %194
  %196 = fcmp olt float %195, 0.000000e+00
  %storemerge71 = select i1 %196, float 0.000000e+00, float %195
  %197 = fcmp ogt float %storemerge71, 0x3FB99999A0000000
  %storemerge72 = select i1 %197, float 0x3FB99999A0000000, float %storemerge71
  store float %storemerge72, ptr %40, align 4, !tbaa !51
  %198 = load float, ptr %41, align 4, !tbaa !52
  %199 = fcmp une float %198, 1.000000e+00
  br i1 %199, label %200, label %207

200:                                              ; preds = %191
  %201 = fsub float %.037, %192
  %202 = load float, ptr %42, align 8, !tbaa !53
  %203 = tail call float @llvm.fmuladd.f32(float %201, float %storemerge72, float %202)
  %204 = load float, ptr %43, align 4, !tbaa !54
  %205 = fneg float %203
  %206 = tail call float @llvm.fmuladd.f32(float %205, float %204, float %203)
  br label %207

207:                                              ; preds = %191, %200
  %208 = phi float [ %192, %200 ], [ %.037, %191 ]
  %209 = phi float [ %206, %200 ], [ 0.000000e+00, %191 ]
  store float %209, ptr %42, align 8, !tbaa !53
  %210 = fadd float %209, %208
  store float %210, ptr %38, align 4, !tbaa !49
  %211 = fsub float %210, %192
  %212 = load float, ptr %44, align 8, !tbaa !55
  %213 = fadd float %212, %211
  %214 = load float, ptr %33, align 4, !tbaa !43
  %215 = fneg float %213
  %216 = tail call float @llvm.fmuladd.f32(float %215, float %214, float %213)
  store float %216, ptr %44, align 8, !tbaa !55
  %217 = load i32, ptr %46, align 8, !tbaa !56
  %218 = and i32 %217, 1023
  %219 = zext nneg i32 %218 to i64
  %220 = getelementptr inbounds [1024 x float], ptr %45, i64 0, i64 %219
  store float %216, ptr %220, align 4, !tbaa !46
  %221 = load i32, ptr %31, align 4, !tbaa !41
  %222 = sub nsw i32 %217, %221
  %223 = and i32 %222, 1023
  %224 = zext nneg i32 %223 to i64
  %225 = getelementptr inbounds [1024 x float], ptr %45, i64 0, i64 %224
  %226 = load float, ptr %225, align 4, !tbaa !46
  %227 = fadd float %216, %226
  %228 = add nsw i32 %217, 1
  %229 = and i32 %228, 1023
  store i32 %229, ptr %46, align 8, !tbaa !56
  %230 = load float, ptr %27, align 8, !tbaa !38
  %231 = tail call float @llvm.fmuladd.f32(float %227, float %230, float %.03986)
  %232 = add nuw nsw i32 %.03887, 1
  %exitcond94.not = icmp eq i32 %232, 8
  br i1 %exitcond94.not, label %153, label %154, !llvm.loop !57

233:                                              ; preds = %153
  %234 = fmul float %231, 1.250000e-01
  %235 = load <2 x float>, ptr %47, align 8, !tbaa !46
  %236 = insertelement <2 x float> <float poison, float 2.000000e+00>, float %234, i64 0
  %237 = fmul <2 x float> %236, %235
  %shift = shufflevector <2 x float> %237, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %238 = fmul <2 x float> %237, %shift
  %239 = extractelement <2 x float> %238, i64 0
  %240 = fcmp ogt float %239, 1.000000e+00
  %.140 = select i1 %240, float 1.000000e+00, float %239
  %241 = fcmp olt float %.140, -1.000000e+00
  %.241 = select i1 %241, float -1.000000e+00, float %.140
  store float %.241, ptr %.03389, align 4, !tbaa !46
  %242 = getelementptr inbounds i8, ptr %.03389, i64 4
  br label %243

243:                                              ; preds = %233, %153
  %.235.ph = phi ptr [ null, %153 ], [ %242, %233 ]
  %244 = add nuw i32 %.04488, 1
  %exitcond95.not = icmp eq i32 %244, %2
  br i1 %exitcond95.not, label %.loopexit82, label %48, !llvm.loop !58

.loopexit82.sink.split:                           ; preds = %105, %71
  %245 = getelementptr inbounds i8, ptr %0, i64 680
  store i8 0, ptr %245, align 8, !tbaa !59
  br label %.loopexit82

.loopexit82:                                      ; preds = %243, %.loopexit82.sink.split, %4
  %.2 = phi i32 [ 0, %4 ], [ %.04488, %.loopexit82.sink.split ], [ %2, %243 ]
  ret i32 %.2
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3sinf(float noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3powff(float noundef, float noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #2

declare noundef i32 @_ZN6SoLoud4Misc3Prg4randEv(ptr noundef nonnull align 4 dereferenceable(68)) local_unnamed_addr #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sin(double noundef) local_unnamed_addr #4

; 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 i32 @llvm.umin.i32(i32, i32) #5

attributes #0 = { 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 #1 = { inlinehint 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { "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 = { mustprogress nofree nounwind willreturn memory(write) "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, !8, i64 5040}
!6 = !{!"_ZTSN6SoLoud12SfxrInstanceE", !7, i64 0, !14, i64 496, !15, i64 504, !16, i64 572, !17, i64 680, !8, i64 684, !12, i64 688, !12, i64 696, !12, i64 704, !12, i64 712, !8, i64 720, !11, i64 724, !11, i64 728, !8, i64 732, !8, i64 736, !9, i64 740, !11, i64 752, !11, i64 756, !11, i64 760, !8, i64 764, !9, i64 768, !8, i64 4864, !9, i64 4868, !11, i64 4996, !11, i64 5000, !11, i64 5004, !11, i64 5008, !11, i64 5012, !11, i64 5016, !11, i64 5020, !11, i64 5024, !11, i64 5028, !11, i64 5032, !11, i64 5036, !8, i64 5040, !8, i64 5044, !8, i64 5048, !8, i64 5052, !12, i64 5056}
!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 = !{!"_ZTSN6SoLoud4Misc3PrgE", !9, i64 0, !8, i64 64}
!16 = !{!"_ZTSN6SoLoud10SfxrParamsE", !8, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !11, i64 32, !11, i64 36, !11, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !17, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104}
!17 = !{!"bool", !9, i64 0}
!18 = !{!6, !8, i64 5044}
!19 = !{!6, !8, i64 5048}
!20 = !{!6, !8, i64 5052}
!21 = !{!6, !12, i64 688}
!22 = !{!6, !12, i64 5056}
!23 = !{!6, !12, i64 712}
!24 = !{!6, !12, i64 704}
!25 = !{!6, !12, i64 696}
!26 = !{!6, !11, i64 580}
!27 = !{!7, !8, i64 16}
!28 = !{!6, !11, i64 5036}
!29 = !{!6, !11, i64 5032}
!30 = !{!6, !11, i64 5028}
!31 = !{!6, !8, i64 720}
!32 = !{!6, !11, i64 728}
!33 = !{!6, !11, i64 724}
!34 = !{!6, !8, i64 736}
!35 = !{!6, !8, i64 732}
!36 = !{!8, !8, i64 0}
!37 = !{!6, !11, i64 624}
!38 = !{!6, !11, i64 752}
!39 = !{!6, !11, i64 760}
!40 = !{!6, !11, i64 756}
!41 = !{!6, !8, i64 764}
!42 = !{!6, !11, i64 5024}
!43 = !{!6, !11, i64 5020}
!44 = !{!6, !8, i64 684}
!45 = !{!6, !8, i64 572}
!46 = !{!11, !11, i64 0}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}
!49 = !{!6, !11, i64 4996}
!50 = !{!6, !11, i64 5008}
!51 = !{!6, !11, i64 5004}
!52 = !{!6, !11, i64 636}
!53 = !{!6, !11, i64 5000}
!54 = !{!6, !11, i64 5012}
!55 = !{!6, !11, i64 5016}
!56 = !{!6, !8, i64 4864}
!57 = distinct !{!57, !48}
!58 = distinct !{!58, !48}
!59 = !{!6, !17, i64 680}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass