; LLVM IR from chriskiefer/libcccrt :: benchmarks/maximilian.ll (ZN10maxiSample14playWithPhasorEd)

; 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.maxiSample = type { double, double, double, double, %class.maxiLagExp, i16, i32, i16, [6 x i8], %class.maxiTrigger, %"class.std::vector", %"class.std::__cxx11::basic_string", i32, i32, i32, i16, i32, i16, i8, double }
%class.maxiLagExp = type { double, double, double }
%class.maxiTrigger = type <{ double, i8, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef double @_ZN10maxiSample14playWithPhasorEd(ptr noundef nonnull align 8 dereferenceable(176) %0, double noundef %1) #2 align 2 {
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca i64, align 8
  %6 = alloca double, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store double %1, ptr %4, align 8, !tbaa !9
  %13 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #3
  %14 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 10
  %15 = call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %14) #3
  store i64 %15, ptr %5, align 8, !tbaa !11
  %16 = load double, ptr %4, align 8, !tbaa !9
  %17 = fcmp ogt double %16, 1.000000e+00
  br i1 %17, label %18, label %19

18:                                               ; preds = %2
  store double 1.000000e+00, ptr %4, align 8, !tbaa !9
  br label %19

19:                                               ; preds = %18, %2
  %20 = load double, ptr %4, align 8, !tbaa !9
  %21 = fcmp olt double %20, 0.000000e+00
  br i1 %21, label %22, label %23

22:                                               ; preds = %19
  store double 0.000000e+00, ptr %4, align 8, !tbaa !9
  br label %23

23:                                               ; preds = %22, %19
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #3
  %24 = load double, ptr %4, align 8, !tbaa !9
  %25 = load i64, ptr %5, align 8, !tbaa !11
  %26 = uitofp i64 %25 to double
  %27 = fmul double %24, %26
  %28 = fmul double %27, 0x3FEFFFFFFFFFFFA6
  store double %28, ptr %6, align 8, !tbaa !9
  %29 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 18
  %30 = load i8, ptr %29, align 2, !tbaa !13, !range !26, !noundef !27
  %31 = trunc i8 %30 to i1
  br i1 %31, label %32, label %36

32:                                               ; preds = %23
  %33 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 18
  store i8 0, ptr %33, align 2, !tbaa !13
  %34 = load double, ptr %6, align 8, !tbaa !9
  %35 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 19
  store double %34, ptr %35, align 8, !tbaa !28
  br label %36

36:                                               ; preds = %32, %23
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #3
  %37 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 19
  %38 = load double, ptr %37, align 8, !tbaa !28
  %39 = call double @llvm.round.f64(double %38)
  %40 = fptoui double %39 to i64
  store i64 %40, ptr %7, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  %41 = load double, ptr %6, align 8, !tbaa !9
  %42 = call double @llvm.round.f64(double %41)
  %43 = fptoui double %42 to i64
  store i64 %43, ptr %8, align 8, !tbaa !11
  %44 = load i64, ptr %7, align 8, !tbaa !11
  %45 = load i64, ptr %8, align 8, !tbaa !11
  %46 = icmp eq i64 %44, %45
  br i1 %46, label %47, label %59

47:                                               ; preds = %36
  %48 = load double, ptr %6, align 8, !tbaa !9
  %49 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 19
  %50 = load double, ptr %49, align 8, !tbaa !28
  %51 = fcmp oge double %48, %50
  br i1 %51, label %52, label %55

52:                                               ; preds = %47
  %53 = load i64, ptr %8, align 8, !tbaa !11
  %54 = add i64 %53, 1
  store i64 %54, ptr %8, align 8, !tbaa !11
  br label %58

55:                                               ; preds = %47
  %56 = load i64, ptr %7, align 8, !tbaa !11
  %57 = add i64 %56, -1
  store i64 %57, ptr %7, align 8, !tbaa !11
  br label %58

58:                                               ; preds = %55, %52
  br label %59

59:                                               ; preds = %58, %36
  %60 = load i64, ptr %8, align 8, !tbaa !11
  %61 = load i64, ptr %5, align 8, !tbaa !11
  %62 = icmp uge i64 %60, %61
  br i1 %62, label %63, label %64

63:                                               ; preds = %59
  store i64 0, ptr %8, align 8, !tbaa !11
  br label %64

64:                                               ; preds = %63, %59
  %65 = load i64, ptr %7, align 8, !tbaa !11
  %66 = load i64, ptr %5, align 8, !tbaa !11
  %67 = icmp uge i64 %65, %66
  br i1 %67, label %68, label %69

68:                                               ; preds = %64
  store i64 0, ptr %7, align 8, !tbaa !11
  br label %69

69:                                               ; preds = %68, %64
  %70 = load i64, ptr %7, align 8, !tbaa !11
  %71 = icmp ult i64 %70, 0
  br i1 %71, label %72, label %75

72:                                               ; preds = %69
  %73 = load i64, ptr %5, align 8, !tbaa !11
  %74 = sub i64 %73, 1
  store i64 %74, ptr %7, align 8, !tbaa !11
  br label %75

75:                                               ; preds = %72, %69
  %76 = load i64, ptr %8, align 8, !tbaa !11
  %77 = icmp ult i64 %76, 0
  br i1 %77, label %78, label %81

78:                                               ; preds = %75
  %79 = load i64, ptr %5, align 8, !tbaa !11
  %80 = sub i64 %79, 1
  store i64 %80, ptr %8, align 8, !tbaa !11
  br label %81

81:                                               ; preds = %78, %75
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  %82 = load i64, ptr %8, align 8, !tbaa !11
  %83 = load i64, ptr %7, align 8, !tbaa !11
  %84 = icmp ugt i64 %82, %83
  br i1 %84, label %85, label %101

85:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #3
  %86 = load i64, ptr %8, align 8, !tbaa !11
  %87 = load i64, ptr %7, align 8, !tbaa !11
  %88 = sub i64 %86, %87
  %89 = uitofp i64 %88 to double
  store double %89, ptr %11, align 8, !tbaa !9
  %90 = load double, ptr %11, align 8, !tbaa !9
  %91 = fcmp oeq double %90, 0.000000e+00
  br i1 %91, label %92, label %93

92:                                               ; preds = %85
  store double 0.000000e+00, ptr %9, align 8, !tbaa !9
  br label %100

93:                                               ; preds = %85
  %94 = load double, ptr %6, align 8, !tbaa !9
  %95 = load i64, ptr %7, align 8, !tbaa !11
  %96 = uitofp i64 %95 to double
  %97 = fsub double %94, %96
  %98 = load double, ptr %11, align 8, !tbaa !9
  %99 = fdiv double %97, %98
  store double %99, ptr %9, align 8, !tbaa !9
  br label %100

100:                                              ; preds = %93, %92
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  br label %134

101:                                              ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  %102 = load i64, ptr %5, align 8, !tbaa !11
  %103 = load i64, ptr %7, align 8, !tbaa !11
  %104 = sub i64 %102, %103
  %105 = load i64, ptr %8, align 8, !tbaa !11
  %106 = add i64 %104, %105
  %107 = uitofp i64 %106 to double
  store double %107, ptr %12, align 8, !tbaa !9
  %108 = load double, ptr %12, align 8, !tbaa !9
  %109 = fcmp oeq double %108, 0.000000e+00
  br i1 %109, label %110, label %111

110:                                              ; preds = %101
  store double 0.000000e+00, ptr %9, align 8, !tbaa !9
  br label %133

111:                                              ; preds = %101
  %112 = load double, ptr %6, align 8, !tbaa !9
  %113 = load i64, ptr %7, align 8, !tbaa !11
  %114 = uitofp i64 %113 to double
  %115 = fcmp ogt double %112, %114
  br i1 %115, label %116, label %123

116:                                              ; preds = %111
  %117 = load double, ptr %6, align 8, !tbaa !9
  %118 = load i64, ptr %7, align 8, !tbaa !11
  %119 = uitofp i64 %118 to double
  %120 = fsub double %117, %119
  %121 = load double, ptr %12, align 8, !tbaa !9
  %122 = fdiv double %120, %121
  store double %122, ptr %9, align 8, !tbaa !9
  br label %132

123:                                              ; preds = %111
  %124 = load i64, ptr %5, align 8, !tbaa !11
  %125 = load i64, ptr %7, align 8, !tbaa !11
  %126 = sub i64 %124, %125
  %127 = uitofp i64 %126 to double
  %128 = load double, ptr %6, align 8, !tbaa !9
  %129 = fadd double %127, %128
  %130 = load double, ptr %12, align 8, !tbaa !9
  %131 = fdiv double %129, %130
  store double %131, ptr %9, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %123, %116
  br label %133

133:                                              ; preds = %132, %110
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  br label %134

134:                                              ; preds = %133, %100
  %135 = load double, ptr %9, align 8, !tbaa !9
  %136 = fsub double 1.000000e+00, %135
  store double %136, ptr %10, align 8, !tbaa !9
  %137 = load double, ptr %9, align 8, !tbaa !9
  %138 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 10
  %139 = load i64, ptr %7, align 8, !tbaa !11
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %138, i64 noundef %139) #3
  %141 = load double, ptr %140, align 8, !tbaa !9
  %142 = load double, ptr %10, align 8, !tbaa !9
  %143 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 10
  %144 = load i64, ptr %8, align 8, !tbaa !11
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %143, i64 noundef %144) #3
  %146 = load double, ptr %145, align 8, !tbaa !9
  %147 = fmul double %142, %146
  %148 = call double @llvm.fmuladd.f64(double %137, double %141, double %147)
  %149 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 3
  store double %148, ptr %149, align 8, !tbaa !29
  %150 = load double, ptr %6, align 8, !tbaa !9
  %151 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 19
  store double %150, ptr %151, align 8, !tbaa !28
  %152 = getelementptr inbounds %class.maxiSample, ptr %13, i32 0, i32 3
  %153 = load double, ptr %152, align 8, !tbaa !29
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #3
  ret double %153
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 = { 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 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !19, i64 166}
!14 = !{!"_ZTS10maxiSample", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !15, i64 32, !16, i64 56, !17, i64 60, !16, i64 64, !18, i64 72, !20, i64 88, !24, i64 112, !17, i64 144, !17, i64 148, !17, i64 152, !16, i64 156, !17, i64 160, !16, i64 164, !19, i64 166, !10, i64 168}
!15 = !{!"_ZTS10maxiLagExpIdE", !10, i64 0, !10, i64 8, !10, i64 16}
!16 = !{!"short", !7, i64 0}
!17 = !{!"int", !7, i64 0}
!18 = !{!"_ZTS11maxiTrigger", !10, i64 0, !19, i64 8}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !12, i64 8, !7, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!14, !10, i64 168}
!29 = !{!14, !10, i64 24}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef double @_ZN10maxiSample14playWithPhasorEd(ptr noundef nonnull align 8 dereferenceable(176) %0, double noundef %1) local_unnamed_addr #1 align 2 {
  %3 = getelementptr inbounds i8, ptr %0, i64 88
  %4 = tail call noundef i64 @_ZNKSt6vectorIdSaIdEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3) #2
  %5 = fcmp ogt double %1, 1.000000e+00
  %.0 = select i1 %5, double 1.000000e+00, double %1
  %6 = fcmp olt double %.0, 0.000000e+00
  %.1 = select i1 %6, double 0.000000e+00, double %.0
  %7 = uitofp i64 %4 to double
  %8 = fmul double %.1, %7
  %9 = fmul double %8, 0x3FEFFFFFFFFFFFA6
  %10 = getelementptr inbounds i8, ptr %0, i64 166
  %11 = load i8, ptr %10, align 2, !tbaa !5, !range !23, !noundef !24
  %12 = trunc nuw i8 %11 to i1
  br i1 %12, label %13, label %._crit_edge

._crit_edge:                                      ; preds = %2
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 168
  %.pre = load double, ptr %.phi.trans.insert, align 8, !tbaa !25
  br label %15

13:                                               ; preds = %2
  store i8 0, ptr %10, align 2, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %0, i64 168
  store double %9, ptr %14, align 8, !tbaa !25
  br label %15

15:                                               ; preds = %._crit_edge, %13
  %16 = phi double [ %.pre, %._crit_edge ], [ %9, %13 ]
  %17 = tail call double @llvm.round.f64(double %16)
  %18 = fptoui double %17 to i64
  %19 = tail call double @llvm.round.f64(double %9)
  %20 = fptoui double %19 to i64
  %21 = icmp eq i64 %18, %20
  br i1 %21, label %22, label %28

22:                                               ; preds = %15
  %23 = fcmp ult double %9, %16
  br i1 %23, label %26, label %24

24:                                               ; preds = %22
  %25 = add i64 %18, 1
  br label %28

26:                                               ; preds = %22
  %27 = add i64 %18, -1
  br label %28

28:                                               ; preds = %24, %26, %15
  %.049 = phi i64 [ %25, %24 ], [ %18, %26 ], [ %20, %15 ]
  %.047 = phi i64 [ %18, %24 ], [ %27, %26 ], [ %18, %15 ]
  %.not = icmp ult i64 %.049, %4
  %spec.store.select = select i1 %.not, i64 %.049, i64 0
  %.not63 = icmp ult i64 %.047, %4
  %spec.store.select1 = select i1 %.not63, i64 %.047, i64 0
  %29 = icmp ugt i64 %spec.store.select, %spec.store.select1
  br i1 %29, label %30, label %36

30:                                               ; preds = %28
  %31 = sub i64 %spec.store.select, %spec.store.select1
  %32 = uitofp i64 %31 to double
  %33 = uitofp i64 %spec.store.select1 to double
  %34 = fsub double %9, %33
  %35 = fdiv double %34, %32
  br label %51

36:                                               ; preds = %28
  %37 = sub i64 %4, %spec.store.select1
  %38 = add i64 %37, %spec.store.select
  %39 = uitofp i64 %38 to double
  %40 = icmp eq i64 %38, 0
  br i1 %40, label %51, label %41

41:                                               ; preds = %36
  %42 = uitofp i64 %spec.store.select1 to double
  %43 = fcmp ogt double %9, %42
  br i1 %43, label %44, label %47

44:                                               ; preds = %41
  %45 = fsub double %9, %42
  %46 = fdiv double %45, %39
  br label %51

47:                                               ; preds = %41
  %48 = uitofp i64 %37 to double
  %49 = fadd double %9, %48
  %50 = fdiv double %49, %39
  br label %51

51:                                               ; preds = %47, %44, %36, %30
  %.2 = phi double [ %35, %30 ], [ %46, %44 ], [ %50, %47 ], [ 0.000000e+00, %36 ]
  %52 = getelementptr inbounds i8, ptr %0, i64 168
  %53 = fsub double 1.000000e+00, %.2
  %54 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %spec.store.select1) #2
  %55 = load double, ptr %54, align 8, !tbaa !26
  %56 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3, i64 noundef %spec.store.select) #2
  %57 = load double, ptr %56, align 8, !tbaa !26
  %58 = fmul double %53, %57
  %59 = tail call double @llvm.fmuladd.f64(double %.2, double %55, double %58)
  %60 = getelementptr inbounds i8, ptr %0, i64 24
  store double %59, ptr %60, align 8, !tbaa !27
  store double %9, ptr %52, align 8, !tbaa !25
  ret double %59
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !14, i64 166}
!6 = !{!"_ZTS10maxiSample", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !11, i64 56, !12, i64 60, !11, i64 64, !13, i64 72, !15, i64 88, !20, i64 112, !12, i64 144, !12, i64 148, !12, i64 152, !11, i64 156, !12, i64 160, !11, i64 164, !14, i64 166, !7, i64 168}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTS10maxiLagExpIdE", !7, i64 0, !7, i64 8, !7, i64 16}
!11 = !{!"short", !8, i64 0}
!12 = !{!"int", !8, i64 0}
!13 = !{!"_ZTS11maxiTrigger", !7, i64 0, !14, i64 8}
!14 = !{!"bool", !8, i64 0}
!15 = !{!"_ZTSSt6vectorIdSaIdEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!19 = !{!"any pointer", !8, i64 0}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !21, i64 0, !22, i64 8, !8, i64 16}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !19, i64 0}
!22 = !{!"long", !8, i64 0}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!6, !7, i64 168}
!26 = !{!7, !7, i64 0}
!27 = !{!6, !7, i64 24}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass