; LLVM IR from hasseily/SuperDuperDisplay :: Ayumi.ll (ZN5Ayumi7ProcessEv)

; 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.Ayumi = type <{ i8, [7 x i8], [3 x %"struct.Ayumi::tone_channel"], i32, i32, i32, i32, i32, i32, i32, i32, ptr, double, double, %"struct.Ayumi::interpolator", %"struct.Ayumi::interpolator", [384 x double], [384 x double], i32, [4 x i8], %"struct.Ayumi::dc_filter", %"struct.Ayumi::dc_filter", i32, [4 x i8], double, double, i8, [7 x i8] }>
%"struct.Ayumi::tone_channel" = type { i32, i32, i32, i8, i8, i8, i32, double, double }
%"struct.Ayumi::interpolator" = type { [4 x double], [4 x double] }
%"struct.Ayumi::dc_filter" = type { double, [1024 x double] }

; 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: mustprogress uwtable
define dso_local void @_ZN5Ayumi7ProcessEv(ptr noundef nonnull align 8 dereferenceable(22889) %0) #1 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca double, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %11 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #4
  %12 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 14
  %13 = getelementptr inbounds %"struct.Ayumi::interpolator", ptr %12, i32 0, i32 0
  %14 = getelementptr inbounds [4 x double], ptr %13, i64 0, i64 0
  store ptr %14, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %15 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 14
  %16 = getelementptr inbounds %"struct.Ayumi::interpolator", ptr %15, i32 0, i32 1
  %17 = getelementptr inbounds [4 x double], ptr %16, i64 0, i64 0
  store ptr %17, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  %18 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 15
  %19 = getelementptr inbounds %"struct.Ayumi::interpolator", ptr %18, i32 0, i32 0
  %20 = getelementptr inbounds [4 x double], ptr %19, i64 0, i64 0
  store ptr %20, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  %21 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 15
  %22 = getelementptr inbounds %"struct.Ayumi::interpolator", ptr %21, i32 0, i32 1
  %23 = getelementptr inbounds [4 x double], ptr %22, i64 0, i64 0
  store ptr %23, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %24 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 16
  %25 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 18
  %26 = load i32, ptr %25, align 8, !tbaa !9
  %27 = mul nsw i32 %26, 8
  %28 = sub nsw i32 192, %27
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [384 x double], ptr %24, i64 0, i64 %29
  store ptr %30, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %31 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 17
  %32 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 18
  %33 = load i32, ptr %32, align 8, !tbaa !9
  %34 = mul nsw i32 %33, 8
  %35 = sub nsw i32 192, %34
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [384 x double], ptr %31, i64 0, i64 %36
  store ptr %37, ptr %10, align 8, !tbaa !5
  %38 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 18
  %39 = load i32, ptr %38, align 8, !tbaa !9
  %40 = add nsw i32 %39, 1
  %41 = srem i32 %40, 23
  %42 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 18
  store i32 %41, ptr %42, align 8, !tbaa !9
  store i32 7, ptr %3, align 4, !tbaa !16
  br label %43

43:                                               ; preds = %210, %1
  %44 = load i32, ptr %3, align 4, !tbaa !16
  %45 = icmp sge i32 %44, 0
  br i1 %45, label %46, label %213

46:                                               ; preds = %43
  %47 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 12
  %48 = load double, ptr %47, align 8, !tbaa !17
  %49 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %50 = load double, ptr %49, align 8, !tbaa !18
  %51 = fadd double %50, %48
  store double %51, ptr %49, align 8, !tbaa !18
  %52 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %53 = load double, ptr %52, align 8, !tbaa !18
  %54 = fcmp oge double %53, 1.000000e+00
  br i1 %54, label %55, label %171

55:                                               ; preds = %46
  %56 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %57 = load double, ptr %56, align 8, !tbaa !18
  %58 = fsub double %57, 1.000000e+00
  store double %58, ptr %56, align 8, !tbaa !18
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds double, ptr %59, i64 1
  %61 = load double, ptr %60, align 8, !tbaa !19
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds double, ptr %62, i64 0
  store double %61, ptr %63, align 8, !tbaa !19
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds double, ptr %64, i64 2
  %66 = load double, ptr %65, align 8, !tbaa !19
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds double, ptr %67, i64 1
  store double %66, ptr %68, align 8, !tbaa !19
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds double, ptr %69, i64 3
  %71 = load double, ptr %70, align 8, !tbaa !19
  %72 = load ptr, ptr %6, align 8, !tbaa !5
  %73 = getelementptr inbounds double, ptr %72, i64 2
  store double %71, ptr %73, align 8, !tbaa !19
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  %75 = getelementptr inbounds double, ptr %74, i64 1
  %76 = load double, ptr %75, align 8, !tbaa !19
  %77 = load ptr, ptr %8, align 8, !tbaa !5
  %78 = getelementptr inbounds double, ptr %77, i64 0
  store double %76, ptr %78, align 8, !tbaa !19
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = getelementptr inbounds double, ptr %79, i64 2
  %81 = load double, ptr %80, align 8, !tbaa !19
  %82 = load ptr, ptr %8, align 8, !tbaa !5
  %83 = getelementptr inbounds double, ptr %82, i64 1
  store double %81, ptr %83, align 8, !tbaa !19
  %84 = load ptr, ptr %8, align 8, !tbaa !5
  %85 = getelementptr inbounds double, ptr %84, i64 3
  %86 = load double, ptr %85, align 8, !tbaa !19
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %87, i64 2
  store double %86, ptr %88, align 8, !tbaa !19
  call void @_ZN5Ayumi11UpdateMixerEv(ptr noundef nonnull align 8 dereferenceable(22889) %11)
  %89 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 24
  %90 = load double, ptr %89, align 8, !tbaa !20
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds double, ptr %91, i64 3
  store double %90, ptr %92, align 8, !tbaa !19
  %93 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 25
  %94 = load double, ptr %93, align 8, !tbaa !21
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds double, ptr %95, i64 3
  store double %94, ptr %96, align 8, !tbaa !19
  %97 = load ptr, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds double, ptr %97, i64 2
  %99 = load double, ptr %98, align 8, !tbaa !19
  %100 = load ptr, ptr %6, align 8, !tbaa !5
  %101 = getelementptr inbounds double, ptr %100, i64 0
  %102 = load double, ptr %101, align 8, !tbaa !19
  %103 = fsub double %99, %102
  store double %103, ptr %4, align 8, !tbaa !19
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds double, ptr %104, i64 1
  %106 = load double, ptr %105, align 8, !tbaa !19
  %107 = load ptr, ptr %6, align 8, !tbaa !5
  %108 = getelementptr inbounds double, ptr %107, i64 0
  %109 = load double, ptr %108, align 8, !tbaa !19
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = getelementptr inbounds double, ptr %110, i64 2
  %112 = load double, ptr %111, align 8, !tbaa !19
  %113 = fadd double %109, %112
  %114 = fmul double 2.500000e-01, %113
  %115 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %106, double %114)
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds double, ptr %116, i64 0
  store double %115, ptr %117, align 8, !tbaa !19
  %118 = load double, ptr %4, align 8, !tbaa !19
  %119 = fmul double 5.000000e-01, %118
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds double, ptr %120, i64 1
  store double %119, ptr %121, align 8, !tbaa !19
  %122 = load ptr, ptr %6, align 8, !tbaa !5
  %123 = getelementptr inbounds double, ptr %122, i64 3
  %124 = load double, ptr %123, align 8, !tbaa !19
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds double, ptr %125, i64 1
  %127 = load double, ptr %126, align 8, !tbaa !19
  %128 = fsub double %124, %127
  %129 = load double, ptr %4, align 8, !tbaa !19
  %130 = fsub double %128, %129
  %131 = fmul double 2.500000e-01, %130
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds double, ptr %132, i64 2
  store double %131, ptr %133, align 8, !tbaa !19
  %134 = load ptr, ptr %8, align 8, !tbaa !5
  %135 = getelementptr inbounds double, ptr %134, i64 2
  %136 = load double, ptr %135, align 8, !tbaa !19
  %137 = load ptr, ptr %8, align 8, !tbaa !5
  %138 = getelementptr inbounds double, ptr %137, i64 0
  %139 = load double, ptr %138, align 8, !tbaa !19
  %140 = fsub double %136, %139
  store double %140, ptr %4, align 8, !tbaa !19
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = getelementptr inbounds double, ptr %141, i64 1
  %143 = load double, ptr %142, align 8, !tbaa !19
  %144 = load ptr, ptr %8, align 8, !tbaa !5
  %145 = getelementptr inbounds double, ptr %144, i64 0
  %146 = load double, ptr %145, align 8, !tbaa !19
  %147 = load ptr, ptr %8, align 8, !tbaa !5
  %148 = getelementptr inbounds double, ptr %147, i64 2
  %149 = load double, ptr %148, align 8, !tbaa !19
  %150 = fadd double %146, %149
  %151 = fmul double 2.500000e-01, %150
  %152 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %143, double %151)
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds double, ptr %153, i64 0
  store double %152, ptr %154, align 8, !tbaa !19
  %155 = load double, ptr %4, align 8, !tbaa !19
  %156 = fmul double 5.000000e-01, %155
  %157 = load ptr, ptr %7, align 8, !tbaa !5
  %158 = getelementptr inbounds double, ptr %157, i64 1
  store double %156, ptr %158, align 8, !tbaa !19
  %159 = load ptr, ptr %8, align 8, !tbaa !5
  %160 = getelementptr inbounds double, ptr %159, i64 3
  %161 = load double, ptr %160, align 8, !tbaa !19
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds double, ptr %162, i64 1
  %164 = load double, ptr %163, align 8, !tbaa !19
  %165 = fsub double %161, %164
  %166 = load double, ptr %4, align 8, !tbaa !19
  %167 = fsub double %165, %166
  %168 = fmul double 2.500000e-01, %167
  %169 = load ptr, ptr %7, align 8, !tbaa !5
  %170 = getelementptr inbounds double, ptr %169, i64 2
  store double %168, ptr %170, align 8, !tbaa !19
  br label %171

171:                                              ; preds = %55, %46
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds double, ptr %172, i64 2
  %174 = load double, ptr %173, align 8, !tbaa !19
  %175 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %176 = load double, ptr %175, align 8, !tbaa !18
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds double, ptr %177, i64 1
  %179 = load double, ptr %178, align 8, !tbaa !19
  %180 = call double @llvm.fmuladd.f64(double %174, double %176, double %179)
  %181 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %182 = load double, ptr %181, align 8, !tbaa !18
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds double, ptr %183, i64 0
  %185 = load double, ptr %184, align 8, !tbaa !19
  %186 = call double @llvm.fmuladd.f64(double %180, double %182, double %185)
  %187 = load ptr, ptr %9, align 8, !tbaa !5
  %188 = load i32, ptr %3, align 4, !tbaa !16
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds double, ptr %187, i64 %189
  store double %186, ptr %190, align 8, !tbaa !19
  %191 = load ptr, ptr %7, align 8, !tbaa !5
  %192 = getelementptr inbounds double, ptr %191, i64 2
  %193 = load double, ptr %192, align 8, !tbaa !19
  %194 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %195 = load double, ptr %194, align 8, !tbaa !18
  %196 = load ptr, ptr %7, align 8, !tbaa !5
  %197 = getelementptr inbounds double, ptr %196, i64 1
  %198 = load double, ptr %197, align 8, !tbaa !19
  %199 = call double @llvm.fmuladd.f64(double %193, double %195, double %198)
  %200 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 13
  %201 = load double, ptr %200, align 8, !tbaa !18
  %202 = load ptr, ptr %7, align 8, !tbaa !5
  %203 = getelementptr inbounds double, ptr %202, i64 0
  %204 = load double, ptr %203, align 8, !tbaa !19
  %205 = call double @llvm.fmuladd.f64(double %199, double %201, double %204)
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = load i32, ptr %3, align 4, !tbaa !16
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  store double %205, ptr %209, align 8, !tbaa !19
  br label %210

210:                                              ; preds = %171
  %211 = load i32, ptr %3, align 4, !tbaa !16
  %212 = sub nsw i32 %211, 1
  store i32 %212, ptr %3, align 4, !tbaa !16
  br label %43, !llvm.loop !22

213:                                              ; preds = %43
  %214 = load ptr, ptr %9, align 8, !tbaa !5
  %215 = call noundef double @_ZN5Ayumi8DecimateEPd(ptr noundef %214)
  %216 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 24
  store double %215, ptr %216, align 8, !tbaa !20
  %217 = load ptr, ptr %10, align 8, !tbaa !5
  %218 = call noundef double @_ZN5Ayumi8DecimateEPd(ptr noundef %217)
  %219 = getelementptr inbounds %class.Ayumi, ptr %11, i32 0, i32 25
  store double %218, ptr %219, align 8, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #4
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Ayumi11UpdateMixerEv(ptr noundef nonnull align 8 dereferenceable(22889)) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZN5Ayumi8DecimateEPd(ptr noundef) #3 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { 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 = { 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, !11, i64 6456}
!10 = !{!"_ZTS5Ayumi", !7, i64 0, !7, i64 8, !11, i64 128, !11, i64 132, !11, i64 136, !11, i64 140, !11, i64 144, !11, i64 148, !11, i64 152, !11, i64 156, !6, i64 160, !12, i64 168, !12, i64 176, !13, i64 184, !13, i64 248, !7, i64 312, !7, i64 3384, !11, i64 6456, !14, i64 6464, !14, i64 14664, !11, i64 22864, !12, i64 22872, !12, i64 22880, !15, i64 22888}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!"_ZTSN5Ayumi12interpolatorE", !7, i64 0, !7, i64 32}
!14 = !{!"_ZTSN5Ayumi9dc_filterE", !12, i64 0, !7, i64 8}
!15 = !{!"bool", !7, i64 0}
!16 = !{!11, !11, i64 0}
!17 = !{!10, !12, i64 168}
!18 = !{!10, !12, i64 176}
!19 = !{!12, !12, i64 0}
!20 = !{!10, !12, i64 22872}
!21 = !{!10, !12, i64 22880}
!22 = distinct !{!22, !23}
!23 = !{!"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"

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5Ayumi7ProcessEv(ptr noundef nonnull align 8 dereferenceable(22889) %0) local_unnamed_addr #0 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 184
  %3 = getelementptr inbounds i8, ptr %0, i64 216
  %4 = getelementptr inbounds i8, ptr %0, i64 248
  %5 = getelementptr inbounds i8, ptr %0, i64 280
  %6 = getelementptr inbounds i8, ptr %0, i64 312
  %7 = getelementptr inbounds i8, ptr %0, i64 6456
  %8 = load i32, ptr %7, align 8, !tbaa !5
  %9 = shl nsw i32 %8, 3
  %10 = sub nsw i32 192, %9
  %11 = sext i32 %10 to i64
  %12 = getelementptr inbounds [384 x double], ptr %6, i64 0, i64 %11
  %13 = getelementptr inbounds i8, ptr %0, i64 3384
  %14 = getelementptr inbounds [384 x double], ptr %13, i64 0, i64 %11
  %15 = add nsw i32 %8, 1
  %16 = srem i32 %15, 23
  store i32 %16, ptr %7, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 168
  %18 = getelementptr inbounds i8, ptr %0, i64 176
  %19 = getelementptr inbounds i8, ptr %0, i64 224
  %20 = getelementptr inbounds i8, ptr %0, i64 232
  %21 = getelementptr inbounds i8, ptr %0, i64 240
  %22 = getelementptr inbounds i8, ptr %0, i64 288
  %23 = getelementptr inbounds i8, ptr %0, i64 296
  %24 = getelementptr inbounds i8, ptr %0, i64 304
  %25 = getelementptr inbounds i8, ptr %0, i64 22872
  %26 = getelementptr inbounds i8, ptr %0, i64 22880
  %27 = getelementptr inbounds i8, ptr %0, i64 192
  %28 = getelementptr inbounds i8, ptr %0, i64 200
  %29 = getelementptr inbounds i8, ptr %0, i64 256
  %30 = getelementptr inbounds i8, ptr %0, i64 264
  br label %31

31:                                               ; preds = %1, %72
  %indvars.iv = phi i64 [ 7, %1 ], [ %indvars.iv.next, %72 ]
  %32 = load double, ptr %17, align 8, !tbaa !15
  %33 = load double, ptr %18, align 8, !tbaa !16
  %34 = fadd double %32, %33
  store double %34, ptr %18, align 8, !tbaa !16
  %35 = fcmp ult double %34, 1.000000e+00
  br i1 %35, label %._crit_edge, label %36

._crit_edge:                                      ; preds = %31
  %.pre = load double, ptr %28, align 8, !tbaa !17
  %.pre56 = load double, ptr %27, align 8, !tbaa !17
  %.pre57 = load double, ptr %2, align 8, !tbaa !17
  br label %72

36:                                               ; preds = %31
  %37 = fadd double %34, -1.000000e+00
  store double %37, ptr %18, align 8, !tbaa !16
  %38 = load <2 x double>, ptr %19, align 8, !tbaa !17
  store <2 x double> %38, ptr %3, align 8, !tbaa !17
  %39 = load double, ptr %21, align 8, !tbaa !17
  store double %39, ptr %20, align 8, !tbaa !17
  %40 = load <2 x double>, ptr %22, align 8, !tbaa !17
  store <2 x double> %40, ptr %5, align 8, !tbaa !17
  %41 = load double, ptr %24, align 8, !tbaa !17
  store double %41, ptr %23, align 8, !tbaa !17
  tail call void @_ZN5Ayumi11UpdateMixerEv(ptr noundef nonnull align 8 dereferenceable(22889) %0)
  %42 = load double, ptr %25, align 8, !tbaa !18
  store double %42, ptr %21, align 8, !tbaa !17
  %43 = load double, ptr %26, align 8, !tbaa !19
  store double %43, ptr %24, align 8, !tbaa !17
  %44 = load double, ptr %20, align 8, !tbaa !17
  %45 = load <2 x double>, ptr %3, align 8, !tbaa !17
  %46 = extractelement <2 x double> %45, i64 0
  %47 = fadd double %44, %46
  %48 = fmul double %47, 2.500000e-01
  %49 = extractelement <2 x double> %45, i64 1
  %50 = tail call double @llvm.fmuladd.f64(double %49, double 5.000000e-01, double %48)
  store double %50, ptr %2, align 8, !tbaa !17
  %51 = insertelement <2 x double> poison, double %44, i64 0
  %52 = insertelement <2 x double> %51, double %42, i64 1
  %53 = fsub <2 x double> %52, %45
  %shift = shufflevector <2 x double> %53, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %54 = fsub <2 x double> %shift, %53
  %55 = shufflevector <2 x double> %53, <2 x double> %54, <2 x i32> <i32 0, i32 2>
  %56 = fmul <2 x double> %55, <double 5.000000e-01, double 2.500000e-01>
  store <2 x double> %56, ptr %27, align 8, !tbaa !17
  %57 = load double, ptr %23, align 8, !tbaa !17
  %58 = load <2 x double>, ptr %5, align 8, !tbaa !17
  %59 = extractelement <2 x double> %58, i64 0
  %60 = fadd double %57, %59
  %61 = fmul double %60, 2.500000e-01
  %62 = extractelement <2 x double> %58, i64 1
  %63 = tail call double @llvm.fmuladd.f64(double %62, double 5.000000e-01, double %61)
  store double %63, ptr %4, align 8, !tbaa !17
  %64 = insertelement <2 x double> poison, double %57, i64 0
  %65 = insertelement <2 x double> %64, double %43, i64 1
  %66 = fsub <2 x double> %65, %58
  %shift58 = shufflevector <2 x double> %66, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %67 = fsub <2 x double> %shift58, %66
  %68 = shufflevector <2 x double> %66, <2 x double> %67, <2 x i32> <i32 0, i32 2>
  %69 = fmul <2 x double> %68, <double 5.000000e-01, double 2.500000e-01>
  store <2 x double> %69, ptr %29, align 8, !tbaa !17
  %.pre55 = load double, ptr %18, align 8, !tbaa !16
  %70 = extractelement <2 x double> %56, i64 0
  %71 = extractelement <2 x double> %56, i64 1
  br label %72

72:                                               ; preds = %._crit_edge, %36
  %73 = phi double [ %.pre57, %._crit_edge ], [ %50, %36 ]
  %74 = phi double [ %.pre56, %._crit_edge ], [ %70, %36 ]
  %75 = phi double [ %34, %._crit_edge ], [ %.pre55, %36 ]
  %76 = phi double [ %.pre, %._crit_edge ], [ %71, %36 ]
  %77 = tail call double @llvm.fmuladd.f64(double %76, double %75, double %74)
  %78 = tail call double @llvm.fmuladd.f64(double %77, double %75, double %73)
  %79 = getelementptr inbounds double, ptr %12, i64 %indvars.iv
  store double %78, ptr %79, align 8, !tbaa !17
  %80 = load double, ptr %30, align 8, !tbaa !17
  %81 = load double, ptr %18, align 8, !tbaa !16
  %82 = load double, ptr %29, align 8, !tbaa !17
  %83 = tail call double @llvm.fmuladd.f64(double %80, double %81, double %82)
  %84 = load double, ptr %4, align 8, !tbaa !17
  %85 = tail call double @llvm.fmuladd.f64(double %83, double %81, double %84)
  %86 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %85, ptr %86, align 8, !tbaa !17
  %indvars.iv.next = add nsw i64 %indvars.iv, -1
  %.not = icmp eq i64 %indvars.iv, 0
  br i1 %.not, label %87, label %31, !llvm.loop !20

87:                                               ; preds = %72
  %88 = tail call noundef double @_ZN5Ayumi8DecimateEPd(ptr noundef nonnull %12)
  store double %88, ptr %25, align 8, !tbaa !18
  %89 = tail call noundef double @_ZN5Ayumi8DecimateEPd(ptr noundef nonnull %14)
  store double %89, ptr %26, align 8, !tbaa !19
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Ayumi11UpdateMixerEv(ptr noundef nonnull align 8 dereferenceable(22889)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress 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 double @_ZN5Ayumi8DecimateEPd(ptr noundef) local_unnamed_addr #2 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 = { mustprogress 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" }

!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, !9, i64 6456}
!6 = !{!"_ZTS5Ayumi", !7, i64 0, !7, i64 8, !9, i64 128, !9, i64 132, !9, i64 136, !9, i64 140, !9, i64 144, !9, i64 148, !9, i64 152, !9, i64 156, !10, i64 160, !11, i64 168, !11, i64 176, !12, i64 184, !12, i64 248, !7, i64 312, !7, i64 3384, !9, i64 6456, !13, i64 6464, !13, i64 14664, !9, i64 22864, !11, i64 22872, !11, i64 22880, !14, i64 22888}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!"double", !7, i64 0}
!12 = !{!"_ZTSN5Ayumi12interpolatorE", !7, i64 0, !7, i64 32}
!13 = !{!"_ZTSN5Ayumi9dc_filterE", !11, i64 0, !7, i64 8}
!14 = !{!"bool", !7, i64 0}
!15 = !{!6, !11, i64 168}
!16 = !{!6, !11, i64 176}
!17 = !{!11, !11, i64 0}
!18 = !{!6, !11, i64 22872}
!19 = !{!6, !11, i64 22880}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass