; LLVM IR from Overload-Technologies/Overload :: Dependencies/soloud/src/audiosource/tedsid/sid.ll (ZN8SIDsound8setModelEj)

; 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.SIDsound = type <{ ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], [3 x %"class.SIDsound::SIDVoice"], i8, [3 x i8], i32, i8, [7 x i8], [2048 x double], i32, i32, i32, i32, i32, i8, [3 x i8], i32, i8, [3 x i8], i32, [4 x i8] }>
%"class.SIDsound::SIDVoice" = type { i32, i32, ptr, ptr, i32, i32, i32, i32, i16, i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32 }

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8SIDsound8setModelEj(ptr noundef nonnull align 8 dereferenceable(16796) %0, i32 noundef %1) #0 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store i32 %1, ptr %4, align 4, !tbaa !9
  %10 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  %11 = load i32, ptr %4, align 4, !tbaa !9
  switch i32 %11, label %153 [
    i32 2, label %12
    i32 1, label %12
    i32 0, label %45
    i32 3, label %107
  ]

12:                                               ; preds = %2, %2
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %13

13:                                               ; preds = %38, %12
  %14 = load i32, ptr %5, align 4, !tbaa !9
  %15 = icmp slt i32 %14, 2048
  br i1 %15, label %16, label %41

16:                                               ; preds = %13
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %17 = load i32, ptr %5, align 4, !tbaa !9
  %18 = sitofp i32 %17 to double
  %19 = fdiv double %18, 8.000000e+00
  store double %19, ptr %6, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %20 = load double, ptr %6, align 8, !tbaa !11
  %21 = fmul double -1.560000e-02, %20
  %22 = load double, ptr %6, align 8, !tbaa !11
  %23 = load double, ptr %6, align 8, !tbaa !11
  %24 = fmul double 4.847300e+01, %23
  %25 = call double @llvm.fmuladd.f64(double %21, double %22, double %24)
  %26 = fsub double %25, 4.507400e+01
  store double %26, ptr %7, align 8, !tbaa !11
  %27 = load double, ptr %7, align 8, !tbaa !11
  %28 = fcmp ole double %27, 0.000000e+00
  br i1 %28, label %29, label %30

29:                                               ; preds = %16
  br label %32

30:                                               ; preds = %16
  %31 = load double, ptr %7, align 8, !tbaa !11
  br label %32

32:                                               ; preds = %30, %29
  %33 = phi double [ 0.000000e+00, %29 ], [ %31, %30 ]
  %34 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %35 = load i32, ptr %5, align 4, !tbaa !9
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [2048 x double], ptr %34, i64 0, i64 %36
  store double %33, ptr %37, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %38

38:                                               ; preds = %32
  %39 = load i32, ptr %5, align 4, !tbaa !9
  %40 = add nsw i32 %39, 1
  store i32 %40, ptr %5, align 4, !tbaa !9
  br label %13, !llvm.loop !13

41:                                               ; preds = %13
  %42 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 7
  store i32 2048, ptr %42, align 8, !tbaa !15
  %43 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 5
  store i32 0, ptr %43, align 8, !tbaa !18
  %44 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 6
  store i32 0, ptr %44, align 4, !tbaa !19
  br label %153

45:                                               ; preds = %2
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %46

46:                                               ; preds = %64, %45
  %47 = load i32, ptr %5, align 4, !tbaa !9
  %48 = icmp slt i32 %47, 1024
  br i1 %48, label %49, label %67

49:                                               ; preds = %46
  %50 = load i32, ptr %5, align 4, !tbaa !9
  %51 = sitofp i32 %50 to double
  %52 = fdiv double %51, 1.500000e+00
  %53 = fsub double %52, 1.024000e+03
  %54 = fdiv double %53, 1.024000e+03
  %55 = fmul double %54, 0x400921FB54442D18
  %56 = call double @tanh(double noundef %55) #5
  %57 = call double @tanh(double noundef 0x400921FB54442D18) #5
  %58 = fadd double %56, %57
  %59 = call double @llvm.fmuladd.f64(double %58, double 5.780000e+03, double 2.200000e+02)
  %60 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %61 = load i32, ptr %5, align 4, !tbaa !9
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [2048 x double], ptr %60, i64 0, i64 %62
  store double %59, ptr %63, align 8, !tbaa !11
  br label %64

64:                                               ; preds = %49
  %65 = load i32, ptr %5, align 4, !tbaa !9
  %66 = add nsw i32 %65, 1
  store i32 %66, ptr %5, align 4, !tbaa !9
  br label %46, !llvm.loop !20

67:                                               ; preds = %46
  br label %68

68:                                               ; preds = %82, %67
  %69 = load i32, ptr %5, align 4, !tbaa !9
  %70 = icmp slt i32 %69, 1056
  br i1 %70, label %71, label %85

71:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %72 = load i32, ptr %5, align 4, !tbaa !9
  %73 = sitofp i32 %72 to double
  %74 = fsub double %73, 1.024000e+03
  %75 = fdiv double %74, 5.300000e+01
  store double %75, ptr %8, align 8, !tbaa !11
  %76 = load double, ptr %8, align 8, !tbaa !11
  %77 = call double @llvm.fmuladd.f64(double %76, double 3.120000e+02, double 1.003000e+03)
  %78 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %79 = load i32, ptr %5, align 4, !tbaa !9
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds [2048 x double], ptr %78, i64 0, i64 %80
  store double %77, ptr %81, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %82

82:                                               ; preds = %71
  %83 = load i32, ptr %5, align 4, !tbaa !9
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %5, align 4, !tbaa !9
  br label %68, !llvm.loop !21

85:                                               ; preds = %68
  br label %86

86:                                               ; preds = %100, %85
  %87 = load i32, ptr %5, align 4, !tbaa !9
  %88 = icmp slt i32 %87, 2048
  br i1 %88, label %89, label %103

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %90 = load i32, ptr %5, align 4, !tbaa !9
  %91 = sitofp i32 %90 to double
  %92 = fsub double %91, 1.056000e+03
  %93 = fdiv double %92, 9.920000e+02
  store double %93, ptr %9, align 8, !tbaa !11
  %94 = load double, ptr %9, align 8, !tbaa !11
  %95 = call double @llvm.fmuladd.f64(double 1.884800e+04, double %94, double 1.315000e+03)
  %96 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %97 = load i32, ptr %5, align 4, !tbaa !9
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds [2048 x double], ptr %96, i64 0, i64 %98
  store double %95, ptr %99, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  br label %100

100:                                              ; preds = %89
  %101 = load i32, ptr %5, align 4, !tbaa !9
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %5, align 4, !tbaa !9
  br label %86, !llvm.loop !22

103:                                              ; preds = %86
  %104 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 7
  store i32 896, ptr %104, align 8, !tbaa !15
  %105 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 5
  store i32 -454, ptr %105, align 8, !tbaa !18
  %106 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 6
  store i32 522240, ptr %106, align 4, !tbaa !19
  br label %153

107:                                              ; preds = %2
  store i32 0, ptr %5, align 4, !tbaa !9
  br label %108

108:                                              ; preds = %125, %107
  %109 = load i32, ptr %5, align 4, !tbaa !9
  %110 = icmp slt i32 %109, 1024
  br i1 %110, label %111, label %128

111:                                              ; preds = %108
  %112 = load i32, ptr %5, align 4, !tbaa !9
  %113 = sitofp i32 %112 to double
  %114 = fsub double %113, 1.024000e+03
  %115 = fdiv double %114, 1.024000e+03
  %116 = fmul double %115, 0x400921FB54442D18
  %117 = call double @tanh(double noundef %116) #5
  %118 = call double @tanh(double noundef 0x400921FB54442D18) #5
  %119 = fadd double %117, %118
  %120 = call double @llvm.fmuladd.f64(double %119, double 5.780000e+03, double 2.200000e+02)
  %121 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %122 = load i32, ptr %5, align 4, !tbaa !9
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds [2048 x double], ptr %121, i64 0, i64 %123
  store double %120, ptr %124, align 8, !tbaa !11
  br label %125

125:                                              ; preds = %111
  %126 = load i32, ptr %5, align 4, !tbaa !9
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %5, align 4, !tbaa !9
  br label %108, !llvm.loop !23

128:                                              ; preds = %108
  br label %129

129:                                              ; preds = %146, %128
  %130 = load i32, ptr %5, align 4, !tbaa !9
  %131 = icmp slt i32 %130, 2048
  br i1 %131, label %132, label %149

132:                                              ; preds = %129
  %133 = load i32, ptr %5, align 4, !tbaa !9
  %134 = sitofp i32 %133 to double
  %135 = fsub double %134, 2.048000e+03
  %136 = fdiv double %135, 1.024000e+03
  %137 = fmul double %136, 0x400921FB54442D18
  %138 = call double @tanh(double noundef %137) #5
  %139 = call double @tanh(double noundef 0x400921FB54442D18) #5
  %140 = fadd double %138, %139
  %141 = call double @llvm.fmuladd.f64(double %140, double 1.340000e+04, double 4.600000e+03)
  %142 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 17
  %143 = load i32, ptr %5, align 4, !tbaa !9
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [2048 x double], ptr %142, i64 0, i64 %144
  store double %141, ptr %145, align 8, !tbaa !11
  br label %146

146:                                              ; preds = %132
  %147 = load i32, ptr %5, align 4, !tbaa !9
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr %5, align 4, !tbaa !9
  br label %129, !llvm.loop !24

149:                                              ; preds = %129
  %150 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 7
  store i32 896, ptr %150, align 8, !tbaa !15
  %151 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 5
  store i32 -454, ptr %151, align 8, !tbaa !18
  %152 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 6
  store i32 522240, ptr %152, align 4, !tbaa !19
  br label %153

153:                                              ; preds = %149, %103, %41, %2
  call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %10)
  %154 = load i32, ptr %4, align 4, !tbaa !9
  %155 = getelementptr inbounds %class.SIDsound, ptr %10, i32 0, i32 25
  store i32 %154, ptr %155, align 8, !tbaa !25
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  ret void
}

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

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

; 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 @tanh(double noundef) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796)) #4 align 2

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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 #4 = { 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 #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !10, i64 32}
!16 = !{!"_ZTS8SIDsound", !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !7, i64 48, !7, i64 360, !10, i64 364, !7, i64 368, !7, i64 376, !10, i64 16760, !10, i64 16764, !10, i64 16768, !10, i64 16772, !10, i64 16776, !7, i64 16780, !10, i64 16784, !17, i64 16788, !10, i64 16792}
!17 = !{!"bool", !7, i64 0}
!18 = !{!16, !10, i64 24}
!19 = !{!16, !10, i64 28}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = !{!16, !10, i64 16784}


; 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 nounwind uwtable
define dso_local void @_ZN8SIDsound8setModelEj(ptr noundef nonnull align 8 dereferenceable(16796) %0, i32 noundef %1) local_unnamed_addr #0 align 2 {
  switch i32 %1, label %79 [
    i32 2, label %vector.ph78
    i32 1, label %vector.ph78
    i32 0, label %.preheader34
    i32 3, label %.preheader36
  ]

.preheader36:                                     ; preds = %2
  %3 = getelementptr inbounds i8, ptr %0, i64 376
  br label %55

.preheader34:                                     ; preds = %2
  %4 = getelementptr inbounds i8, ptr %0, i64 376
  br label %16

vector.ph78:                                      ; preds = %2, %2
  %5 = getelementptr inbounds i8, ptr %0, i64 376
  br label %vector.body80

vector.body80:                                    ; preds = %vector.body80, %vector.ph78
  %index81 = phi i64 [ 0, %vector.ph78 ], [ %index.next84, %vector.body80 ]
  %vec.ind82 = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph78 ], [ %vec.ind.next83, %vector.body80 ]
  %6 = uitofp <2 x i32> %vec.ind82 to <2 x double>
  %7 = fmul <2 x double> %6, <double 1.250000e-01, double 1.250000e-01>
  %8 = fmul <2 x double> %7, <double -1.560000e-02, double -1.560000e-02>
  %9 = fmul <2 x double> %7, <double 4.847300e+01, double 4.847300e+01>
  %10 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %8, <2 x double> %7, <2 x double> %9)
  %11 = fadd <2 x double> %10, <double -4.507400e+01, double -4.507400e+01>
  %12 = fcmp ole <2 x double> %11, zeroinitializer
  %13 = select <2 x i1> %12, <2 x double> zeroinitializer, <2 x double> %11
  %14 = getelementptr inbounds [2048 x double], ptr %5, i64 0, i64 %index81
  store <2 x double> %13, ptr %14, align 8, !tbaa !5
  %index.next84 = add nuw i64 %index81, 2
  %vec.ind.next83 = add <2 x i32> %vec.ind82, <i32 2, i32 2>
  %15 = icmp eq i64 %index.next84, 2048
  br i1 %15, label %.sink.split, label %vector.body80, !llvm.loop !9

16:                                               ; preds = %.preheader34, %16
  %indvars.iv53 = phi i64 [ 0, %.preheader34 ], [ %indvars.iv.next54, %16 ]
  %17 = trunc nuw nsw i64 %indvars.iv53 to i32
  %18 = uitofp nneg i32 %17 to double
  %19 = fdiv double %18, 1.500000e+00
  %20 = fadd double %19, -1.024000e+03
  %21 = fmul double %20, 0x3F50000000000000
  %22 = fmul double %21, 0x400921FB54442D18
  %23 = tail call double @tanh(double noundef %22) #5
  %24 = tail call double @tanh(double noundef 0x400921FB54442D18) #5
  %25 = fadd double %23, 0x3FEFE175FA292810
  %26 = tail call double @llvm.fmuladd.f64(double %25, double 5.780000e+03, double 2.200000e+02)
  %27 = getelementptr inbounds [2048 x double], ptr %4, i64 0, i64 %indvars.iv53
  store double %26, ptr %27, align 8, !tbaa !5
  %indvars.iv.next54 = add nuw nsw i64 %indvars.iv53, 1
  %exitcond56.not = icmp eq i64 %indvars.iv.next54, 1024
  br i1 %exitcond56.not, label %.lr.ph43, label %16, !llvm.loop !13

.lr.ph43:                                         ; preds = %16
  %28 = getelementptr inbounds i8, ptr %0, i64 8568
  store <2 x double> <double 1.003000e+03, double 0x408F871826A439F6>, ptr %28, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %0, i64 8584
  store <2 x double> <double 0x408FB6304D4873ED, double 0x408FE54873ECADE3>, ptr %29, align 8, !tbaa !5
  %30 = getelementptr inbounds i8, ptr %0, i64 8600
  store <2 x double> <double 0x40900A304D4873ED, double 0x409021BC609A90E8>, ptr %30, align 8, !tbaa !5
  %31 = getelementptr inbounds i8, ptr %0, i64 8616
  store <2 x double> <double 0x4090394873ECADE3, double 0x409050D4873ECADE>, ptr %31, align 8, !tbaa !5
  %32 = getelementptr inbounds i8, ptr %0, i64 8632
  store <2 x double> <double 0x409068609A90E7D9, double 0x40907FECADE304D5>, ptr %32, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %0, i64 8648
  store <2 x double> <double 0x40909778C13521D0, double 0x4090AF04D4873ECB>, ptr %33, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %0, i64 8664
  store <2 x double> <double 0x4090C690E7D95BC6, double 0x4090DE1CFB2B78C1>, ptr %34, align 8, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %0, i64 8680
  store <2 x double> <double 0x4090F5A90E7D95BC, double 0x40910D3521CFB2B8>, ptr %35, align 8, !tbaa !5
  %36 = getelementptr inbounds i8, ptr %0, i64 8696
  store <2 x double> <double 0x409124C13521CFB3, double 0x40913C4D4873ECAE>, ptr %36, align 8, !tbaa !5
  %37 = getelementptr inbounds i8, ptr %0, i64 8712
  store <2 x double> <double 0x409153D95BC609A9, double 0x40916B656F1826A4>, ptr %37, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %0, i64 8728
  store <2 x double> <double 0x409182F1826A439F, double 0x40919A7D95BC609B>, ptr %38, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %0, i64 8744
  store <2 x double> <double 0x4091B209A90E7D96, double 0x4091C995BC609A91>, ptr %39, align 8, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %0, i64 8760
  store <2 x double> <double 0x4091E121CFB2B78C, double 0x4091F8ADE304D487>, ptr %40, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %0, i64 8776
  store <2 x double> <double 0x40921039F656F182, double 0x409227C609A90E7E>, ptr %41, align 8, !tbaa !5
  %42 = getelementptr inbounds i8, ptr %0, i64 8792
  store <2 x double> <double 0x40923F521CFB2B79, double 0x409256DE304D4874>, ptr %42, align 8, !tbaa !5
  %43 = getelementptr inbounds i8, ptr %0, i64 8808
  store <2 x double> <double 0x40926E6A439F656F, double 0x409285F656F1826A>, ptr %43, align 8, !tbaa !5
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %.lr.ph43
  %index = phi i64 [ 0, %.lr.ph43 ], [ %index.next.1, %vector.body ]
  %vec.ind = phi <2 x i32> [ <i32 1056, i32 1057>, %.lr.ph43 ], [ %vec.ind.next.1, %vector.body ]
  %offset.idx = add nuw nsw i64 %index, 1056
  %44 = add <2 x i32> %vec.ind, <i32 -1056, i32 -1056>
  %45 = sitofp <2 x i32> %44 to <2 x double>
  %46 = fdiv <2 x double> %45, <double 9.920000e+02, double 9.920000e+02>
  %47 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %46, <2 x double> <double 1.884800e+04, double 1.884800e+04>, <2 x double> <double 1.315000e+03, double 1.315000e+03>)
  %48 = getelementptr inbounds [2048 x double], ptr %4, i64 0, i64 %offset.idx
  store <2 x double> %47, ptr %48, align 8, !tbaa !5
  %offset.idx.1 = add nuw nsw i64 %index, 1058
  %49 = add <2 x i32> %vec.ind, <i32 -1054, i32 -1054>
  %50 = sitofp <2 x i32> %49 to <2 x double>
  %51 = fdiv <2 x double> %50, <double 9.920000e+02, double 9.920000e+02>
  %52 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %51, <2 x double> <double 1.884800e+04, double 1.884800e+04>, <2 x double> <double 1.315000e+03, double 1.315000e+03>)
  %53 = getelementptr inbounds [2048 x double], ptr %4, i64 0, i64 %offset.idx.1
  store <2 x double> %52, ptr %53, align 8, !tbaa !5
  %index.next.1 = add nuw nsw i64 %index, 4
  %vec.ind.next.1 = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %54 = icmp eq i64 %index.next.1, 992
  br i1 %54, label %.sink.split, label %vector.body, !llvm.loop !14

55:                                               ; preds = %.preheader36, %55
  %indvars.iv = phi i64 [ 0, %.preheader36 ], [ %indvars.iv.next, %55 ]
  %56 = trunc i64 %indvars.iv to i32
  %57 = or i32 %56, -1024
  %58 = sitofp i32 %57 to double
  %59 = fmul double %58, 0x3F50000000000000
  %60 = fmul double %59, 0x400921FB54442D18
  %61 = tail call double @tanh(double noundef %60) #5
  %62 = tail call double @tanh(double noundef 0x400921FB54442D18) #5
  %63 = fadd double %61, 0x3FEFE175FA292810
  %64 = tail call double @llvm.fmuladd.f64(double %63, double 5.780000e+03, double 2.200000e+02)
  %65 = getelementptr inbounds [2048 x double], ptr %3, i64 0, i64 %indvars.iv
  store double %64, ptr %65, align 8, !tbaa !5
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 1024
  br i1 %exitcond.not, label %.lr.ph, label %55, !llvm.loop !15

.lr.ph:                                           ; preds = %55, %.lr.ph
  %indvars.iv49 = phi i64 [ %indvars.iv.next50, %.lr.ph ], [ 1024, %55 ]
  %66 = trunc i64 %indvars.iv49 to i32
  %67 = or i32 %66, -2048
  %68 = sitofp i32 %67 to double
  %69 = fmul double %68, 0x3F50000000000000
  %70 = fmul double %69, 0x400921FB54442D18
  %71 = tail call double @tanh(double noundef %70) #5
  %72 = tail call double @tanh(double noundef 0x400921FB54442D18) #5
  %73 = fadd double %71, 0x3FEFE175FA292810
  %74 = tail call double @llvm.fmuladd.f64(double %73, double 1.340000e+04, double 4.600000e+03)
  %75 = getelementptr inbounds [2048 x double], ptr %3, i64 0, i64 %indvars.iv49
  store double %74, ptr %75, align 8, !tbaa !5
  %indvars.iv.next50 = add nuw nsw i64 %indvars.iv49, 1
  %exitcond52.not = icmp eq i64 %indvars.iv.next50, 2048
  br i1 %exitcond52.not, label %.sink.split, label %.lr.ph, !llvm.loop !16

.sink.split:                                      ; preds = %.lr.ph, %vector.body, %vector.body80
  %.sink72 = phi i32 [ 2048, %vector.body80 ], [ 896, %vector.body ], [ 896, %.lr.ph ]
  %76 = phi <2 x i32> [ zeroinitializer, %vector.body80 ], [ <i32 -454, i32 522240>, %vector.body ], [ <i32 -454, i32 522240>, %.lr.ph ]
  %77 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 %.sink72, ptr %77, align 8, !tbaa !17
  %78 = getelementptr inbounds i8, ptr %0, i64 24
  store <2 x i32> %76, ptr %78, align 8, !tbaa !21
  br label %79

79:                                               ; preds = %.sink.split, %2
  tail call void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796) %0)
  %80 = getelementptr inbounds i8, ptr %0, i64 16784
  store i32 %1, ptr %80, align 8, !tbaa !22
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN8SIDsound15setFilterCutoffEv(ptr noundef nonnull align 8 dereferenceable(16796)) local_unnamed_addr #3 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #4

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { 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 #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, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10, !11, !12}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10}
!17 = !{!18, !19, i64 32}
!18 = !{!"_ZTS8SIDsound", !19, i64 8, !19, i64 12, !19, i64 16, !19, i64 20, !19, i64 24, !19, i64 28, !19, i64 32, !19, i64 36, !19, i64 40, !7, i64 48, !7, i64 360, !19, i64 364, !7, i64 368, !7, i64 376, !19, i64 16760, !19, i64 16764, !19, i64 16768, !19, i64 16772, !19, i64 16776, !7, i64 16780, !19, i64 16784, !20, i64 16788, !19, i64 16792}
!19 = !{!"int", !7, i64 0}
!20 = !{!"bool", !7, i64 0}
!21 = !{!19, !19, i64 0}
!22 = !{!18, !19, i64 16784}


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