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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [77 x i8], align 1

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

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

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

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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) 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)) #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 nounwind uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 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 nounwind uwtable
declare dso_local noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt10scientificRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #5

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math22differential_equations3EDP11printMATLABENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef, ptr noundef, i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP12solvePOISSONEhhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEEdi(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Matrix") align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, i8 noundef zeroext %2, i8 noundef zeroext %3, i8 noundef zeroext %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(40) %7, double noundef %8, i32 noundef %9) #2 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i8, align 1
  %14 = alloca i8, align 1
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca double, align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca double, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i1, align 1
  %30 = alloca i64, 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 ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %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 i32, align 4
  %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 i32, align 4
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca %"class.cda::math::containers::Vector", align 8
  %56 = alloca i64, align 8
  %57 = alloca %"class.cda::math::containers::Vector", align 8
  %58 = alloca i64, align 8
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %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 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 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 i64, 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 i64, align 8
  %149 = alloca %"class.std::__cxx11::basic_string", align 8
  %150 = alloca %"class.std::allocator", align 1
  %151 = alloca %"class.std::__cxx11::basic_string", align 8
  %152 = alloca %"class.std::allocator", align 1
  %153 = alloca %"class.std::__cxx11::basic_string", align 8
  %154 = alloca %"class.std::allocator", align 1
  %155 = alloca %"class.std::__cxx11::basic_string", align 8
  %156 = alloca %"class.std::allocator", align 1
  store ptr %0, ptr %11, align 8
  store ptr %1, ptr %12, align 8, !tbaa !5
  store i8 %2, ptr %13, align 1, !tbaa !9
  store i8 %3, ptr %14, align 1, !tbaa !9
  store i8 %4, ptr %15, align 1, !tbaa !9
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store double %8, ptr %19, align 8, !tbaa !10
  store i32 %9, ptr %20, align 4, !tbaa !12
  %157 = load ptr, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %158 = load ptr, ptr %18, align 8, !tbaa !5
  %159 = call noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40) %158)
  %160 = trunc i64 %159 to i32
  store i32 %160, ptr %21, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %161 = load ptr, ptr %18, align 8, !tbaa !5
  %162 = call noundef i64 @_ZNK3cda4math10containers6MatrixIdE7columnsEv(ptr noundef nonnull align 8 dereferenceable(40) %161)
  %163 = trunc i64 %162 to i32
  store i32 %163, ptr %22, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %164 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %165 = load i32, ptr %22, align 4, !tbaa !12
  %166 = sub nsw i32 %165, 1
  %167 = sext i32 %166 to i64
  store i64 %167, ptr %24, align 8, !tbaa !14
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %164, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %169 = load double, ptr %168, align 8, !tbaa !10
  %170 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  store i64 0, ptr %25, align 8, !tbaa !14
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %170, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %172 = load double, ptr %171, align 8, !tbaa !10
  %173 = fsub double %169, %172
  %174 = load i32, ptr %22, align 4, !tbaa !12
  %175 = sub nsw i32 %174, 1
  %176 = sitofp i32 %175 to double
  %177 = fdiv double %173, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  store double %177, ptr %23, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %178 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %179 = load i32, ptr %21, align 4, !tbaa !12
  %180 = sub nsw i32 %179, 1
  %181 = sext i32 %180 to i64
  store i64 %181, ptr %27, align 8, !tbaa !14
  %182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %178, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %183 = load double, ptr %182, align 8, !tbaa !10
  %184 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  store i64 0, ptr %28, align 8, !tbaa !14
  %185 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %184, ptr noundef nonnull align 8 dereferenceable(8) %28)
  %186 = load double, ptr %185, align 8, !tbaa !10
  %187 = fsub double %183, %186
  %188 = load i32, ptr %21, align 4, !tbaa !12
  %189 = sub nsw i32 %188, 1
  %190 = sitofp i32 %189 to double
  %191 = fdiv double %187, %190
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  store double %191, ptr %26, align 8, !tbaa !10
  store i1 false, ptr %29, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %192 = load i32, ptr %21, align 4, !tbaa !12
  %193 = sext i32 %192 to i64
  store i64 %193, ptr %30, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %194 = load i32, ptr %22, align 4, !tbaa !12
  %195 = sext i32 %194 to i64
  store i64 %195, ptr %31, align 8, !tbaa !14
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  %196 = load i32, ptr %21, align 4, !tbaa !12
  %197 = sext i32 %196 to i64
  store i64 %197, ptr %33, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %198 = load i32, ptr %22, align 4, !tbaa !12
  %199 = sext i32 %198 to i64
  store i64 %199, ptr %34, align 8, !tbaa !14
  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 %200 unwind label %211

200:                                              ; preds = %10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  %201 = load ptr, ptr %18, align 8, !tbaa !5
  %202 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(40) %201)
          to label %203 unwind label %215

203:                                              ; preds = %200
  %204 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %202)
          to label %205 unwind label %215

205:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #7
  store i32 0, ptr %37, align 4, !tbaa !12
  br label %206

206:                                              ; preds = %304, %205
  %207 = load i32, ptr %37, align 4, !tbaa !12
  %208 = load i32, ptr %22, align 4, !tbaa !12
  %209 = icmp slt i32 %207, %208
  br i1 %209, label %219, label %210

210:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %308

211:                                              ; preds = %10
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %35, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  br label %1913

215:                                              ; preds = %203, %200
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %35, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %36, align 4
  br label %1912

219:                                              ; preds = %206
  %220 = load i8, ptr %13, align 1, !tbaa !9
  %221 = zext i8 %220 to i32
  %222 = and i32 %221, 4
  %223 = icmp ne i32 %222, 0
  br i1 %223, label %224, label %258

224:                                              ; preds = %219
  %225 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 9
  %226 = load ptr, ptr %225, align 8, !tbaa !16
  %227 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %228 = load i32, ptr %37, align 4, !tbaa !12
  %229 = sext i32 %228 to i64
  store i64 %229, ptr %38, align 8, !tbaa !14
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %227, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %231 unwind label %244

231:                                              ; preds = %224
  %232 = load double, ptr %230, align 8, !tbaa !10
  %233 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #7
  store i64 0, ptr %39, align 8, !tbaa !14
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %233, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %235 unwind label %248

235:                                              ; preds = %231
  %236 = load double, ptr %234, align 8, !tbaa !10
  %237 = invoke noundef double %226(double noundef %232, double noundef %236)
          to label %238 unwind label %248

238:                                              ; preds = %235
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #7
  store i64 0, ptr %40, align 8, !tbaa !14
  %239 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %240 unwind label %252

240:                                              ; preds = %238
  %241 = load i32, ptr %37, align 4, !tbaa !12
  %242 = sext i32 %241 to i64
  %243 = getelementptr inbounds double, ptr %239, i64 %242
  store double %237, ptr %243, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %258

244:                                              ; preds = %224
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %35, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %36, align 4
  br label %257

248:                                              ; preds = %235, %231
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %35, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %36, align 4
  br label %256

252:                                              ; preds = %238
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %35, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  br label %256

256:                                              ; preds = %252, %248
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %257

257:                                              ; preds = %256, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %307

258:                                              ; preds = %240, %219
  %259 = load i8, ptr %13, align 1, !tbaa !9
  %260 = zext i8 %259 to i32
  %261 = and i32 %260, 8
  %262 = icmp ne i32 %261, 0
  br i1 %262, label %263, label %303

263:                                              ; preds = %258
  %264 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 10
  %265 = load ptr, ptr %264, align 8, !tbaa !23
  %266 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %267 = load i32, ptr %37, align 4, !tbaa !12
  %268 = sext i32 %267 to i64
  store i64 %268, ptr %41, align 8, !tbaa !14
  %269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %266, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %270 unwind label %289

270:                                              ; preds = %263
  %271 = load double, ptr %269, align 8, !tbaa !10
  %272 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %273 = load i32, ptr %21, align 4, !tbaa !12
  %274 = sub nsw i32 %273, 1
  %275 = sext i32 %274 to i64
  store i64 %275, ptr %42, align 8, !tbaa !14
  %276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %272, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %277 unwind label %293

277:                                              ; preds = %270
  %278 = load double, ptr %276, align 8, !tbaa !10
  %279 = invoke noundef double %265(double noundef %271, double noundef %278)
          to label %280 unwind label %293

280:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %281 = load i32, ptr %21, align 4, !tbaa !12
  %282 = sub nsw i32 %281, 1
  %283 = sext i32 %282 to i64
  store i64 %283, ptr %43, align 8, !tbaa !14
  %284 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %285 unwind label %297

285:                                              ; preds = %280
  %286 = load i32, ptr %37, align 4, !tbaa !12
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds double, ptr %284, i64 %287
  store double %279, ptr %288, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %303

289:                                              ; preds = %263
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %35, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %36, align 4
  br label %302

293:                                              ; preds = %277, %270
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %35, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %36, align 4
  br label %301

297:                                              ; preds = %280
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %35, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  br label %301

301:                                              ; preds = %297, %293
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %302

302:                                              ; preds = %301, %289
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %307

303:                                              ; preds = %285, %258
  br label %304

304:                                              ; preds = %303
  %305 = load i32, ptr %37, align 4, !tbaa !12
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %37, align 4, !tbaa !12
  br label %206, !llvm.loop !24

307:                                              ; preds = %302, %257
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %1912

308:                                              ; preds = %210
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  store i32 0, ptr %44, align 4, !tbaa !12
  br label %309

309:                                              ; preds = %399, %308
  %310 = load i32, ptr %44, align 4, !tbaa !12
  %311 = load i32, ptr %21, align 4, !tbaa !12
  %312 = icmp slt i32 %310, %311
  br i1 %312, label %314, label %313

313:                                              ; preds = %309
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %403

314:                                              ; preds = %309
  %315 = load i8, ptr %13, align 1, !tbaa !9
  %316 = zext i8 %315 to i32
  %317 = and i32 %316, 1
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %319, label %353

319:                                              ; preds = %314
  %320 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 7
  %321 = load ptr, ptr %320, align 8, !tbaa !26
  %322 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #7
  store i64 0, ptr %45, align 8, !tbaa !14
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %322, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %324 unwind label %339

324:                                              ; preds = %319
  %325 = load double, ptr %323, align 8, !tbaa !10
  %326 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %327 = load i32, ptr %44, align 4, !tbaa !12
  %328 = sext i32 %327 to i64
  store i64 %328, ptr %46, align 8, !tbaa !14
  %329 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %326, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %330 unwind label %343

330:                                              ; preds = %324
  %331 = load double, ptr %329, align 8, !tbaa !10
  %332 = invoke noundef double %321(double noundef %325, double noundef %331)
          to label %333 unwind label %343

333:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %334 = load i32, ptr %44, align 4, !tbaa !12
  %335 = sext i32 %334 to i64
  store i64 %335, ptr %47, align 8, !tbaa !14
  %336 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %337 unwind label %347

337:                                              ; preds = %333
  %338 = getelementptr inbounds double, ptr %336, i64 0
  store double %332, ptr %338, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %353

339:                                              ; preds = %319
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %35, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %36, align 4
  br label %352

343:                                              ; preds = %330, %324
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %35, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %36, align 4
  br label %351

347:                                              ; preds = %333
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %35, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %351

351:                                              ; preds = %347, %343
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  br label %352

352:                                              ; preds = %351, %339
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %402

353:                                              ; preds = %337, %314
  %354 = load i8, ptr %13, align 1, !tbaa !9
  %355 = zext i8 %354 to i32
  %356 = and i32 %355, 2
  %357 = icmp ne i32 %356, 0
  br i1 %357, label %358, label %398

358:                                              ; preds = %353
  %359 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 8
  %360 = load ptr, ptr %359, align 8, !tbaa !27
  %361 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %362 = load i32, ptr %22, align 4, !tbaa !12
  %363 = sub nsw i32 %362, 1
  %364 = sext i32 %363 to i64
  store i64 %364, ptr %48, align 8, !tbaa !14
  %365 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %361, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %366 unwind label %384

366:                                              ; preds = %358
  %367 = load double, ptr %365, align 8, !tbaa !10
  %368 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %369 = load i32, ptr %44, align 4, !tbaa !12
  %370 = sext i32 %369 to i64
  store i64 %370, ptr %49, align 8, !tbaa !14
  %371 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %368, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %372 unwind label %388

372:                                              ; preds = %366
  %373 = load double, ptr %371, align 8, !tbaa !10
  %374 = invoke noundef double %360(double noundef %367, double noundef %373)
          to label %375 unwind label %388

375:                                              ; preds = %372
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %376 = load i32, ptr %44, align 4, !tbaa !12
  %377 = sext i32 %376 to i64
  store i64 %377, ptr %50, align 8, !tbaa !14
  %378 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %379 unwind label %392

379:                                              ; preds = %375
  %380 = load i32, ptr %22, align 4, !tbaa !12
  %381 = sub nsw i32 %380, 1
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds double, ptr %378, i64 %382
  store double %374, ptr %383, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  br label %398

384:                                              ; preds = %358
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %35, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %36, align 4
  br label %397

388:                                              ; preds = %372, %366
  %389 = landingpad { ptr, i32 }
          cleanup
  %390 = extractvalue { ptr, i32 } %389, 0
  store ptr %390, ptr %35, align 8
  %391 = extractvalue { ptr, i32 } %389, 1
  store i32 %391, ptr %36, align 4
  br label %396

392:                                              ; preds = %375
  %393 = landingpad { ptr, i32 }
          cleanup
  %394 = extractvalue { ptr, i32 } %393, 0
  store ptr %394, ptr %35, align 8
  %395 = extractvalue { ptr, i32 } %393, 1
  store i32 %395, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %396

396:                                              ; preds = %392, %388
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #7
  br label %397

397:                                              ; preds = %396, %384
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #7
  br label %402

398:                                              ; preds = %379, %353
  br label %399

399:                                              ; preds = %398
  %400 = load i32, ptr %44, align 4, !tbaa !12
  %401 = add nsw i32 %400, 1
  store i32 %401, ptr %44, align 4, !tbaa !12
  br label %309, !llvm.loop !28

402:                                              ; preds = %397, %352
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %1912

403:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #7
  store i32 0, ptr %51, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  %404 = load i32, ptr %22, align 4, !tbaa !12
  %405 = sub nsw i32 %404, 2
  %406 = sext i32 %405 to i64
  store i64 %406, ptr %56, align 8, !tbaa !14
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %407 unwind label %417

407:                                              ; preds = %403
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %57) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  %408 = load i32, ptr %22, align 4, !tbaa !12
  %409 = sub nsw i32 %408, 2
  %410 = sext i32 %409 to i64
  store i64 %410, ptr %58, align 8, !tbaa !14
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %411 unwind label %421

411:                                              ; preds = %407
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #7
  store i32 0, ptr %59, align 4, !tbaa !12
  br label %412

412:                                              ; preds = %1820, %411
  %413 = load i32, ptr %59, align 4, !tbaa !12
  %414 = load i32, ptr %20, align 4, !tbaa !12
  %415 = icmp slt i32 %413, %414
  br i1 %415, label %425, label %416

416:                                              ; preds = %412
  store i32 8, ptr %60, align 4
  br label %1823

417:                                              ; preds = %403
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %35, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  br label %1911

421:                                              ; preds = %407
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %35, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %1910

425:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #7
  store i32 1, ptr %61, align 4, !tbaa !12
  br label %426

426:                                              ; preds = %1796, %425
  %427 = load i32, ptr %61, align 4, !tbaa !12
  %428 = load i32, ptr %21, align 4, !tbaa !12
  %429 = sub nsw i32 %428, 1
  %430 = icmp slt i32 %427, %429
  br i1 %430, label %432, label %431

431:                                              ; preds = %426
  store i32 11, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  br label %1812

432:                                              ; preds = %426
  store double 0.000000e+00, ptr %53, align 8, !tbaa !10
  store double 0.000000e+00, ptr %52, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #7
  store i32 1, ptr %62, align 4, !tbaa !12
  br label %433

433:                                              ; preds = %1755, %432
  %434 = load i32, ptr %62, align 4, !tbaa !12
  %435 = load i32, ptr %22, align 4, !tbaa !12
  %436 = sub nsw i32 %435, 1
  %437 = icmp slt i32 %434, %436
  br i1 %437, label %439, label %438

438:                                              ; preds = %433
  store i32 14, ptr %60, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %1776

439:                                              ; preds = %433
  %440 = load i8, ptr %13, align 1, !tbaa !9
  %441 = zext i8 %440 to i32
  %442 = and i32 %441, 16
  %443 = icmp ne i32 %442, 0
  br i1 %443, label %444, label %566

444:                                              ; preds = %439
  %445 = load double, ptr %23, align 8, !tbaa !10
  %446 = load double, ptr %23, align 8, !tbaa !10
  %447 = fmul double %445, %446
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %448 = load i32, ptr %61, align 4, !tbaa !12
  %449 = add nsw i32 %448, 1
  %450 = sext i32 %449 to i64
  store i64 %450, ptr %63, align 8, !tbaa !14
  %451 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %452 unwind label %527

452:                                              ; preds = %444
  %453 = getelementptr inbounds double, ptr %451, i64 0
  %454 = load double, ptr %453, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  %455 = load i32, ptr %61, align 4, !tbaa !12
  %456 = sub nsw i32 %455, 1
  %457 = sext i32 %456 to i64
  store i64 %457, ptr %64, align 8, !tbaa !14
  %458 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %459 unwind label %531

459:                                              ; preds = %452
  %460 = getelementptr inbounds double, ptr %458, i64 0
  %461 = load double, ptr %460, align 8, !tbaa !10
  %462 = fadd double %454, %461
  %463 = load double, ptr %26, align 8, !tbaa !10
  %464 = load double, ptr %26, align 8, !tbaa !10
  %465 = fmul double %463, %464
  %466 = fmul double %465, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %467 = load i32, ptr %61, align 4, !tbaa !12
  %468 = sext i32 %467 to i64
  store i64 %468, ptr %65, align 8, !tbaa !14
  %469 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %470 unwind label %535

470:                                              ; preds = %459
  %471 = getelementptr inbounds double, ptr %469, i64 1
  %472 = load double, ptr %471, align 8, !tbaa !10
  %473 = load double, ptr %23, align 8, !tbaa !10
  %474 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 7
  %475 = load ptr, ptr %474, align 8, !tbaa !26
  %476 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  store i64 0, ptr %66, align 8, !tbaa !14
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %476, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %478 unwind label %539

478:                                              ; preds = %470
  %479 = load double, ptr %477, align 8, !tbaa !10
  %480 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  %481 = load i32, ptr %61, align 4, !tbaa !12
  %482 = sext i32 %481 to i64
  store i64 %482, ptr %67, align 8, !tbaa !14
  %483 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %480, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %484 unwind label %543

484:                                              ; preds = %478
  %485 = load double, ptr %483, align 8, !tbaa !10
  %486 = invoke noundef double %475(double noundef %479, double noundef %485)
          to label %487 unwind label %543

487:                                              ; preds = %484
  %488 = call double @llvm.fmuladd.f64(double %473, double %486, double %472)
  %489 = fmul double %466, %488
  %490 = call double @llvm.fmuladd.f64(double %447, double %462, double %489)
  %491 = load double, ptr %26, align 8, !tbaa !10
  %492 = load double, ptr %26, align 8, !tbaa !10
  %493 = fmul double %491, %492
  %494 = load double, ptr %23, align 8, !tbaa !10
  %495 = fmul double %493, %494
  %496 = load double, ptr %23, align 8, !tbaa !10
  %497 = fmul double %495, %496
  %498 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 16
  %499 = load ptr, ptr %498, align 8, !tbaa !29
  %500 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #7
  store i64 0, ptr %68, align 8, !tbaa !14
  %501 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %500, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %502 unwind label %547

502:                                              ; preds = %487
  %503 = load double, ptr %501, align 8, !tbaa !10
  %504 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #7
  %505 = load i32, ptr %61, align 4, !tbaa !12
  %506 = sext i32 %505 to i64
  store i64 %506, ptr %69, align 8, !tbaa !14
  %507 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %504, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %508 unwind label %551

508:                                              ; preds = %502
  %509 = load double, ptr %507, align 8, !tbaa !10
  %510 = invoke noundef double %499(double noundef %503, double noundef %509)
          to label %511 unwind label %551

511:                                              ; preds = %508
  %512 = fneg double %497
  %513 = call double @llvm.fmuladd.f64(double %512, double %510, double %490)
  %514 = load double, ptr %26, align 8, !tbaa !10
  %515 = load double, ptr %26, align 8, !tbaa !10
  %516 = load double, ptr %23, align 8, !tbaa !10
  %517 = load double, ptr %23, align 8, !tbaa !10
  %518 = fmul double %516, %517
  %519 = call double @llvm.fmuladd.f64(double %514, double %515, double %518)
  %520 = fmul double 2.000000e+00, %519
  %521 = fdiv double %513, %520
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #7
  %522 = load i32, ptr %61, align 4, !tbaa !12
  %523 = sext i32 %522 to i64
  store i64 %523, ptr %70, align 8, !tbaa !14
  %524 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %525 unwind label %555

525:                                              ; preds = %511
  %526 = getelementptr inbounds double, ptr %524, i64 0
  store double %521, ptr %526, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %566

527:                                              ; preds = %444
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %35, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %36, align 4
  br label %565

531:                                              ; preds = %452
  %532 = landingpad { ptr, i32 }
          cleanup
  %533 = extractvalue { ptr, i32 } %532, 0
  store ptr %533, ptr %35, align 8
  %534 = extractvalue { ptr, i32 } %532, 1
  store i32 %534, ptr %36, align 4
  br label %564

535:                                              ; preds = %459
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %35, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %36, align 4
  br label %563

539:                                              ; preds = %470
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %35, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %36, align 4
  br label %562

543:                                              ; preds = %484, %478
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %35, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %36, align 4
  br label %561

547:                                              ; preds = %487
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %35, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %36, align 4
  br label %560

551:                                              ; preds = %508, %502
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %35, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %36, align 4
  br label %559

555:                                              ; preds = %511
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %35, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  br label %559

559:                                              ; preds = %555, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  br label %560

560:                                              ; preds = %559, %547
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  br label %561

561:                                              ; preds = %560, %543
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  br label %562

562:                                              ; preds = %561, %539
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  br label %563

563:                                              ; preds = %562, %535
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  br label %564

564:                                              ; preds = %563, %531
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  br label %565

565:                                              ; preds = %564, %527
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %1775

566:                                              ; preds = %525, %439
  %567 = load i8, ptr %14, align 1, !tbaa !9
  %568 = zext i8 %567 to i32
  %569 = and i32 %568, 1
  %570 = icmp ne i32 %569, 0
  br i1 %570, label %571, label %620

571:                                              ; preds = %566
  %572 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 11
  %573 = load ptr, ptr %572, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  %574 = load i32, ptr %61, align 4, !tbaa !12
  %575 = sext i32 %574 to i64
  store i64 %575, ptr %71, align 8, !tbaa !14
  %576 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %577 unwind label %601

577:                                              ; preds = %571
  %578 = getelementptr inbounds double, ptr %576, i64 1
  %579 = load double, ptr %578, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %580 = load i32, ptr %61, align 4, !tbaa !12
  %581 = sub nsw i32 %580, 1
  %582 = sext i32 %581 to i64
  store i64 %582, ptr %72, align 8, !tbaa !14
  %583 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %72)
          to label %584 unwind label %605

584:                                              ; preds = %577
  %585 = getelementptr inbounds double, ptr %583, i64 0
  %586 = load double, ptr %585, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  %587 = load i32, ptr %61, align 4, !tbaa !12
  %588 = add nsw i32 %587, 1
  %589 = sext i32 %588 to i64
  store i64 %589, ptr %73, align 8, !tbaa !14
  %590 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %73)
          to label %591 unwind label %609

591:                                              ; preds = %584
  %592 = getelementptr inbounds double, ptr %590, i64 0
  %593 = load double, ptr %592, align 8, !tbaa !10
  %594 = invoke noundef double %573(double noundef %579, double noundef %586, double noundef %593)
          to label %595 unwind label %609

595:                                              ; preds = %591
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  %596 = load i32, ptr %61, align 4, !tbaa !12
  %597 = sext i32 %596 to i64
  store i64 %597, ptr %74, align 8, !tbaa !14
  %598 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %599 unwind label %613

599:                                              ; preds = %595
  %600 = getelementptr inbounds double, ptr %598, i64 0
  store double %594, ptr %600, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  br label %620

601:                                              ; preds = %571
  %602 = landingpad { ptr, i32 }
          cleanup
  %603 = extractvalue { ptr, i32 } %602, 0
  store ptr %603, ptr %35, align 8
  %604 = extractvalue { ptr, i32 } %602, 1
  store i32 %604, ptr %36, align 4
  br label %619

605:                                              ; preds = %577
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %35, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %36, align 4
  br label %618

609:                                              ; preds = %591, %584
  %610 = landingpad { ptr, i32 }
          cleanup
  %611 = extractvalue { ptr, i32 } %610, 0
  store ptr %611, ptr %35, align 8
  %612 = extractvalue { ptr, i32 } %610, 1
  store i32 %612, ptr %36, align 4
  br label %617

613:                                              ; preds = %595
  %614 = landingpad { ptr, i32 }
          cleanup
  %615 = extractvalue { ptr, i32 } %614, 0
  store ptr %615, ptr %35, align 8
  %616 = extractvalue { ptr, i32 } %614, 1
  store i32 %616, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  br label %617

617:                                              ; preds = %613, %609
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  br label %618

618:                                              ; preds = %617, %605
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  br label %619

619:                                              ; preds = %618, %601
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  br label %1775

620:                                              ; preds = %599, %566
  %621 = load i8, ptr %13, align 1, !tbaa !9
  %622 = zext i8 %621 to i32
  %623 = and i32 %622, 64
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %747

625:                                              ; preds = %620
  %626 = load double, ptr %23, align 8, !tbaa !10
  %627 = load double, ptr %23, align 8, !tbaa !10
  %628 = fmul double %626, %627
  %629 = fmul double %628, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  store i64 1, ptr %75, align 8, !tbaa !14
  %630 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %75)
          to label %631 unwind label %708

631:                                              ; preds = %625
  %632 = load i32, ptr %62, align 4, !tbaa !12
  %633 = sext i32 %632 to i64
  %634 = getelementptr inbounds double, ptr %630, i64 %633
  %635 = load double, ptr %634, align 8, !tbaa !10
  %636 = load double, ptr %26, align 8, !tbaa !10
  %637 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 9
  %638 = load ptr, ptr %637, align 8, !tbaa !16
  %639 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #7
  %640 = load i32, ptr %62, align 4, !tbaa !12
  %641 = sext i32 %640 to i64
  store i64 %641, ptr %76, align 8, !tbaa !14
  %642 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %639, ptr noundef nonnull align 8 dereferenceable(8) %76)
          to label %643 unwind label %712

643:                                              ; preds = %631
  %644 = load double, ptr %642, align 8, !tbaa !10
  %645 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  store i64 0, ptr %77, align 8, !tbaa !14
  %646 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %645, ptr noundef nonnull align 8 dereferenceable(8) %77)
          to label %647 unwind label %716

647:                                              ; preds = %643
  %648 = load double, ptr %646, align 8, !tbaa !10
  %649 = invoke noundef double %638(double noundef %644, double noundef %648)
          to label %650 unwind label %716

650:                                              ; preds = %647
  %651 = call double @llvm.fmuladd.f64(double %636, double %649, double %635)
  %652 = load double, ptr %26, align 8, !tbaa !10
  %653 = load double, ptr %26, align 8, !tbaa !10
  %654 = fmul double %652, %653
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  store i64 0, ptr %78, align 8, !tbaa !14
  %655 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %656 unwind label %720

656:                                              ; preds = %650
  %657 = load i32, ptr %62, align 4, !tbaa !12
  %658 = add nsw i32 %657, 1
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds double, ptr %655, i64 %659
  %661 = load double, ptr %660, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  store i64 0, ptr %79, align 8, !tbaa !14
  %662 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %663 unwind label %724

663:                                              ; preds = %656
  %664 = load i32, ptr %62, align 4, !tbaa !12
  %665 = sub nsw i32 %664, 1
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds double, ptr %662, i64 %666
  %668 = load double, ptr %667, align 8, !tbaa !10
  %669 = fadd double %661, %668
  %670 = fmul double %654, %669
  %671 = call double @llvm.fmuladd.f64(double %629, double %651, double %670)
  %672 = load double, ptr %26, align 8, !tbaa !10
  %673 = load double, ptr %26, align 8, !tbaa !10
  %674 = fmul double %672, %673
  %675 = load double, ptr %23, align 8, !tbaa !10
  %676 = fmul double %674, %675
  %677 = load double, ptr %23, align 8, !tbaa !10
  %678 = fmul double %676, %677
  %679 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 16
  %680 = load ptr, ptr %679, align 8, !tbaa !29
  %681 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  %682 = load i32, ptr %62, align 4, !tbaa !12
  %683 = sext i32 %682 to i64
  store i64 %683, ptr %80, align 8, !tbaa !14
  %684 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %681, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %685 unwind label %728

685:                                              ; preds = %663
  %686 = load double, ptr %684, align 8, !tbaa !10
  %687 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  store i64 0, ptr %81, align 8, !tbaa !14
  %688 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %687, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %689 unwind label %732

689:                                              ; preds = %685
  %690 = load double, ptr %688, align 8, !tbaa !10
  %691 = invoke noundef double %680(double noundef %686, double noundef %690)
          to label %692 unwind label %732

692:                                              ; preds = %689
  %693 = fneg double %678
  %694 = call double @llvm.fmuladd.f64(double %693, double %691, double %671)
  %695 = load double, ptr %26, align 8, !tbaa !10
  %696 = load double, ptr %26, align 8, !tbaa !10
  %697 = load double, ptr %23, align 8, !tbaa !10
  %698 = load double, ptr %23, align 8, !tbaa !10
  %699 = fmul double %697, %698
  %700 = call double @llvm.fmuladd.f64(double %695, double %696, double %699)
  %701 = fmul double 2.000000e+00, %700
  %702 = fdiv double %694, %701
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  store i64 0, ptr %82, align 8, !tbaa !14
  %703 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %704 unwind label %736

704:                                              ; preds = %692
  %705 = load i32, ptr %62, align 4, !tbaa !12
  %706 = sext i32 %705 to i64
  %707 = getelementptr inbounds double, ptr %703, i64 %706
  store double %702, ptr %707, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %747

708:                                              ; preds = %625
  %709 = landingpad { ptr, i32 }
          cleanup
  %710 = extractvalue { ptr, i32 } %709, 0
  store ptr %710, ptr %35, align 8
  %711 = extractvalue { ptr, i32 } %709, 1
  store i32 %711, ptr %36, align 4
  br label %746

712:                                              ; preds = %631
  %713 = landingpad { ptr, i32 }
          cleanup
  %714 = extractvalue { ptr, i32 } %713, 0
  store ptr %714, ptr %35, align 8
  %715 = extractvalue { ptr, i32 } %713, 1
  store i32 %715, ptr %36, align 4
  br label %745

716:                                              ; preds = %647, %643
  %717 = landingpad { ptr, i32 }
          cleanup
  %718 = extractvalue { ptr, i32 } %717, 0
  store ptr %718, ptr %35, align 8
  %719 = extractvalue { ptr, i32 } %717, 1
  store i32 %719, ptr %36, align 4
  br label %744

720:                                              ; preds = %650
  %721 = landingpad { ptr, i32 }
          cleanup
  %722 = extractvalue { ptr, i32 } %721, 0
  store ptr %722, ptr %35, align 8
  %723 = extractvalue { ptr, i32 } %721, 1
  store i32 %723, ptr %36, align 4
  br label %743

724:                                              ; preds = %656
  %725 = landingpad { ptr, i32 }
          cleanup
  %726 = extractvalue { ptr, i32 } %725, 0
  store ptr %726, ptr %35, align 8
  %727 = extractvalue { ptr, i32 } %725, 1
  store i32 %727, ptr %36, align 4
  br label %742

728:                                              ; preds = %663
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %35, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %36, align 4
  br label %741

732:                                              ; preds = %689, %685
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %35, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %36, align 4
  br label %740

736:                                              ; preds = %692
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %35, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  br label %740

740:                                              ; preds = %736, %732
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  br label %741

741:                                              ; preds = %740, %728
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  br label %742

742:                                              ; preds = %741, %724
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  br label %743

743:                                              ; preds = %742, %720
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  br label %744

744:                                              ; preds = %743, %716
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  br label %745

745:                                              ; preds = %744, %712
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  br label %746

746:                                              ; preds = %745, %708
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %1775

747:                                              ; preds = %704, %620
  %748 = load i8, ptr %14, align 1, !tbaa !9
  %749 = zext i8 %748 to i32
  %750 = and i32 %749, 4
  %751 = icmp ne i32 %750, 0
  br i1 %751, label %752, label %801

752:                                              ; preds = %747
  %753 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 13
  %754 = load ptr, ptr %753, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  store i64 0, ptr %83, align 8, !tbaa !14
  %755 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %83)
          to label %756 unwind label %782

756:                                              ; preds = %752
  %757 = load i32, ptr %62, align 4, !tbaa !12
  %758 = sub nsw i32 %757, 1
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds double, ptr %755, i64 %759
  %761 = load double, ptr %760, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  store i64 0, ptr %84, align 8, !tbaa !14
  %762 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %84)
          to label %763 unwind label %786

763:                                              ; preds = %756
  %764 = load i32, ptr %62, align 4, !tbaa !12
  %765 = add nsw i32 %764, 1
  %766 = sext i32 %765 to i64
  %767 = getelementptr inbounds double, ptr %762, i64 %766
  %768 = load double, ptr %767, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  store i64 1, ptr %85, align 8, !tbaa !14
  %769 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %770 unwind label %790

770:                                              ; preds = %763
  %771 = load i32, ptr %62, align 4, !tbaa !12
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds double, ptr %769, i64 %772
  %774 = load double, ptr %773, align 8, !tbaa !10
  %775 = invoke noundef double %754(double noundef %761, double noundef %768, double noundef %774)
          to label %776 unwind label %790

776:                                              ; preds = %770
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #7
  store i64 0, ptr %86, align 8, !tbaa !14
  %777 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %778 unwind label %794

778:                                              ; preds = %776
  %779 = load i32, ptr %62, align 4, !tbaa !12
  %780 = sext i32 %779 to i64
  %781 = getelementptr inbounds double, ptr %777, i64 %780
  store double %775, ptr %781, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  br label %801

782:                                              ; preds = %752
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %35, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %36, align 4
  br label %800

786:                                              ; preds = %756
  %787 = landingpad { ptr, i32 }
          cleanup
  %788 = extractvalue { ptr, i32 } %787, 0
  store ptr %788, ptr %35, align 8
  %789 = extractvalue { ptr, i32 } %787, 1
  store i32 %789, ptr %36, align 4
  br label %799

790:                                              ; preds = %770, %763
  %791 = landingpad { ptr, i32 }
          cleanup
  %792 = extractvalue { ptr, i32 } %791, 0
  store ptr %792, ptr %35, align 8
  %793 = extractvalue { ptr, i32 } %791, 1
  store i32 %793, ptr %36, align 4
  br label %798

794:                                              ; preds = %776
  %795 = landingpad { ptr, i32 }
          cleanup
  %796 = extractvalue { ptr, i32 } %795, 0
  store ptr %796, ptr %35, align 8
  %797 = extractvalue { ptr, i32 } %795, 1
  store i32 %797, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #7
  br label %798

798:                                              ; preds = %794, %790
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #7
  br label %799

799:                                              ; preds = %798, %786
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %800

800:                                              ; preds = %799, %782
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  br label %1775

801:                                              ; preds = %778, %747
  %802 = load i8, ptr %14, align 1, !tbaa !9
  %803 = zext i8 %802 to i32
  %804 = and i32 %803, 16
  %805 = icmp ne i32 %804, 0
  br i1 %805, label %806, label %878

806:                                              ; preds = %801
  %807 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 15
  %808 = load ptr, ptr %807, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  %809 = load i32, ptr %61, align 4, !tbaa !12
  %810 = sext i32 %809 to i64
  store i64 %810, ptr %87, align 8, !tbaa !14
  %811 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %812 unwind label %854

812:                                              ; preds = %806
  %813 = load i32, ptr %62, align 4, !tbaa !12
  %814 = sub nsw i32 %813, 1
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds double, ptr %811, i64 %815
  %817 = load double, ptr %816, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #7
  %818 = load i32, ptr %61, align 4, !tbaa !12
  %819 = sext i32 %818 to i64
  store i64 %819, ptr %88, align 8, !tbaa !14
  %820 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %821 unwind label %858

821:                                              ; preds = %812
  %822 = load i32, ptr %62, align 4, !tbaa !12
  %823 = add nsw i32 %822, 1
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds double, ptr %820, i64 %824
  %826 = load double, ptr %825, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #7
  %827 = load i32, ptr %61, align 4, !tbaa !12
  %828 = sub nsw i32 %827, 1
  %829 = sext i32 %828 to i64
  store i64 %829, ptr %89, align 8, !tbaa !14
  %830 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %89)
          to label %831 unwind label %862

831:                                              ; preds = %821
  %832 = load i32, ptr %62, align 4, !tbaa !12
  %833 = sext i32 %832 to i64
  %834 = getelementptr inbounds double, ptr %830, i64 %833
  %835 = load double, ptr %834, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  %836 = load i32, ptr %61, align 4, !tbaa !12
  %837 = add nsw i32 %836, 1
  %838 = sext i32 %837 to i64
  store i64 %838, ptr %90, align 8, !tbaa !14
  %839 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %840 unwind label %866

840:                                              ; preds = %831
  %841 = load i32, ptr %62, align 4, !tbaa !12
  %842 = sext i32 %841 to i64
  %843 = getelementptr inbounds double, ptr %839, i64 %842
  %844 = load double, ptr %843, align 8, !tbaa !10
  %845 = invoke noundef double %808(double noundef %817, double noundef %826, double noundef %835, double noundef %844)
          to label %846 unwind label %866

846:                                              ; preds = %840
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #7
  %847 = load i32, ptr %61, align 4, !tbaa !12
  %848 = sext i32 %847 to i64
  store i64 %848, ptr %91, align 8, !tbaa !14
  %849 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %91)
          to label %850 unwind label %870

850:                                              ; preds = %846
  %851 = load i32, ptr %62, align 4, !tbaa !12
  %852 = sext i32 %851 to i64
  %853 = getelementptr inbounds double, ptr %849, i64 %852
  store double %845, ptr %853, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %999

854:                                              ; preds = %806
  %855 = landingpad { ptr, i32 }
          cleanup
  %856 = extractvalue { ptr, i32 } %855, 0
  store ptr %856, ptr %35, align 8
  %857 = extractvalue { ptr, i32 } %855, 1
  store i32 %857, ptr %36, align 4
  br label %877

858:                                              ; preds = %812
  %859 = landingpad { ptr, i32 }
          cleanup
  %860 = extractvalue { ptr, i32 } %859, 0
  store ptr %860, ptr %35, align 8
  %861 = extractvalue { ptr, i32 } %859, 1
  store i32 %861, ptr %36, align 4
  br label %876

862:                                              ; preds = %821
  %863 = landingpad { ptr, i32 }
          cleanup
  %864 = extractvalue { ptr, i32 } %863, 0
  store ptr %864, ptr %35, align 8
  %865 = extractvalue { ptr, i32 } %863, 1
  store i32 %865, ptr %36, align 4
  br label %875

866:                                              ; preds = %840, %831
  %867 = landingpad { ptr, i32 }
          cleanup
  %868 = extractvalue { ptr, i32 } %867, 0
  store ptr %868, ptr %35, align 8
  %869 = extractvalue { ptr, i32 } %867, 1
  store i32 %869, ptr %36, align 4
  br label %874

870:                                              ; preds = %846
  %871 = landingpad { ptr, i32 }
          cleanup
  %872 = extractvalue { ptr, i32 } %871, 0
  store ptr %872, ptr %35, align 8
  %873 = extractvalue { ptr, i32 } %871, 1
  store i32 %873, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %874

874:                                              ; preds = %870, %866
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  br label %875

875:                                              ; preds = %874, %862
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  br label %876

876:                                              ; preds = %875, %858
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #7
  br label %877

877:                                              ; preds = %876, %854
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %1775

878:                                              ; preds = %801
  %879 = load double, ptr %23, align 8, !tbaa !10
  %880 = load double, ptr %23, align 8, !tbaa !10
  %881 = fmul double %879, %880
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #7
  %882 = load i32, ptr %61, align 4, !tbaa !12
  %883 = add nsw i32 %882, 1
  %884 = sext i32 %883 to i64
  store i64 %884, ptr %92, align 8, !tbaa !14
  %885 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %886 unwind label %965

886:                                              ; preds = %878
  %887 = load i32, ptr %62, align 4, !tbaa !12
  %888 = sext i32 %887 to i64
  %889 = getelementptr inbounds double, ptr %885, i64 %888
  %890 = load double, ptr %889, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #7
  %891 = load i32, ptr %61, align 4, !tbaa !12
  %892 = sub nsw i32 %891, 1
  %893 = sext i32 %892 to i64
  store i64 %893, ptr %93, align 8, !tbaa !14
  %894 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %895 unwind label %969

895:                                              ; preds = %886
  %896 = load i32, ptr %62, align 4, !tbaa !12
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds double, ptr %894, i64 %897
  %899 = load double, ptr %898, align 8, !tbaa !10
  %900 = fadd double %890, %899
  %901 = load double, ptr %26, align 8, !tbaa !10
  %902 = load double, ptr %26, align 8, !tbaa !10
  %903 = fmul double %901, %902
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #7
  %904 = load i32, ptr %61, align 4, !tbaa !12
  %905 = sext i32 %904 to i64
  store i64 %905, ptr %94, align 8, !tbaa !14
  %906 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %907 unwind label %973

907:                                              ; preds = %895
  %908 = load i32, ptr %62, align 4, !tbaa !12
  %909 = add nsw i32 %908, 1
  %910 = sext i32 %909 to i64
  %911 = getelementptr inbounds double, ptr %906, i64 %910
  %912 = load double, ptr %911, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #7
  %913 = load i32, ptr %61, align 4, !tbaa !12
  %914 = sext i32 %913 to i64
  store i64 %914, ptr %95, align 8, !tbaa !14
  %915 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %916 unwind label %977

916:                                              ; preds = %907
  %917 = load i32, ptr %62, align 4, !tbaa !12
  %918 = sub nsw i32 %917, 1
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds double, ptr %915, i64 %919
  %921 = load double, ptr %920, align 8, !tbaa !10
  %922 = fadd double %912, %921
  %923 = fmul double %903, %922
  %924 = call double @llvm.fmuladd.f64(double %881, double %900, double %923)
  %925 = load double, ptr %26, align 8, !tbaa !10
  %926 = load double, ptr %26, align 8, !tbaa !10
  %927 = fmul double %925, %926
  %928 = load double, ptr %23, align 8, !tbaa !10
  %929 = fmul double %927, %928
  %930 = load double, ptr %23, align 8, !tbaa !10
  %931 = fmul double %929, %930
  %932 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 16
  %933 = load ptr, ptr %932, align 8, !tbaa !29
  %934 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #7
  %935 = load i32, ptr %62, align 4, !tbaa !12
  %936 = sext i32 %935 to i64
  store i64 %936, ptr %96, align 8, !tbaa !14
  %937 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %934, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %938 unwind label %981

938:                                              ; preds = %916
  %939 = load double, ptr %937, align 8, !tbaa !10
  %940 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #7
  %941 = load i32, ptr %61, align 4, !tbaa !12
  %942 = sext i32 %941 to i64
  store i64 %942, ptr %97, align 8, !tbaa !14
  %943 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %940, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %944 unwind label %985

944:                                              ; preds = %938
  %945 = load double, ptr %943, align 8, !tbaa !10
  %946 = invoke noundef double %933(double noundef %939, double noundef %945)
          to label %947 unwind label %985

947:                                              ; preds = %944
  %948 = fneg double %931
  %949 = call double @llvm.fmuladd.f64(double %948, double %946, double %924)
  %950 = load double, ptr %26, align 8, !tbaa !10
  %951 = load double, ptr %26, align 8, !tbaa !10
  %952 = load double, ptr %23, align 8, !tbaa !10
  %953 = load double, ptr %23, align 8, !tbaa !10
  %954 = fmul double %952, %953
  %955 = call double @llvm.fmuladd.f64(double %950, double %951, double %954)
  %956 = fmul double 2.000000e+00, %955
  %957 = fdiv double %949, %956
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #7
  %958 = load i32, ptr %61, align 4, !tbaa !12
  %959 = sext i32 %958 to i64
  store i64 %959, ptr %98, align 8, !tbaa !14
  %960 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %961 unwind label %989

961:                                              ; preds = %947
  %962 = load i32, ptr %62, align 4, !tbaa !12
  %963 = sext i32 %962 to i64
  %964 = getelementptr inbounds double, ptr %960, i64 %963
  store double %957, ptr %964, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  br label %999

965:                                              ; preds = %878
  %966 = landingpad { ptr, i32 }
          cleanup
  %967 = extractvalue { ptr, i32 } %966, 0
  store ptr %967, ptr %35, align 8
  %968 = extractvalue { ptr, i32 } %966, 1
  store i32 %968, ptr %36, align 4
  br label %998

969:                                              ; preds = %886
  %970 = landingpad { ptr, i32 }
          cleanup
  %971 = extractvalue { ptr, i32 } %970, 0
  store ptr %971, ptr %35, align 8
  %972 = extractvalue { ptr, i32 } %970, 1
  store i32 %972, ptr %36, align 4
  br label %997

973:                                              ; preds = %895
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %35, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %36, align 4
  br label %996

977:                                              ; preds = %907
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %35, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %36, align 4
  br label %995

981:                                              ; preds = %916
  %982 = landingpad { ptr, i32 }
          cleanup
  %983 = extractvalue { ptr, i32 } %982, 0
  store ptr %983, ptr %35, align 8
  %984 = extractvalue { ptr, i32 } %982, 1
  store i32 %984, ptr %36, align 4
  br label %994

985:                                              ; preds = %944, %938
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %35, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %36, align 4
  br label %993

989:                                              ; preds = %947
  %990 = landingpad { ptr, i32 }
          cleanup
  %991 = extractvalue { ptr, i32 } %990, 0
  store ptr %991, ptr %35, align 8
  %992 = extractvalue { ptr, i32 } %990, 1
  store i32 %992, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #7
  br label %993

993:                                              ; preds = %989, %985
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #7
  br label %994

994:                                              ; preds = %993, %981
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #7
  br label %995

995:                                              ; preds = %994, %977
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #7
  br label %996

996:                                              ; preds = %995, %973
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #7
  br label %997

997:                                              ; preds = %996, %969
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  br label %998

998:                                              ; preds = %997, %965
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  br label %1775

999:                                              ; preds = %961, %850
  %1000 = load i8, ptr %13, align 1, !tbaa !9
  %1001 = zext i8 %1000 to i32
  %1002 = and i32 %1001, 128
  %1003 = icmp ne i32 %1002, 0
  br i1 %1003, label %1004, label %1144

1004:                                             ; preds = %999
  %1005 = load double, ptr %23, align 8, !tbaa !10
  %1006 = load double, ptr %23, align 8, !tbaa !10
  %1007 = fmul double %1005, %1006
  %1008 = fmul double %1007, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #7
  %1009 = load i32, ptr %21, align 4, !tbaa !12
  %1010 = sub nsw i32 %1009, 2
  %1011 = sext i32 %1010 to i64
  store i64 %1011, ptr %99, align 8, !tbaa !14
  %1012 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %1013 unwind label %1105

1013:                                             ; preds = %1004
  %1014 = load i32, ptr %62, align 4, !tbaa !12
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds double, ptr %1012, i64 %1015
  %1017 = load double, ptr %1016, align 8, !tbaa !10
  %1018 = load double, ptr %26, align 8, !tbaa !10
  %1019 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 10
  %1020 = load ptr, ptr %1019, align 8, !tbaa !23
  %1021 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #7
  %1022 = load i32, ptr %62, align 4, !tbaa !12
  %1023 = sext i32 %1022 to i64
  store i64 %1023, ptr %100, align 8, !tbaa !14
  %1024 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1021, ptr noundef nonnull align 8 dereferenceable(8) %100)
          to label %1025 unwind label %1109

1025:                                             ; preds = %1013
  %1026 = load double, ptr %1024, align 8, !tbaa !10
  %1027 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #7
  %1028 = load i32, ptr %21, align 4, !tbaa !12
  %1029 = sub nsw i32 %1028, 1
  %1030 = sext i32 %1029 to i64
  store i64 %1030, ptr %101, align 8, !tbaa !14
  %1031 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1027, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1032 unwind label %1113

1032:                                             ; preds = %1025
  %1033 = load double, ptr %1031, align 8, !tbaa !10
  %1034 = invoke noundef double %1020(double noundef %1026, double noundef %1033)
          to label %1035 unwind label %1113

1035:                                             ; preds = %1032
  %1036 = call double @llvm.fmuladd.f64(double %1018, double %1034, double %1017)
  %1037 = load double, ptr %26, align 8, !tbaa !10
  %1038 = load double, ptr %26, align 8, !tbaa !10
  %1039 = fmul double %1037, %1038
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #7
  %1040 = load i32, ptr %21, align 4, !tbaa !12
  %1041 = sub nsw i32 %1040, 1
  %1042 = sext i32 %1041 to i64
  store i64 %1042, ptr %102, align 8, !tbaa !14
  %1043 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %1044 unwind label %1117

1044:                                             ; preds = %1035
  %1045 = load i32, ptr %62, align 4, !tbaa !12
  %1046 = add nsw i32 %1045, 1
  %1047 = sext i32 %1046 to i64
  %1048 = getelementptr inbounds double, ptr %1043, i64 %1047
  %1049 = load double, ptr %1048, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #7
  %1050 = load i32, ptr %21, align 4, !tbaa !12
  %1051 = sub nsw i32 %1050, 1
  %1052 = sext i32 %1051 to i64
  store i64 %1052, ptr %103, align 8, !tbaa !14
  %1053 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %103)
          to label %1054 unwind label %1121

1054:                                             ; preds = %1044
  %1055 = load i32, ptr %62, align 4, !tbaa !12
  %1056 = sub nsw i32 %1055, 1
  %1057 = sext i32 %1056 to i64
  %1058 = getelementptr inbounds double, ptr %1053, i64 %1057
  %1059 = load double, ptr %1058, align 8, !tbaa !10
  %1060 = fadd double %1049, %1059
  %1061 = fmul double %1039, %1060
  %1062 = call double @llvm.fmuladd.f64(double %1008, double %1036, double %1061)
  %1063 = load double, ptr %26, align 8, !tbaa !10
  %1064 = load double, ptr %26, align 8, !tbaa !10
  %1065 = fmul double %1063, %1064
  %1066 = load double, ptr %23, align 8, !tbaa !10
  %1067 = fmul double %1065, %1066
  %1068 = load double, ptr %23, align 8, !tbaa !10
  %1069 = fmul double %1067, %1068
  %1070 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 16
  %1071 = load ptr, ptr %1070, align 8, !tbaa !29
  %1072 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #7
  %1073 = load i32, ptr %62, align 4, !tbaa !12
  %1074 = sext i32 %1073 to i64
  store i64 %1074, ptr %104, align 8, !tbaa !14
  %1075 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1072, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %1076 unwind label %1125

1076:                                             ; preds = %1054
  %1077 = load double, ptr %1075, align 8, !tbaa !10
  %1078 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #7
  %1079 = load i32, ptr %21, align 4, !tbaa !12
  %1080 = sub nsw i32 %1079, 1
  %1081 = sext i32 %1080 to i64
  store i64 %1081, ptr %105, align 8, !tbaa !14
  %1082 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1078, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1083 unwind label %1129

1083:                                             ; preds = %1076
  %1084 = load double, ptr %1082, align 8, !tbaa !10
  %1085 = invoke noundef double %1071(double noundef %1077, double noundef %1084)
          to label %1086 unwind label %1129

1086:                                             ; preds = %1083
  %1087 = fneg double %1069
  %1088 = call double @llvm.fmuladd.f64(double %1087, double %1085, double %1062)
  %1089 = load double, ptr %26, align 8, !tbaa !10
  %1090 = load double, ptr %26, align 8, !tbaa !10
  %1091 = load double, ptr %23, align 8, !tbaa !10
  %1092 = load double, ptr %23, align 8, !tbaa !10
  %1093 = fmul double %1091, %1092
  %1094 = call double @llvm.fmuladd.f64(double %1089, double %1090, double %1093)
  %1095 = fmul double 2.000000e+00, %1094
  %1096 = fdiv double %1088, %1095
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #7
  %1097 = load i32, ptr %21, align 4, !tbaa !12
  %1098 = sub nsw i32 %1097, 1
  %1099 = sext i32 %1098 to i64
  store i64 %1099, ptr %106, align 8, !tbaa !14
  %1100 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %1101 unwind label %1133

1101:                                             ; preds = %1086
  %1102 = load i32, ptr %62, align 4, !tbaa !12
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds double, ptr %1100, i64 %1103
  store double %1096, ptr %1104, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1144

1105:                                             ; preds = %1004
  %1106 = landingpad { ptr, i32 }
          cleanup
  %1107 = extractvalue { ptr, i32 } %1106, 0
  store ptr %1107, ptr %35, align 8
  %1108 = extractvalue { ptr, i32 } %1106, 1
  store i32 %1108, ptr %36, align 4
  br label %1143

1109:                                             ; preds = %1013
  %1110 = landingpad { ptr, i32 }
          cleanup
  %1111 = extractvalue { ptr, i32 } %1110, 0
  store ptr %1111, ptr %35, align 8
  %1112 = extractvalue { ptr, i32 } %1110, 1
  store i32 %1112, ptr %36, align 4
  br label %1142

1113:                                             ; preds = %1032, %1025
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %35, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %36, align 4
  br label %1141

1117:                                             ; preds = %1035
  %1118 = landingpad { ptr, i32 }
          cleanup
  %1119 = extractvalue { ptr, i32 } %1118, 0
  store ptr %1119, ptr %35, align 8
  %1120 = extractvalue { ptr, i32 } %1118, 1
  store i32 %1120, ptr %36, align 4
  br label %1140

1121:                                             ; preds = %1044
  %1122 = landingpad { ptr, i32 }
          cleanup
  %1123 = extractvalue { ptr, i32 } %1122, 0
  store ptr %1123, ptr %35, align 8
  %1124 = extractvalue { ptr, i32 } %1122, 1
  store i32 %1124, ptr %36, align 4
  br label %1139

1125:                                             ; preds = %1054
  %1126 = landingpad { ptr, i32 }
          cleanup
  %1127 = extractvalue { ptr, i32 } %1126, 0
  store ptr %1127, ptr %35, align 8
  %1128 = extractvalue { ptr, i32 } %1126, 1
  store i32 %1128, ptr %36, align 4
  br label %1138

1129:                                             ; preds = %1083, %1076
  %1130 = landingpad { ptr, i32 }
          cleanup
  %1131 = extractvalue { ptr, i32 } %1130, 0
  store ptr %1131, ptr %35, align 8
  %1132 = extractvalue { ptr, i32 } %1130, 1
  store i32 %1132, ptr %36, align 4
  br label %1137

1133:                                             ; preds = %1086
  %1134 = landingpad { ptr, i32 }
          cleanup
  %1135 = extractvalue { ptr, i32 } %1134, 0
  store ptr %1135, ptr %35, align 8
  %1136 = extractvalue { ptr, i32 } %1134, 1
  store i32 %1136, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #7
  br label %1137

1137:                                             ; preds = %1133, %1129
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  br label %1138

1138:                                             ; preds = %1137, %1125
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  br label %1139

1139:                                             ; preds = %1138, %1121
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #7
  br label %1140

1140:                                             ; preds = %1139, %1117
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  br label %1141

1141:                                             ; preds = %1140, %1113
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  br label %1142

1142:                                             ; preds = %1141, %1109
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  br label %1143

1143:                                             ; preds = %1142, %1105
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1775

1144:                                             ; preds = %1101, %999
  %1145 = load i8, ptr %14, align 1, !tbaa !9
  %1146 = zext i8 %1145 to i32
  %1147 = and i32 %1146, 8
  %1148 = icmp ne i32 %1147, 0
  br i1 %1148, label %1149, label %1210

1149:                                             ; preds = %1144
  %1150 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 14
  %1151 = load ptr, ptr %1150, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #7
  %1152 = load i32, ptr %21, align 4, !tbaa !12
  %1153 = sub nsw i32 %1152, 1
  %1154 = sext i32 %1153 to i64
  store i64 %1154, ptr %107, align 8, !tbaa !14
  %1155 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %1156 unwind label %1191

1156:                                             ; preds = %1149
  %1157 = load i32, ptr %62, align 4, !tbaa !12
  %1158 = sub nsw i32 %1157, 1
  %1159 = sext i32 %1158 to i64
  %1160 = getelementptr inbounds double, ptr %1155, i64 %1159
  %1161 = load double, ptr %1160, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #7
  %1162 = load i32, ptr %21, align 4, !tbaa !12
  %1163 = sub nsw i32 %1162, 1
  %1164 = sext i32 %1163 to i64
  store i64 %1164, ptr %108, align 8, !tbaa !14
  %1165 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %1166 unwind label %1195

1166:                                             ; preds = %1156
  %1167 = load i32, ptr %62, align 4, !tbaa !12
  %1168 = add nsw i32 %1167, 1
  %1169 = sext i32 %1168 to i64
  %1170 = getelementptr inbounds double, ptr %1165, i64 %1169
  %1171 = load double, ptr %1170, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #7
  %1172 = load i32, ptr %21, align 4, !tbaa !12
  %1173 = sub nsw i32 %1172, 2
  %1174 = sext i32 %1173 to i64
  store i64 %1174, ptr %109, align 8, !tbaa !14
  %1175 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %1176 unwind label %1199

1176:                                             ; preds = %1166
  %1177 = load i32, ptr %62, align 4, !tbaa !12
  %1178 = sext i32 %1177 to i64
  %1179 = getelementptr inbounds double, ptr %1175, i64 %1178
  %1180 = load double, ptr %1179, align 8, !tbaa !10
  %1181 = invoke noundef double %1151(double noundef %1161, double noundef %1171, double noundef %1180)
          to label %1182 unwind label %1199

1182:                                             ; preds = %1176
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #7
  %1183 = load i32, ptr %21, align 4, !tbaa !12
  %1184 = sub nsw i32 %1183, 1
  %1185 = sext i32 %1184 to i64
  store i64 %1185, ptr %110, align 8, !tbaa !14
  %1186 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %1187 unwind label %1203

1187:                                             ; preds = %1182
  %1188 = load i32, ptr %62, align 4, !tbaa !12
  %1189 = sext i32 %1188 to i64
  %1190 = getelementptr inbounds double, ptr %1186, i64 %1189
  store double %1181, ptr %1190, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  br label %1210

1191:                                             ; preds = %1149
  %1192 = landingpad { ptr, i32 }
          cleanup
  %1193 = extractvalue { ptr, i32 } %1192, 0
  store ptr %1193, ptr %35, align 8
  %1194 = extractvalue { ptr, i32 } %1192, 1
  store i32 %1194, ptr %36, align 4
  br label %1209

1195:                                             ; preds = %1156
  %1196 = landingpad { ptr, i32 }
          cleanup
  %1197 = extractvalue { ptr, i32 } %1196, 0
  store ptr %1197, ptr %35, align 8
  %1198 = extractvalue { ptr, i32 } %1196, 1
  store i32 %1198, ptr %36, align 4
  br label %1208

1199:                                             ; preds = %1176, %1166
  %1200 = landingpad { ptr, i32 }
          cleanup
  %1201 = extractvalue { ptr, i32 } %1200, 0
  store ptr %1201, ptr %35, align 8
  %1202 = extractvalue { ptr, i32 } %1200, 1
  store i32 %1202, ptr %36, align 4
  br label %1207

1203:                                             ; preds = %1182
  %1204 = landingpad { ptr, i32 }
          cleanup
  %1205 = extractvalue { ptr, i32 } %1204, 0
  store ptr %1205, ptr %35, align 8
  %1206 = extractvalue { ptr, i32 } %1204, 1
  store i32 %1206, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #7
  br label %1207

1207:                                             ; preds = %1203, %1199
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #7
  br label %1208

1208:                                             ; preds = %1207, %1195
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  br label %1209

1209:                                             ; preds = %1208, %1191
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  br label %1775

1210:                                             ; preds = %1187, %1144
  %1211 = load i8, ptr %13, align 1, !tbaa !9
  %1212 = zext i8 %1211 to i32
  %1213 = and i32 %1212, 32
  %1214 = icmp ne i32 %1213, 0
  br i1 %1214, label %1215, label %1355

1215:                                             ; preds = %1210
  %1216 = load double, ptr %23, align 8, !tbaa !10
  %1217 = load double, ptr %23, align 8, !tbaa !10
  %1218 = fmul double %1216, %1217
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #7
  %1219 = load i32, ptr %61, align 4, !tbaa !12
  %1220 = add nsw i32 %1219, 1
  %1221 = sext i32 %1220 to i64
  store i64 %1221, ptr %111, align 8, !tbaa !14
  %1222 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %1223 unwind label %1316

1223:                                             ; preds = %1215
  %1224 = load i32, ptr %22, align 4, !tbaa !12
  %1225 = sub nsw i32 %1224, 1
  %1226 = sext i32 %1225 to i64
  %1227 = getelementptr inbounds double, ptr %1222, i64 %1226
  %1228 = load double, ptr %1227, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #7
  %1229 = load i32, ptr %61, align 4, !tbaa !12
  %1230 = sub nsw i32 %1229, 1
  %1231 = sext i32 %1230 to i64
  store i64 %1231, ptr %112, align 8, !tbaa !14
  %1232 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %1233 unwind label %1320

1233:                                             ; preds = %1223
  %1234 = load i32, ptr %22, align 4, !tbaa !12
  %1235 = sub nsw i32 %1234, 1
  %1236 = sext i32 %1235 to i64
  %1237 = getelementptr inbounds double, ptr %1232, i64 %1236
  %1238 = load double, ptr %1237, align 8, !tbaa !10
  %1239 = fadd double %1228, %1238
  %1240 = load double, ptr %26, align 8, !tbaa !10
  %1241 = load double, ptr %26, align 8, !tbaa !10
  %1242 = fmul double %1240, %1241
  %1243 = fmul double %1242, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #7
  %1244 = load i32, ptr %61, align 4, !tbaa !12
  %1245 = sext i32 %1244 to i64
  store i64 %1245, ptr %113, align 8, !tbaa !14
  %1246 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %113)
          to label %1247 unwind label %1324

1247:                                             ; preds = %1233
  %1248 = load i32, ptr %22, align 4, !tbaa !12
  %1249 = sub nsw i32 %1248, 2
  %1250 = sext i32 %1249 to i64
  %1251 = getelementptr inbounds double, ptr %1246, i64 %1250
  %1252 = load double, ptr %1251, align 8, !tbaa !10
  %1253 = load double, ptr %23, align 8, !tbaa !10
  %1254 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 8
  %1255 = load ptr, ptr %1254, align 8, !tbaa !27
  %1256 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #7
  %1257 = load i32, ptr %22, align 4, !tbaa !12
  %1258 = sub nsw i32 %1257, 1
  %1259 = sext i32 %1258 to i64
  store i64 %1259, ptr %114, align 8, !tbaa !14
  %1260 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1256, ptr noundef nonnull align 8 dereferenceable(8) %114)
          to label %1261 unwind label %1328

1261:                                             ; preds = %1247
  %1262 = load double, ptr %1260, align 8, !tbaa !10
  %1263 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #7
  %1264 = load i32, ptr %61, align 4, !tbaa !12
  %1265 = sext i32 %1264 to i64
  store i64 %1265, ptr %115, align 8, !tbaa !14
  %1266 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1263, ptr noundef nonnull align 8 dereferenceable(8) %115)
          to label %1267 unwind label %1332

1267:                                             ; preds = %1261
  %1268 = load double, ptr %1266, align 8, !tbaa !10
  %1269 = invoke noundef double %1255(double noundef %1262, double noundef %1268)
          to label %1270 unwind label %1332

1270:                                             ; preds = %1267
  %1271 = call double @llvm.fmuladd.f64(double %1253, double %1269, double %1252)
  %1272 = fmul double %1243, %1271
  %1273 = call double @llvm.fmuladd.f64(double %1218, double %1239, double %1272)
  %1274 = load double, ptr %26, align 8, !tbaa !10
  %1275 = load double, ptr %26, align 8, !tbaa !10
  %1276 = fmul double %1274, %1275
  %1277 = load double, ptr %23, align 8, !tbaa !10
  %1278 = fmul double %1276, %1277
  %1279 = load double, ptr %23, align 8, !tbaa !10
  %1280 = fmul double %1278, %1279
  %1281 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 16
  %1282 = load ptr, ptr %1281, align 8, !tbaa !29
  %1283 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #7
  %1284 = load i32, ptr %22, align 4, !tbaa !12
  %1285 = sub nsw i32 %1284, 1
  %1286 = sext i32 %1285 to i64
  store i64 %1286, ptr %116, align 8, !tbaa !14
  %1287 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1283, ptr noundef nonnull align 8 dereferenceable(8) %116)
          to label %1288 unwind label %1336

1288:                                             ; preds = %1270
  %1289 = load double, ptr %1287, align 8, !tbaa !10
  %1290 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #7
  %1291 = load i32, ptr %61, align 4, !tbaa !12
  %1292 = sext i32 %1291 to i64
  store i64 %1292, ptr %117, align 8, !tbaa !14
  %1293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1290, ptr noundef nonnull align 8 dereferenceable(8) %117)
          to label %1294 unwind label %1340

1294:                                             ; preds = %1288
  %1295 = load double, ptr %1293, align 8, !tbaa !10
  %1296 = invoke noundef double %1282(double noundef %1289, double noundef %1295)
          to label %1297 unwind label %1340

1297:                                             ; preds = %1294
  %1298 = fneg double %1280
  %1299 = call double @llvm.fmuladd.f64(double %1298, double %1296, double %1273)
  %1300 = load double, ptr %26, align 8, !tbaa !10
  %1301 = load double, ptr %26, align 8, !tbaa !10
  %1302 = load double, ptr %23, align 8, !tbaa !10
  %1303 = load double, ptr %23, align 8, !tbaa !10
  %1304 = fmul double %1302, %1303
  %1305 = call double @llvm.fmuladd.f64(double %1300, double %1301, double %1304)
  %1306 = fmul double 2.000000e+00, %1305
  %1307 = fdiv double %1299, %1306
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #7
  %1308 = load i32, ptr %61, align 4, !tbaa !12
  %1309 = sext i32 %1308 to i64
  store i64 %1309, ptr %118, align 8, !tbaa !14
  %1310 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %118)
          to label %1311 unwind label %1344

1311:                                             ; preds = %1297
  %1312 = load i32, ptr %22, align 4, !tbaa !12
  %1313 = sub nsw i32 %1312, 1
  %1314 = sext i32 %1313 to i64
  %1315 = getelementptr inbounds double, ptr %1310, i64 %1314
  store double %1307, ptr %1315, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  br label %1355

1316:                                             ; preds = %1215
  %1317 = landingpad { ptr, i32 }
          cleanup
  %1318 = extractvalue { ptr, i32 } %1317, 0
  store ptr %1318, ptr %35, align 8
  %1319 = extractvalue { ptr, i32 } %1317, 1
  store i32 %1319, ptr %36, align 4
  br label %1354

1320:                                             ; preds = %1223
  %1321 = landingpad { ptr, i32 }
          cleanup
  %1322 = extractvalue { ptr, i32 } %1321, 0
  store ptr %1322, ptr %35, align 8
  %1323 = extractvalue { ptr, i32 } %1321, 1
  store i32 %1323, ptr %36, align 4
  br label %1353

1324:                                             ; preds = %1233
  %1325 = landingpad { ptr, i32 }
          cleanup
  %1326 = extractvalue { ptr, i32 } %1325, 0
  store ptr %1326, ptr %35, align 8
  %1327 = extractvalue { ptr, i32 } %1325, 1
  store i32 %1327, ptr %36, align 4
  br label %1352

1328:                                             ; preds = %1247
  %1329 = landingpad { ptr, i32 }
          cleanup
  %1330 = extractvalue { ptr, i32 } %1329, 0
  store ptr %1330, ptr %35, align 8
  %1331 = extractvalue { ptr, i32 } %1329, 1
  store i32 %1331, ptr %36, align 4
  br label %1351

1332:                                             ; preds = %1267, %1261
  %1333 = landingpad { ptr, i32 }
          cleanup
  %1334 = extractvalue { ptr, i32 } %1333, 0
  store ptr %1334, ptr %35, align 8
  %1335 = extractvalue { ptr, i32 } %1333, 1
  store i32 %1335, ptr %36, align 4
  br label %1350

1336:                                             ; preds = %1270
  %1337 = landingpad { ptr, i32 }
          cleanup
  %1338 = extractvalue { ptr, i32 } %1337, 0
  store ptr %1338, ptr %35, align 8
  %1339 = extractvalue { ptr, i32 } %1337, 1
  store i32 %1339, ptr %36, align 4
  br label %1349

1340:                                             ; preds = %1294, %1288
  %1341 = landingpad { ptr, i32 }
          cleanup
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %35, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %36, align 4
  br label %1348

1344:                                             ; preds = %1297
  %1345 = landingpad { ptr, i32 }
          cleanup
  %1346 = extractvalue { ptr, i32 } %1345, 0
  store ptr %1346, ptr %35, align 8
  %1347 = extractvalue { ptr, i32 } %1345, 1
  store i32 %1347, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  br label %1348

1348:                                             ; preds = %1344, %1340
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #7
  br label %1349

1349:                                             ; preds = %1348, %1336
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #7
  br label %1350

1350:                                             ; preds = %1349, %1332
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #7
  br label %1351

1351:                                             ; preds = %1350, %1328
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #7
  br label %1352

1352:                                             ; preds = %1351, %1324
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  br label %1353

1353:                                             ; preds = %1352, %1320
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #7
  br label %1354

1354:                                             ; preds = %1353, %1316
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  br label %1775

1355:                                             ; preds = %1311, %1210
  %1356 = load i8, ptr %14, align 1, !tbaa !9
  %1357 = zext i8 %1356 to i32
  %1358 = and i32 %1357, 2
  %1359 = icmp ne i32 %1358, 0
  br i1 %1359, label %1360, label %1421

1360:                                             ; preds = %1355
  %1361 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %157, i32 0, i32 12
  %1362 = load ptr, ptr %1361, align 8, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #7
  %1363 = load i32, ptr %61, align 4, !tbaa !12
  %1364 = sext i32 %1363 to i64
  store i64 %1364, ptr %119, align 8, !tbaa !14
  %1365 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %119)
          to label %1366 unwind label %1402

1366:                                             ; preds = %1360
  %1367 = load i32, ptr %22, align 4, !tbaa !12
  %1368 = sub nsw i32 %1367, 2
  %1369 = sext i32 %1368 to i64
  %1370 = getelementptr inbounds double, ptr %1365, i64 %1369
  %1371 = load double, ptr %1370, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #7
  %1372 = load i32, ptr %61, align 4, !tbaa !12
  %1373 = sub nsw i32 %1372, 1
  %1374 = sext i32 %1373 to i64
  store i64 %1374, ptr %120, align 8, !tbaa !14
  %1375 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %120)
          to label %1376 unwind label %1406

1376:                                             ; preds = %1366
  %1377 = load i32, ptr %22, align 4, !tbaa !12
  %1378 = sub nsw i32 %1377, 1
  %1379 = sext i32 %1378 to i64
  %1380 = getelementptr inbounds double, ptr %1375, i64 %1379
  %1381 = load double, ptr %1380, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #7
  %1382 = load i32, ptr %61, align 4, !tbaa !12
  %1383 = add nsw i32 %1382, 1
  %1384 = sext i32 %1383 to i64
  store i64 %1384, ptr %121, align 8, !tbaa !14
  %1385 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %121)
          to label %1386 unwind label %1410

1386:                                             ; preds = %1376
  %1387 = load i32, ptr %22, align 4, !tbaa !12
  %1388 = sub nsw i32 %1387, 1
  %1389 = sext i32 %1388 to i64
  %1390 = getelementptr inbounds double, ptr %1385, i64 %1389
  %1391 = load double, ptr %1390, align 8, !tbaa !10
  %1392 = invoke noundef double %1362(double noundef %1371, double noundef %1381, double noundef %1391)
          to label %1393 unwind label %1410

1393:                                             ; preds = %1386
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #7
  %1394 = load i32, ptr %61, align 4, !tbaa !12
  %1395 = sext i32 %1394 to i64
  store i64 %1395, ptr %122, align 8, !tbaa !14
  %1396 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %122)
          to label %1397 unwind label %1414

1397:                                             ; preds = %1393
  %1398 = load i32, ptr %22, align 4, !tbaa !12
  %1399 = sub nsw i32 %1398, 1
  %1400 = sext i32 %1399 to i64
  %1401 = getelementptr inbounds double, ptr %1396, i64 %1400
  store double %1392, ptr %1401, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #7
  br label %1421

1402:                                             ; preds = %1360
  %1403 = landingpad { ptr, i32 }
          cleanup
  %1404 = extractvalue { ptr, i32 } %1403, 0
  store ptr %1404, ptr %35, align 8
  %1405 = extractvalue { ptr, i32 } %1403, 1
  store i32 %1405, ptr %36, align 4
  br label %1420

1406:                                             ; preds = %1366
  %1407 = landingpad { ptr, i32 }
          cleanup
  %1408 = extractvalue { ptr, i32 } %1407, 0
  store ptr %1408, ptr %35, align 8
  %1409 = extractvalue { ptr, i32 } %1407, 1
  store i32 %1409, ptr %36, align 4
  br label %1419

1410:                                             ; preds = %1386, %1376
  %1411 = landingpad { ptr, i32 }
          cleanup
  %1412 = extractvalue { ptr, i32 } %1411, 0
  store ptr %1412, ptr %35, align 8
  %1413 = extractvalue { ptr, i32 } %1411, 1
  store i32 %1413, ptr %36, align 4
  br label %1418

1414:                                             ; preds = %1393
  %1415 = landingpad { ptr, i32 }
          cleanup
  %1416 = extractvalue { ptr, i32 } %1415, 0
  store ptr %1416, ptr %35, align 8
  %1417 = extractvalue { ptr, i32 } %1415, 1
  store i32 %1417, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #7
  br label %1418

1418:                                             ; preds = %1414, %1410
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #7
  br label %1419

1419:                                             ; preds = %1418, %1406
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #7
  br label %1420

1420:                                             ; preds = %1419, %1402
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #7
  br label %1775

1421:                                             ; preds = %1397, %1355
  %1422 = load i8, ptr %13, align 1, !tbaa !9
  %1423 = zext i8 %1422 to i32
  %1424 = and i32 %1423, 16
  %1425 = icmp ne i32 %1424, 0
  br i1 %1425, label %1426, label %1480

1426:                                             ; preds = %1421
  %1427 = load i8, ptr %13, align 1, !tbaa !9
  %1428 = zext i8 %1427 to i32
  %1429 = and i32 %1428, 64
  %1430 = icmp ne i32 %1429, 0
  br i1 %1430, label %1431, label %1480

1431:                                             ; preds = %1426
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #7
  store i64 0, ptr %123, align 8, !tbaa !14
  %1432 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %123)
          to label %1433 unwind label %1456

1433:                                             ; preds = %1431
  %1434 = getelementptr inbounds double, ptr %1432, i64 1
  %1435 = load double, ptr %1434, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #7
  store i64 0, ptr %124, align 8, !tbaa !14
  %1436 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %124)
          to label %1437 unwind label %1460

1437:                                             ; preds = %1433
  %1438 = getelementptr inbounds double, ptr %1436, i64 2
  %1439 = load double, ptr %1438, align 8, !tbaa !10
  %1440 = fneg double %1439
  %1441 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1435, double %1440)
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #7
  store i64 1, ptr %125, align 8, !tbaa !14
  %1442 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %1443 unwind label %1464

1443:                                             ; preds = %1437
  %1444 = getelementptr inbounds double, ptr %1442, i64 0
  %1445 = load double, ptr %1444, align 8, !tbaa !10
  %1446 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1445, double %1441)
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #7
  store i64 2, ptr %126, align 8, !tbaa !14
  %1447 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %126)
          to label %1448 unwind label %1468

1448:                                             ; preds = %1443
  %1449 = getelementptr inbounds double, ptr %1447, i64 0
  %1450 = load double, ptr %1449, align 8, !tbaa !10
  %1451 = fsub double %1446, %1450
  %1452 = fdiv double %1451, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #7
  store i64 0, ptr %127, align 8, !tbaa !14
  %1453 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %127)
          to label %1454 unwind label %1472

1454:                                             ; preds = %1448
  %1455 = getelementptr inbounds double, ptr %1453, i64 0
  store double %1452, ptr %1455, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #7
  br label %1480

1456:                                             ; preds = %1431
  %1457 = landingpad { ptr, i32 }
          cleanup
  %1458 = extractvalue { ptr, i32 } %1457, 0
  store ptr %1458, ptr %35, align 8
  %1459 = extractvalue { ptr, i32 } %1457, 1
  store i32 %1459, ptr %36, align 4
  br label %1479

1460:                                             ; preds = %1433
  %1461 = landingpad { ptr, i32 }
          cleanup
  %1462 = extractvalue { ptr, i32 } %1461, 0
  store ptr %1462, ptr %35, align 8
  %1463 = extractvalue { ptr, i32 } %1461, 1
  store i32 %1463, ptr %36, align 4
  br label %1478

1464:                                             ; preds = %1437
  %1465 = landingpad { ptr, i32 }
          cleanup
  %1466 = extractvalue { ptr, i32 } %1465, 0
  store ptr %1466, ptr %35, align 8
  %1467 = extractvalue { ptr, i32 } %1465, 1
  store i32 %1467, ptr %36, align 4
  br label %1477

1468:                                             ; preds = %1443
  %1469 = landingpad { ptr, i32 }
          cleanup
  %1470 = extractvalue { ptr, i32 } %1469, 0
  store ptr %1470, ptr %35, align 8
  %1471 = extractvalue { ptr, i32 } %1469, 1
  store i32 %1471, ptr %36, align 4
  br label %1476

1472:                                             ; preds = %1448
  %1473 = landingpad { ptr, i32 }
          cleanup
  %1474 = extractvalue { ptr, i32 } %1473, 0
  store ptr %1474, ptr %35, align 8
  %1475 = extractvalue { ptr, i32 } %1473, 1
  store i32 %1475, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #7
  br label %1476

1476:                                             ; preds = %1472, %1468
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #7
  br label %1477

1477:                                             ; preds = %1476, %1464
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #7
  br label %1478

1478:                                             ; preds = %1477, %1460
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #7
  br label %1479

1479:                                             ; preds = %1478, %1456
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #7
  br label %1775

1480:                                             ; preds = %1454, %1426, %1421
  %1481 = load i8, ptr %13, align 1, !tbaa !9
  %1482 = zext i8 %1481 to i32
  %1483 = and i32 %1482, 64
  %1484 = icmp ne i32 %1483, 0
  br i1 %1484, label %1485, label %1554

1485:                                             ; preds = %1480
  %1486 = load i8, ptr %13, align 1, !tbaa !9
  %1487 = zext i8 %1486 to i32
  %1488 = and i32 %1487, 32
  %1489 = icmp ne i32 %1488, 0
  br i1 %1489, label %1490, label %1554

1490:                                             ; preds = %1485
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #7
  store i64 0, ptr %128, align 8, !tbaa !14
  %1491 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %128)
          to label %1492 unwind label %1530

1492:                                             ; preds = %1490
  %1493 = load i32, ptr %22, align 4, !tbaa !12
  %1494 = sub nsw i32 %1493, 2
  %1495 = sext i32 %1494 to i64
  %1496 = getelementptr inbounds double, ptr %1491, i64 %1495
  %1497 = load double, ptr %1496, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #7
  store i64 0, ptr %129, align 8, !tbaa !14
  %1498 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %129)
          to label %1499 unwind label %1534

1499:                                             ; preds = %1492
  %1500 = load i32, ptr %22, align 4, !tbaa !12
  %1501 = sub nsw i32 %1500, 3
  %1502 = sext i32 %1501 to i64
  %1503 = getelementptr inbounds double, ptr %1498, i64 %1502
  %1504 = load double, ptr %1503, align 8, !tbaa !10
  %1505 = fneg double %1504
  %1506 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1497, double %1505)
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #7
  store i64 1, ptr %130, align 8, !tbaa !14
  %1507 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %1508 unwind label %1538

1508:                                             ; preds = %1499
  %1509 = load i32, ptr %22, align 4, !tbaa !12
  %1510 = sub nsw i32 %1509, 1
  %1511 = sext i32 %1510 to i64
  %1512 = getelementptr inbounds double, ptr %1507, i64 %1511
  %1513 = load double, ptr %1512, align 8, !tbaa !10
  %1514 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1513, double %1506)
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #7
  store i64 2, ptr %131, align 8, !tbaa !14
  %1515 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %1516 unwind label %1542

1516:                                             ; preds = %1508
  %1517 = load i32, ptr %22, align 4, !tbaa !12
  %1518 = sub nsw i32 %1517, 1
  %1519 = sext i32 %1518 to i64
  %1520 = getelementptr inbounds double, ptr %1515, i64 %1519
  %1521 = load double, ptr %1520, align 8, !tbaa !10
  %1522 = fsub double %1514, %1521
  %1523 = fdiv double %1522, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #7
  store i64 0, ptr %132, align 8, !tbaa !14
  %1524 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %132)
          to label %1525 unwind label %1546

1525:                                             ; preds = %1516
  %1526 = load i32, ptr %22, align 4, !tbaa !12
  %1527 = sub nsw i32 %1526, 1
  %1528 = sext i32 %1527 to i64
  %1529 = getelementptr inbounds double, ptr %1524, i64 %1528
  store double %1523, ptr %1529, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  br label %1554

1530:                                             ; preds = %1490
  %1531 = landingpad { ptr, i32 }
          cleanup
  %1532 = extractvalue { ptr, i32 } %1531, 0
  store ptr %1532, ptr %35, align 8
  %1533 = extractvalue { ptr, i32 } %1531, 1
  store i32 %1533, ptr %36, align 4
  br label %1553

1534:                                             ; preds = %1492
  %1535 = landingpad { ptr, i32 }
          cleanup
  %1536 = extractvalue { ptr, i32 } %1535, 0
  store ptr %1536, ptr %35, align 8
  %1537 = extractvalue { ptr, i32 } %1535, 1
  store i32 %1537, ptr %36, align 4
  br label %1552

1538:                                             ; preds = %1499
  %1539 = landingpad { ptr, i32 }
          cleanup
  %1540 = extractvalue { ptr, i32 } %1539, 0
  store ptr %1540, ptr %35, align 8
  %1541 = extractvalue { ptr, i32 } %1539, 1
  store i32 %1541, ptr %36, align 4
  br label %1551

1542:                                             ; preds = %1508
  %1543 = landingpad { ptr, i32 }
          cleanup
  %1544 = extractvalue { ptr, i32 } %1543, 0
  store ptr %1544, ptr %35, align 8
  %1545 = extractvalue { ptr, i32 } %1543, 1
  store i32 %1545, ptr %36, align 4
  br label %1550

1546:                                             ; preds = %1516
  %1547 = landingpad { ptr, i32 }
          cleanup
  %1548 = extractvalue { ptr, i32 } %1547, 0
  store ptr %1548, ptr %35, align 8
  %1549 = extractvalue { ptr, i32 } %1547, 1
  store i32 %1549, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #7
  br label %1550

1550:                                             ; preds = %1546, %1542
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #7
  br label %1551

1551:                                             ; preds = %1550, %1538
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #7
  br label %1552

1552:                                             ; preds = %1551, %1534
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #7
  br label %1553

1553:                                             ; preds = %1552, %1530
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  br label %1775

1554:                                             ; preds = %1525, %1485, %1480
  %1555 = load i8, ptr %13, align 1, !tbaa !9
  %1556 = zext i8 %1555 to i32
  %1557 = and i32 %1556, 16
  %1558 = icmp ne i32 %1557, 0
  br i1 %1558, label %1559, label %1628

1559:                                             ; preds = %1554
  %1560 = load i8, ptr %13, align 1, !tbaa !9
  %1561 = zext i8 %1560 to i32
  %1562 = and i32 %1561, 128
  %1563 = icmp ne i32 %1562, 0
  br i1 %1563, label %1564, label %1628

1564:                                             ; preds = %1559
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #7
  %1565 = load i32, ptr %21, align 4, !tbaa !12
  %1566 = sub nsw i32 %1565, 1
  %1567 = sext i32 %1566 to i64
  store i64 %1567, ptr %133, align 8, !tbaa !14
  %1568 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %133)
          to label %1569 unwind label %1604

1569:                                             ; preds = %1564
  %1570 = getelementptr inbounds double, ptr %1568, i64 1
  %1571 = load double, ptr %1570, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #7
  %1572 = load i32, ptr %21, align 4, !tbaa !12
  %1573 = sub nsw i32 %1572, 1
  %1574 = sext i32 %1573 to i64
  store i64 %1574, ptr %134, align 8, !tbaa !14
  %1575 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %1576 unwind label %1608

1576:                                             ; preds = %1569
  %1577 = getelementptr inbounds double, ptr %1575, i64 2
  %1578 = load double, ptr %1577, align 8, !tbaa !10
  %1579 = fneg double %1578
  %1580 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1571, double %1579)
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #7
  %1581 = load i32, ptr %21, align 4, !tbaa !12
  %1582 = sub nsw i32 %1581, 2
  %1583 = sext i32 %1582 to i64
  store i64 %1583, ptr %135, align 8, !tbaa !14
  %1584 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %135)
          to label %1585 unwind label %1612

1585:                                             ; preds = %1576
  %1586 = getelementptr inbounds double, ptr %1584, i64 0
  %1587 = load double, ptr %1586, align 8, !tbaa !10
  %1588 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1587, double %1580)
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #7
  %1589 = load i32, ptr %21, align 4, !tbaa !12
  %1590 = sub nsw i32 %1589, 3
  %1591 = sext i32 %1590 to i64
  store i64 %1591, ptr %136, align 8, !tbaa !14
  %1592 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %136)
          to label %1593 unwind label %1616

1593:                                             ; preds = %1585
  %1594 = getelementptr inbounds double, ptr %1592, i64 0
  %1595 = load double, ptr %1594, align 8, !tbaa !10
  %1596 = fsub double %1588, %1595
  %1597 = fdiv double %1596, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #7
  %1598 = load i32, ptr %21, align 4, !tbaa !12
  %1599 = sub nsw i32 %1598, 1
  %1600 = sext i32 %1599 to i64
  store i64 %1600, ptr %137, align 8, !tbaa !14
  %1601 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %137)
          to label %1602 unwind label %1620

1602:                                             ; preds = %1593
  %1603 = getelementptr inbounds double, ptr %1601, i64 0
  store double %1597, ptr %1603, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #7
  br label %1628

1604:                                             ; preds = %1564
  %1605 = landingpad { ptr, i32 }
          cleanup
  %1606 = extractvalue { ptr, i32 } %1605, 0
  store ptr %1606, ptr %35, align 8
  %1607 = extractvalue { ptr, i32 } %1605, 1
  store i32 %1607, ptr %36, align 4
  br label %1627

1608:                                             ; preds = %1569
  %1609 = landingpad { ptr, i32 }
          cleanup
  %1610 = extractvalue { ptr, i32 } %1609, 0
  store ptr %1610, ptr %35, align 8
  %1611 = extractvalue { ptr, i32 } %1609, 1
  store i32 %1611, ptr %36, align 4
  br label %1626

1612:                                             ; preds = %1576
  %1613 = landingpad { ptr, i32 }
          cleanup
  %1614 = extractvalue { ptr, i32 } %1613, 0
  store ptr %1614, ptr %35, align 8
  %1615 = extractvalue { ptr, i32 } %1613, 1
  store i32 %1615, ptr %36, align 4
  br label %1625

1616:                                             ; preds = %1585
  %1617 = landingpad { ptr, i32 }
          cleanup
  %1618 = extractvalue { ptr, i32 } %1617, 0
  store ptr %1618, ptr %35, align 8
  %1619 = extractvalue { ptr, i32 } %1617, 1
  store i32 %1619, ptr %36, align 4
  br label %1624

1620:                                             ; preds = %1593
  %1621 = landingpad { ptr, i32 }
          cleanup
  %1622 = extractvalue { ptr, i32 } %1621, 0
  store ptr %1622, ptr %35, align 8
  %1623 = extractvalue { ptr, i32 } %1621, 1
  store i32 %1623, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  br label %1624

1624:                                             ; preds = %1620, %1616
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #7
  br label %1625

1625:                                             ; preds = %1624, %1612
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #7
  br label %1626

1626:                                             ; preds = %1625, %1608
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #7
  br label %1627

1627:                                             ; preds = %1626, %1604
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #7
  br label %1775

1628:                                             ; preds = %1602, %1559, %1554
  %1629 = load i8, ptr %13, align 1, !tbaa !9
  %1630 = zext i8 %1629 to i32
  %1631 = and i32 %1630, 128
  %1632 = icmp ne i32 %1631, 0
  br i1 %1632, label %1633, label %1717

1633:                                             ; preds = %1628
  %1634 = load i8, ptr %13, align 1, !tbaa !9
  %1635 = zext i8 %1634 to i32
  %1636 = and i32 %1635, 32
  %1637 = icmp ne i32 %1636, 0
  br i1 %1637, label %1638, label %1717

1638:                                             ; preds = %1633
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #7
  %1639 = load i32, ptr %21, align 4, !tbaa !12
  %1640 = sub nsw i32 %1639, 1
  %1641 = sext i32 %1640 to i64
  store i64 %1641, ptr %138, align 8, !tbaa !14
  %1642 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %138)
          to label %1643 unwind label %1693

1643:                                             ; preds = %1638
  %1644 = load i32, ptr %22, align 4, !tbaa !12
  %1645 = sub nsw i32 %1644, 2
  %1646 = sext i32 %1645 to i64
  %1647 = getelementptr inbounds double, ptr %1642, i64 %1646
  %1648 = load double, ptr %1647, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #7
  %1649 = load i32, ptr %21, align 4, !tbaa !12
  %1650 = sub nsw i32 %1649, 1
  %1651 = sext i32 %1650 to i64
  store i64 %1651, ptr %139, align 8, !tbaa !14
  %1652 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %139)
          to label %1653 unwind label %1697

1653:                                             ; preds = %1643
  %1654 = load i32, ptr %22, align 4, !tbaa !12
  %1655 = sub nsw i32 %1654, 3
  %1656 = sext i32 %1655 to i64
  %1657 = getelementptr inbounds double, ptr %1652, i64 %1656
  %1658 = load double, ptr %1657, align 8, !tbaa !10
  %1659 = fneg double %1658
  %1660 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1648, double %1659)
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #7
  %1661 = load i32, ptr %21, align 4, !tbaa !12
  %1662 = sub nsw i32 %1661, 2
  %1663 = sext i32 %1662 to i64
  store i64 %1663, ptr %140, align 8, !tbaa !14
  %1664 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %140)
          to label %1665 unwind label %1701

1665:                                             ; preds = %1653
  %1666 = load i32, ptr %22, align 4, !tbaa !12
  %1667 = sub nsw i32 %1666, 1
  %1668 = sext i32 %1667 to i64
  %1669 = getelementptr inbounds double, ptr %1664, i64 %1668
  %1670 = load double, ptr %1669, align 8, !tbaa !10
  %1671 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1670, double %1660)
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #7
  %1672 = load i32, ptr %21, align 4, !tbaa !12
  %1673 = sub nsw i32 %1672, 3
  %1674 = sext i32 %1673 to i64
  store i64 %1674, ptr %141, align 8, !tbaa !14
  %1675 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %141)
          to label %1676 unwind label %1705

1676:                                             ; preds = %1665
  %1677 = load i32, ptr %22, align 4, !tbaa !12
  %1678 = sub nsw i32 %1677, 1
  %1679 = sext i32 %1678 to i64
  %1680 = getelementptr inbounds double, ptr %1675, i64 %1679
  %1681 = load double, ptr %1680, align 8, !tbaa !10
  %1682 = fsub double %1671, %1681
  %1683 = fdiv double %1682, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #7
  %1684 = load i32, ptr %21, align 4, !tbaa !12
  %1685 = sub nsw i32 %1684, 1
  %1686 = sext i32 %1685 to i64
  store i64 %1686, ptr %142, align 8, !tbaa !14
  %1687 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %142)
          to label %1688 unwind label %1709

1688:                                             ; preds = %1676
  %1689 = load i32, ptr %22, align 4, !tbaa !12
  %1690 = sub nsw i32 %1689, 1
  %1691 = sext i32 %1690 to i64
  %1692 = getelementptr inbounds double, ptr %1687, i64 %1691
  store double %1683, ptr %1692, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #7
  br label %1717

1693:                                             ; preds = %1638
  %1694 = landingpad { ptr, i32 }
          cleanup
  %1695 = extractvalue { ptr, i32 } %1694, 0
  store ptr %1695, ptr %35, align 8
  %1696 = extractvalue { ptr, i32 } %1694, 1
  store i32 %1696, ptr %36, align 4
  br label %1716

1697:                                             ; preds = %1643
  %1698 = landingpad { ptr, i32 }
          cleanup
  %1699 = extractvalue { ptr, i32 } %1698, 0
  store ptr %1699, ptr %35, align 8
  %1700 = extractvalue { ptr, i32 } %1698, 1
  store i32 %1700, ptr %36, align 4
  br label %1715

1701:                                             ; preds = %1653
  %1702 = landingpad { ptr, i32 }
          cleanup
  %1703 = extractvalue { ptr, i32 } %1702, 0
  store ptr %1703, ptr %35, align 8
  %1704 = extractvalue { ptr, i32 } %1702, 1
  store i32 %1704, ptr %36, align 4
  br label %1714

1705:                                             ; preds = %1665
  %1706 = landingpad { ptr, i32 }
          cleanup
  %1707 = extractvalue { ptr, i32 } %1706, 0
  store ptr %1707, ptr %35, align 8
  %1708 = extractvalue { ptr, i32 } %1706, 1
  store i32 %1708, ptr %36, align 4
  br label %1713

1709:                                             ; preds = %1676
  %1710 = landingpad { ptr, i32 }
          cleanup
  %1711 = extractvalue { ptr, i32 } %1710, 0
  store ptr %1711, ptr %35, align 8
  %1712 = extractvalue { ptr, i32 } %1710, 1
  store i32 %1712, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #7
  br label %1713

1713:                                             ; preds = %1709, %1705
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #7
  br label %1714

1714:                                             ; preds = %1713, %1701
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #7
  br label %1715

1715:                                             ; preds = %1714, %1697
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #7
  br label %1716

1716:                                             ; preds = %1715, %1693
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #7
  br label %1775

1717:                                             ; preds = %1688, %1633, %1628
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #7
  %1718 = load i32, ptr %61, align 4, !tbaa !12
  %1719 = sext i32 %1718 to i64
  store i64 %1719, ptr %143, align 8, !tbaa !14
  %1720 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %143)
          to label %1721 unwind label %1758

1721:                                             ; preds = %1717
  %1722 = load i32, ptr %62, align 4, !tbaa !12
  %1723 = sext i32 %1722 to i64
  %1724 = getelementptr inbounds double, ptr %1720, i64 %1723
  %1725 = load double, ptr %1724, align 8, !tbaa !10
  %1726 = call double @llvm.fabs.f64(double %1725)
  %1727 = load double, ptr %52, align 8, !tbaa !10
  %1728 = fadd double %1727, %1726
  store double %1728, ptr %52, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #7
  %1729 = load i32, ptr %61, align 4, !tbaa !12
  %1730 = sext i32 %1729 to i64
  store i64 %1730, ptr %144, align 8, !tbaa !14
  %1731 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1732 unwind label %1762

1732:                                             ; preds = %1721
  %1733 = load i32, ptr %62, align 4, !tbaa !12
  %1734 = sext i32 %1733 to i64
  %1735 = getelementptr inbounds double, ptr %1731, i64 %1734
  %1736 = load double, ptr %1735, align 8, !tbaa !10
  %1737 = call double @llvm.fabs.f64(double %1736)
  %1738 = load double, ptr %53, align 8, !tbaa !10
  %1739 = fadd double %1738, %1737
  store double %1739, ptr %53, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #7
  %1740 = load i32, ptr %61, align 4, !tbaa !12
  %1741 = sext i32 %1740 to i64
  store i64 %1741, ptr %145, align 8, !tbaa !14
  %1742 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %145)
          to label %1743 unwind label %1766

1743:                                             ; preds = %1732
  %1744 = load i32, ptr %62, align 4, !tbaa !12
  %1745 = sext i32 %1744 to i64
  %1746 = getelementptr inbounds double, ptr %1742, i64 %1745
  %1747 = load double, ptr %1746, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #7
  %1748 = load i32, ptr %61, align 4, !tbaa !12
  %1749 = sext i32 %1748 to i64
  store i64 %1749, ptr %146, align 8, !tbaa !14
  %1750 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %146)
          to label %1751 unwind label %1770

1751:                                             ; preds = %1743
  %1752 = load i32, ptr %62, align 4, !tbaa !12
  %1753 = sext i32 %1752 to i64
  %1754 = getelementptr inbounds double, ptr %1750, i64 %1753
  store double %1747, ptr %1754, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #7
  br label %1755

1755:                                             ; preds = %1751
  %1756 = load i32, ptr %62, align 4, !tbaa !12
  %1757 = add nsw i32 %1756, 1
  store i32 %1757, ptr %62, align 4, !tbaa !12
  br label %433, !llvm.loop !35

1758:                                             ; preds = %1717
  %1759 = landingpad { ptr, i32 }
          cleanup
  %1760 = extractvalue { ptr, i32 } %1759, 0
  store ptr %1760, ptr %35, align 8
  %1761 = extractvalue { ptr, i32 } %1759, 1
  store i32 %1761, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #7
  br label %1775

1762:                                             ; preds = %1721
  %1763 = landingpad { ptr, i32 }
          cleanup
  %1764 = extractvalue { ptr, i32 } %1763, 0
  store ptr %1764, ptr %35, align 8
  %1765 = extractvalue { ptr, i32 } %1763, 1
  store i32 %1765, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #7
  br label %1775

1766:                                             ; preds = %1732
  %1767 = landingpad { ptr, i32 }
          cleanup
  %1768 = extractvalue { ptr, i32 } %1767, 0
  store ptr %1768, ptr %35, align 8
  %1769 = extractvalue { ptr, i32 } %1767, 1
  store i32 %1769, ptr %36, align 4
  br label %1774

1770:                                             ; preds = %1743
  %1771 = landingpad { ptr, i32 }
          cleanup
  %1772 = extractvalue { ptr, i32 } %1771, 0
  store ptr %1772, ptr %35, align 8
  %1773 = extractvalue { ptr, i32 } %1771, 1
  store i32 %1773, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #7
  br label %1774

1774:                                             ; preds = %1770, %1766
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #7
  br label %1775

1775:                                             ; preds = %1774, %1762, %1758, %1716, %1627, %1553, %1479, %1420, %1354, %1209, %1143, %998, %877, %800, %746, %619, %565
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %1811

1776:                                             ; preds = %438
  %1777 = load double, ptr %52, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #7
  %1778 = load i32, ptr %61, align 4, !tbaa !12
  %1779 = sub nsw i32 %1778, 1
  %1780 = sext i32 %1779 to i64
  store i64 %1780, ptr %147, align 8, !tbaa !14
  %1781 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(8) %147)
          to label %1782 unwind label %1799

1782:                                             ; preds = %1776
  store double %1777, ptr %1781, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #7
  %1783 = load double, ptr %53, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #7
  %1784 = load i32, ptr %61, align 4, !tbaa !12
  %1785 = sub nsw i32 %1784, 1
  %1786 = sext i32 %1785 to i64
  store i64 %1786, ptr %148, align 8, !tbaa !14
  %1787 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(8) %148)
          to label %1788 unwind label %1803

1788:                                             ; preds = %1782
  store double %1783, ptr %1787, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #7
  %1789 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %1790 unwind label %1807

1790:                                             ; preds = %1788
  %1791 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %57)
          to label %1792 unwind label %1807

1792:                                             ; preds = %1790
  %1793 = fsub double %1789, %1791
  %1794 = invoke noundef double @_ZSt3absd(double noundef %1793)
          to label %1795 unwind label %1807

1795:                                             ; preds = %1792
  store double %1794, ptr %54, align 8, !tbaa !10
  br label %1796

1796:                                             ; preds = %1795
  %1797 = load i32, ptr %61, align 4, !tbaa !12
  %1798 = add nsw i32 %1797, 1
  store i32 %1798, ptr %61, align 4, !tbaa !12
  br label %426, !llvm.loop !36

1799:                                             ; preds = %1776
  %1800 = landingpad { ptr, i32 }
          cleanup
  %1801 = extractvalue { ptr, i32 } %1800, 0
  store ptr %1801, ptr %35, align 8
  %1802 = extractvalue { ptr, i32 } %1800, 1
  store i32 %1802, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #7
  br label %1811

1803:                                             ; preds = %1782
  %1804 = landingpad { ptr, i32 }
          cleanup
  %1805 = extractvalue { ptr, i32 } %1804, 0
  store ptr %1805, ptr %35, align 8
  %1806 = extractvalue { ptr, i32 } %1804, 1
  store i32 %1806, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #7
  br label %1811

1807:                                             ; preds = %1792, %1790, %1788
  %1808 = landingpad { ptr, i32 }
          cleanup
  %1809 = extractvalue { ptr, i32 } %1808, 0
  store ptr %1809, ptr %35, align 8
  %1810 = extractvalue { ptr, i32 } %1808, 1
  store i32 %1810, ptr %36, align 4
  br label %1811

1811:                                             ; preds = %1807, %1803, %1799, %1775
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  br label %1909

1812:                                             ; preds = %431
  %1813 = load i32, ptr %51, align 4, !tbaa !12
  %1814 = add nsw i32 %1813, 1
  store i32 %1814, ptr %51, align 4, !tbaa !12
  %1815 = load double, ptr %54, align 8, !tbaa !10
  %1816 = load double, ptr %19, align 8, !tbaa !10
  %1817 = fcmp olt double %1815, %1816
  br i1 %1817, label %1818, label %1819

1818:                                             ; preds = %1812
  store i32 8, ptr %60, align 4
  br label %1823

1819:                                             ; preds = %1812
  br label %1820

1820:                                             ; preds = %1819
  %1821 = load i32, ptr %59, align 4, !tbaa !12
  %1822 = add nsw i32 %1821, 1
  store i32 %1822, ptr %59, align 4, !tbaa !12
  br label %412, !llvm.loop !37

1823:                                             ; preds = %1818, %416
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  br label %1824

1824:                                             ; preds = %1823
  %1825 = load i8, ptr %15, align 1, !tbaa !9
  %1826 = zext i8 %1825 to i32
  %1827 = and i32 %1826, 1
  %1828 = icmp ne i32 %1827, 0
  br i1 %1828, label %1829, label %1843

1829:                                             ; preds = %1824
  %1830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.8)
          to label %1831 unwind label %1839

1831:                                             ; preds = %1829
  %1832 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1830, ptr noundef @_ZSt10scientificRSt8ios_base)
          to label %1833 unwind label %1839

1833:                                             ; preds = %1831
  %1834 = load i32, ptr %51, align 4, !tbaa !12
  %1835 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1832, i32 noundef %1834)
          to label %1836 unwind label %1839

1836:                                             ; preds = %1833
  %1837 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1835, ptr noundef @.str.3)
          to label %1838 unwind label %1839

1838:                                             ; preds = %1836
  br label %1843

1839:                                             ; preds = %1854, %1851, %1849, %1847, %1836, %1833, %1831, %1829
  %1840 = landingpad { ptr, i32 }
          cleanup
  %1841 = extractvalue { ptr, i32 } %1840, 0
  store ptr %1841, ptr %35, align 8
  %1842 = extractvalue { ptr, i32 } %1840, 1
  store i32 %1842, ptr %36, align 4
  br label %1909

1843:                                             ; preds = %1838, %1824
  %1844 = load i32, ptr %51, align 4, !tbaa !12
  %1845 = load i32, ptr %20, align 4, !tbaa !12
  %1846 = icmp eq i32 %1844, %1845
  br i1 %1846, label %1847, label %1857

1847:                                             ; preds = %1843
  %1848 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.9)
          to label %1849 unwind label %1839

1849:                                             ; preds = %1847
  %1850 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1848, ptr noundef @_ZSt10scientificRSt8ios_base)
          to label %1851 unwind label %1839

1851:                                             ; preds = %1849
  %1852 = load i32, ptr %20, align 4, !tbaa !12
  %1853 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1850, i32 noundef %1852)
          to label %1854 unwind label %1839

1854:                                             ; preds = %1851
  %1855 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1853, ptr noundef @.str.5)
          to label %1856 unwind label %1839

1856:                                             ; preds = %1854
  br label %1857

1857:                                             ; preds = %1856, %1843
  %1858 = load i8, ptr %15, align 1, !tbaa !9
  %1859 = zext i8 %1858 to i32
  %1860 = and i32 %1859, 8
  %1861 = icmp ne i32 %1860, 0
  br i1 %1861, label %1862, label %1882

1862:                                             ; preds = %1857
  call void @llvm.lifetime.start.p0(i64 1, ptr %150) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %150) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %150)
          to label %1863 unwind label %1868

1863:                                             ; preds = %1862
  call void @llvm.lifetime.start.p0(i64 1, ptr %152) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %152) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %152)
          to label %1864 unwind label %1872

1864:                                             ; preds = %1863
  %1865 = load ptr, ptr %16, align 8, !tbaa !5
  %1866 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP11printMATLABENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %157, ptr noundef %149, ptr noundef %151, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %1865, ptr noundef nonnull align 8 dereferenceable(24) %1866, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %1867 unwind label %1876

1867:                                             ; preds = %1864
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %152) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %152) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %150) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %150) #7
  br label %1882

1868:                                             ; preds = %1862
  %1869 = landingpad { ptr, i32 }
          cleanup
  %1870 = extractvalue { ptr, i32 } %1869, 0
  store ptr %1870, ptr %35, align 8
  %1871 = extractvalue { ptr, i32 } %1869, 1
  store i32 %1871, ptr %36, align 4
  br label %1881

1872:                                             ; preds = %1863
  %1873 = landingpad { ptr, i32 }
          cleanup
  %1874 = extractvalue { ptr, i32 } %1873, 0
  store ptr %1874, ptr %35, align 8
  %1875 = extractvalue { ptr, i32 } %1873, 1
  store i32 %1875, ptr %36, align 4
  br label %1880

1876:                                             ; preds = %1864
  %1877 = landingpad { ptr, i32 }
          cleanup
  %1878 = extractvalue { ptr, i32 } %1877, 0
  store ptr %1878, ptr %35, align 8
  %1879 = extractvalue { ptr, i32 } %1877, 1
  store i32 %1879, ptr %36, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #7
  br label %1880

1880:                                             ; preds = %1876, %1872
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %152) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %152) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #7
  br label %1881

1881:                                             ; preds = %1880, %1868
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %150) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %150) #7
  br label %1909

1882:                                             ; preds = %1867, %1857
  %1883 = load i8, ptr %15, align 1, !tbaa !9
  %1884 = zext i8 %1883 to i32
  %1885 = and i32 %1884, 2
  %1886 = icmp ne i32 %1885, 0
  br i1 %1886, label %1887, label %1907

1887:                                             ; preds = %1882
  call void @llvm.lifetime.start.p0(i64 1, ptr %154) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %154) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %153, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %154)
          to label %1888 unwind label %1893

1888:                                             ; preds = %1887
  call void @llvm.lifetime.start.p0(i64 1, ptr %156) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %156) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %155, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %156)
          to label %1889 unwind label %1897

1889:                                             ; preds = %1888
  %1890 = load ptr, ptr %16, align 8, !tbaa !5
  %1891 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %157, ptr noundef %153, ptr noundef %155, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %1890, ptr noundef nonnull align 8 dereferenceable(24) %1891, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %1892 unwind label %1901

1892:                                             ; preds = %1889
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %156) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %156) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %154) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %154) #7
  br label %1907

1893:                                             ; preds = %1887
  %1894 = landingpad { ptr, i32 }
          cleanup
  %1895 = extractvalue { ptr, i32 } %1894, 0
  store ptr %1895, ptr %35, align 8
  %1896 = extractvalue { ptr, i32 } %1894, 1
  store i32 %1896, ptr %36, align 4
  br label %1906

1897:                                             ; preds = %1888
  %1898 = landingpad { ptr, i32 }
          cleanup
  %1899 = extractvalue { ptr, i32 } %1898, 0
  store ptr %1899, ptr %35, align 8
  %1900 = extractvalue { ptr, i32 } %1898, 1
  store i32 %1900, ptr %36, align 4
  br label %1905

1901:                                             ; preds = %1889
  %1902 = landingpad { ptr, i32 }
          cleanup
  %1903 = extractvalue { ptr, i32 } %1902, 0
  store ptr %1903, ptr %35, align 8
  %1904 = extractvalue { ptr, i32 } %1902, 1
  store i32 %1904, ptr %36, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %155) #7
  br label %1905

1905:                                             ; preds = %1901, %1897
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %156) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %156) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #7
  br label %1906

1906:                                             ; preds = %1905, %1893
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %154) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %154) #7
  br label %1909

1907:                                             ; preds = %1892, %1882
  store i1 true, ptr %29, align 1
  store i32 1, ptr %60, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %57) #7
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #7
  %1908 = load i1, ptr %29, align 1
  br i1 %1908, label %1915, label %1914

1909:                                             ; preds = %1906, %1881, %1839, %1811
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #7
  br label %1910

1910:                                             ; preds = %1909, %421
  call void @llvm.lifetime.end.p0(i64 24, ptr %57) #7
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #7
  br label %1911

1911:                                             ; preds = %1910, %417
  call void @llvm.lifetime.end.p0(i64 24, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #7
  br label %1912

1912:                                             ; preds = %1911, %402, %307, %215
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #7
  br label %1913

1913:                                             ; preds = %1912, %211
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #7
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %1916

1914:                                             ; preds = %1907
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #7
  br label %1915

1915:                                             ; preds = %1914, %1907
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  ret void

1916:                                             ; preds = %1913
  %1917 = load ptr, ptr %35, align 8
  %1918 = load i32, ptr %36, align 4
  %1919 = insertvalue { ptr, i32 } poison, ptr %1917, 0
  %1920 = insertvalue { ptr, i32 } %1919, i32 %1918, 1
  resume { ptr, i32 } %1920
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef, ptr noundef, i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) #2 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!"double", !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!17, !6, i64 176}
!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, !11, i64 240, !11, i64 248, !6, i64 256, !6, i64 264, !11, i64 272}
!18 = !{!"_ZTSN3cda4math10containers6VectorIdEE", !15, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSN3cda4math10containers6MatrixIdEE", !15, i64 0, !15, i64 8, !15, i64 16, !6, i64 24, !6, i64 32}
!20 = !{!"_ZTSN3cda4math10containers6MatrixIbEE", !15, i64 0, !15, i64 8, !15, i64 16, !6, i64 24, !6, i64 32}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !22, i64 0, !15, i64 8, !7, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!23 = !{!17, !6, i64 184}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!17, !6, i64 160}
!27 = !{!17, !6, i64 168}
!28 = distinct !{!28, !25}
!29 = !{!17, !6, i64 232}
!30 = !{!17, !6, i64 192}
!31 = !{!17, !6, i64 208}
!32 = !{!17, !6, i64 224}
!33 = !{!17, !6, i64 216}
!34 = !{!17, !6, i64 200}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}


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

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

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [103 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [77 x i8], align 1

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

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

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

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 void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) 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 nounwind uwtable
declare dso_local void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 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 nounwind uwtable
declare dso_local noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #4

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt10scientificRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #5

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math22differential_equations3EDP11printMATLABENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef, ptr noundef, i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP12solvePOISSONEhhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEEdi(ptr dead_on_unwind noalias writable sret(%"class.cda::math::containers::Matrix") align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, i8 noundef zeroext %2, i8 noundef zeroext %3, i8 noundef zeroext %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(40) %7, double noundef %8, i32 noundef %9) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca %"class.cda::math::containers::Matrix", align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca %"class.cda::math::containers::Vector", align 8
  %33 = alloca i64, align 8
  %34 = alloca %"class.cda::math::containers::Vector", align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = 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 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 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 i64, 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 %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.std::allocator", align 1
  %124 = alloca %"class.std::__cxx11::basic_string", align 8
  %125 = alloca %"class.std::allocator", align 1
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca %"class.std::allocator", align 1
  %128 = alloca %"class.std::__cxx11::basic_string", align 8
  %129 = alloca %"class.std::allocator", align 1
  %130 = tail call noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40) %7)
  %131 = trunc i64 %130 to i32
  %132 = tail call noundef i64 @_ZNK3cda4math10containers6MatrixIdE7columnsEv(ptr noundef nonnull align 8 dereferenceable(40) %7)
  %133 = trunc i64 %132 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  %134 = add i32 %133, -1
  %135 = sext i32 %134 to i64
  store i64 %135, ptr %11, align 8, !tbaa !5
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %11)
  %137 = load double, ptr %136, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  store i64 0, ptr %12, align 8, !tbaa !5
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %12)
  %139 = load double, ptr %138, align 8, !tbaa !9
  %140 = fsub double %137, %139
  %141 = sitofp i32 %134 to double
  %142 = fdiv double %140, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  %143 = add i32 %131, -1
  %144 = sext i32 %143 to i64
  store i64 %144, ptr %13, align 8, !tbaa !5
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %13)
  %146 = load double, ptr %145, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  store i64 0, ptr %14, align 8, !tbaa !5
  %147 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %14)
  %148 = load double, ptr %147, align 8, !tbaa !9
  %149 = fsub double %146, %148
  %150 = sitofp i32 %143 to double
  %151 = fdiv double %149, %150
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %sext = shl i64 %130, 32
  %152 = ashr exact i64 %sext, 32
  store i64 %152, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %sext319 = shl i64 %132, 32
  %153 = ashr exact i64 %sext319, 32
  store i64 %153, ptr %16, align 8, !tbaa !5
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #8
  store i64 %152, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  store i64 %153, ptr %19, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19)
          to label %154 unwind label %190

154:                                              ; preds = %10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  %155 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(40) %7)
          to label %156 unwind label %192

156:                                              ; preds = %154
  %157 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %155)
          to label %.preheader374 unwind label %192

.preheader374:                                    ; preds = %156
  %158 = icmp sgt i32 %133, 0
  br i1 %158, label %.lr.ph, label %.preheader373

.lr.ph:                                           ; preds = %.preheader374
  %159 = zext i8 %2 to i32
  %160 = and i32 %159, 4
  %.not363 = icmp eq i32 %160, 0
  %161 = getelementptr inbounds i8, ptr %1, i64 176
  %162 = and i32 %159, 8
  %.not364 = icmp eq i32 %162, 0
  %163 = getelementptr inbounds i8, ptr %1, i64 184
  br i1 %.not363, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph
  br i1 %.not364, label %.preheader373, label %.lr.ph.split.us.split.preheader

.lr.ph.split.us.split.preheader:                  ; preds = %.lr.ph.split.us
  %wide.trip.count548 = and i64 %132, 2147483647
  br label %.lr.ph.split.us.split

.lr.ph.split.us.split:                            ; preds = %.lr.ph.split.us.split.preheader, %170
  %indvars.iv545 = phi i64 [ 0, %.lr.ph.split.us.split.preheader ], [ %indvars.iv.next546, %170 ]
  %164 = load ptr, ptr %163, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  store i64 %indvars.iv545, ptr %23, align 8, !tbaa !5
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %23)
  %166 = load double, ptr %165, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  store i64 %144, ptr %24, align 8, !tbaa !5
  %167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %168 = load double, ptr %167, align 8, !tbaa !9
  %169 = invoke noundef double %164(double noundef %166, double noundef %168)
          to label %170 unwind label %.split.us

170:                                              ; preds = %.lr.ph.split.us.split
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  store i64 %144, ptr %25, align 8, !tbaa !5
  %171 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %172 = getelementptr inbounds double, ptr %171, i64 %indvars.iv545
  store double %169, ptr %172, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  %indvars.iv.next546 = add nuw nsw i64 %indvars.iv545, 1
  %exitcond549.not = icmp eq i64 %indvars.iv.next546, %wide.trip.count548
  br i1 %exitcond549.not, label %.preheader373, label %.lr.ph.split.us.split, !llvm.loop !19

.split.us:                                        ; preds = %.lr.ph.split.us.split
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %215

.lr.ph.split:                                     ; preds = %.lr.ph
  %wide.trip.count543 = and i64 %132, 2147483647
  br i1 %.not364, label %.lr.ph.split.split.us, label %.lr.ph.split.split

.lr.ph.split.split.us:                            ; preds = %.lr.ph.split, %180
  %indvars.iv540 = phi i64 [ %indvars.iv.next541, %180 ], [ 0, %.lr.ph.split ]
  %174 = load ptr, ptr %161, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  store i64 %indvars.iv540, ptr %20, align 8, !tbaa !5
  %175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %176 = load double, ptr %175, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  store i64 0, ptr %21, align 8, !tbaa !5
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %178 = load double, ptr %177, align 8, !tbaa !9
  %179 = invoke noundef double %174(double noundef %176, double noundef %178)
          to label %180 unwind label %.split421.us

180:                                              ; preds = %.lr.ph.split.split.us
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  store i64 0, ptr %22, align 8, !tbaa !5
  %181 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %182 = getelementptr inbounds double, ptr %181, i64 %indvars.iv540
  store double %179, ptr %182, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  %indvars.iv.next541 = add nuw nsw i64 %indvars.iv540, 1
  %exitcond544.not = icmp eq i64 %indvars.iv.next541, %wide.trip.count543
  br i1 %exitcond544.not, label %.preheader373, label %.lr.ph.split.split.us, !llvm.loop !19

.split421.us:                                     ; preds = %.lr.ph.split.split.us
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %210

.preheader373:                                    ; preds = %211, %180, %170, %.lr.ph.split.us, %.preheader374
  %184 = icmp sgt i32 %131, 0
  br i1 %184, label %.lr.ph424, label %._crit_edge

.lr.ph424:                                        ; preds = %.preheader373
  %185 = zext i8 %2 to i32
  %186 = and i32 %185, 1
  %.not359 = icmp eq i32 %186, 0
  %187 = getelementptr inbounds i8, ptr %1, i64 160
  %188 = and i32 %185, 2
  %.not360 = icmp eq i32 %188, 0
  %189 = getelementptr inbounds i8, ptr %1, i64 168
  %wide.trip.count553 = and i64 %130, 2147483647
  br label %217

190:                                              ; preds = %10
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #8
  br label %731

192:                                              ; preds = %156, %154
  %193 = landingpad { ptr, i32 }
          cleanup
  br label %730

.lr.ph.split.split:                               ; preds = %.lr.ph.split, %211
  %indvars.iv = phi i64 [ %indvars.iv.next, %211 ], [ 0, %.lr.ph.split ]
  %194 = load ptr, ptr %161, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  store i64 %indvars.iv, ptr %20, align 8, !tbaa !5
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %196 = load double, ptr %195, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #8
  store i64 0, ptr %21, align 8, !tbaa !5
  %197 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %198 = load double, ptr %197, align 8, !tbaa !9
  %199 = invoke noundef double %194(double noundef %196, double noundef %198)
          to label %200 unwind label %.split421

200:                                              ; preds = %.lr.ph.split.split
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  store i64 0, ptr %22, align 8, !tbaa !5
  %201 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %202 = getelementptr inbounds double, ptr %201, i64 %indvars.iv
  store double %199, ptr %202, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  %203 = load ptr, ptr %163, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  store i64 %indvars.iv, ptr %23, align 8, !tbaa !5
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %23)
  %205 = load double, ptr %204, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  store i64 %144, ptr %24, align 8, !tbaa !5
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %207 = load double, ptr %206, align 8, !tbaa !9
  %208 = invoke noundef double %203(double noundef %205, double noundef %207)
          to label %211 unwind label %.split

.split421:                                        ; preds = %.lr.ph.split.split
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %210

210:                                              ; preds = %.split421.us, %.split421
  %.us-phi422 = phi { ptr, i32 } [ %209, %.split421 ], [ %183, %.split421.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %730

211:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #8
  store i64 %144, ptr %25, align 8, !tbaa !5
  %212 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %213 = getelementptr inbounds double, ptr %212, i64 %indvars.iv
  store double %208, ptr %213, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count543
  br i1 %exitcond.not, label %.preheader373, label %.lr.ph.split.split, !llvm.loop !19

.split:                                           ; preds = %200
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %215

215:                                              ; preds = %.split.us, %.split
  %.us-phi = phi { ptr, i32 } [ %214, %.split ], [ %173, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  br label %730

._crit_edge:                                      ; preds = %242, %.preheader373
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #8
  %sext320 = add i64 %sext319, -8589934592
  %216 = ashr exact i64 %sext320, 32
  store i64 %216, ptr %33, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %243 unwind label %668

217:                                              ; preds = %.lr.ph424, %242
  %indvars.iv550 = phi i64 [ 0, %.lr.ph424 ], [ %indvars.iv.next551, %242 ]
  br i1 %.not359, label %229, label %218

218:                                              ; preds = %217
  %219 = load ptr, ptr %187, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  store i64 0, ptr %26, align 8, !tbaa !5
  %220 = 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)
  %221 = load double, ptr %220, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  store i64 %indvars.iv550, ptr %27, align 8, !tbaa !5
  %222 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %223 = load double, ptr %222, align 8, !tbaa !9
  %224 = invoke noundef double %219(double noundef %221, double noundef %223)
          to label %225 unwind label %227

225:                                              ; preds = %218
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #8
  store i64 %indvars.iv550, ptr %28, align 8, !tbaa !5
  %226 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %28)
  store double %224, ptr %226, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  br label %229

227:                                              ; preds = %218
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  br label %730

229:                                              ; preds = %225, %217
  br i1 %.not360, label %242, label %230

230:                                              ; preds = %229
  %231 = load ptr, ptr %189, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  store i64 %135, ptr %29, align 8, !tbaa !5
  %232 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %29)
  %233 = load double, ptr %232, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  store i64 %indvars.iv550, ptr %30, align 8, !tbaa !5
  %234 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %30)
  %235 = load double, ptr %234, align 8, !tbaa !9
  %236 = invoke noundef double %231(double noundef %233, double noundef %235)
          to label %237 unwind label %240

237:                                              ; preds = %230
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #8
  store i64 %indvars.iv550, ptr %31, align 8, !tbaa !5
  %238 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %31)
  %239 = getelementptr inbounds double, ptr %238, i64 %135
  store double %236, ptr %239, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  br label %242

240:                                              ; preds = %230
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  br label %730

242:                                              ; preds = %229, %237
  %indvars.iv.next551 = add nuw nsw i64 %indvars.iv550, 1
  %exitcond554.not = icmp eq i64 %indvars.iv.next551, %wide.trip.count553
  br i1 %exitcond554.not, label %._crit_edge, label %217, !llvm.loop !24

243:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  store i64 %216, ptr %35, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKm(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %244 unwind label %670

244:                                              ; preds = %243
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  %245 = icmp sgt i32 %9, 0
  br i1 %245, label %.preheader372.lr.ph, label %._crit_edge483

.preheader372.lr.ph:                              ; preds = %244
  %246 = icmp sgt i32 %131, 2
  %247 = zext i8 %2 to i32
  %248 = and i32 %247, 16
  %.not328 = icmp eq i32 %248, 0
  %249 = fmul double %142, %142
  %250 = getelementptr inbounds i8, ptr %1, i64 160
  %251 = getelementptr inbounds i8, ptr %1, i64 232
  %252 = fmul double %151, %151
  %253 = fmul double %252, 2.000000e+00
  %254 = fneg double %252
  %255 = fmul double %142, %254
  %256 = fmul double %142, %255
  %257 = call double @llvm.fmuladd.f64(double %151, double %151, double %249)
  %258 = fmul double %257, 2.000000e+00
  %259 = zext i8 %3 to i32
  %260 = and i32 %259, 1
  %.not331 = icmp eq i32 %260, 0
  %261 = getelementptr inbounds i8, ptr %1, i64 192
  %262 = and i32 %247, 64
  %.not332 = icmp eq i32 %262, 0
  %263 = getelementptr inbounds i8, ptr %1, i64 176
  %264 = fmul double %249, 2.000000e+00
  %265 = and i32 %259, 4
  %.not335 = icmp eq i32 %265, 0
  %266 = getelementptr inbounds i8, ptr %1, i64 208
  %267 = and i32 %259, 16
  %.not336 = icmp eq i32 %267, 0
  %268 = getelementptr inbounds i8, ptr %1, i64 224
  %.not337 = icmp sgt i8 %2, -1
  %sext338 = add i64 %sext, -8589934592
  %269 = ashr exact i64 %sext338, 32
  %270 = getelementptr inbounds i8, ptr %1, i64 184
  %271 = and i32 %259, 8
  %.not341 = icmp eq i32 %271, 0
  %272 = getelementptr inbounds i8, ptr %1, i64 216
  %273 = and i32 %247, 32
  %.not343 = icmp eq i32 %273, 0
  %274 = getelementptr inbounds i8, ptr %1, i64 168
  %275 = and i32 %259, 2
  %.not346 = icmp eq i32 %275, 0
  %276 = getelementptr inbounds i8, ptr %1, i64 200
  %277 = and i32 %247, 80
  %brmerge.not = icmp eq i32 %277, 80
  %278 = and i32 %247, 96
  %brmerge369.not = icmp eq i32 %278, 96
  %sext353 = add i64 %sext319, -12884901888
  %279 = ashr exact i64 %sext353, 29
  %brmerge370 = or i1 %.not337, %.not328
  %sext355 = add i64 %sext, -12884901888
  %280 = ashr exact i64 %sext355, 32
  %brmerge371 = or i1 %.not337, %.not343
  br i1 %246, label %.preheader372.lr.ph.split.us, label %._crit_edge483

.preheader372.lr.ph.split.us:                     ; preds = %.preheader372.lr.ph
  %281 = icmp sgt i32 %133, 2
  %wide.trip.count568 = zext i32 %143 to i64
  br i1 %281, label %.preheader372.us.us.preheader, label %.preheader372.us

.preheader372.us.us.preheader:                    ; preds = %.preheader372.lr.ph.split.us
  %wide.trip.count563 = zext i32 %134 to i64
  br label %.preheader372.us.us

.preheader372.us.us:                              ; preds = %.preheader372.us.us.preheader, %._crit_edge432.split.us.us.us
  %.0289482.us.us = phi i32 [ %637, %._crit_edge432.split.us.us.us ], [ 0, %.preheader372.us.us.preheader ]
  br label %.preheader.us.us.us

.preheader.us.us.us:                              ; preds = %285, %.preheader372.us.us
  %indvars.iv565 = phi i64 [ %indvars.iv.next566, %285 ], [ 1, %.preheader372.us.us ]
  %indvars.iv.next566 = add nuw nsw i64 %indvars.iv565, 1
  %282 = add nsw i64 %indvars.iv565, -1
  br label %288

283:                                              ; preds = %._crit_edge429.us.us.us
  %284 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %285 unwind label %.split435.us.split.us.split.us

285:                                              ; preds = %283
  %286 = fsub double %636, %284
  %287 = call noundef double @_ZSt3absd(double noundef %286)
  %exitcond569.not = icmp eq i64 %indvars.iv.next566, %wide.trip.count568
  br i1 %exitcond569.not, label %._crit_edge432.split.us.us.us, label %.preheader.us.us.us, !llvm.loop !25

288:                                              ; preds = %616, %.preheader.us.us.us
  %indvars.iv560 = phi i64 [ %indvars.iv.next561, %616 ], [ 1, %.preheader.us.us.us ]
  %289 = phi <2 x double> [ %626, %616 ], [ zeroinitializer, %.preheader.us.us.us ]
  br i1 %.not328, label %319, label %290

290:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  store i64 %indvars.iv.next566, ptr %36, align 8, !tbaa !5
  %291 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %36)
  %292 = load double, ptr %291, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #8
  store i64 %282, ptr %37, align 8, !tbaa !5
  %293 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %37)
  %294 = load double, ptr %293, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #8
  store i64 %indvars.iv565, ptr %38, align 8, !tbaa !5
  %295 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %38)
  %296 = getelementptr inbounds i8, ptr %295, i64 8
  %297 = load double, ptr %296, align 8, !tbaa !9
  %298 = load ptr, ptr %250, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #8
  store i64 0, 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) #8
  store i64 %indvars.iv565, ptr %40, align 8, !tbaa !5
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %302 = load double, ptr %301, align 8, !tbaa !9
  %303 = invoke noundef double %298(double noundef %300, double noundef %302)
          to label %304 unwind label %.split439.us.split.us.split.us

304:                                              ; preds = %290
  %305 = load ptr, ptr %251, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  store i64 0, ptr %41, align 8, !tbaa !5
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %307 = load double, ptr %306, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #8
  store i64 %indvars.iv565, ptr %42, align 8, !tbaa !5
  %308 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %42)
  %309 = load double, ptr %308, align 8, !tbaa !9
  %310 = invoke noundef double %305(double noundef %307, double noundef %309)
          to label %311 unwind label %.split442.us.split.us.split.us

311:                                              ; preds = %304
  %312 = fadd double %292, %294
  %313 = call double @llvm.fmuladd.f64(double %142, double %303, double %297)
  %314 = fmul double %253, %313
  %315 = call double @llvm.fmuladd.f64(double %249, double %312, double %314)
  %316 = call double @llvm.fmuladd.f64(double %256, double %310, double %315)
  %317 = fdiv double %316, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #8
  store i64 %indvars.iv565, ptr %43, align 8, !tbaa !5
  %318 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %43)
  store double %317, ptr %318, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  br label %319

319:                                              ; preds = %311, %288
  br i1 %.not331, label %332, label %320

320:                                              ; preds = %319
  %321 = load ptr, ptr %261, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  store i64 %indvars.iv565, ptr %44, align 8, !tbaa !5
  %322 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %323 = getelementptr inbounds i8, ptr %322, i64 8
  %324 = load double, ptr %323, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #8
  store i64 %282, ptr %45, align 8, !tbaa !5
  %325 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %45)
  %326 = load double, ptr %325, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #8
  store i64 %indvars.iv.next566, ptr %46, align 8, !tbaa !5
  %327 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %328 = load double, ptr %327, align 8, !tbaa !9
  %329 = invoke noundef double %321(double noundef %324, double noundef %326, double noundef %328)
          to label %330 unwind label %.split445.us.split.us.split.us

330:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #8
  store i64 %indvars.iv565, ptr %47, align 8, !tbaa !5
  %331 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %47)
  store double %329, ptr %331, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br label %332

332:                                              ; preds = %330, %319
  br i1 %.not332, label %367, label %333

333:                                              ; preds = %332
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #8
  store i64 1, ptr %48, align 8, !tbaa !5
  %334 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %335 = getelementptr inbounds double, ptr %334, i64 %indvars.iv560
  %336 = load double, ptr %335, align 8, !tbaa !9
  %337 = load ptr, ptr %263, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #8
  store i64 %indvars.iv560, ptr %49, align 8, !tbaa !5
  %338 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %49)
  %339 = load double, ptr %338, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #8
  store i64 0, ptr %50, align 8, !tbaa !5
  %340 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %50)
  %341 = load double, ptr %340, align 8, !tbaa !9
  %342 = invoke noundef double %337(double noundef %339, double noundef %341)
          to label %343 unwind label %.split448.us.split.us.split.us

343:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #8
  store i64 0, ptr %51, align 8, !tbaa !5
  %344 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %51)
  %345 = getelementptr inbounds double, ptr %344, i64 %indvars.iv560
  %346 = getelementptr inbounds i8, ptr %345, i64 8
  %347 = load double, ptr %346, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #8
  store i64 0, ptr %52, align 8, !tbaa !5
  %348 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %52)
  %349 = getelementptr double, ptr %348, i64 %indvars.iv560
  %350 = getelementptr i8, ptr %349, i64 -8
  %351 = load double, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %251, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  store i64 %indvars.iv560, ptr %53, align 8, !tbaa !5
  %353 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %53)
  %354 = load double, ptr %353, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #8
  store i64 0, ptr %54, align 8, !tbaa !5
  %355 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %54)
  %356 = load double, ptr %355, align 8, !tbaa !9
  %357 = invoke noundef double %352(double noundef %354, double noundef %356)
          to label %358 unwind label %.split451.us.split.us.split.us

358:                                              ; preds = %343
  %359 = call double @llvm.fmuladd.f64(double %151, double %342, double %336)
  %360 = fadd double %347, %351
  %361 = fmul double %252, %360
  %362 = call double @llvm.fmuladd.f64(double %264, double %359, double %361)
  %363 = call double @llvm.fmuladd.f64(double %256, double %357, double %362)
  %364 = fdiv double %363, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #8
  store i64 0, ptr %55, align 8, !tbaa !5
  %365 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %55)
  %366 = getelementptr inbounds double, ptr %365, i64 %indvars.iv560
  store double %364, ptr %366, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  br label %367

367:                                              ; preds = %358, %332
  br i1 %.not335, label %385, label %368

368:                                              ; preds = %367
  %369 = load ptr, ptr %266, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  store i64 0, ptr %56, align 8, !tbaa !5
  %370 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %56)
  %371 = getelementptr double, ptr %370, i64 %indvars.iv560
  %372 = getelementptr i8, ptr %371, i64 -8
  %373 = load double, ptr %372, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #8
  store i64 0, ptr %57, align 8, !tbaa !5
  %374 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %57)
  %375 = getelementptr inbounds double, ptr %374, i64 %indvars.iv560
  %376 = getelementptr inbounds i8, ptr %375, i64 8
  %377 = load double, ptr %376, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #8
  store i64 1, ptr %58, align 8, !tbaa !5
  %378 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %58)
  %379 = getelementptr inbounds double, ptr %378, i64 %indvars.iv560
  %380 = load double, ptr %379, align 8, !tbaa !9
  %381 = invoke noundef double %369(double noundef %373, double noundef %377, double noundef %380)
          to label %382 unwind label %.split454.us.split.us.split.us

382:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #8
  store i64 0, ptr %59, align 8, !tbaa !5
  %383 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %384 = getelementptr inbounds double, ptr %383, i64 %indvars.iv560
  store double %381, ptr %384, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  br label %385

385:                                              ; preds = %382, %367
  br i1 %.not336, label %406, label %386

386:                                              ; preds = %385
  %387 = load ptr, ptr %268, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #8
  store i64 %indvars.iv565, ptr %60, align 8, !tbaa !5
  %388 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %60)
  %389 = getelementptr double, ptr %388, i64 %indvars.iv560
  %390 = getelementptr i8, ptr %389, i64 -8
  %391 = load double, ptr %390, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #8
  store i64 %indvars.iv565, ptr %61, align 8, !tbaa !5
  %392 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %61)
  %393 = getelementptr inbounds double, ptr %392, i64 %indvars.iv560
  %394 = getelementptr inbounds i8, ptr %393, i64 8
  %395 = load double, ptr %394, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  store i64 %282, ptr %62, align 8, !tbaa !5
  %396 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %62)
  %397 = getelementptr inbounds double, ptr %396, i64 %indvars.iv560
  %398 = load double, ptr %397, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #8
  store i64 %indvars.iv.next566, ptr %63, align 8, !tbaa !5
  %399 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %400 = getelementptr inbounds double, ptr %399, i64 %indvars.iv560
  %401 = load double, ptr %400, align 8, !tbaa !9
  %402 = invoke noundef double %387(double noundef %391, double noundef %395, double noundef %398, double noundef %401)
          to label %403 unwind label %.split457.us.split.us.split.us

403:                                              ; preds = %386
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #8
  store i64 %indvars.iv565, ptr %64, align 8, !tbaa !5
  %404 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %64)
  %405 = getelementptr inbounds double, ptr %404, i64 %indvars.iv560
  store double %402, ptr %405, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  br label %436

406:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #8
  store i64 %indvars.iv.next566, ptr %65, align 8, !tbaa !5
  %407 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %65)
  %408 = getelementptr inbounds double, ptr %407, i64 %indvars.iv560
  %409 = load double, ptr %408, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #8
  store i64 %282, ptr %66, align 8, !tbaa !5
  %410 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %66)
  %411 = getelementptr inbounds double, ptr %410, i64 %indvars.iv560
  %412 = load double, ptr %411, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #8
  store i64 %indvars.iv565, ptr %67, align 8, !tbaa !5
  %413 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %67)
  %414 = getelementptr inbounds double, ptr %413, i64 %indvars.iv560
  %415 = getelementptr inbounds i8, ptr %414, i64 8
  %416 = load double, ptr %415, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #8
  store i64 %indvars.iv565, ptr %68, align 8, !tbaa !5
  %417 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %68)
  %418 = getelementptr double, ptr %417, i64 %indvars.iv560
  %419 = getelementptr i8, ptr %418, i64 -8
  %420 = load double, ptr %419, align 8, !tbaa !9
  %421 = load ptr, ptr %251, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #8
  store i64 %indvars.iv560, ptr %69, align 8, !tbaa !5
  %422 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %69)
  %423 = load double, ptr %422, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #8
  store i64 %indvars.iv565, ptr %70, align 8, !tbaa !5
  %424 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %70)
  %425 = load double, ptr %424, align 8, !tbaa !9
  %426 = invoke noundef double %421(double noundef %423, double noundef %425)
          to label %427 unwind label %.split460.us.split.us.split.us

427:                                              ; preds = %406
  %428 = fadd double %409, %412
  %429 = fadd double %416, %420
  %430 = fmul double %252, %429
  %431 = call double @llvm.fmuladd.f64(double %249, double %428, double %430)
  %432 = call double @llvm.fmuladd.f64(double %256, double %426, double %431)
  %433 = fdiv double %432, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  store i64 %indvars.iv565, ptr %71, align 8, !tbaa !5
  %434 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
  %435 = getelementptr inbounds double, ptr %434, i64 %indvars.iv560
  store double %433, ptr %435, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  br label %436

436:                                              ; preds = %427, %403
  br i1 %.not337, label %471, label %437

437:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #8
  store i64 %269, ptr %72, align 8, !tbaa !5
  %438 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %72)
  %439 = getelementptr inbounds double, ptr %438, i64 %indvars.iv560
  %440 = load double, ptr %439, align 8, !tbaa !9
  %441 = load ptr, ptr %270, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #8
  store i64 %indvars.iv560, ptr %73, align 8, !tbaa !5
  %442 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %73)
  %443 = load double, ptr %442, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #8
  store i64 %144, ptr %74, align 8, !tbaa !5
  %444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %74)
  %445 = load double, ptr %444, align 8, !tbaa !9
  %446 = invoke noundef double %441(double noundef %443, double noundef %445)
          to label %447 unwind label %.split463.us.split.us.split.us

447:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #8
  store i64 %144, ptr %75, align 8, !tbaa !5
  %448 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %75)
  %449 = getelementptr inbounds double, ptr %448, i64 %indvars.iv560
  %450 = getelementptr inbounds i8, ptr %449, i64 8
  %451 = load double, ptr %450, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #8
  store i64 %144, ptr %76, align 8, !tbaa !5
  %452 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %453 = getelementptr double, ptr %452, i64 %indvars.iv560
  %454 = getelementptr i8, ptr %453, i64 -8
  %455 = load double, ptr %454, align 8, !tbaa !9
  %456 = load ptr, ptr %251, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #8
  store i64 %indvars.iv560, ptr %77, align 8, !tbaa !5
  %457 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %77)
  %458 = load double, ptr %457, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #8
  store i64 %144, ptr %78, align 8, !tbaa !5
  %459 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %78)
  %460 = load double, ptr %459, align 8, !tbaa !9
  %461 = invoke noundef double %456(double noundef %458, double noundef %460)
          to label %462 unwind label %.split466.us.split.us.split.us

462:                                              ; preds = %447
  %463 = call double @llvm.fmuladd.f64(double %151, double %446, double %440)
  %464 = fadd double %451, %455
  %465 = fmul double %252, %464
  %466 = call double @llvm.fmuladd.f64(double %264, double %463, double %465)
  %467 = call double @llvm.fmuladd.f64(double %256, double %461, double %466)
  %468 = fdiv double %467, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #8
  store i64 %144, ptr %79, align 8, !tbaa !5
  %469 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %79)
  %470 = getelementptr inbounds double, ptr %469, i64 %indvars.iv560
  store double %468, ptr %470, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #8
  br label %471

471:                                              ; preds = %462, %436
  br i1 %.not341, label %489, label %472

472:                                              ; preds = %471
  %473 = load ptr, ptr %272, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #8
  store i64 %144, ptr %80, align 8, !tbaa !5
  %474 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %475 = getelementptr double, ptr %474, i64 %indvars.iv560
  %476 = getelementptr i8, ptr %475, i64 -8
  %477 = load double, ptr %476, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #8
  store i64 %144, ptr %81, align 8, !tbaa !5
  %478 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %81)
  %479 = getelementptr inbounds double, ptr %478, i64 %indvars.iv560
  %480 = getelementptr inbounds i8, ptr %479, i64 8
  %481 = load double, ptr %480, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #8
  store i64 %269, ptr %82, align 8, !tbaa !5
  %482 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %82)
  %483 = getelementptr inbounds double, ptr %482, i64 %indvars.iv560
  %484 = load double, ptr %483, align 8, !tbaa !9
  %485 = invoke noundef double %473(double noundef %477, double noundef %481, double noundef %484)
          to label %486 unwind label %.split469.us.split.us.split.us

486:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #8
  store i64 %144, ptr %83, align 8, !tbaa !5
  %487 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %488 = getelementptr inbounds double, ptr %487, i64 %indvars.iv560
  store double %485, ptr %488, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  br label %489

489:                                              ; preds = %486, %471
  br i1 %.not343, label %522, label %490

490:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #8
  store i64 %indvars.iv.next566, ptr %84, align 8, !tbaa !5
  %491 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %84)
  %492 = getelementptr inbounds double, ptr %491, i64 %135
  %493 = load double, ptr %492, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #8
  store i64 %282, ptr %85, align 8, !tbaa !5
  %494 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %85)
  %495 = getelementptr inbounds double, ptr %494, i64 %135
  %496 = load double, ptr %495, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #8
  store i64 %indvars.iv565, ptr %86, align 8, !tbaa !5
  %497 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %86)
  %498 = getelementptr inbounds double, ptr %497, i64 %216
  %499 = load double, ptr %498, align 8, !tbaa !9
  %500 = load ptr, ptr %274, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #8
  store i64 %135, ptr %87, align 8, !tbaa !5
  %501 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %502 = load double, ptr %501, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #8
  store i64 %indvars.iv565, ptr %88, align 8, !tbaa !5
  %503 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %88)
  %504 = load double, ptr %503, align 8, !tbaa !9
  %505 = invoke noundef double %500(double noundef %502, double noundef %504)
          to label %506 unwind label %.split472.us.split.us.split.us

506:                                              ; preds = %490
  %507 = load ptr, ptr %251, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #8
  store i64 %135, ptr %89, align 8, !tbaa !5
  %508 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %509 = load double, ptr %508, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #8
  store i64 %indvars.iv565, ptr %90, align 8, !tbaa !5
  %510 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %90)
  %511 = load double, ptr %510, align 8, !tbaa !9
  %512 = invoke noundef double %507(double noundef %509, double noundef %511)
          to label %513 unwind label %.split475.us.split.us.split.us

513:                                              ; preds = %506
  %514 = fadd double %493, %496
  %515 = call double @llvm.fmuladd.f64(double %142, double %505, double %499)
  %516 = fmul double %253, %515
  %517 = call double @llvm.fmuladd.f64(double %249, double %514, double %516)
  %518 = call double @llvm.fmuladd.f64(double %256, double %512, double %517)
  %519 = fdiv double %518, %258
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #8
  store i64 %indvars.iv565, ptr %91, align 8, !tbaa !5
  %520 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %91)
  %521 = getelementptr inbounds double, ptr %520, i64 %135
  store double %519, ptr %521, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  br label %522

522:                                              ; preds = %513, %489
  br i1 %.not346, label %538, label %523

523:                                              ; preds = %522
  %524 = load ptr, ptr %276, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #8
  store i64 %indvars.iv565, ptr %92, align 8, !tbaa !5
  %525 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %92)
  %526 = getelementptr inbounds double, ptr %525, i64 %216
  %527 = load double, ptr %526, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %93) #8
  store i64 %282, ptr %93, align 8, !tbaa !5
  %528 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
  %529 = getelementptr inbounds double, ptr %528, i64 %135
  %530 = load double, ptr %529, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %94) #8
  store i64 %indvars.iv.next566, ptr %94, align 8, !tbaa !5
  %531 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %94)
  %532 = getelementptr inbounds double, ptr %531, i64 %135
  %533 = load double, ptr %532, align 8, !tbaa !9
  %534 = invoke noundef double %524(double noundef %527, double noundef %530, double noundef %533)
          to label %535 unwind label %.split478.us.split.us.split.us

535:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #8
  store i64 %indvars.iv565, ptr %95, align 8, !tbaa !5
  %536 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %95)
  %537 = getelementptr inbounds double, ptr %536, i64 %135
  store double %534, ptr %537, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #8
  br label %538

538:                                              ; preds = %535, %522
  br i1 %brmerge.not, label %539, label %556

539:                                              ; preds = %538
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %96) #8
  store i64 0, ptr %96, align 8, !tbaa !5
  %540 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %96)
  %541 = getelementptr inbounds i8, ptr %540, i64 8
  %542 = load double, ptr %541, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %97) #8
  store i64 0, ptr %97, align 8, !tbaa !5
  %543 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %97)
  %544 = getelementptr inbounds i8, ptr %543, i64 16
  %545 = load double, ptr %544, align 8, !tbaa !9
  %546 = fneg double %545
  %547 = call double @llvm.fmuladd.f64(double %542, double 2.000000e+00, double %546)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %98) #8
  store i64 1, ptr %98, align 8, !tbaa !5
  %548 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %98)
  %549 = load double, ptr %548, align 8, !tbaa !9
  %550 = call double @llvm.fmuladd.f64(double %549, double 2.000000e+00, double %547)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #8
  store i64 2, ptr %99, align 8, !tbaa !5
  %551 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
  %552 = load double, ptr %551, align 8, !tbaa !9
  %553 = fsub double %550, %552
  %554 = fmul double %553, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #8
  store i64 0, ptr %100, align 8, !tbaa !5
  %555 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %100)
  store double %554, ptr %555, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #8
  br label %556

556:                                              ; preds = %539, %538
  br i1 %brmerge369.not, label %557, label %577

557:                                              ; preds = %556
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #8
  store i64 0, ptr %101, align 8, !tbaa !5
  %558 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %101)
  %559 = getelementptr inbounds double, ptr %558, i64 %216
  %560 = load double, ptr %559, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #8
  store i64 0, ptr %102, align 8, !tbaa !5
  %561 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
  %562 = getelementptr inbounds i8, ptr %561, i64 %279
  %563 = load double, ptr %562, align 8, !tbaa !9
  %564 = fneg double %563
  %565 = call double @llvm.fmuladd.f64(double %560, double 2.000000e+00, double %564)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #8
  store i64 1, ptr %103, align 8, !tbaa !5
  %566 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %103)
  %567 = getelementptr inbounds double, ptr %566, i64 %135
  %568 = load double, ptr %567, align 8, !tbaa !9
  %569 = call double @llvm.fmuladd.f64(double %568, double 2.000000e+00, double %565)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #8
  store i64 2, ptr %104, align 8, !tbaa !5
  %570 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %104)
  %571 = getelementptr inbounds double, ptr %570, i64 %135
  %572 = load double, ptr %571, align 8, !tbaa !9
  %573 = fsub double %569, %572
  %574 = fmul double %573, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #8
  store i64 0, ptr %105, align 8, !tbaa !5
  %575 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %105)
  %576 = getelementptr inbounds double, ptr %575, i64 %135
  store double %574, ptr %576, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #8
  br label %577

577:                                              ; preds = %557, %556
  br i1 %brmerge370, label %595, label %578

578:                                              ; preds = %577
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #8
  store i64 %144, ptr %106, align 8, !tbaa !5
  %579 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %106)
  %580 = getelementptr inbounds i8, ptr %579, i64 8
  %581 = load double, ptr %580, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %107) #8
  store i64 %144, ptr %107, align 8, !tbaa !5
  %582 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %107)
  %583 = getelementptr inbounds i8, ptr %582, i64 16
  %584 = load double, ptr %583, align 8, !tbaa !9
  %585 = fneg double %584
  %586 = call double @llvm.fmuladd.f64(double %581, double 2.000000e+00, double %585)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %108) #8
  store i64 %269, ptr %108, align 8, !tbaa !5
  %587 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %108)
  %588 = load double, ptr %587, align 8, !tbaa !9
  %589 = call double @llvm.fmuladd.f64(double %588, double 2.000000e+00, double %586)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #8
  store i64 %280, ptr %109, align 8, !tbaa !5
  %590 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %109)
  %591 = load double, ptr %590, align 8, !tbaa !9
  %592 = fsub double %589, %591
  %593 = fmul double %592, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #8
  store i64 %144, ptr %110, align 8, !tbaa !5
  %594 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %110)
  store double %593, ptr %594, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %107) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #8
  br label %595

595:                                              ; preds = %578, %577
  br i1 %brmerge371, label %616, label %596

596:                                              ; preds = %595
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #8
  store i64 %144, ptr %111, align 8, !tbaa !5
  %597 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %111)
  %598 = getelementptr inbounds double, ptr %597, i64 %216
  %599 = load double, ptr %598, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %112) #8
  store i64 %144, ptr %112, align 8, !tbaa !5
  %600 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %112)
  %601 = getelementptr inbounds i8, ptr %600, i64 %279
  %602 = load double, ptr %601, align 8, !tbaa !9
  %603 = fneg double %602
  %604 = call double @llvm.fmuladd.f64(double %599, double 2.000000e+00, double %603)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %113) #8
  store i64 %269, ptr %113, align 8, !tbaa !5
  %605 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %113)
  %606 = getelementptr inbounds double, ptr %605, i64 %135
  %607 = load double, ptr %606, align 8, !tbaa !9
  %608 = call double @llvm.fmuladd.f64(double %607, double 2.000000e+00, double %604)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #8
  store i64 %280, ptr %114, align 8, !tbaa !5
  %609 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %114)
  %610 = getelementptr inbounds double, ptr %609, i64 %135
  %611 = load double, ptr %610, align 8, !tbaa !9
  %612 = fsub double %608, %611
  %613 = fmul double %612, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #8
  store i64 %144, ptr %115, align 8, !tbaa !5
  %614 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %115)
  %615 = getelementptr inbounds double, ptr %614, i64 %135
  store double %613, ptr %615, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #8
  br label %616

616:                                              ; preds = %596, %595
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #8
  store i64 %indvars.iv565, ptr %116, align 8, !tbaa !5
  %617 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %116)
  %618 = getelementptr inbounds double, ptr %617, i64 %indvars.iv560
  %619 = load double, ptr %618, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %117) #8
  store i64 %indvars.iv565, ptr %117, align 8, !tbaa !5
  %620 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(8) %117)
  %621 = getelementptr inbounds double, ptr %620, i64 %indvars.iv560
  %622 = load double, ptr %621, align 8, !tbaa !9
  %623 = insertelement <2 x double> poison, double %622, i64 0
  %624 = insertelement <2 x double> %623, double %619, i64 1
  %625 = call <2 x double> @llvm.fabs.v2f64(<2 x double> %624)
  %626 = fadd <2 x double> %289, %625
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %118) #8
  store i64 %indvars.iv565, ptr %118, align 8, !tbaa !5
  %627 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %118)
  %628 = getelementptr inbounds double, ptr %627, i64 %indvars.iv560
  %629 = load double, ptr %628, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #8
  store i64 %indvars.iv565, ptr %119, align 8, !tbaa !5
  %630 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(8) %119)
  %631 = getelementptr inbounds double, ptr %630, i64 %indvars.iv560
  store double %629, ptr %631, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #8
  %indvars.iv.next561 = add nuw nsw i64 %indvars.iv560, 1
  %exitcond564.not = icmp eq i64 %indvars.iv.next561, %wide.trip.count563
  br i1 %exitcond564.not, label %._crit_edge429.us.us.us, label %288, !llvm.loop !32

._crit_edge429.us.us.us:                          ; preds = %616
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #8
  store i64 %282, ptr %120, align 8, !tbaa !5
  %632 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %120)
  %633 = extractelement <2 x double> %626, i64 1
  store double %633, ptr %632, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #8
  store i64 %282, ptr %121, align 8, !tbaa !5
  %634 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %121)
  %635 = extractelement <2 x double> %626, i64 0
  store double %635, ptr %634, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #8
  %636 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %283 unwind label %.split435.us.split.us.split.us

._crit_edge432.split.us.us.us:                    ; preds = %285
  %637 = add nuw nsw i32 %.0289482.us.us, 1
  %638 = fcmp uge double %287, %8
  %639 = icmp slt i32 %637, %9
  %or.cond = select i1 %638, i1 %639, i1 false
  br i1 %or.cond, label %.preheader372.us.us, label %._crit_edge483, !llvm.loop !33

.split435.us.split.us.split.us:                   ; preds = %._crit_edge429.us.us.us, %283
  %640 = landingpad { ptr, i32 }
          cleanup
  br label %727

.split439.us.split.us.split.us:                   ; preds = %290
  %641 = landingpad { ptr, i32 }
          cleanup
  br label %672

.split442.us.split.us.split.us:                   ; preds = %304
  %642 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  br label %672

.split445.us.split.us.split.us:                   ; preds = %320
  %643 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br label %727

.split448.us.split.us.split.us:                   ; preds = %333
  %644 = landingpad { ptr, i32 }
          cleanup
  br label %673

.split451.us.split.us.split.us:                   ; preds = %343
  %645 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #8
  br label %673

.split454.us.split.us.split.us:                   ; preds = %368
  %646 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  br label %727

.split457.us.split.us.split.us:                   ; preds = %386
  %647 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  br label %727

.split460.us.split.us.split.us:                   ; preds = %406
  %648 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  br label %727

.split463.us.split.us.split.us:                   ; preds = %437
  %649 = landingpad { ptr, i32 }
          cleanup
  br label %674

.split466.us.split.us.split.us:                   ; preds = %447
  %650 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #8
  br label %674

.split469.us.split.us.split.us:                   ; preds = %472
  %651 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  br label %727

.split472.us.split.us.split.us:                   ; preds = %490
  %652 = landingpad { ptr, i32 }
          cleanup
  br label %675

.split475.us.split.us.split.us:                   ; preds = %506
  %653 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #8
  br label %675

.split478.us.split.us.split.us:                   ; preds = %523
  %654 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #8
  br label %727

.preheader372.us:                                 ; preds = %.preheader372.lr.ph.split.us, %._crit_edge432.split.us488
  %.0289482.us = phi i32 [ %664, %._crit_edge432.split.us488 ], [ 0, %.preheader372.lr.ph.split.us ]
  br label %.preheader.us486

655:                                              ; preds = %.preheader.us486
  %656 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %657 unwind label %.split435.split.us

657:                                              ; preds = %655
  %658 = fsub double %663, %656
  %659 = call noundef double @_ZSt3absd(double noundef %658)
  %indvars.iv.next556 = add nuw nsw i64 %indvars.iv555, 1
  %exitcond559.not = icmp eq i64 %indvars.iv.next556, %wide.trip.count568
  br i1 %exitcond559.not, label %._crit_edge432.split.us488, label %.preheader.us486, !llvm.loop !25

.preheader.us486:                                 ; preds = %.preheader372.us, %657
  %indvars.iv555 = phi i64 [ 1, %.preheader372.us ], [ %indvars.iv.next556, %657 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #8
  %660 = add nsw i64 %indvars.iv555, -1
  store i64 %660, ptr %120, align 8, !tbaa !5
  %661 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %120)
  store double 0.000000e+00, ptr %661, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #8
  store i64 %660, ptr %121, align 8, !tbaa !5
  %662 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %121)
  store double 0.000000e+00, ptr %662, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #8
  %663 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %655 unwind label %.split435.split.us

._crit_edge432.split.us488:                       ; preds = %657
  %664 = add nuw nsw i32 %.0289482.us, 1
  %665 = fcmp uge double %659, %8
  %666 = icmp slt i32 %664, %9
  %or.cond527 = select i1 %665, i1 %666, i1 false
  br i1 %or.cond527, label %.preheader372.us, label %._crit_edge483, !llvm.loop !33

.split435.split.us:                               ; preds = %.preheader.us486, %655
  %667 = landingpad { ptr, i32 }
          cleanup
  br label %727

668:                                              ; preds = %._crit_edge
  %669 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #8
  br label %729

670:                                              ; preds = %243
  %671 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  br label %728

672:                                              ; preds = %.split442.us.split.us.split.us, %.split439.us.split.us.split.us
  %.pn329 = phi { ptr, i32 } [ %642, %.split442.us.split.us.split.us ], [ %641, %.split439.us.split.us.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  br label %727

673:                                              ; preds = %.split451.us.split.us.split.us, %.split448.us.split.us.split.us
  %.pn333 = phi { ptr, i32 } [ %645, %.split451.us.split.us.split.us ], [ %644, %.split448.us.split.us.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  br label %727

674:                                              ; preds = %.split466.us.split.us.split.us, %.split463.us.split.us.split.us
  %.pn339 = phi { ptr, i32 } [ %650, %.split466.us.split.us.split.us ], [ %649, %.split463.us.split.us.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #8
  br label %727

675:                                              ; preds = %.split475.us.split.us.split.us, %.split472.us.split.us.split.us
  %.pn344 = phi { ptr, i32 } [ %653, %.split475.us.split.us.split.us ], [ %652, %.split472.us.split.us.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  br label %727

._crit_edge483:                                   ; preds = %._crit_edge432.split.us488, %._crit_edge432.split.us.us.us, %.preheader372.lr.ph, %244
  %.1294 = phi i32 [ 0, %244 ], [ %9, %.preheader372.lr.ph ], [ %637, %._crit_edge432.split.us.us.us ], [ %664, %._crit_edge432.split.us488 ]
  %676 = zext i8 %4 to i32
  %677 = and i32 %676, 1
  %.not = icmp eq i32 %677, 0
  br i1 %.not, label %688, label %678

678:                                              ; preds = %._crit_edge483
  %679 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.8)
          to label %680 unwind label %686

680:                                              ; preds = %678
  %681 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %679, ptr noundef nonnull @_ZSt10scientificRSt8ios_base)
          to label %682 unwind label %686

682:                                              ; preds = %680
  %683 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %681, i32 noundef %.1294)
          to label %684 unwind label %686

684:                                              ; preds = %682
  %685 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %683, ptr noundef nonnull @.str.3)
          to label %688 unwind label %686

686:                                              ; preds = %696, %694, %692, %690, %684, %682, %680, %678
  %687 = landingpad { ptr, i32 }
          cleanup
  br label %727

688:                                              ; preds = %684, %._crit_edge483
  %689 = icmp eq i32 %.1294, %9
  br i1 %689, label %690, label %698

690:                                              ; preds = %688
  %691 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.9)
          to label %692 unwind label %686

692:                                              ; preds = %690
  %693 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %691, ptr noundef nonnull @_ZSt10scientificRSt8ios_base)
          to label %694 unwind label %686

694:                                              ; preds = %692
  %695 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %693, i32 noundef %9)
          to label %696 unwind label %686

696:                                              ; preds = %694
  %697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %695, ptr noundef nonnull @.str.5)
          to label %698 unwind label %686

698:                                              ; preds = %696, %688
  %699 = and i32 %676, 8
  %.not321 = icmp eq i32 %699, 0
  br i1 %.not321, label %712, label %700

700:                                              ; preds = %698
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %123) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %123)
          to label %701 unwind label %704

701:                                              ; preds = %700
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %125) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %125) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %124, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %125)
          to label %702 unwind label %706

702:                                              ; preds = %701
  invoke void @_ZN3cda4math22differential_equations3EDP11printMATLABENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %122, ptr noundef nonnull %124, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %703 unwind label %708

703:                                              ; preds = %702
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %125) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %125) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %123) #8
  br label %712

704:                                              ; preds = %700
  %705 = landingpad { ptr, i32 }
          cleanup
  br label %711

706:                                              ; preds = %701
  %707 = landingpad { ptr, i32 }
          cleanup
  br label %710

708:                                              ; preds = %702
  %709 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  br label %710

710:                                              ; preds = %708, %706
  %.pn = phi { ptr, i32 } [ %709, %708 ], [ %707, %706 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %125) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %125) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  br label %711

711:                                              ; preds = %710, %704
  %.pn.pn = phi { ptr, i32 } [ %.pn, %710 ], [ %705, %704 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %123) #8
  br label %727

712:                                              ; preds = %703, %698
  %713 = and i32 %676, 2
  %.not324 = icmp eq i32 %713, 0
  br i1 %.not324, label %726, label %714

714:                                              ; preds = %712
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %127) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %127) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %127)
          to label %715 unwind label %718

715:                                              ; preds = %714
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %129) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %129)
          to label %716 unwind label %720

716:                                              ; preds = %715
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %126, ptr noundef nonnull %128, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %717 unwind label %722

717:                                              ; preds = %716
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %129) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %127) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %127) #8
  br label %726

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

720:                                              ; preds = %715
  %721 = landingpad { ptr, i32 }
          cleanup
  br label %724

722:                                              ; preds = %716
  %723 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  br label %724

724:                                              ; preds = %722, %720
  %.pn325 = phi { ptr, i32 } [ %723, %722 ], [ %721, %720 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %129) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %129) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  br label %725

725:                                              ; preds = %724, %718
  %.pn325.pn = phi { ptr, i32 } [ %.pn325, %724 ], [ %719, %718 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %127) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %127) #8
  br label %727

726:                                              ; preds = %717, %712
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #8
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #8
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #8
  ret void

727:                                              ; preds = %.split435.split.us, %.split435.us.split.us.split.us, %.split478.us.split.us.split.us, %675, %.split469.us.split.us.split.us, %674, %.split460.us.split.us.split.us, %.split457.us.split.us.split.us, %.split454.us.split.us.split.us, %673, %.split445.us.split.us.split.us, %672, %725, %711, %686
  %.pn347.pn.pn = phi { ptr, i32 } [ %.pn325.pn, %725 ], [ %.pn.pn, %711 ], [ %687, %686 ], [ %654, %.split478.us.split.us.split.us ], [ %.pn344, %675 ], [ %651, %.split469.us.split.us.split.us ], [ %.pn339, %674 ], [ %647, %.split457.us.split.us.split.us ], [ %648, %.split460.us.split.us.split.us ], [ %646, %.split454.us.split.us.split.us ], [ %.pn333, %673 ], [ %643, %.split445.us.split.us.split.us ], [ %.pn329, %672 ], [ %667, %.split435.split.us ], [ %640, %.split435.us.split.us.split.us ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #8
  br label %728

728:                                              ; preds = %727, %670
  %.pn347.pn.pn.pn = phi { ptr, i32 } [ %.pn347.pn.pn, %727 ], [ %671, %670 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #8
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  br label %729

729:                                              ; preds = %728, %668
  %.pn347.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn347.pn.pn.pn, %728 ], [ %669, %668 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #8
  br label %730

730:                                              ; preds = %227, %240, %210, %215, %729, %192
  %.pn365.pn = phi { ptr, i32 } [ %.pn347.pn.pn.pn.pn, %729 ], [ %193, %192 ], [ %.us-phi, %215 ], [ %.us-phi422, %210 ], [ %241, %240 ], [ %228, %227 ]
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #8
  br label %731

731:                                              ; preds = %730, %190
  %.pn365.pn.pn = phi { ptr, i32 } [ %.pn365.pn, %730 ], [ %191, %190 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #8
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #8
  resume { ptr, i32 } %.pn365.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef, ptr noundef, i8 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fabs.v2f64(<2 x double>) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { inlinehint mustprogress 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 #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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, !14, i64 184}
!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 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!12, !14, i64 176}
!22 = !{!12, !14, i64 160}
!23 = !{!12, !14, i64 168}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = !{!12, !14, i64 232}
!27 = !{!12, !14, i64 192}
!28 = !{!12, !14, i64 208}
!29 = !{!12, !14, i64 224}
!30 = !{!12, !14, i64 216}
!31 = !{!12, !14, i64 200}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass