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

; 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::MonotoneInstance" = type { %"class.SoLoud::AudioSourceInstance", ptr, [12 x %"struct.SoLoud::MonotoneChannel"], [12 x %"struct.SoLoud::MonotoneHardwareChannel"], i32, i32, i32, i32, i32, i32 }
%"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 }
%"struct.SoLoud::MonotoneChannel" = type { i32, i32, [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%"struct.SoLoud::MonotoneHardwareChannel" = type { i32, float, float }
%"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 }

@_ZTVN6SoLoud16MonotoneInstanceE = external dso_local unnamed_addr constant { [9 x ptr] }, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6SoLoud16MonotoneInstanceC2EPNS_8MonotoneE(ptr noundef nonnull align 8 dereferenceable(1344) %0, ptr noundef %1) unnamed_addr #0 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %6 = load ptr, ptr %3, align 8
  call void @_ZN6SoLoud19AudioSourceInstanceC2Ev(ptr noundef nonnull align 8 dereferenceable(496) %6)
  store ptr getelementptr inbounds inrange(-16, 56) ({ [9 x ptr] }, ptr @_ZTVN6SoLoud16MonotoneInstanceE, i32 0, i32 0, i32 2), ptr %6, align 8, !tbaa !9
  %7 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %8 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 3
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 1
  store ptr %9, ptr %10, align 8, !tbaa !11
  %11 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 6
  store i32 0, ptr %11, align 8, !tbaa !18
  %12 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 7
  store i32 0, ptr %12, align 4, !tbaa !19
  %13 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 5
  store i32 4, ptr %13, align 4, !tbaa !20
  %14 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 8
  store i32 0, ptr %14, align 8, !tbaa !21
  %15 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 4
  store i32 0, ptr %15, align 8, !tbaa !22
  %16 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 9
  store i32 0, ptr %16, align 4, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  store i32 0, ptr %5, align 4, !tbaa !24
  br label %17

17:                                               ; preds = %113, %2
  %18 = load i32, ptr %5, align 4, !tbaa !24
  %19 = icmp slt i32 %18, 12
  br i1 %19, label %20, label %116

20:                                               ; preds = %17
  %21 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 3
  %22 = load i32, ptr %5, align 4, !tbaa !24
  %23 = sext i32 %22 to i64
  %24 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneHardwareChannel"], ptr %21, i64 0, i64 %23
  %25 = getelementptr inbounds %"struct.SoLoud::MonotoneHardwareChannel", ptr %24, i32 0, i32 1
  store float 0.000000e+00, ptr %25, align 4, !tbaa !25
  %26 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 3
  %27 = load i32, ptr %5, align 4, !tbaa !24
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneHardwareChannel"], ptr %26, i64 0, i64 %28
  %30 = getelementptr inbounds %"struct.SoLoud::MonotoneHardwareChannel", ptr %29, i32 0, i32 2
  store float 0.000000e+00, ptr %30, align 4, !tbaa !27
  %31 = load i32, ptr %5, align 4, !tbaa !24
  %32 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 1
  %33 = load ptr, ptr %32, align 8, !tbaa !11
  %34 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %33, i32 0, i32 3
  %35 = load i32, ptr %34, align 8, !tbaa !28
  %36 = icmp slt i32 %31, %35
  br i1 %36, label %37, label %46

37:                                               ; preds = %20
  %38 = load i32, ptr %5, align 4, !tbaa !24
  %39 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 1
  %40 = load ptr, ptr %39, align 8, !tbaa !11
  %41 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %40, i32 0, i32 5
  %42 = getelementptr inbounds %"struct.SoLoud::MonotoneSong", ptr %41, i32 0, i32 4
  %43 = load i8, ptr %42, align 2, !tbaa !32
  %44 = zext i8 %43 to i32
  %45 = icmp slt i32 %38, %44
  br label %46

46:                                               ; preds = %37, %20
  %47 = phi i1 [ false, %20 ], [ %45, %37 ]
  %48 = zext i1 %47 to i32
  %49 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 3
  %50 = load i32, ptr %5, align 4, !tbaa !24
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneHardwareChannel"], ptr %49, i64 0, i64 %51
  %53 = getelementptr inbounds %"struct.SoLoud::MonotoneHardwareChannel", ptr %52, i32 0, i32 0
  store i32 %48, ptr %53, align 4, !tbaa !33
  %54 = load i32, ptr %5, align 4, !tbaa !24
  %55 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 1
  %56 = load ptr, ptr %55, align 8, !tbaa !11
  %57 = getelementptr inbounds %"class.SoLoud::Monotone", ptr %56, i32 0, i32 5
  %58 = getelementptr inbounds %"struct.SoLoud::MonotoneSong", ptr %57, i32 0, i32 4
  %59 = load i8, ptr %58, align 2, !tbaa !32
  %60 = zext i8 %59 to i32
  %61 = icmp slt i32 %54, %60
  %62 = zext i1 %61 to i32
  %63 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %64 = load i32, ptr %5, align 4, !tbaa !24
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %63, i64 0, i64 %65
  %67 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %66, i32 0, i32 0
  store i32 %62, ptr %67, align 8, !tbaa !34
  %68 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %69 = load i32, ptr %5, align 4, !tbaa !24
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %68, i64 0, i64 %70
  %72 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %71, i32 0, i32 1
  store i32 0, ptr %72, align 4, !tbaa !36
  %73 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %74 = load i32, ptr %5, align 4, !tbaa !24
  %75 = sext i32 %74 to i64
  %76 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %73, i64 0, i64 %75
  %77 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %76, i32 0, i32 4
  store i32 0, ptr %77, align 8, !tbaa !37
  %78 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %79 = load i32, ptr %5, align 4, !tbaa !24
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %78, i64 0, i64 %80
  %82 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %81, i32 0, i32 6
  store i32 0, ptr %82, align 8, !tbaa !38
  %83 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %84 = load i32, ptr %5, align 4, !tbaa !24
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %83, i64 0, i64 %85
  %87 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %86, i32 0, i32 7
  store i32 0, ptr %87, align 4, !tbaa !39
  %88 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %89 = load i32, ptr %5, align 4, !tbaa !24
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %88, i64 0, i64 %90
  %92 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %91, i32 0, i32 5
  store i32 0, ptr %92, align 4, !tbaa !40
  %93 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %94 = load i32, ptr %5, align 4, !tbaa !24
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %93, i64 0, i64 %95
  %97 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %96, i32 0, i32 8
  store i32 0, ptr %97, align 8, !tbaa !41
  %98 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %99 = load i32, ptr %5, align 4, !tbaa !24
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %98, i64 0, i64 %100
  %102 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %101, i32 0, i32 9
  store i32 0, ptr %102, align 4, !tbaa !42
  %103 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %104 = load i32, ptr %5, align 4, !tbaa !24
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %103, i64 0, i64 %105
  %107 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %106, i32 0, i32 10
  store i32 1, ptr %107, align 8, !tbaa !43
  %108 = getelementptr inbounds %"class.SoLoud::MonotoneInstance", ptr %6, i32 0, i32 2
  %109 = load i32, ptr %5, align 4, !tbaa !24
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [12 x %"struct.SoLoud::MonotoneChannel"], ptr %108, i64 0, i64 %110
  %112 = getelementptr inbounds %"struct.SoLoud::MonotoneChannel", ptr %111, i32 0, i32 11
  store i32 1, ptr %112, align 4, !tbaa !44
  br label %113

113:                                              ; preds = %46
  %114 = load i32, ptr %5, align 4, !tbaa !24
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %5, align 4, !tbaa !24
  br label %17, !llvm.loop !45

116:                                              ; preds = %17
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  ret void
}

declare void @_ZN6SoLoud19AudioSourceInstanceC2Ev(ptr noundef nonnull align 8 dereferenceable(496)) unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #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 = { "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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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, !6, i64 496}
!12 = !{!"_ZTSN6SoLoud16MonotoneInstanceE", !13, i64 0, !6, i64 496, !7, i64 504, !7, i64 1176, !14, i64 1320, !14, i64 1324, !14, i64 1328, !14, i64 1332, !14, i64 1336, !14, i64 1340}
!13 = !{!"_ZTSN6SoLoud19AudioSourceInstanceE", !14, i64 8, !14, i64 12, !14, i64 16, !15, i64 20, !7, i64 24, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !14, i64 72, !15, i64 76, !15, i64 80, !16, i64 88, !16, i64 96, !17, i64 104, !17, i64 152, !17, i64 200, !17, i64 248, !17, i64 296, !14, i64 344, !7, i64 348, !14, i64 380, !14, i64 384, !7, i64 392, !7, i64 456, !14, i64 472, !14, i64 476, !14, i64 480, !16, i64 488}
!14 = !{!"int", !7, i64 0}
!15 = !{!"float", !7, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = !{!"_ZTSN6SoLoud5FaderE", !15, i64 0, !15, i64 4, !15, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !15, i64 40, !14, i64 44}
!18 = !{!12, !14, i64 1328}
!19 = !{!12, !14, i64 1332}
!20 = !{!12, !14, i64 1324}
!21 = !{!12, !14, i64 1336}
!22 = !{!12, !14, i64 1320}
!23 = !{!12, !14, i64 1340}
!24 = !{!14, !14, i64 0}
!25 = !{!26, !15, i64 4}
!26 = !{!"_ZTSN6SoLoud23MonotoneHardwareChannelE", !14, i64 0, !15, i64 4, !15, i64 8}
!27 = !{!26, !15, i64 8}
!28 = !{!29, !14, i64 3480}
!29 = !{!"_ZTSN6SoLoud8MonotoneE", !30, i64 0, !7, i64 152, !7, i64 3352, !14, i64 3480, !14, i64 3484, !31, i64 3488}
!30 = !{!"_ZTSN6SoLoud11AudioSourceE", !14, i64 8, !15, i64 12, !15, i64 16, !14, i64 20, !14, i64 24, !15, i64 28, !15, i64 32, !15, i64 36, !14, i64 40, !15, i64 44, !7, i64 48, !6, i64 112, !6, i64 120, !6, i64 128, !14, i64 136, !16, i64 144}
!31 = !{!"_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}
!32 = !{!29, !7, i64 3506}
!33 = !{!26, !14, i64 0}
!34 = !{!35, !14, i64 0}
!35 = !{!"_ZTSN6SoLoud15MonotoneChannelE", !14, i64 0, !14, i64 4, !7, i64 8, !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}
!36 = !{!35, !14, i64 4}
!37 = !{!35, !14, i64 24}
!38 = !{!35, !14, i64 32}
!39 = !{!35, !14, i64 36}
!40 = !{!35, !14, i64 28}
!41 = !{!35, !14, i64 40}
!42 = !{!35, !14, i64 44}
!43 = !{!35, !14, i64 48}
!44 = !{!35, !14, i64 52}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}


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

@_ZTVN6SoLoud16MonotoneInstanceE = external dso_local unnamed_addr constant { [9 x ptr] }, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN6SoLoud16MonotoneInstanceC2EPNS_8MonotoneE(ptr noundef nonnull align 8 dereferenceable(1344) %0, ptr noundef %1) unnamed_addr #0 align 2 {
  tail call void @_ZN6SoLoud19AudioSourceInstanceC2Ev(ptr noundef nonnull align 8 dereferenceable(496) %0)
  store ptr getelementptr inbounds inrange(-16, 56) (i8, ptr @_ZTVN6SoLoud16MonotoneInstanceE, i64 16), ptr %0, align 8, !tbaa !5
  %3 = getelementptr inbounds i8, ptr %0, i64 496
  store ptr %1, ptr %3, align 8, !tbaa !8
  %4 = getelementptr inbounds i8, ptr %0, i64 1336
  store i32 0, ptr %4, align 8, !tbaa !17
  %5 = getelementptr inbounds i8, ptr %0, i64 1320
  store <4 x i32> <i32 0, i32 4, i32 0, i32 0>, ptr %5, align 8, !tbaa !18
  %6 = getelementptr inbounds i8, ptr %0, i64 1340
  store i32 0, ptr %6, align 4, !tbaa !19
  %7 = getelementptr inbounds i8, ptr %1, i64 3480
  %8 = load i32, ptr %7, align 8, !tbaa !20
  %9 = getelementptr inbounds i8, ptr %1, i64 3506
  %10 = load i8, ptr %9, align 2, !tbaa !24
  %11 = getelementptr inbounds i8, ptr %0, i64 504
  %12 = getelementptr inbounds i8, ptr %0, i64 1176
  %13 = getelementptr inbounds i8, ptr %0, i64 1180
  store <2 x float> zeroinitializer, ptr %13, align 4, !tbaa !25
  %14 = icmp sgt i32 %8, 0
  %15 = icmp ne i8 %10, 0
  %spec.select = select i1 %14, i1 %15, i1 false
  %16 = zext i1 %spec.select to i32
  store i32 %16, ptr %12, align 8, !tbaa !26
  %17 = icmp ne i8 %10, 0
  %18 = zext i1 %17 to i32
  store i32 %18, ptr %11, align 8, !tbaa !28
  %19 = getelementptr inbounds i8, ptr %0, i64 508
  store i32 0, ptr %19, align 4, !tbaa !30
  %20 = getelementptr inbounds i8, ptr %0, i64 528
  %21 = getelementptr inbounds i8, ptr %0, i64 552
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %20, i8 0, i64 24, i1 false)
  store i32 1, ptr %21, align 8, !tbaa !31
  %22 = getelementptr inbounds i8, ptr %0, i64 556
  store i32 1, ptr %22, align 4, !tbaa !32
  %23 = getelementptr inbounds i8, ptr %0, i64 1188
  %24 = getelementptr inbounds i8, ptr %0, i64 1192
  store <2 x float> zeroinitializer, ptr %24, align 8, !tbaa !25
  %25 = icmp sgt i32 %8, 1
  %26 = icmp ugt i8 %10, 1
  %spec.select.1 = select i1 %25, i1 %26, i1 false
  %27 = zext i1 %spec.select.1 to i32
  store i32 %27, ptr %23, align 4, !tbaa !26
  %28 = icmp ugt i8 %10, 1
  %29 = zext i1 %28 to i32
  %30 = getelementptr inbounds i8, ptr %0, i64 560
  store i32 %29, ptr %30, align 8, !tbaa !28
  %31 = getelementptr inbounds i8, ptr %0, i64 564
  store i32 0, ptr %31, align 4, !tbaa !30
  %32 = getelementptr inbounds i8, ptr %0, i64 584
  %33 = getelementptr inbounds i8, ptr %0, i64 608
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %32, i8 0, i64 24, i1 false)
  store i32 1, ptr %33, align 8, !tbaa !31
  %34 = getelementptr inbounds i8, ptr %0, i64 612
  store i32 1, ptr %34, align 4, !tbaa !32
  %35 = getelementptr inbounds i8, ptr %0, i64 1200
  %36 = getelementptr inbounds i8, ptr %0, i64 1204
  store <2 x float> zeroinitializer, ptr %36, align 4, !tbaa !25
  %37 = icmp sgt i32 %8, 2
  %38 = icmp ugt i8 %10, 2
  %spec.select.2 = select i1 %37, i1 %38, i1 false
  %39 = zext i1 %spec.select.2 to i32
  store i32 %39, ptr %35, align 8, !tbaa !26
  %40 = icmp ugt i8 %10, 2
  %41 = zext i1 %40 to i32
  %42 = getelementptr inbounds i8, ptr %0, i64 616
  store i32 %41, ptr %42, align 8, !tbaa !28
  %43 = getelementptr inbounds i8, ptr %0, i64 620
  store i32 0, ptr %43, align 4, !tbaa !30
  %44 = getelementptr inbounds i8, ptr %0, i64 640
  %45 = getelementptr inbounds i8, ptr %0, i64 664
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %44, i8 0, i64 24, i1 false)
  store i32 1, ptr %45, align 8, !tbaa !31
  %46 = getelementptr inbounds i8, ptr %0, i64 668
  store i32 1, ptr %46, align 4, !tbaa !32
  %47 = getelementptr inbounds i8, ptr %0, i64 1212
  %48 = getelementptr inbounds i8, ptr %0, i64 1216
  store <2 x float> zeroinitializer, ptr %48, align 8, !tbaa !25
  %49 = icmp sgt i32 %8, 3
  %50 = icmp ugt i8 %10, 3
  %spec.select.3 = select i1 %49, i1 %50, i1 false
  %51 = zext i1 %spec.select.3 to i32
  store i32 %51, ptr %47, align 4, !tbaa !26
  %52 = icmp ugt i8 %10, 3
  %53 = zext i1 %52 to i32
  %54 = getelementptr inbounds i8, ptr %0, i64 672
  store i32 %53, ptr %54, align 8, !tbaa !28
  %55 = getelementptr inbounds i8, ptr %0, i64 676
  store i32 0, ptr %55, align 4, !tbaa !30
  %56 = getelementptr inbounds i8, ptr %0, i64 696
  %57 = getelementptr inbounds i8, ptr %0, i64 720
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %56, i8 0, i64 24, i1 false)
  store i32 1, ptr %57, align 8, !tbaa !31
  %58 = getelementptr inbounds i8, ptr %0, i64 724
  store i32 1, ptr %58, align 4, !tbaa !32
  %59 = getelementptr inbounds i8, ptr %0, i64 1224
  %60 = getelementptr inbounds i8, ptr %0, i64 1228
  store <2 x float> zeroinitializer, ptr %60, align 4, !tbaa !25
  %61 = icmp sgt i32 %8, 4
  %62 = icmp ugt i8 %10, 4
  %spec.select.4 = select i1 %61, i1 %62, i1 false
  %63 = zext i1 %spec.select.4 to i32
  store i32 %63, ptr %59, align 8, !tbaa !26
  %64 = icmp ugt i8 %10, 4
  %65 = zext i1 %64 to i32
  %66 = getelementptr inbounds i8, ptr %0, i64 728
  store i32 %65, ptr %66, align 8, !tbaa !28
  %67 = getelementptr inbounds i8, ptr %0, i64 732
  store i32 0, ptr %67, align 4, !tbaa !30
  %68 = getelementptr inbounds i8, ptr %0, i64 752
  %69 = getelementptr inbounds i8, ptr %0, i64 776
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %68, i8 0, i64 24, i1 false)
  store i32 1, ptr %69, align 8, !tbaa !31
  %70 = getelementptr inbounds i8, ptr %0, i64 780
  store i32 1, ptr %70, align 4, !tbaa !32
  %71 = getelementptr inbounds i8, ptr %0, i64 1236
  %72 = getelementptr inbounds i8, ptr %0, i64 1240
  store <2 x float> zeroinitializer, ptr %72, align 8, !tbaa !25
  %73 = icmp sgt i32 %8, 5
  %74 = icmp ugt i8 %10, 5
  %spec.select.5 = select i1 %73, i1 %74, i1 false
  %75 = zext i1 %spec.select.5 to i32
  store i32 %75, ptr %71, align 4, !tbaa !26
  %76 = icmp ugt i8 %10, 5
  %77 = zext i1 %76 to i32
  %78 = getelementptr inbounds i8, ptr %0, i64 784
  store i32 %77, ptr %78, align 8, !tbaa !28
  %79 = getelementptr inbounds i8, ptr %0, i64 788
  store i32 0, ptr %79, align 4, !tbaa !30
  %80 = getelementptr inbounds i8, ptr %0, i64 808
  %81 = getelementptr inbounds i8, ptr %0, i64 832
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %80, i8 0, i64 24, i1 false)
  store i32 1, ptr %81, align 8, !tbaa !31
  %82 = getelementptr inbounds i8, ptr %0, i64 836
  store i32 1, ptr %82, align 4, !tbaa !32
  %83 = getelementptr inbounds i8, ptr %0, i64 1248
  %84 = getelementptr inbounds i8, ptr %0, i64 1252
  store <2 x float> zeroinitializer, ptr %84, align 4, !tbaa !25
  %85 = icmp sgt i32 %8, 6
  %86 = icmp ugt i8 %10, 6
  %spec.select.6 = select i1 %85, i1 %86, i1 false
  %87 = zext i1 %spec.select.6 to i32
  store i32 %87, ptr %83, align 8, !tbaa !26
  %88 = icmp ugt i8 %10, 6
  %89 = zext i1 %88 to i32
  %90 = getelementptr inbounds i8, ptr %0, i64 840
  store i32 %89, ptr %90, align 8, !tbaa !28
  %91 = getelementptr inbounds i8, ptr %0, i64 844
  store i32 0, ptr %91, align 4, !tbaa !30
  %92 = getelementptr inbounds i8, ptr %0, i64 864
  %93 = getelementptr inbounds i8, ptr %0, i64 888
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %92, i8 0, i64 24, i1 false)
  store i32 1, ptr %93, align 8, !tbaa !31
  %94 = getelementptr inbounds i8, ptr %0, i64 892
  store i32 1, ptr %94, align 4, !tbaa !32
  %95 = getelementptr inbounds i8, ptr %0, i64 1260
  %96 = getelementptr inbounds i8, ptr %0, i64 1264
  store <2 x float> zeroinitializer, ptr %96, align 8, !tbaa !25
  %97 = icmp sgt i32 %8, 7
  %98 = icmp ugt i8 %10, 7
  %spec.select.7 = select i1 %97, i1 %98, i1 false
  %99 = zext i1 %spec.select.7 to i32
  store i32 %99, ptr %95, align 4, !tbaa !26
  %100 = icmp ugt i8 %10, 7
  %101 = zext i1 %100 to i32
  %102 = getelementptr inbounds i8, ptr %0, i64 896
  store i32 %101, ptr %102, align 8, !tbaa !28
  %103 = getelementptr inbounds i8, ptr %0, i64 900
  store i32 0, ptr %103, align 4, !tbaa !30
  %104 = getelementptr inbounds i8, ptr %0, i64 920
  %105 = getelementptr inbounds i8, ptr %0, i64 944
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %104, i8 0, i64 24, i1 false)
  store i32 1, ptr %105, align 8, !tbaa !31
  %106 = getelementptr inbounds i8, ptr %0, i64 948
  store i32 1, ptr %106, align 4, !tbaa !32
  %107 = getelementptr inbounds i8, ptr %0, i64 1272
  %108 = getelementptr inbounds i8, ptr %0, i64 1276
  store <2 x float> zeroinitializer, ptr %108, align 4, !tbaa !25
  %109 = icmp sgt i32 %8, 8
  %110 = icmp ugt i8 %10, 8
  %spec.select.8 = select i1 %109, i1 %110, i1 false
  %111 = zext i1 %spec.select.8 to i32
  store i32 %111, ptr %107, align 8, !tbaa !26
  %112 = icmp ugt i8 %10, 8
  %113 = zext i1 %112 to i32
  %114 = getelementptr inbounds i8, ptr %0, i64 952
  store i32 %113, ptr %114, align 8, !tbaa !28
  %115 = getelementptr inbounds i8, ptr %0, i64 956
  store i32 0, ptr %115, align 4, !tbaa !30
  %116 = getelementptr inbounds i8, ptr %0, i64 976
  %117 = getelementptr inbounds i8, ptr %0, i64 1000
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %116, i8 0, i64 24, i1 false)
  store i32 1, ptr %117, align 8, !tbaa !31
  %118 = getelementptr inbounds i8, ptr %0, i64 1004
  store i32 1, ptr %118, align 4, !tbaa !32
  %119 = getelementptr inbounds i8, ptr %0, i64 1284
  %120 = getelementptr inbounds i8, ptr %0, i64 1288
  store <2 x float> zeroinitializer, ptr %120, align 8, !tbaa !25
  %121 = icmp sgt i32 %8, 9
  %122 = icmp ugt i8 %10, 9
  %spec.select.9 = select i1 %121, i1 %122, i1 false
  %123 = zext i1 %spec.select.9 to i32
  store i32 %123, ptr %119, align 4, !tbaa !26
  %124 = icmp ugt i8 %10, 9
  %125 = zext i1 %124 to i32
  %126 = getelementptr inbounds i8, ptr %0, i64 1008
  store i32 %125, ptr %126, align 8, !tbaa !28
  %127 = getelementptr inbounds i8, ptr %0, i64 1012
  store i32 0, ptr %127, align 4, !tbaa !30
  %128 = getelementptr inbounds i8, ptr %0, i64 1032
  %129 = getelementptr inbounds i8, ptr %0, i64 1056
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %128, i8 0, i64 24, i1 false)
  store i32 1, ptr %129, align 8, !tbaa !31
  %130 = getelementptr inbounds i8, ptr %0, i64 1060
  store i32 1, ptr %130, align 4, !tbaa !32
  %131 = getelementptr inbounds i8, ptr %0, i64 1296
  %132 = getelementptr inbounds i8, ptr %0, i64 1300
  store <2 x float> zeroinitializer, ptr %132, align 4, !tbaa !25
  %133 = icmp sgt i32 %8, 10
  %134 = icmp ugt i8 %10, 10
  %spec.select.10 = select i1 %133, i1 %134, i1 false
  %135 = zext i1 %spec.select.10 to i32
  store i32 %135, ptr %131, align 8, !tbaa !26
  %136 = icmp ugt i8 %10, 10
  %137 = zext i1 %136 to i32
  %138 = getelementptr inbounds i8, ptr %0, i64 1064
  store i32 %137, ptr %138, align 8, !tbaa !28
  %139 = getelementptr inbounds i8, ptr %0, i64 1068
  store i32 0, ptr %139, align 4, !tbaa !30
  %140 = getelementptr inbounds i8, ptr %0, i64 1088
  %141 = getelementptr inbounds i8, ptr %0, i64 1112
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %140, i8 0, i64 24, i1 false)
  store i32 1, ptr %141, align 8, !tbaa !31
  %142 = getelementptr inbounds i8, ptr %0, i64 1116
  store i32 1, ptr %142, align 4, !tbaa !32
  %143 = getelementptr inbounds i8, ptr %0, i64 1308
  %144 = getelementptr inbounds i8, ptr %0, i64 1312
  store <2 x float> zeroinitializer, ptr %144, align 8, !tbaa !25
  %145 = icmp sgt i32 %8, 11
  %146 = icmp ugt i8 %10, 11
  %spec.select.11 = select i1 %145, i1 %146, i1 false
  %147 = zext i1 %spec.select.11 to i32
  store i32 %147, ptr %143, align 4, !tbaa !26
  %148 = icmp ugt i8 %10, 11
  %149 = zext i1 %148 to i32
  %150 = getelementptr inbounds i8, ptr %0, i64 1120
  store i32 %149, ptr %150, align 8, !tbaa !28
  %151 = getelementptr inbounds i8, ptr %0, i64 1124
  store i32 0, ptr %151, align 4, !tbaa !30
  %152 = getelementptr inbounds i8, ptr %0, i64 1144
  %153 = getelementptr inbounds i8, ptr %0, i64 1168
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %152, i8 0, i64 24, i1 false)
  store i32 1, ptr %153, align 8, !tbaa !31
  %154 = getelementptr inbounds i8, ptr %0, i64 1172
  store i32 1, ptr %154, align 4, !tbaa !32
  ret void
}

declare void @_ZN6SoLoud19AudioSourceInstanceC2Ev(ptr noundef nonnull align 8 dereferenceable(496)) unnamed_addr #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }

!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, !16, i64 496}
!9 = !{!"_ZTSN6SoLoud16MonotoneInstanceE", !10, i64 0, !16, i64 496, !12, i64 504, !12, i64 1176, !11, i64 1320, !11, i64 1324, !11, i64 1328, !11, i64 1332, !11, i64 1336, !11, i64 1340}
!10 = !{!"_ZTSN6SoLoud19AudioSourceInstanceE", !11, i64 8, !11, i64 12, !11, i64 16, !13, i64 20, !12, i64 24, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !11, i64 72, !13, i64 76, !13, i64 80, !14, i64 88, !14, i64 96, !15, i64 104, !15, i64 152, !15, i64 200, !15, i64 248, !15, i64 296, !11, i64 344, !12, i64 348, !11, i64 380, !11, i64 384, !12, i64 392, !12, i64 456, !11, i64 472, !11, i64 476, !11, i64 480, !14, i64 488}
!11 = !{!"int", !12, i64 0}
!12 = !{!"omnipotent char", !7, i64 0}
!13 = !{!"float", !12, i64 0}
!14 = !{!"double", !12, i64 0}
!15 = !{!"_ZTSN6SoLoud5FaderE", !13, i64 0, !13, i64 4, !13, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !13, i64 40, !11, i64 44}
!16 = !{!"any pointer", !12, i64 0}
!17 = !{!9, !11, i64 1336}
!18 = !{!11, !11, i64 0}
!19 = !{!9, !11, i64 1340}
!20 = !{!21, !11, i64 3480}
!21 = !{!"_ZTSN6SoLoud8MonotoneE", !22, i64 0, !12, i64 152, !12, i64 3352, !11, i64 3480, !11, i64 3484, !23, i64 3488}
!22 = !{!"_ZTSN6SoLoud11AudioSourceE", !11, i64 8, !13, i64 12, !13, i64 16, !11, i64 20, !11, i64 24, !13, i64 28, !13, i64 32, !13, i64 36, !11, i64 40, !13, i64 44, !12, i64 48, !16, i64 112, !16, i64 120, !16, i64 128, !11, i64 136, !14, i64 144}
!23 = !{!"_ZTSN6SoLoud12MonotoneSongE", !16, i64 0, !16, i64 8, !12, i64 16, !12, i64 17, !12, i64 18, !12, i64 19, !12, i64 20, !16, i64 280}
!24 = !{!21, !12, i64 3506}
!25 = !{!13, !13, i64 0}
!26 = !{!27, !11, i64 0}
!27 = !{!"_ZTSN6SoLoud23MonotoneHardwareChannelE", !11, i64 0, !13, i64 4, !13, i64 8}
!28 = !{!29, !11, i64 0}
!29 = !{!"_ZTSN6SoLoud15MonotoneChannelE", !11, i64 0, !11, i64 4, !12, i64 8, !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}
!30 = !{!29, !11, i64 4}
!31 = !{!29, !11, i64 48}
!32 = !{!29, !11, i64 52}


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