; LLVM IR from sp-nitech/SPTK :: third_party/SWIPE/swipe.ll (ZN4sptk5swipe8loudnessENS0_6vectorES1_dii)

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

%"struct.sptk::swipe::matrix" = type { i32, i32, ptr }
%"struct.sptk::swipe::vector" = type { i32, ptr }
%"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::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%"class.sptk::RealValuedFastFourierTransform" = type { ptr, i32, i32, i32, %"class.sptk::FastFourierTransform", i8, %"class.std::vector" }
%"class.sptk::FastFourierTransform" = type { ptr, i32, i32, i32, i8, %"class.std::vector" }
%"class.sptk::RealValuedFastFourierTransform::Buffer" = type { ptr, %"class.std::vector", %"class.std::vector" }

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64, ptr, i32, ptr, i32, ptr, ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #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

declare { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef) #3

; Function Attrs: nounwind
declare double @sqrt(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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

declare void @_ZN4sptk5swipe5freevENS0_6vectorE(i32, ptr) #3

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

; Function Attrs: mustprogress uwtable
define dso_local { i64, ptr } @_ZN4sptk5swipe8loudnessENS0_6vectorES1_dii(i32 %0, ptr %1, i32 %2, ptr %3, double noundef %4, i32 noundef %5, i32 noundef %6) #0 personality ptr @__gxx_personality_v0 {
  %8 = alloca %"struct.sptk::swipe::matrix", align 8
  %9 = alloca %"struct.sptk::swipe::vector", align 8
  %10 = alloca %"struct.sptk::swipe::vector", align 8
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca double, align 8
  %19 = alloca %"class.std::vector", align 8
  %20 = alloca %"class.std::allocator", align 1
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca %"class.std::vector.0", align 8
  %24 = alloca %"class.std::vector", align 8
  %25 = alloca %"class.std::allocator", align 1
  %26 = alloca %"class.std::allocator.2", align 1
  %27 = alloca %"class.sptk::RealValuedFastFourierTransform", align 8
  %28 = alloca %"class.sptk::RealValuedFastFourierTransform::Buffer", align 8
  %29 = alloca %"struct.sptk::swipe::vector", align 8
  %30 = alloca %"struct.sptk::swipe::vector", align 8
  %31 = alloca %"struct.sptk::swipe::vector", align 8
  %32 = alloca %"struct.sptk::swipe::matrix", align 8
  %33 = alloca %"struct.sptk::swipe::vector", align 8
  %34 = alloca %"struct.sptk::swipe::vector", align 8
  %35 = alloca %"struct.sptk::swipe::matrix", align 8
  %36 = alloca %"struct.sptk::swipe::vector", align 8
  %37 = alloca %"struct.sptk::swipe::vector", align 8
  %38 = alloca %"struct.sptk::swipe::matrix", align 8
  %39 = alloca %"struct.sptk::swipe::vector", align 8
  %40 = alloca %"struct.sptk::swipe::vector", align 8
  %41 = alloca %"struct.sptk::swipe::vector", align 8
  %42 = alloca %"struct.sptk::swipe::vector", align 8
  %43 = getelementptr inbounds { i32, ptr }, ptr %9, i32 0, i32 0
  store i32 %0, ptr %43, align 8
  %44 = getelementptr inbounds { i32, ptr }, ptr %9, i32 0, i32 1
  store ptr %1, ptr %44, align 8
  %45 = getelementptr inbounds { i32, ptr }, ptr %10, i32 0, i32 0
  store i32 %2, ptr %45, align 8
  %46 = getelementptr inbounds { i32, ptr }, ptr %10, i32 0, i32 1
  store ptr %3, ptr %46, align 8
  store double %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !9
  store i32 %6, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  store i32 0, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  %47 = load double, ptr %11, align 8, !tbaa !5
  %48 = load i32, ptr %13, align 4, !tbaa !9
  %49 = sitofp i32 %48 to double
  %50 = fdiv double %47, %49
  store double %50, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #7
  %51 = load i32, ptr %12, align 4, !tbaa !9
  %52 = sext i32 %51 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #7
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %52, ptr noundef nonnull align 1 dereferenceable(1) %20)
          to label %53 unwind label %93

53:                                               ; preds = %7
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #7
  %54 = load i32, ptr %12, align 4, !tbaa !9
  %55 = sext i32 %54 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %55, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %56 unwind label %97

56:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #7
  call void @_ZNSaISt6vectorIdSaIdEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_(ptr noundef nonnull align 8 dereferenceable(24) %23, i64 noundef 2, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %57 unwind label %101

57:                                               ; preds = %56
  call void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 104, ptr %27) #7
  %58 = load i32, ptr %13, align 4, !tbaa !9
  %59 = mul nsw i32 %58, 2
  %60 = sub nsw i32 %59, 1
  %61 = load i32, ptr %13, align 4, !tbaa !9
  %62 = mul nsw i32 %61, 2
  invoke void @_ZN4sptk30RealValuedFastFourierTransformC1Eii(ptr noundef nonnull align 8 dereferenceable(104) %27, i32 noundef %60, i32 noundef %62)
          to label %63 unwind label %106

63:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 56, ptr %28) #7
  invoke void @_ZN4sptk30RealValuedFastFourierTransform6BufferC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28)
          to label %64 unwind label %110

64:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #7
  %65 = load i32, ptr %12, align 4, !tbaa !9
  %66 = invoke { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef %65)
          to label %67 unwind label %114

67:                                               ; preds = %64
  %68 = getelementptr inbounds { i32, ptr }, ptr %29, i32 0, i32 0
  %69 = extractvalue { i32, ptr } %66, 0
  store i32 %69, ptr %68, align 8
  %70 = getelementptr inbounds { i32, ptr }, ptr %29, i32 0, i32 1
  %71 = extractvalue { i32, ptr } %66, 1
  store ptr %71, ptr %70, align 8
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %72

72:                                               ; preds = %90, %67
  %73 = load i32, ptr %14, align 4, !tbaa !9
  %74 = load i32, ptr %12, align 4, !tbaa !9
  %75 = icmp slt i32 %73, %74
  br i1 %75, label %76, label %118

76:                                               ; preds = %72
  %77 = load i32, ptr %14, align 4, !tbaa !9
  %78 = sitofp i32 %77 to double
  %79 = load i32, ptr %12, align 4, !tbaa !9
  %80 = sitofp i32 %79 to double
  %81 = fdiv double %78, %80
  %82 = fmul double 0x401921FB54442D18, %81
  %83 = call double @cos(double noundef %82) #7
  %84 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %83, double 5.000000e-01)
  %85 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %29, i32 0, i32 1
  %86 = load ptr, ptr %85, align 8, !tbaa !11
  %87 = load i32, ptr %14, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds double, ptr %86, i64 %88
  store double %84, ptr %89, align 8, !tbaa !5
  br label %90

90:                                               ; preds = %76
  %91 = load i32, ptr %14, align 4, !tbaa !9
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %14, align 4, !tbaa !9
  br label %72, !llvm.loop !14

93:                                               ; preds = %7
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %21, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %22, align 4
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %20) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #7
  br label %442

97:                                               ; preds = %53
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %21, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %22, align 4
  br label %105

101:                                              ; preds = %56
  %102 = landingpad { ptr, i32 }
          cleanup
  %103 = extractvalue { ptr, i32 } %102, 0
  store ptr %103, ptr %21, align 8
  %104 = extractvalue { ptr, i32 } %102, 1
  store i32 %104, ptr %22, align 4
  call void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  br label %105

105:                                              ; preds = %101, %97
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  br label %441

106:                                              ; preds = %57
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %21, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %22, align 4
  br label %440

110:                                              ; preds = %63
  %111 = landingpad { ptr, i32 }
          cleanup
  %112 = extractvalue { ptr, i32 } %111, 0
  store ptr %112, ptr %21, align 8
  %113 = extractvalue { ptr, i32 } %111, 1
  store i32 %113, ptr %22, align 4
  br label %439

114:                                              ; preds = %64
  %115 = landingpad { ptr, i32 }
          cleanup
  %116 = extractvalue { ptr, i32 } %115, 0
  store ptr %116, ptr %21, align 8
  %117 = extractvalue { ptr, i32 } %115, 1
  store i32 %117, ptr %22, align 4
  br label %438

118:                                              ; preds = %72
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #7
  %119 = load i32, ptr %13, align 4, !tbaa !9
  %120 = invoke { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef %119)
          to label %121 unwind label %143

121:                                              ; preds = %118
  %122 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 0
  %123 = extractvalue { i32, ptr } %120, 0
  store i32 %123, ptr %122, align 8
  %124 = getelementptr inbounds { i32, ptr }, ptr %30, i32 0, i32 1
  %125 = extractvalue { i32, ptr } %120, 1
  store ptr %125, ptr %124, align 8
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %126

126:                                              ; preds = %140, %121
  %127 = load i32, ptr %14, align 4, !tbaa !9
  %128 = load i32, ptr %13, align 4, !tbaa !9
  %129 = icmp slt i32 %127, %128
  br i1 %129, label %130, label %147

130:                                              ; preds = %126
  %131 = load i32, ptr %14, align 4, !tbaa !9
  %132 = sitofp i32 %131 to double
  %133 = load double, ptr %18, align 8, !tbaa !5
  %134 = fmul double %132, %133
  %135 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %30, i32 0, i32 1
  %136 = load ptr, ptr %135, align 8, !tbaa !11
  %137 = load i32, ptr %14, align 4, !tbaa !9
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds double, ptr %136, i64 %138
  store double %134, ptr %139, align 8, !tbaa !5
  br label %140

140:                                              ; preds = %130
  %141 = load i32, ptr %14, align 4, !tbaa !9
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %14, align 4, !tbaa !9
  br label %126, !llvm.loop !16

143:                                              ; preds = %361, %356, %333, %262, %213, %157, %147, %118
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %21, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #7
  br label %438

147:                                              ; preds = %126
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %31, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !17
  %148 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %10, i32 0, i32 1
  %149 = load ptr, ptr %148, align 8, !tbaa !11
  %150 = getelementptr inbounds double, ptr %149, i64 0
  %151 = load double, ptr %150, align 8, !tbaa !5
  %152 = getelementptr inbounds { i32, ptr }, ptr %31, i32 0, i32 0
  %153 = load i32, ptr %152, align 8
  %154 = getelementptr inbounds { i32, ptr }, ptr %31, i32 0, i32 1
  %155 = load ptr, ptr %154, align 8
  %156 = invoke noundef i32 @_ZN4sptk5swipe7bisectvENS0_6vectorEd(i32 %153, ptr %155, double noundef %151)
          to label %157 unwind label %143

157:                                              ; preds = %147
  store i32 %156, ptr %16, align 4, !tbaa !9
  %158 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %9, i32 0, i32 0
  %159 = load i32, ptr %158, align 8, !tbaa !19
  %160 = sitofp i32 %159 to double
  %161 = load i32, ptr %13, align 4, !tbaa !9
  %162 = sitofp i32 %161 to double
  %163 = fdiv double %160, %162
  %164 = call double @llvm.ceil.f64(double %163)
  %165 = fadd double %164, 1.000000e+00
  %166 = fptosi double %165 to i32
  %167 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %10, i32 0, i32 0
  %168 = load i32, ptr %167, align 8, !tbaa !19
  %169 = invoke { i64, ptr } @_ZN4sptk5swipe5makemEii(i32 noundef %166, i32 noundef %168)
          to label %170 unwind label %143

170:                                              ; preds = %157
  %171 = getelementptr inbounds { i64, ptr }, ptr %8, i32 0, i32 0
  %172 = extractvalue { i64, ptr } %169, 0
  store i64 %172, ptr %171, align 8
  %173 = getelementptr inbounds { i64, ptr }, ptr %8, i32 0, i32 1
  %174 = extractvalue { i64, ptr } %169, 1
  store ptr %174, ptr %173, align 8
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %175

175:                                              ; preds = %183, %170
  %176 = load i32, ptr %15, align 4, !tbaa !9
  %177 = load i32, ptr %13, align 4, !tbaa !9
  %178 = icmp slt i32 %176, %177
  br i1 %178, label %179, label %186

179:                                              ; preds = %175
  %180 = load i32, ptr %15, align 4, !tbaa !9
  %181 = sext i32 %180 to i64
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %181) #7
  store double 0.000000e+00, ptr %182, align 8, !tbaa !5
  br label %183

183:                                              ; preds = %179
  %184 = load i32, ptr %15, align 4, !tbaa !9
  %185 = add nsw i32 %184, 1
  store i32 %185, ptr %15, align 4, !tbaa !9
  br label %175, !llvm.loop !20

186:                                              ; preds = %175
  br label %187

187:                                              ; preds = %210, %186
  %188 = load i32, ptr %15, align 4, !tbaa !9
  %189 = load i32, ptr %12, align 4, !tbaa !9
  %190 = icmp slt i32 %188, %189
  br i1 %190, label %191, label %213

191:                                              ; preds = %187
  %192 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %9, i32 0, i32 1
  %193 = load ptr, ptr %192, align 8, !tbaa !11
  %194 = load i32, ptr %15, align 4, !tbaa !9
  %195 = load i32, ptr %13, align 4, !tbaa !9
  %196 = sub nsw i32 %194, %195
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds double, ptr %193, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %29, i32 0, i32 1
  %201 = load ptr, ptr %200, align 8, !tbaa !11
  %202 = load i32, ptr %15, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds double, ptr %201, i64 %203
  %205 = load double, ptr %204, align 8, !tbaa !5
  %206 = fmul double %199, %205
  %207 = load i32, ptr %15, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %208) #7
  store double %206, ptr %209, align 8, !tbaa !5
  br label %210

210:                                              ; preds = %191
  %211 = load i32, ptr %15, align 4, !tbaa !9
  %212 = add nsw i32 %211, 1
  store i32 %212, ptr %15, align 4, !tbaa !9
  br label %187, !llvm.loop !21

213:                                              ; preds = %187
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %8, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !17
  %214 = load i32, ptr %13, align 4, !tbaa !9
  %215 = load i32, ptr %16, align 4, !tbaa !9
  %216 = getelementptr inbounds { i64, ptr }, ptr %32, i32 0, i32 0
  %217 = load i64, ptr %216, align 8
  %218 = getelementptr inbounds { i64, ptr }, ptr %32, i32 0, i32 1
  %219 = load ptr, ptr %218, align 8
  %220 = getelementptr inbounds { i32, ptr }, ptr %33, i32 0, i32 0
  %221 = load i32, ptr %220, align 8
  %222 = getelementptr inbounds { i32, ptr }, ptr %33, i32 0, i32 1
  %223 = load ptr, ptr %222, align 8
  %224 = getelementptr inbounds { i32, ptr }, ptr %34, i32 0, i32 0
  %225 = load i32, ptr %224, align 8
  %226 = getelementptr inbounds { i32, ptr }, ptr %34, i32 0, i32 1
  %227 = load ptr, ptr %226, align 8
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %217, ptr %219, i32 %221, ptr %223, i32 %225, ptr %227, ptr noundef nonnull align 8 dereferenceable(104) %27, ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef %23, ptr noundef %28, i32 noundef %214, i32 noundef %215, i32 noundef 0)
          to label %228 unwind label %143

228:                                              ; preds = %213
  store i32 1, ptr %14, align 4, !tbaa !9
  br label %229

229:                                              ; preds = %282, %228
  %230 = load i32, ptr %14, align 4, !tbaa !9
  %231 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 0
  %232 = load i32, ptr %231, align 8, !tbaa !23
  %233 = sub nsw i32 %232, 2
  %234 = icmp slt i32 %230, %233
  br i1 %234, label %235, label %285

235:                                              ; preds = %229
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %236

236:                                              ; preds = %259, %235
  %237 = load i32, ptr %15, align 4, !tbaa !9
  %238 = load i32, ptr %12, align 4, !tbaa !9
  %239 = icmp slt i32 %237, %238
  br i1 %239, label %240, label %262

240:                                              ; preds = %236
  %241 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %9, i32 0, i32 1
  %242 = load ptr, ptr %241, align 8, !tbaa !11
  %243 = load i32, ptr %15, align 4, !tbaa !9
  %244 = load i32, ptr %17, align 4, !tbaa !9
  %245 = add nsw i32 %243, %244
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds double, ptr %242, i64 %246
  %248 = load double, ptr %247, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %29, i32 0, i32 1
  %250 = load ptr, ptr %249, align 8, !tbaa !11
  %251 = load i32, ptr %15, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %250, i64 %252
  %254 = load double, ptr %253, align 8, !tbaa !5
  %255 = fmul double %248, %254
  %256 = load i32, ptr %15, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %257) #7
  store double %255, ptr %258, align 8, !tbaa !5
  br label %259

259:                                              ; preds = %240
  %260 = load i32, ptr %15, align 4, !tbaa !9
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %15, align 4, !tbaa !9
  br label %236, !llvm.loop !25

262:                                              ; preds = %236
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 %8, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !17
  %263 = load i32, ptr %13, align 4, !tbaa !9
  %264 = load i32, ptr %16, align 4, !tbaa !9
  %265 = load i32, ptr %14, align 4, !tbaa !9
  %266 = getelementptr inbounds { i64, ptr }, ptr %35, i32 0, i32 0
  %267 = load i64, ptr %266, align 8
  %268 = getelementptr inbounds { i64, ptr }, ptr %35, i32 0, i32 1
  %269 = load ptr, ptr %268, align 8
  %270 = getelementptr inbounds { i32, ptr }, ptr %36, i32 0, i32 0
  %271 = load i32, ptr %270, align 8
  %272 = getelementptr inbounds { i32, ptr }, ptr %36, i32 0, i32 1
  %273 = load ptr, ptr %272, align 8
  %274 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 0
  %275 = load i32, ptr %274, align 8
  %276 = getelementptr inbounds { i32, ptr }, ptr %37, i32 0, i32 1
  %277 = load ptr, ptr %276, align 8
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %267, ptr %269, i32 %271, ptr %273, i32 %275, ptr %277, ptr noundef nonnull align 8 dereferenceable(104) %27, ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef %23, ptr noundef %28, i32 noundef %263, i32 noundef %264, i32 noundef %265)
          to label %278 unwind label %143

278:                                              ; preds = %262
  %279 = load i32, ptr %13, align 4, !tbaa !9
  %280 = load i32, ptr %17, align 4, !tbaa !9
  %281 = add nsw i32 %280, %279
  store i32 %281, ptr %17, align 4, !tbaa !9
  br label %282

282:                                              ; preds = %278
  %283 = load i32, ptr %14, align 4, !tbaa !9
  %284 = add nsw i32 %283, 1
  store i32 %284, ptr %14, align 4, !tbaa !9
  br label %229, !llvm.loop !26

285:                                              ; preds = %229
  br label %286

286:                                              ; preds = %353, %285
  %287 = load i32, ptr %14, align 4, !tbaa !9
  %288 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 0
  %289 = load i32, ptr %288, align 8, !tbaa !23
  %290 = icmp slt i32 %287, %289
  br i1 %290, label %291, label %356

291:                                              ; preds = %286
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %292

292:                                              ; preds = %318, %291
  %293 = load i32, ptr %15, align 4, !tbaa !9
  %294 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %9, i32 0, i32 0
  %295 = load i32, ptr %294, align 8, !tbaa !19
  %296 = load i32, ptr %17, align 4, !tbaa !9
  %297 = sub nsw i32 %295, %296
  %298 = icmp slt i32 %293, %297
  br i1 %298, label %299, label %321

299:                                              ; preds = %292
  %300 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %9, i32 0, i32 1
  %301 = load ptr, ptr %300, align 8, !tbaa !11
  %302 = load i32, ptr %15, align 4, !tbaa !9
  %303 = load i32, ptr %17, align 4, !tbaa !9
  %304 = add nsw i32 %302, %303
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds double, ptr %301, i64 %305
  %307 = load double, ptr %306, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.sptk::swipe::vector", ptr %29, i32 0, i32 1
  %309 = load ptr, ptr %308, align 8, !tbaa !11
  %310 = load i32, ptr %15, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds double, ptr %309, i64 %311
  %313 = load double, ptr %312, align 8, !tbaa !5
  %314 = fmul double %307, %313
  %315 = load i32, ptr %15, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %316) #7
  store double %314, ptr %317, align 8, !tbaa !5
  br label %318

318:                                              ; preds = %299
  %319 = load i32, ptr %15, align 4, !tbaa !9
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %15, align 4, !tbaa !9
  br label %292, !llvm.loop !27

321:                                              ; preds = %292
  br label %322

322:                                              ; preds = %330, %321
  %323 = load i32, ptr %15, align 4, !tbaa !9
  %324 = load i32, ptr %12, align 4, !tbaa !9
  %325 = icmp slt i32 %323, %324
  br i1 %325, label %326, label %333

326:                                              ; preds = %322
  %327 = load i32, ptr %15, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %19, i64 noundef %328) #7
  store double 0.000000e+00, ptr %329, align 8, !tbaa !5
  br label %330

330:                                              ; preds = %326
  %331 = load i32, ptr %15, align 4, !tbaa !9
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %15, align 4, !tbaa !9
  br label %322, !llvm.loop !28

333:                                              ; preds = %322
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %38, ptr align 8 %8, i64 16, i1 false), !tbaa.struct !22
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %10, i64 16, i1 false), !tbaa.struct !17
  %334 = load i32, ptr %13, align 4, !tbaa !9
  %335 = load i32, ptr %16, align 4, !tbaa !9
  %336 = load i32, ptr %14, align 4, !tbaa !9
  %337 = getelementptr inbounds { i64, ptr }, ptr %38, i32 0, i32 0
  %338 = load i64, ptr %337, align 8
  %339 = getelementptr inbounds { i64, ptr }, ptr %38, i32 0, i32 1
  %340 = load ptr, ptr %339, align 8
  %341 = getelementptr inbounds { i32, ptr }, ptr %39, i32 0, i32 0
  %342 = load i32, ptr %341, align 8
  %343 = getelementptr inbounds { i32, ptr }, ptr %39, i32 0, i32 1
  %344 = load ptr, ptr %343, align 8
  %345 = getelementptr inbounds { i32, ptr }, ptr %40, i32 0, i32 0
  %346 = load i32, ptr %345, align 8
  %347 = getelementptr inbounds { i32, ptr }, ptr %40, i32 0, i32 1
  %348 = load ptr, ptr %347, align 8
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %338, ptr %340, i32 %342, ptr %344, i32 %346, ptr %348, ptr noundef nonnull align 8 dereferenceable(104) %27, ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef %23, ptr noundef %28, i32 noundef %334, i32 noundef %335, i32 noundef %336)
          to label %349 unwind label %143

349:                                              ; preds = %333
  %350 = load i32, ptr %13, align 4, !tbaa !9
  %351 = load i32, ptr %17, align 4, !tbaa !9
  %352 = add nsw i32 %351, %350
  store i32 %352, ptr %17, align 4, !tbaa !9
  br label %353

353:                                              ; preds = %349
  %354 = load i32, ptr %14, align 4, !tbaa !9
  %355 = add nsw i32 %354, 1
  store i32 %355, ptr %14, align 4, !tbaa !9
  br label %286, !llvm.loop !29

356:                                              ; preds = %286
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %41, ptr align 8 %29, i64 16, i1 false), !tbaa.struct !17
  %357 = getelementptr inbounds { i32, ptr }, ptr %41, i32 0, i32 0
  %358 = load i32, ptr %357, align 8
  %359 = getelementptr inbounds { i32, ptr }, ptr %41, i32 0, i32 1
  %360 = load ptr, ptr %359, align 8
  invoke void @_ZN4sptk5swipe5freevENS0_6vectorE(i32 %358, ptr %360)
          to label %361 unwind label %143

361:                                              ; preds = %356
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %42, ptr align 8 %30, i64 16, i1 false), !tbaa.struct !17
  %362 = getelementptr inbounds { i32, ptr }, ptr %42, i32 0, i32 0
  %363 = load i32, ptr %362, align 8
  %364 = getelementptr inbounds { i32, ptr }, ptr %42, i32 0, i32 1
  %365 = load ptr, ptr %364, align 8
  invoke void @_ZN4sptk5swipe5freevENS0_6vectorE(i32 %363, ptr %365)
          to label %366 unwind label %143

366:                                              ; preds = %361
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %367

367:                                              ; preds = %433, %366
  %368 = load i32, ptr %14, align 4, !tbaa !9
  %369 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 0
  %370 = load i32, ptr %369, align 8, !tbaa !23
  %371 = icmp slt i32 %368, %370
  br i1 %371, label %372, label %436

372:                                              ; preds = %367
  store double 0.000000e+00, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %373

373:                                              ; preds = %401, %372
  %374 = load i32, ptr %15, align 4, !tbaa !9
  %375 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 1
  %376 = load i32, ptr %375, align 4, !tbaa !30
  %377 = icmp slt i32 %374, %376
  br i1 %377, label %378, label %404

378:                                              ; preds = %373
  %379 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 2
  %380 = load ptr, ptr %379, align 8, !tbaa !31
  %381 = load i32, ptr %14, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds ptr, ptr %380, i64 %382
  %384 = load ptr, ptr %383, align 8, !tbaa !18
  %385 = load i32, ptr %15, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %384, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 2
  %390 = load ptr, ptr %389, align 8, !tbaa !31
  %391 = load i32, ptr %14, align 4, !tbaa !9
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds ptr, ptr %390, i64 %392
  %394 = load ptr, ptr %393, align 8, !tbaa !18
  %395 = load i32, ptr %15, align 4, !tbaa !9
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds double, ptr %394, i64 %396
  %398 = load double, ptr %397, align 8, !tbaa !5
  %399 = load double, ptr %18, align 8, !tbaa !5
  %400 = call double @llvm.fmuladd.f64(double %388, double %398, double %399)
  store double %400, ptr %18, align 8, !tbaa !5
  br label %401

401:                                              ; preds = %378
  %402 = load i32, ptr %15, align 4, !tbaa !9
  %403 = add nsw i32 %402, 1
  store i32 %403, ptr %15, align 4, !tbaa !9
  br label %373, !llvm.loop !32

404:                                              ; preds = %373
  %405 = load double, ptr %18, align 8, !tbaa !5
  %406 = fcmp une double %405, 0.000000e+00
  br i1 %406, label %407, label %432

407:                                              ; preds = %404
  %408 = load double, ptr %18, align 8, !tbaa !5
  %409 = call double @sqrt(double noundef %408) #7
  store double %409, ptr %18, align 8, !tbaa !5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %428, %407
  %411 = load i32, ptr %15, align 4, !tbaa !9
  %412 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 1
  %413 = load i32, ptr %412, align 4, !tbaa !30
  %414 = icmp slt i32 %411, %413
  br i1 %414, label %415, label %431

415:                                              ; preds = %410
  %416 = load double, ptr %18, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.sptk::swipe::matrix", ptr %8, i32 0, i32 2
  %418 = load ptr, ptr %417, align 8, !tbaa !31
  %419 = load i32, ptr %14, align 4, !tbaa !9
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds ptr, ptr %418, i64 %420
  %422 = load ptr, ptr %421, align 8, !tbaa !18
  %423 = load i32, ptr %15, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds double, ptr %422, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !5
  %427 = fdiv double %426, %416
  store double %427, ptr %425, align 8, !tbaa !5
  br label %428

428:                                              ; preds = %415
  %429 = load i32, ptr %15, align 4, !tbaa !9
  %430 = add nsw i32 %429, 1
  store i32 %430, ptr %15, align 4, !tbaa !9
  br label %410, !llvm.loop !33

431:                                              ; preds = %410
  br label %432

432:                                              ; preds = %431, %404
  br label %433

433:                                              ; preds = %432
  %434 = load i32, ptr %14, align 4, !tbaa !9
  %435 = add nsw i32 %434, 1
  store i32 %435, ptr %14, align 4, !tbaa !9
  br label %367, !llvm.loop !34

436:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  call void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #7
  call void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %27) #7
  call void @llvm.lifetime.end.p0(i64 104, ptr %27) #7
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  %437 = load { i64, ptr }, ptr %8, align 8
  ret { i64, ptr } %437

438:                                              ; preds = %143, %114
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #7
  call void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %28) #7
  br label %439

439:                                              ; preds = %438, %110
  call void @llvm.lifetime.end.p0(i64 56, ptr %28) #7
  call void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %27) #7
  br label %440

440:                                              ; preds = %439, %106
  call void @llvm.lifetime.end.p0(i64 104, ptr %27) #7
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  br label %441

441:                                              ; preds = %440, %105
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #7
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #7
  br label %442

442:                                              ; preds = %441, %93
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  br label %443

443:                                              ; preds = %442
  %444 = load ptr, ptr %21, align 8
  %445 = load i32, ptr %22, align 4
  %446 = insertvalue { ptr, i32 } poison, ptr %444, 0
  %447 = insertvalue { ptr, i32 } %446, i32 %445, 1
  resume { ptr, i32 } %447
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaISt6vectorIdSaIdEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

declare void @_ZN4sptk30RealValuedFastFourierTransformC1Eii(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransform6BufferC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

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

declare noundef i32 @_ZN4sptk5swipe7bisectvENS0_6vectorEd(i32, ptr, double noundef) #3

declare { i64, ptr } @_ZN4sptk5swipe5makemEii(i32 noundef, i32 noundef) #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 8}
!12 = !{!"_ZTSN4sptk5swipe6vectorE", !10, i64 0, !13, i64 8}
!13 = !{!"any pointer", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{i64 0, i64 4, !9, i64 8, i64 8, !18}
!18 = !{!13, !13, i64 0}
!19 = !{!12, !10, i64 0}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = !{i64 0, i64 4, !9, i64 4, i64 4, !9, i64 8, i64 8, !18}
!23 = !{!24, !10, i64 0}
!24 = !{!"_ZTSN4sptk5swipe6matrixE", !10, i64 0, !10, i64 4, !13, i64 8}
!25 = distinct !{!25, !15}
!26 = distinct !{!26, !15}
!27 = distinct !{!27, !15}
!28 = distinct !{!28, !15}
!29 = distinct !{!29, !15}
!30 = !{!24, !10, i64 4}
!31 = !{!24, !13, i64 8}
!32 = distinct !{!32, !15}
!33 = distinct !{!33, !15}
!34 = distinct !{!34, !15}


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

%"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::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::vector<double>, std::allocator<std::vector<double>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.2" = type { i8 }
%"class.sptk::RealValuedFastFourierTransform" = type { ptr, i32, i32, i32, %"class.sptk::FastFourierTransform", i8, %"class.std::vector" }
%"class.sptk::FastFourierTransform" = type { ptr, i32, i32, i32, i8, %"class.std::vector" }
%"class.sptk::RealValuedFastFourierTransform::Buffer" = type { ptr, %"class.std::vector", %"class.std::vector" }

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64, ptr, i32, ptr, i32, ptr, ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #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) local_unnamed_addr #2 align 2

declare { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef) local_unnamed_addr #3

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

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

declare void @_ZN4sptk5swipe5freevENS0_6vectorE(i32, ptr) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
define dso_local { i64, ptr } @_ZN4sptk5swipe8loudnessENS0_6vectorES1_dii(i32 %0, ptr nocapture readonly %1, i32 %2, ptr %3, double noundef %4, i32 noundef %5, i32 noundef %6) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca %"class.std::allocator", align 1
  %10 = alloca %"class.std::vector.0", align 8
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca %"class.std::allocator", align 1
  %13 = alloca %"class.std::allocator.2", align 1
  %14 = alloca %"class.sptk::RealValuedFastFourierTransform", align 8
  %15 = alloca %"class.sptk::RealValuedFastFourierTransform::Buffer", align 8
  %16 = sitofp i32 %6 to double
  %17 = fdiv double %4, %16
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #6
  %18 = sext i32 %5 to i64
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #6
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %18, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %19 unwind label %47

19:                                               ; preds = %7
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %12) #6
  call void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  invoke void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %11, i64 noundef %18, ptr noundef nonnull align 1 dereferenceable(1) %12)
          to label %20 unwind label %49

20:                                               ; preds = %19
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #6
  call void @_ZNSaISt6vectorIdSaIdEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  invoke void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef 2, ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %21 unwind label %51

21:                                               ; preds = %20
  call void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 104, ptr nonnull %14) #6
  %22 = shl nsw i32 %6, 1
  %23 = add nsw i32 %22, -1
  invoke void @_ZN4sptk30RealValuedFastFourierTransformC1Eii(ptr noundef nonnull align 8 dereferenceable(104) %14, i32 noundef %23, i32 noundef %22)
          to label %24 unwind label %54

24:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %15) #6
  call void @_ZN4sptk30RealValuedFastFourierTransform6BufferC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15)
  %25 = invoke { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef %5)
          to label %26 unwind label %56

26:                                               ; preds = %24
  %27 = extractvalue { i32, ptr } %25, 0
  %28 = extractvalue { i32, ptr } %25, 1
  %29 = icmp sgt i32 %5, 0
  br i1 %29, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %26
  %30 = uitofp nneg i32 %5 to double
  %wide.trip.count = zext nneg i32 %5 to i64
  %xtraiter = and i64 %wide.trip.count, 1
  %31 = icmp eq i32 %5, 1
  br i1 %31, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %32

32:                                               ; preds = %32, %.lr.ph.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.new ], [ %indvars.iv.next.1, %32 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %32 ]
  %33 = trunc nuw nsw i64 %indvars.iv to i32
  %34 = uitofp nneg i32 %33 to double
  %35 = fdiv double %34, %30
  %36 = fmul double %35, 0x401921FB54442D18
  %37 = call double @cos(double noundef %36) #6
  %38 = call double @llvm.fmuladd.f64(double %37, double -5.000000e-01, double 5.000000e-01)
  %39 = getelementptr inbounds double, ptr %28, i64 %indvars.iv
  store double %38, ptr %39, align 8, !tbaa !5
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %40 = trunc nuw nsw i64 %indvars.iv.next to i32
  %41 = uitofp nneg i32 %40 to double
  %42 = fdiv double %41, %30
  %43 = fmul double %42, 0x401921FB54442D18
  %44 = call double @cos(double noundef %43) #6
  %45 = call double @llvm.fmuladd.f64(double %44, double -5.000000e-01, double 5.000000e-01)
  %46 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.next
  store double %45, ptr %46, align 8, !tbaa !5
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %32, !llvm.loop !9

47:                                               ; preds = %7
  %48 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #6
  br label %168

49:                                               ; preds = %19
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %53

51:                                               ; preds = %20
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #6
  br label %53

53:                                               ; preds = %51, %49
  %.pn = phi { ptr, i32 } [ %52, %51 ], [ %50, %49 ]
  call void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %12) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #6
  br label %167

54:                                               ; preds = %21
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %166

56:                                               ; preds = %24
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

._crit_edge.loopexit.unr-lcssa:                   ; preds = %32, %.lr.ph
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next.1, %32 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %58 = trunc nuw nsw i64 %indvars.iv.unr to i32
  %59 = uitofp nneg i32 %58 to double
  %60 = fdiv double %59, %30
  %61 = fmul double %60, 0x401921FB54442D18
  %62 = call double @cos(double noundef %61) #6
  %63 = call double @llvm.fmuladd.f64(double %62, double -5.000000e-01, double 5.000000e-01)
  %64 = getelementptr inbounds double, ptr %28, i64 %indvars.iv.unr
  store double %63, ptr %64, align 8, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %26
  %65 = invoke { i32, ptr } @_ZN4sptk5swipe5makevEi(i32 noundef %6)
          to label %66 unwind label %.loopexit.split-lp.loopexit.split-lp

66:                                               ; preds = %._crit_edge
  %67 = extractvalue { i32, ptr } %65, 0
  %68 = extractvalue { i32, ptr } %65, 1
  %69 = icmp sgt i32 %6, 0
  br i1 %69, label %.lr.ph209.preheader, label %._crit_edge210

.lr.ph209.preheader:                              ; preds = %66
  %wide.trip.count252 = zext nneg i32 %6 to i64
  %min.iters.check = icmp ult i32 %6, 4
  br i1 %min.iters.check, label %.lr.ph209.preheader317, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph209.preheader
  %n.vec = and i64 %wide.trip.count252, 2147483644
  %broadcast.splatinsert = insertelement <2 x double> poison, double %17, i64 0
  %broadcast.splat = shufflevector <2 x double> %broadcast.splatinsert, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <2 x i32> [ <i32 0, i32 1>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <2 x i32> %vec.ind, <i32 2, i32 2>
  %70 = uitofp <2 x i32> %vec.ind to <2 x double>
  %71 = uitofp <2 x i32> %step.add to <2 x double>
  %72 = fmul <2 x double> %broadcast.splat, %70
  %73 = fmul <2 x double> %broadcast.splat, %71
  %74 = getelementptr inbounds double, ptr %68, i64 %index
  %75 = getelementptr inbounds i8, ptr %74, i64 16
  store <2 x double> %72, ptr %74, align 8, !tbaa !5
  store <2 x double> %73, ptr %75, align 8, !tbaa !5
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <2 x i32> %vec.ind, <i32 4, i32 4>
  %76 = icmp eq i64 %index.next, %n.vec
  br i1 %76, label %middle.block, label %vector.body, !llvm.loop !11

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count252
  br i1 %cmp.n, label %._crit_edge210, label %.lr.ph209.preheader317

.lr.ph209.preheader317:                           ; preds = %middle.block, %.lr.ph209.preheader
  %indvars.iv249.ph = phi i64 [ 0, %.lr.ph209.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph209

.lr.ph209:                                        ; preds = %.lr.ph209.preheader317, %.lr.ph209
  %indvars.iv249 = phi i64 [ %indvars.iv.next250, %.lr.ph209 ], [ %indvars.iv249.ph, %.lr.ph209.preheader317 ]
  %77 = trunc nuw nsw i64 %indvars.iv249 to i32
  %78 = uitofp nneg i32 %77 to double
  %79 = fmul double %17, %78
  %80 = getelementptr inbounds double, ptr %68, i64 %indvars.iv249
  store double %79, ptr %80, align 8, !tbaa !5
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, 1
  %exitcond253.not = icmp eq i64 %indvars.iv.next250, %wide.trip.count252
  br i1 %exitcond253.not, label %._crit_edge210, label %.lr.ph209, !llvm.loop !14

.loopexit197:                                     ; preds = %._crit_edge229
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit:                      ; preds = %._crit_edge219
  %lpad.loopexit200 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp:             ; preds = %133, %._crit_edge232, %._crit_edge216, %83, %._crit_edge210, %._crit_edge
  %lpad.loopexit.split-lp201 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

._crit_edge210:                                   ; preds = %.lr.ph209, %middle.block, %66
  %81 = load double, ptr %3, align 8, !tbaa !5
  %82 = invoke noundef i32 @_ZN4sptk5swipe7bisectvENS0_6vectorEd(i32 %67, ptr %68, double noundef %81)
          to label %83 unwind label %.loopexit.split-lp.loopexit.split-lp

83:                                               ; preds = %._crit_edge210
  %84 = sitofp i32 %0 to double
  %85 = fdiv double %84, %16
  %86 = call double @llvm.ceil.f64(double %85)
  %87 = fadd double %86, 1.000000e+00
  %88 = fptosi double %87 to i32
  %89 = invoke { i64, ptr } @_ZN4sptk5swipe5makemEii(i32 noundef %88, i32 noundef %2)
          to label %90 unwind label %.loopexit.split-lp.loopexit.split-lp

90:                                               ; preds = %83
  %91 = extractvalue { i64, ptr } %89, 0
  %.sroa.0138.0.extract.trunc = trunc i64 %91 to i32
  %.sroa.8150.0.extract.shift = lshr i64 %91, 32
  %.sroa.8150.0.extract.trunc = trunc nuw i64 %.sroa.8150.0.extract.shift to i32
  %92 = extractvalue { i64, ptr } %89, 1
  br i1 %69, label %.lr.ph213.preheader, label %.preheader203

.lr.ph213.preheader:                              ; preds = %90
  %wide.trip.count257 = zext nneg i32 %6 to i64
  br label %.lr.ph213

.preheader203:                                    ; preds = %.lr.ph213, %90
  %.0166.lcssa = phi i32 [ 0, %90 ], [ %6, %.lr.ph213 ]
  %93 = icmp slt i32 %.0166.lcssa, %5
  br i1 %93, label %.lr.ph215.preheader, label %._crit_edge216

.lr.ph215.preheader:                              ; preds = %.preheader203
  %94 = zext nneg i32 %.0166.lcssa to i64
  %95 = sext i32 %6 to i64
  %wide.trip.count262 = zext i32 %5 to i64
  br label %.lr.ph215

.lr.ph213:                                        ; preds = %.lr.ph213.preheader, %.lr.ph213
  %indvars.iv254 = phi i64 [ 0, %.lr.ph213.preheader ], [ %indvars.iv.next255, %.lr.ph213 ]
  %96 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv254) #6
  store double 0.000000e+00, ptr %96, align 8, !tbaa !5
  %indvars.iv.next255 = add nuw nsw i64 %indvars.iv254, 1
  %exitcond258.not = icmp eq i64 %indvars.iv.next255, %wide.trip.count257
  br i1 %exitcond258.not, label %.preheader203, label %.lr.ph213, !llvm.loop !15

.lr.ph215:                                        ; preds = %.lr.ph215.preheader, %.lr.ph215
  %indvars.iv259 = phi i64 [ %94, %.lr.ph215.preheader ], [ %indvars.iv.next260, %.lr.ph215 ]
  %97 = sub nsw i64 %indvars.iv259, %95
  %98 = getelementptr inbounds double, ptr %1, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !5
  %100 = getelementptr inbounds double, ptr %28, i64 %indvars.iv259
  %101 = load double, ptr %100, align 8, !tbaa !5
  %102 = fmul double %99, %101
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv259) #6
  store double %102, ptr %103, align 8, !tbaa !5
  %indvars.iv.next260 = add nuw nsw i64 %indvars.iv259, 1
  %exitcond263.not = icmp eq i64 %indvars.iv.next260, %wide.trip.count262
  br i1 %exitcond263.not, label %._crit_edge216, label %.lr.ph215, !llvm.loop !16

._crit_edge216:                                   ; preds = %.lr.ph215, %.preheader203
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %91, ptr %92, i32 %67, ptr %68, i32 %2, ptr nonnull %3, ptr noundef nonnull align 8 dereferenceable(104) %14, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull %10, ptr noundef nonnull %15, i32 noundef %6, i32 noundef %82, i32 noundef 0)
          to label %.preheader199 unwind label %.loopexit.split-lp.loopexit.split-lp

.preheader199:                                    ; preds = %._crit_edge216
  %104 = add i32 %.sroa.0138.0.extract.trunc, -2
  %105 = icmp sgt i32 %.sroa.0138.0.extract.trunc, 3
  br i1 %105, label %.preheader198.lr.ph, label %.preheader196

.preheader198.lr.ph:                              ; preds = %.preheader199
  %106 = sext i32 %6 to i64
  %wide.trip.count267 = zext nneg i32 %5 to i64
  br label %.preheader198

.preheader198:                                    ; preds = %.preheader198.lr.ph, %117
  %indvars.iv269 = phi i64 [ 0, %.preheader198.lr.ph ], [ %indvars.iv.next270, %117 ]
  %.2221 = phi i32 [ 1, %.preheader198.lr.ph ], [ %118, %117 ]
  br i1 %29, label %.lr.ph218.preheader, label %._crit_edge219

.lr.ph218.preheader:                              ; preds = %.preheader198
  %invariant.gep = getelementptr double, ptr %1, i64 %indvars.iv269
  br label %.lr.ph218

.preheader196.loopexit:                           ; preds = %117
  %107 = shl i64 %indvars.iv.next270, 32
  %108 = ashr exact i64 %107, 32
  br label %.preheader196

.preheader196:                                    ; preds = %.preheader196.loopexit, %.preheader199
  %.0171.lcssa = phi i64 [ 0, %.preheader199 ], [ %108, %.preheader196.loopexit ]
  %.2.lcssa = phi i32 [ 1, %.preheader199 ], [ %104, %.preheader196.loopexit ]
  %109 = icmp slt i32 %.2.lcssa, %.sroa.0138.0.extract.trunc
  br i1 %109, label %.preheader195.preheader, label %._crit_edge232

.preheader195.preheader:                          ; preds = %.preheader196
  %110 = sext i32 %6 to i64
  %111 = sext i32 %0 to i64
  %wide.trip.count279 = zext i32 %5 to i64
  br label %.preheader195

.lr.ph218:                                        ; preds = %.lr.ph218.preheader, %.lr.ph218
  %indvars.iv264 = phi i64 [ 0, %.lr.ph218.preheader ], [ %indvars.iv.next265, %.lr.ph218 ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv264
  %112 = load double, ptr %gep, align 8, !tbaa !5
  %113 = getelementptr inbounds double, ptr %28, i64 %indvars.iv264
  %114 = load double, ptr %113, align 8, !tbaa !5
  %115 = fmul double %112, %114
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv264) #6
  store double %115, ptr %116, align 8, !tbaa !5
  %indvars.iv.next265 = add nuw nsw i64 %indvars.iv264, 1
  %exitcond268.not = icmp eq i64 %indvars.iv.next265, %wide.trip.count267
  br i1 %exitcond268.not, label %._crit_edge219, label %.lr.ph218, !llvm.loop !17

._crit_edge219:                                   ; preds = %.lr.ph218, %.preheader198
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %91, ptr %92, i32 %67, ptr %68, i32 %2, ptr nonnull %3, ptr noundef nonnull align 8 dereferenceable(104) %14, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull %10, ptr noundef nonnull %15, i32 noundef %6, i32 noundef %82, i32 noundef %.2221)
          to label %117 unwind label %.loopexit.split-lp.loopexit

117:                                              ; preds = %._crit_edge219
  %indvars.iv.next270 = add nsw i64 %indvars.iv269, %106
  %118 = add nuw nsw i32 %.2221, 1
  %exitcond272.not = icmp eq i32 %118, %104
  br i1 %exitcond272.not, label %.preheader196.loopexit, label %.preheader198, !llvm.loop !18

.preheader195:                                    ; preds = %.preheader195.preheader, %131
  %indvars.iv281 = phi i64 [ %.0171.lcssa, %.preheader195.preheader ], [ %indvars.iv.next282, %131 ]
  %.3231 = phi i32 [ %.2.lcssa, %.preheader195.preheader ], [ %132, %131 ]
  %119 = sub nsw i64 %111, %indvars.iv281
  %120 = icmp sgt i64 %119, 0
  br i1 %120, label %.lr.ph225.preheader, label %.preheader194

.lr.ph225.preheader:                              ; preds = %.preheader195
  %invariant.gep301 = getelementptr double, ptr %1, i64 %indvars.iv281
  br label %.lr.ph225

.preheader194.loopexit:                           ; preds = %.lr.ph225
  %121 = trunc nuw nsw i64 %indvars.iv.next274 to i32
  br label %.preheader194

.preheader194:                                    ; preds = %.preheader194.loopexit, %.preheader195
  %.3169.lcssa = phi i32 [ 0, %.preheader195 ], [ %121, %.preheader194.loopexit ]
  %122 = icmp slt i32 %.3169.lcssa, %5
  br i1 %122, label %.lr.ph228.preheader, label %._crit_edge229

.lr.ph228.preheader:                              ; preds = %.preheader194
  %123 = zext nneg i32 %.3169.lcssa to i64
  br label %.lr.ph228

.lr.ph225:                                        ; preds = %.lr.ph225.preheader, %.lr.ph225
  %indvars.iv273 = phi i64 [ 0, %.lr.ph225.preheader ], [ %indvars.iv.next274, %.lr.ph225 ]
  %gep302 = getelementptr double, ptr %invariant.gep301, i64 %indvars.iv273
  %124 = load double, ptr %gep302, align 8, !tbaa !5
  %125 = getelementptr inbounds double, ptr %28, i64 %indvars.iv273
  %126 = load double, ptr %125, align 8, !tbaa !5
  %127 = fmul double %124, %126
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv273) #6
  store double %127, ptr %128, align 8, !tbaa !5
  %indvars.iv.next274 = add nuw nsw i64 %indvars.iv273, 1
  %129 = icmp slt i64 %indvars.iv.next274, %119
  br i1 %129, label %.lr.ph225, label %.preheader194.loopexit, !llvm.loop !19

.lr.ph228:                                        ; preds = %.lr.ph228.preheader, %.lr.ph228
  %indvars.iv276 = phi i64 [ %123, %.lr.ph228.preheader ], [ %indvars.iv.next277, %.lr.ph228 ]
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIdSaIdEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8, i64 noundef %indvars.iv276) #6
  store double 0.000000e+00, ptr %130, align 8, !tbaa !5
  %indvars.iv.next277 = add nuw nsw i64 %indvars.iv276, 1
  %exitcond280.not = icmp eq i64 %indvars.iv.next277, %wide.trip.count279
  br i1 %exitcond280.not, label %._crit_edge229, label %.lr.ph228, !llvm.loop !20

._crit_edge229:                                   ; preds = %.lr.ph228, %.preheader194
  invoke void @_ZN4sptk5swipe2LaENS0_6matrixENS0_6vectorES2_RKNS_30RealValuedFastFourierTransformERKSt6vectorIdSaIdEEPS6_IS8_SaIS8_EEPNS3_6BufferEiii(i64 %91, ptr %92, i32 %67, ptr %68, i32 %2, ptr nonnull %3, ptr noundef nonnull align 8 dereferenceable(104) %14, ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull %10, ptr noundef nonnull %15, i32 noundef %6, i32 noundef %82, i32 noundef %.3231)
          to label %131 unwind label %.loopexit197

131:                                              ; preds = %._crit_edge229
  %indvars.iv.next282 = add nsw i64 %indvars.iv281, %110
  %132 = add nuw i32 %.3231, 1
  %exitcond284.not = icmp eq i32 %132, %.sroa.0138.0.extract.trunc
  br i1 %exitcond284.not, label %._crit_edge232, label %.preheader195, !llvm.loop !21

._crit_edge232:                                   ; preds = %131, %.preheader196
  invoke void @_ZN4sptk5swipe5freevENS0_6vectorE(i32 %27, ptr %28)
          to label %133 unwind label %.loopexit.split-lp.loopexit.split-lp

133:                                              ; preds = %._crit_edge232
  invoke void @_ZN4sptk5swipe5freevENS0_6vectorE(i32 %67, ptr %68)
          to label %.preheader193 unwind label %.loopexit.split-lp.loopexit.split-lp

.preheader193:                                    ; preds = %133
  %134 = icmp sgt i32 %.sroa.0138.0.extract.trunc, 0
  br i1 %134, label %.preheader.lr.ph, label %._crit_edge243

.preheader.lr.ph:                                 ; preds = %.preheader193
  %135 = icmp sgt i32 %.sroa.8150.0.extract.trunc, 0
  %wide.trip.count298 = and i64 %91, 2147483647
  %136 = add nsw i64 %.sroa.8150.0.extract.shift, -1
  %xtraiter319 = and i64 %.sroa.8150.0.extract.shift, 3
  %137 = icmp ult i64 %136, 3
  %unroll_iter322 = and i64 %.sroa.8150.0.extract.shift, 2147483644
  %lcmp.mod320.not = icmp eq i64 %xtraiter319, 0
  %min.iters.check306 = icmp ult i64 %91, 8589934592
  %n.vec309 = and i64 %.sroa.8150.0.extract.shift, 2147483646
  %cmp.n316 = icmp eq i64 %.sroa.8150.0.extract.shift, %n.vec309
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %.loopexit
  %indvars.iv295 = phi i64 [ 0, %.preheader.lr.ph ], [ %indvars.iv.next296, %.loopexit ]
  br i1 %135, label %.lr.ph235, label %.loopexit

.lr.ph235:                                        ; preds = %.preheader
  %138 = getelementptr inbounds ptr, ptr %92, i64 %indvars.iv295
  %139 = load ptr, ptr %138, align 8, !tbaa !22
  br i1 %137, label %._crit_edge236.unr-lcssa, label %.lr.ph235.new

.lr.ph235.new:                                    ; preds = %.lr.ph235, %.lr.ph235.new
  %indvars.iv285 = phi i64 [ %indvars.iv.next286.3, %.lr.ph235.new ], [ 0, %.lr.ph235 ]
  %.0173233 = phi double [ %151, %.lr.ph235.new ], [ 0.000000e+00, %.lr.ph235 ]
  %niter323 = phi i64 [ %niter323.next.3, %.lr.ph235.new ], [ 0, %.lr.ph235 ]
  %140 = getelementptr inbounds double, ptr %139, i64 %indvars.iv285
  %141 = load double, ptr %140, align 8, !tbaa !5
  %142 = call double @llvm.fmuladd.f64(double %141, double %141, double %.0173233)
  %indvars.iv.next286 = or disjoint i64 %indvars.iv285, 1
  %143 = getelementptr inbounds double, ptr %139, i64 %indvars.iv.next286
  %144 = load double, ptr %143, align 8, !tbaa !5
  %145 = call double @llvm.fmuladd.f64(double %144, double %144, double %142)
  %indvars.iv.next286.1 = or disjoint i64 %indvars.iv285, 2
  %146 = getelementptr inbounds double, ptr %139, i64 %indvars.iv.next286.1
  %147 = load double, ptr %146, align 8, !tbaa !5
  %148 = call double @llvm.fmuladd.f64(double %147, double %147, double %145)
  %indvars.iv.next286.2 = or disjoint i64 %indvars.iv285, 3
  %149 = getelementptr inbounds double, ptr %139, i64 %indvars.iv.next286.2
  %150 = load double, ptr %149, align 8, !tbaa !5
  %151 = call double @llvm.fmuladd.f64(double %150, double %150, double %148)
  %indvars.iv.next286.3 = add nuw nsw i64 %indvars.iv285, 4
  %niter323.next.3 = add i64 %niter323, 4
  %niter323.ncmp.3 = icmp eq i64 %niter323.next.3, %unroll_iter322
  br i1 %niter323.ncmp.3, label %._crit_edge236.unr-lcssa, label %.lr.ph235.new, !llvm.loop !24

._crit_edge236.unr-lcssa:                         ; preds = %.lr.ph235.new, %.lr.ph235
  %.lcssa.ph = phi double [ poison, %.lr.ph235 ], [ %151, %.lr.ph235.new ]
  %indvars.iv285.unr = phi i64 [ 0, %.lr.ph235 ], [ %indvars.iv.next286.3, %.lr.ph235.new ]
  %.0173233.unr = phi double [ 0.000000e+00, %.lr.ph235 ], [ %151, %.lr.ph235.new ]
  br i1 %lcmp.mod320.not, label %._crit_edge236, label %.epil.preheader318

.epil.preheader318:                               ; preds = %._crit_edge236.unr-lcssa, %.epil.preheader318
  %indvars.iv285.epil = phi i64 [ %indvars.iv.next286.epil, %.epil.preheader318 ], [ %indvars.iv285.unr, %._crit_edge236.unr-lcssa ]
  %.0173233.epil = phi double [ %154, %.epil.preheader318 ], [ %.0173233.unr, %._crit_edge236.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader318 ], [ 0, %._crit_edge236.unr-lcssa ]
  %152 = getelementptr inbounds double, ptr %139, i64 %indvars.iv285.epil
  %153 = load double, ptr %152, align 8, !tbaa !5
  %154 = call double @llvm.fmuladd.f64(double %153, double %153, double %.0173233.epil)
  %indvars.iv.next286.epil = add nuw nsw i64 %indvars.iv285.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter319
  br i1 %epil.iter.cmp.not, label %._crit_edge236, label %.epil.preheader318, !llvm.loop !25

._crit_edge236:                                   ; preds = %.epil.preheader318, %._crit_edge236.unr-lcssa
  %.lcssa = phi double [ %.lcssa.ph, %._crit_edge236.unr-lcssa ], [ %154, %.epil.preheader318 ]
  %155 = fcmp une double %.lcssa, 0.000000e+00
  br i1 %155, label %156, label %.loopexit

156:                                              ; preds = %._crit_edge236
  %157 = call double @sqrt(double noundef %.lcssa) #6
  br i1 %135, label %.lr.ph240, label %.loopexit

.lr.ph240:                                        ; preds = %156
  %158 = getelementptr inbounds ptr, ptr %92, i64 %indvars.iv295
  %159 = load ptr, ptr %158, align 8, !tbaa !22
  br i1 %min.iters.check306, label %scalar.ph305.preheader, label %vector.ph307

vector.ph307:                                     ; preds = %.lr.ph240
  %broadcast.splatinsert313 = insertelement <2 x double> poison, double %157, i64 0
  %broadcast.splat314 = shufflevector <2 x double> %broadcast.splatinsert313, <2 x double> poison, <2 x i32> zeroinitializer
  br label %vector.body311

vector.body311:                                   ; preds = %vector.body311, %vector.ph307
  %index312 = phi i64 [ 0, %vector.ph307 ], [ %index.next315, %vector.body311 ]
  %160 = getelementptr inbounds double, ptr %159, i64 %index312
  %wide.load = load <2 x double>, ptr %160, align 8, !tbaa !5
  %161 = fdiv <2 x double> %wide.load, %broadcast.splat314
  store <2 x double> %161, ptr %160, align 8, !tbaa !5
  %index.next315 = add nuw i64 %index312, 2
  %162 = icmp eq i64 %index.next315, %n.vec309
  br i1 %162, label %middle.block304, label %vector.body311, !llvm.loop !27

middle.block304:                                  ; preds = %vector.body311
  br i1 %cmp.n316, label %.loopexit, label %scalar.ph305.preheader

scalar.ph305.preheader:                           ; preds = %middle.block304, %.lr.ph240
  %indvars.iv290.ph = phi i64 [ 0, %.lr.ph240 ], [ %n.vec309, %middle.block304 ]
  br label %scalar.ph305

scalar.ph305:                                     ; preds = %scalar.ph305.preheader, %scalar.ph305
  %indvars.iv290 = phi i64 [ %indvars.iv.next291, %scalar.ph305 ], [ %indvars.iv290.ph, %scalar.ph305.preheader ]
  %163 = getelementptr inbounds double, ptr %159, i64 %indvars.iv290
  %164 = load double, ptr %163, align 8, !tbaa !5
  %165 = fdiv double %164, %157
  store double %165, ptr %163, align 8, !tbaa !5
  %indvars.iv.next291 = add nuw nsw i64 %indvars.iv290, 1
  %exitcond294.not = icmp eq i64 %indvars.iv.next291, %.sroa.8150.0.extract.shift
  br i1 %exitcond294.not, label %.loopexit, label %scalar.ph305, !llvm.loop !28

.loopexit:                                        ; preds = %scalar.ph305, %middle.block304, %.preheader, %156, %._crit_edge236
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %exitcond299.not = icmp eq i64 %indvars.iv.next296, %wide.trip.count298
  br i1 %exitcond299.not, label %._crit_edge243, label %.preheader, !llvm.loop !29

._crit_edge243:                                   ; preds = %.loopexit, %.preheader193
  call void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #6
  call void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %14) #6
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %14) #6
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  ret { i64, ptr } %89

.loopexit.split-lp:                               ; preds = %.loopexit197, %.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit, %56
  %.pn188 = phi { ptr, i32 } [ %57, %56 ], [ %lpad.loopexit, %.loopexit197 ], [ %lpad.loopexit200, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp201, %.loopexit.split-lp.loopexit.split-lp ]
  call void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #6
  call void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %14) #6
  br label %166

166:                                              ; preds = %.loopexit.split-lp, %54
  %.pn188.pn = phi { ptr, i32 } [ %.pn188, %.loopexit.split-lp ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 104, ptr nonnull %14) #6
  call void @_ZNSt6vectorIS_IdSaIdEESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #6
  br label %167

167:                                              ; preds = %166, %53
  %.pn188.pn.pn = phi { ptr, i32 } [ %.pn188.pn, %166 ], [ %.pn, %53 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #6
  call void @_ZNSt6vectorIdSaIdEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #6
  br label %168

168:                                              ; preds = %167, %47
  %.pn188.pn.pn.pn = phi { ptr, i32 } [ %.pn188.pn.pn, %167 ], [ %48, %47 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #6
  resume { ptr, i32 } %.pn188.pn.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaIdEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIdSaIdEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIdED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSaISt6vectorIdSaIdEEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIS_IdSaIdEESaIS1_EEC2EmRKS1_RKS2_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

declare void @_ZN4sptk30RealValuedFastFourierTransformC1Eii(ptr noundef nonnull align 8 dereferenceable(104), i32 noundef, i32 noundef) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransform6BufferC2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

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

declare noundef i32 @_ZN4sptk5swipe7bisectvENS0_6vectorEd(i32, ptr, double noundef) local_unnamed_addr #3

declare { i64, ptr } @_ZN4sptk5swipe5makemEii(i32 noundef, i32 noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransform6BufferD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4sptk30RealValuedFastFourierTransformD2Ev(ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorISt6vectorIdSaIdEEED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) 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 willreturn memory(argmem: readwrite) }
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 = { "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 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 #5 = { mustprogress 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10, !12, !13}
!12 = !{!"llvm.loop.isvectorized", i32 1}
!13 = !{!"llvm.loop.unroll.runtime.disable"}
!14 = distinct !{!14, !10, !13, !12}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = !{!23, !23, i64 0}
!23 = !{!"any pointer", !7, i64 0}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !10, !12, !13}
!28 = distinct !{!28, !10, !13, !12}
!29 = distinct !{!29, !10}


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