; LLVM IR from cdalvaro/computational-physics :: computational-physics/math/differential_equations (SolveEDP)

; 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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.cda::math::containers::Vector" = type { i64, ptr, ptr }
%"class.cda::math::differential_equations::EDP" = type { %"class.cda::math::containers::Vector", %"class.cda::math::containers::Matrix", %"class.cda::math::containers::Matrix.0", %"class.std::__cxx11::basic_string", ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, ptr, ptr, double }
%"class.cda::math::containers::Matrix" = type { i64, i64, i64, ptr, ptr }
%"class.cda::math::containers::Matrix.0" = type { i64, i64, i64, ptr, ptr }

@initEDP = external dso_local global i8, align 1
@_ZL10EDPwarningB5cxx11 = external hidden global %"class.std::__cxx11::basic_string", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.10 = external hidden unnamed_addr constant [133 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_S6_(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, i8 noundef zeroext %2, i8 noundef zeroext %3, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6) #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i1, align 1
  %17 = alloca i64, align 8
  %18 = alloca double, align 8
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca double, align 8
  %26 = alloca %"class.cda::math::containers::Vector", align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i32, align 4
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i32, align 4
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca i64, align 8
  store ptr %0, ptr %8, align 8
  store ptr %1, ptr %9, align 8, !tbaa !5
  store i8 %2, ptr %10, align 1, !tbaa !9
  store i8 %3, ptr %11, align 1, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  %72 = load ptr, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %73 = load ptr, ptr %12, align 8, !tbaa !5
  %74 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %73)
  %75 = trunc i64 %74 to i32
  store i32 %75, ptr %15, align 4, !tbaa !10
  store i1 false, ptr %16, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %76 = load i32, ptr %15, align 4, !tbaa !10
  %77 = sext i32 %76 to i64
  store i64 %77, ptr %17, align 8, !tbaa !12
  call void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %17)
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %78 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %79 = load i32, ptr %15, align 4, !tbaa !10
  %80 = sub nsw i32 %79, 1
  %81 = sext i32 %80 to i64
  store i64 %81, ptr %19, align 8, !tbaa !12
  %82 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %78, ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %83 unwind label %135

83:                                               ; preds = %7
  %84 = load double, ptr %82, align 8, !tbaa !14
  %85 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  store i64 0, ptr %22, align 8, !tbaa !12
  %86 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %85, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %87 unwind label %139

87:                                               ; preds = %83
  %88 = load double, ptr %86, align 8, !tbaa !14
  %89 = fsub double %84, %88
  %90 = load i32, ptr %15, align 4, !tbaa !10
  %91 = sub nsw i32 %90, 1
  %92 = sitofp i32 %91 to double
  %93 = fdiv double %89, %92
  %94 = fptosi double %93 to i32
  %95 = call i32 @llvm.abs.i32(i32 %94, i1 true)
  %96 = sitofp i32 %95 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  store double %96, ptr %18, align 8, !tbaa !14
  %97 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %98 = load double, ptr %97, align 8, !tbaa !16
  %99 = load double, ptr %18, align 8, !tbaa !14
  %100 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %101 = load ptr, ptr %100, align 8, !tbaa !23
  %102 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  store i64 0, ptr %23, align 8, !tbaa !12
  %103 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %102, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %104 unwind label %144

104:                                              ; preds = %87
  %105 = load double, ptr %103, align 8, !tbaa !14
  %106 = invoke noundef double %101(double noundef %105)
          to label %107 unwind label %144

107:                                              ; preds = %104
  %108 = call double @sqrt(double noundef %106) #6
  %109 = fdiv double %99, %108
  %110 = fcmp ogt double %98, %109
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br i1 %110, label %111, label %156

111:                                              ; preds = %107
  %112 = load double, ptr %18, align 8, !tbaa !14
  %113 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %114 = load ptr, ptr %113, align 8, !tbaa !23
  %115 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #6
  store i64 0, ptr %24, align 8, !tbaa !12
  %116 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %115, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %117 unwind label %148

117:                                              ; preds = %111
  %118 = load double, ptr %116, align 8, !tbaa !14
  %119 = invoke noundef double %114(double noundef %118)
          to label %120 unwind label %148

120:                                              ; preds = %117
  %121 = call double @sqrt(double noundef %119) #6
  %122 = fdiv double %112, %121
  %123 = fmul double %122, 9.000000e-01
  %124 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  store double %123, ptr %124, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) @_ZL10EDPwarningB5cxx11)
          to label %126 unwind label %152

126:                                              ; preds = %120
  %127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %125, ptr noundef @.str.10)
          to label %128 unwind label %152

128:                                              ; preds = %126
  %129 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %130 = load double, ptr %129, align 8, !tbaa !16
  %131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %127, double noundef %130)
          to label %132 unwind label %152

132:                                              ; preds = %128
  %133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %131, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %134 unwind label %152

134:                                              ; preds = %132
  br label %156

135:                                              ; preds = %7
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %20, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %21, align 4
  br label %143

139:                                              ; preds = %83
  %140 = landingpad { ptr, i32 }
          cleanup
  %141 = extractvalue { ptr, i32 } %140, 0
  store ptr %141, ptr %20, align 8
  %142 = extractvalue { ptr, i32 } %140, 1
  store i32 %142, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  br label %143

143:                                              ; preds = %139, %135
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %820

144:                                              ; preds = %104, %87
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %20, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %820

148:                                              ; preds = %117, %111
  %149 = landingpad { ptr, i32 }
          cleanup
  %150 = extractvalue { ptr, i32 } %149, 0
  store ptr %150, ptr %20, align 8
  %151 = extractvalue { ptr, i32 } %149, 1
  store i32 %151, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #6
  br label %820

152:                                              ; preds = %132, %128, %126, %120
  %153 = landingpad { ptr, i32 }
          cleanup
  %154 = extractvalue { ptr, i32 } %153, 0
  store ptr %154, ptr %20, align 8
  %155 = extractvalue { ptr, i32 } %153, 1
  store i32 %155, ptr %21, align 4
  br label %820

156:                                              ; preds = %134, %107
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %157 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %158 = load double, ptr %157, align 8, !tbaa !16
  %159 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %160 = load double, ptr %159, align 8, !tbaa !16
  %161 = fmul double %158, %160
  %162 = load double, ptr %18, align 8, !tbaa !14
  %163 = load double, ptr %18, align 8, !tbaa !14
  %164 = fmul double %162, %163
  %165 = fdiv double %161, %164
  store double %165, ptr %25, align 8, !tbaa !14
  %166 = load ptr, ptr %13, align 8, !tbaa !5
  %167 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %166)
          to label %168 unwind label %234

168:                                              ; preds = %156
  %169 = load i8, ptr @initEDP, align 1, !tbaa !24, !range !26, !noundef !27
  %170 = trunc i8 %169 to i1
  br i1 %170, label %500, label %171

171:                                              ; preds = %168
  store i8 1, ptr @initEDP, align 1, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %172 = load i32, ptr %15, align 4, !tbaa !10
  %173 = sext i32 %172 to i64
  store i64 %173, ptr %27, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdE4zeroERKm(ptr dead_on_unwind writable sret(%"class.cda::math::containers::Vector") align 8 %26, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %174 unwind label %238

174:                                              ; preds = %171
  %175 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 0
  %176 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %175, ptr noundef nonnull align 8 dereferenceable(24) %26)
          to label %177 unwind label %242

177:                                              ; preds = %174
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #6
  %178 = load i8, ptr %10, align 1, !tbaa !9
  %179 = zext i8 %178 to i32
  %180 = and i32 %179, 16
  %181 = icmp ne i32 %180, 0
  br i1 %181, label %182, label %281

182:                                              ; preds = %177
  %183 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  store i64 0, ptr %28, align 8, !tbaa !12
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %183, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %185 unwind label %247

185:                                              ; preds = %182
  %186 = load double, ptr %184, align 8, !tbaa !14
  %187 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %188 = load double, ptr %187, align 8, !tbaa !16
  %189 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %190 = load ptr, ptr %189, align 8, !tbaa !23
  %191 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  store i64 0, ptr %29, align 8, !tbaa !12
  %192 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %191, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %193 unwind label %251

193:                                              ; preds = %185
  %194 = load double, ptr %192, align 8, !tbaa !14
  %195 = invoke noundef double %190(double noundef %194)
          to label %196 unwind label %251

196:                                              ; preds = %193
  %197 = load double, ptr %25, align 8, !tbaa !14
  %198 = fneg double %195
  %199 = call double @llvm.fmuladd.f64(double %198, double %197, double 1.000000e+00)
  %200 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  store i64 0, ptr %30, align 8, !tbaa !12
  %201 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %200, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %202 unwind label %255

202:                                              ; preds = %196
  %203 = load double, ptr %201, align 8, !tbaa !14
  %204 = fmul double %199, %203
  %205 = call double @llvm.fmuladd.f64(double %186, double %188, double %204)
  %206 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %207 = load ptr, ptr %206, align 8, !tbaa !23
  %208 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  store i64 0, ptr %31, align 8, !tbaa !12
  %209 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %208, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %210 unwind label %259

210:                                              ; preds = %202
  %211 = load double, ptr %209, align 8, !tbaa !14
  %212 = invoke noundef double %207(double noundef %211)
          to label %213 unwind label %259

213:                                              ; preds = %210
  %214 = load double, ptr %25, align 8, !tbaa !14
  %215 = fmul double %212, %214
  %216 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #6
  store i64 1, ptr %32, align 8, !tbaa !12
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %216, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %218 unwind label %263

218:                                              ; preds = %213
  %219 = load double, ptr %217, align 8, !tbaa !14
  %220 = load double, ptr %18, align 8, !tbaa !14
  %221 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 7
  %222 = load ptr, ptr %221, align 8, !tbaa !28
  %223 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  store i64 0, ptr %33, align 8, !tbaa !12
  %224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %223, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %225 unwind label %267

225:                                              ; preds = %218
  %226 = load double, ptr %224, align 8, !tbaa !14
  %227 = invoke noundef double %222(double noundef %226, double noundef 0.000000e+00)
          to label %228 unwind label %267

228:                                              ; preds = %225
  %229 = fneg double %220
  %230 = call double @llvm.fmuladd.f64(double %229, double %227, double %219)
  %231 = call double @llvm.fmuladd.f64(double %215, double %230, double %205)
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  store i64 0, ptr %34, align 8, !tbaa !12
  %232 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %233 unwind label %271

233:                                              ; preds = %228
  store double %231, ptr %232, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %281

234:                                              ; preds = %808, %156
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %20, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %21, align 4
  br label %819

238:                                              ; preds = %171
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %20, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %21, align 4
  br label %246

242:                                              ; preds = %174
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %20, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %21, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #6
  br label %246

246:                                              ; preds = %242, %238
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #6
  br label %819

247:                                              ; preds = %182
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %20, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %21, align 4
  br label %280

251:                                              ; preds = %193, %185
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %20, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %21, align 4
  br label %279

255:                                              ; preds = %196
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %20, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %21, align 4
  br label %278

259:                                              ; preds = %210, %202
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %20, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %21, align 4
  br label %277

263:                                              ; preds = %213
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %20, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %21, align 4
  br label %276

267:                                              ; preds = %225, %218
  %268 = landingpad { ptr, i32 }
          cleanup
  %269 = extractvalue { ptr, i32 } %268, 0
  store ptr %269, ptr %20, align 8
  %270 = extractvalue { ptr, i32 } %268, 1
  store i32 %270, ptr %21, align 4
  br label %275

271:                                              ; preds = %228
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %20, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  br label %275

275:                                              ; preds = %271, %267
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  br label %276

276:                                              ; preds = %275, %263
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #6
  br label %277

277:                                              ; preds = %276, %259
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  br label %278

278:                                              ; preds = %277, %255
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  br label %279

279:                                              ; preds = %278, %251
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  br label %280

280:                                              ; preds = %279, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %819

281:                                              ; preds = %233, %177
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  store i32 1, ptr %35, align 4, !tbaa !10
  br label %282

282:                                              ; preds = %351, %281
  %283 = load i32, ptr %35, align 4, !tbaa !10
  %284 = load i32, ptr %15, align 4, !tbaa !10
  %285 = sub nsw i32 %284, 1
  %286 = icmp slt i32 %283, %285
  br i1 %286, label %288, label %287

287:                                              ; preds = %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %388

288:                                              ; preds = %282
  %289 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %290 = load i32, ptr %35, align 4, !tbaa !10
  %291 = sext i32 %290 to i64
  store i64 %291, ptr %36, align 8, !tbaa !12
  %292 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %289, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %293 unwind label %354

293:                                              ; preds = %288
  %294 = load double, ptr %292, align 8, !tbaa !14
  %295 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %296 = load double, ptr %295, align 8, !tbaa !16
  %297 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %298 = load ptr, ptr %297, align 8, !tbaa !23
  %299 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %300 = load i32, ptr %35, align 4, !tbaa !10
  %301 = sext i32 %300 to i64
  store i64 %301, ptr %37, align 8, !tbaa !12
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %299, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %303 unwind label %358

303:                                              ; preds = %293
  %304 = load double, ptr %302, align 8, !tbaa !14
  %305 = invoke noundef double %298(double noundef %304)
          to label %306 unwind label %358

306:                                              ; preds = %303
  %307 = load double, ptr %25, align 8, !tbaa !14
  %308 = fneg double %305
  %309 = call double @llvm.fmuladd.f64(double %308, double %307, double 1.000000e+00)
  %310 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %311 = load i32, ptr %35, align 4, !tbaa !10
  %312 = sext i32 %311 to i64
  store i64 %312, ptr %38, align 8, !tbaa !12
  %313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %310, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %314 unwind label %362

314:                                              ; preds = %306
  %315 = load double, ptr %313, align 8, !tbaa !14
  %316 = fmul double %309, %315
  %317 = call double @llvm.fmuladd.f64(double %294, double %296, double %316)
  %318 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %319 = load ptr, ptr %318, align 8, !tbaa !23
  %320 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  %321 = load i32, ptr %35, align 4, !tbaa !10
  %322 = sext i32 %321 to i64
  store i64 %322, ptr %39, align 8, !tbaa !12
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %320, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %324 unwind label %366

324:                                              ; preds = %314
  %325 = load double, ptr %323, align 8, !tbaa !14
  %326 = invoke noundef double %319(double noundef %325)
          to label %327 unwind label %366

327:                                              ; preds = %324
  %328 = load double, ptr %25, align 8, !tbaa !14
  %329 = fmul double %326, %328
  %330 = fdiv double %329, 2.000000e+00
  %331 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %332 = load i32, ptr %35, align 4, !tbaa !10
  %333 = add nsw i32 %332, 1
  %334 = sext i32 %333 to i64
  store i64 %334, ptr %40, align 8, !tbaa !12
  %335 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %331, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %336 unwind label %370

336:                                              ; preds = %327
  %337 = load double, ptr %335, align 8, !tbaa !14
  %338 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %339 = load i32, ptr %35, align 4, !tbaa !10
  %340 = sub nsw i32 %339, 1
  %341 = sext i32 %340 to i64
  store i64 %341, ptr %41, align 8, !tbaa !12
  %342 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %338, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %343 unwind label %374

343:                                              ; preds = %336
  %344 = load double, ptr %342, align 8, !tbaa !14
  %345 = fadd double %337, %344
  %346 = call double @llvm.fmuladd.f64(double %330, double %345, double %317)
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %347 = load i32, ptr %35, align 4, !tbaa !10
  %348 = sext i32 %347 to i64
  store i64 %348, ptr %42, align 8, !tbaa !12
  %349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %350 unwind label %378

350:                                              ; preds = %343
  store double %346, ptr %349, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  br label %351

351:                                              ; preds = %350
  %352 = load i32, ptr %35, align 4, !tbaa !10
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %35, align 4, !tbaa !10
  br label %282, !llvm.loop !29

354:                                              ; preds = %288
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %20, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %21, align 4
  br label %387

358:                                              ; preds = %303, %293
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %20, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %21, align 4
  br label %386

362:                                              ; preds = %306
  %363 = landingpad { ptr, i32 }
          cleanup
  %364 = extractvalue { ptr, i32 } %363, 0
  store ptr %364, ptr %20, align 8
  %365 = extractvalue { ptr, i32 } %363, 1
  store i32 %365, ptr %21, align 4
  br label %385

366:                                              ; preds = %324, %314
  %367 = landingpad { ptr, i32 }
          cleanup
  %368 = extractvalue { ptr, i32 } %367, 0
  store ptr %368, ptr %20, align 8
  %369 = extractvalue { ptr, i32 } %367, 1
  store i32 %369, ptr %21, align 4
  br label %384

370:                                              ; preds = %327
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %20, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %21, align 4
  br label %383

374:                                              ; preds = %336
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %20, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %21, align 4
  br label %382

378:                                              ; preds = %343
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %20, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  br label %382

382:                                              ; preds = %378, %374
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  br label %383

383:                                              ; preds = %382, %370
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  br label %384

384:                                              ; preds = %383, %366
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  br label %385

385:                                              ; preds = %384, %362
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %386

386:                                              ; preds = %385, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  br label %387

387:                                              ; preds = %386, %354
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  br label %819

388:                                              ; preds = %287
  %389 = load i8, ptr %10, align 1, !tbaa !9
  %390 = zext i8 %389 to i32
  %391 = and i32 %390, 32
  %392 = icmp ne i32 %391, 0
  br i1 %392, label %393, label %499

393:                                              ; preds = %388
  %394 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #6
  %395 = load i32, ptr %15, align 4, !tbaa !10
  %396 = sub nsw i32 %395, 1
  %397 = sext i32 %396 to i64
  store i64 %397, ptr %43, align 8, !tbaa !12
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %394, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %399 unwind label %465

399:                                              ; preds = %393
  %400 = load double, ptr %398, align 8, !tbaa !14
  %401 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %402 = load double, ptr %401, align 8, !tbaa !16
  %403 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %404 = load ptr, ptr %403, align 8, !tbaa !23
  %405 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #6
  %406 = load i32, ptr %15, align 4, !tbaa !10
  %407 = sub nsw i32 %406, 1
  %408 = sext i32 %407 to i64
  store i64 %408, ptr %44, align 8, !tbaa !12
  %409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %405, ptr noundef nonnull align 8 dereferenceable(8) %44)
          to label %410 unwind label %469

410:                                              ; preds = %399
  %411 = load double, ptr %409, align 8, !tbaa !14
  %412 = invoke noundef double %404(double noundef %411)
          to label %413 unwind label %469

413:                                              ; preds = %410
  %414 = load double, ptr %25, align 8, !tbaa !14
  %415 = fneg double %412
  %416 = call double @llvm.fmuladd.f64(double %415, double %414, double 1.000000e+00)
  %417 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #6
  %418 = load i32, ptr %15, align 4, !tbaa !10
  %419 = sub nsw i32 %418, 1
  %420 = sext i32 %419 to i64
  store i64 %420, ptr %45, align 8, !tbaa !12
  %421 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %417, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %422 unwind label %473

422:                                              ; preds = %413
  %423 = load double, ptr %421, align 8, !tbaa !14
  %424 = fmul double %416, %423
  %425 = call double @llvm.fmuladd.f64(double %400, double %402, double %424)
  %426 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %427 = load ptr, ptr %426, align 8, !tbaa !23
  %428 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #6
  %429 = load i32, ptr %15, align 4, !tbaa !10
  %430 = sub nsw i32 %429, 1
  %431 = sext i32 %430 to i64
  store i64 %431, ptr %46, align 8, !tbaa !12
  %432 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %428, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %433 unwind label %477

433:                                              ; preds = %422
  %434 = load double, ptr %432, align 8, !tbaa !14
  %435 = invoke noundef double %427(double noundef %434)
          to label %436 unwind label %477

436:                                              ; preds = %433
  %437 = load double, ptr %25, align 8, !tbaa !14
  %438 = fmul double %435, %437
  %439 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #6
  %440 = load i32, ptr %15, align 4, !tbaa !10
  %441 = sub nsw i32 %440, 2
  %442 = sext i32 %441 to i64
  store i64 %442, ptr %47, align 8, !tbaa !12
  %443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %439, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %444 unwind label %481

444:                                              ; preds = %436
  %445 = load double, ptr %443, align 8, !tbaa !14
  %446 = load double, ptr %18, align 8, !tbaa !14
  %447 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 8
  %448 = load ptr, ptr %447, align 8, !tbaa !31
  %449 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #6
  %450 = load i32, ptr %15, align 4, !tbaa !10
  %451 = sub nsw i32 %450, 1
  %452 = sext i32 %451 to i64
  store i64 %452, ptr %48, align 8, !tbaa !12
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %449, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %454 unwind label %485

454:                                              ; preds = %444
  %455 = load double, ptr %453, align 8, !tbaa !14
  %456 = invoke noundef double %448(double noundef %455, double noundef 0.000000e+00)
          to label %457 unwind label %485

457:                                              ; preds = %454
  %458 = call double @llvm.fmuladd.f64(double %446, double %456, double %445)
  %459 = call double @llvm.fmuladd.f64(double %438, double %458, double %425)
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #6
  %460 = load i32, ptr %15, align 4, !tbaa !10
  %461 = sub nsw i32 %460, 1
  %462 = sext i32 %461 to i64
  store i64 %462, ptr %49, align 8, !tbaa !12
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %464 unwind label %489

464:                                              ; preds = %457
  store double %459, ptr %463, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %499

465:                                              ; preds = %393
  %466 = landingpad { ptr, i32 }
          cleanup
  %467 = extractvalue { ptr, i32 } %466, 0
  store ptr %467, ptr %20, align 8
  %468 = extractvalue { ptr, i32 } %466, 1
  store i32 %468, ptr %21, align 4
  br label %498

469:                                              ; preds = %410, %399
  %470 = landingpad { ptr, i32 }
          cleanup
  %471 = extractvalue { ptr, i32 } %470, 0
  store ptr %471, ptr %20, align 8
  %472 = extractvalue { ptr, i32 } %470, 1
  store i32 %472, ptr %21, align 4
  br label %497

473:                                              ; preds = %413
  %474 = landingpad { ptr, i32 }
          cleanup
  %475 = extractvalue { ptr, i32 } %474, 0
  store ptr %475, ptr %20, align 8
  %476 = extractvalue { ptr, i32 } %474, 1
  store i32 %476, ptr %21, align 4
  br label %496

477:                                              ; preds = %433, %422
  %478 = landingpad { ptr, i32 }
          cleanup
  %479 = extractvalue { ptr, i32 } %478, 0
  store ptr %479, ptr %20, align 8
  %480 = extractvalue { ptr, i32 } %478, 1
  store i32 %480, ptr %21, align 4
  br label %495

481:                                              ; preds = %436
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %20, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %21, align 4
  br label %494

485:                                              ; preds = %454, %444
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %20, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %21, align 4
  br label %493

489:                                              ; preds = %457
  %490 = landingpad { ptr, i32 }
          cleanup
  %491 = extractvalue { ptr, i32 } %490, 0
  store ptr %491, ptr %20, align 8
  %492 = extractvalue { ptr, i32 } %490, 1
  store i32 %492, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #6
  br label %493

493:                                              ; preds = %489, %485
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #6
  br label %494

494:                                              ; preds = %493, %481
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #6
  br label %495

495:                                              ; preds = %494, %477
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #6
  br label %496

496:                                              ; preds = %495, %473
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #6
  br label %497

497:                                              ; preds = %496, %469
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #6
  br label %498

498:                                              ; preds = %497, %465
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #6
  br label %819

499:                                              ; preds = %464, %388
  br label %808

500:                                              ; preds = %168
  %501 = load i8, ptr %10, align 1, !tbaa !9
  %502 = zext i8 %501 to i32
  %503 = and i32 %502, 16
  %504 = icmp ne i32 %503, 0
  br i1 %504, label %505, label %591

505:                                              ; preds = %500
  %506 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %507 = load ptr, ptr %506, align 8, !tbaa !23
  %508 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #6
  store i64 0, ptr %50, align 8, !tbaa !12
  %509 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %508, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %510 unwind label %557

510:                                              ; preds = %505
  %511 = load double, ptr %509, align 8, !tbaa !14
  %512 = invoke noundef double %507(double noundef %511)
          to label %513 unwind label %557

513:                                              ; preds = %510
  %514 = load double, ptr %25, align 8, !tbaa !14
  %515 = fneg double %512
  %516 = call double @llvm.fmuladd.f64(double %515, double %514, double 1.000000e+00)
  %517 = fmul double 2.000000e+00, %516
  %518 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #6
  store i64 0, ptr %51, align 8, !tbaa !12
  %519 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %518, ptr noundef nonnull align 8 dereferenceable(8) %51)
          to label %520 unwind label %561

520:                                              ; preds = %513
  %521 = load double, ptr %519, align 8, !tbaa !14
  %522 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %523 = load ptr, ptr %522, align 8, !tbaa !23
  %524 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #6
  store i64 0, ptr %52, align 8, !tbaa !12
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %524, ptr noundef nonnull align 8 dereferenceable(8) %52)
          to label %526 unwind label %565

526:                                              ; preds = %520
  %527 = load double, ptr %525, align 8, !tbaa !14
  %528 = invoke noundef double %523(double noundef %527)
          to label %529 unwind label %565

529:                                              ; preds = %526
  %530 = fmul double 2.000000e+00, %528
  %531 = load double, ptr %25, align 8, !tbaa !14
  %532 = fmul double %530, %531
  %533 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #6
  store i64 1, ptr %53, align 8, !tbaa !12
  %534 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %533, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %535 unwind label %569

535:                                              ; preds = %529
  %536 = load double, ptr %534, align 8, !tbaa !14
  %537 = load double, ptr %18, align 8, !tbaa !14
  %538 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 7
  %539 = load ptr, ptr %538, align 8, !tbaa !28
  %540 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #6
  store i64 0, ptr %54, align 8, !tbaa !12
  %541 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %540, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %542 unwind label %573

542:                                              ; preds = %535
  %543 = load double, ptr %541, align 8, !tbaa !14
  %544 = invoke noundef double %539(double noundef %543, double noundef 0.000000e+00)
          to label %545 unwind label %573

545:                                              ; preds = %542
  %546 = fneg double %537
  %547 = call double @llvm.fmuladd.f64(double %546, double %544, double %536)
  %548 = fmul double %532, %547
  %549 = call double @llvm.fmuladd.f64(double %517, double %521, double %548)
  %550 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #6
  store i64 0, ptr %55, align 8, !tbaa !12
  %551 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %550, ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %552 unwind label %577

552:                                              ; preds = %545
  %553 = load double, ptr %551, align 8, !tbaa !14
  %554 = fsub double %549, %553
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #6
  store i64 0, ptr %56, align 8, !tbaa !12
  %555 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %556 unwind label %581

556:                                              ; preds = %552
  store double %554, ptr %555, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %591

557:                                              ; preds = %510, %505
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %20, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %21, align 4
  br label %590

561:                                              ; preds = %513
  %562 = landingpad { ptr, i32 }
          cleanup
  %563 = extractvalue { ptr, i32 } %562, 0
  store ptr %563, ptr %20, align 8
  %564 = extractvalue { ptr, i32 } %562, 1
  store i32 %564, ptr %21, align 4
  br label %589

565:                                              ; preds = %526, %520
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %20, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %21, align 4
  br label %588

569:                                              ; preds = %529
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %20, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %21, align 4
  br label %587

573:                                              ; preds = %542, %535
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %20, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %21, align 4
  br label %586

577:                                              ; preds = %545
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %20, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %21, align 4
  br label %585

581:                                              ; preds = %552
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %20, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #6
  br label %585

585:                                              ; preds = %581, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #6
  br label %586

586:                                              ; preds = %585, %573
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #6
  br label %587

587:                                              ; preds = %586, %569
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #6
  br label %588

588:                                              ; preds = %587, %565
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #6
  br label %589

589:                                              ; preds = %588, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #6
  br label %590

590:                                              ; preds = %589, %557
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #6
  br label %819

591:                                              ; preds = %556, %500
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  store i32 1, ptr %57, align 4, !tbaa !10
  br label %592

592:                                              ; preds = %659, %591
  %593 = load i32, ptr %57, align 4, !tbaa !10
  %594 = load i32, ptr %15, align 4, !tbaa !10
  %595 = sub nsw i32 %594, 1
  %596 = icmp slt i32 %593, %595
  br i1 %596, label %598, label %597

597:                                              ; preds = %592
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  br label %696

598:                                              ; preds = %592
  %599 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %600 = load ptr, ptr %599, align 8, !tbaa !23
  %601 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #6
  %602 = load i32, ptr %57, align 4, !tbaa !10
  %603 = sext i32 %602 to i64
  store i64 %603, ptr %58, align 8, !tbaa !12
  %604 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %601, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %605 unwind label %662

605:                                              ; preds = %598
  %606 = load double, ptr %604, align 8, !tbaa !14
  %607 = invoke noundef double %600(double noundef %606)
          to label %608 unwind label %662

608:                                              ; preds = %605
  %609 = load double, ptr %25, align 8, !tbaa !14
  %610 = fneg double %607
  %611 = call double @llvm.fmuladd.f64(double %610, double %609, double 1.000000e+00)
  %612 = fmul double 2.000000e+00, %611
  %613 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #6
  %614 = load i32, ptr %57, align 4, !tbaa !10
  %615 = sext i32 %614 to i64
  store i64 %615, ptr %59, align 8, !tbaa !12
  %616 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %613, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %617 unwind label %666

617:                                              ; preds = %608
  %618 = load double, ptr %616, align 8, !tbaa !14
  %619 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %620 = load ptr, ptr %619, align 8, !tbaa !23
  %621 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #6
  %622 = load i32, ptr %57, align 4, !tbaa !10
  %623 = sext i32 %622 to i64
  store i64 %623, ptr %60, align 8, !tbaa !12
  %624 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %621, ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %625 unwind label %670

625:                                              ; preds = %617
  %626 = load double, ptr %624, align 8, !tbaa !14
  %627 = invoke noundef double %620(double noundef %626)
          to label %628 unwind label %670

628:                                              ; preds = %625
  %629 = load double, ptr %25, align 8, !tbaa !14
  %630 = fmul double %627, %629
  %631 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #6
  %632 = load i32, ptr %57, align 4, !tbaa !10
  %633 = add nsw i32 %632, 1
  %634 = sext i32 %633 to i64
  store i64 %634, ptr %61, align 8, !tbaa !12
  %635 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %631, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %636 unwind label %674

636:                                              ; preds = %628
  %637 = load double, ptr %635, align 8, !tbaa !14
  %638 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #6
  %639 = load i32, ptr %57, align 4, !tbaa !10
  %640 = sub nsw i32 %639, 1
  %641 = sext i32 %640 to i64
  store i64 %641, ptr %62, align 8, !tbaa !12
  %642 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %638, ptr noundef nonnull align 8 dereferenceable(8) %62)
          to label %643 unwind label %678

643:                                              ; preds = %636
  %644 = load double, ptr %642, align 8, !tbaa !14
  %645 = fadd double %637, %644
  %646 = fmul double %630, %645
  %647 = call double @llvm.fmuladd.f64(double %612, double %618, double %646)
  %648 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #6
  %649 = load i32, ptr %57, align 4, !tbaa !10
  %650 = sext i32 %649 to i64
  store i64 %650, ptr %63, align 8, !tbaa !12
  %651 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %648, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %652 unwind label %682

652:                                              ; preds = %643
  %653 = load double, ptr %651, align 8, !tbaa !14
  %654 = fsub double %647, %653
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #6
  %655 = load i32, ptr %57, align 4, !tbaa !10
  %656 = sext i32 %655 to i64
  store i64 %656, ptr %64, align 8, !tbaa !12
  %657 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %658 unwind label %686

658:                                              ; preds = %652
  store double %654, ptr %657, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  br label %659

659:                                              ; preds = %658
  %660 = load i32, ptr %57, align 4, !tbaa !10
  %661 = add nsw i32 %660, 1
  store i32 %661, ptr %57, align 4, !tbaa !10
  br label %592, !llvm.loop !32

662:                                              ; preds = %605, %598
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %20, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %21, align 4
  br label %695

666:                                              ; preds = %608
  %667 = landingpad { ptr, i32 }
          cleanup
  %668 = extractvalue { ptr, i32 } %667, 0
  store ptr %668, ptr %20, align 8
  %669 = extractvalue { ptr, i32 } %667, 1
  store i32 %669, ptr %21, align 4
  br label %694

670:                                              ; preds = %625, %617
  %671 = landingpad { ptr, i32 }
          cleanup
  %672 = extractvalue { ptr, i32 } %671, 0
  store ptr %672, ptr %20, align 8
  %673 = extractvalue { ptr, i32 } %671, 1
  store i32 %673, ptr %21, align 4
  br label %693

674:                                              ; preds = %628
  %675 = landingpad { ptr, i32 }
          cleanup
  %676 = extractvalue { ptr, i32 } %675, 0
  store ptr %676, ptr %20, align 8
  %677 = extractvalue { ptr, i32 } %675, 1
  store i32 %677, ptr %21, align 4
  br label %692

678:                                              ; preds = %636
  %679 = landingpad { ptr, i32 }
          cleanup
  %680 = extractvalue { ptr, i32 } %679, 0
  store ptr %680, ptr %20, align 8
  %681 = extractvalue { ptr, i32 } %679, 1
  store i32 %681, ptr %21, align 4
  br label %691

682:                                              ; preds = %643
  %683 = landingpad { ptr, i32 }
          cleanup
  %684 = extractvalue { ptr, i32 } %683, 0
  store ptr %684, ptr %20, align 8
  %685 = extractvalue { ptr, i32 } %683, 1
  store i32 %685, ptr %21, align 4
  br label %690

686:                                              ; preds = %652
  %687 = landingpad { ptr, i32 }
          cleanup
  %688 = extractvalue { ptr, i32 } %687, 0
  store ptr %688, ptr %20, align 8
  %689 = extractvalue { ptr, i32 } %687, 1
  store i32 %689, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #6
  br label %690

690:                                              ; preds = %686, %682
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #6
  br label %691

691:                                              ; preds = %690, %678
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #6
  br label %692

692:                                              ; preds = %691, %674
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #6
  br label %693

693:                                              ; preds = %692, %670
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #6
  br label %694

694:                                              ; preds = %693, %666
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #6
  br label %695

695:                                              ; preds = %694, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  br label %819

696:                                              ; preds = %597
  %697 = load i8, ptr %10, align 1, !tbaa !9
  %698 = zext i8 %697 to i32
  %699 = and i32 %698, 32
  %700 = icmp ne i32 %699, 0
  br i1 %700, label %701, label %807

701:                                              ; preds = %696
  %702 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %703 = load ptr, ptr %702, align 8, !tbaa !23
  %704 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #6
  %705 = load i32, ptr %15, align 4, !tbaa !10
  %706 = sub nsw i32 %705, 1
  %707 = sext i32 %706 to i64
  store i64 %707, ptr %65, align 8, !tbaa !12
  %708 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %704, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %709 unwind label %773

709:                                              ; preds = %701
  %710 = load double, ptr %708, align 8, !tbaa !14
  %711 = invoke noundef double %703(double noundef %710)
          to label %712 unwind label %773

712:                                              ; preds = %709
  %713 = load double, ptr %25, align 8, !tbaa !14
  %714 = fneg double %711
  %715 = call double @llvm.fmuladd.f64(double %714, double %713, double 1.000000e+00)
  %716 = fmul double 2.000000e+00, %715
  %717 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #6
  %718 = load i32, ptr %15, align 4, !tbaa !10
  %719 = sub nsw i32 %718, 1
  %720 = sext i32 %719 to i64
  store i64 %720, ptr %66, align 8, !tbaa !12
  %721 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %717, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %722 unwind label %777

722:                                              ; preds = %712
  %723 = load double, ptr %721, align 8, !tbaa !14
  %724 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 19
  %725 = load ptr, ptr %724, align 8, !tbaa !23
  %726 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #6
  %727 = load i32, ptr %15, align 4, !tbaa !10
  %728 = sub nsw i32 %727, 1
  %729 = sext i32 %728 to i64
  store i64 %729, ptr %67, align 8, !tbaa !12
  %730 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %726, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %731 unwind label %781

731:                                              ; preds = %722
  %732 = load double, ptr %730, align 8, !tbaa !14
  %733 = invoke noundef double %725(double noundef %732)
          to label %734 unwind label %781

734:                                              ; preds = %731
  %735 = fmul double 2.000000e+00, %733
  %736 = load double, ptr %25, align 8, !tbaa !14
  %737 = fmul double %735, %736
  %738 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #6
  %739 = load i32, ptr %15, align 4, !tbaa !10
  %740 = sub nsw i32 %739, 2
  %741 = sext i32 %740 to i64
  store i64 %741, ptr %68, align 8, !tbaa !12
  %742 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %738, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %743 unwind label %785

743:                                              ; preds = %734
  %744 = load double, ptr %742, align 8, !tbaa !14
  %745 = load double, ptr %18, align 8, !tbaa !14
  %746 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 8
  %747 = load ptr, ptr %746, align 8, !tbaa !31
  %748 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #6
  %749 = load i32, ptr %15, align 4, !tbaa !10
  %750 = sub nsw i32 %749, 1
  %751 = sext i32 %750 to i64
  store i64 %751, ptr %69, align 8, !tbaa !12
  %752 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %748, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %753 unwind label %789

753:                                              ; preds = %743
  %754 = load double, ptr %752, align 8, !tbaa !14
  %755 = invoke noundef double %747(double noundef %754, double noundef 0.000000e+00)
          to label %756 unwind label %789

756:                                              ; preds = %753
  %757 = call double @llvm.fmuladd.f64(double %745, double %755, double %744)
  %758 = fmul double %737, %757
  %759 = call double @llvm.fmuladd.f64(double %716, double %723, double %758)
  %760 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #6
  %761 = load i32, ptr %15, align 4, !tbaa !10
  %762 = sub nsw i32 %761, 1
  %763 = sext i32 %762 to i64
  store i64 %763, ptr %70, align 8, !tbaa !12
  %764 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %760, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %765 unwind label %793

765:                                              ; preds = %756
  %766 = load double, ptr %764, align 8, !tbaa !14
  %767 = fsub double %759, %766
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #6
  %768 = load i32, ptr %15, align 4, !tbaa !10
  %769 = sub nsw i32 %768, 1
  %770 = sext i32 %769 to i64
  store i64 %770, ptr %71, align 8, !tbaa !12
  %771 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %772 unwind label %797

772:                                              ; preds = %765
  store double %767, ptr %771, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %807

773:                                              ; preds = %709, %701
  %774 = landingpad { ptr, i32 }
          cleanup
  %775 = extractvalue { ptr, i32 } %774, 0
  store ptr %775, ptr %20, align 8
  %776 = extractvalue { ptr, i32 } %774, 1
  store i32 %776, ptr %21, align 4
  br label %806

777:                                              ; preds = %712
  %778 = landingpad { ptr, i32 }
          cleanup
  %779 = extractvalue { ptr, i32 } %778, 0
  store ptr %779, ptr %20, align 8
  %780 = extractvalue { ptr, i32 } %778, 1
  store i32 %780, ptr %21, align 4
  br label %805

781:                                              ; preds = %731, %722
  %782 = landingpad { ptr, i32 }
          cleanup
  %783 = extractvalue { ptr, i32 } %782, 0
  store ptr %783, ptr %20, align 8
  %784 = extractvalue { ptr, i32 } %782, 1
  store i32 %784, ptr %21, align 4
  br label %804

785:                                              ; preds = %734
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %20, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %21, align 4
  br label %803

789:                                              ; preds = %753, %743
  %790 = landingpad { ptr, i32 }
          cleanup
  %791 = extractvalue { ptr, i32 } %790, 0
  store ptr %791, ptr %20, align 8
  %792 = extractvalue { ptr, i32 } %790, 1
  store i32 %792, ptr %21, align 4
  br label %802

793:                                              ; preds = %756
  %794 = landingpad { ptr, i32 }
          cleanup
  %795 = extractvalue { ptr, i32 } %794, 0
  store ptr %795, ptr %20, align 8
  %796 = extractvalue { ptr, i32 } %794, 1
  store i32 %796, ptr %21, align 4
  br label %801

797:                                              ; preds = %765
  %798 = landingpad { ptr, i32 }
          cleanup
  %799 = extractvalue { ptr, i32 } %798, 0
  store ptr %799, ptr %20, align 8
  %800 = extractvalue { ptr, i32 } %798, 1
  store i32 %800, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #6
  br label %801

801:                                              ; preds = %797, %793
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #6
  br label %802

802:                                              ; preds = %801, %789
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #6
  br label %803

803:                                              ; preds = %802, %785
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #6
  br label %804

804:                                              ; preds = %803, %781
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #6
  br label %805

805:                                              ; preds = %804, %777
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #6
  br label %806

806:                                              ; preds = %805, %773
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #6
  br label %819

807:                                              ; preds = %772, %696
  br label %808

808:                                              ; preds = %807, %499
  %809 = load ptr, ptr %13, align 8, !tbaa !5
  %810 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 0
  %811 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %810, ptr noundef nonnull align 8 dereferenceable(24) %809)
          to label %812 unwind label %234

812:                                              ; preds = %808
  %813 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 18
  %814 = load double, ptr %813, align 8, !tbaa !16
  %815 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %72, i32 0, i32 17
  %816 = load double, ptr %815, align 8, !tbaa !33
  %817 = fadd double %816, %814
  store double %817, ptr %815, align 8, !tbaa !33
  store i1 true, ptr %16, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  %818 = load i1, ptr %16, align 1
  br i1 %818, label %822, label %821

819:                                              ; preds = %806, %695, %590, %498, %387, %280, %246, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  br label %820

820:                                              ; preds = %819, %152, %148, %144, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %823

821:                                              ; preds = %812
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  br label %822

822:                                              ; preds = %821, %812
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  ret void

823:                                              ; preds = %820
  %824 = load ptr, ptr %20, align 8
  %825 = load i32, ptr %21, align 4
  %826 = insertvalue { ptr, i32 } poison, ptr %824, 0
  %827 = insertvalue { ptr, i32 } %826, i32 %825, 1
  resume { ptr, i32 } %827
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #3

; Function Attrs: nounwind
declare double @sqrt(double noundef) #5

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdE4zeroERKm(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { inlinehint 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 #5 = { 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 #6 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!17, !15, i64 248}
!17 = !{!"_ZTSN3cda4math22differential_equations3EDPE", !18, i64 0, !19, i64 24, !20, i64 64, !21, i64 104, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !6, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !15, i64 240, !15, i64 248, !6, i64 256, !6, i64 264, !15, i64 272}
!18 = !{!"_ZTSN3cda4math10containers6VectorIdEE", !13, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSN3cda4math10containers6MatrixIdEE", !13, i64 0, !13, i64 8, !13, i64 16, !6, i64 24, !6, i64 32}
!20 = !{!"_ZTSN3cda4math10containers6MatrixIbEE", !13, i64 0, !13, i64 8, !13, i64 16, !6, i64 24, !6, i64 32}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !22, i64 0, !13, i64 8, !7, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!23 = !{!17, !6, i64 256}
!24 = !{!25, !25, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!17, !6, i64 160}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!17, !6, i64 168}
!32 = distinct !{!32, !30}
!33 = !{!17, !15, i64 240}


; 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::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.cda::math::containers::Vector" = type { i64, ptr, ptr }

@initEDP = external dso_local local_unnamed_addr global i8, align 1
@_ZL10EDPwarningB5cxx11 = external hidden global %"class.std::__cxx11::basic_string", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.10 = external hidden unnamed_addr constant [133 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_S6_(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, i8 noundef zeroext %2, i8 noundef zeroext %3, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca %"class.cda::math::containers::Vector", align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %58 = trunc i64 %57 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %sext = shl i64 %57, 32
  %59 = ashr exact i64 %sext, 32
  store i64 %59, ptr %8, align 8, !tbaa !5
  call void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %8)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %60 = add i32 %58, -1
  %61 = sext i32 %60 to i64
  store i64 %61, ptr %9, align 8, !tbaa !5
  %62 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %9)
  %63 = load double, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  store i64 0, ptr %10, align 8, !tbaa !5
  %64 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %65 = load double, ptr %64, align 8, !tbaa !9
  %66 = fsub double %63, %65
  %67 = sitofp i32 %60 to double
  %68 = fdiv double %66, %67
  %69 = fptosi double %68 to i32
  %70 = call i32 @llvm.abs.i32(i32 %69, i1 true)
  %71 = uitofp nneg i32 %70 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  %72 = getelementptr inbounds i8, ptr %1, i64 248
  %73 = load double, ptr %72, align 8, !tbaa !11
  %74 = getelementptr inbounds i8, ptr %1, i64 256
  %75 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store i64 0, ptr %11, align 8, !tbaa !5
  %76 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %11)
  %77 = load double, ptr %76, align 8, !tbaa !9
  %78 = invoke noundef double %75(double noundef %77)
          to label %79 unwind label %100

79:                                               ; preds = %7
  %80 = call double @sqrt(double noundef %78) #6
  %81 = fdiv double %71, %80
  %82 = fcmp ogt double %73, %81
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br i1 %82, label %83, label %106

83:                                               ; preds = %79
  %84 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  store i64 0, ptr %12, align 8, !tbaa !5
  %85 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %12)
  %86 = load double, ptr %85, align 8, !tbaa !9
  %87 = invoke noundef double %84(double noundef %86)
          to label %88 unwind label %102

88:                                               ; preds = %83
  %89 = call double @sqrt(double noundef %87) #6
  %90 = fdiv double %71, %89
  %91 = fmul double %90, 9.000000e-01
  store double %91, ptr %72, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  %92 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) @_ZL10EDPwarningB5cxx11)
          to label %93 unwind label %104

93:                                               ; preds = %88
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull @.str.10)
          to label %95 unwind label %104

95:                                               ; preds = %93
  %96 = load double, ptr %72, align 8, !tbaa !11
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %94, double noundef %96)
          to label %98 unwind label %104

98:                                               ; preds = %95
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %106 unwind label %104

100:                                              ; preds = %7
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  br label %372

102:                                              ; preds = %83
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  br label %372

104:                                              ; preds = %98, %95, %93, %88
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %372

106:                                              ; preds = %98, %79
  %107 = load double, ptr %72, align 8, !tbaa !11
  %108 = fmul double %107, %107
  %109 = fmul double %71, %71
  %110 = fdiv double %108, %109
  %111 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %112 unwind label %153

112:                                              ; preds = %106
  %113 = load i8, ptr @initEDP, align 1, !tbaa !20, !range !22, !noundef !23
  %114 = trunc nuw i8 %113 to i1
  br i1 %114, label %243, label %115

115:                                              ; preds = %112
  store i8 1, ptr @initEDP, align 1, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  store i64 %59, ptr %14, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdE4zeroERKm(ptr dead_on_unwind nonnull writable sret(%"class.cda::math::containers::Vector") align 8 %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %116 unwind label %155

116:                                              ; preds = %115
  %117 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %13)
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  %118 = zext i8 %2 to i32
  %119 = and i32 %118, 16
  %.not = icmp eq i32 %119, 0
  br i1 %.not, label %165, label %120

120:                                              ; preds = %116
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  store i64 0, ptr %15, align 8, !tbaa !5
  %121 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %122 = load double, ptr %121, align 8, !tbaa !9
  %123 = load double, ptr %72, align 8, !tbaa !11
  %124 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  store i64 0, ptr %16, align 8, !tbaa !5
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %126 = load double, ptr %125, align 8, !tbaa !9
  %127 = invoke noundef double %124(double noundef %126)
          to label %128 unwind label %157

128:                                              ; preds = %120
  %129 = fneg double %127
  %130 = call double @llvm.fmuladd.f64(double %129, double %110, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  store i64 0, ptr %17, align 8, !tbaa !5
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %132 = load double, ptr %131, align 8, !tbaa !9
  %133 = fmul double %130, %132
  %134 = call double @llvm.fmuladd.f64(double %122, double %123, double %133)
  %135 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  store i64 0, ptr %18, align 8, !tbaa !5
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %18)
  %137 = load double, ptr %136, align 8, !tbaa !9
  %138 = invoke noundef double %135(double noundef %137)
          to label %139 unwind label %159

139:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  store i64 1, ptr %19, align 8, !tbaa !5
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %19)
  %141 = load double, ptr %140, align 8, !tbaa !9
  %142 = getelementptr inbounds i8, ptr %1, i64 160
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  store i64 0, ptr %20, align 8, !tbaa !5
  %144 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %145 = load double, ptr %144, align 8, !tbaa !9
  %146 = invoke noundef double %143(double noundef %145, double noundef 0.000000e+00)
          to label %147 unwind label %161

147:                                              ; preds = %139
  %148 = fmul double %110, %138
  %149 = fneg double %71
  %150 = call double @llvm.fmuladd.f64(double %149, double %146, double %141)
  %151 = call double @llvm.fmuladd.f64(double %148, double %150, double %134)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  store i64 0, ptr %21, align 8, !tbaa !5
  %152 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %21)
  store double %151, ptr %152, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %165

153:                                              ; preds = %106
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %372

155:                                              ; preds = %115
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #6
  br label %372

157:                                              ; preds = %120
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %164

159:                                              ; preds = %128
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %139
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  br label %163

163:                                              ; preds = %161, %159
  %.pn = phi { ptr, i32 } [ %162, %161 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  br label %164

164:                                              ; preds = %163, %157
  %.pn.pn = phi { ptr, i32 } [ %.pn, %163 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  br label %372

165:                                              ; preds = %147, %116
  %166 = icmp sgt i32 %58, 2
  br i1 %166, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %165
  %wide.trip.count = zext nneg i32 %60 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %182, %165
  %167 = and i32 %118, 32
  %.not121 = icmp eq i32 %167, 0
  br i1 %.not121, label %366, label %202

.lr.ph:                                           ; preds = %.lr.ph.preheader, %182
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %182 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  store i64 %indvars.iv, ptr %22, align 8, !tbaa !5
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %169 = load double, ptr %168, align 8, !tbaa !9
  %170 = load double, ptr %72, align 8, !tbaa !11
  %171 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  store i64 %indvars.iv, ptr %23, align 8, !tbaa !5
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %23)
  %173 = load double, ptr %172, align 8, !tbaa !9
  %174 = invoke noundef double %171(double noundef %173)
          to label %175 unwind label %197

175:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  store i64 %indvars.iv, ptr %24, align 8, !tbaa !5
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %177 = load double, ptr %176, align 8, !tbaa !9
  %178 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  store i64 %indvars.iv, ptr %25, align 8, !tbaa !5
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %180 = load double, ptr %179, align 8, !tbaa !9
  %181 = invoke noundef double %178(double noundef %180)
          to label %182 unwind label %199

182:                                              ; preds = %175
  %183 = fneg double %174
  %184 = call double @llvm.fmuladd.f64(double %183, double %110, double 1.000000e+00)
  %185 = fmul double %184, %177
  %186 = call double @llvm.fmuladd.f64(double %169, double %170, double %185)
  %187 = fmul double %110, %181
  %188 = fmul double %187, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #6
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  store i64 %indvars.iv.next, ptr %26, align 8, !tbaa !5
  %189 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %26)
  %190 = load double, ptr %189, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  %191 = add nsw i64 %indvars.iv, -1
  store i64 %191, ptr %27, align 8, !tbaa !5
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = fadd double %190, %193
  %195 = call double @llvm.fmuladd.f64(double %188, double %194, double %186)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  store i64 %indvars.iv, ptr %28, align 8, !tbaa !5
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %28)
  store double %195, ptr %196, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !25

197:                                              ; preds = %.lr.ph
  %198 = landingpad { ptr, i32 }
          cleanup
  br label %201

199:                                              ; preds = %175
  %200 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  br label %201

201:                                              ; preds = %199, %197
  %.pn126 = phi { ptr, i32 } [ %200, %199 ], [ %198, %197 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  br label %372

202:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #6
  store i64 %61, ptr %29, align 8, !tbaa !5
  %203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %29)
  %204 = load double, ptr %203, align 8, !tbaa !9
  %205 = load double, ptr %72, align 8, !tbaa !11
  %206 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  store i64 %61, ptr %30, align 8, !tbaa !5
  %207 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %30)
  %208 = load double, ptr %207, align 8, !tbaa !9
  %209 = invoke noundef double %206(double noundef %208)
          to label %210 unwind label %235

210:                                              ; preds = %202
  %211 = fneg double %209
  %212 = call double @llvm.fmuladd.f64(double %211, double %110, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  store i64 %61, ptr %31, align 8, !tbaa !5
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %31)
  %214 = load double, ptr %213, align 8, !tbaa !9
  %215 = fmul double %212, %214
  %216 = call double @llvm.fmuladd.f64(double %204, double %205, double %215)
  %217 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #6
  store i64 %61, ptr %32, align 8, !tbaa !5
  %218 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %32)
  %219 = load double, ptr %218, align 8, !tbaa !9
  %220 = invoke noundef double %217(double noundef %219)
          to label %221 unwind label %237

221:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  %sext122 = add i64 %sext, -8589934592
  %222 = ashr exact i64 %sext122, 32
  store i64 %222, ptr %33, align 8, !tbaa !5
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %33)
  %224 = load double, ptr %223, align 8, !tbaa !9
  %225 = getelementptr inbounds i8, ptr %1, i64 168
  %226 = load ptr, ptr %225, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  store i64 %61, ptr %34, align 8, !tbaa !5
  %227 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %34)
  %228 = load double, ptr %227, align 8, !tbaa !9
  %229 = invoke noundef double %226(double noundef %228, double noundef 0.000000e+00)
          to label %230 unwind label %239

230:                                              ; preds = %221
  %231 = fmul double %110, %220
  %232 = call double @llvm.fmuladd.f64(double %71, double %229, double %224)
  %233 = call double @llvm.fmuladd.f64(double %231, double %232, double %216)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  store i64 %61, ptr %35, align 8, !tbaa !5
  %234 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %35)
  store double %233, ptr %234, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %366

235:                                              ; preds = %202
  %236 = landingpad { ptr, i32 }
          cleanup
  br label %242

237:                                              ; preds = %210
  %238 = landingpad { ptr, i32 }
          cleanup
  br label %241

239:                                              ; preds = %221
  %240 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  br label %241

241:                                              ; preds = %239, %237
  %.pn123 = phi { ptr, i32 } [ %240, %239 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  br label %242

242:                                              ; preds = %241, %235
  %.pn123.pn = phi { ptr, i32 } [ %.pn123, %241 ], [ %236, %235 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %372

243:                                              ; preds = %112
  %244 = zext i8 %2 to i32
  %245 = and i32 %244, 16
  %.not128 = icmp eq i32 %245, 0
  br i1 %.not128, label %288, label %246

246:                                              ; preds = %243
  %247 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  store i64 0, ptr %36, align 8, !tbaa !5
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %36)
  %249 = load double, ptr %248, align 8, !tbaa !9
  %250 = invoke noundef double %247(double noundef %249)
          to label %251 unwind label %280

251:                                              ; preds = %246
  %252 = fneg double %250
  %253 = call double @llvm.fmuladd.f64(double %252, double %110, double 1.000000e+00)
  %254 = fmul double %253, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  store i64 0, ptr %37, align 8, !tbaa !5
  %255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %37)
  %256 = load double, ptr %255, align 8, !tbaa !9
  %257 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  store i64 0, ptr %38, align 8, !tbaa !5
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %38)
  %259 = load double, ptr %258, align 8, !tbaa !9
  %260 = invoke noundef double %257(double noundef %259)
          to label %261 unwind label %282

261:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  store i64 1, ptr %39, align 8, !tbaa !5
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %39)
  %263 = load double, ptr %262, align 8, !tbaa !9
  %264 = getelementptr inbounds i8, ptr %1, i64 160
  %265 = load ptr, ptr %264, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #6
  store i64 0, ptr %40, align 8, !tbaa !5
  %266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %267 = load double, ptr %266, align 8, !tbaa !9
  %268 = invoke noundef double %265(double noundef %267, double noundef 0.000000e+00)
          to label %269 unwind label %284

269:                                              ; preds = %261
  %270 = fmul double %260, 2.000000e+00
  %271 = fmul double %110, %270
  %272 = fneg double %71
  %273 = call double @llvm.fmuladd.f64(double %272, double %268, double %263)
  %274 = fmul double %271, %273
  %275 = call double @llvm.fmuladd.f64(double %254, double %256, double %274)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #6
  store i64 0, ptr %41, align 8, !tbaa !5
  %276 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %277 = load double, ptr %276, align 8, !tbaa !9
  %278 = fsub double %275, %277
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #6
  store i64 0, ptr %42, align 8, !tbaa !5
  %279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %42)
  store double %278, ptr %279, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  br label %288

280:                                              ; preds = %246
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %287

282:                                              ; preds = %251
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %286

284:                                              ; preds = %261
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  br label %286

286:                                              ; preds = %284, %282
  %.pn129 = phi { ptr, i32 } [ %285, %284 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  br label %287

287:                                              ; preds = %286, %280
  %.pn129.pn = phi { ptr, i32 } [ %.pn129, %286 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  br label %372

288:                                              ; preds = %269, %243
  %289 = icmp sgt i32 %58, 2
  br i1 %289, label %.lr.ph144.preheader, label %._crit_edge145

.lr.ph144.preheader:                              ; preds = %288
  %wide.trip.count150 = zext nneg i32 %60 to i64
  br label %.lr.ph144

._crit_edge145:                                   ; preds = %302, %288
  %290 = and i32 %244, 32
  %.not132 = icmp eq i32 %290, 0
  br i1 %.not132, label %366, label %324

.lr.ph144:                                        ; preds = %.lr.ph144.preheader, %302
  %indvars.iv147 = phi i64 [ 1, %.lr.ph144.preheader ], [ %indvars.iv.next148, %302 ]
  %291 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #6
  store i64 %indvars.iv147, ptr %43, align 8, !tbaa !5
  %292 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %43)
  %293 = load double, ptr %292, align 8, !tbaa !9
  %294 = invoke noundef double %291(double noundef %293)
          to label %295 unwind label %319

295:                                              ; preds = %.lr.ph144
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #6
  store i64 %indvars.iv147, ptr %44, align 8, !tbaa !5
  %296 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %297 = load double, ptr %296, align 8, !tbaa !9
  %298 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #6
  store i64 %indvars.iv147, ptr %45, align 8, !tbaa !5
  %299 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %45)
  %300 = load double, ptr %299, align 8, !tbaa !9
  %301 = invoke noundef double %298(double noundef %300)
          to label %302 unwind label %321

302:                                              ; preds = %295
  %303 = fneg double %294
  %304 = call double @llvm.fmuladd.f64(double %303, double %110, double 1.000000e+00)
  %305 = fmul double %304, 2.000000e+00
  %306 = fmul double %110, %301
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #6
  %indvars.iv.next148 = add nuw nsw i64 %indvars.iv147, 1
  store i64 %indvars.iv.next148, ptr %46, align 8, !tbaa !5
  %307 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %308 = load double, ptr %307, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #6
  %309 = add nsw i64 %indvars.iv147, -1
  store i64 %309, ptr %47, align 8, !tbaa !5
  %310 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %47)
  %311 = load double, ptr %310, align 8, !tbaa !9
  %312 = fadd double %308, %311
  %313 = fmul double %306, %312
  %314 = call double @llvm.fmuladd.f64(double %305, double %297, double %313)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #6
  store i64 %indvars.iv147, ptr %48, align 8, !tbaa !5
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %316 = load double, ptr %315, align 8, !tbaa !9
  %317 = fsub double %314, %316
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #6
  store i64 %indvars.iv147, ptr %49, align 8, !tbaa !5
  %318 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
  store double %317, ptr %318, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  %exitcond151.not = icmp eq i64 %indvars.iv.next148, %wide.trip.count150
  br i1 %exitcond151.not, label %._crit_edge145, label %.lr.ph144, !llvm.loop !28

319:                                              ; preds = %.lr.ph144
  %320 = landingpad { ptr, i32 }
          cleanup
  br label %323

321:                                              ; preds = %295
  %322 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #6
  br label %323

323:                                              ; preds = %321, %319
  %.pn137 = phi { ptr, i32 } [ %322, %321 ], [ %320, %319 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  br label %372

324:                                              ; preds = %._crit_edge145
  %325 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #6
  store i64 %61, ptr %50, align 8, !tbaa !5
  %326 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %50)
  %327 = load double, ptr %326, align 8, !tbaa !9
  %328 = invoke noundef double %325(double noundef %327)
          to label %329 unwind label %358

329:                                              ; preds = %324
  %330 = fneg double %328
  %331 = call double @llvm.fmuladd.f64(double %330, double %110, double 1.000000e+00)
  %332 = fmul double %331, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #6
  store i64 %61, ptr %51, align 8, !tbaa !5
  %333 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %51)
  %334 = load double, ptr %333, align 8, !tbaa !9
  %335 = load ptr, ptr %74, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #6
  store i64 %61, ptr %52, align 8, !tbaa !5
  %336 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %52)
  %337 = load double, ptr %336, align 8, !tbaa !9
  %338 = invoke noundef double %335(double noundef %337)
          to label %339 unwind label %360

339:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #6
  %sext133 = add i64 %sext, -8589934592
  %340 = ashr exact i64 %sext133, 32
  store i64 %340, ptr %53, align 8, !tbaa !5
  %341 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %53)
  %342 = load double, ptr %341, align 8, !tbaa !9
  %343 = getelementptr inbounds i8, ptr %1, i64 168
  %344 = load ptr, ptr %343, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #6
  store i64 %61, ptr %54, align 8, !tbaa !5
  %345 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %54)
  %346 = load double, ptr %345, align 8, !tbaa !9
  %347 = invoke noundef double %344(double noundef %346, double noundef 0.000000e+00)
          to label %348 unwind label %362

348:                                              ; preds = %339
  %349 = fmul double %338, 2.000000e+00
  %350 = fmul double %110, %349
  %351 = call double @llvm.fmuladd.f64(double %71, double %347, double %342)
  %352 = fmul double %350, %351
  %353 = call double @llvm.fmuladd.f64(double %332, double %334, double %352)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #6
  store i64 %61, ptr %55, align 8, !tbaa !5
  %354 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(8) %55)
  %355 = load double, ptr %354, align 8, !tbaa !9
  %356 = fsub double %353, %355
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #6
  store i64 %61, ptr %56, align 8, !tbaa !5
  %357 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %56)
  store double %356, ptr %357, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #6
  br label %366

358:                                              ; preds = %324
  %359 = landingpad { ptr, i32 }
          cleanup
  br label %365

360:                                              ; preds = %329
  %361 = landingpad { ptr, i32 }
          cleanup
  br label %364

362:                                              ; preds = %339
  %363 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #6
  br label %364

364:                                              ; preds = %362, %360
  %.pn134 = phi { ptr, i32 } [ %363, %362 ], [ %361, %360 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  br label %365

365:                                              ; preds = %364, %358
  %.pn134.pn = phi { ptr, i32 } [ %.pn134, %364 ], [ %359, %358 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #6
  br label %372

366:                                              ; preds = %._crit_edge145, %348, %._crit_edge, %230
  %367 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull align 8 dereferenceable(24) %5)
  %368 = load double, ptr %72, align 8, !tbaa !11
  %369 = getelementptr inbounds i8, ptr %1, i64 240
  %370 = load double, ptr %369, align 8, !tbaa !29
  %371 = fadd double %368, %370
  store double %371, ptr %369, align 8, !tbaa !29
  ret void

372:                                              ; preds = %153, %155, %164, %201, %242, %287, %323, %365, %104, %102, %100
  %.pn137.pn.pn = phi { ptr, i32 } [ %105, %104 ], [ %103, %102 ], [ %101, %100 ], [ %.pn137, %323 ], [ %.pn134.pn, %365 ], [ %.pn129.pn, %287 ], [ %.pn126, %201 ], [ %.pn123.pn, %242 ], [ %.pn.pn, %164 ], [ %156, %155 ], [ %154, %153 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #6
  resume { ptr, i32 } %.pn137.pn.pn
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8), double noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdE4zeroERKm(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { inlinehint 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 #5 = { 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 #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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !10, i64 248}
!12 = !{!"_ZTSN3cda4math22differential_equations3EDPE", !13, i64 0, !15, i64 24, !16, i64 64, !17, i64 104, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !14, i64 224, !14, i64 232, !10, i64 240, !10, i64 248, !14, i64 256, !14, i64 264, !10, i64 272}
!13 = !{!"_ZTSN3cda4math10containers6VectorIdEE", !6, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !7, i64 0}
!15 = !{!"_ZTSN3cda4math10containers6MatrixIdEE", !6, i64 0, !6, i64 8, !6, i64 16, !14, i64 24, !14, i64 32}
!16 = !{!"_ZTSN3cda4math10containers6MatrixIbEE", !6, i64 0, !6, i64 8, !6, i64 16, !14, i64 24, !14, i64 32}
!17 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !18, i64 0, !6, i64 8, !7, i64 16}
!18 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !14, i64 0}
!19 = !{!12, !14, i64 256}
!20 = !{!21, !21, i64 0}
!21 = !{!"bool", !7, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = !{!12, !14, i64 160}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = !{!12, !14, i64 168}
!28 = distinct !{!28, !26}
!29 = !{!12, !10, i64 240}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass