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

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

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: mustprogress uwtable
declare dso_local void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40), 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 uwtable
declare dso_local void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(24)) #2

; 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: mustprogress uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveHEATEhhRNS0_10containers6VectorIdEES6_(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) #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i1, align 1
  %15 = alloca i64, align 8
  %16 = alloca %"class.cda::math::containers::Matrix", align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.cda::math::containers::Vector", align 8
  %22 = alloca i64, align 8
  %23 = alloca %"class.cda::math::containers::Vector", align 8
  %24 = alloca i64, align 8
  %25 = alloca double, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca double, align 8
  %29 = alloca i32, align 4
  %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 %"class.cda::math::containers::Vector", align 8
  %44 = alloca i64, align 8
  %45 = alloca %"class.cda::math::containers::Matrix", align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca %"class.cda::math::containers::Vector", align 8
  %49 = alloca i64, align 8
  %50 = alloca %"class.cda::math::containers::Vector", align 8
  %51 = alloca i64, align 8
  %52 = alloca double, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca double, align 8
  %56 = alloca i32, align 4
  %57 = alloca i64, align 8
  %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
  %72 = alloca i64, align 8
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i64, align 8
  %77 = alloca i64, align 8
  %78 = alloca i64, align 8
  %79 = alloca i64, align 8
  %80 = alloca i64, align 8
  %81 = alloca i64, align 8
  %82 = alloca %"class.cda::math::containers::Vector", align 8
  %83 = alloca i64, align 8
  %84 = alloca %"class.cda::math::containers::Matrix", align 8
  %85 = alloca i64, align 8
  %86 = alloca i64, align 8
  %87 = alloca %"class.cda::math::containers::Vector", align 8
  %88 = alloca i64, align 8
  %89 = alloca %"class.cda::math::containers::Vector", align 8
  %90 = alloca i64, align 8
  %91 = alloca double, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca double, align 8
  %95 = alloca i64, align 8
  %96 = alloca i64, align 8
  %97 = alloca i64, align 8
  %98 = alloca i64, align 8
  %99 = alloca i64, align 8
  %100 = alloca i64, align 8
  %101 = alloca i64, align 8
  %102 = alloca i64, align 8
  %103 = alloca i64, align 8
  %104 = alloca i64, align 8
  %105 = alloca i64, align 8
  %106 = alloca i64, align 8
  %107 = alloca i32, align 4
  %108 = alloca i64, align 8
  %109 = alloca i64, align 8
  %110 = alloca i64, align 8
  %111 = alloca i64, align 8
  %112 = alloca i64, align 8
  %113 = alloca i64, align 8
  %114 = alloca i64, align 8
  %115 = alloca i64, align 8
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca i64, align 8
  %119 = alloca i64, align 8
  %120 = alloca i64, align 8
  %121 = alloca %"class.cda::math::containers::Vector", align 8
  %122 = alloca i64, align 8
  %123 = alloca %"class.cda::math::containers::Matrix", align 8
  %124 = alloca i64, align 8
  %125 = alloca i64, align 8
  %126 = alloca %"class.cda::math::containers::Vector", align 8
  %127 = alloca i64, align 8
  %128 = alloca double, align 8
  %129 = alloca i64, align 8
  %130 = alloca i64, align 8
  %131 = alloca double, align 8
  %132 = alloca i64, align 8
  %133 = alloca i64, align 8
  %134 = alloca i64, align 8
  %135 = alloca i64, align 8
  %136 = alloca i64, align 8
  %137 = alloca i64, align 8
  %138 = alloca i64, align 8
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca i64, align 8
  %142 = alloca i64, align 8
  %143 = alloca i64, align 8
  %144 = alloca i32, align 4
  %145 = alloca i64, align 8
  %146 = alloca i64, align 8
  %147 = alloca i64, align 8
  %148 = alloca i64, align 8
  %149 = alloca i64, align 8
  %150 = alloca i64, align 8
  %151 = alloca i64, align 8
  %152 = alloca i64, align 8
  %153 = alloca i64, align 8
  %154 = alloca i64, align 8
  %155 = alloca i64, align 8
  %156 = alloca i64, align 8
  %157 = alloca i64, align 8
  %158 = alloca i64, align 8
  %159 = alloca i64, align 8
  %160 = alloca i64, align 8
  %161 = alloca i64, align 8
  %162 = alloca i64, align 8
  %163 = alloca i64, align 8
  %164 = alloca i64, align 8
  %165 = alloca i64, align 8
  %166 = alloca i64, align 8
  %167 = alloca i64, align 8
  %168 = alloca i64, align 8
  %169 = alloca i64, align 8
  %170 = alloca %"class.cda::math::containers::Vector", align 8
  store ptr %0, ptr %7, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store i8 %2, ptr %9, align 1, !tbaa !9
  store i8 %3, ptr %10, align 1, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  %171 = load ptr, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %172 = load ptr, ptr %11, align 8, !tbaa !5
  %173 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %172)
  %174 = trunc i64 %173 to i32
  store i32 %174, ptr %13, align 4, !tbaa !10
  store i1 false, ptr %14, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %175 = load i32, ptr %13, align 4, !tbaa !10
  %176 = sext i32 %175 to i64
  store i64 %176, ptr %15, align 8, !tbaa !12
  call void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %15)
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  %177 = load i8, ptr %9, align 1, !tbaa !9
  %178 = zext i8 %177 to i32
  %179 = and i32 %178, 1
  %180 = icmp ne i32 %179, 0
  br i1 %180, label %181, label %497

181:                                              ; preds = %6
  %182 = load i8, ptr %9, align 1, !tbaa !9
  %183 = zext i8 %182 to i32
  %184 = and i32 %183, 2
  %185 = icmp ne i32 %184, 0
  br i1 %185, label %186, label %497

186:                                              ; preds = %181
  call void @llvm.lifetime.start.p0(i64 40, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  %187 = load i32, ptr %13, align 4, !tbaa !10
  %188 = sub nsw i32 %187, 2
  %189 = sext i32 %188 to i64
  store i64 %189, ptr %17, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  store i64 3, ptr %18, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %190 unwind label %233

190:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  %191 = load i32, ptr %13, align 4, !tbaa !10
  %192 = sub nsw i32 %191, 2
  %193 = sext i32 %192 to i64
  store i64 %193, ptr %22, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %194 unwind label %237

194:                                              ; preds = %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %195 = load i32, ptr %13, align 4, !tbaa !10
  %196 = sub nsw i32 %195, 2
  %197 = sext i32 %196 to i64
  store i64 %197, ptr %24, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %198 unwind label %241

198:                                              ; preds = %194
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %199 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %200 = load i32, ptr %13, align 4, !tbaa !10
  %201 = sub nsw i32 %200, 1
  %202 = sext i32 %201 to i64
  store i64 %202, ptr %26, align 8, !tbaa !12
  %203 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %199, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %204 unwind label %245

204:                                              ; preds = %198
  %205 = load double, ptr %203, align 8, !tbaa !14
  %206 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  store i64 0, ptr %27, align 8, !tbaa !12
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %206, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %208 unwind label %249

208:                                              ; preds = %204
  %209 = load double, ptr %207, align 8, !tbaa !14
  %210 = fsub double %205, %209
  %211 = load i32, ptr %13, align 4, !tbaa !10
  %212 = sub nsw i32 %211, 1
  %213 = sitofp i32 %212 to double
  %214 = fdiv double %210, %213
  %215 = fptosi double %214 to i32
  %216 = call i32 @llvm.abs.i32(i32 %215, i1 true)
  %217 = sitofp i32 %216 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  store double %217, ptr %25, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  %218 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 18
  %219 = load double, ptr %218, align 8, !tbaa !16
  %220 = load double, ptr %25, align 8, !tbaa !14
  %221 = load double, ptr %25, align 8, !tbaa !14
  %222 = fmul double %220, %221
  %223 = fdiv double %219, %222
  store double %223, ptr %28, align 8, !tbaa !14
  %224 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %225 = load double, ptr %224, align 8, !tbaa !23
  %226 = fcmp olt double %225, 0.000000e+00
  br i1 %226, label %231, label %227

227:                                              ; preds = %208
  %228 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %229 = load double, ptr %228, align 8, !tbaa !23
  %230 = fcmp ogt double %229, 1.000000e+00
  br i1 %230, label %231, label %254

231:                                              ; preds = %227, %208
  %232 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  store double 0x3FE5555555555555, ptr %232, align 8, !tbaa !23
  br label %254

233:                                              ; preds = %186
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %19, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  br label %496

237:                                              ; preds = %190
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %19, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  br label %495

241:                                              ; preds = %194
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %19, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  br label %494

245:                                              ; preds = %198
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %19, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %20, align 4
  br label %253

249:                                              ; preds = %204
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %19, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  br label %253

253:                                              ; preds = %249, %245
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  br label %493

254:                                              ; preds = %231, %227
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  store i32 0, ptr %29, align 4, !tbaa !10
  br label %255

255:                                              ; preds = %402, %254
  %256 = load i32, ptr %29, align 4, !tbaa !10
  %257 = load i32, ptr %13, align 4, !tbaa !10
  %258 = sub nsw i32 %257, 2
  %259 = icmp slt i32 %256, %258
  br i1 %259, label %261, label %260

260:                                              ; preds = %255
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %467

261:                                              ; preds = %255
  %262 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %263 = load ptr, ptr %262, align 8, !tbaa !24
  %264 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %265 = load i32, ptr %29, align 4, !tbaa !10
  %266 = sext i32 %265 to i64
  store i64 %266, ptr %30, align 8, !tbaa !12
  %267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %264, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %268 unwind label %405

268:                                              ; preds = %261
  %269 = load double, ptr %267, align 8, !tbaa !14
  %270 = invoke noundef double %263(double noundef %269)
          to label %271 unwind label %405

271:                                              ; preds = %268
  %272 = fneg double %270
  %273 = load double, ptr %28, align 8, !tbaa !14
  %274 = fmul double %272, %273
  %275 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %276 = load double, ptr %275, align 8, !tbaa !23
  %277 = fmul double %274, %276
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  %278 = load i32, ptr %29, align 4, !tbaa !10
  %279 = sext i32 %278 to i64
  store i64 %279, ptr %31, align 8, !tbaa !12
  %280 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %281 unwind label %409

281:                                              ; preds = %271
  %282 = getelementptr inbounds double, ptr %280, i64 0
  store double %277, ptr %282, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  %283 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %284 = load ptr, ptr %283, align 8, !tbaa !24
  %285 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %286 = load i32, ptr %29, align 4, !tbaa !10
  %287 = sext i32 %286 to i64
  store i64 %287, ptr %32, align 8, !tbaa !12
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %285, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %289 unwind label %414

289:                                              ; preds = %281
  %290 = load double, ptr %288, align 8, !tbaa !14
  %291 = invoke noundef double %284(double noundef %290)
          to label %292 unwind label %414

292:                                              ; preds = %289
  %293 = fmul double 2.000000e+00, %291
  %294 = load double, ptr %28, align 8, !tbaa !14
  %295 = fmul double %293, %294
  %296 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %297 = load double, ptr %296, align 8, !tbaa !23
  %298 = call double @llvm.fmuladd.f64(double %295, double %297, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %299 = load i32, ptr %29, align 4, !tbaa !10
  %300 = sext i32 %299 to i64
  store i64 %300, ptr %33, align 8, !tbaa !12
  %301 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %302 unwind label %418

302:                                              ; preds = %292
  %303 = getelementptr inbounds double, ptr %301, i64 1
  store double %298, ptr %303, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  %304 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %305 = load ptr, ptr %304, align 8, !tbaa !24
  %306 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  %307 = load i32, ptr %29, align 4, !tbaa !10
  %308 = sext i32 %307 to i64
  store i64 %308, ptr %34, align 8, !tbaa !12
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %306, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %310 unwind label %423

310:                                              ; preds = %302
  %311 = load double, ptr %309, align 8, !tbaa !14
  %312 = invoke noundef double %305(double noundef %311)
          to label %313 unwind label %423

313:                                              ; preds = %310
  %314 = fneg double %312
  %315 = load double, ptr %28, align 8, !tbaa !14
  %316 = fmul double %314, %315
  %317 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %318 = load double, ptr %317, align 8, !tbaa !23
  %319 = fmul double %316, %318
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  %320 = load i32, ptr %29, align 4, !tbaa !10
  %321 = sext i32 %320 to i64
  store i64 %321, ptr %35, align 8, !tbaa !12
  %322 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %323 unwind label %427

323:                                              ; preds = %313
  %324 = getelementptr inbounds double, ptr %322, i64 2
  store double %319, ptr %324, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  %325 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %326 = load ptr, ptr %325, align 8, !tbaa !24
  %327 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %328 = load i32, ptr %29, align 4, !tbaa !10
  %329 = sext i32 %328 to i64
  store i64 %329, ptr %36, align 8, !tbaa !12
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %327, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %331 unwind label %432

331:                                              ; preds = %323
  %332 = load double, ptr %330, align 8, !tbaa !14
  %333 = invoke noundef double %326(double noundef %332)
          to label %334 unwind label %432

334:                                              ; preds = %331
  %335 = load double, ptr %28, align 8, !tbaa !14
  %336 = fmul double %333, %335
  %337 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %338 = load double, ptr %337, align 8, !tbaa !23
  %339 = fsub double 1.000000e+00, %338
  %340 = fmul double %336, %339
  %341 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  %342 = load i32, ptr %29, align 4, !tbaa !10
  %343 = add nsw i32 %342, 2
  %344 = sext i32 %343 to i64
  store i64 %344, ptr %37, align 8, !tbaa !12
  %345 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %341, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %346 unwind label %436

346:                                              ; preds = %334
  %347 = load double, ptr %345, align 8, !tbaa !14
  %348 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %349 = load ptr, ptr %348, align 8, !tbaa !24
  %350 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  %351 = load i32, ptr %29, align 4, !tbaa !10
  %352 = sext i32 %351 to i64
  store i64 %352, ptr %38, align 8, !tbaa !12
  %353 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %350, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %354 unwind label %440

354:                                              ; preds = %346
  %355 = load double, ptr %353, align 8, !tbaa !14
  %356 = invoke noundef double %349(double noundef %355)
          to label %357 unwind label %440

357:                                              ; preds = %354
  %358 = fmul double 2.000000e+00, %356
  %359 = load double, ptr %28, align 8, !tbaa !14
  %360 = fmul double %358, %359
  %361 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %362 = load double, ptr %361, align 8, !tbaa !23
  %363 = fsub double 1.000000e+00, %362
  %364 = fneg double %360
  %365 = call double @llvm.fmuladd.f64(double %364, double %363, double 1.000000e+00)
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  %367 = load i32, ptr %29, align 4, !tbaa !10
  %368 = add nsw i32 %367, 1
  %369 = sext i32 %368 to i64
  store i64 %369, ptr %39, align 8, !tbaa !12
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %366, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %371 unwind label %444

371:                                              ; preds = %357
  %372 = load double, ptr %370, align 8, !tbaa !14
  %373 = fmul double %365, %372
  %374 = call double @llvm.fmuladd.f64(double %340, double %347, double %373)
  %375 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %376 = load ptr, ptr %375, align 8, !tbaa !24
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  %378 = load i32, ptr %29, align 4, !tbaa !10
  %379 = sext i32 %378 to i64
  store i64 %379, ptr %40, align 8, !tbaa !12
  %380 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %377, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %381 unwind label %448

381:                                              ; preds = %371
  %382 = load double, ptr %380, align 8, !tbaa !14
  %383 = invoke noundef double %376(double noundef %382)
          to label %384 unwind label %448

384:                                              ; preds = %381
  %385 = load double, ptr %28, align 8, !tbaa !14
  %386 = fmul double %383, %385
  %387 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %388 = load double, ptr %387, align 8, !tbaa !23
  %389 = fsub double 1.000000e+00, %388
  %390 = fmul double %386, %389
  %391 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %392 = load i32, ptr %29, align 4, !tbaa !10
  %393 = sext i32 %392 to i64
  store i64 %393, ptr %41, align 8, !tbaa !12
  %394 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %391, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %395 unwind label %452

395:                                              ; preds = %384
  %396 = load double, ptr %394, align 8, !tbaa !14
  %397 = call double @llvm.fmuladd.f64(double %390, double %396, double %374)
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  %398 = load i32, ptr %29, align 4, !tbaa !10
  %399 = sext i32 %398 to i64
  store i64 %399, ptr %42, align 8, !tbaa !12
  %400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %401 unwind label %456

401:                                              ; preds = %395
  store double %397, ptr %400, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  br label %402

402:                                              ; preds = %401
  %403 = load i32, ptr %29, align 4, !tbaa !10
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %29, align 4, !tbaa !10
  br label %255, !llvm.loop !25

405:                                              ; preds = %268, %261
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %19, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %20, align 4
  br label %413

409:                                              ; preds = %271
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %19, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  br label %413

413:                                              ; preds = %409, %405
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  br label %466

414:                                              ; preds = %289, %281
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %19, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %20, align 4
  br label %422

418:                                              ; preds = %292
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %19, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  br label %422

422:                                              ; preds = %418, %414
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  br label %466

423:                                              ; preds = %310, %302
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %19, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %20, align 4
  br label %431

427:                                              ; preds = %313
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %19, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  br label %431

431:                                              ; preds = %427, %423
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  br label %466

432:                                              ; preds = %331, %323
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %19, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %20, align 4
  br label %465

436:                                              ; preds = %334
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %19, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %20, align 4
  br label %464

440:                                              ; preds = %354, %346
  %441 = landingpad { ptr, i32 }
          cleanup
  %442 = extractvalue { ptr, i32 } %441, 0
  store ptr %442, ptr %19, align 8
  %443 = extractvalue { ptr, i32 } %441, 1
  store i32 %443, ptr %20, align 4
  br label %463

444:                                              ; preds = %357
  %445 = landingpad { ptr, i32 }
          cleanup
  %446 = extractvalue { ptr, i32 } %445, 0
  store ptr %446, ptr %19, align 8
  %447 = extractvalue { ptr, i32 } %445, 1
  store i32 %447, ptr %20, align 4
  br label %462

448:                                              ; preds = %381, %371
  %449 = landingpad { ptr, i32 }
          cleanup
  %450 = extractvalue { ptr, i32 } %449, 0
  store ptr %450, ptr %19, align 8
  %451 = extractvalue { ptr, i32 } %449, 1
  store i32 %451, ptr %20, align 4
  br label %461

452:                                              ; preds = %384
  %453 = landingpad { ptr, i32 }
          cleanup
  %454 = extractvalue { ptr, i32 } %453, 0
  store ptr %454, ptr %19, align 8
  %455 = extractvalue { ptr, i32 } %453, 1
  store i32 %455, ptr %20, align 4
  br label %460

456:                                              ; preds = %395
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %19, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  br label %460

460:                                              ; preds = %456, %452
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  br label %461

461:                                              ; preds = %460, %448
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  br label %462

462:                                              ; preds = %461, %444
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  br label %463

463:                                              ; preds = %462, %440
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  br label %464

464:                                              ; preds = %463, %436
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  br label %465

465:                                              ; preds = %464, %432
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  br label %466

466:                                              ; preds = %465, %431, %422, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %492

467:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 24, ptr %43) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind writable sret(%"class.cda::math::containers::Vector") align 8 %43, ptr noundef nonnull align 8 dereferenceable(40) %16, ptr noundef nonnull align 8 dereferenceable(24) %21)
          to label %468 unwind label %475

468:                                              ; preds = %467
  %469 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %43)
          to label %470 unwind label %479

470:                                              ; preds = %468
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #4
  %471 = load ptr, ptr %12, align 8, !tbaa !5
  %472 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %471)
          to label %473 unwind label %484

473:                                              ; preds = %470
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  store i64 1, ptr %44, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %474 unwind label %488

474:                                              ; preds = %473
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %16) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #4
  br label %497

475:                                              ; preds = %467
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %19, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %20, align 4
  br label %483

479:                                              ; preds = %468
  %480 = landingpad { ptr, i32 }
          cleanup
  %481 = extractvalue { ptr, i32 } %480, 0
  store ptr %481, ptr %19, align 8
  %482 = extractvalue { ptr, i32 } %480, 1
  store i32 %482, ptr %20, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #4
  br label %483

483:                                              ; preds = %479, %475
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #4
  br label %492

484:                                              ; preds = %470
  %485 = landingpad { ptr, i32 }
          cleanup
  %486 = extractvalue { ptr, i32 } %485, 0
  store ptr %486, ptr %19, align 8
  %487 = extractvalue { ptr, i32 } %485, 1
  store i32 %487, ptr %20, align 4
  br label %492

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

492:                                              ; preds = %488, %484, %483, %466
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  br label %493

493:                                              ; preds = %492, %253
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #4
  br label %494

494:                                              ; preds = %493, %241
  call void @llvm.lifetime.end.p0(i64 24, ptr %23) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #4
  br label %495

495:                                              ; preds = %494, %237
  call void @llvm.lifetime.end.p0(i64 24, ptr %21) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %16) #4
  br label %496

496:                                              ; preds = %495, %233
  call void @llvm.lifetime.end.p0(i64 40, ptr %16) #4
  br label %2169

497:                                              ; preds = %474, %181, %6
  %498 = load i8, ptr %9, align 1, !tbaa !9
  %499 = zext i8 %498 to i32
  %500 = and i32 %499, 1
  %501 = icmp ne i32 %500, 0
  br i1 %501, label %502, label %1017

502:                                              ; preds = %497
  %503 = load i8, ptr %9, align 1, !tbaa !9
  %504 = zext i8 %503 to i32
  %505 = and i32 %504, 32
  %506 = icmp ne i32 %505, 0
  br i1 %506, label %507, label %1017

507:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 40, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  %508 = load i32, ptr %13, align 4, !tbaa !10
  %509 = sub nsw i32 %508, 1
  %510 = sext i32 %509 to i64
  store i64 %510, ptr %46, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  store i64 3, ptr %47, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %511 unwind label %554

511:                                              ; preds = %507
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  %512 = load i32, ptr %13, align 4, !tbaa !10
  %513 = sub nsw i32 %512, 1
  %514 = sext i32 %513 to i64
  store i64 %514, ptr %49, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %515 unwind label %558

515:                                              ; preds = %511
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  %516 = load i32, ptr %13, align 4, !tbaa !10
  %517 = sub nsw i32 %516, 1
  %518 = sext i32 %517 to i64
  store i64 %518, ptr %51, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(8) %51)
          to label %519 unwind label %562

519:                                              ; preds = %515
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  %520 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #4
  %521 = load i32, ptr %13, align 4, !tbaa !10
  %522 = sub nsw i32 %521, 1
  %523 = sext i32 %522 to i64
  store i64 %523, ptr %53, align 8, !tbaa !12
  %524 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %520, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %525 unwind label %566

525:                                              ; preds = %519
  %526 = load double, ptr %524, align 8, !tbaa !14
  %527 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #4
  store i64 0, ptr %54, align 8, !tbaa !12
  %528 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %527, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %529 unwind label %570

529:                                              ; preds = %525
  %530 = load double, ptr %528, align 8, !tbaa !14
  %531 = fsub double %526, %530
  %532 = load i32, ptr %13, align 4, !tbaa !10
  %533 = sub nsw i32 %532, 1
  %534 = sitofp i32 %533 to double
  %535 = fdiv double %531, %534
  %536 = fptosi double %535 to i32
  %537 = call i32 @llvm.abs.i32(i32 %536, i1 true)
  %538 = sitofp i32 %537 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  store double %538, ptr %52, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #4
  %539 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 18
  %540 = load double, ptr %539, align 8, !tbaa !16
  %541 = load double, ptr %52, align 8, !tbaa !14
  %542 = load double, ptr %52, align 8, !tbaa !14
  %543 = fmul double %541, %542
  %544 = fdiv double %540, %543
  store double %544, ptr %55, align 8, !tbaa !14
  %545 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %546 = load double, ptr %545, align 8, !tbaa !23
  %547 = fcmp olt double %546, 0.000000e+00
  br i1 %547, label %552, label %548

548:                                              ; preds = %529
  %549 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %550 = load double, ptr %549, align 8, !tbaa !23
  %551 = fcmp ogt double %550, 1.000000e+00
  br i1 %551, label %552, label %575

552:                                              ; preds = %548, %529
  %553 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  store double 0x3FE5555555555555, ptr %553, align 8, !tbaa !23
  br label %575

554:                                              ; preds = %507
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %19, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  br label %1016

558:                                              ; preds = %511
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %19, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  br label %1015

562:                                              ; preds = %515
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %19, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  br label %1014

566:                                              ; preds = %519
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %19, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %20, align 4
  br label %574

570:                                              ; preds = %525
  %571 = landingpad { ptr, i32 }
          cleanup
  %572 = extractvalue { ptr, i32 } %571, 0
  store ptr %572, ptr %19, align 8
  %573 = extractvalue { ptr, i32 } %571, 1
  store i32 %573, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  br label %574

574:                                              ; preds = %570, %566
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  br label %1013

575:                                              ; preds = %552, %548
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #4
  store i32 0, ptr %56, align 4, !tbaa !10
  br label %576

576:                                              ; preds = %723, %575
  %577 = load i32, ptr %56, align 4, !tbaa !10
  %578 = load i32, ptr %13, align 4, !tbaa !10
  %579 = sub nsw i32 %578, 2
  %580 = icmp slt i32 %577, %579
  br i1 %580, label %582, label %581

581:                                              ; preds = %576
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %788

582:                                              ; preds = %576
  %583 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %584 = load ptr, ptr %583, align 8, !tbaa !24
  %585 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #4
  %586 = load i32, ptr %56, align 4, !tbaa !10
  %587 = sext i32 %586 to i64
  store i64 %587, ptr %57, align 8, !tbaa !12
  %588 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %585, ptr noundef nonnull align 8 dereferenceable(8) %57)
          to label %589 unwind label %726

589:                                              ; preds = %582
  %590 = load double, ptr %588, align 8, !tbaa !14
  %591 = invoke noundef double %584(double noundef %590)
          to label %592 unwind label %726

592:                                              ; preds = %589
  %593 = fneg double %591
  %594 = load double, ptr %55, align 8, !tbaa !14
  %595 = fmul double %593, %594
  %596 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %597 = load double, ptr %596, align 8, !tbaa !23
  %598 = fmul double %595, %597
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #4
  %599 = load i32, ptr %56, align 4, !tbaa !10
  %600 = sext i32 %599 to i64
  store i64 %600, ptr %58, align 8, !tbaa !12
  %601 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %602 unwind label %730

602:                                              ; preds = %592
  %603 = getelementptr inbounds double, ptr %601, i64 0
  store double %598, ptr %603, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  %604 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %605 = load ptr, ptr %604, align 8, !tbaa !24
  %606 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #4
  %607 = load i32, ptr %56, align 4, !tbaa !10
  %608 = sext i32 %607 to i64
  store i64 %608, ptr %59, align 8, !tbaa !12
  %609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %606, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %610 unwind label %735

610:                                              ; preds = %602
  %611 = load double, ptr %609, align 8, !tbaa !14
  %612 = invoke noundef double %605(double noundef %611)
          to label %613 unwind label %735

613:                                              ; preds = %610
  %614 = fmul double 2.000000e+00, %612
  %615 = load double, ptr %55, align 8, !tbaa !14
  %616 = fmul double %614, %615
  %617 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %618 = load double, ptr %617, align 8, !tbaa !23
  %619 = call double @llvm.fmuladd.f64(double %616, double %618, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #4
  %620 = load i32, ptr %56, align 4, !tbaa !10
  %621 = sext i32 %620 to i64
  store i64 %621, ptr %60, align 8, !tbaa !12
  %622 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %623 unwind label %739

623:                                              ; preds = %613
  %624 = getelementptr inbounds double, ptr %622, i64 1
  store double %619, ptr %624, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  %625 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %626 = load ptr, ptr %625, align 8, !tbaa !24
  %627 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  %628 = load i32, ptr %56, align 4, !tbaa !10
  %629 = sext i32 %628 to i64
  store i64 %629, ptr %61, align 8, !tbaa !12
  %630 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %627, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %631 unwind label %744

631:                                              ; preds = %623
  %632 = load double, ptr %630, align 8, !tbaa !14
  %633 = invoke noundef double %626(double noundef %632)
          to label %634 unwind label %744

634:                                              ; preds = %631
  %635 = fneg double %633
  %636 = load double, ptr %55, align 8, !tbaa !14
  %637 = fmul double %635, %636
  %638 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %639 = load double, ptr %638, align 8, !tbaa !23
  %640 = fmul double %637, %639
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #4
  %641 = load i32, ptr %56, align 4, !tbaa !10
  %642 = sext i32 %641 to i64
  store i64 %642, ptr %62, align 8, !tbaa !12
  %643 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %62)
          to label %644 unwind label %748

644:                                              ; preds = %634
  %645 = getelementptr inbounds double, ptr %643, i64 2
  store double %640, ptr %645, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  %646 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %647 = load ptr, ptr %646, align 8, !tbaa !24
  %648 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  %649 = load i32, ptr %56, 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 %753

652:                                              ; preds = %644
  %653 = load double, ptr %651, align 8, !tbaa !14
  %654 = invoke noundef double %647(double noundef %653)
          to label %655 unwind label %753

655:                                              ; preds = %652
  %656 = load double, ptr %55, align 8, !tbaa !14
  %657 = fmul double %654, %656
  %658 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %659 = load double, ptr %658, align 8, !tbaa !23
  %660 = fsub double 1.000000e+00, %659
  %661 = fmul double %657, %660
  %662 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #4
  %663 = load i32, ptr %56, align 4, !tbaa !10
  %664 = add nsw i32 %663, 2
  %665 = sext i32 %664 to i64
  store i64 %665, ptr %64, align 8, !tbaa !12
  %666 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %662, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %667 unwind label %757

667:                                              ; preds = %655
  %668 = load double, ptr %666, align 8, !tbaa !14
  %669 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %670 = load ptr, ptr %669, align 8, !tbaa !24
  %671 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #4
  %672 = load i32, ptr %56, align 4, !tbaa !10
  %673 = sext i32 %672 to i64
  store i64 %673, ptr %65, align 8, !tbaa !12
  %674 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %671, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %675 unwind label %761

675:                                              ; preds = %667
  %676 = load double, ptr %674, align 8, !tbaa !14
  %677 = invoke noundef double %670(double noundef %676)
          to label %678 unwind label %761

678:                                              ; preds = %675
  %679 = fmul double 2.000000e+00, %677
  %680 = load double, ptr %55, align 8, !tbaa !14
  %681 = fmul double %679, %680
  %682 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %683 = load double, ptr %682, align 8, !tbaa !23
  %684 = fsub double 1.000000e+00, %683
  %685 = fneg double %681
  %686 = call double @llvm.fmuladd.f64(double %685, double %684, double 1.000000e+00)
  %687 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #4
  %688 = load i32, ptr %56, align 4, !tbaa !10
  %689 = add nsw i32 %688, 1
  %690 = sext i32 %689 to i64
  store i64 %690, ptr %66, align 8, !tbaa !12
  %691 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %687, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %692 unwind label %765

692:                                              ; preds = %678
  %693 = load double, ptr %691, align 8, !tbaa !14
  %694 = fmul double %686, %693
  %695 = call double @llvm.fmuladd.f64(double %661, double %668, double %694)
  %696 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %697 = load ptr, ptr %696, align 8, !tbaa !24
  %698 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #4
  %699 = load i32, ptr %56, align 4, !tbaa !10
  %700 = sext i32 %699 to i64
  store i64 %700, ptr %67, align 8, !tbaa !12
  %701 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %698, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %702 unwind label %769

702:                                              ; preds = %692
  %703 = load double, ptr %701, align 8, !tbaa !14
  %704 = invoke noundef double %697(double noundef %703)
          to label %705 unwind label %769

705:                                              ; preds = %702
  %706 = load double, ptr %55, align 8, !tbaa !14
  %707 = fmul double %704, %706
  %708 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %709 = load double, ptr %708, align 8, !tbaa !23
  %710 = fsub double 1.000000e+00, %709
  %711 = fmul double %707, %710
  %712 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #4
  %713 = load i32, ptr %56, align 4, !tbaa !10
  %714 = sext i32 %713 to i64
  store i64 %714, ptr %68, align 8, !tbaa !12
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %712, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %716 unwind label %773

716:                                              ; preds = %705
  %717 = load double, ptr %715, align 8, !tbaa !14
  %718 = call double @llvm.fmuladd.f64(double %711, double %717, double %695)
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  %719 = load i32, ptr %56, align 4, !tbaa !10
  %720 = sext i32 %719 to i64
  store i64 %720, ptr %69, align 8, !tbaa !12
  %721 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %722 unwind label %777

722:                                              ; preds = %716
  store double %718, ptr %721, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  br label %723

723:                                              ; preds = %722
  %724 = load i32, ptr %56, align 4, !tbaa !10
  %725 = add nsw i32 %724, 1
  store i32 %725, ptr %56, align 4, !tbaa !10
  br label %576, !llvm.loop !27

726:                                              ; preds = %589, %582
  %727 = landingpad { ptr, i32 }
          cleanup
  %728 = extractvalue { ptr, i32 } %727, 0
  store ptr %728, ptr %19, align 8
  %729 = extractvalue { ptr, i32 } %727, 1
  store i32 %729, ptr %20, align 4
  br label %734

730:                                              ; preds = %592
  %731 = landingpad { ptr, i32 }
          cleanup
  %732 = extractvalue { ptr, i32 } %731, 0
  store ptr %732, ptr %19, align 8
  %733 = extractvalue { ptr, i32 } %731, 1
  store i32 %733, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  br label %734

734:                                              ; preds = %730, %726
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  br label %787

735:                                              ; preds = %610, %602
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %19, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %20, align 4
  br label %743

739:                                              ; preds = %613
  %740 = landingpad { ptr, i32 }
          cleanup
  %741 = extractvalue { ptr, i32 } %740, 0
  store ptr %741, ptr %19, align 8
  %742 = extractvalue { ptr, i32 } %740, 1
  store i32 %742, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  br label %743

743:                                              ; preds = %739, %735
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  br label %787

744:                                              ; preds = %631, %623
  %745 = landingpad { ptr, i32 }
          cleanup
  %746 = extractvalue { ptr, i32 } %745, 0
  store ptr %746, ptr %19, align 8
  %747 = extractvalue { ptr, i32 } %745, 1
  store i32 %747, ptr %20, align 4
  br label %752

748:                                              ; preds = %634
  %749 = landingpad { ptr, i32 }
          cleanup
  %750 = extractvalue { ptr, i32 } %749, 0
  store ptr %750, ptr %19, align 8
  %751 = extractvalue { ptr, i32 } %749, 1
  store i32 %751, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  br label %752

752:                                              ; preds = %748, %744
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  br label %787

753:                                              ; preds = %652, %644
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %19, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %20, align 4
  br label %786

757:                                              ; preds = %655
  %758 = landingpad { ptr, i32 }
          cleanup
  %759 = extractvalue { ptr, i32 } %758, 0
  store ptr %759, ptr %19, align 8
  %760 = extractvalue { ptr, i32 } %758, 1
  store i32 %760, ptr %20, align 4
  br label %785

761:                                              ; preds = %675, %667
  %762 = landingpad { ptr, i32 }
          cleanup
  %763 = extractvalue { ptr, i32 } %762, 0
  store ptr %763, ptr %19, align 8
  %764 = extractvalue { ptr, i32 } %762, 1
  store i32 %764, ptr %20, align 4
  br label %784

765:                                              ; preds = %678
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %19, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %20, align 4
  br label %783

769:                                              ; preds = %702, %692
  %770 = landingpad { ptr, i32 }
          cleanup
  %771 = extractvalue { ptr, i32 } %770, 0
  store ptr %771, ptr %19, align 8
  %772 = extractvalue { ptr, i32 } %770, 1
  store i32 %772, ptr %20, align 4
  br label %782

773:                                              ; preds = %705
  %774 = landingpad { ptr, i32 }
          cleanup
  %775 = extractvalue { ptr, i32 } %774, 0
  store ptr %775, ptr %19, align 8
  %776 = extractvalue { ptr, i32 } %774, 1
  store i32 %776, ptr %20, align 4
  br label %781

777:                                              ; preds = %716
  %778 = landingpad { ptr, i32 }
          cleanup
  %779 = extractvalue { ptr, i32 } %778, 0
  store ptr %779, ptr %19, align 8
  %780 = extractvalue { ptr, i32 } %778, 1
  store i32 %780, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  br label %781

781:                                              ; preds = %777, %773
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  br label %782

782:                                              ; preds = %781, %769
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  br label %783

783:                                              ; preds = %782, %765
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  br label %784

784:                                              ; preds = %783, %761
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  br label %785

785:                                              ; preds = %784, %757
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  br label %786

786:                                              ; preds = %785, %753
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  br label %787

787:                                              ; preds = %786, %752, %743, %734
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  br label %1012

788:                                              ; preds = %581
  %789 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %790 = load ptr, ptr %789, align 8, !tbaa !24
  %791 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #4
  %792 = load i32, ptr %13, align 4, !tbaa !10
  %793 = sub nsw i32 %792, 1
  %794 = sext i32 %793 to i64
  store i64 %794, ptr %70, align 8, !tbaa !12
  %795 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %791, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %796 unwind label %939

796:                                              ; preds = %788
  %797 = load double, ptr %795, align 8, !tbaa !14
  %798 = invoke noundef double %790(double noundef %797)
          to label %799 unwind label %939

799:                                              ; preds = %796
  %800 = fmul double -2.000000e+00, %798
  %801 = load double, ptr %55, align 8, !tbaa !14
  %802 = fmul double %800, %801
  %803 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %804 = load double, ptr %803, align 8, !tbaa !23
  %805 = fmul double %802, %804
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #4
  %806 = load i32, ptr %13, align 4, !tbaa !10
  %807 = sub nsw i32 %806, 2
  %808 = sext i32 %807 to i64
  store i64 %808, ptr %71, align 8, !tbaa !12
  %809 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %810 unwind label %943

810:                                              ; preds = %799
  %811 = getelementptr inbounds double, ptr %809, i64 0
  store double %805, ptr %811, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  %812 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %813 = load ptr, ptr %812, align 8, !tbaa !24
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #4
  %815 = load i32, ptr %13, align 4, !tbaa !10
  %816 = sub nsw i32 %815, 1
  %817 = sext i32 %816 to i64
  store i64 %817, ptr %72, align 8, !tbaa !12
  %818 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %814, ptr noundef nonnull align 8 dereferenceable(8) %72)
          to label %819 unwind label %948

819:                                              ; preds = %810
  %820 = load double, ptr %818, align 8, !tbaa !14
  %821 = invoke noundef double %813(double noundef %820)
          to label %822 unwind label %948

822:                                              ; preds = %819
  %823 = fmul double 2.000000e+00, %821
  %824 = load double, ptr %55, align 8, !tbaa !14
  %825 = fmul double %823, %824
  %826 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %827 = load double, ptr %826, align 8, !tbaa !23
  %828 = call double @llvm.fmuladd.f64(double %825, double %827, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #4
  %829 = load i32, ptr %13, align 4, !tbaa !10
  %830 = sub nsw i32 %829, 2
  %831 = sext i32 %830 to i64
  store i64 %831, ptr %73, align 8, !tbaa !12
  %832 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %73)
          to label %833 unwind label %952

833:                                              ; preds = %822
  %834 = getelementptr inbounds double, ptr %832, i64 1
  store double %828, ptr %834, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #4
  %835 = load i32, ptr %13, align 4, !tbaa !10
  %836 = sub nsw i32 %835, 2
  %837 = sext i32 %836 to i64
  store i64 %837, ptr %74, align 8, !tbaa !12
  %838 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %839 unwind label %957

839:                                              ; preds = %833
  %840 = getelementptr inbounds double, ptr %838, i64 2
  store double 0.000000e+00, ptr %840, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  %841 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %842 = load ptr, ptr %841, align 8, !tbaa !24
  %843 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #4
  %844 = load i32, ptr %13, align 4, !tbaa !10
  %845 = sub nsw i32 %844, 1
  %846 = sext i32 %845 to i64
  store i64 %846, ptr %75, align 8, !tbaa !12
  %847 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %843, ptr noundef nonnull align 8 dereferenceable(8) %75)
          to label %848 unwind label %961

848:                                              ; preds = %839
  %849 = load double, ptr %847, align 8, !tbaa !14
  %850 = invoke noundef double %842(double noundef %849)
          to label %851 unwind label %961

851:                                              ; preds = %848
  %852 = fmul double 2.000000e+00, %850
  %853 = load double, ptr %55, align 8, !tbaa !14
  %854 = fmul double %852, %853
  %855 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %856 = load double, ptr %855, align 8, !tbaa !23
  %857 = fsub double 1.000000e+00, %856
  %858 = fmul double %854, %857
  %859 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #4
  %860 = load i32, ptr %13, align 4, !tbaa !10
  %861 = sub nsw i32 %860, 2
  %862 = sext i32 %861 to i64
  store i64 %862, ptr %76, align 8, !tbaa !12
  %863 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %859, ptr noundef nonnull align 8 dereferenceable(8) %76)
          to label %864 unwind label %965

864:                                              ; preds = %851
  %865 = load double, ptr %863, align 8, !tbaa !14
  %866 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %867 = load ptr, ptr %866, align 8, !tbaa !24
  %868 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #4
  %869 = load i32, ptr %13, align 4, !tbaa !10
  %870 = sub nsw i32 %869, 1
  %871 = sext i32 %870 to i64
  store i64 %871, ptr %77, align 8, !tbaa !12
  %872 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %868, ptr noundef nonnull align 8 dereferenceable(8) %77)
          to label %873 unwind label %969

873:                                              ; preds = %864
  %874 = load double, ptr %872, align 8, !tbaa !14
  %875 = invoke noundef double %867(double noundef %874)
          to label %876 unwind label %969

876:                                              ; preds = %873
  %877 = fmul double 2.000000e+00, %875
  %878 = load double, ptr %55, align 8, !tbaa !14
  %879 = fmul double %877, %878
  %880 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %881 = load double, ptr %880, align 8, !tbaa !23
  %882 = fsub double 1.000000e+00, %881
  %883 = fneg double %879
  %884 = call double @llvm.fmuladd.f64(double %883, double %882, double 1.000000e+00)
  %885 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #4
  %886 = load i32, ptr %13, align 4, !tbaa !10
  %887 = sub nsw i32 %886, 1
  %888 = sext i32 %887 to i64
  store i64 %888, ptr %78, align 8, !tbaa !12
  %889 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %885, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %890 unwind label %973

890:                                              ; preds = %876
  %891 = load double, ptr %889, align 8, !tbaa !14
  %892 = fmul double %884, %891
  %893 = call double @llvm.fmuladd.f64(double %858, double %865, double %892)
  %894 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %895 = load ptr, ptr %894, align 8, !tbaa !24
  %896 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #4
  %897 = load i32, ptr %13, align 4, !tbaa !10
  %898 = sub nsw i32 %897, 1
  %899 = sext i32 %898 to i64
  store i64 %899, ptr %79, align 8, !tbaa !12
  %900 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %896, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %901 unwind label %977

901:                                              ; preds = %890
  %902 = load double, ptr %900, align 8, !tbaa !14
  %903 = invoke noundef double %895(double noundef %902)
          to label %904 unwind label %977

904:                                              ; preds = %901
  %905 = fmul double 2.000000e+00, %903
  %906 = load double, ptr %55, align 8, !tbaa !14
  %907 = fmul double %905, %906
  %908 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %909 = load double, ptr %908, align 8, !tbaa !23
  %910 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %909, double 1.000000e+00)
  %911 = fmul double %907, %910
  %912 = load double, ptr %52, align 8, !tbaa !14
  %913 = fmul double %911, %912
  %914 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 8
  %915 = load ptr, ptr %914, align 8, !tbaa !28
  %916 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #4
  %917 = load i32, ptr %13, align 4, !tbaa !10
  %918 = sub nsw i32 %917, 1
  %919 = sext i32 %918 to i64
  store i64 %919, ptr %80, align 8, !tbaa !12
  %920 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %916, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %921 unwind label %981

921:                                              ; preds = %904
  %922 = load double, ptr %920, align 8, !tbaa !14
  %923 = invoke noundef double %915(double noundef %922, double noundef 0.000000e+00)
          to label %924 unwind label %981

924:                                              ; preds = %921
  %925 = call double @llvm.fmuladd.f64(double %913, double %923, double %893)
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #4
  %926 = load i32, ptr %13, align 4, !tbaa !10
  %927 = sub nsw i32 %926, 2
  %928 = sext i32 %927 to i64
  store i64 %928, ptr %81, align 8, !tbaa !12
  %929 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %930 unwind label %985

930:                                              ; preds = %924
  store double %925, ptr %929, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %82) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind writable sret(%"class.cda::math::containers::Vector") align 8 %82, ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %931 unwind label %995

931:                                              ; preds = %930
  %932 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(24) %82)
          to label %933 unwind label %999

933:                                              ; preds = %931
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #4
  %934 = load ptr, ptr %12, align 8, !tbaa !5
  %935 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %934)
          to label %936 unwind label %1004

936:                                              ; preds = %933
  %937 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #4
  store i64 1, ptr %83, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %937, ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef nonnull align 8 dereferenceable(24) %50)
          to label %938 unwind label %1008

938:                                              ; preds = %936
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %45) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %45) #4
  br label %1017

939:                                              ; preds = %796, %788
  %940 = landingpad { ptr, i32 }
          cleanup
  %941 = extractvalue { ptr, i32 } %940, 0
  store ptr %941, ptr %19, align 8
  %942 = extractvalue { ptr, i32 } %940, 1
  store i32 %942, ptr %20, align 4
  br label %947

943:                                              ; preds = %799
  %944 = landingpad { ptr, i32 }
          cleanup
  %945 = extractvalue { ptr, i32 } %944, 0
  store ptr %945, ptr %19, align 8
  %946 = extractvalue { ptr, i32 } %944, 1
  store i32 %946, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  br label %947

947:                                              ; preds = %943, %939
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  br label %1012

948:                                              ; preds = %819, %810
  %949 = landingpad { ptr, i32 }
          cleanup
  %950 = extractvalue { ptr, i32 } %949, 0
  store ptr %950, ptr %19, align 8
  %951 = extractvalue { ptr, i32 } %949, 1
  store i32 %951, ptr %20, align 4
  br label %956

952:                                              ; preds = %822
  %953 = landingpad { ptr, i32 }
          cleanup
  %954 = extractvalue { ptr, i32 } %953, 0
  store ptr %954, ptr %19, align 8
  %955 = extractvalue { ptr, i32 } %953, 1
  store i32 %955, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  br label %956

956:                                              ; preds = %952, %948
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  br label %1012

957:                                              ; preds = %833
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %19, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  br label %1012

961:                                              ; preds = %848, %839
  %962 = landingpad { ptr, i32 }
          cleanup
  %963 = extractvalue { ptr, i32 } %962, 0
  store ptr %963, ptr %19, align 8
  %964 = extractvalue { ptr, i32 } %962, 1
  store i32 %964, ptr %20, align 4
  br label %994

965:                                              ; preds = %851
  %966 = landingpad { ptr, i32 }
          cleanup
  %967 = extractvalue { ptr, i32 } %966, 0
  store ptr %967, ptr %19, align 8
  %968 = extractvalue { ptr, i32 } %966, 1
  store i32 %968, ptr %20, align 4
  br label %993

969:                                              ; preds = %873, %864
  %970 = landingpad { ptr, i32 }
          cleanup
  %971 = extractvalue { ptr, i32 } %970, 0
  store ptr %971, ptr %19, align 8
  %972 = extractvalue { ptr, i32 } %970, 1
  store i32 %972, ptr %20, align 4
  br label %992

973:                                              ; preds = %876
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %19, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %20, align 4
  br label %991

977:                                              ; preds = %901, %890
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %19, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %20, align 4
  br label %990

981:                                              ; preds = %921, %904
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %19, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %20, align 4
  br label %989

985:                                              ; preds = %924
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %19, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #4
  br label %989

989:                                              ; preds = %985, %981
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #4
  br label %990

990:                                              ; preds = %989, %977
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #4
  br label %991

991:                                              ; preds = %990, %973
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #4
  br label %992

992:                                              ; preds = %991, %969
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  br label %993

993:                                              ; preds = %992, %965
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  br label %994

994:                                              ; preds = %993, %961
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  br label %1012

995:                                              ; preds = %930
  %996 = landingpad { ptr, i32 }
          cleanup
  %997 = extractvalue { ptr, i32 } %996, 0
  store ptr %997, ptr %19, align 8
  %998 = extractvalue { ptr, i32 } %996, 1
  store i32 %998, ptr %20, align 4
  br label %1003

999:                                              ; preds = %931
  %1000 = landingpad { ptr, i32 }
          cleanup
  %1001 = extractvalue { ptr, i32 } %1000, 0
  store ptr %1001, ptr %19, align 8
  %1002 = extractvalue { ptr, i32 } %1000, 1
  store i32 %1002, ptr %20, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %82) #4
  br label %1003

1003:                                             ; preds = %999, %995
  call void @llvm.lifetime.end.p0(i64 24, ptr %82) #4
  br label %1012

1004:                                             ; preds = %933
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %19, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %20, align 4
  br label %1012

1008:                                             ; preds = %936
  %1009 = landingpad { ptr, i32 }
          cleanup
  %1010 = extractvalue { ptr, i32 } %1009, 0
  store ptr %1010, ptr %19, align 8
  %1011 = extractvalue { ptr, i32 } %1009, 1
  store i32 %1011, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #4
  br label %1012

1012:                                             ; preds = %1008, %1004, %1003, %994, %957, %956, %947, %787
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  br label %1013

1013:                                             ; preds = %1012, %574
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #4
  br label %1014

1014:                                             ; preds = %1013, %562
  call void @llvm.lifetime.end.p0(i64 24, ptr %50) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #4
  br label %1015

1015:                                             ; preds = %1014, %558
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %45) #4
  br label %1016

1016:                                             ; preds = %1015, %554
  call void @llvm.lifetime.end.p0(i64 40, ptr %45) #4
  br label %2169

1017:                                             ; preds = %938, %502, %497
  %1018 = load i8, ptr %9, align 1, !tbaa !9
  %1019 = zext i8 %1018 to i32
  %1020 = and i32 %1019, 16
  %1021 = icmp ne i32 %1020, 0
  br i1 %1021, label %1022, label %1501

1022:                                             ; preds = %1017
  %1023 = load i8, ptr %9, align 1, !tbaa !9
  %1024 = zext i8 %1023 to i32
  %1025 = and i32 %1024, 2
  %1026 = icmp ne i32 %1025, 0
  br i1 %1026, label %1027, label %1501

1027:                                             ; preds = %1022
  call void @llvm.lifetime.start.p0(i64 40, ptr %84) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #4
  %1028 = load i32, ptr %13, align 4, !tbaa !10
  %1029 = sub nsw i32 %1028, 1
  %1030 = sext i32 %1029 to i64
  store i64 %1030, ptr %85, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #4
  store i64 3, ptr %86, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %1031 unwind label %1074

1031:                                             ; preds = %1027
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %87) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #4
  %1032 = load i32, ptr %13, align 4, !tbaa !10
  %1033 = sub nsw i32 %1032, 1
  %1034 = sext i32 %1033 to i64
  store i64 %1034, ptr %88, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %1035 unwind label %1078

1035:                                             ; preds = %1031
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %89) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #4
  %1036 = load i32, ptr %13, align 4, !tbaa !10
  %1037 = sub nsw i32 %1036, 1
  %1038 = sext i32 %1037 to i64
  store i64 %1038, ptr %90, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %89, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %1039 unwind label %1082

1039:                                             ; preds = %1035
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #4
  %1040 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #4
  %1041 = load i32, ptr %13, align 4, !tbaa !10
  %1042 = sub nsw i32 %1041, 1
  %1043 = sext i32 %1042 to i64
  store i64 %1043, ptr %92, align 8, !tbaa !12
  %1044 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1040, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %1045 unwind label %1086

1045:                                             ; preds = %1039
  %1046 = load double, ptr %1044, align 8, !tbaa !14
  %1047 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #4
  store i64 0, ptr %93, align 8, !tbaa !12
  %1048 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1047, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %1049 unwind label %1090

1049:                                             ; preds = %1045
  %1050 = load double, ptr %1048, align 8, !tbaa !14
  %1051 = fsub double %1046, %1050
  %1052 = load i32, ptr %13, align 4, !tbaa !10
  %1053 = sub nsw i32 %1052, 1
  %1054 = sitofp i32 %1053 to double
  %1055 = fdiv double %1051, %1054
  %1056 = fptosi double %1055 to i32
  %1057 = call i32 @llvm.abs.i32(i32 %1056, i1 true)
  %1058 = sitofp i32 %1057 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  store double %1058, ptr %91, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #4
  %1059 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 18
  %1060 = load double, ptr %1059, align 8, !tbaa !16
  %1061 = load double, ptr %91, align 8, !tbaa !14
  %1062 = load double, ptr %91, align 8, !tbaa !14
  %1063 = fmul double %1061, %1062
  %1064 = fdiv double %1060, %1063
  store double %1064, ptr %94, align 8, !tbaa !14
  %1065 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1066 = load double, ptr %1065, align 8, !tbaa !23
  %1067 = fcmp olt double %1066, 0.000000e+00
  br i1 %1067, label %1072, label %1068

1068:                                             ; preds = %1049
  %1069 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1070 = load double, ptr %1069, align 8, !tbaa !23
  %1071 = fcmp ogt double %1070, 1.000000e+00
  br i1 %1071, label %1072, label %1095

1072:                                             ; preds = %1068, %1049
  %1073 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  store double 0x3FE5555555555555, ptr %1073, align 8, !tbaa !23
  br label %1095

1074:                                             ; preds = %1027
  %1075 = landingpad { ptr, i32 }
          cleanup
  %1076 = extractvalue { ptr, i32 } %1075, 0
  store ptr %1076, ptr %19, align 8
  %1077 = extractvalue { ptr, i32 } %1075, 1
  store i32 %1077, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #4
  br label %1500

1078:                                             ; preds = %1031
  %1079 = landingpad { ptr, i32 }
          cleanup
  %1080 = extractvalue { ptr, i32 } %1079, 0
  store ptr %1080, ptr %19, align 8
  %1081 = extractvalue { ptr, i32 } %1079, 1
  store i32 %1081, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #4
  br label %1499

1082:                                             ; preds = %1035
  %1083 = landingpad { ptr, i32 }
          cleanup
  %1084 = extractvalue { ptr, i32 } %1083, 0
  store ptr %1084, ptr %19, align 8
  %1085 = extractvalue { ptr, i32 } %1083, 1
  store i32 %1085, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #4
  br label %1498

1086:                                             ; preds = %1039
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %19, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %20, align 4
  br label %1094

1090:                                             ; preds = %1045
  %1091 = landingpad { ptr, i32 }
          cleanup
  %1092 = extractvalue { ptr, i32 } %1091, 0
  store ptr %1092, ptr %19, align 8
  %1093 = extractvalue { ptr, i32 } %1091, 1
  store i32 %1093, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #4
  br label %1094

1094:                                             ; preds = %1090, %1086
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #4
  br label %1497

1095:                                             ; preds = %1072, %1068
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #4
  store i64 0, ptr %95, align 8, !tbaa !12
  %1096 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %1097 unwind label %1209

1097:                                             ; preds = %1095
  %1098 = getelementptr inbounds double, ptr %1096, i64 0
  store double 0.000000e+00, ptr %1098, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  %1099 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1100 = load ptr, ptr %1099, align 8, !tbaa !24
  %1101 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #4
  store i64 0, ptr %96, align 8, !tbaa !12
  %1102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1101, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %1103 unwind label %1213

1103:                                             ; preds = %1097
  %1104 = load double, ptr %1102, align 8, !tbaa !14
  %1105 = invoke noundef double %1100(double noundef %1104)
          to label %1106 unwind label %1213

1106:                                             ; preds = %1103
  %1107 = fmul double 2.000000e+00, %1105
  %1108 = load double, ptr %94, align 8, !tbaa !14
  %1109 = fmul double %1107, %1108
  %1110 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1111 = load double, ptr %1110, align 8, !tbaa !23
  %1112 = call double @llvm.fmuladd.f64(double %1109, double %1111, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #4
  store i64 0, ptr %97, align 8, !tbaa !12
  %1113 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %1114 unwind label %1217

1114:                                             ; preds = %1106
  %1115 = getelementptr inbounds double, ptr %1113, i64 1
  store double %1112, ptr %1115, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #4
  %1116 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1117 = load ptr, ptr %1116, align 8, !tbaa !24
  %1118 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #4
  store i64 0, ptr %98, align 8, !tbaa !12
  %1119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1118, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %1120 unwind label %1222

1120:                                             ; preds = %1114
  %1121 = load double, ptr %1119, align 8, !tbaa !14
  %1122 = invoke noundef double %1117(double noundef %1121)
          to label %1123 unwind label %1222

1123:                                             ; preds = %1120
  %1124 = fmul double -2.000000e+00, %1122
  %1125 = load double, ptr %94, align 8, !tbaa !14
  %1126 = fmul double %1124, %1125
  %1127 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1128 = load double, ptr %1127, align 8, !tbaa !23
  %1129 = fmul double %1126, %1128
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #4
  store i64 0, ptr %99, align 8, !tbaa !12
  %1130 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %1131 unwind label %1226

1131:                                             ; preds = %1123
  %1132 = getelementptr inbounds double, ptr %1130, i64 2
  store double %1129, ptr %1132, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  %1133 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1134 = load ptr, ptr %1133, align 8, !tbaa !24
  %1135 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #4
  store i64 0, ptr %100, align 8, !tbaa !12
  %1136 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1135, ptr noundef nonnull align 8 dereferenceable(8) %100)
          to label %1137 unwind label %1231

1137:                                             ; preds = %1131
  %1138 = load double, ptr %1136, align 8, !tbaa !14
  %1139 = invoke noundef double %1134(double noundef %1138)
          to label %1140 unwind label %1231

1140:                                             ; preds = %1137
  %1141 = fmul double 2.000000e+00, %1139
  %1142 = load double, ptr %94, align 8, !tbaa !14
  %1143 = fmul double %1141, %1142
  %1144 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1145 = load double, ptr %1144, align 8, !tbaa !23
  %1146 = fsub double 1.000000e+00, %1145
  %1147 = fmul double %1143, %1146
  %1148 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #4
  store i64 1, ptr %101, align 8, !tbaa !12
  %1149 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1148, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1150 unwind label %1235

1150:                                             ; preds = %1140
  %1151 = load double, ptr %1149, align 8, !tbaa !14
  %1152 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1153 = load ptr, ptr %1152, align 8, !tbaa !24
  %1154 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #4
  store i64 0, ptr %102, align 8, !tbaa !12
  %1155 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1154, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %1156 unwind label %1239

1156:                                             ; preds = %1150
  %1157 = load double, ptr %1155, align 8, !tbaa !14
  %1158 = invoke noundef double %1153(double noundef %1157)
          to label %1159 unwind label %1239

1159:                                             ; preds = %1156
  %1160 = fmul double 2.000000e+00, %1158
  %1161 = load double, ptr %94, align 8, !tbaa !14
  %1162 = fmul double %1160, %1161
  %1163 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1164 = load double, ptr %1163, align 8, !tbaa !23
  %1165 = fsub double 1.000000e+00, %1164
  %1166 = fneg double %1162
  %1167 = call double @llvm.fmuladd.f64(double %1166, double %1165, double 1.000000e+00)
  %1168 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #4
  store i64 0, ptr %103, align 8, !tbaa !12
  %1169 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1168, ptr noundef nonnull align 8 dereferenceable(8) %103)
          to label %1170 unwind label %1243

1170:                                             ; preds = %1159
  %1171 = load double, ptr %1169, align 8, !tbaa !14
  %1172 = fmul double %1167, %1171
  %1173 = call double @llvm.fmuladd.f64(double %1147, double %1151, double %1172)
  %1174 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1175 = load ptr, ptr %1174, align 8, !tbaa !24
  %1176 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #4
  store i64 0, ptr %104, align 8, !tbaa !12
  %1177 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1176, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %1178 unwind label %1247

1178:                                             ; preds = %1170
  %1179 = load double, ptr %1177, align 8, !tbaa !14
  %1180 = invoke noundef double %1175(double noundef %1179)
          to label %1181 unwind label %1247

1181:                                             ; preds = %1178
  %1182 = fmul double 2.000000e+00, %1180
  %1183 = load double, ptr %94, align 8, !tbaa !14
  %1184 = fmul double %1182, %1183
  %1185 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1186 = load double, ptr %1185, align 8, !tbaa !23
  %1187 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1186, double 1.000000e+00)
  %1188 = fmul double %1184, %1187
  %1189 = load double, ptr %91, align 8, !tbaa !14
  %1190 = fmul double %1188, %1189
  %1191 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 7
  %1192 = load ptr, ptr %1191, align 8, !tbaa !29
  %1193 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #4
  store i64 0, ptr %105, align 8, !tbaa !12
  %1194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1193, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1195 unwind label %1251

1195:                                             ; preds = %1181
  %1196 = load double, ptr %1194, align 8, !tbaa !14
  %1197 = invoke noundef double %1192(double noundef %1196, double noundef 0.000000e+00)
          to label %1198 unwind label %1251

1198:                                             ; preds = %1195
  %1199 = fneg double %1190
  %1200 = call double @llvm.fmuladd.f64(double %1199, double %1197, double %1173)
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #4
  store i64 0, ptr %106, align 8, !tbaa !12
  %1201 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %1202 unwind label %1255

1202:                                             ; preds = %1198
  store double %1200, ptr %1201, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %107) #4
  store i32 1, ptr %107, align 4, !tbaa !10
  br label %1203

1203:                                             ; preds = %1406, %1202
  %1204 = load i32, ptr %107, align 4, !tbaa !10
  %1205 = load i32, ptr %13, align 4, !tbaa !10
  %1206 = sub nsw i32 %1205, 1
  %1207 = icmp slt i32 %1204, %1206
  br i1 %1207, label %1265, label %1208

1208:                                             ; preds = %1203
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #4
  br label %1471

1209:                                             ; preds = %1095
  %1210 = landingpad { ptr, i32 }
          cleanup
  %1211 = extractvalue { ptr, i32 } %1210, 0
  store ptr %1211, ptr %19, align 8
  %1212 = extractvalue { ptr, i32 } %1210, 1
  store i32 %1212, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #4
  br label %1496

1213:                                             ; preds = %1103, %1097
  %1214 = landingpad { ptr, i32 }
          cleanup
  %1215 = extractvalue { ptr, i32 } %1214, 0
  store ptr %1215, ptr %19, align 8
  %1216 = extractvalue { ptr, i32 } %1214, 1
  store i32 %1216, ptr %20, align 4
  br label %1221

1217:                                             ; preds = %1106
  %1218 = landingpad { ptr, i32 }
          cleanup
  %1219 = extractvalue { ptr, i32 } %1218, 0
  store ptr %1219, ptr %19, align 8
  %1220 = extractvalue { ptr, i32 } %1218, 1
  store i32 %1220, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #4
  br label %1221

1221:                                             ; preds = %1217, %1213
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #4
  br label %1496

1222:                                             ; preds = %1120, %1114
  %1223 = landingpad { ptr, i32 }
          cleanup
  %1224 = extractvalue { ptr, i32 } %1223, 0
  store ptr %1224, ptr %19, align 8
  %1225 = extractvalue { ptr, i32 } %1223, 1
  store i32 %1225, ptr %20, align 4
  br label %1230

1226:                                             ; preds = %1123
  %1227 = landingpad { ptr, i32 }
          cleanup
  %1228 = extractvalue { ptr, i32 } %1227, 0
  store ptr %1228, ptr %19, align 8
  %1229 = extractvalue { ptr, i32 } %1227, 1
  store i32 %1229, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #4
  br label %1230

1230:                                             ; preds = %1226, %1222
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #4
  br label %1496

1231:                                             ; preds = %1137, %1131
  %1232 = landingpad { ptr, i32 }
          cleanup
  %1233 = extractvalue { ptr, i32 } %1232, 0
  store ptr %1233, ptr %19, align 8
  %1234 = extractvalue { ptr, i32 } %1232, 1
  store i32 %1234, ptr %20, align 4
  br label %1264

1235:                                             ; preds = %1140
  %1236 = landingpad { ptr, i32 }
          cleanup
  %1237 = extractvalue { ptr, i32 } %1236, 0
  store ptr %1237, ptr %19, align 8
  %1238 = extractvalue { ptr, i32 } %1236, 1
  store i32 %1238, ptr %20, align 4
  br label %1263

1239:                                             ; preds = %1156, %1150
  %1240 = landingpad { ptr, i32 }
          cleanup
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %19, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %20, align 4
  br label %1262

1243:                                             ; preds = %1159
  %1244 = landingpad { ptr, i32 }
          cleanup
  %1245 = extractvalue { ptr, i32 } %1244, 0
  store ptr %1245, ptr %19, align 8
  %1246 = extractvalue { ptr, i32 } %1244, 1
  store i32 %1246, ptr %20, align 4
  br label %1261

1247:                                             ; preds = %1178, %1170
  %1248 = landingpad { ptr, i32 }
          cleanup
  %1249 = extractvalue { ptr, i32 } %1248, 0
  store ptr %1249, ptr %19, align 8
  %1250 = extractvalue { ptr, i32 } %1248, 1
  store i32 %1250, ptr %20, align 4
  br label %1260

1251:                                             ; preds = %1195, %1181
  %1252 = landingpad { ptr, i32 }
          cleanup
  %1253 = extractvalue { ptr, i32 } %1252, 0
  store ptr %1253, ptr %19, align 8
  %1254 = extractvalue { ptr, i32 } %1252, 1
  store i32 %1254, ptr %20, align 4
  br label %1259

1255:                                             ; preds = %1198
  %1256 = landingpad { ptr, i32 }
          cleanup
  %1257 = extractvalue { ptr, i32 } %1256, 0
  store ptr %1257, ptr %19, align 8
  %1258 = extractvalue { ptr, i32 } %1256, 1
  store i32 %1258, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #4
  br label %1259

1259:                                             ; preds = %1255, %1251
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #4
  br label %1260

1260:                                             ; preds = %1259, %1247
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #4
  br label %1261

1261:                                             ; preds = %1260, %1243
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #4
  br label %1262

1262:                                             ; preds = %1261, %1239
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #4
  br label %1263

1263:                                             ; preds = %1262, %1235
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #4
  br label %1264

1264:                                             ; preds = %1263, %1231
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #4
  br label %1496

1265:                                             ; preds = %1203
  %1266 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1267 = load ptr, ptr %1266, align 8, !tbaa !24
  %1268 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #4
  %1269 = load i32, ptr %107, align 4, !tbaa !10
  %1270 = sext i32 %1269 to i64
  store i64 %1270, ptr %108, align 8, !tbaa !12
  %1271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1268, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %1272 unwind label %1409

1272:                                             ; preds = %1265
  %1273 = load double, ptr %1271, align 8, !tbaa !14
  %1274 = invoke noundef double %1267(double noundef %1273)
          to label %1275 unwind label %1409

1275:                                             ; preds = %1272
  %1276 = fneg double %1274
  %1277 = load double, ptr %94, align 8, !tbaa !14
  %1278 = fmul double %1276, %1277
  %1279 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1280 = load double, ptr %1279, align 8, !tbaa !23
  %1281 = fmul double %1278, %1280
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #4
  %1282 = load i32, ptr %107, align 4, !tbaa !10
  %1283 = sext i32 %1282 to i64
  store i64 %1283, ptr %109, align 8, !tbaa !12
  %1284 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %1285 unwind label %1413

1285:                                             ; preds = %1275
  %1286 = getelementptr inbounds double, ptr %1284, i64 0
  store double %1281, ptr %1286, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #4
  %1287 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1288 = load ptr, ptr %1287, align 8, !tbaa !24
  %1289 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #4
  %1290 = load i32, ptr %107, align 4, !tbaa !10
  %1291 = sext i32 %1290 to i64
  store i64 %1291, ptr %110, align 8, !tbaa !12
  %1292 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1289, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %1293 unwind label %1418

1293:                                             ; preds = %1285
  %1294 = load double, ptr %1292, align 8, !tbaa !14
  %1295 = invoke noundef double %1288(double noundef %1294)
          to label %1296 unwind label %1418

1296:                                             ; preds = %1293
  %1297 = fmul double 2.000000e+00, %1295
  %1298 = load double, ptr %94, align 8, !tbaa !14
  %1299 = fmul double %1297, %1298
  %1300 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1301 = load double, ptr %1300, align 8, !tbaa !23
  %1302 = call double @llvm.fmuladd.f64(double %1299, double %1301, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #4
  %1303 = load i32, ptr %107, align 4, !tbaa !10
  %1304 = sext i32 %1303 to i64
  store i64 %1304, ptr %111, align 8, !tbaa !12
  %1305 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %1306 unwind label %1422

1306:                                             ; preds = %1296
  %1307 = getelementptr inbounds double, ptr %1305, i64 1
  store double %1302, ptr %1307, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #4
  %1308 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1309 = load ptr, ptr %1308, align 8, !tbaa !24
  %1310 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #4
  %1311 = load i32, ptr %107, align 4, !tbaa !10
  %1312 = sext i32 %1311 to i64
  store i64 %1312, ptr %112, align 8, !tbaa !12
  %1313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1310, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %1314 unwind label %1427

1314:                                             ; preds = %1306
  %1315 = load double, ptr %1313, align 8, !tbaa !14
  %1316 = invoke noundef double %1309(double noundef %1315)
          to label %1317 unwind label %1427

1317:                                             ; preds = %1314
  %1318 = fneg double %1316
  %1319 = load double, ptr %94, align 8, !tbaa !14
  %1320 = fmul double %1318, %1319
  %1321 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1322 = load double, ptr %1321, align 8, !tbaa !23
  %1323 = fmul double %1320, %1322
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #4
  %1324 = load i32, ptr %107, align 4, !tbaa !10
  %1325 = sext i32 %1324 to i64
  store i64 %1325, ptr %113, align 8, !tbaa !12
  %1326 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(8) %113)
          to label %1327 unwind label %1431

1327:                                             ; preds = %1317
  %1328 = getelementptr inbounds double, ptr %1326, i64 2
  store double %1323, ptr %1328, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #4
  %1329 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1330 = load ptr, ptr %1329, align 8, !tbaa !24
  %1331 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #4
  %1332 = load i32, ptr %107, align 4, !tbaa !10
  %1333 = sext i32 %1332 to i64
  store i64 %1333, ptr %114, align 8, !tbaa !12
  %1334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1331, ptr noundef nonnull align 8 dereferenceable(8) %114)
          to label %1335 unwind label %1436

1335:                                             ; preds = %1327
  %1336 = load double, ptr %1334, align 8, !tbaa !14
  %1337 = invoke noundef double %1330(double noundef %1336)
          to label %1338 unwind label %1436

1338:                                             ; preds = %1335
  %1339 = load double, ptr %94, align 8, !tbaa !14
  %1340 = fmul double %1337, %1339
  %1341 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1342 = load double, ptr %1341, align 8, !tbaa !23
  %1343 = fsub double 1.000000e+00, %1342
  %1344 = fmul double %1340, %1343
  %1345 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #4
  %1346 = load i32, ptr %107, align 4, !tbaa !10
  %1347 = add nsw i32 %1346, 1
  %1348 = sext i32 %1347 to i64
  store i64 %1348, ptr %115, align 8, !tbaa !12
  %1349 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1345, ptr noundef nonnull align 8 dereferenceable(8) %115)
          to label %1350 unwind label %1440

1350:                                             ; preds = %1338
  %1351 = load double, ptr %1349, align 8, !tbaa !14
  %1352 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1353 = load ptr, ptr %1352, align 8, !tbaa !24
  %1354 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #4
  %1355 = load i32, ptr %107, align 4, !tbaa !10
  %1356 = sext i32 %1355 to i64
  store i64 %1356, ptr %116, align 8, !tbaa !12
  %1357 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1354, ptr noundef nonnull align 8 dereferenceable(8) %116)
          to label %1358 unwind label %1444

1358:                                             ; preds = %1350
  %1359 = load double, ptr %1357, align 8, !tbaa !14
  %1360 = invoke noundef double %1353(double noundef %1359)
          to label %1361 unwind label %1444

1361:                                             ; preds = %1358
  %1362 = fmul double 2.000000e+00, %1360
  %1363 = load double, ptr %94, align 8, !tbaa !14
  %1364 = fmul double %1362, %1363
  %1365 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1366 = load double, ptr %1365, align 8, !tbaa !23
  %1367 = fsub double 1.000000e+00, %1366
  %1368 = fneg double %1364
  %1369 = call double @llvm.fmuladd.f64(double %1368, double %1367, double 1.000000e+00)
  %1370 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #4
  %1371 = load i32, ptr %107, align 4, !tbaa !10
  %1372 = sext i32 %1371 to i64
  store i64 %1372, ptr %117, align 8, !tbaa !12
  %1373 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1370, ptr noundef nonnull align 8 dereferenceable(8) %117)
          to label %1374 unwind label %1448

1374:                                             ; preds = %1361
  %1375 = load double, ptr %1373, align 8, !tbaa !14
  %1376 = fmul double %1369, %1375
  %1377 = call double @llvm.fmuladd.f64(double %1344, double %1351, double %1376)
  %1378 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1379 = load ptr, ptr %1378, align 8, !tbaa !24
  %1380 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #4
  %1381 = load i32, ptr %107, align 4, !tbaa !10
  %1382 = sext i32 %1381 to i64
  store i64 %1382, ptr %118, align 8, !tbaa !12
  %1383 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1380, ptr noundef nonnull align 8 dereferenceable(8) %118)
          to label %1384 unwind label %1452

1384:                                             ; preds = %1374
  %1385 = load double, ptr %1383, align 8, !tbaa !14
  %1386 = invoke noundef double %1379(double noundef %1385)
          to label %1387 unwind label %1452

1387:                                             ; preds = %1384
  %1388 = load double, ptr %94, align 8, !tbaa !14
  %1389 = fmul double %1386, %1388
  %1390 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1391 = load double, ptr %1390, align 8, !tbaa !23
  %1392 = fsub double 1.000000e+00, %1391
  %1393 = fmul double %1389, %1392
  %1394 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #4
  %1395 = load i32, ptr %107, align 4, !tbaa !10
  %1396 = sub nsw i32 %1395, 1
  %1397 = sext i32 %1396 to i64
  store i64 %1397, ptr %119, align 8, !tbaa !12
  %1398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1394, ptr noundef nonnull align 8 dereferenceable(8) %119)
          to label %1399 unwind label %1456

1399:                                             ; preds = %1387
  %1400 = load double, ptr %1398, align 8, !tbaa !14
  %1401 = call double @llvm.fmuladd.f64(double %1393, double %1400, double %1377)
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #4
  %1402 = load i32, ptr %107, align 4, !tbaa !10
  %1403 = sext i32 %1402 to i64
  store i64 %1403, ptr %120, align 8, !tbaa !12
  %1404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %87, ptr noundef nonnull align 8 dereferenceable(8) %120)
          to label %1405 unwind label %1460

1405:                                             ; preds = %1399
  store double %1401, ptr %1404, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #4
  br label %1406

1406:                                             ; preds = %1405
  %1407 = load i32, ptr %107, align 4, !tbaa !10
  %1408 = add nsw i32 %1407, 1
  store i32 %1408, ptr %107, align 4, !tbaa !10
  br label %1203, !llvm.loop !30

1409:                                             ; preds = %1272, %1265
  %1410 = landingpad { ptr, i32 }
          cleanup
  %1411 = extractvalue { ptr, i32 } %1410, 0
  store ptr %1411, ptr %19, align 8
  %1412 = extractvalue { ptr, i32 } %1410, 1
  store i32 %1412, ptr %20, align 4
  br label %1417

1413:                                             ; preds = %1275
  %1414 = landingpad { ptr, i32 }
          cleanup
  %1415 = extractvalue { ptr, i32 } %1414, 0
  store ptr %1415, ptr %19, align 8
  %1416 = extractvalue { ptr, i32 } %1414, 1
  store i32 %1416, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #4
  br label %1417

1417:                                             ; preds = %1413, %1409
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #4
  br label %1470

1418:                                             ; preds = %1293, %1285
  %1419 = landingpad { ptr, i32 }
          cleanup
  %1420 = extractvalue { ptr, i32 } %1419, 0
  store ptr %1420, ptr %19, align 8
  %1421 = extractvalue { ptr, i32 } %1419, 1
  store i32 %1421, ptr %20, align 4
  br label %1426

1422:                                             ; preds = %1296
  %1423 = landingpad { ptr, i32 }
          cleanup
  %1424 = extractvalue { ptr, i32 } %1423, 0
  store ptr %1424, ptr %19, align 8
  %1425 = extractvalue { ptr, i32 } %1423, 1
  store i32 %1425, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #4
  br label %1426

1426:                                             ; preds = %1422, %1418
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #4
  br label %1470

1427:                                             ; preds = %1314, %1306
  %1428 = landingpad { ptr, i32 }
          cleanup
  %1429 = extractvalue { ptr, i32 } %1428, 0
  store ptr %1429, ptr %19, align 8
  %1430 = extractvalue { ptr, i32 } %1428, 1
  store i32 %1430, ptr %20, align 4
  br label %1435

1431:                                             ; preds = %1317
  %1432 = landingpad { ptr, i32 }
          cleanup
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %19, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #4
  br label %1435

1435:                                             ; preds = %1431, %1427
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #4
  br label %1470

1436:                                             ; preds = %1335, %1327
  %1437 = landingpad { ptr, i32 }
          cleanup
  %1438 = extractvalue { ptr, i32 } %1437, 0
  store ptr %1438, ptr %19, align 8
  %1439 = extractvalue { ptr, i32 } %1437, 1
  store i32 %1439, ptr %20, align 4
  br label %1469

1440:                                             ; preds = %1338
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %19, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %20, align 4
  br label %1468

1444:                                             ; preds = %1358, %1350
  %1445 = landingpad { ptr, i32 }
          cleanup
  %1446 = extractvalue { ptr, i32 } %1445, 0
  store ptr %1446, ptr %19, align 8
  %1447 = extractvalue { ptr, i32 } %1445, 1
  store i32 %1447, ptr %20, align 4
  br label %1467

1448:                                             ; preds = %1361
  %1449 = landingpad { ptr, i32 }
          cleanup
  %1450 = extractvalue { ptr, i32 } %1449, 0
  store ptr %1450, ptr %19, align 8
  %1451 = extractvalue { ptr, i32 } %1449, 1
  store i32 %1451, ptr %20, align 4
  br label %1466

1452:                                             ; preds = %1384, %1374
  %1453 = landingpad { ptr, i32 }
          cleanup
  %1454 = extractvalue { ptr, i32 } %1453, 0
  store ptr %1454, ptr %19, align 8
  %1455 = extractvalue { ptr, i32 } %1453, 1
  store i32 %1455, ptr %20, align 4
  br label %1465

1456:                                             ; preds = %1387
  %1457 = landingpad { ptr, i32 }
          cleanup
  %1458 = extractvalue { ptr, i32 } %1457, 0
  store ptr %1458, ptr %19, align 8
  %1459 = extractvalue { ptr, i32 } %1457, 1
  store i32 %1459, ptr %20, align 4
  br label %1464

1460:                                             ; preds = %1399
  %1461 = landingpad { ptr, i32 }
          cleanup
  %1462 = extractvalue { ptr, i32 } %1461, 0
  store ptr %1462, ptr %19, align 8
  %1463 = extractvalue { ptr, i32 } %1461, 1
  store i32 %1463, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #4
  br label %1464

1464:                                             ; preds = %1460, %1456
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #4
  br label %1465

1465:                                             ; preds = %1464, %1452
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #4
  br label %1466

1466:                                             ; preds = %1465, %1448
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #4
  br label %1467

1467:                                             ; preds = %1466, %1444
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #4
  br label %1468

1468:                                             ; preds = %1467, %1440
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #4
  br label %1469

1469:                                             ; preds = %1468, %1436
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #4
  br label %1470

1470:                                             ; preds = %1469, %1435, %1426, %1417
  call void @llvm.lifetime.end.p0(i64 4, ptr %107) #4
  br label %1496

1471:                                             ; preds = %1208
  call void @llvm.lifetime.start.p0(i64 24, ptr %121) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind writable sret(%"class.cda::math::containers::Vector") align 8 %121, ptr noundef nonnull align 8 dereferenceable(40) %84, ptr noundef nonnull align 8 dereferenceable(24) %87)
          to label %1472 unwind label %1479

1472:                                             ; preds = %1471
  %1473 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %89, ptr noundef nonnull align 8 dereferenceable(24) %121)
          to label %1474 unwind label %1483

1474:                                             ; preds = %1472
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %121) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %121) #4
  %1475 = load ptr, ptr %12, align 8, !tbaa !5
  %1476 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %1475)
          to label %1477 unwind label %1488

1477:                                             ; preds = %1474
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #4
  store i64 0, ptr %122, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull align 8 dereferenceable(24) %89)
          to label %1478 unwind label %1492

1478:                                             ; preds = %1477
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %87) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %87) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %84) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %84) #4
  br label %1501

1479:                                             ; preds = %1471
  %1480 = landingpad { ptr, i32 }
          cleanup
  %1481 = extractvalue { ptr, i32 } %1480, 0
  store ptr %1481, ptr %19, align 8
  %1482 = extractvalue { ptr, i32 } %1480, 1
  store i32 %1482, ptr %20, align 4
  br label %1487

1483:                                             ; preds = %1472
  %1484 = landingpad { ptr, i32 }
          cleanup
  %1485 = extractvalue { ptr, i32 } %1484, 0
  store ptr %1485, ptr %19, align 8
  %1486 = extractvalue { ptr, i32 } %1484, 1
  store i32 %1486, ptr %20, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %121) #4
  br label %1487

1487:                                             ; preds = %1483, %1479
  call void @llvm.lifetime.end.p0(i64 24, ptr %121) #4
  br label %1496

1488:                                             ; preds = %1474
  %1489 = landingpad { ptr, i32 }
          cleanup
  %1490 = extractvalue { ptr, i32 } %1489, 0
  store ptr %1490, ptr %19, align 8
  %1491 = extractvalue { ptr, i32 } %1489, 1
  store i32 %1491, ptr %20, align 4
  br label %1496

1492:                                             ; preds = %1477
  %1493 = landingpad { ptr, i32 }
          cleanup
  %1494 = extractvalue { ptr, i32 } %1493, 0
  store ptr %1494, ptr %19, align 8
  %1495 = extractvalue { ptr, i32 } %1493, 1
  store i32 %1495, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #4
  br label %1496

1496:                                             ; preds = %1492, %1488, %1487, %1470, %1264, %1230, %1221, %1209
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #4
  br label %1497

1497:                                             ; preds = %1496, %1094
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %89) #4
  br label %1498

1498:                                             ; preds = %1497, %1082
  call void @llvm.lifetime.end.p0(i64 24, ptr %89) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %87) #4
  br label %1499

1499:                                             ; preds = %1498, %1078
  call void @llvm.lifetime.end.p0(i64 24, ptr %87) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %84) #4
  br label %1500

1500:                                             ; preds = %1499, %1074
  call void @llvm.lifetime.end.p0(i64 40, ptr %84) #4
  br label %2169

1501:                                             ; preds = %1478, %1022, %1017
  %1502 = load i8, ptr %9, align 1, !tbaa !9
  %1503 = zext i8 %1502 to i32
  %1504 = and i32 %1503, 16
  %1505 = icmp ne i32 %1504, 0
  br i1 %1505, label %1506, label %2160

1506:                                             ; preds = %1501
  %1507 = load i8, ptr %9, align 1, !tbaa !9
  %1508 = zext i8 %1507 to i32
  %1509 = and i32 %1508, 32
  %1510 = icmp ne i32 %1509, 0
  br i1 %1510, label %1511, label %2160

1511:                                             ; preds = %1506
  call void @llvm.lifetime.start.p0(i64 40, ptr %123) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #4
  %1512 = load i32, ptr %13, align 4, !tbaa !10
  %1513 = sext i32 %1512 to i64
  store i64 %1513, ptr %124, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #4
  store i64 3, ptr %125, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %1514 unwind label %1552

1514:                                             ; preds = %1511
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %126) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #4
  %1515 = load i32, ptr %13, align 4, !tbaa !10
  %1516 = sext i32 %1515 to i64
  store i64 %1516, ptr %127, align 8, !tbaa !12
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 8 dereferenceable(8) %127)
          to label %1517 unwind label %1556

1517:                                             ; preds = %1514
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #4
  %1518 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #4
  %1519 = load i32, ptr %13, align 4, !tbaa !10
  %1520 = sub nsw i32 %1519, 1
  %1521 = sext i32 %1520 to i64
  store i64 %1521, ptr %129, align 8, !tbaa !12
  %1522 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1518, ptr noundef nonnull align 8 dereferenceable(8) %129)
          to label %1523 unwind label %1560

1523:                                             ; preds = %1517
  %1524 = load double, ptr %1522, align 8, !tbaa !14
  %1525 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #4
  store i64 0, ptr %130, align 8, !tbaa !12
  %1526 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1525, ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %1527 unwind label %1564

1527:                                             ; preds = %1523
  %1528 = load double, ptr %1526, align 8, !tbaa !14
  %1529 = fsub double %1524, %1528
  %1530 = load i32, ptr %13, align 4, !tbaa !10
  %1531 = sub nsw i32 %1530, 1
  %1532 = sitofp i32 %1531 to double
  %1533 = fdiv double %1529, %1532
  %1534 = fptosi double %1533 to i32
  %1535 = call i32 @llvm.abs.i32(i32 %1534, i1 true)
  %1536 = sitofp i32 %1535 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #4
  store double %1536, ptr %128, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #4
  %1537 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 18
  %1538 = load double, ptr %1537, align 8, !tbaa !16
  %1539 = load double, ptr %128, align 8, !tbaa !14
  %1540 = load double, ptr %128, align 8, !tbaa !14
  %1541 = fmul double %1539, %1540
  %1542 = fdiv double %1538, %1541
  store double %1542, ptr %131, align 8, !tbaa !14
  %1543 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1544 = load double, ptr %1543, align 8, !tbaa !23
  %1545 = fcmp olt double %1544, 0.000000e+00
  br i1 %1545, label %1550, label %1546

1546:                                             ; preds = %1527
  %1547 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1548 = load double, ptr %1547, align 8, !tbaa !23
  %1549 = fcmp ogt double %1548, 1.000000e+00
  br i1 %1549, label %1550, label %1569

1550:                                             ; preds = %1546, %1527
  %1551 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  store double 0x3FE5555555555555, ptr %1551, align 8, !tbaa !23
  br label %1569

1552:                                             ; preds = %1511
  %1553 = landingpad { ptr, i32 }
          cleanup
  %1554 = extractvalue { ptr, i32 } %1553, 0
  store ptr %1554, ptr %19, align 8
  %1555 = extractvalue { ptr, i32 } %1553, 1
  store i32 %1555, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #4
  br label %2159

1556:                                             ; preds = %1514
  %1557 = landingpad { ptr, i32 }
          cleanup
  %1558 = extractvalue { ptr, i32 } %1557, 0
  store ptr %1558, ptr %19, align 8
  %1559 = extractvalue { ptr, i32 } %1557, 1
  store i32 %1559, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #4
  br label %2158

1560:                                             ; preds = %1517
  %1561 = landingpad { ptr, i32 }
          cleanup
  %1562 = extractvalue { ptr, i32 } %1561, 0
  store ptr %1562, ptr %19, align 8
  %1563 = extractvalue { ptr, i32 } %1561, 1
  store i32 %1563, ptr %20, align 4
  br label %1568

1564:                                             ; preds = %1523
  %1565 = landingpad { ptr, i32 }
          cleanup
  %1566 = extractvalue { ptr, i32 } %1565, 0
  store ptr %1566, ptr %19, align 8
  %1567 = extractvalue { ptr, i32 } %1565, 1
  store i32 %1567, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #4
  br label %1568

1568:                                             ; preds = %1564, %1560
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #4
  br label %2157

1569:                                             ; preds = %1550, %1546
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #4
  store i64 0, ptr %132, align 8, !tbaa !12
  %1570 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %132)
          to label %1571 unwind label %1683

1571:                                             ; preds = %1569
  %1572 = getelementptr inbounds double, ptr %1570, i64 0
  store double 0.000000e+00, ptr %1572, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #4
  %1573 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1574 = load ptr, ptr %1573, align 8, !tbaa !24
  %1575 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #4
  store i64 0, ptr %133, align 8, !tbaa !12
  %1576 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1575, ptr noundef nonnull align 8 dereferenceable(8) %133)
          to label %1577 unwind label %1687

1577:                                             ; preds = %1571
  %1578 = load double, ptr %1576, align 8, !tbaa !14
  %1579 = invoke noundef double %1574(double noundef %1578)
          to label %1580 unwind label %1687

1580:                                             ; preds = %1577
  %1581 = fmul double 2.000000e+00, %1579
  %1582 = load double, ptr %131, align 8, !tbaa !14
  %1583 = fmul double %1581, %1582
  %1584 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1585 = load double, ptr %1584, align 8, !tbaa !23
  %1586 = call double @llvm.fmuladd.f64(double %1583, double %1585, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #4
  store i64 0, ptr %134, align 8, !tbaa !12
  %1587 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %1588 unwind label %1691

1588:                                             ; preds = %1580
  %1589 = getelementptr inbounds double, ptr %1587, i64 1
  store double %1586, ptr %1589, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #4
  %1590 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1591 = load ptr, ptr %1590, align 8, !tbaa !24
  %1592 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #4
  store i64 0, ptr %135, align 8, !tbaa !12
  %1593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1592, ptr noundef nonnull align 8 dereferenceable(8) %135)
          to label %1594 unwind label %1696

1594:                                             ; preds = %1588
  %1595 = load double, ptr %1593, align 8, !tbaa !14
  %1596 = invoke noundef double %1591(double noundef %1595)
          to label %1597 unwind label %1696

1597:                                             ; preds = %1594
  %1598 = fmul double -2.000000e+00, %1596
  %1599 = load double, ptr %131, align 8, !tbaa !14
  %1600 = fmul double %1598, %1599
  %1601 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1602 = load double, ptr %1601, align 8, !tbaa !23
  %1603 = fmul double %1600, %1602
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #4
  store i64 0, ptr %136, align 8, !tbaa !12
  %1604 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %136)
          to label %1605 unwind label %1700

1605:                                             ; preds = %1597
  %1606 = getelementptr inbounds double, ptr %1604, i64 2
  store double %1603, ptr %1606, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #4
  %1607 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1608 = load ptr, ptr %1607, align 8, !tbaa !24
  %1609 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #4
  store i64 0, ptr %137, align 8, !tbaa !12
  %1610 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1609, ptr noundef nonnull align 8 dereferenceable(8) %137)
          to label %1611 unwind label %1705

1611:                                             ; preds = %1605
  %1612 = load double, ptr %1610, align 8, !tbaa !14
  %1613 = invoke noundef double %1608(double noundef %1612)
          to label %1614 unwind label %1705

1614:                                             ; preds = %1611
  %1615 = fmul double 2.000000e+00, %1613
  %1616 = load double, ptr %131, align 8, !tbaa !14
  %1617 = fmul double %1615, %1616
  %1618 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1619 = load double, ptr %1618, align 8, !tbaa !23
  %1620 = fsub double 1.000000e+00, %1619
  %1621 = fmul double %1617, %1620
  %1622 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #4
  store i64 1, ptr %138, align 8, !tbaa !12
  %1623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1622, ptr noundef nonnull align 8 dereferenceable(8) %138)
          to label %1624 unwind label %1709

1624:                                             ; preds = %1614
  %1625 = load double, ptr %1623, align 8, !tbaa !14
  %1626 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1627 = load ptr, ptr %1626, align 8, !tbaa !24
  %1628 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #4
  store i64 0, ptr %139, align 8, !tbaa !12
  %1629 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1628, ptr noundef nonnull align 8 dereferenceable(8) %139)
          to label %1630 unwind label %1713

1630:                                             ; preds = %1624
  %1631 = load double, ptr %1629, align 8, !tbaa !14
  %1632 = invoke noundef double %1627(double noundef %1631)
          to label %1633 unwind label %1713

1633:                                             ; preds = %1630
  %1634 = fmul double 2.000000e+00, %1632
  %1635 = load double, ptr %131, align 8, !tbaa !14
  %1636 = fmul double %1634, %1635
  %1637 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1638 = load double, ptr %1637, align 8, !tbaa !23
  %1639 = fsub double 1.000000e+00, %1638
  %1640 = fneg double %1636
  %1641 = call double @llvm.fmuladd.f64(double %1640, double %1639, double 1.000000e+00)
  %1642 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #4
  store i64 0, ptr %140, align 8, !tbaa !12
  %1643 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1642, ptr noundef nonnull align 8 dereferenceable(8) %140)
          to label %1644 unwind label %1717

1644:                                             ; preds = %1633
  %1645 = load double, ptr %1643, align 8, !tbaa !14
  %1646 = fmul double %1641, %1645
  %1647 = call double @llvm.fmuladd.f64(double %1621, double %1625, double %1646)
  %1648 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1649 = load ptr, ptr %1648, align 8, !tbaa !24
  %1650 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #4
  store i64 0, ptr %141, align 8, !tbaa !12
  %1651 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1650, ptr noundef nonnull align 8 dereferenceable(8) %141)
          to label %1652 unwind label %1721

1652:                                             ; preds = %1644
  %1653 = load double, ptr %1651, align 8, !tbaa !14
  %1654 = invoke noundef double %1649(double noundef %1653)
          to label %1655 unwind label %1721

1655:                                             ; preds = %1652
  %1656 = fmul double 2.000000e+00, %1654
  %1657 = load double, ptr %131, align 8, !tbaa !14
  %1658 = fmul double %1656, %1657
  %1659 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1660 = load double, ptr %1659, align 8, !tbaa !23
  %1661 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1660, double 1.000000e+00)
  %1662 = fmul double %1658, %1661
  %1663 = load double, ptr %128, align 8, !tbaa !14
  %1664 = fmul double %1662, %1663
  %1665 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 7
  %1666 = load ptr, ptr %1665, align 8, !tbaa !29
  %1667 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #4
  store i64 0, ptr %142, align 8, !tbaa !12
  %1668 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1667, ptr noundef nonnull align 8 dereferenceable(8) %142)
          to label %1669 unwind label %1725

1669:                                             ; preds = %1655
  %1670 = load double, ptr %1668, align 8, !tbaa !14
  %1671 = invoke noundef double %1666(double noundef %1670, double noundef 0.000000e+00)
          to label %1672 unwind label %1725

1672:                                             ; preds = %1669
  %1673 = fneg double %1664
  %1674 = call double @llvm.fmuladd.f64(double %1673, double %1671, double %1647)
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #4
  store i64 0, ptr %143, align 8, !tbaa !12
  %1675 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 8 dereferenceable(8) %143)
          to label %1676 unwind label %1729

1676:                                             ; preds = %1672
  store double %1674, ptr %1675, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %144) #4
  store i32 1, ptr %144, align 4, !tbaa !10
  br label %1677

1677:                                             ; preds = %1880, %1676
  %1678 = load i32, ptr %144, align 4, !tbaa !10
  %1679 = load i32, ptr %13, align 4, !tbaa !10
  %1680 = sub nsw i32 %1679, 1
  %1681 = icmp slt i32 %1678, %1680
  br i1 %1681, label %1739, label %1682

1682:                                             ; preds = %1677
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #4
  br label %1945

1683:                                             ; preds = %1569
  %1684 = landingpad { ptr, i32 }
          cleanup
  %1685 = extractvalue { ptr, i32 } %1684, 0
  store ptr %1685, ptr %19, align 8
  %1686 = extractvalue { ptr, i32 } %1684, 1
  store i32 %1686, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #4
  br label %2156

1687:                                             ; preds = %1577, %1571
  %1688 = landingpad { ptr, i32 }
          cleanup
  %1689 = extractvalue { ptr, i32 } %1688, 0
  store ptr %1689, ptr %19, align 8
  %1690 = extractvalue { ptr, i32 } %1688, 1
  store i32 %1690, ptr %20, align 4
  br label %1695

1691:                                             ; preds = %1580
  %1692 = landingpad { ptr, i32 }
          cleanup
  %1693 = extractvalue { ptr, i32 } %1692, 0
  store ptr %1693, ptr %19, align 8
  %1694 = extractvalue { ptr, i32 } %1692, 1
  store i32 %1694, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #4
  br label %1695

1695:                                             ; preds = %1691, %1687
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #4
  br label %2156

1696:                                             ; preds = %1594, %1588
  %1697 = landingpad { ptr, i32 }
          cleanup
  %1698 = extractvalue { ptr, i32 } %1697, 0
  store ptr %1698, ptr %19, align 8
  %1699 = extractvalue { ptr, i32 } %1697, 1
  store i32 %1699, ptr %20, align 4
  br label %1704

1700:                                             ; preds = %1597
  %1701 = landingpad { ptr, i32 }
          cleanup
  %1702 = extractvalue { ptr, i32 } %1701, 0
  store ptr %1702, ptr %19, align 8
  %1703 = extractvalue { ptr, i32 } %1701, 1
  store i32 %1703, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #4
  br label %1704

1704:                                             ; preds = %1700, %1696
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #4
  br label %2156

1705:                                             ; preds = %1611, %1605
  %1706 = landingpad { ptr, i32 }
          cleanup
  %1707 = extractvalue { ptr, i32 } %1706, 0
  store ptr %1707, ptr %19, align 8
  %1708 = extractvalue { ptr, i32 } %1706, 1
  store i32 %1708, ptr %20, align 4
  br label %1738

1709:                                             ; preds = %1614
  %1710 = landingpad { ptr, i32 }
          cleanup
  %1711 = extractvalue { ptr, i32 } %1710, 0
  store ptr %1711, ptr %19, align 8
  %1712 = extractvalue { ptr, i32 } %1710, 1
  store i32 %1712, ptr %20, align 4
  br label %1737

1713:                                             ; preds = %1630, %1624
  %1714 = landingpad { ptr, i32 }
          cleanup
  %1715 = extractvalue { ptr, i32 } %1714, 0
  store ptr %1715, ptr %19, align 8
  %1716 = extractvalue { ptr, i32 } %1714, 1
  store i32 %1716, ptr %20, align 4
  br label %1736

1717:                                             ; preds = %1633
  %1718 = landingpad { ptr, i32 }
          cleanup
  %1719 = extractvalue { ptr, i32 } %1718, 0
  store ptr %1719, ptr %19, align 8
  %1720 = extractvalue { ptr, i32 } %1718, 1
  store i32 %1720, ptr %20, align 4
  br label %1735

1721:                                             ; preds = %1652, %1644
  %1722 = landingpad { ptr, i32 }
          cleanup
  %1723 = extractvalue { ptr, i32 } %1722, 0
  store ptr %1723, ptr %19, align 8
  %1724 = extractvalue { ptr, i32 } %1722, 1
  store i32 %1724, ptr %20, align 4
  br label %1734

1725:                                             ; preds = %1669, %1655
  %1726 = landingpad { ptr, i32 }
          cleanup
  %1727 = extractvalue { ptr, i32 } %1726, 0
  store ptr %1727, ptr %19, align 8
  %1728 = extractvalue { ptr, i32 } %1726, 1
  store i32 %1728, ptr %20, align 4
  br label %1733

1729:                                             ; preds = %1672
  %1730 = landingpad { ptr, i32 }
          cleanup
  %1731 = extractvalue { ptr, i32 } %1730, 0
  store ptr %1731, ptr %19, align 8
  %1732 = extractvalue { ptr, i32 } %1730, 1
  store i32 %1732, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #4
  br label %1733

1733:                                             ; preds = %1729, %1725
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #4
  br label %1734

1734:                                             ; preds = %1733, %1721
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #4
  br label %1735

1735:                                             ; preds = %1734, %1717
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #4
  br label %1736

1736:                                             ; preds = %1735, %1713
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #4
  br label %1737

1737:                                             ; preds = %1736, %1709
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #4
  br label %1738

1738:                                             ; preds = %1737, %1705
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #4
  br label %2156

1739:                                             ; preds = %1677
  %1740 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1741 = load ptr, ptr %1740, align 8, !tbaa !24
  %1742 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #4
  %1743 = load i32, ptr %144, align 4, !tbaa !10
  %1744 = sext i32 %1743 to i64
  store i64 %1744, ptr %145, align 8, !tbaa !12
  %1745 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1742, ptr noundef nonnull align 8 dereferenceable(8) %145)
          to label %1746 unwind label %1883

1746:                                             ; preds = %1739
  %1747 = load double, ptr %1745, align 8, !tbaa !14
  %1748 = invoke noundef double %1741(double noundef %1747)
          to label %1749 unwind label %1883

1749:                                             ; preds = %1746
  %1750 = fneg double %1748
  %1751 = load double, ptr %131, align 8, !tbaa !14
  %1752 = fmul double %1750, %1751
  %1753 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1754 = load double, ptr %1753, align 8, !tbaa !23
  %1755 = fmul double %1752, %1754
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #4
  %1756 = load i32, ptr %144, align 4, !tbaa !10
  %1757 = sext i32 %1756 to i64
  store i64 %1757, ptr %146, align 8, !tbaa !12
  %1758 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %146)
          to label %1759 unwind label %1887

1759:                                             ; preds = %1749
  %1760 = getelementptr inbounds double, ptr %1758, i64 0
  store double %1755, ptr %1760, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #4
  %1761 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1762 = load ptr, ptr %1761, align 8, !tbaa !24
  %1763 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #4
  %1764 = load i32, ptr %144, align 4, !tbaa !10
  %1765 = sext i32 %1764 to i64
  store i64 %1765, ptr %147, align 8, !tbaa !12
  %1766 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1763, ptr noundef nonnull align 8 dereferenceable(8) %147)
          to label %1767 unwind label %1892

1767:                                             ; preds = %1759
  %1768 = load double, ptr %1766, align 8, !tbaa !14
  %1769 = invoke noundef double %1762(double noundef %1768)
          to label %1770 unwind label %1892

1770:                                             ; preds = %1767
  %1771 = fmul double 2.000000e+00, %1769
  %1772 = load double, ptr %131, align 8, !tbaa !14
  %1773 = fmul double %1771, %1772
  %1774 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1775 = load double, ptr %1774, align 8, !tbaa !23
  %1776 = call double @llvm.fmuladd.f64(double %1773, double %1775, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #4
  %1777 = load i32, ptr %144, align 4, !tbaa !10
  %1778 = sext i32 %1777 to i64
  store i64 %1778, ptr %148, align 8, !tbaa !12
  %1779 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %148)
          to label %1780 unwind label %1896

1780:                                             ; preds = %1770
  %1781 = getelementptr inbounds double, ptr %1779, i64 1
  store double %1776, ptr %1781, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #4
  %1782 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1783 = load ptr, ptr %1782, align 8, !tbaa !24
  %1784 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #4
  %1785 = load i32, ptr %144, align 4, !tbaa !10
  %1786 = sext i32 %1785 to i64
  store i64 %1786, ptr %149, align 8, !tbaa !12
  %1787 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1784, ptr noundef nonnull align 8 dereferenceable(8) %149)
          to label %1788 unwind label %1901

1788:                                             ; preds = %1780
  %1789 = load double, ptr %1787, align 8, !tbaa !14
  %1790 = invoke noundef double %1783(double noundef %1789)
          to label %1791 unwind label %1901

1791:                                             ; preds = %1788
  %1792 = fneg double %1790
  %1793 = load double, ptr %131, align 8, !tbaa !14
  %1794 = fmul double %1792, %1793
  %1795 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1796 = load double, ptr %1795, align 8, !tbaa !23
  %1797 = fmul double %1794, %1796
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #4
  %1798 = load i32, ptr %144, align 4, !tbaa !10
  %1799 = sext i32 %1798 to i64
  store i64 %1799, ptr %150, align 8, !tbaa !12
  %1800 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %150)
          to label %1801 unwind label %1905

1801:                                             ; preds = %1791
  %1802 = getelementptr inbounds double, ptr %1800, i64 2
  store double %1797, ptr %1802, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #4
  %1803 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1804 = load ptr, ptr %1803, align 8, !tbaa !24
  %1805 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #4
  %1806 = load i32, ptr %144, align 4, !tbaa !10
  %1807 = sext i32 %1806 to i64
  store i64 %1807, ptr %151, align 8, !tbaa !12
  %1808 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1805, ptr noundef nonnull align 8 dereferenceable(8) %151)
          to label %1809 unwind label %1910

1809:                                             ; preds = %1801
  %1810 = load double, ptr %1808, align 8, !tbaa !14
  %1811 = invoke noundef double %1804(double noundef %1810)
          to label %1812 unwind label %1910

1812:                                             ; preds = %1809
  %1813 = load double, ptr %131, align 8, !tbaa !14
  %1814 = fmul double %1811, %1813
  %1815 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1816 = load double, ptr %1815, align 8, !tbaa !23
  %1817 = fsub double 1.000000e+00, %1816
  %1818 = fmul double %1814, %1817
  %1819 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #4
  %1820 = load i32, ptr %144, align 4, !tbaa !10
  %1821 = add nsw i32 %1820, 1
  %1822 = sext i32 %1821 to i64
  store i64 %1822, ptr %152, align 8, !tbaa !12
  %1823 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1819, ptr noundef nonnull align 8 dereferenceable(8) %152)
          to label %1824 unwind label %1914

1824:                                             ; preds = %1812
  %1825 = load double, ptr %1823, align 8, !tbaa !14
  %1826 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1827 = load ptr, ptr %1826, align 8, !tbaa !24
  %1828 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #4
  %1829 = load i32, ptr %144, align 4, !tbaa !10
  %1830 = sext i32 %1829 to i64
  store i64 %1830, ptr %153, align 8, !tbaa !12
  %1831 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1828, ptr noundef nonnull align 8 dereferenceable(8) %153)
          to label %1832 unwind label %1918

1832:                                             ; preds = %1824
  %1833 = load double, ptr %1831, align 8, !tbaa !14
  %1834 = invoke noundef double %1827(double noundef %1833)
          to label %1835 unwind label %1918

1835:                                             ; preds = %1832
  %1836 = fmul double 2.000000e+00, %1834
  %1837 = load double, ptr %131, align 8, !tbaa !14
  %1838 = fmul double %1836, %1837
  %1839 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1840 = load double, ptr %1839, align 8, !tbaa !23
  %1841 = fsub double 1.000000e+00, %1840
  %1842 = fneg double %1838
  %1843 = call double @llvm.fmuladd.f64(double %1842, double %1841, double 1.000000e+00)
  %1844 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #4
  %1845 = load i32, ptr %144, align 4, !tbaa !10
  %1846 = sext i32 %1845 to i64
  store i64 %1846, ptr %154, align 8, !tbaa !12
  %1847 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1844, ptr noundef nonnull align 8 dereferenceable(8) %154)
          to label %1848 unwind label %1922

1848:                                             ; preds = %1835
  %1849 = load double, ptr %1847, align 8, !tbaa !14
  %1850 = fmul double %1843, %1849
  %1851 = call double @llvm.fmuladd.f64(double %1818, double %1825, double %1850)
  %1852 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1853 = load ptr, ptr %1852, align 8, !tbaa !24
  %1854 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #4
  %1855 = load i32, ptr %144, align 4, !tbaa !10
  %1856 = sext i32 %1855 to i64
  store i64 %1856, ptr %155, align 8, !tbaa !12
  %1857 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1854, ptr noundef nonnull align 8 dereferenceable(8) %155)
          to label %1858 unwind label %1926

1858:                                             ; preds = %1848
  %1859 = load double, ptr %1857, align 8, !tbaa !14
  %1860 = invoke noundef double %1853(double noundef %1859)
          to label %1861 unwind label %1926

1861:                                             ; preds = %1858
  %1862 = load double, ptr %131, align 8, !tbaa !14
  %1863 = fmul double %1860, %1862
  %1864 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1865 = load double, ptr %1864, align 8, !tbaa !23
  %1866 = fsub double 1.000000e+00, %1865
  %1867 = fmul double %1863, %1866
  %1868 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #4
  %1869 = load i32, ptr %144, align 4, !tbaa !10
  %1870 = sub nsw i32 %1869, 1
  %1871 = sext i32 %1870 to i64
  store i64 %1871, ptr %156, align 8, !tbaa !12
  %1872 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1868, ptr noundef nonnull align 8 dereferenceable(8) %156)
          to label %1873 unwind label %1930

1873:                                             ; preds = %1861
  %1874 = load double, ptr %1872, align 8, !tbaa !14
  %1875 = call double @llvm.fmuladd.f64(double %1867, double %1874, double %1851)
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #4
  %1876 = load i32, ptr %144, align 4, !tbaa !10
  %1877 = sext i32 %1876 to i64
  store i64 %1877, ptr %157, align 8, !tbaa !12
  %1878 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %1879 unwind label %1934

1879:                                             ; preds = %1873
  store double %1875, ptr %1878, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #4
  br label %1880

1880:                                             ; preds = %1879
  %1881 = load i32, ptr %144, align 4, !tbaa !10
  %1882 = add nsw i32 %1881, 1
  store i32 %1882, ptr %144, align 4, !tbaa !10
  br label %1677, !llvm.loop !31

1883:                                             ; preds = %1746, %1739
  %1884 = landingpad { ptr, i32 }
          cleanup
  %1885 = extractvalue { ptr, i32 } %1884, 0
  store ptr %1885, ptr %19, align 8
  %1886 = extractvalue { ptr, i32 } %1884, 1
  store i32 %1886, ptr %20, align 4
  br label %1891

1887:                                             ; preds = %1749
  %1888 = landingpad { ptr, i32 }
          cleanup
  %1889 = extractvalue { ptr, i32 } %1888, 0
  store ptr %1889, ptr %19, align 8
  %1890 = extractvalue { ptr, i32 } %1888, 1
  store i32 %1890, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #4
  br label %1891

1891:                                             ; preds = %1887, %1883
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #4
  br label %1944

1892:                                             ; preds = %1767, %1759
  %1893 = landingpad { ptr, i32 }
          cleanup
  %1894 = extractvalue { ptr, i32 } %1893, 0
  store ptr %1894, ptr %19, align 8
  %1895 = extractvalue { ptr, i32 } %1893, 1
  store i32 %1895, ptr %20, align 4
  br label %1900

1896:                                             ; preds = %1770
  %1897 = landingpad { ptr, i32 }
          cleanup
  %1898 = extractvalue { ptr, i32 } %1897, 0
  store ptr %1898, ptr %19, align 8
  %1899 = extractvalue { ptr, i32 } %1897, 1
  store i32 %1899, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #4
  br label %1900

1900:                                             ; preds = %1896, %1892
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #4
  br label %1944

1901:                                             ; preds = %1788, %1780
  %1902 = landingpad { ptr, i32 }
          cleanup
  %1903 = extractvalue { ptr, i32 } %1902, 0
  store ptr %1903, ptr %19, align 8
  %1904 = extractvalue { ptr, i32 } %1902, 1
  store i32 %1904, ptr %20, align 4
  br label %1909

1905:                                             ; preds = %1791
  %1906 = landingpad { ptr, i32 }
          cleanup
  %1907 = extractvalue { ptr, i32 } %1906, 0
  store ptr %1907, ptr %19, align 8
  %1908 = extractvalue { ptr, i32 } %1906, 1
  store i32 %1908, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #4
  br label %1909

1909:                                             ; preds = %1905, %1901
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #4
  br label %1944

1910:                                             ; preds = %1809, %1801
  %1911 = landingpad { ptr, i32 }
          cleanup
  %1912 = extractvalue { ptr, i32 } %1911, 0
  store ptr %1912, ptr %19, align 8
  %1913 = extractvalue { ptr, i32 } %1911, 1
  store i32 %1913, ptr %20, align 4
  br label %1943

1914:                                             ; preds = %1812
  %1915 = landingpad { ptr, i32 }
          cleanup
  %1916 = extractvalue { ptr, i32 } %1915, 0
  store ptr %1916, ptr %19, align 8
  %1917 = extractvalue { ptr, i32 } %1915, 1
  store i32 %1917, ptr %20, align 4
  br label %1942

1918:                                             ; preds = %1832, %1824
  %1919 = landingpad { ptr, i32 }
          cleanup
  %1920 = extractvalue { ptr, i32 } %1919, 0
  store ptr %1920, ptr %19, align 8
  %1921 = extractvalue { ptr, i32 } %1919, 1
  store i32 %1921, ptr %20, align 4
  br label %1941

1922:                                             ; preds = %1835
  %1923 = landingpad { ptr, i32 }
          cleanup
  %1924 = extractvalue { ptr, i32 } %1923, 0
  store ptr %1924, ptr %19, align 8
  %1925 = extractvalue { ptr, i32 } %1923, 1
  store i32 %1925, ptr %20, align 4
  br label %1940

1926:                                             ; preds = %1858, %1848
  %1927 = landingpad { ptr, i32 }
          cleanup
  %1928 = extractvalue { ptr, i32 } %1927, 0
  store ptr %1928, ptr %19, align 8
  %1929 = extractvalue { ptr, i32 } %1927, 1
  store i32 %1929, ptr %20, align 4
  br label %1939

1930:                                             ; preds = %1861
  %1931 = landingpad { ptr, i32 }
          cleanup
  %1932 = extractvalue { ptr, i32 } %1931, 0
  store ptr %1932, ptr %19, align 8
  %1933 = extractvalue { ptr, i32 } %1931, 1
  store i32 %1933, ptr %20, align 4
  br label %1938

1934:                                             ; preds = %1873
  %1935 = landingpad { ptr, i32 }
          cleanup
  %1936 = extractvalue { ptr, i32 } %1935, 0
  store ptr %1936, ptr %19, align 8
  %1937 = extractvalue { ptr, i32 } %1935, 1
  store i32 %1937, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #4
  br label %1938

1938:                                             ; preds = %1934, %1930
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #4
  br label %1939

1939:                                             ; preds = %1938, %1926
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #4
  br label %1940

1940:                                             ; preds = %1939, %1922
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #4
  br label %1941

1941:                                             ; preds = %1940, %1918
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #4
  br label %1942

1942:                                             ; preds = %1941, %1914
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #4
  br label %1943

1943:                                             ; preds = %1942, %1910
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #4
  br label %1944

1944:                                             ; preds = %1943, %1909, %1900, %1891
  call void @llvm.lifetime.end.p0(i64 4, ptr %144) #4
  br label %2156

1945:                                             ; preds = %1682
  %1946 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1947 = load ptr, ptr %1946, align 8, !tbaa !24
  %1948 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #4
  %1949 = load i32, ptr %13, align 4, !tbaa !10
  %1950 = sub nsw i32 %1949, 1
  %1951 = sext i32 %1950 to i64
  store i64 %1951, ptr %158, align 8, !tbaa !12
  %1952 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1948, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %1953 unwind label %2091

1953:                                             ; preds = %1945
  %1954 = load double, ptr %1952, align 8, !tbaa !14
  %1955 = invoke noundef double %1947(double noundef %1954)
          to label %1956 unwind label %2091

1956:                                             ; preds = %1953
  %1957 = fmul double -2.000000e+00, %1955
  %1958 = load double, ptr %131, align 8, !tbaa !14
  %1959 = fmul double %1957, %1958
  %1960 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1961 = load double, ptr %1960, align 8, !tbaa !23
  %1962 = fmul double %1959, %1961
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #4
  %1963 = load i32, ptr %13, align 4, !tbaa !10
  %1964 = sub nsw i32 %1963, 1
  %1965 = sext i32 %1964 to i64
  store i64 %1965, ptr %159, align 8, !tbaa !12
  %1966 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %159)
          to label %1967 unwind label %2095

1967:                                             ; preds = %1956
  %1968 = getelementptr inbounds double, ptr %1966, i64 0
  store double %1962, ptr %1968, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #4
  %1969 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1970 = load ptr, ptr %1969, align 8, !tbaa !24
  %1971 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #4
  %1972 = load i32, ptr %13, align 4, !tbaa !10
  %1973 = sub nsw i32 %1972, 1
  %1974 = sext i32 %1973 to i64
  store i64 %1974, ptr %160, align 8, !tbaa !12
  %1975 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1971, ptr noundef nonnull align 8 dereferenceable(8) %160)
          to label %1976 unwind label %2100

1976:                                             ; preds = %1967
  %1977 = load double, ptr %1975, align 8, !tbaa !14
  %1978 = invoke noundef double %1970(double noundef %1977)
          to label %1979 unwind label %2100

1979:                                             ; preds = %1976
  %1980 = fmul double 2.000000e+00, %1978
  %1981 = load double, ptr %131, align 8, !tbaa !14
  %1982 = fmul double %1980, %1981
  %1983 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %1984 = load double, ptr %1983, align 8, !tbaa !23
  %1985 = call double @llvm.fmuladd.f64(double %1982, double %1984, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #4
  %1986 = load i32, ptr %13, align 4, !tbaa !10
  %1987 = sub nsw i32 %1986, 1
  %1988 = sext i32 %1987 to i64
  store i64 %1988, ptr %161, align 8, !tbaa !12
  %1989 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %161)
          to label %1990 unwind label %2104

1990:                                             ; preds = %1979
  %1991 = getelementptr inbounds double, ptr %1989, i64 1
  store double %1985, ptr %1991, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #4
  %1992 = load i32, ptr %13, align 4, !tbaa !10
  %1993 = sub nsw i32 %1992, 1
  %1994 = sext i32 %1993 to i64
  store i64 %1994, ptr %162, align 8, !tbaa !12
  %1995 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(8) %162)
          to label %1996 unwind label %2109

1996:                                             ; preds = %1990
  %1997 = getelementptr inbounds double, ptr %1995, i64 2
  store double 0.000000e+00, ptr %1997, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #4
  %1998 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %1999 = load ptr, ptr %1998, align 8, !tbaa !24
  %2000 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #4
  %2001 = load i32, ptr %13, align 4, !tbaa !10
  %2002 = sub nsw i32 %2001, 1
  %2003 = sext i32 %2002 to i64
  store i64 %2003, ptr %163, align 8, !tbaa !12
  %2004 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2000, ptr noundef nonnull align 8 dereferenceable(8) %163)
          to label %2005 unwind label %2113

2005:                                             ; preds = %1996
  %2006 = load double, ptr %2004, align 8, !tbaa !14
  %2007 = invoke noundef double %1999(double noundef %2006)
          to label %2008 unwind label %2113

2008:                                             ; preds = %2005
  %2009 = fmul double 2.000000e+00, %2007
  %2010 = load double, ptr %131, align 8, !tbaa !14
  %2011 = fmul double %2009, %2010
  %2012 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %2013 = load double, ptr %2012, align 8, !tbaa !23
  %2014 = fsub double 1.000000e+00, %2013
  %2015 = fmul double %2011, %2014
  %2016 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #4
  %2017 = load i32, ptr %13, align 4, !tbaa !10
  %2018 = sub nsw i32 %2017, 2
  %2019 = sext i32 %2018 to i64
  store i64 %2019, ptr %164, align 8, !tbaa !12
  %2020 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2016, ptr noundef nonnull align 8 dereferenceable(8) %164)
          to label %2021 unwind label %2117

2021:                                             ; preds = %2008
  %2022 = load double, ptr %2020, align 8, !tbaa !14
  %2023 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %2024 = load ptr, ptr %2023, align 8, !tbaa !24
  %2025 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #4
  %2026 = load i32, ptr %13, align 4, !tbaa !10
  %2027 = sub nsw i32 %2026, 1
  %2028 = sext i32 %2027 to i64
  store i64 %2028, ptr %165, align 8, !tbaa !12
  %2029 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2025, ptr noundef nonnull align 8 dereferenceable(8) %165)
          to label %2030 unwind label %2121

2030:                                             ; preds = %2021
  %2031 = load double, ptr %2029, align 8, !tbaa !14
  %2032 = invoke noundef double %2024(double noundef %2031)
          to label %2033 unwind label %2121

2033:                                             ; preds = %2030
  %2034 = fmul double 2.000000e+00, %2032
  %2035 = load double, ptr %131, align 8, !tbaa !14
  %2036 = fmul double %2034, %2035
  %2037 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %2038 = load double, ptr %2037, align 8, !tbaa !23
  %2039 = fsub double 1.000000e+00, %2038
  %2040 = fneg double %2036
  %2041 = call double @llvm.fmuladd.f64(double %2040, double %2039, double 1.000000e+00)
  %2042 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #4
  %2043 = load i32, ptr %13, align 4, !tbaa !10
  %2044 = sub nsw i32 %2043, 1
  %2045 = sext i32 %2044 to i64
  store i64 %2045, ptr %166, align 8, !tbaa !12
  %2046 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2042, ptr noundef nonnull align 8 dereferenceable(8) %166)
          to label %2047 unwind label %2125

2047:                                             ; preds = %2033
  %2048 = load double, ptr %2046, align 8, !tbaa !14
  %2049 = fmul double %2041, %2048
  %2050 = call double @llvm.fmuladd.f64(double %2015, double %2022, double %2049)
  %2051 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 19
  %2052 = load ptr, ptr %2051, align 8, !tbaa !24
  %2053 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #4
  %2054 = load i32, ptr %13, align 4, !tbaa !10
  %2055 = sub nsw i32 %2054, 1
  %2056 = sext i32 %2055 to i64
  store i64 %2056, ptr %167, align 8, !tbaa !12
  %2057 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2053, ptr noundef nonnull align 8 dereferenceable(8) %167)
          to label %2058 unwind label %2129

2058:                                             ; preds = %2047
  %2059 = load double, ptr %2057, align 8, !tbaa !14
  %2060 = invoke noundef double %2052(double noundef %2059)
          to label %2061 unwind label %2129

2061:                                             ; preds = %2058
  %2062 = fmul double 2.000000e+00, %2060
  %2063 = load double, ptr %131, align 8, !tbaa !14
  %2064 = fmul double %2062, %2063
  %2065 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 21
  %2066 = load double, ptr %2065, align 8, !tbaa !23
  %2067 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2066, double 1.000000e+00)
  %2068 = fmul double %2064, %2067
  %2069 = load double, ptr %128, align 8, !tbaa !14
  %2070 = fmul double %2068, %2069
  %2071 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 8
  %2072 = load ptr, ptr %2071, align 8, !tbaa !28
  %2073 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #4
  %2074 = load i32, ptr %13, align 4, !tbaa !10
  %2075 = sub nsw i32 %2074, 1
  %2076 = sext i32 %2075 to i64
  store i64 %2076, ptr %168, align 8, !tbaa !12
  %2077 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2073, ptr noundef nonnull align 8 dereferenceable(8) %168)
          to label %2078 unwind label %2133

2078:                                             ; preds = %2061
  %2079 = load double, ptr %2077, align 8, !tbaa !14
  %2080 = invoke noundef double %2072(double noundef %2079, double noundef 0.000000e+00)
          to label %2081 unwind label %2133

2081:                                             ; preds = %2078
  %2082 = call double @llvm.fmuladd.f64(double %2070, double %2080, double %2050)
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #4
  %2083 = load i32, ptr %13, align 4, !tbaa !10
  %2084 = sub nsw i32 %2083, 1
  %2085 = sext i32 %2084 to i64
  store i64 %2085, ptr %169, align 8, !tbaa !12
  %2086 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %126, ptr noundef nonnull align 8 dereferenceable(8) %169)
          to label %2087 unwind label %2137

2087:                                             ; preds = %2081
  store double %2082, ptr %2086, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr %170) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind writable sret(%"class.cda::math::containers::Vector") align 8 %170, ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(24) %126)
          to label %2088 unwind label %2147

2088:                                             ; preds = %2087
  %2089 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %170)
          to label %2090 unwind label %2151

2090:                                             ; preds = %2088
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %170) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %170) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %126) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr %126) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr %123) #4
  br label %2160

2091:                                             ; preds = %1953, %1945
  %2092 = landingpad { ptr, i32 }
          cleanup
  %2093 = extractvalue { ptr, i32 } %2092, 0
  store ptr %2093, ptr %19, align 8
  %2094 = extractvalue { ptr, i32 } %2092, 1
  store i32 %2094, ptr %20, align 4
  br label %2099

2095:                                             ; preds = %1956
  %2096 = landingpad { ptr, i32 }
          cleanup
  %2097 = extractvalue { ptr, i32 } %2096, 0
  store ptr %2097, ptr %19, align 8
  %2098 = extractvalue { ptr, i32 } %2096, 1
  store i32 %2098, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #4
  br label %2099

2099:                                             ; preds = %2095, %2091
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #4
  br label %2156

2100:                                             ; preds = %1976, %1967
  %2101 = landingpad { ptr, i32 }
          cleanup
  %2102 = extractvalue { ptr, i32 } %2101, 0
  store ptr %2102, ptr %19, align 8
  %2103 = extractvalue { ptr, i32 } %2101, 1
  store i32 %2103, ptr %20, align 4
  br label %2108

2104:                                             ; preds = %1979
  %2105 = landingpad { ptr, i32 }
          cleanup
  %2106 = extractvalue { ptr, i32 } %2105, 0
  store ptr %2106, ptr %19, align 8
  %2107 = extractvalue { ptr, i32 } %2105, 1
  store i32 %2107, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #4
  br label %2108

2108:                                             ; preds = %2104, %2100
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #4
  br label %2156

2109:                                             ; preds = %1990
  %2110 = landingpad { ptr, i32 }
          cleanup
  %2111 = extractvalue { ptr, i32 } %2110, 0
  store ptr %2111, ptr %19, align 8
  %2112 = extractvalue { ptr, i32 } %2110, 1
  store i32 %2112, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #4
  br label %2156

2113:                                             ; preds = %2005, %1996
  %2114 = landingpad { ptr, i32 }
          cleanup
  %2115 = extractvalue { ptr, i32 } %2114, 0
  store ptr %2115, ptr %19, align 8
  %2116 = extractvalue { ptr, i32 } %2114, 1
  store i32 %2116, ptr %20, align 4
  br label %2146

2117:                                             ; preds = %2008
  %2118 = landingpad { ptr, i32 }
          cleanup
  %2119 = extractvalue { ptr, i32 } %2118, 0
  store ptr %2119, ptr %19, align 8
  %2120 = extractvalue { ptr, i32 } %2118, 1
  store i32 %2120, ptr %20, align 4
  br label %2145

2121:                                             ; preds = %2030, %2021
  %2122 = landingpad { ptr, i32 }
          cleanup
  %2123 = extractvalue { ptr, i32 } %2122, 0
  store ptr %2123, ptr %19, align 8
  %2124 = extractvalue { ptr, i32 } %2122, 1
  store i32 %2124, ptr %20, align 4
  br label %2144

2125:                                             ; preds = %2033
  %2126 = landingpad { ptr, i32 }
          cleanup
  %2127 = extractvalue { ptr, i32 } %2126, 0
  store ptr %2127, ptr %19, align 8
  %2128 = extractvalue { ptr, i32 } %2126, 1
  store i32 %2128, ptr %20, align 4
  br label %2143

2129:                                             ; preds = %2058, %2047
  %2130 = landingpad { ptr, i32 }
          cleanup
  %2131 = extractvalue { ptr, i32 } %2130, 0
  store ptr %2131, ptr %19, align 8
  %2132 = extractvalue { ptr, i32 } %2130, 1
  store i32 %2132, ptr %20, align 4
  br label %2142

2133:                                             ; preds = %2078, %2061
  %2134 = landingpad { ptr, i32 }
          cleanup
  %2135 = extractvalue { ptr, i32 } %2134, 0
  store ptr %2135, ptr %19, align 8
  %2136 = extractvalue { ptr, i32 } %2134, 1
  store i32 %2136, ptr %20, align 4
  br label %2141

2137:                                             ; preds = %2081
  %2138 = landingpad { ptr, i32 }
          cleanup
  %2139 = extractvalue { ptr, i32 } %2138, 0
  store ptr %2139, ptr %19, align 8
  %2140 = extractvalue { ptr, i32 } %2138, 1
  store i32 %2140, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #4
  br label %2141

2141:                                             ; preds = %2137, %2133
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #4
  br label %2142

2142:                                             ; preds = %2141, %2129
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #4
  br label %2143

2143:                                             ; preds = %2142, %2125
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #4
  br label %2144

2144:                                             ; preds = %2143, %2121
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #4
  br label %2145

2145:                                             ; preds = %2144, %2117
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #4
  br label %2146

2146:                                             ; preds = %2145, %2113
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #4
  br label %2156

2147:                                             ; preds = %2087
  %2148 = landingpad { ptr, i32 }
          cleanup
  %2149 = extractvalue { ptr, i32 } %2148, 0
  store ptr %2149, ptr %19, align 8
  %2150 = extractvalue { ptr, i32 } %2148, 1
  store i32 %2150, ptr %20, align 4
  br label %2155

2151:                                             ; preds = %2088
  %2152 = landingpad { ptr, i32 }
          cleanup
  %2153 = extractvalue { ptr, i32 } %2152, 0
  store ptr %2153, ptr %19, align 8
  %2154 = extractvalue { ptr, i32 } %2152, 1
  store i32 %2154, ptr %20, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %170) #4
  br label %2155

2155:                                             ; preds = %2151, %2147
  call void @llvm.lifetime.end.p0(i64 24, ptr %170) #4
  br label %2156

2156:                                             ; preds = %2155, %2146, %2109, %2108, %2099, %1944, %1738, %1704, %1695, %1683
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #4
  br label %2157

2157:                                             ; preds = %2156, %1568
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %126) #4
  br label %2158

2158:                                             ; preds = %2157, %1556
  call void @llvm.lifetime.end.p0(i64 24, ptr %126) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #4
  br label %2159

2159:                                             ; preds = %2158, %1552
  call void @llvm.lifetime.end.p0(i64 40, ptr %123) #4
  br label %2169

2160:                                             ; preds = %2090, %1506, %1501
  %2161 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 18
  %2162 = load double, ptr %2161, align 8, !tbaa !16
  %2163 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %171, i32 0, i32 17
  %2164 = load double, ptr %2163, align 8, !tbaa !32
  %2165 = fadd double %2164, %2162
  store double %2165, ptr %2163, align 8, !tbaa !32
  store i1 true, ptr %14, align 1
  %2166 = load i1, ptr %14, align 1
  br i1 %2166, label %2168, label %2167

2167:                                             ; preds = %2160
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #4
  br label %2168

2168:                                             ; preds = %2167, %2160
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  ret void

2169:                                             ; preds = %2159, %1500, %1016, %496
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %2170

2170:                                             ; preds = %2169
  %2171 = load ptr, ptr %19, align 8
  %2172 = load i32, ptr %20, align 4
  %2173 = insertvalue { ptr, i32 } poison, ptr %2171, 0
  %2174 = insertvalue { ptr, i32 } %2173, i32 %2172, 1
  resume { ptr, i32 } %2174
}

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 = { 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, !15, i64 272}
!24 = !{!17, !6, i64 256}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{!17, !6, i64 168}
!29 = !{!17, !6, i64 160}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !26}
!32 = !{!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.cda::math::containers::Vector" = type { i64, ptr, ptr }
%"class.cda::math::containers::Matrix" = type { i64, i64, i64, ptr, ptr }

; 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 uwtable
declare dso_local void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40), 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 uwtable
declare dso_local void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Vector") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2

; 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: mustprogress uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveHEATEhhRNS0_10containers6VectorIdEES6_(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) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i64, align 8
  %8 = alloca %"class.cda::math::containers::Matrix", align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca %"class.cda::math::containers::Vector", 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 %"class.cda::math::containers::Vector", align 8
  %31 = alloca i64, align 8
  %32 = alloca %"class.cda::math::containers::Matrix", align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca %"class.cda::math::containers::Vector", align 8
  %36 = alloca i64, align 8
  %37 = alloca %"class.cda::math::containers::Vector", 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 i64, align 8
  %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 %"class.cda::math::containers::Vector", align 8
  %67 = alloca i64, align 8
  %68 = alloca %"class.cda::math::containers::Matrix", align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca %"class.cda::math::containers::Vector", align 8
  %72 = alloca i64, align 8
  %73 = alloca %"class.cda::math::containers::Vector", align 8
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i64, align 8
  %77 = alloca i64, align 8
  %78 = alloca i64, align 8
  %79 = alloca i64, align 8
  %80 = alloca i64, align 8
  %81 = alloca i64, align 8
  %82 = alloca i64, align 8
  %83 = alloca i64, align 8
  %84 = alloca i64, align 8
  %85 = alloca i64, align 8
  %86 = alloca i64, align 8
  %87 = alloca i64, align 8
  %88 = alloca i64, align 8
  %89 = alloca i64, align 8
  %90 = alloca i64, align 8
  %91 = alloca i64, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i64, align 8
  %95 = alloca i64, align 8
  %96 = alloca i64, align 8
  %97 = alloca i64, align 8
  %98 = alloca i64, align 8
  %99 = alloca i64, align 8
  %100 = alloca i64, align 8
  %101 = alloca i64, align 8
  %102 = alloca %"class.cda::math::containers::Vector", align 8
  %103 = alloca i64, align 8
  %104 = alloca %"class.cda::math::containers::Matrix", align 8
  %105 = alloca i64, align 8
  %106 = alloca i64, align 8
  %107 = alloca %"class.cda::math::containers::Vector", align 8
  %108 = alloca i64, align 8
  %109 = alloca i64, align 8
  %110 = alloca i64, align 8
  %111 = alloca i64, align 8
  %112 = alloca i64, align 8
  %113 = alloca i64, align 8
  %114 = alloca i64, align 8
  %115 = alloca i64, align 8
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca i64, align 8
  %119 = alloca i64, align 8
  %120 = alloca i64, align 8
  %121 = alloca i64, align 8
  %122 = alloca i64, align 8
  %123 = alloca i64, align 8
  %124 = alloca i64, align 8
  %125 = alloca i64, align 8
  %126 = alloca i64, align 8
  %127 = alloca i64, align 8
  %128 = alloca i64, align 8
  %129 = alloca i64, align 8
  %130 = alloca i64, align 8
  %131 = alloca i64, align 8
  %132 = alloca i64, align 8
  %133 = alloca i64, align 8
  %134 = alloca i64, align 8
  %135 = alloca i64, align 8
  %136 = alloca i64, align 8
  %137 = alloca i64, align 8
  %138 = alloca i64, align 8
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca i64, align 8
  %142 = alloca i64, align 8
  %143 = alloca i64, align 8
  %144 = alloca i64, align 8
  %145 = alloca i64, align 8
  %146 = alloca i64, align 8
  %147 = alloca i64, align 8
  %148 = alloca %"class.cda::math::containers::Vector", align 8
  %149 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %150 = trunc i64 %149 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  %sext = shl i64 %149, 32
  %151 = ashr exact i64 %sext, 32
  store i64 %151, ptr %7, align 8, !tbaa !5
  call void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %7)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  %152 = zext i8 %2 to i32
  %153 = and i32 %152, 3
  %or.cond.not = icmp eq i32 %153, 3
  br i1 %or.cond.not, label %154, label %291

154:                                              ; preds = %6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  %155 = add i32 %150, -2
  %156 = sext i32 %155 to i64
  store i64 %156, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  store i64 3, ptr %10, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %157 unwind label %181

157:                                              ; preds = %154
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #4
  store i64 %156, ptr %12, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %158 unwind label %183

158:                                              ; preds = %157
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #4
  store i64 %156, ptr %14, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %159 unwind label %185

159:                                              ; preds = %158
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #4
  %160 = add nsw i32 %150, -1
  %161 = sext i32 %160 to i64
  store i64 %161, ptr %15, align 8, !tbaa !5
  %162 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %163 = load double, ptr %162, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #4
  store i64 0, ptr %16, align 8, !tbaa !5
  %164 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %165 = load double, ptr %164, align 8, !tbaa !9
  %166 = fsub double %163, %165
  %167 = sitofp i32 %160 to double
  %168 = fdiv double %166, %167
  %169 = fptosi double %168 to i32
  %170 = call i32 @llvm.abs.i32(i32 %169, i1 true)
  %171 = uitofp nneg i32 %170 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #4
  %172 = getelementptr inbounds i8, ptr %1, i64 248
  %173 = load double, ptr %172, align 8, !tbaa !11
  %174 = fmul double %171, %171
  %175 = fdiv double %173, %174
  %176 = getelementptr inbounds i8, ptr %1, i64 272
  %177 = load double, ptr %176, align 8, !tbaa !19
  %178 = fcmp olt double %177, 0.000000e+00
  %179 = fcmp ogt double %177, 1.000000e+00
  %or.cond358 = or i1 %178, %179
  br i1 %or.cond358, label %180, label %187

180:                                              ; preds = %159
  store double 0x3FE5555555555555, ptr %176, align 8, !tbaa !19
  br label %187

181:                                              ; preds = %154
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  br label %290

183:                                              ; preds = %157
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #4
  br label %289

185:                                              ; preds = %158
  %186 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #4
  br label %288

187:                                              ; preds = %159, %180
  %188 = icmp sgt i32 %150, 2
  br i1 %188, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %187
  %189 = getelementptr inbounds i8, ptr %1, i64 256
  %wide.trip.count = zext nneg i32 %155 to i64
  br label %190

._crit_edge:                                      ; preds = %244, %187
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind nonnull writable sret(%"class.cda::math::containers::Vector") align 8 %30, ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(24) %11)
          to label %276 unwind label %281

190:                                              ; preds = %.lr.ph, %244
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %244 ]
  %191 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #4
  store i64 %indvars.iv, ptr %17, align 8, !tbaa !5
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = invoke noundef double %191(double noundef %193)
          to label %195 unwind label %262

195:                                              ; preds = %190
  %196 = fneg double %194
  %197 = fmul double %175, %196
  %198 = load double, ptr %176, align 8, !tbaa !19
  %199 = fmul double %197, %198
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #4
  store i64 %indvars.iv, ptr %18, align 8, !tbaa !5
  %200 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %18)
  store double %199, ptr %200, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  %201 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #4
  store i64 %indvars.iv, ptr %19, align 8, !tbaa !5
  %202 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %19)
  %203 = load double, ptr %202, align 8, !tbaa !9
  %204 = invoke noundef double %201(double noundef %203)
          to label %205 unwind label %264

205:                                              ; preds = %195
  %206 = fmul double %204, 2.000000e+00
  %207 = fmul double %175, %206
  %208 = load double, ptr %176, align 8, !tbaa !19
  %209 = call double @llvm.fmuladd.f64(double %207, double %208, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #4
  store i64 %indvars.iv, ptr %20, align 8, !tbaa !5
  %210 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %211 = getelementptr inbounds i8, ptr %210, i64 8
  store double %209, ptr %211, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  %212 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #4
  store i64 %indvars.iv, ptr %21, align 8, !tbaa !5
  %213 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %214 = load double, ptr %213, align 8, !tbaa !9
  %215 = invoke noundef double %212(double noundef %214)
          to label %216 unwind label %266

216:                                              ; preds = %205
  %217 = fneg double %215
  %218 = fmul double %175, %217
  %219 = load double, ptr %176, align 8, !tbaa !19
  %220 = fmul double %218, %219
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #4
  store i64 %indvars.iv, ptr %22, align 8, !tbaa !5
  %221 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %222 = getelementptr inbounds i8, ptr %221, i64 16
  store double %220, ptr %222, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #4
  %223 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #4
  store i64 %indvars.iv, ptr %23, align 8, !tbaa !5
  %224 = 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)
  %225 = load double, ptr %224, align 8, !tbaa !9
  %226 = invoke noundef double %223(double noundef %225)
          to label %227 unwind label %268

227:                                              ; preds = %216
  %228 = load double, ptr %176, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #4
  %229 = add nuw nsw i64 %indvars.iv, 2
  store i64 %229, ptr %24, align 8, !tbaa !5
  %230 = 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)
  %231 = load double, ptr %230, align 8, !tbaa !9
  %232 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #4
  store i64 %indvars.iv, ptr %25, align 8, !tbaa !5
  %233 = 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)
  %234 = load double, ptr %233, align 8, !tbaa !9
  %235 = invoke noundef double %232(double noundef %234)
          to label %236 unwind label %270

236:                                              ; preds = %227
  %237 = load double, ptr %176, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  store i64 %indvars.iv.next, ptr %26, align 8, !tbaa !5
  %238 = 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)
  %239 = load double, ptr %238, align 8, !tbaa !9
  %240 = load ptr, ptr %189, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #4
  store i64 %indvars.iv, ptr %27, align 8, !tbaa !5
  %241 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %242 = load double, ptr %241, align 8, !tbaa !9
  %243 = invoke noundef double %240(double noundef %242)
          to label %244 unwind label %272

244:                                              ; preds = %236
  %245 = fmul double %175, %226
  %246 = fsub double 1.000000e+00, %228
  %247 = fmul double %245, %246
  %248 = fmul double %235, -2.000000e+00
  %249 = fmul double %175, %248
  %250 = fsub double 1.000000e+00, %237
  %251 = call double @llvm.fmuladd.f64(double %249, double %250, double 1.000000e+00)
  %252 = fmul double %251, %239
  %253 = call double @llvm.fmuladd.f64(double %247, double %231, double %252)
  %254 = fmul double %175, %243
  %255 = load double, ptr %176, align 8, !tbaa !19
  %256 = fsub double 1.000000e+00, %255
  %257 = fmul double %254, %256
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #4
  store i64 %indvars.iv, ptr %28, align 8, !tbaa !5
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %28)
  %259 = load double, ptr %258, align 8, !tbaa !9
  %260 = call double @llvm.fmuladd.f64(double %257, double %259, double %253)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #4
  store i64 %indvars.iv, ptr %29, align 8, !tbaa !5
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(8) %29)
  store double %260, ptr %261, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %190, !llvm.loop !21

262:                                              ; preds = %190
  %263 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #4
  br label %287

264:                                              ; preds = %195
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #4
  br label %287

266:                                              ; preds = %205
  %267 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #4
  br label %287

268:                                              ; preds = %216
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %275

270:                                              ; preds = %227
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %274

272:                                              ; preds = %236
  %273 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #4
  br label %274

274:                                              ; preds = %272, %270
  %.pn349 = phi { ptr, i32 } [ %273, %272 ], [ %271, %270 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #4
  br label %275

275:                                              ; preds = %274, %268
  %.pn349.pn = phi { ptr, i32 } [ %.pn349, %274 ], [ %269, %268 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #4
  br label %287

276:                                              ; preds = %._crit_edge
  %277 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %30)
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #4
  %278 = 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 %279 unwind label %283

279:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #4
  store i64 1, ptr %31, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %280 unwind label %285

280:                                              ; preds = %279
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #4
  br label %291

281:                                              ; preds = %._crit_edge
  %282 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #4
  br label %287

283:                                              ; preds = %276
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %287

285:                                              ; preds = %279
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #4
  br label %287

287:                                              ; preds = %262, %264, %266, %275, %285, %283, %281
  %.pn349.pn.pn.pn = phi { ptr, i32 } [ %286, %285 ], [ %284, %283 ], [ %282, %281 ], [ %.pn349.pn, %275 ], [ %267, %266 ], [ %265, %264 ], [ %263, %262 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #4
  br label %288

288:                                              ; preds = %287, %185
  %.pn349.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn349.pn.pn.pn, %287 ], [ %186, %185 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #4
  br label %289

289:                                              ; preds = %288, %183
  %.pn349.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn349.pn.pn.pn.pn, %288 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %11) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #4
  br label %290

290:                                              ; preds = %289, %181
  %.pn349.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn349.pn.pn.pn.pn.pn, %289 ], [ %182, %181 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #4
  br label %1031

291:                                              ; preds = %280, %6
  %292 = and i32 %152, 33
  %or.cond359.not = icmp eq i32 %292, 33
  br i1 %or.cond359.not, label %293, label %514

293:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #4
  %294 = add nsw i32 %150, -1
  %295 = sext i32 %294 to i64
  store i64 %295, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #4
  store i64 3, ptr %34, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %296 unwind label %318

296:                                              ; preds = %293
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #4
  store i64 %295, ptr %36, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %297 unwind label %320

297:                                              ; preds = %296
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #4
  store i64 %295, ptr %38, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %298 unwind label %322

298:                                              ; preds = %297
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #4
  store i64 %295, ptr %39, align 8, !tbaa !5
  %299 = 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)
  %300 = load double, ptr %299, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #4
  store i64 0, ptr %40, align 8, !tbaa !5
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %302 = load double, ptr %301, align 8, !tbaa !9
  %303 = fsub double %300, %302
  %304 = sitofp i32 %294 to double
  %305 = fdiv double %303, %304
  %306 = fptosi double %305 to i32
  %307 = call i32 @llvm.abs.i32(i32 %306, i1 true)
  %308 = uitofp nneg i32 %307 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #4
  %309 = getelementptr inbounds i8, ptr %1, i64 248
  %310 = load double, ptr %309, align 8, !tbaa !11
  %311 = fmul double %308, %308
  %312 = fdiv double %310, %311
  %313 = getelementptr inbounds i8, ptr %1, i64 272
  %314 = load double, ptr %313, align 8, !tbaa !19
  %315 = fcmp olt double %314, 0.000000e+00
  %316 = fcmp ogt double %314, 1.000000e+00
  %or.cond360 = or i1 %315, %316
  br i1 %or.cond360, label %317, label %324

317:                                              ; preds = %298
  store double 0x3FE5555555555555, ptr %313, align 8, !tbaa !19
  br label %324

318:                                              ; preds = %293
  %319 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #4
  br label %513

320:                                              ; preds = %296
  %321 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #4
  br label %512

322:                                              ; preds = %297
  %323 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #4
  br label %511

324:                                              ; preds = %298, %317
  %325 = add i32 %150, -2
  %326 = icmp sgt i32 %150, 2
  br i1 %326, label %.lr.ph374, label %._crit_edge375

.lr.ph374:                                        ; preds = %324
  %327 = getelementptr inbounds i8, ptr %1, i64 256
  %wide.trip.count388 = zext nneg i32 %325 to i64
  br label %333

._crit_edge375:                                   ; preds = %387, %324
  %328 = getelementptr inbounds i8, ptr %1, i64 256
  %329 = load ptr, ptr %328, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #4
  store i64 %295, ptr %54, align 8, !tbaa !5
  %330 = 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)
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = invoke noundef double %329(double noundef %331)
          to label %419 unwind label %489

333:                                              ; preds = %.lr.ph374, %387
  %indvars.iv385 = phi i64 [ 0, %.lr.ph374 ], [ %indvars.iv.next386, %387 ]
  %334 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #4
  store i64 %indvars.iv385, ptr %41, align 8, !tbaa !5
  %335 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %336 = load double, ptr %335, align 8, !tbaa !9
  %337 = invoke noundef double %334(double noundef %336)
          to label %338 unwind label %405

338:                                              ; preds = %333
  %339 = fneg double %337
  %340 = fmul double %312, %339
  %341 = load double, ptr %313, align 8, !tbaa !19
  %342 = fmul double %340, %341
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #4
  store i64 %indvars.iv385, ptr %42, align 8, !tbaa !5
  %343 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %42)
  store double %342, ptr %343, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #4
  %344 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #4
  store i64 %indvars.iv385, ptr %43, 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) %43)
  %346 = load double, ptr %345, align 8, !tbaa !9
  %347 = invoke noundef double %344(double noundef %346)
          to label %348 unwind label %407

348:                                              ; preds = %338
  %349 = fmul double %347, 2.000000e+00
  %350 = fmul double %312, %349
  %351 = load double, ptr %313, align 8, !tbaa !19
  %352 = call double @llvm.fmuladd.f64(double %350, double %351, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #4
  store i64 %indvars.iv385, ptr %44, align 8, !tbaa !5
  %353 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %354 = getelementptr inbounds i8, ptr %353, i64 8
  store double %352, ptr %354, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #4
  %355 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #4
  store i64 %indvars.iv385, ptr %45, align 8, !tbaa !5
  %356 = 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)
  %357 = load double, ptr %356, align 8, !tbaa !9
  %358 = invoke noundef double %355(double noundef %357)
          to label %359 unwind label %409

359:                                              ; preds = %348
  %360 = fneg double %358
  %361 = fmul double %312, %360
  %362 = load double, ptr %313, align 8, !tbaa !19
  %363 = fmul double %361, %362
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #4
  store i64 %indvars.iv385, ptr %46, align 8, !tbaa !5
  %364 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %365 = getelementptr inbounds i8, ptr %364, i64 16
  store double %363, ptr %365, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #4
  %366 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #4
  store i64 %indvars.iv385, ptr %47, align 8, !tbaa !5
  %367 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %47)
  %368 = load double, ptr %367, align 8, !tbaa !9
  %369 = invoke noundef double %366(double noundef %368)
          to label %370 unwind label %411

370:                                              ; preds = %359
  %371 = load double, ptr %313, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #4
  %372 = add nuw nsw i64 %indvars.iv385, 2
  store i64 %372, ptr %48, align 8, !tbaa !5
  %373 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %374 = load double, ptr %373, align 8, !tbaa !9
  %375 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #4
  store i64 %indvars.iv385, ptr %49, align 8, !tbaa !5
  %376 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %49)
  %377 = load double, ptr %376, align 8, !tbaa !9
  %378 = invoke noundef double %375(double noundef %377)
          to label %379 unwind label %413

379:                                              ; preds = %370
  %380 = load double, ptr %313, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #4
  %indvars.iv.next386 = add nuw nsw i64 %indvars.iv385, 1
  store i64 %indvars.iv.next386, ptr %50, align 8, !tbaa !5
  %381 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %50)
  %382 = load double, ptr %381, align 8, !tbaa !9
  %383 = load ptr, ptr %327, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #4
  store i64 %indvars.iv385, ptr %51, align 8, !tbaa !5
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %51)
  %385 = load double, ptr %384, align 8, !tbaa !9
  %386 = invoke noundef double %383(double noundef %385)
          to label %387 unwind label %415

387:                                              ; preds = %379
  %388 = fmul double %312, %369
  %389 = fsub double 1.000000e+00, %371
  %390 = fmul double %388, %389
  %391 = fmul double %378, -2.000000e+00
  %392 = fmul double %312, %391
  %393 = fsub double 1.000000e+00, %380
  %394 = call double @llvm.fmuladd.f64(double %392, double %393, double 1.000000e+00)
  %395 = fmul double %394, %382
  %396 = call double @llvm.fmuladd.f64(double %390, double %374, double %395)
  %397 = fmul double %312, %386
  %398 = load double, ptr %313, align 8, !tbaa !19
  %399 = fsub double 1.000000e+00, %398
  %400 = fmul double %397, %399
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #4
  store i64 %indvars.iv385, ptr %52, align 8, !tbaa !5
  %401 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %52)
  %402 = load double, ptr %401, align 8, !tbaa !9
  %403 = call double @llvm.fmuladd.f64(double %400, double %402, double %396)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #4
  store i64 %indvars.iv385, ptr %53, align 8, !tbaa !5
  %404 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %53)
  store double %403, ptr %404, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #4
  %exitcond389.not = icmp eq i64 %indvars.iv.next386, %wide.trip.count388
  br i1 %exitcond389.not, label %._crit_edge375, label %333, !llvm.loop !23

405:                                              ; preds = %333
  %406 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #4
  br label %510

407:                                              ; preds = %338
  %408 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #4
  br label %510

409:                                              ; preds = %348
  %410 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #4
  br label %510

411:                                              ; preds = %359
  %412 = landingpad { ptr, i32 }
          cleanup
  br label %418

413:                                              ; preds = %370
  %414 = landingpad { ptr, i32 }
          cleanup
  br label %417

415:                                              ; preds = %379
  %416 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #4
  br label %417

417:                                              ; preds = %415, %413
  %.pn341 = phi { ptr, i32 } [ %416, %415 ], [ %414, %413 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #4
  br label %418

418:                                              ; preds = %417, %411
  %.pn341.pn = phi { ptr, i32 } [ %.pn341, %417 ], [ %412, %411 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #4
  br label %510

419:                                              ; preds = %._crit_edge375
  %420 = fmul double %332, -2.000000e+00
  %421 = fmul double %312, %420
  %422 = load double, ptr %313, align 8, !tbaa !19
  %423 = fmul double %421, %422
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #4
  %424 = sext i32 %325 to i64
  store i64 %424, ptr %55, align 8, !tbaa !5
  %425 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %55)
  store double %423, ptr %425, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #4
  %426 = load ptr, ptr %328, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #4
  store i64 %295, ptr %56, align 8, !tbaa !5
  %427 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %56)
  %428 = load double, ptr %427, align 8, !tbaa !9
  %429 = invoke noundef double %426(double noundef %428)
          to label %430 unwind label %491

430:                                              ; preds = %419
  %431 = fmul double %429, 2.000000e+00
  %432 = fmul double %312, %431
  %433 = load double, ptr %313, align 8, !tbaa !19
  %434 = call double @llvm.fmuladd.f64(double %432, double %433, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #4
  store i64 %424, ptr %57, align 8, !tbaa !5
  %435 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %57)
  %436 = getelementptr inbounds i8, ptr %435, i64 8
  store double %434, ptr %436, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #4
  store i64 %424, ptr %58, align 8, !tbaa !5
  %437 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %58)
  %438 = getelementptr inbounds i8, ptr %437, i64 16
  store double 0.000000e+00, ptr %438, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #4
  %439 = load ptr, ptr %328, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #4
  store i64 %295, ptr %59, align 8, !tbaa !5
  %440 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %441 = load double, ptr %440, align 8, !tbaa !9
  %442 = invoke noundef double %439(double noundef %441)
          to label %443 unwind label %493

443:                                              ; preds = %430
  %444 = load double, ptr %313, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #4
  store i64 %424, ptr %60, align 8, !tbaa !5
  %445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %60)
  %446 = load double, ptr %445, align 8, !tbaa !9
  %447 = load ptr, ptr %328, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #4
  store i64 %295, ptr %61, align 8, !tbaa !5
  %448 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %61)
  %449 = load double, ptr %448, align 8, !tbaa !9
  %450 = invoke noundef double %447(double noundef %449)
          to label %451 unwind label %495

451:                                              ; preds = %443
  %452 = fmul double %442, 2.000000e+00
  %453 = fmul double %312, %452
  %454 = fsub double 1.000000e+00, %444
  %455 = fmul double %453, %454
  %456 = load double, ptr %313, align 8, !tbaa !19
  %457 = fsub double 1.000000e+00, %456
  %458 = fmul double %450, -2.000000e+00
  %459 = fmul double %312, %458
  %460 = call double @llvm.fmuladd.f64(double %459, double %457, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #4
  store i64 %295, ptr %62, align 8, !tbaa !5
  %461 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %62)
  %462 = load double, ptr %461, align 8, !tbaa !9
  %463 = fmul double %460, %462
  %464 = call double @llvm.fmuladd.f64(double %455, double %446, double %463)
  %465 = load ptr, ptr %328, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #4
  store i64 %295, ptr %63, align 8, !tbaa !5
  %466 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %467 = load double, ptr %466, align 8, !tbaa !9
  %468 = invoke noundef double %465(double noundef %467)
          to label %469 unwind label %497

469:                                              ; preds = %451
  %470 = load double, ptr %313, align 8, !tbaa !19
  %471 = getelementptr inbounds i8, ptr %1, i64 168
  %472 = load ptr, ptr %471, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #4
  store i64 %295, ptr %64, align 8, !tbaa !5
  %473 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %64)
  %474 = load double, ptr %473, align 8, !tbaa !9
  %475 = invoke noundef double %472(double noundef %474, double noundef 0.000000e+00)
          to label %476 unwind label %499

476:                                              ; preds = %469
  %477 = fmul double %468, 2.000000e+00
  %478 = fmul double %312, %477
  %479 = call double @llvm.fmuladd.f64(double %470, double -2.000000e+00, double 1.000000e+00)
  %480 = fmul double %478, %479
  %481 = fmul double %480, %308
  %482 = call double @llvm.fmuladd.f64(double %481, double %475, double %464)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #4
  store i64 %424, ptr %65, align 8, !tbaa !5
  %483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %35, ptr noundef nonnull align 8 dereferenceable(8) %65)
  store double %482, ptr %483, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %66) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind nonnull writable sret(%"class.cda::math::containers::Vector") align 8 %66, ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(24) %35)
          to label %484 unwind label %504

484:                                              ; preds = %476
  %485 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %37, ptr noundef nonnull align 8 dereferenceable(24) %66)
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %66) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %66) #4
  %486 = 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 %487 unwind label %506

487:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #4
  store i64 1, ptr %67, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(24) %37)
          to label %488 unwind label %508

488:                                              ; preds = %487
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %32) #4
  br label %514

489:                                              ; preds = %._crit_edge375
  %490 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #4
  br label %510

491:                                              ; preds = %419
  %492 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #4
  br label %510

493:                                              ; preds = %430
  %494 = landingpad { ptr, i32 }
          cleanup
  br label %503

495:                                              ; preds = %443
  %496 = landingpad { ptr, i32 }
          cleanup
  br label %502

497:                                              ; preds = %451
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %501

499:                                              ; preds = %469
  %500 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #4
  br label %501

501:                                              ; preds = %499, %497
  %.pn = phi { ptr, i32 } [ %500, %499 ], [ %498, %497 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #4
  br label %502

502:                                              ; preds = %501, %495
  %.pn.pn = phi { ptr, i32 } [ %.pn, %501 ], [ %496, %495 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #4
  br label %503

503:                                              ; preds = %502, %493
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %502 ], [ %494, %493 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #4
  br label %510

504:                                              ; preds = %476
  %505 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %66) #4
  br label %510

506:                                              ; preds = %484
  %507 = landingpad { ptr, i32 }
          cleanup
  br label %510

508:                                              ; preds = %487
  %509 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #4
  br label %510

510:                                              ; preds = %405, %407, %409, %418, %508, %506, %504, %503, %491, %489
  %.pn341.pn.pn.pn = phi { ptr, i32 } [ %509, %508 ], [ %507, %506 ], [ %505, %504 ], [ %.pn.pn.pn, %503 ], [ %492, %491 ], [ %490, %489 ], [ %.pn341.pn, %418 ], [ %410, %409 ], [ %408, %407 ], [ %406, %405 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #4
  br label %511

511:                                              ; preds = %510, %322
  %.pn341.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn341.pn.pn.pn, %510 ], [ %323, %322 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %37) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #4
  br label %512

512:                                              ; preds = %511, %320
  %.pn341.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn341.pn.pn.pn.pn, %511 ], [ %321, %320 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %35) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #4
  br label %513

513:                                              ; preds = %512, %318
  %.pn341.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn341.pn.pn.pn.pn.pn, %512 ], [ %319, %318 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %32) #4
  br label %1031

514:                                              ; preds = %488, %291
  %515 = and i32 %152, 18
  %or.cond361.not = icmp eq i32 %515, 18
  br i1 %or.cond361.not, label %516, label %733

516:                                              ; preds = %514
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %68) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #4
  %517 = add i32 %150, -1
  %518 = sext i32 %517 to i64
  store i64 %518, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #4
  store i64 3, ptr %70, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %69, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %519 unwind label %541

519:                                              ; preds = %516
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %71) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #4
  store i64 %518, ptr %72, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 8 dereferenceable(8) %72)
          to label %520 unwind label %543

520:                                              ; preds = %519
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %73) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #4
  store i64 %518, ptr %74, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %73, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %521 unwind label %545

521:                                              ; preds = %520
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #4
  store i64 %518, ptr %75, align 8, !tbaa !5
  %522 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %75)
  %523 = load double, ptr %522, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #4
  store i64 0, ptr %76, align 8, !tbaa !5
  %524 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %525 = load double, ptr %524, align 8, !tbaa !9
  %526 = fsub double %523, %525
  %527 = sitofp i32 %517 to double
  %528 = fdiv double %526, %527
  %529 = fptosi double %528 to i32
  %530 = call i32 @llvm.abs.i32(i32 %529, i1 true)
  %531 = uitofp nneg i32 %530 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #4
  %532 = getelementptr inbounds i8, ptr %1, i64 248
  %533 = load double, ptr %532, align 8, !tbaa !11
  %534 = fmul double %531, %531
  %535 = fdiv double %533, %534
  %536 = getelementptr inbounds i8, ptr %1, i64 272
  %537 = load double, ptr %536, align 8, !tbaa !19
  %538 = fcmp olt double %537, 0.000000e+00
  %539 = fcmp ogt double %537, 1.000000e+00
  %or.cond362 = or i1 %538, %539
  br i1 %or.cond362, label %540, label %547

540:                                              ; preds = %521
  store double 0x3FE5555555555555, ptr %536, align 8, !tbaa !19
  br label %547

541:                                              ; preds = %516
  %542 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #4
  br label %732

543:                                              ; preds = %519
  %544 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #4
  br label %731

545:                                              ; preds = %520
  %546 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #4
  br label %730

547:                                              ; preds = %521, %540
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #4
  store i64 0, ptr %77, align 8, !tbaa !5
  %548 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %77)
  store double 0.000000e+00, ptr %548, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #4
  %549 = getelementptr inbounds i8, ptr %1, i64 256
  %550 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #4
  store i64 0, ptr %78, align 8, !tbaa !5
  %551 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %78)
  %552 = load double, ptr %551, align 8, !tbaa !9
  %553 = invoke noundef double %550(double noundef %552)
          to label %554 unwind label %618

554:                                              ; preds = %547
  %555 = fmul double %553, 2.000000e+00
  %556 = fmul double %535, %555
  %557 = load double, ptr %536, align 8, !tbaa !19
  %558 = call double @llvm.fmuladd.f64(double %556, double %557, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #4
  store i64 0, ptr %79, align 8, !tbaa !5
  %559 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %79)
  %560 = getelementptr inbounds i8, ptr %559, i64 8
  store double %558, ptr %560, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #4
  %561 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #4
  store i64 0, ptr %80, align 8, !tbaa !5
  %562 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %563 = load double, ptr %562, align 8, !tbaa !9
  %564 = invoke noundef double %561(double noundef %563)
          to label %565 unwind label %620

565:                                              ; preds = %554
  %566 = fmul double %564, -2.000000e+00
  %567 = fmul double %535, %566
  %568 = load double, ptr %536, align 8, !tbaa !19
  %569 = fmul double %567, %568
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #4
  store i64 0, ptr %81, align 8, !tbaa !5
  %570 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %81)
  %571 = getelementptr inbounds i8, ptr %570, i64 16
  store double %569, ptr %571, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #4
  %572 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #4
  store i64 0, ptr %82, align 8, !tbaa !5
  %573 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %82)
  %574 = load double, ptr %573, align 8, !tbaa !9
  %575 = invoke noundef double %572(double noundef %574)
          to label %576 unwind label %622

576:                                              ; preds = %565
  %577 = load double, ptr %536, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #4
  store i64 1, ptr %83, align 8, !tbaa !5
  %578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %579 = load double, ptr %578, align 8, !tbaa !9
  %580 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #4
  store i64 0, ptr %84, align 8, !tbaa !5
  %581 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %84)
  %582 = load double, ptr %581, align 8, !tbaa !9
  %583 = invoke noundef double %580(double noundef %582)
          to label %584 unwind label %624

584:                                              ; preds = %576
  %585 = fmul double %575, 2.000000e+00
  %586 = fmul double %535, %585
  %587 = fsub double 1.000000e+00, %577
  %588 = fmul double %586, %587
  %589 = load double, ptr %536, align 8, !tbaa !19
  %590 = fsub double 1.000000e+00, %589
  %591 = fmul double %583, -2.000000e+00
  %592 = fmul double %535, %591
  %593 = call double @llvm.fmuladd.f64(double %592, double %590, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #4
  store i64 0, ptr %85, align 8, !tbaa !5
  %594 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %85)
  %595 = load double, ptr %594, align 8, !tbaa !9
  %596 = fmul double %593, %595
  %597 = call double @llvm.fmuladd.f64(double %588, double %579, double %596)
  %598 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #4
  store i64 0, ptr %86, align 8, !tbaa !5
  %599 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %86)
  %600 = load double, ptr %599, align 8, !tbaa !9
  %601 = invoke noundef double %598(double noundef %600)
          to label %602 unwind label %626

602:                                              ; preds = %584
  %603 = load double, ptr %536, align 8, !tbaa !19
  %604 = getelementptr inbounds i8, ptr %1, i64 160
  %605 = load ptr, ptr %604, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #4
  store i64 0, ptr %87, align 8, !tbaa !5
  %606 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %607 = load double, ptr %606, align 8, !tbaa !9
  %608 = invoke noundef double %605(double noundef %607, double noundef 0.000000e+00)
          to label %609 unwind label %628

609:                                              ; preds = %602
  %610 = call double @llvm.fmuladd.f64(double %603, double -2.000000e+00, double 1.000000e+00)
  %611 = fmul double %601, -2.000000e+00
  %612 = fmul double %535, %611
  %613 = fmul double %612, %610
  %614 = fmul double %613, %531
  %615 = call double @llvm.fmuladd.f64(double %614, double %608, double %597)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #4
  store i64 0, ptr %88, align 8, !tbaa !5
  %616 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 8 dereferenceable(8) %88)
  store double %615, ptr %616, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #4
  %617 = icmp sgt i32 %150, 2
  br i1 %617, label %.lr.ph378.preheader, label %._crit_edge379

.lr.ph378.preheader:                              ; preds = %609
  %wide.trip.count393 = zext nneg i32 %517 to i64
  br label %.lr.ph378

._crit_edge379:                                   ; preds = %685, %609
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %102) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind nonnull writable sret(%"class.cda::math::containers::Vector") align 8 %102, ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(24) %71)
          to label %718 unwind label %723

618:                                              ; preds = %547
  %619 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #4
  br label %729

620:                                              ; preds = %554
  %621 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #4
  br label %729

622:                                              ; preds = %565
  %623 = landingpad { ptr, i32 }
          cleanup
  br label %632

624:                                              ; preds = %576
  %625 = landingpad { ptr, i32 }
          cleanup
  br label %631

626:                                              ; preds = %584
  %627 = landingpad { ptr, i32 }
          cleanup
  br label %630

628:                                              ; preds = %602
  %629 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #4
  br label %630

630:                                              ; preds = %628, %626
  %.pn312 = phi { ptr, i32 } [ %629, %628 ], [ %627, %626 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #4
  br label %631

631:                                              ; preds = %630, %624
  %.pn312.pn = phi { ptr, i32 } [ %.pn312, %630 ], [ %625, %624 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #4
  br label %632

632:                                              ; preds = %631, %622
  %.pn312.pn.pn = phi { ptr, i32 } [ %.pn312.pn, %631 ], [ %623, %622 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #4
  br label %729

.lr.ph378:                                        ; preds = %.lr.ph378.preheader, %685
  %indvars.iv390 = phi i64 [ 1, %.lr.ph378.preheader ], [ %indvars.iv.next391, %685 ]
  %633 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #4
  store i64 %indvars.iv390, ptr %89, align 8, !tbaa !5
  %634 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %635 = load double, ptr %634, align 8, !tbaa !9
  %636 = invoke noundef double %633(double noundef %635)
          to label %637 unwind label %704

637:                                              ; preds = %.lr.ph378
  %638 = fneg double %636
  %639 = fmul double %535, %638
  %640 = load double, ptr %536, align 8, !tbaa !19
  %641 = fmul double %639, %640
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #4
  store i64 %indvars.iv390, ptr %90, align 8, !tbaa !5
  %642 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %90)
  store double %641, ptr %642, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #4
  %643 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #4
  store i64 %indvars.iv390, ptr %91, align 8, !tbaa !5
  %644 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %91)
  %645 = load double, ptr %644, align 8, !tbaa !9
  %646 = invoke noundef double %643(double noundef %645)
          to label %647 unwind label %706

647:                                              ; preds = %637
  %648 = fmul double %646, 2.000000e+00
  %649 = fmul double %535, %648
  %650 = load double, ptr %536, align 8, !tbaa !19
  %651 = call double @llvm.fmuladd.f64(double %649, double %650, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #4
  store i64 %indvars.iv390, ptr %92, align 8, !tbaa !5
  %652 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %92)
  %653 = getelementptr inbounds i8, ptr %652, i64 8
  store double %651, ptr %653, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #4
  %654 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %93) #4
  store i64 %indvars.iv390, ptr %93, align 8, !tbaa !5
  %655 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %93)
  %656 = load double, ptr %655, align 8, !tbaa !9
  %657 = invoke noundef double %654(double noundef %656)
          to label %658 unwind label %708

658:                                              ; preds = %647
  %659 = fneg double %657
  %660 = fmul double %535, %659
  %661 = load double, ptr %536, align 8, !tbaa !19
  %662 = fmul double %660, %661
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %94) #4
  store i64 %indvars.iv390, ptr %94, align 8, !tbaa !5
  %663 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %68, ptr noundef nonnull align 8 dereferenceable(8) %94)
  %664 = getelementptr inbounds i8, ptr %663, i64 16
  store double %662, ptr %664, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #4
  %665 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #4
  store i64 %indvars.iv390, ptr %95, align 8, !tbaa !5
  %666 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %95)
  %667 = load double, ptr %666, align 8, !tbaa !9
  %668 = invoke noundef double %665(double noundef %667)
          to label %669 unwind label %710

669:                                              ; preds = %658
  %670 = load double, ptr %536, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %96) #4
  %indvars.iv.next391 = add nuw nsw i64 %indvars.iv390, 1
  store i64 %indvars.iv.next391, ptr %96, align 8, !tbaa !5
  %671 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %96)
  %672 = load double, ptr %671, align 8, !tbaa !9
  %673 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %97) #4
  store i64 %indvars.iv390, ptr %97, align 8, !tbaa !5
  %674 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %97)
  %675 = load double, ptr %674, align 8, !tbaa !9
  %676 = invoke noundef double %673(double noundef %675)
          to label %677 unwind label %712

677:                                              ; preds = %669
  %678 = load double, ptr %536, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %98) #4
  store i64 %indvars.iv390, ptr %98, align 8, !tbaa !5
  %679 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %98)
  %680 = load double, ptr %679, align 8, !tbaa !9
  %681 = load ptr, ptr %549, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #4
  store i64 %indvars.iv390, ptr %99, align 8, !tbaa !5
  %682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %99)
  %683 = load double, ptr %682, align 8, !tbaa !9
  %684 = invoke noundef double %681(double noundef %683)
          to label %685 unwind label %714

685:                                              ; preds = %677
  %686 = fmul double %535, %668
  %687 = fsub double 1.000000e+00, %670
  %688 = fmul double %686, %687
  %689 = fmul double %676, -2.000000e+00
  %690 = fmul double %535, %689
  %691 = fsub double 1.000000e+00, %678
  %692 = call double @llvm.fmuladd.f64(double %690, double %691, double 1.000000e+00)
  %693 = fmul double %692, %680
  %694 = call double @llvm.fmuladd.f64(double %688, double %672, double %693)
  %695 = fmul double %535, %684
  %696 = load double, ptr %536, align 8, !tbaa !19
  %697 = fsub double 1.000000e+00, %696
  %698 = fmul double %695, %697
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #4
  %699 = add nsw i64 %indvars.iv390, -1
  store i64 %699, ptr %100, align 8, !tbaa !5
  %700 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %100)
  %701 = load double, ptr %700, align 8, !tbaa !9
  %702 = call double @llvm.fmuladd.f64(double %698, double %701, double %694)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #4
  store i64 %indvars.iv390, ptr %101, align 8, !tbaa !5
  %703 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %71, ptr noundef nonnull align 8 dereferenceable(8) %101)
  store double %702, ptr %703, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #4
  %exitcond394.not = icmp eq i64 %indvars.iv.next391, %wide.trip.count393
  br i1 %exitcond394.not, label %._crit_edge379, label %.lr.ph378, !llvm.loop !26

704:                                              ; preds = %.lr.ph378
  %705 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #4
  br label %729

706:                                              ; preds = %637
  %707 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #4
  br label %729

708:                                              ; preds = %647
  %709 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #4
  br label %729

710:                                              ; preds = %658
  %711 = landingpad { ptr, i32 }
          cleanup
  br label %717

712:                                              ; preds = %669
  %713 = landingpad { ptr, i32 }
          cleanup
  br label %716

714:                                              ; preds = %677
  %715 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #4
  br label %716

716:                                              ; preds = %714, %712
  %.pn333 = phi { ptr, i32 } [ %715, %714 ], [ %713, %712 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #4
  br label %717

717:                                              ; preds = %716, %710
  %.pn333.pn = phi { ptr, i32 } [ %.pn333, %716 ], [ %711, %710 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #4
  br label %729

718:                                              ; preds = %._crit_edge379
  %719 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %73, ptr noundef nonnull align 8 dereferenceable(24) %102)
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %102) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %102) #4
  %720 = 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 %721 unwind label %725

721:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #4
  store i64 0, ptr %103, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdE3setERKmRKS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull align 8 dereferenceable(24) %73)
          to label %722 unwind label %727

722:                                              ; preds = %721
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %73) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %73) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %71) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %71) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %68) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %68) #4
  br label %733

723:                                              ; preds = %._crit_edge379
  %724 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %102) #4
  br label %729

725:                                              ; preds = %718
  %726 = landingpad { ptr, i32 }
          cleanup
  br label %729

727:                                              ; preds = %721
  %728 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #4
  br label %729

729:                                              ; preds = %704, %706, %708, %717, %727, %725, %723, %632, %620, %618
  %.pn333.pn.pn.pn = phi { ptr, i32 } [ %728, %727 ], [ %726, %725 ], [ %724, %723 ], [ %.pn312.pn.pn, %632 ], [ %621, %620 ], [ %619, %618 ], [ %.pn333.pn, %717 ], [ %709, %708 ], [ %707, %706 ], [ %705, %704 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %73) #4
  br label %730

730:                                              ; preds = %729, %545
  %.pn333.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn333.pn.pn.pn, %729 ], [ %546, %545 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %73) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %71) #4
  br label %731

731:                                              ; preds = %730, %543
  %.pn333.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn333.pn.pn.pn.pn, %730 ], [ %544, %543 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %71) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %68) #4
  br label %732

732:                                              ; preds = %731, %541
  %.pn333.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn333.pn.pn.pn.pn.pn, %731 ], [ %542, %541 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %68) #4
  br label %1031

733:                                              ; preds = %722, %514
  %734 = and i32 %152, 48
  %or.cond363.not = icmp eq i32 %734, 48
  br i1 %or.cond363.not, label %735, label %1025

735:                                              ; preds = %733
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %104) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #4
  store i64 %151, ptr %105, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #4
  store i64 3, ptr %106, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %736 unwind label %759

736:                                              ; preds = %735
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %107) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %108) #4
  store i64 %151, ptr %108, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %737 unwind label %761

737:                                              ; preds = %736
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #4
  %738 = add i32 %150, -1
  %739 = sext i32 %738 to i64
  store i64 %739, ptr %109, align 8, !tbaa !5
  %740 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %109)
  %741 = load double, ptr %740, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #4
  store i64 0, ptr %110, align 8, !tbaa !5
  %742 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %110)
  %743 = load double, ptr %742, align 8, !tbaa !9
  %744 = fsub double %741, %743
  %745 = sitofp i32 %738 to double
  %746 = fdiv double %744, %745
  %747 = fptosi double %746 to i32
  %748 = call i32 @llvm.abs.i32(i32 %747, i1 true)
  %749 = uitofp nneg i32 %748 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #4
  %750 = getelementptr inbounds i8, ptr %1, i64 248
  %751 = load double, ptr %750, align 8, !tbaa !11
  %752 = fmul double %749, %749
  %753 = fdiv double %751, %752
  %754 = getelementptr inbounds i8, ptr %1, i64 272
  %755 = load double, ptr %754, align 8, !tbaa !19
  %756 = fcmp olt double %755, 0.000000e+00
  %757 = fcmp ogt double %755, 1.000000e+00
  %or.cond364 = or i1 %756, %757
  br i1 %or.cond364, label %758, label %763

758:                                              ; preds = %737
  store double 0x3FE5555555555555, ptr %754, align 8, !tbaa !19
  br label %763

759:                                              ; preds = %735
  %760 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #4
  br label %1024

761:                                              ; preds = %736
  %762 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #4
  br label %1023

763:                                              ; preds = %737, %758
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #4
  store i64 0, ptr %111, align 8, !tbaa !5
  %764 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %111)
  store double 0.000000e+00, ptr %764, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #4
  %765 = getelementptr inbounds i8, ptr %1, i64 256
  %766 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %112) #4
  store i64 0, ptr %112, align 8, !tbaa !5
  %767 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %112)
  %768 = load double, ptr %767, align 8, !tbaa !9
  %769 = invoke noundef double %766(double noundef %768)
          to label %770 unwind label %838

770:                                              ; preds = %763
  %771 = fmul double %769, 2.000000e+00
  %772 = fmul double %753, %771
  %773 = load double, ptr %754, align 8, !tbaa !19
  %774 = call double @llvm.fmuladd.f64(double %772, double %773, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %113) #4
  store i64 0, ptr %113, align 8, !tbaa !5
  %775 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %113)
  %776 = getelementptr inbounds i8, ptr %775, i64 8
  store double %774, ptr %776, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #4
  %777 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #4
  store i64 0, ptr %114, align 8, !tbaa !5
  %778 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %114)
  %779 = load double, ptr %778, align 8, !tbaa !9
  %780 = invoke noundef double %777(double noundef %779)
          to label %781 unwind label %840

781:                                              ; preds = %770
  %782 = fmul double %780, -2.000000e+00
  %783 = fmul double %753, %782
  %784 = load double, ptr %754, align 8, !tbaa !19
  %785 = fmul double %783, %784
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #4
  store i64 0, ptr %115, align 8, !tbaa !5
  %786 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %115)
  %787 = getelementptr inbounds i8, ptr %786, i64 16
  store double %785, ptr %787, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #4
  %788 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #4
  store i64 0, ptr %116, align 8, !tbaa !5
  %789 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %116)
  %790 = load double, ptr %789, align 8, !tbaa !9
  %791 = invoke noundef double %788(double noundef %790)
          to label %792 unwind label %842

792:                                              ; preds = %781
  %793 = load double, ptr %754, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %117) #4
  store i64 1, ptr %117, align 8, !tbaa !5
  %794 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %117)
  %795 = load double, ptr %794, align 8, !tbaa !9
  %796 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %118) #4
  store i64 0, ptr %118, align 8, !tbaa !5
  %797 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %118)
  %798 = load double, ptr %797, align 8, !tbaa !9
  %799 = invoke noundef double %796(double noundef %798)
          to label %800 unwind label %844

800:                                              ; preds = %792
  %801 = fmul double %791, 2.000000e+00
  %802 = fmul double %753, %801
  %803 = fsub double 1.000000e+00, %793
  %804 = fmul double %802, %803
  %805 = load double, ptr %754, align 8, !tbaa !19
  %806 = fsub double 1.000000e+00, %805
  %807 = fmul double %799, -2.000000e+00
  %808 = fmul double %753, %807
  %809 = call double @llvm.fmuladd.f64(double %808, double %806, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #4
  store i64 0, ptr %119, align 8, !tbaa !5
  %810 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %119)
  %811 = load double, ptr %810, align 8, !tbaa !9
  %812 = fmul double %809, %811
  %813 = call double @llvm.fmuladd.f64(double %804, double %795, double %812)
  %814 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #4
  store i64 0, ptr %120, align 8, !tbaa !5
  %815 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %120)
  %816 = load double, ptr %815, align 8, !tbaa !9
  %817 = invoke noundef double %814(double noundef %816)
          to label %818 unwind label %846

818:                                              ; preds = %800
  %819 = load double, ptr %754, align 8, !tbaa !19
  %820 = getelementptr inbounds i8, ptr %1, i64 160
  %821 = load ptr, ptr %820, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #4
  store i64 0, ptr %121, align 8, !tbaa !5
  %822 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %121)
  %823 = load double, ptr %822, align 8, !tbaa !9
  %824 = invoke noundef double %821(double noundef %823, double noundef 0.000000e+00)
          to label %825 unwind label %848

825:                                              ; preds = %818
  %826 = call double @llvm.fmuladd.f64(double %819, double -2.000000e+00, double 1.000000e+00)
  %827 = fmul double %817, -2.000000e+00
  %828 = fmul double %753, %827
  %829 = fmul double %828, %826
  %830 = fmul double %829, %749
  %831 = call double @llvm.fmuladd.f64(double %830, double %824, double %813)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %122) #4
  store i64 0, ptr %122, align 8, !tbaa !5
  %832 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(8) %122)
  store double %831, ptr %832, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #4
  %833 = icmp sgt i32 %150, 2
  br i1 %833, label %.lr.ph382.preheader, label %._crit_edge383

.lr.ph382.preheader:                              ; preds = %825
  %wide.trip.count398 = zext nneg i32 %738 to i64
  br label %.lr.ph382

._crit_edge383:                                   ; preds = %905, %825
  %834 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %136) #4
  store i64 %739, ptr %136, align 8, !tbaa !5
  %835 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %136)
  %836 = load double, ptr %835, align 8, !tbaa !9
  %837 = invoke noundef double %834(double noundef %836)
          to label %938 unwind label %1005

838:                                              ; preds = %763
  %839 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #4
  br label %1022

840:                                              ; preds = %770
  %841 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #4
  br label %1022

842:                                              ; preds = %781
  %843 = landingpad { ptr, i32 }
          cleanup
  br label %852

844:                                              ; preds = %792
  %845 = landingpad { ptr, i32 }
          cleanup
  br label %851

846:                                              ; preds = %800
  %847 = landingpad { ptr, i32 }
          cleanup
  br label %850

848:                                              ; preds = %818
  %849 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #4
  br label %850

850:                                              ; preds = %848, %846
  %.pn317 = phi { ptr, i32 } [ %849, %848 ], [ %847, %846 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #4
  br label %851

851:                                              ; preds = %850, %844
  %.pn317.pn = phi { ptr, i32 } [ %.pn317, %850 ], [ %845, %844 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #4
  br label %852

852:                                              ; preds = %851, %842
  %.pn317.pn.pn = phi { ptr, i32 } [ %.pn317.pn, %851 ], [ %843, %842 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #4
  br label %1022

.lr.ph382:                                        ; preds = %.lr.ph382.preheader, %905
  %indvars.iv395 = phi i64 [ 1, %.lr.ph382.preheader ], [ %indvars.iv.next396, %905 ]
  %853 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %123) #4
  store i64 %indvars.iv395, ptr %123, align 8, !tbaa !5
  %854 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %123)
  %855 = load double, ptr %854, align 8, !tbaa !9
  %856 = invoke noundef double %853(double noundef %855)
          to label %857 unwind label %924

857:                                              ; preds = %.lr.ph382
  %858 = fneg double %856
  %859 = fmul double %753, %858
  %860 = load double, ptr %754, align 8, !tbaa !19
  %861 = fmul double %859, %860
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %124) #4
  store i64 %indvars.iv395, ptr %124, align 8, !tbaa !5
  %862 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %124)
  store double %861, ptr %862, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #4
  %863 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %125) #4
  store i64 %indvars.iv395, ptr %125, align 8, !tbaa !5
  %864 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %125)
  %865 = load double, ptr %864, align 8, !tbaa !9
  %866 = invoke noundef double %863(double noundef %865)
          to label %867 unwind label %926

867:                                              ; preds = %857
  %868 = fmul double %866, 2.000000e+00
  %869 = fmul double %753, %868
  %870 = load double, ptr %754, align 8, !tbaa !19
  %871 = call double @llvm.fmuladd.f64(double %869, double %870, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #4
  store i64 %indvars.iv395, ptr %126, align 8, !tbaa !5
  %872 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %126)
  %873 = getelementptr inbounds i8, ptr %872, i64 8
  store double %871, ptr %873, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #4
  %874 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %127) #4
  store i64 %indvars.iv395, ptr %127, align 8, !tbaa !5
  %875 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %127)
  %876 = load double, ptr %875, align 8, !tbaa !9
  %877 = invoke noundef double %874(double noundef %876)
          to label %878 unwind label %928

878:                                              ; preds = %867
  %879 = fneg double %877
  %880 = fmul double %753, %879
  %881 = load double, ptr %754, align 8, !tbaa !19
  %882 = fmul double %880, %881
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %128) #4
  store i64 %indvars.iv395, ptr %128, align 8, !tbaa !5
  %883 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %128)
  %884 = getelementptr inbounds i8, ptr %883, i64 16
  store double %882, ptr %884, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #4
  %885 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %129) #4
  store i64 %indvars.iv395, ptr %129, align 8, !tbaa !5
  %886 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %129)
  %887 = load double, ptr %886, align 8, !tbaa !9
  %888 = invoke noundef double %885(double noundef %887)
          to label %889 unwind label %930

889:                                              ; preds = %878
  %890 = load double, ptr %754, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %130) #4
  %indvars.iv.next396 = add nuw nsw i64 %indvars.iv395, 1
  store i64 %indvars.iv.next396, ptr %130, align 8, !tbaa !5
  %891 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %130)
  %892 = load double, ptr %891, align 8, !tbaa !9
  %893 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %131) #4
  store i64 %indvars.iv395, ptr %131, align 8, !tbaa !5
  %894 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %131)
  %895 = load double, ptr %894, align 8, !tbaa !9
  %896 = invoke noundef double %893(double noundef %895)
          to label %897 unwind label %932

897:                                              ; preds = %889
  %898 = load double, ptr %754, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %132) #4
  store i64 %indvars.iv395, ptr %132, align 8, !tbaa !5
  %899 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %132)
  %900 = load double, ptr %899, align 8, !tbaa !9
  %901 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %133) #4
  store i64 %indvars.iv395, ptr %133, align 8, !tbaa !5
  %902 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %133)
  %903 = load double, ptr %902, align 8, !tbaa !9
  %904 = invoke noundef double %901(double noundef %903)
          to label %905 unwind label %934

905:                                              ; preds = %897
  %906 = fmul double %753, %888
  %907 = fsub double 1.000000e+00, %890
  %908 = fmul double %906, %907
  %909 = fmul double %896, -2.000000e+00
  %910 = fmul double %753, %909
  %911 = fsub double 1.000000e+00, %898
  %912 = call double @llvm.fmuladd.f64(double %910, double %911, double 1.000000e+00)
  %913 = fmul double %912, %900
  %914 = call double @llvm.fmuladd.f64(double %908, double %892, double %913)
  %915 = fmul double %753, %904
  %916 = load double, ptr %754, align 8, !tbaa !19
  %917 = fsub double 1.000000e+00, %916
  %918 = fmul double %915, %917
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %134) #4
  %919 = add nsw i64 %indvars.iv395, -1
  store i64 %919, ptr %134, align 8, !tbaa !5
  %920 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %134)
  %921 = load double, ptr %920, align 8, !tbaa !9
  %922 = call double @llvm.fmuladd.f64(double %918, double %921, double %914)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %135) #4
  store i64 %indvars.iv395, ptr %135, align 8, !tbaa !5
  %923 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(8) %135)
  store double %922, ptr %923, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %135) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %134) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %130) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %129) #4
  %exitcond399.not = icmp eq i64 %indvars.iv.next396, %wide.trip.count398
  br i1 %exitcond399.not, label %._crit_edge383, label %.lr.ph382, !llvm.loop !27

924:                                              ; preds = %.lr.ph382
  %925 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #4
  br label %1022

926:                                              ; preds = %857
  %927 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #4
  br label %1022

928:                                              ; preds = %867
  %929 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #4
  br label %1022

930:                                              ; preds = %878
  %931 = landingpad { ptr, i32 }
          cleanup
  br label %937

932:                                              ; preds = %889
  %933 = landingpad { ptr, i32 }
          cleanup
  br label %936

934:                                              ; preds = %897
  %935 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #4
  br label %936

936:                                              ; preds = %934, %932
  %.pn326 = phi { ptr, i32 } [ %935, %934 ], [ %933, %932 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %130) #4
  br label %937

937:                                              ; preds = %936, %930
  %.pn326.pn = phi { ptr, i32 } [ %.pn326, %936 ], [ %931, %930 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %129) #4
  br label %1022

938:                                              ; preds = %._crit_edge383
  %939 = fmul double %837, -2.000000e+00
  %940 = fmul double %753, %939
  %941 = load double, ptr %754, align 8, !tbaa !19
  %942 = fmul double %940, %941
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %137) #4
  store i64 %739, ptr %137, align 8, !tbaa !5
  %943 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %137)
  store double %942, ptr %943, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %137) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %136) #4
  %944 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %138) #4
  store i64 %739, ptr %138, align 8, !tbaa !5
  %945 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %138)
  %946 = load double, ptr %945, align 8, !tbaa !9
  %947 = invoke noundef double %944(double noundef %946)
          to label %948 unwind label %1007

948:                                              ; preds = %938
  %949 = fmul double %947, 2.000000e+00
  %950 = fmul double %753, %949
  %951 = load double, ptr %754, align 8, !tbaa !19
  %952 = call double @llvm.fmuladd.f64(double %950, double %951, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %139) #4
  store i64 %739, ptr %139, align 8, !tbaa !5
  %953 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %139)
  %954 = getelementptr inbounds i8, ptr %953, i64 8
  store double %952, ptr %954, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %139) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %138) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %140) #4
  store i64 %739, ptr %140, align 8, !tbaa !5
  %955 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(8) %140)
  %956 = getelementptr inbounds i8, ptr %955, i64 16
  store double 0.000000e+00, ptr %956, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %140) #4
  %957 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %141) #4
  store i64 %739, ptr %141, align 8, !tbaa !5
  %958 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %141)
  %959 = load double, ptr %958, align 8, !tbaa !9
  %960 = invoke noundef double %957(double noundef %959)
          to label %961 unwind label %1009

961:                                              ; preds = %948
  %962 = load double, ptr %754, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %142) #4
  %sext321 = add i64 %sext, -8589934592
  %963 = ashr exact i64 %sext321, 32
  store i64 %963, ptr %142, align 8, !tbaa !5
  %964 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %142)
  %965 = load double, ptr %964, align 8, !tbaa !9
  %966 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %143) #4
  store i64 %739, ptr %143, align 8, !tbaa !5
  %967 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %143)
  %968 = load double, ptr %967, align 8, !tbaa !9
  %969 = invoke noundef double %966(double noundef %968)
          to label %970 unwind label %1011

970:                                              ; preds = %961
  %971 = fmul double %960, 2.000000e+00
  %972 = fmul double %753, %971
  %973 = fsub double 1.000000e+00, %962
  %974 = fmul double %972, %973
  %975 = load double, ptr %754, align 8, !tbaa !19
  %976 = fsub double 1.000000e+00, %975
  %977 = fmul double %969, -2.000000e+00
  %978 = fmul double %753, %977
  %979 = call double @llvm.fmuladd.f64(double %978, double %976, double 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %144) #4
  store i64 %739, ptr %144, align 8, !tbaa !5
  %980 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %144)
  %981 = load double, ptr %980, align 8, !tbaa !9
  %982 = fmul double %979, %981
  %983 = call double @llvm.fmuladd.f64(double %974, double %965, double %982)
  %984 = load ptr, ptr %765, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %145) #4
  store i64 %739, ptr %145, align 8, !tbaa !5
  %985 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %145)
  %986 = load double, ptr %985, align 8, !tbaa !9
  %987 = invoke noundef double %984(double noundef %986)
          to label %988 unwind label %1013

988:                                              ; preds = %970
  %989 = load double, ptr %754, align 8, !tbaa !19
  %990 = getelementptr inbounds i8, ptr %1, i64 168
  %991 = load ptr, ptr %990, align 8, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %146) #4
  store i64 %739, ptr %146, align 8, !tbaa !5
  %992 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %146)
  %993 = load double, ptr %992, align 8, !tbaa !9
  %994 = invoke noundef double %991(double noundef %993, double noundef 0.000000e+00)
          to label %995 unwind label %1015

995:                                              ; preds = %988
  %996 = fmul double %987, 2.000000e+00
  %997 = fmul double %753, %996
  %998 = call double @llvm.fmuladd.f64(double %989, double -2.000000e+00, double 1.000000e+00)
  %999 = fmul double %997, %998
  %1000 = fmul double %999, %749
  %1001 = call double @llvm.fmuladd.f64(double %1000, double %994, double %983)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %147) #4
  store i64 %739, ptr %147, align 8, !tbaa !5
  %1002 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(8) %147)
  store double %1001, ptr %1002, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %146) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %145) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %144) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %143) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %141) #4
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %148) #4
  invoke void @_ZN3cda4math9equations7systems6linear15solve_3diagonalIdEENS0_10containers6VectorIT_EERKNS5_6MatrixIS7_EERKS8_(ptr dead_on_unwind nonnull writable sret(%"class.cda::math::containers::Vector") align 8 %148, ptr noundef nonnull align 8 dereferenceable(40) %104, ptr noundef nonnull align 8 dereferenceable(24) %107)
          to label %1003 unwind label %1020

1003:                                             ; preds = %995
  %1004 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3cda4math10containers6VectorIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %0, ptr noundef nonnull align 8 dereferenceable(24) %148)
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %148) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %148) #4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #4
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %107) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %104) #4
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %104) #4
  br label %1025

1005:                                             ; preds = %._crit_edge383
  %1006 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %136) #4
  br label %1022

1007:                                             ; preds = %938
  %1008 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %138) #4
  br label %1022

1009:                                             ; preds = %948
  %1010 = landingpad { ptr, i32 }
          cleanup
  br label %1019

1011:                                             ; preds = %961
  %1012 = landingpad { ptr, i32 }
          cleanup
  br label %1018

1013:                                             ; preds = %970
  %1014 = landingpad { ptr, i32 }
          cleanup
  br label %1017

1015:                                             ; preds = %988
  %1016 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %146) #4
  br label %1017

1017:                                             ; preds = %1015, %1013
  %.pn322 = phi { ptr, i32 } [ %1016, %1015 ], [ %1014, %1013 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %145) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %144) #4
  br label %1018

1018:                                             ; preds = %1017, %1011
  %.pn322.pn = phi { ptr, i32 } [ %.pn322, %1017 ], [ %1012, %1011 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %143) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #4
  br label %1019

1019:                                             ; preds = %1018, %1009
  %.pn322.pn.pn = phi { ptr, i32 } [ %.pn322.pn, %1018 ], [ %1010, %1009 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %141) #4
  br label %1022

1020:                                             ; preds = %995
  %1021 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %148) #4
  br label %1022

1022:                                             ; preds = %924, %926, %928, %937, %1020, %1019, %1007, %1005, %852, %840, %838
  %.pn326.pn.pn.pn = phi { ptr, i32 } [ %1021, %1020 ], [ %.pn322.pn.pn, %1019 ], [ %1008, %1007 ], [ %1006, %1005 ], [ %.pn317.pn.pn, %852 ], [ %841, %840 ], [ %839, %838 ], [ %.pn326.pn, %937 ], [ %929, %928 ], [ %927, %926 ], [ %925, %924 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #4
  br label %1023

1023:                                             ; preds = %1022, %761
  %.pn326.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn.pn, %1022 ], [ %762, %761 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %107) #4
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %104) #4
  br label %1024

1024:                                             ; preds = %1023, %759
  %.pn326.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn326.pn.pn.pn.pn, %1023 ], [ %760, %759 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %104) #4
  br label %1031

1025:                                             ; preds = %1003, %733
  %1026 = getelementptr inbounds i8, ptr %1, i64 248
  %1027 = load double, ptr %1026, align 8, !tbaa !11
  %1028 = getelementptr inbounds i8, ptr %1, i64 240
  %1029 = load double, ptr %1028, align 8, !tbaa !28
  %1030 = fadd double %1027, %1029
  store double %1030, ptr %1028, align 8, !tbaa !28
  ret void

1031:                                             ; preds = %1024, %732, %513, %290
  %.pn349.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn349.pn.pn.pn.pn.pn.pn, %290 ], [ %.pn341.pn.pn.pn.pn.pn.pn, %513 ], [ %.pn333.pn.pn.pn.pn.pn.pn, %732 ], [ %.pn326.pn.pn.pn.pn.pn, %1024 ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %0) #4
  resume { ptr, i32 } %.pn349.pn.pn.pn.pn.pn.pn.pn
}

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 = { 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, !10, i64 272}
!20 = !{!12, !14, i64 256}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!12, !14, i64 168}
!25 = !{!12, !14, i64 160}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = !{!12, !10, i64 240}


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