; LLVM IR from Overload-Technologies/Overload :: Dependencies/soloud/src/audiosource/monotone/soloud_monotone.ll (ZN6SoLoud8MonotoneC2Ev)

; 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::Monotone" = type { %"class.SoLoud::AudioSource", [800 x i32], [32 x i32], i32, i32, %"struct.SoLoud::MonotoneSong" }
%"class.SoLoud::AudioSource" = type { ptr, i32, float, float, i32, i32, float, float, float, i32, float, [8 x ptr], ptr, ptr, ptr, i32, double }
%"struct.SoLoud::MonotoneSong" = type { ptr, ptr, i8, i8, i8, i8, [256 x i8], ptr }

@_ZTVN6SoLoud8MonotoneE = external dso_local unnamed_addr constant { [6 x ptr] }, align 8

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6SoLoud8MonotoneC2Ev(ptr noundef nonnull align 8 dereferenceable(3776) %0) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca float, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca float, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %11 = load ptr, ptr %2, align 8
  call void @_ZN6SoLoud11AudioSourceC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %11)
  store ptr getelementptr inbounds inrange(-16, 32) ({ [6 x ptr] }, ptr @_ZTVN6SoLoud8MonotoneE, i32 0, i32 0, i32 2), ptr %11, align 8, !tbaa !9
  %12 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  store float 2.750000e+01, ptr %4, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  store i32 12, ptr %5, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 8, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store float 0x3FF01DAE60000000, ptr %7, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  %13 = load i32, ptr %5, align 4, !tbaa !13
  %14 = mul nsw i32 8, %13
  %15 = add nsw i32 3, %14
  %16 = add nsw i32 %15, 1
  store i32 %16, ptr %8, align 4, !tbaa !13
  %17 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 1
  %18 = getelementptr inbounds [800 x i32], ptr %17, i64 0, i64 0
  store i32 440, ptr %18, align 8, !tbaa !13
  %19 = load float, ptr %4, align 4, !tbaa !11
  %20 = fadd float %19, 5.000000e-01
  %21 = invoke noundef float @_ZSt5floorf(float noundef %20)
          to label %22 unwind label %42

22:                                               ; preds = %1
  %23 = fptosi float %21 to i32
  %24 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 1
  %25 = load i32, ptr %6, align 4, !tbaa !13
  %26 = mul nsw i32 1, %25
  %27 = sext i32 %26 to i64
  %28 = getelementptr inbounds [800 x i32], ptr %24, i64 0, i64 %27
  store i32 %23, ptr %28, align 4, !tbaa !13
  %29 = load i32, ptr %6, align 4, !tbaa !13
  %30 = mul nsw i32 1, %29
  %31 = sub nsw i32 %30, 1
  store i32 %31, ptr %3, align 4, !tbaa !13
  br label %32

32:                                               ; preds = %56, %22
  %33 = load i32, ptr %3, align 4, !tbaa !13
  %34 = icmp sgt i32 %33, 1
  br i1 %34, label %35, label %59

35:                                               ; preds = %32
  %36 = load float, ptr %4, align 4, !tbaa !11
  %37 = load float, ptr %7, align 4, !tbaa !11
  %38 = fdiv float %36, %37
  store float %38, ptr %4, align 4, !tbaa !11
  %39 = load float, ptr %4, align 4, !tbaa !11
  %40 = fcmp olt float %39, 1.900000e+01
  br i1 %40, label %41, label %46

41:                                               ; preds = %35
  store float 1.900000e+01, ptr %4, align 4, !tbaa !11
  br label %46

42:                                               ; preds = %69, %46, %1
  %43 = landingpad { ptr, i32 }
          cleanup
  %44 = extractvalue { ptr, i32 } %43, 0
  store ptr %44, ptr %9, align 8
  %45 = extractvalue { ptr, i32 } %43, 1
  store i32 %45, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  call void @_ZN6SoLoud11AudioSourceD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %11) #6
  br label %117

46:                                               ; preds = %41, %35
  %47 = load float, ptr %4, align 4, !tbaa !11
  %48 = fadd float %47, 5.000000e-01
  %49 = invoke noundef float @_ZSt5floorf(float noundef %48)
          to label %50 unwind label %42

50:                                               ; preds = %46
  %51 = fptosi float %49 to i32
  %52 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 1
  %53 = load i32, ptr %3, align 4, !tbaa !13
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [800 x i32], ptr %52, i64 0, i64 %54
  store i32 %51, ptr %55, align 4, !tbaa !13
  br label %56

56:                                               ; preds = %50
  %57 = load i32, ptr %3, align 4, !tbaa !13
  %58 = add nsw i32 %57, -1
  store i32 %58, ptr %3, align 4, !tbaa !13
  br label %32, !llvm.loop !15

59:                                               ; preds = %32
  store float 2.750000e+01, ptr %4, align 4, !tbaa !11
  %60 = load i32, ptr %6, align 4, !tbaa !13
  %61 = mul nsw i32 1, %60
  %62 = add nsw i32 %61, 1
  store i32 %62, ptr %3, align 4, !tbaa !13
  br label %63

63:                                               ; preds = %82, %59
  %64 = load i32, ptr %3, align 4, !tbaa !13
  %65 = load i32, ptr %8, align 4, !tbaa !13
  %66 = load i32, ptr %6, align 4, !tbaa !13
  %67 = mul nsw i32 %65, %66
  %68 = icmp slt i32 %64, %67
  br i1 %68, label %69, label %85

69:                                               ; preds = %63
  %70 = load float, ptr %4, align 4, !tbaa !11
  %71 = load float, ptr %7, align 4, !tbaa !11
  %72 = fmul float %70, %71
  store float %72, ptr %4, align 4, !tbaa !11
  %73 = load float, ptr %4, align 4, !tbaa !11
  %74 = fadd float %73, 5.000000e-01
  %75 = invoke noundef float @_ZSt5floorf(float noundef %74)
          to label %76 unwind label %42

76:                                               ; preds = %69
  %77 = fptosi float %75 to i32
  %78 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 1
  %79 = load i32, ptr %3, align 4, !tbaa !13
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds [800 x i32], ptr %78, i64 0, i64 %80
  store i32 %77, ptr %81, align 4, !tbaa !13
  br label %82

82:                                               ; preds = %76
  %83 = load i32, ptr %3, align 4, !tbaa !13
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %3, align 4, !tbaa !13
  br label %63, !llvm.loop !17

85:                                               ; preds = %63
  store i32 0, ptr %3, align 4, !tbaa !13
  br label %86

86:                                               ; preds = %103, %85
  %87 = load i32, ptr %3, align 4, !tbaa !13
  %88 = icmp slt i32 %87, 32
  br i1 %88, label %89, label %106

89:                                               ; preds = %86
  %90 = load i32, ptr %3, align 4, !tbaa !13
  %91 = sitofp i32 %90 to double
  %92 = fmul double %91, 0x400921FB54442D18
  %93 = fdiv double %92, 3.200000e+01
  %94 = fmul double %93, 2.000000e+00
  %95 = call double @sin(double noundef %94) #6
  %96 = call double @llvm.fmuladd.f64(double 6.400000e+01, double %95, double 5.000000e-01)
  %97 = call double @llvm.floor.f64(double %96)
  %98 = fptosi double %97 to i32
  %99 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 2
  %100 = load i32, ptr %3, align 4, !tbaa !13
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds [32 x i32], ptr %99, i64 0, i64 %101
  store i32 %98, ptr %102, align 4, !tbaa !13
  br label %103

103:                                              ; preds = %89
  %104 = load i32, ptr %3, align 4, !tbaa !13
  %105 = add nsw i32 %104, 1
  store i32 %105, ptr %3, align 4, !tbaa !13
  br label %86, !llvm.loop !18

106:                                              ; preds = %86
  %107 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 5
  %108 = getelementptr inbounds %"struct.SoLoud::MonotoneSong", ptr %107, i32 0, i32 0
  store ptr null, ptr %108, align 8, !tbaa !19
  %109 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 5
  %110 = getelementptr inbounds %"struct.SoLoud::MonotoneSong", ptr %109, i32 0, i32 1
  store ptr null, ptr %110, align 8, !tbaa !24
  %111 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 5
  %112 = getelementptr inbounds %"struct.SoLoud::MonotoneSong", ptr %111, i32 0, i32 7
  store ptr null, ptr %112, align 8, !tbaa !25
  %113 = getelementptr inbounds %"class.SoLoud::AudioSource", ptr %11, i32 0, i32 2
  store float 4.410000e+04, ptr %113, align 4, !tbaa !26
  %114 = getelementptr inbounds %"class.SoLoud::AudioSource", ptr %11, i32 0, i32 4
  store i32 1, ptr %114, align 4, !tbaa !27
  %115 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 3
  store i32 1, ptr %115, align 8, !tbaa !28
  %116 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %11, i32 0, i32 4
  store i32 0, ptr %116, align 4, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #6
  ret void

117:                                              ; preds = %42
  %118 = load ptr, ptr %9, align 8
  %119 = load i32, ptr %10, align 4
  %120 = insertvalue { ptr, i32 } poison, ptr %118, 0
  %121 = insertvalue { ptr, i32 } %120, i32 %119, 1
  resume { ptr, i32 } %121
}

declare void @_ZN6SoLoud11AudioSourceC2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: nounwind
declare void @_ZN6SoLoud11AudioSourceD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #4

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "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, !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 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = !{!20, !6, i64 3488}
!20 = !{!"_ZTSN6SoLoud8MonotoneE", !21, i64 0, !7, i64 152, !7, i64 3352, !14, i64 3480, !14, i64 3484, !23, i64 3488}
!21 = !{!"_ZTSN6SoLoud11AudioSourceE", !14, i64 8, !12, i64 12, !12, i64 16, !14, i64 20, !14, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !14, i64 40, !12, i64 44, !7, i64 48, !6, i64 112, !6, i64 120, !6, i64 128, !14, i64 136, !22, i64 144}
!22 = !{!"double", !7, i64 0}
!23 = !{!"_ZTSN6SoLoud12MonotoneSongE", !6, i64 0, !6, i64 8, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19, !7, i64 20, !6, i64 280}
!24 = !{!20, !6, i64 3496}
!25 = !{!20, !6, i64 3768}
!26 = !{!21, !12, i64 12}
!27 = !{!21, !14, i64 20}
!28 = !{!20, !14, i64 3480}
!29 = !{!20, !14, i64 3484}


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

@_ZTVN6SoLoud8MonotoneE = external dso_local unnamed_addr constant { [6 x ptr] }, align 8

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6SoLoud8MonotoneC2Ev(ptr noundef nonnull align 8 dereferenceable(3776) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
.preheader28.preheader:
  tail call void @_ZN6SoLoud11AudioSourceC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0)
  store ptr getelementptr inbounds inrange(-16, 32) (i8, ptr @_ZTVN6SoLoud8MonotoneE, i64 16), ptr %0, align 8, !tbaa !5
  %1 = getelementptr inbounds i8, ptr %0, i64 152
  store i32 440, ptr %1, align 8, !tbaa !8
  %2 = tail call noundef float @_ZSt5floorf(float noundef 2.800000e+01)
  %3 = fptosi float %2 to i32
  %4 = getelementptr inbounds i8, ptr %0, i64 184
  store i32 %3, ptr %4, align 8, !tbaa !8
  %5 = tail call noundef float @_ZSt5floorf(float noundef 0x403BCD5A40000000)
  %6 = fptosi float %5 to i32
  %7 = getelementptr inbounds i8, ptr %0, i64 180
  store i32 %6, ptr %7, align 4, !tbaa !8
  %8 = tail call noundef float @_ZSt5floorf(float noundef 0x403B9B11C0000000)
  %9 = fptosi float %8 to i32
  %10 = getelementptr inbounds i8, ptr %0, i64 176
  store i32 %9, ptr %10, align 8, !tbaa !8
  %11 = tail call noundef float @_ZSt5floorf(float noundef 0x403B6925E0000000)
  %12 = fptosi float %11 to i32
  %13 = getelementptr inbounds i8, ptr %0, i64 172
  store i32 %12, ptr %13, align 4, !tbaa !8
  %14 = tail call noundef float @_ZSt5floorf(float noundef 0x403B379600000000)
  %15 = fptosi float %14 to i32
  %16 = getelementptr inbounds i8, ptr %0, i64 168
  store i32 %15, ptr %16, align 8, !tbaa !8
  %17 = tail call noundef float @_ZSt5floorf(float noundef 0x403B066160000000)
  %18 = fptosi float %17 to i32
  %19 = getelementptr inbounds i8, ptr %0, i64 164
  store i32 %18, ptr %19, align 4, !tbaa !8
  %20 = tail call noundef float @_ZSt5floorf(float noundef 0x403AD58760000000)
  %21 = fptosi float %20 to i32
  %22 = getelementptr inbounds i8, ptr %0, i64 160
  store i32 %21, ptr %22, align 8, !tbaa !8
  br label %.preheader28

.preheader:                                       ; preds = %.preheader28
  %23 = getelementptr inbounds i8, ptr %0, i64 3352
  br label %29

.preheader28:                                     ; preds = %.preheader28.preheader, %.preheader28
  %indvars.iv = phi i64 [ 9, %.preheader28.preheader ], [ %indvars.iv.next, %.preheader28 ]
  %.22631 = phi float [ 2.750000e+01, %.preheader28.preheader ], [ %24, %.preheader28 ]
  %24 = fmul float %.22631, 0x3FF01DAE60000000
  %25 = fadd float %24, 5.000000e-01
  %26 = tail call noundef float @_ZSt5floorf(float noundef %25)
  %27 = fptosi float %26 to i32
  %28 = getelementptr inbounds [800 x i32], ptr %1, i64 0, i64 %indvars.iv
  store i32 %27, ptr %28, align 4, !tbaa !8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 800
  br i1 %exitcond.not, label %.preheader, label %.preheader28, !llvm.loop !11

29:                                               ; preds = %29, %.preheader
  %indvars.iv36 = phi i64 [ 0, %.preheader ], [ %indvars.iv.next37.1, %29 ]
  %30 = trunc nuw nsw i64 %indvars.iv36 to i32
  %31 = uitofp nneg i32 %30 to double
  %32 = fmul double %31, 0x400921FB54442D18
  %33 = fmul double %32, 3.125000e-02
  %34 = fmul double %33, 2.000000e+00
  %35 = tail call double @sin(double noundef %34) #6
  %36 = tail call double @llvm.fmuladd.f64(double %35, double 6.400000e+01, double 5.000000e-01)
  %37 = tail call double @llvm.floor.f64(double %36)
  %38 = fptosi double %37 to i32
  %39 = getelementptr inbounds [32 x i32], ptr %23, i64 0, i64 %indvars.iv36
  store i32 %38, ptr %39, align 8, !tbaa !8
  %indvars.iv.next37 = or disjoint i64 %indvars.iv36, 1
  %40 = trunc nuw nsw i64 %indvars.iv.next37 to i32
  %41 = uitofp nneg i32 %40 to double
  %42 = fmul double %41, 0x400921FB54442D18
  %43 = fmul double %42, 3.125000e-02
  %44 = fmul double %43, 2.000000e+00
  %45 = tail call double @sin(double noundef %44) #6
  %46 = tail call double @llvm.fmuladd.f64(double %45, double 6.400000e+01, double 5.000000e-01)
  %47 = tail call double @llvm.floor.f64(double %46)
  %48 = fptosi double %47 to i32
  %49 = getelementptr inbounds [32 x i32], ptr %23, i64 0, i64 %indvars.iv.next37
  store i32 %48, ptr %49, align 4, !tbaa !8
  %indvars.iv.next37.1 = add nuw nsw i64 %indvars.iv36, 2
  %exitcond39.not.1 = icmp eq i64 %indvars.iv.next37.1, 32
  br i1 %exitcond39.not.1, label %50, label %29, !llvm.loop !13

50:                                               ; preds = %29
  %51 = getelementptr inbounds i8, ptr %0, i64 3488
  %52 = getelementptr inbounds i8, ptr %0, i64 3768
  store ptr null, ptr %52, align 8, !tbaa !14
  %53 = getelementptr inbounds i8, ptr %0, i64 12
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %51, i8 0, i64 16, i1 false)
  store float 4.410000e+04, ptr %53, align 4, !tbaa !21
  %54 = getelementptr inbounds i8, ptr %0, i64 20
  store i32 1, ptr %54, align 4, !tbaa !22
  %55 = getelementptr inbounds i8, ptr %0, i64 3480
  store i32 1, ptr %55, align 8, !tbaa !23
  %56 = getelementptr inbounds i8, ptr %0, i64 3484
  store i32 0, ptr %56, align 4, !tbaa !24
  ret void
}

declare void @_ZN6SoLoud11AudioSourceC2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #2

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

attributes #0 = { 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 #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!15, !18, i64 3768}
!15 = !{!"_ZTSN6SoLoud8MonotoneE", !16, i64 0, !10, i64 152, !10, i64 3352, !9, i64 3480, !9, i64 3484, !20, i64 3488}
!16 = !{!"_ZTSN6SoLoud11AudioSourceE", !9, i64 8, !17, i64 12, !17, i64 16, !9, i64 20, !9, i64 24, !17, i64 28, !17, i64 32, !17, i64 36, !9, i64 40, !17, i64 44, !10, i64 48, !18, i64 112, !18, i64 120, !18, i64 128, !9, i64 136, !19, i64 144}
!17 = !{!"float", !10, i64 0}
!18 = !{!"any pointer", !10, i64 0}
!19 = !{!"double", !10, i64 0}
!20 = !{!"_ZTSN6SoLoud12MonotoneSongE", !18, i64 0, !18, i64 8, !10, i64 16, !10, i64 17, !10, i64 18, !10, i64 19, !10, i64 20, !18, i64 280}
!21 = !{!16, !17, i64 12}
!22 = !{!16, !9, i64 20}
!23 = !{!15, !9, i64 3480}
!24 = !{!15, !9, i64 3484}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SROAPass,SimplifyCFGPass,TailCallElimPass