; 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.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [77 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

; 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 uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP12solveLAPLACEEhhhRNS0_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 %"class.std::__cxx11::basic_string", align 8
  %140 = alloca %"class.std::allocator", align 1
  %141 = alloca %"class.std::__cxx11::basic_string", align 8
  %142 = 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
  %143 = load ptr, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  %144 = load ptr, ptr %18, align 8, !tbaa !5
  %145 = call noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40) %144)
  %146 = trunc i64 %145 to i32
  store i32 %146, ptr %21, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %147 = load ptr, ptr %18, align 8, !tbaa !5
  %148 = call noundef i64 @_ZNK3cda4math10containers6MatrixIdE7columnsEv(ptr noundef nonnull align 8 dereferenceable(40) %147)
  %149 = trunc i64 %148 to i32
  store i32 %149, ptr %22, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %150 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  %151 = load i32, ptr %22, align 4, !tbaa !12
  %152 = sub nsw i32 %151, 1
  %153 = sext i32 %152 to i64
  store i64 %153, ptr %24, align 8, !tbaa !14
  %154 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %150, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %155 = load double, ptr %154, align 8, !tbaa !10
  %156 = 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
  %157 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %156, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %158 = load double, ptr %157, align 8, !tbaa !10
  %159 = fsub double %155, %158
  %160 = load i32, ptr %22, align 4, !tbaa !12
  %161 = sub nsw i32 %160, 1
  %162 = sitofp i32 %161 to double
  %163 = fdiv double %159, %162
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  store double %163, ptr %23, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  %165 = load i32, ptr %21, align 4, !tbaa !12
  %166 = sub nsw i32 %165, 1
  %167 = sext i32 %166 to i64
  store i64 %167, ptr %27, 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) %27)
  %169 = load double, ptr %168, align 8, !tbaa !10
  %170 = 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
  %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) %28)
  %172 = load double, ptr %171, align 8, !tbaa !10
  %173 = fsub double %169, %172
  %174 = load i32, ptr %21, 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 %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  store double %177, ptr %26, align 8, !tbaa !10
  store i1 false, ptr %29, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %178 = load i32, ptr %21, align 4, !tbaa !12
  %179 = sext i32 %178 to i64
  store i64 %179, ptr %30, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %180 = load i32, ptr %22, align 4, !tbaa !12
  %181 = sext i32 %180 to i64
  store i64 %181, 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
  %182 = load i32, ptr %21, align 4, !tbaa !12
  %183 = sext i32 %182 to i64
  store i64 %183, ptr %33, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  %184 = load i32, ptr %22, align 4, !tbaa !12
  %185 = sext i32 %184 to i64
  store i64 %185, 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 %186 unwind label %197

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

189:                                              ; preds = %186
  %190 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %188)
          to label %191 unwind label %201

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

192:                                              ; preds = %290, %191
  %193 = load i32, ptr %37, align 4, !tbaa !12
  %194 = load i32, ptr %22, align 4, !tbaa !12
  %195 = icmp slt i32 %193, %194
  br i1 %195, label %205, label %196

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

197:                                              ; preds = %10
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %35, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, 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 %1703

201:                                              ; preds = %189, %186
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %35, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %36, align 4
  br label %1702

205:                                              ; preds = %192
  %206 = load i8, ptr %13, align 1, !tbaa !9
  %207 = zext i8 %206 to i32
  %208 = and i32 %207, 4
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %210, label %244

210:                                              ; preds = %205
  %211 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 9
  %212 = load ptr, ptr %211, align 8, !tbaa !16
  %213 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %214 = load i32, ptr %37, align 4, !tbaa !12
  %215 = sext i32 %214 to i64
  store i64 %215, ptr %38, align 8, !tbaa !14
  %216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %213, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %217 unwind label %230

217:                                              ; preds = %210
  %218 = load double, ptr %216, align 8, !tbaa !10
  %219 = 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
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %219, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %221 unwind label %234

221:                                              ; preds = %217
  %222 = load double, ptr %220, align 8, !tbaa !10
  %223 = invoke noundef double %212(double noundef %218, double noundef %222)
          to label %224 unwind label %234

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

226:                                              ; preds = %224
  %227 = load i32, ptr %37, align 4, !tbaa !12
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds double, ptr %225, i64 %228
  store double %223, ptr %229, 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 %244

230:                                              ; preds = %210
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %35, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %36, align 4
  br label %243

234:                                              ; preds = %221, %217
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %35, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %36, align 4
  br label %242

238:                                              ; preds = %224
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %35, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #7
  br label %242

242:                                              ; preds = %238, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #7
  br label %243

243:                                              ; preds = %242, %230
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  br label %293

244:                                              ; preds = %226, %205
  %245 = load i8, ptr %13, align 1, !tbaa !9
  %246 = zext i8 %245 to i32
  %247 = and i32 %246, 8
  %248 = icmp ne i32 %247, 0
  br i1 %248, label %249, label %289

249:                                              ; preds = %244
  %250 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 10
  %251 = load ptr, ptr %250, align 8, !tbaa !23
  %252 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %253 = load i32, ptr %37, align 4, !tbaa !12
  %254 = sext i32 %253 to i64
  store i64 %254, ptr %41, align 8, !tbaa !14
  %255 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %252, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %256 unwind label %275

256:                                              ; preds = %249
  %257 = load double, ptr %255, align 8, !tbaa !10
  %258 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  %259 = load i32, ptr %21, align 4, !tbaa !12
  %260 = sub nsw i32 %259, 1
  %261 = sext i32 %260 to i64
  store i64 %261, ptr %42, align 8, !tbaa !14
  %262 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %258, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %263 unwind label %279

263:                                              ; preds = %256
  %264 = load double, ptr %262, align 8, !tbaa !10
  %265 = invoke noundef double %251(double noundef %257, double noundef %264)
          to label %266 unwind label %279

266:                                              ; preds = %263
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #7
  %267 = load i32, ptr %21, align 4, !tbaa !12
  %268 = sub nsw i32 %267, 1
  %269 = sext i32 %268 to i64
  store i64 %269, ptr %43, align 8, !tbaa !14
  %270 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %271 unwind label %283

271:                                              ; preds = %266
  %272 = load i32, ptr %37, align 4, !tbaa !12
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %270, i64 %273
  store double %265, ptr %274, 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 %289

275:                                              ; preds = %249
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %35, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %36, align 4
  br label %288

279:                                              ; preds = %263, %256
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %35, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %36, align 4
  br label %287

283:                                              ; preds = %266
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %35, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #7
  br label %287

287:                                              ; preds = %283, %279
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  br label %288

288:                                              ; preds = %287, %275
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  br label %293

289:                                              ; preds = %271, %244
  br label %290

290:                                              ; preds = %289
  %291 = load i32, ptr %37, align 4, !tbaa !12
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %37, align 4, !tbaa !12
  br label %192, !llvm.loop !24

293:                                              ; preds = %288, %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #7
  br label %1702

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

295:                                              ; preds = %385, %294
  %296 = load i32, ptr %44, align 4, !tbaa !12
  %297 = load i32, ptr %21, align 4, !tbaa !12
  %298 = icmp slt i32 %296, %297
  br i1 %298, label %300, label %299

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

300:                                              ; preds = %295
  %301 = load i8, ptr %13, align 1, !tbaa !9
  %302 = zext i8 %301 to i32
  %303 = and i32 %302, 1
  %304 = icmp ne i32 %303, 0
  br i1 %304, label %305, label %339

305:                                              ; preds = %300
  %306 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 7
  %307 = load ptr, ptr %306, align 8, !tbaa !26
  %308 = 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
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %308, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %310 unwind label %325

310:                                              ; preds = %305
  %311 = load double, ptr %309, align 8, !tbaa !10
  %312 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #7
  %313 = load i32, ptr %44, align 4, !tbaa !12
  %314 = sext i32 %313 to i64
  store i64 %314, ptr %46, align 8, !tbaa !14
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %312, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %316 unwind label %329

316:                                              ; preds = %310
  %317 = load double, ptr %315, align 8, !tbaa !10
  %318 = invoke noundef double %307(double noundef %311, double noundef %317)
          to label %319 unwind label %329

319:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #7
  %320 = load i32, ptr %44, align 4, !tbaa !12
  %321 = sext i32 %320 to i64
  store i64 %321, ptr %47, align 8, !tbaa !14
  %322 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %323 unwind label %333

323:                                              ; preds = %319
  %324 = getelementptr inbounds double, ptr %322, i64 0
  store double %318, ptr %324, 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 %339

325:                                              ; preds = %305
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %35, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %36, align 4
  br label %338

329:                                              ; preds = %316, %310
  %330 = landingpad { ptr, i32 }
          cleanup
  %331 = extractvalue { ptr, i32 } %330, 0
  store ptr %331, ptr %35, align 8
  %332 = extractvalue { ptr, i32 } %330, 1
  store i32 %332, ptr %36, align 4
  br label %337

333:                                              ; preds = %319
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %35, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #7
  br label %337

337:                                              ; preds = %333, %329
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #7
  br label %338

338:                                              ; preds = %337, %325
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #7
  br label %388

339:                                              ; preds = %323, %300
  %340 = load i8, ptr %13, align 1, !tbaa !9
  %341 = zext i8 %340 to i32
  %342 = and i32 %341, 2
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %344, label %384

344:                                              ; preds = %339
  %345 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 8
  %346 = load ptr, ptr %345, align 8, !tbaa !27
  %347 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #7
  %348 = load i32, ptr %22, align 4, !tbaa !12
  %349 = sub nsw i32 %348, 1
  %350 = sext i32 %349 to i64
  store i64 %350, ptr %48, align 8, !tbaa !14
  %351 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %347, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %352 unwind label %370

352:                                              ; preds = %344
  %353 = load double, ptr %351, align 8, !tbaa !10
  %354 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #7
  %355 = load i32, ptr %44, align 4, !tbaa !12
  %356 = sext i32 %355 to i64
  store i64 %356, ptr %49, align 8, !tbaa !14
  %357 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %354, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %358 unwind label %374

358:                                              ; preds = %352
  %359 = load double, ptr %357, align 8, !tbaa !10
  %360 = invoke noundef double %346(double noundef %353, double noundef %359)
          to label %361 unwind label %374

361:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #7
  %362 = load i32, ptr %44, align 4, !tbaa !12
  %363 = sext i32 %362 to i64
  store i64 %363, ptr %50, align 8, !tbaa !14
  %364 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %365 unwind label %378

365:                                              ; preds = %361
  %366 = load i32, ptr %22, align 4, !tbaa !12
  %367 = sub nsw i32 %366, 1
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds double, ptr %364, i64 %368
  store double %360, ptr %369, 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 %384

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

374:                                              ; preds = %358, %352
  %375 = landingpad { ptr, i32 }
          cleanup
  %376 = extractvalue { ptr, i32 } %375, 0
  store ptr %376, ptr %35, align 8
  %377 = extractvalue { ptr, i32 } %375, 1
  store i32 %377, ptr %36, align 4
  br label %382

378:                                              ; preds = %361
  %379 = landingpad { ptr, i32 }
          cleanup
  %380 = extractvalue { ptr, i32 } %379, 0
  store ptr %380, ptr %35, align 8
  %381 = extractvalue { ptr, i32 } %379, 1
  store i32 %381, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #7
  br label %382

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

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

384:                                              ; preds = %365, %339
  br label %385

385:                                              ; preds = %384
  %386 = load i32, ptr %44, align 4, !tbaa !12
  %387 = add nsw i32 %386, 1
  store i32 %387, ptr %44, align 4, !tbaa !12
  br label %295, !llvm.loop !28

388:                                              ; preds = %383, %338
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  br label %1702

389:                                              ; preds = %299
  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
  %390 = load i32, ptr %22, align 4, !tbaa !12
  %391 = sub nsw i32 %390, 2
  %392 = sext i32 %391 to i64
  store i64 %392, 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 %393 unwind label %403

393:                                              ; preds = %389
  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
  %394 = load i32, ptr %22, align 4, !tbaa !12
  %395 = sub nsw i32 %394, 2
  %396 = sext i32 %395 to i64
  store i64 %396, 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 %397 unwind label %407

397:                                              ; preds = %393
  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 %398

398:                                              ; preds = %1635, %397
  %399 = load i32, ptr %59, align 4, !tbaa !12
  %400 = load i32, ptr %20, align 4, !tbaa !12
  %401 = icmp slt i32 %399, %400
  br i1 %401, label %411, label %402

402:                                              ; preds = %398
  store i32 8, ptr %60, align 4
  br label %1638

403:                                              ; preds = %389
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %35, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  br label %1701

407:                                              ; preds = %393
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %35, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  br label %1700

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

412:                                              ; preds = %1611, %411
  %413 = load i32, ptr %61, align 4, !tbaa !12
  %414 = load i32, ptr %21, align 4, !tbaa !12
  %415 = sub nsw i32 %414, 1
  %416 = icmp slt i32 %413, %415
  br i1 %416, label %418, label %417

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

418:                                              ; preds = %412
  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 %419

419:                                              ; preds = %1570, %418
  %420 = load i32, ptr %62, align 4, !tbaa !12
  %421 = load i32, ptr %22, align 4, !tbaa !12
  %422 = sub nsw i32 %421, 1
  %423 = icmp slt i32 %420, %422
  br i1 %423, label %425, label %424

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

425:                                              ; preds = %419
  %426 = load i8, ptr %13, align 1, !tbaa !9
  %427 = zext i8 %426 to i32
  %428 = and i32 %427, 16
  %429 = icmp ne i32 %428, 0
  br i1 %429, label %430, label %519

430:                                              ; preds = %425
  %431 = load double, ptr %23, align 8, !tbaa !10
  %432 = load double, ptr %23, align 8, !tbaa !10
  %433 = fmul double %431, %432
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #7
  %434 = load i32, ptr %61, align 4, !tbaa !12
  %435 = add nsw i32 %434, 1
  %436 = sext i32 %435 to i64
  store i64 %436, ptr %63, align 8, !tbaa !14
  %437 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %438 unwind label %490

438:                                              ; preds = %430
  %439 = getelementptr inbounds double, ptr %437, i64 0
  %440 = load double, ptr %439, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #7
  %441 = load i32, ptr %61, align 4, !tbaa !12
  %442 = sub nsw i32 %441, 1
  %443 = sext i32 %442 to i64
  store i64 %443, ptr %64, align 8, !tbaa !14
  %444 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %445 unwind label %494

445:                                              ; preds = %438
  %446 = getelementptr inbounds double, ptr %444, i64 0
  %447 = load double, ptr %446, align 8, !tbaa !10
  %448 = fadd double %440, %447
  %449 = load double, ptr %26, align 8, !tbaa !10
  %450 = load double, ptr %26, align 8, !tbaa !10
  %451 = fmul double %449, %450
  %452 = fmul double %451, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #7
  %453 = load i32, ptr %61, align 4, !tbaa !12
  %454 = sext i32 %453 to i64
  store i64 %454, ptr %65, align 8, !tbaa !14
  %455 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %456 unwind label %498

456:                                              ; preds = %445
  %457 = getelementptr inbounds double, ptr %455, i64 1
  %458 = load double, ptr %457, align 8, !tbaa !10
  %459 = load double, ptr %23, align 8, !tbaa !10
  %460 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 7
  %461 = load ptr, ptr %460, align 8, !tbaa !26
  %462 = 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
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %462, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %464 unwind label %502

464:                                              ; preds = %456
  %465 = load double, ptr %463, align 8, !tbaa !10
  %466 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #7
  %467 = load i32, ptr %61, align 4, !tbaa !12
  %468 = sext i32 %467 to i64
  store i64 %468, ptr %67, align 8, !tbaa !14
  %469 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %466, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %470 unwind label %506

470:                                              ; preds = %464
  %471 = load double, ptr %469, align 8, !tbaa !10
  %472 = invoke noundef double %461(double noundef %465, double noundef %471)
          to label %473 unwind label %506

473:                                              ; preds = %470
  %474 = call double @llvm.fmuladd.f64(double %459, double %472, double %458)
  %475 = fmul double %452, %474
  %476 = call double @llvm.fmuladd.f64(double %433, double %448, double %475)
  %477 = load double, ptr %26, align 8, !tbaa !10
  %478 = load double, ptr %26, align 8, !tbaa !10
  %479 = load double, ptr %23, align 8, !tbaa !10
  %480 = load double, ptr %23, align 8, !tbaa !10
  %481 = fmul double %479, %480
  %482 = call double @llvm.fmuladd.f64(double %477, double %478, double %481)
  %483 = fmul double 2.000000e+00, %482
  %484 = fdiv double %476, %483
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #7
  %485 = load i32, ptr %61, align 4, !tbaa !12
  %486 = sext i32 %485 to i64
  store i64 %486, ptr %68, align 8, !tbaa !14
  %487 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %488 unwind label %510

488:                                              ; preds = %473
  %489 = getelementptr inbounds double, ptr %487, i64 0
  store double %484, ptr %489, align 8, !tbaa !10
  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 %519

490:                                              ; preds = %430
  %491 = landingpad { ptr, i32 }
          cleanup
  %492 = extractvalue { ptr, i32 } %491, 0
  store ptr %492, ptr %35, align 8
  %493 = extractvalue { ptr, i32 } %491, 1
  store i32 %493, ptr %36, align 4
  br label %518

494:                                              ; preds = %438
  %495 = landingpad { ptr, i32 }
          cleanup
  %496 = extractvalue { ptr, i32 } %495, 0
  store ptr %496, ptr %35, align 8
  %497 = extractvalue { ptr, i32 } %495, 1
  store i32 %497, ptr %36, align 4
  br label %517

498:                                              ; preds = %445
  %499 = landingpad { ptr, i32 }
          cleanup
  %500 = extractvalue { ptr, i32 } %499, 0
  store ptr %500, ptr %35, align 8
  %501 = extractvalue { ptr, i32 } %499, 1
  store i32 %501, ptr %36, align 4
  br label %516

502:                                              ; preds = %456
  %503 = landingpad { ptr, i32 }
          cleanup
  %504 = extractvalue { ptr, i32 } %503, 0
  store ptr %504, ptr %35, align 8
  %505 = extractvalue { ptr, i32 } %503, 1
  store i32 %505, ptr %36, align 4
  br label %515

506:                                              ; preds = %470, %464
  %507 = landingpad { ptr, i32 }
          cleanup
  %508 = extractvalue { ptr, i32 } %507, 0
  store ptr %508, ptr %35, align 8
  %509 = extractvalue { ptr, i32 } %507, 1
  store i32 %509, ptr %36, align 4
  br label %514

510:                                              ; preds = %473
  %511 = landingpad { ptr, i32 }
          cleanup
  %512 = extractvalue { ptr, i32 } %511, 0
  store ptr %512, ptr %35, align 8
  %513 = extractvalue { ptr, i32 } %511, 1
  store i32 %513, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #7
  br label %514

514:                                              ; preds = %510, %506
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #7
  br label %515

515:                                              ; preds = %514, %502
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  br label %516

516:                                              ; preds = %515, %498
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #7
  br label %517

517:                                              ; preds = %516, %494
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #7
  br label %518

518:                                              ; preds = %517, %490
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #7
  br label %1590

519:                                              ; preds = %488, %425
  %520 = load i8, ptr %14, align 1, !tbaa !9
  %521 = zext i8 %520 to i32
  %522 = and i32 %521, 1
  %523 = icmp ne i32 %522, 0
  br i1 %523, label %524, label %573

524:                                              ; preds = %519
  %525 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 11
  %526 = load ptr, ptr %525, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #7
  %527 = load i32, ptr %61, align 4, !tbaa !12
  %528 = sext i32 %527 to i64
  store i64 %528, ptr %69, align 8, !tbaa !14
  %529 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %530 unwind label %554

530:                                              ; preds = %524
  %531 = getelementptr inbounds double, ptr %529, i64 1
  %532 = load double, ptr %531, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #7
  %533 = load i32, ptr %61, align 4, !tbaa !12
  %534 = sub nsw i32 %533, 1
  %535 = sext i32 %534 to i64
  store i64 %535, ptr %70, align 8, !tbaa !14
  %536 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %537 unwind label %558

537:                                              ; preds = %530
  %538 = getelementptr inbounds double, ptr %536, i64 0
  %539 = load double, ptr %538, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #7
  %540 = load i32, ptr %61, align 4, !tbaa !12
  %541 = add nsw i32 %540, 1
  %542 = sext i32 %541 to i64
  store i64 %542, ptr %71, align 8, !tbaa !14
  %543 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %544 unwind label %562

544:                                              ; preds = %537
  %545 = getelementptr inbounds double, ptr %543, i64 0
  %546 = load double, ptr %545, align 8, !tbaa !10
  %547 = invoke noundef double %526(double noundef %532, double noundef %539, double noundef %546)
          to label %548 unwind label %562

548:                                              ; preds = %544
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #7
  %549 = load i32, ptr %61, align 4, !tbaa !12
  %550 = sext i32 %549 to i64
  store i64 %550, ptr %72, align 8, !tbaa !14
  %551 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %72)
          to label %552 unwind label %566

552:                                              ; preds = %548
  %553 = getelementptr inbounds double, ptr %551, i64 0
  store double %547, ptr %553, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  br label %573

554:                                              ; preds = %524
  %555 = landingpad { ptr, i32 }
          cleanup
  %556 = extractvalue { ptr, i32 } %555, 0
  store ptr %556, ptr %35, align 8
  %557 = extractvalue { ptr, i32 } %555, 1
  store i32 %557, ptr %36, align 4
  br label %572

558:                                              ; preds = %530
  %559 = landingpad { ptr, i32 }
          cleanup
  %560 = extractvalue { ptr, i32 } %559, 0
  store ptr %560, ptr %35, align 8
  %561 = extractvalue { ptr, i32 } %559, 1
  store i32 %561, ptr %36, align 4
  br label %571

562:                                              ; preds = %544, %537
  %563 = landingpad { ptr, i32 }
          cleanup
  %564 = extractvalue { ptr, i32 } %563, 0
  store ptr %564, ptr %35, align 8
  %565 = extractvalue { ptr, i32 } %563, 1
  store i32 %565, ptr %36, align 4
  br label %570

566:                                              ; preds = %548
  %567 = landingpad { ptr, i32 }
          cleanup
  %568 = extractvalue { ptr, i32 } %567, 0
  store ptr %568, ptr %35, align 8
  %569 = extractvalue { ptr, i32 } %567, 1
  store i32 %569, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #7
  br label %570

570:                                              ; preds = %566, %562
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #7
  br label %571

571:                                              ; preds = %570, %558
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #7
  br label %572

572:                                              ; preds = %571, %554
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #7
  br label %1590

573:                                              ; preds = %552, %519
  %574 = load i8, ptr %13, align 1, !tbaa !9
  %575 = zext i8 %574 to i32
  %576 = and i32 %575, 64
  %577 = icmp ne i32 %576, 0
  br i1 %577, label %578, label %667

578:                                              ; preds = %573
  %579 = load double, ptr %23, align 8, !tbaa !10
  %580 = load double, ptr %23, align 8, !tbaa !10
  %581 = fmul double %579, %580
  %582 = fmul double %581, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #7
  store i64 1, ptr %73, align 8, !tbaa !14
  %583 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %73)
          to label %584 unwind label %638

584:                                              ; preds = %578
  %585 = load i32, ptr %62, align 4, !tbaa !12
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds double, ptr %583, i64 %586
  %588 = load double, ptr %587, align 8, !tbaa !10
  %589 = load double, ptr %26, align 8, !tbaa !10
  %590 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 9
  %591 = load ptr, ptr %590, align 8, !tbaa !16
  %592 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #7
  %593 = load i32, ptr %62, align 4, !tbaa !12
  %594 = sext i32 %593 to i64
  store i64 %594, ptr %74, align 8, !tbaa !14
  %595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %592, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %596 unwind label %642

596:                                              ; preds = %584
  %597 = load double, ptr %595, align 8, !tbaa !10
  %598 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #7
  store i64 0, ptr %75, align 8, !tbaa !14
  %599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %598, ptr noundef nonnull align 8 dereferenceable(8) %75)
          to label %600 unwind label %646

600:                                              ; preds = %596
  %601 = load double, ptr %599, align 8, !tbaa !10
  %602 = invoke noundef double %591(double noundef %597, double noundef %601)
          to label %603 unwind label %646

603:                                              ; preds = %600
  %604 = call double @llvm.fmuladd.f64(double %589, double %602, double %588)
  %605 = load double, ptr %26, align 8, !tbaa !10
  %606 = load double, ptr %26, align 8, !tbaa !10
  %607 = fmul double %605, %606
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #7
  store i64 0, ptr %76, align 8, !tbaa !14
  %608 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %76)
          to label %609 unwind label %650

609:                                              ; preds = %603
  %610 = load i32, ptr %62, align 4, !tbaa !12
  %611 = add nsw i32 %610, 1
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds double, ptr %608, i64 %612
  %614 = load double, ptr %613, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #7
  store i64 0, ptr %77, align 8, !tbaa !14
  %615 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %77)
          to label %616 unwind label %654

616:                                              ; preds = %609
  %617 = load i32, ptr %62, align 4, !tbaa !12
  %618 = sub nsw i32 %617, 1
  %619 = sext i32 %618 to i64
  %620 = getelementptr inbounds double, ptr %615, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !10
  %622 = fadd double %614, %621
  %623 = fmul double %607, %622
  %624 = call double @llvm.fmuladd.f64(double %582, double %604, double %623)
  %625 = load double, ptr %26, align 8, !tbaa !10
  %626 = load double, ptr %26, align 8, !tbaa !10
  %627 = load double, ptr %23, align 8, !tbaa !10
  %628 = load double, ptr %23, align 8, !tbaa !10
  %629 = fmul double %627, %628
  %630 = call double @llvm.fmuladd.f64(double %625, double %626, double %629)
  %631 = fmul double 2.000000e+00, %630
  %632 = fdiv double %624, %631
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #7
  store i64 0, ptr %78, align 8, !tbaa !14
  %633 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %634 unwind label %658

634:                                              ; preds = %616
  %635 = load i32, ptr %62, align 4, !tbaa !12
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds double, ptr %633, i64 %636
  store double %632, ptr %637, align 8, !tbaa !10
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  br label %667

638:                                              ; preds = %578
  %639 = landingpad { ptr, i32 }
          cleanup
  %640 = extractvalue { ptr, i32 } %639, 0
  store ptr %640, ptr %35, align 8
  %641 = extractvalue { ptr, i32 } %639, 1
  store i32 %641, ptr %36, align 4
  br label %666

642:                                              ; preds = %584
  %643 = landingpad { ptr, i32 }
          cleanup
  %644 = extractvalue { ptr, i32 } %643, 0
  store ptr %644, ptr %35, align 8
  %645 = extractvalue { ptr, i32 } %643, 1
  store i32 %645, ptr %36, align 4
  br label %665

646:                                              ; preds = %600, %596
  %647 = landingpad { ptr, i32 }
          cleanup
  %648 = extractvalue { ptr, i32 } %647, 0
  store ptr %648, ptr %35, align 8
  %649 = extractvalue { ptr, i32 } %647, 1
  store i32 %649, ptr %36, align 4
  br label %664

650:                                              ; preds = %603
  %651 = landingpad { ptr, i32 }
          cleanup
  %652 = extractvalue { ptr, i32 } %651, 0
  store ptr %652, ptr %35, align 8
  %653 = extractvalue { ptr, i32 } %651, 1
  store i32 %653, ptr %36, align 4
  br label %663

654:                                              ; preds = %609
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %35, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %36, align 4
  br label %662

658:                                              ; preds = %616
  %659 = landingpad { ptr, i32 }
          cleanup
  %660 = extractvalue { ptr, i32 } %659, 0
  store ptr %660, ptr %35, align 8
  %661 = extractvalue { ptr, i32 } %659, 1
  store i32 %661, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #7
  br label %662

662:                                              ; preds = %658, %654
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #7
  br label %663

663:                                              ; preds = %662, %650
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #7
  br label %664

664:                                              ; preds = %663, %646
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #7
  br label %665

665:                                              ; preds = %664, %642
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #7
  br label %666

666:                                              ; preds = %665, %638
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #7
  br label %1590

667:                                              ; preds = %634, %573
  %668 = load i8, ptr %14, align 1, !tbaa !9
  %669 = zext i8 %668 to i32
  %670 = and i32 %669, 4
  %671 = icmp ne i32 %670, 0
  br i1 %671, label %672, label %721

672:                                              ; preds = %667
  %673 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 13
  %674 = load ptr, ptr %673, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #7
  store i64 0, ptr %79, align 8, !tbaa !14
  %675 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %676 unwind label %702

676:                                              ; preds = %672
  %677 = load i32, ptr %62, align 4, !tbaa !12
  %678 = sub nsw i32 %677, 1
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds double, ptr %675, i64 %679
  %681 = load double, ptr %680, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #7
  store i64 0, ptr %80, align 8, !tbaa !14
  %682 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %683 unwind label %706

683:                                              ; preds = %676
  %684 = load i32, ptr %62, align 4, !tbaa !12
  %685 = add nsw i32 %684, 1
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds double, ptr %682, i64 %686
  %688 = load double, ptr %687, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #7
  store i64 1, ptr %81, align 8, !tbaa !14
  %689 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %690 unwind label %710

690:                                              ; preds = %683
  %691 = load i32, ptr %62, align 4, !tbaa !12
  %692 = sext i32 %691 to i64
  %693 = getelementptr inbounds double, ptr %689, i64 %692
  %694 = load double, ptr %693, align 8, !tbaa !10
  %695 = invoke noundef double %674(double noundef %681, double noundef %688, double noundef %694)
          to label %696 unwind label %710

696:                                              ; preds = %690
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #7
  store i64 0, ptr %82, align 8, !tbaa !14
  %697 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %698 unwind label %714

698:                                              ; preds = %696
  %699 = load i32, ptr %62, align 4, !tbaa !12
  %700 = sext i32 %699 to i64
  %701 = getelementptr inbounds double, ptr %697, i64 %700
  store double %695, ptr %701, 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
  br label %721

702:                                              ; preds = %672
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %35, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %36, align 4
  br label %720

706:                                              ; preds = %676
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %35, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %36, align 4
  br label %719

710:                                              ; preds = %690, %683
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %35, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %36, align 4
  br label %718

714:                                              ; preds = %696
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %35, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #7
  br label %718

718:                                              ; preds = %714, %710
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #7
  br label %719

719:                                              ; preds = %718, %706
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #7
  br label %720

720:                                              ; preds = %719, %702
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #7
  br label %1590

721:                                              ; preds = %698, %667
  %722 = load i8, ptr %14, align 1, !tbaa !9
  %723 = zext i8 %722 to i32
  %724 = and i32 %723, 16
  %725 = icmp ne i32 %724, 0
  br i1 %725, label %726, label %798

726:                                              ; preds = %721
  %727 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 15
  %728 = load ptr, ptr %727, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #7
  %729 = load i32, ptr %61, align 4, !tbaa !12
  %730 = sext i32 %729 to i64
  store i64 %730, ptr %83, align 8, !tbaa !14
  %731 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %83)
          to label %732 unwind label %774

732:                                              ; preds = %726
  %733 = load i32, ptr %62, align 4, !tbaa !12
  %734 = sub nsw i32 %733, 1
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds double, ptr %731, i64 %735
  %737 = load double, ptr %736, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #7
  %738 = load i32, ptr %61, align 4, !tbaa !12
  %739 = sext i32 %738 to i64
  store i64 %739, ptr %84, align 8, !tbaa !14
  %740 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %84)
          to label %741 unwind label %778

741:                                              ; preds = %732
  %742 = load i32, ptr %62, align 4, !tbaa !12
  %743 = add nsw i32 %742, 1
  %744 = sext i32 %743 to i64
  %745 = getelementptr inbounds double, ptr %740, i64 %744
  %746 = load double, ptr %745, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #7
  %747 = load i32, ptr %61, align 4, !tbaa !12
  %748 = sub nsw i32 %747, 1
  %749 = sext i32 %748 to i64
  store i64 %749, ptr %85, align 8, !tbaa !14
  %750 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %751 unwind label %782

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

760:                                              ; preds = %751
  %761 = load i32, ptr %62, align 4, !tbaa !12
  %762 = sext i32 %761 to i64
  %763 = getelementptr inbounds double, ptr %759, i64 %762
  %764 = load double, ptr %763, align 8, !tbaa !10
  %765 = invoke noundef double %728(double noundef %737, double noundef %746, double noundef %755, double noundef %764)
          to label %766 unwind label %786

766:                                              ; preds = %760
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #7
  %767 = load i32, ptr %61, align 4, !tbaa !12
  %768 = sext i32 %767 to i64
  store i64 %768, ptr %87, align 8, !tbaa !14
  %769 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %770 unwind label %790

770:                                              ; preds = %766
  %771 = load i32, ptr %62, align 4, !tbaa !12
  %772 = sext i32 %771 to i64
  %773 = getelementptr inbounds double, ptr %769, i64 %772
  store double %765, ptr %773, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  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 %884

774:                                              ; preds = %726
  %775 = landingpad { ptr, i32 }
          cleanup
  %776 = extractvalue { ptr, i32 } %775, 0
  store ptr %776, ptr %35, align 8
  %777 = extractvalue { ptr, i32 } %775, 1
  store i32 %777, ptr %36, align 4
  br label %797

778:                                              ; preds = %732
  %779 = landingpad { ptr, i32 }
          cleanup
  %780 = extractvalue { ptr, i32 } %779, 0
  store ptr %780, ptr %35, align 8
  %781 = extractvalue { ptr, i32 } %779, 1
  store i32 %781, ptr %36, align 4
  br label %796

782:                                              ; preds = %741
  %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 %795

786:                                              ; preds = %760, %751
  %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 %794

790:                                              ; preds = %766
  %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
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #7
  br label %794

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

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

796:                                              ; preds = %795, %778
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #7
  br label %797

797:                                              ; preds = %796, %774
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #7
  br label %1590

798:                                              ; preds = %721
  %799 = load double, ptr %23, align 8, !tbaa !10
  %800 = load double, ptr %23, align 8, !tbaa !10
  %801 = fmul double %799, %800
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #7
  %802 = load i32, ptr %61, align 4, !tbaa !12
  %803 = add nsw i32 %802, 1
  %804 = sext i32 %803 to i64
  store i64 %804, ptr %88, align 8, !tbaa !14
  %805 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %806 unwind label %860

806:                                              ; preds = %798
  %807 = load i32, ptr %62, align 4, !tbaa !12
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds double, ptr %805, i64 %808
  %810 = load double, ptr %809, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #7
  %811 = load i32, ptr %61, align 4, !tbaa !12
  %812 = sub nsw i32 %811, 1
  %813 = sext i32 %812 to i64
  store i64 %813, ptr %89, align 8, !tbaa !14
  %814 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %89)
          to label %815 unwind label %864

815:                                              ; preds = %806
  %816 = load i32, ptr %62, align 4, !tbaa !12
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds double, ptr %814, i64 %817
  %819 = load double, ptr %818, align 8, !tbaa !10
  %820 = fadd double %810, %819
  %821 = load double, ptr %26, align 8, !tbaa !10
  %822 = load double, ptr %26, align 8, !tbaa !10
  %823 = fmul double %821, %822
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #7
  %824 = load i32, ptr %61, align 4, !tbaa !12
  %825 = sext i32 %824 to i64
  store i64 %825, ptr %90, align 8, !tbaa !14
  %826 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %827 unwind label %868

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

836:                                              ; preds = %827
  %837 = load i32, ptr %62, align 4, !tbaa !12
  %838 = sub nsw i32 %837, 1
  %839 = sext i32 %838 to i64
  %840 = getelementptr inbounds double, ptr %835, i64 %839
  %841 = load double, ptr %840, align 8, !tbaa !10
  %842 = fadd double %832, %841
  %843 = fmul double %823, %842
  %844 = call double @llvm.fmuladd.f64(double %801, double %820, double %843)
  %845 = load double, ptr %26, align 8, !tbaa !10
  %846 = load double, ptr %26, align 8, !tbaa !10
  %847 = load double, ptr %23, align 8, !tbaa !10
  %848 = load double, ptr %23, align 8, !tbaa !10
  %849 = fmul double %847, %848
  %850 = call double @llvm.fmuladd.f64(double %845, double %846, double %849)
  %851 = fmul double 2.000000e+00, %850
  %852 = fdiv double %844, %851
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #7
  %853 = load i32, ptr %61, align 4, !tbaa !12
  %854 = sext i32 %853 to i64
  store i64 %854, ptr %92, align 8, !tbaa !14
  %855 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %856 unwind label %876

856:                                              ; preds = %836
  %857 = load i32, ptr %62, align 4, !tbaa !12
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds double, ptr %855, i64 %858
  store double %852, ptr %859, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  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
  br label %884

860:                                              ; preds = %798
  %861 = landingpad { ptr, i32 }
          cleanup
  %862 = extractvalue { ptr, i32 } %861, 0
  store ptr %862, ptr %35, align 8
  %863 = extractvalue { ptr, i32 } %861, 1
  store i32 %863, ptr %36, align 4
  br label %883

864:                                              ; preds = %806
  %865 = landingpad { ptr, i32 }
          cleanup
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %35, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %36, align 4
  br label %882

868:                                              ; preds = %815
  %869 = landingpad { ptr, i32 }
          cleanup
  %870 = extractvalue { ptr, i32 } %869, 0
  store ptr %870, ptr %35, align 8
  %871 = extractvalue { ptr, i32 } %869, 1
  store i32 %871, ptr %36, align 4
  br label %881

872:                                              ; preds = %827
  %873 = landingpad { ptr, i32 }
          cleanup
  %874 = extractvalue { ptr, i32 } %873, 0
  store ptr %874, ptr %35, align 8
  %875 = extractvalue { ptr, i32 } %873, 1
  store i32 %875, ptr %36, align 4
  br label %880

876:                                              ; preds = %836
  %877 = landingpad { ptr, i32 }
          cleanup
  %878 = extractvalue { ptr, i32 } %877, 0
  store ptr %878, ptr %35, align 8
  %879 = extractvalue { ptr, i32 } %877, 1
  store i32 %879, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #7
  br label %880

880:                                              ; preds = %876, %872
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #7
  br label %881

881:                                              ; preds = %880, %868
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #7
  br label %882

882:                                              ; preds = %881, %864
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #7
  br label %883

883:                                              ; preds = %882, %860
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #7
  br label %1590

884:                                              ; preds = %856, %770
  %885 = load i8, ptr %13, align 1, !tbaa !9
  %886 = zext i8 %885 to i32
  %887 = and i32 %886, 128
  %888 = icmp ne i32 %887, 0
  br i1 %888, label %889, label %993

889:                                              ; preds = %884
  %890 = load double, ptr %23, align 8, !tbaa !10
  %891 = load double, ptr %23, align 8, !tbaa !10
  %892 = fmul double %890, %891
  %893 = fmul double %892, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #7
  %894 = load i32, ptr %21, align 4, !tbaa !12
  %895 = sub nsw i32 %894, 2
  %896 = sext i32 %895 to i64
  store i64 %896, ptr %93, align 8, !tbaa !14
  %897 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %898 unwind label %964

898:                                              ; preds = %889
  %899 = load i32, ptr %62, align 4, !tbaa !12
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds double, ptr %897, i64 %900
  %902 = load double, ptr %901, align 8, !tbaa !10
  %903 = load double, ptr %26, align 8, !tbaa !10
  %904 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 10
  %905 = load ptr, ptr %904, align 8, !tbaa !23
  %906 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #7
  %907 = load i32, ptr %62, align 4, !tbaa !12
  %908 = sext i32 %907 to i64
  store i64 %908, ptr %94, align 8, !tbaa !14
  %909 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %906, ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %910 unwind label %968

910:                                              ; preds = %898
  %911 = load double, ptr %909, align 8, !tbaa !10
  %912 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #7
  %913 = load i32, ptr %21, align 4, !tbaa !12
  %914 = sub nsw i32 %913, 1
  %915 = sext i32 %914 to i64
  store i64 %915, ptr %95, align 8, !tbaa !14
  %916 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %912, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %917 unwind label %972

917:                                              ; preds = %910
  %918 = load double, ptr %916, align 8, !tbaa !10
  %919 = invoke noundef double %905(double noundef %911, double noundef %918)
          to label %920 unwind label %972

920:                                              ; preds = %917
  %921 = call double @llvm.fmuladd.f64(double %903, double %919, double %902)
  %922 = load double, ptr %26, align 8, !tbaa !10
  %923 = load double, ptr %26, align 8, !tbaa !10
  %924 = fmul double %922, %923
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #7
  %925 = load i32, ptr %21, align 4, !tbaa !12
  %926 = sub nsw i32 %925, 1
  %927 = sext i32 %926 to i64
  store i64 %927, ptr %96, align 8, !tbaa !14
  %928 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %929 unwind label %976

929:                                              ; preds = %920
  %930 = load i32, ptr %62, align 4, !tbaa !12
  %931 = add nsw i32 %930, 1
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds double, ptr %928, i64 %932
  %934 = load double, ptr %933, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #7
  %935 = load i32, ptr %21, align 4, !tbaa !12
  %936 = sub nsw i32 %935, 1
  %937 = sext i32 %936 to i64
  store i64 %937, ptr %97, align 8, !tbaa !14
  %938 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %939 unwind label %980

939:                                              ; preds = %929
  %940 = load i32, ptr %62, align 4, !tbaa !12
  %941 = sub nsw i32 %940, 1
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds double, ptr %938, i64 %942
  %944 = load double, ptr %943, align 8, !tbaa !10
  %945 = fadd double %934, %944
  %946 = fmul double %924, %945
  %947 = call double @llvm.fmuladd.f64(double %893, double %921, double %946)
  %948 = load double, ptr %26, align 8, !tbaa !10
  %949 = load double, ptr %26, align 8, !tbaa !10
  %950 = load double, ptr %23, align 8, !tbaa !10
  %951 = load double, ptr %23, align 8, !tbaa !10
  %952 = fmul double %950, %951
  %953 = call double @llvm.fmuladd.f64(double %948, double %949, double %952)
  %954 = fmul double 2.000000e+00, %953
  %955 = fdiv double %947, %954
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #7
  %956 = load i32, ptr %21, align 4, !tbaa !12
  %957 = sub nsw i32 %956, 1
  %958 = sext i32 %957 to i64
  store i64 %958, ptr %98, align 8, !tbaa !14
  %959 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %960 unwind label %984

960:                                              ; preds = %939
  %961 = load i32, ptr %62, align 4, !tbaa !12
  %962 = sext i32 %961 to i64
  %963 = getelementptr inbounds double, ptr %959, i64 %962
  store double %955, ptr %963, 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
  br label %993

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

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

972:                                              ; preds = %917, %910
  %973 = landingpad { ptr, i32 }
          cleanup
  %974 = extractvalue { ptr, i32 } %973, 0
  store ptr %974, ptr %35, align 8
  %975 = extractvalue { ptr, i32 } %973, 1
  store i32 %975, ptr %36, align 4
  br label %990

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

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

984:                                              ; preds = %939
  %985 = landingpad { ptr, i32 }
          cleanup
  %986 = extractvalue { ptr, i32 } %985, 0
  store ptr %986, ptr %35, align 8
  %987 = extractvalue { ptr, i32 } %985, 1
  store i32 %987, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #7
  br label %988

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

989:                                              ; preds = %988, %976
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #7
  br label %990

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

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

992:                                              ; preds = %991, %964
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #7
  br label %1590

993:                                              ; preds = %960, %884
  %994 = load i8, ptr %14, align 1, !tbaa !9
  %995 = zext i8 %994 to i32
  %996 = and i32 %995, 8
  %997 = icmp ne i32 %996, 0
  br i1 %997, label %998, label %1059

998:                                              ; preds = %993
  %999 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 14
  %1000 = load ptr, ptr %999, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #7
  %1001 = load i32, ptr %21, align 4, !tbaa !12
  %1002 = sub nsw i32 %1001, 1
  %1003 = sext i32 %1002 to i64
  store i64 %1003, ptr %99, align 8, !tbaa !14
  %1004 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %1005 unwind label %1040

1005:                                             ; preds = %998
  %1006 = load i32, ptr %62, align 4, !tbaa !12
  %1007 = sub nsw i32 %1006, 1
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds double, ptr %1004, i64 %1008
  %1010 = load double, ptr %1009, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #7
  %1011 = load i32, ptr %21, align 4, !tbaa !12
  %1012 = sub nsw i32 %1011, 1
  %1013 = sext i32 %1012 to i64
  store i64 %1013, ptr %100, align 8, !tbaa !14
  %1014 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %100)
          to label %1015 unwind label %1044

1015:                                             ; preds = %1005
  %1016 = load i32, ptr %62, align 4, !tbaa !12
  %1017 = add nsw i32 %1016, 1
  %1018 = sext i32 %1017 to i64
  %1019 = getelementptr inbounds double, ptr %1014, i64 %1018
  %1020 = load double, ptr %1019, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #7
  %1021 = load i32, ptr %21, align 4, !tbaa !12
  %1022 = sub nsw i32 %1021, 2
  %1023 = sext i32 %1022 to i64
  store i64 %1023, ptr %101, align 8, !tbaa !14
  %1024 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1025 unwind label %1048

1025:                                             ; preds = %1015
  %1026 = load i32, ptr %62, align 4, !tbaa !12
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds double, ptr %1024, i64 %1027
  %1029 = load double, ptr %1028, align 8, !tbaa !10
  %1030 = invoke noundef double %1000(double noundef %1010, double noundef %1020, double noundef %1029)
          to label %1031 unwind label %1048

1031:                                             ; preds = %1025
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #7
  %1032 = load i32, ptr %21, align 4, !tbaa !12
  %1033 = sub nsw i32 %1032, 1
  %1034 = sext i32 %1033 to i64
  store i64 %1034, ptr %102, align 8, !tbaa !14
  %1035 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %1036 unwind label %1052

1036:                                             ; preds = %1031
  %1037 = load i32, ptr %62, align 4, !tbaa !12
  %1038 = sext i32 %1037 to i64
  %1039 = getelementptr inbounds double, ptr %1035, i64 %1038
  store double %1030, ptr %1039, align 8, !tbaa !10
  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 %1059

1040:                                             ; preds = %998
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %35, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %36, align 4
  br label %1058

1044:                                             ; preds = %1005
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %35, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %36, align 4
  br label %1057

1048:                                             ; preds = %1025, %1015
  %1049 = landingpad { ptr, i32 }
          cleanup
  %1050 = extractvalue { ptr, i32 } %1049, 0
  store ptr %1050, ptr %35, align 8
  %1051 = extractvalue { ptr, i32 } %1049, 1
  store i32 %1051, ptr %36, align 4
  br label %1056

1052:                                             ; preds = %1031
  %1053 = landingpad { ptr, i32 }
          cleanup
  %1054 = extractvalue { ptr, i32 } %1053, 0
  store ptr %1054, ptr %35, align 8
  %1055 = extractvalue { ptr, i32 } %1053, 1
  store i32 %1055, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #7
  br label %1056

1056:                                             ; preds = %1052, %1048
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #7
  br label %1057

1057:                                             ; preds = %1056, %1044
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #7
  br label %1058

1058:                                             ; preds = %1057, %1040
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #7
  br label %1590

1059:                                             ; preds = %1036, %993
  %1060 = load i8, ptr %13, align 1, !tbaa !9
  %1061 = zext i8 %1060 to i32
  %1062 = and i32 %1061, 32
  %1063 = icmp ne i32 %1062, 0
  br i1 %1063, label %1064, label %1168

1064:                                             ; preds = %1059
  %1065 = load double, ptr %23, align 8, !tbaa !10
  %1066 = load double, ptr %23, align 8, !tbaa !10
  %1067 = fmul double %1065, %1066
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #7
  %1068 = load i32, ptr %61, align 4, !tbaa !12
  %1069 = add nsw i32 %1068, 1
  %1070 = sext i32 %1069 to i64
  store i64 %1070, ptr %103, align 8, !tbaa !14
  %1071 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %103)
          to label %1072 unwind label %1139

1072:                                             ; preds = %1064
  %1073 = load i32, ptr %22, align 4, !tbaa !12
  %1074 = sub nsw i32 %1073, 1
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds double, ptr %1071, i64 %1075
  %1077 = load double, ptr %1076, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #7
  %1078 = load i32, ptr %61, align 4, !tbaa !12
  %1079 = sub nsw i32 %1078, 1
  %1080 = sext i32 %1079 to i64
  store i64 %1080, ptr %104, align 8, !tbaa !14
  %1081 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %1082 unwind label %1143

1082:                                             ; preds = %1072
  %1083 = load i32, ptr %22, align 4, !tbaa !12
  %1084 = sub nsw i32 %1083, 1
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds double, ptr %1081, i64 %1085
  %1087 = load double, ptr %1086, align 8, !tbaa !10
  %1088 = fadd double %1077, %1087
  %1089 = load double, ptr %26, align 8, !tbaa !10
  %1090 = load double, ptr %26, align 8, !tbaa !10
  %1091 = fmul double %1089, %1090
  %1092 = fmul double %1091, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #7
  %1093 = load i32, ptr %61, align 4, !tbaa !12
  %1094 = sext i32 %1093 to i64
  store i64 %1094, ptr %105, align 8, !tbaa !14
  %1095 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1096 unwind label %1147

1096:                                             ; preds = %1082
  %1097 = load i32, ptr %22, align 4, !tbaa !12
  %1098 = sub nsw i32 %1097, 2
  %1099 = sext i32 %1098 to i64
  %1100 = getelementptr inbounds double, ptr %1095, i64 %1099
  %1101 = load double, ptr %1100, align 8, !tbaa !10
  %1102 = load double, ptr %23, align 8, !tbaa !10
  %1103 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 8
  %1104 = load ptr, ptr %1103, align 8, !tbaa !27
  %1105 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #7
  %1106 = load i32, ptr %22, align 4, !tbaa !12
  %1107 = sub nsw i32 %1106, 1
  %1108 = sext i32 %1107 to i64
  store i64 %1108, ptr %106, align 8, !tbaa !14
  %1109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1105, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %1110 unwind label %1151

1110:                                             ; preds = %1096
  %1111 = load double, ptr %1109, align 8, !tbaa !10
  %1112 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #7
  %1113 = load i32, ptr %61, align 4, !tbaa !12
  %1114 = sext i32 %1113 to i64
  store i64 %1114, ptr %107, align 8, !tbaa !14
  %1115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1112, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %1116 unwind label %1155

1116:                                             ; preds = %1110
  %1117 = load double, ptr %1115, align 8, !tbaa !10
  %1118 = invoke noundef double %1104(double noundef %1111, double noundef %1117)
          to label %1119 unwind label %1155

1119:                                             ; preds = %1116
  %1120 = call double @llvm.fmuladd.f64(double %1102, double %1118, double %1101)
  %1121 = fmul double %1092, %1120
  %1122 = call double @llvm.fmuladd.f64(double %1067, double %1088, double %1121)
  %1123 = load double, ptr %26, align 8, !tbaa !10
  %1124 = load double, ptr %26, align 8, !tbaa !10
  %1125 = load double, ptr %23, align 8, !tbaa !10
  %1126 = load double, ptr %23, align 8, !tbaa !10
  %1127 = fmul double %1125, %1126
  %1128 = call double @llvm.fmuladd.f64(double %1123, double %1124, double %1127)
  %1129 = fmul double 2.000000e+00, %1128
  %1130 = fdiv double %1122, %1129
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #7
  %1131 = load i32, ptr %61, align 4, !tbaa !12
  %1132 = sext i32 %1131 to i64
  store i64 %1132, ptr %108, align 8, !tbaa !14
  %1133 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %1134 unwind label %1159

1134:                                             ; preds = %1119
  %1135 = load i32, ptr %22, align 4, !tbaa !12
  %1136 = sub nsw i32 %1135, 1
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds double, ptr %1133, i64 %1137
  store double %1130, ptr %1138, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  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
  br label %1168

1139:                                             ; preds = %1064
  %1140 = landingpad { ptr, i32 }
          cleanup
  %1141 = extractvalue { ptr, i32 } %1140, 0
  store ptr %1141, ptr %35, align 8
  %1142 = extractvalue { ptr, i32 } %1140, 1
  store i32 %1142, ptr %36, align 4
  br label %1167

1143:                                             ; preds = %1072
  %1144 = landingpad { ptr, i32 }
          cleanup
  %1145 = extractvalue { ptr, i32 } %1144, 0
  store ptr %1145, ptr %35, align 8
  %1146 = extractvalue { ptr, i32 } %1144, 1
  store i32 %1146, ptr %36, align 4
  br label %1166

1147:                                             ; preds = %1082
  %1148 = landingpad { ptr, i32 }
          cleanup
  %1149 = extractvalue { ptr, i32 } %1148, 0
  store ptr %1149, ptr %35, align 8
  %1150 = extractvalue { ptr, i32 } %1148, 1
  store i32 %1150, ptr %36, align 4
  br label %1165

1151:                                             ; preds = %1096
  %1152 = landingpad { ptr, i32 }
          cleanup
  %1153 = extractvalue { ptr, i32 } %1152, 0
  store ptr %1153, ptr %35, align 8
  %1154 = extractvalue { ptr, i32 } %1152, 1
  store i32 %1154, ptr %36, align 4
  br label %1164

1155:                                             ; preds = %1116, %1110
  %1156 = landingpad { ptr, i32 }
          cleanup
  %1157 = extractvalue { ptr, i32 } %1156, 0
  store ptr %1157, ptr %35, align 8
  %1158 = extractvalue { ptr, i32 } %1156, 1
  store i32 %1158, ptr %36, align 4
  br label %1163

1159:                                             ; preds = %1119
  %1160 = landingpad { ptr, i32 }
          cleanup
  %1161 = extractvalue { ptr, i32 } %1160, 0
  store ptr %1161, ptr %35, align 8
  %1162 = extractvalue { ptr, i32 } %1160, 1
  store i32 %1162, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #7
  br label %1163

1163:                                             ; preds = %1159, %1155
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #7
  br label %1164

1164:                                             ; preds = %1163, %1151
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #7
  br label %1165

1165:                                             ; preds = %1164, %1147
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #7
  br label %1166

1166:                                             ; preds = %1165, %1143
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #7
  br label %1167

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

1168:                                             ; preds = %1134, %1059
  %1169 = load i8, ptr %14, align 1, !tbaa !9
  %1170 = zext i8 %1169 to i32
  %1171 = and i32 %1170, 2
  %1172 = icmp ne i32 %1171, 0
  br i1 %1172, label %1173, label %1234

1173:                                             ; preds = %1168
  %1174 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %143, i32 0, i32 12
  %1175 = load ptr, ptr %1174, align 8, !tbaa !33
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #7
  %1176 = load i32, ptr %61, align 4, !tbaa !12
  %1177 = sext i32 %1176 to i64
  store i64 %1177, ptr %109, align 8, !tbaa !14
  %1178 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %1179 unwind label %1215

1179:                                             ; preds = %1173
  %1180 = load i32, ptr %22, align 4, !tbaa !12
  %1181 = sub nsw i32 %1180, 2
  %1182 = sext i32 %1181 to i64
  %1183 = getelementptr inbounds double, ptr %1178, i64 %1182
  %1184 = load double, ptr %1183, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #7
  %1185 = load i32, ptr %61, align 4, !tbaa !12
  %1186 = sub nsw i32 %1185, 1
  %1187 = sext i32 %1186 to i64
  store i64 %1187, ptr %110, align 8, !tbaa !14
  %1188 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %1189 unwind label %1219

1189:                                             ; preds = %1179
  %1190 = load i32, ptr %22, align 4, !tbaa !12
  %1191 = sub nsw i32 %1190, 1
  %1192 = sext i32 %1191 to i64
  %1193 = getelementptr inbounds double, ptr %1188, i64 %1192
  %1194 = load double, ptr %1193, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #7
  %1195 = load i32, ptr %61, align 4, !tbaa !12
  %1196 = add nsw i32 %1195, 1
  %1197 = sext i32 %1196 to i64
  store i64 %1197, ptr %111, align 8, !tbaa !14
  %1198 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %1199 unwind label %1223

1199:                                             ; preds = %1189
  %1200 = load i32, ptr %22, align 4, !tbaa !12
  %1201 = sub nsw i32 %1200, 1
  %1202 = sext i32 %1201 to i64
  %1203 = getelementptr inbounds double, ptr %1198, i64 %1202
  %1204 = load double, ptr %1203, align 8, !tbaa !10
  %1205 = invoke noundef double %1175(double noundef %1184, double noundef %1194, double noundef %1204)
          to label %1206 unwind label %1223

1206:                                             ; preds = %1199
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #7
  %1207 = load i32, ptr %61, align 4, !tbaa !12
  %1208 = sext i32 %1207 to i64
  store i64 %1208, ptr %112, align 8, !tbaa !14
  %1209 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %1210 unwind label %1227

1210:                                             ; preds = %1206
  %1211 = load i32, ptr %22, align 4, !tbaa !12
  %1212 = sub nsw i32 %1211, 1
  %1213 = sext i32 %1212 to i64
  %1214 = getelementptr inbounds double, ptr %1209, i64 %1213
  store double %1205, ptr %1214, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #7
  br label %1234

1215:                                             ; preds = %1173
  %1216 = landingpad { ptr, i32 }
          cleanup
  %1217 = extractvalue { ptr, i32 } %1216, 0
  store ptr %1217, ptr %35, align 8
  %1218 = extractvalue { ptr, i32 } %1216, 1
  store i32 %1218, ptr %36, align 4
  br label %1233

1219:                                             ; preds = %1179
  %1220 = landingpad { ptr, i32 }
          cleanup
  %1221 = extractvalue { ptr, i32 } %1220, 0
  store ptr %1221, ptr %35, align 8
  %1222 = extractvalue { ptr, i32 } %1220, 1
  store i32 %1222, ptr %36, align 4
  br label %1232

1223:                                             ; preds = %1199, %1189
  %1224 = landingpad { ptr, i32 }
          cleanup
  %1225 = extractvalue { ptr, i32 } %1224, 0
  store ptr %1225, ptr %35, align 8
  %1226 = extractvalue { ptr, i32 } %1224, 1
  store i32 %1226, ptr %36, align 4
  br label %1231

1227:                                             ; preds = %1206
  %1228 = landingpad { ptr, i32 }
          cleanup
  %1229 = extractvalue { ptr, i32 } %1228, 0
  store ptr %1229, ptr %35, align 8
  %1230 = extractvalue { ptr, i32 } %1228, 1
  store i32 %1230, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #7
  br label %1231

1231:                                             ; preds = %1227, %1223
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #7
  br label %1232

1232:                                             ; preds = %1231, %1219
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #7
  br label %1233

1233:                                             ; preds = %1232, %1215
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #7
  br label %1590

1234:                                             ; preds = %1210, %1168
  %1235 = load i8, ptr %13, align 1, !tbaa !9
  %1236 = zext i8 %1235 to i32
  %1237 = and i32 %1236, 16
  %1238 = icmp ne i32 %1237, 0
  br i1 %1238, label %1239, label %1293

1239:                                             ; preds = %1234
  %1240 = load i8, ptr %13, align 1, !tbaa !9
  %1241 = zext i8 %1240 to i32
  %1242 = and i32 %1241, 64
  %1243 = icmp ne i32 %1242, 0
  br i1 %1243, label %1244, label %1293

1244:                                             ; preds = %1239
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #7
  store i64 0, ptr %113, align 8, !tbaa !14
  %1245 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %113)
          to label %1246 unwind label %1269

1246:                                             ; preds = %1244
  %1247 = getelementptr inbounds double, ptr %1245, i64 1
  %1248 = load double, ptr %1247, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #7
  store i64 0, ptr %114, align 8, !tbaa !14
  %1249 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %114)
          to label %1250 unwind label %1273

1250:                                             ; preds = %1246
  %1251 = getelementptr inbounds double, ptr %1249, i64 2
  %1252 = load double, ptr %1251, align 8, !tbaa !10
  %1253 = fneg double %1252
  %1254 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1248, double %1253)
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #7
  store i64 1, ptr %115, align 8, !tbaa !14
  %1255 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %115)
          to label %1256 unwind label %1277

1256:                                             ; preds = %1250
  %1257 = getelementptr inbounds double, ptr %1255, i64 0
  %1258 = load double, ptr %1257, align 8, !tbaa !10
  %1259 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1258, double %1254)
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #7
  store i64 2, ptr %116, align 8, !tbaa !14
  %1260 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %116)
          to label %1261 unwind label %1281

1261:                                             ; preds = %1256
  %1262 = getelementptr inbounds double, ptr %1260, i64 0
  %1263 = load double, ptr %1262, align 8, !tbaa !10
  %1264 = fsub double %1259, %1263
  %1265 = fdiv double %1264, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #7
  store i64 0, ptr %117, align 8, !tbaa !14
  %1266 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %117)
          to label %1267 unwind label %1285

1267:                                             ; preds = %1261
  %1268 = getelementptr inbounds double, ptr %1266, i64 0
  store double %1265, ptr %1268, align 8, !tbaa !10
  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
  br label %1293

1269:                                             ; preds = %1244
  %1270 = landingpad { ptr, i32 }
          cleanup
  %1271 = extractvalue { ptr, i32 } %1270, 0
  store ptr %1271, ptr %35, align 8
  %1272 = extractvalue { ptr, i32 } %1270, 1
  store i32 %1272, ptr %36, align 4
  br label %1292

1273:                                             ; preds = %1246
  %1274 = landingpad { ptr, i32 }
          cleanup
  %1275 = extractvalue { ptr, i32 } %1274, 0
  store ptr %1275, ptr %35, align 8
  %1276 = extractvalue { ptr, i32 } %1274, 1
  store i32 %1276, ptr %36, align 4
  br label %1291

1277:                                             ; preds = %1250
  %1278 = landingpad { ptr, i32 }
          cleanup
  %1279 = extractvalue { ptr, i32 } %1278, 0
  store ptr %1279, ptr %35, align 8
  %1280 = extractvalue { ptr, i32 } %1278, 1
  store i32 %1280, ptr %36, align 4
  br label %1290

1281:                                             ; preds = %1256
  %1282 = landingpad { ptr, i32 }
          cleanup
  %1283 = extractvalue { ptr, i32 } %1282, 0
  store ptr %1283, ptr %35, align 8
  %1284 = extractvalue { ptr, i32 } %1282, 1
  store i32 %1284, ptr %36, align 4
  br label %1289

1285:                                             ; preds = %1261
  %1286 = landingpad { ptr, i32 }
          cleanup
  %1287 = extractvalue { ptr, i32 } %1286, 0
  store ptr %1287, ptr %35, align 8
  %1288 = extractvalue { ptr, i32 } %1286, 1
  store i32 %1288, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #7
  br label %1289

1289:                                             ; preds = %1285, %1281
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #7
  br label %1290

1290:                                             ; preds = %1289, %1277
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #7
  br label %1291

1291:                                             ; preds = %1290, %1273
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #7
  br label %1292

1292:                                             ; preds = %1291, %1269
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #7
  br label %1590

1293:                                             ; preds = %1267, %1239, %1234
  %1294 = load i8, ptr %13, align 1, !tbaa !9
  %1295 = zext i8 %1294 to i32
  %1296 = and i32 %1295, 64
  %1297 = icmp ne i32 %1296, 0
  br i1 %1297, label %1298, label %1367

1298:                                             ; preds = %1293
  %1299 = load i8, ptr %13, align 1, !tbaa !9
  %1300 = zext i8 %1299 to i32
  %1301 = and i32 %1300, 32
  %1302 = icmp ne i32 %1301, 0
  br i1 %1302, label %1303, label %1367

1303:                                             ; preds = %1298
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #7
  store i64 0, ptr %118, align 8, !tbaa !14
  %1304 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %118)
          to label %1305 unwind label %1343

1305:                                             ; preds = %1303
  %1306 = load i32, ptr %22, align 4, !tbaa !12
  %1307 = sub nsw i32 %1306, 2
  %1308 = sext i32 %1307 to i64
  %1309 = getelementptr inbounds double, ptr %1304, i64 %1308
  %1310 = load double, ptr %1309, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #7
  store i64 0, ptr %119, align 8, !tbaa !14
  %1311 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %119)
          to label %1312 unwind label %1347

1312:                                             ; preds = %1305
  %1313 = load i32, ptr %22, align 4, !tbaa !12
  %1314 = sub nsw i32 %1313, 3
  %1315 = sext i32 %1314 to i64
  %1316 = getelementptr inbounds double, ptr %1311, i64 %1315
  %1317 = load double, ptr %1316, align 8, !tbaa !10
  %1318 = fneg double %1317
  %1319 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1310, double %1318)
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #7
  store i64 1, ptr %120, align 8, !tbaa !14
  %1320 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %120)
          to label %1321 unwind label %1351

1321:                                             ; preds = %1312
  %1322 = load i32, ptr %22, align 4, !tbaa !12
  %1323 = sub nsw i32 %1322, 1
  %1324 = sext i32 %1323 to i64
  %1325 = getelementptr inbounds double, ptr %1320, i64 %1324
  %1326 = load double, ptr %1325, align 8, !tbaa !10
  %1327 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1326, double %1319)
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #7
  store i64 2, ptr %121, align 8, !tbaa !14
  %1328 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %121)
          to label %1329 unwind label %1355

1329:                                             ; preds = %1321
  %1330 = load i32, ptr %22, align 4, !tbaa !12
  %1331 = sub nsw i32 %1330, 1
  %1332 = sext i32 %1331 to i64
  %1333 = getelementptr inbounds double, ptr %1328, i64 %1332
  %1334 = load double, ptr %1333, align 8, !tbaa !10
  %1335 = fsub double %1327, %1334
  %1336 = fdiv double %1335, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #7
  store i64 0, ptr %122, align 8, !tbaa !14
  %1337 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %122)
          to label %1338 unwind label %1359

1338:                                             ; preds = %1329
  %1339 = load i32, ptr %22, align 4, !tbaa !12
  %1340 = sub nsw i32 %1339, 1
  %1341 = sext i32 %1340 to i64
  %1342 = getelementptr inbounds double, ptr %1337, i64 %1341
  store double %1336, ptr %1342, 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
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  br label %1367

1343:                                             ; preds = %1303
  %1344 = landingpad { ptr, i32 }
          cleanup
  %1345 = extractvalue { ptr, i32 } %1344, 0
  store ptr %1345, ptr %35, align 8
  %1346 = extractvalue { ptr, i32 } %1344, 1
  store i32 %1346, ptr %36, align 4
  br label %1366

1347:                                             ; preds = %1305
  %1348 = landingpad { ptr, i32 }
          cleanup
  %1349 = extractvalue { ptr, i32 } %1348, 0
  store ptr %1349, ptr %35, align 8
  %1350 = extractvalue { ptr, i32 } %1348, 1
  store i32 %1350, ptr %36, align 4
  br label %1365

1351:                                             ; preds = %1312
  %1352 = landingpad { ptr, i32 }
          cleanup
  %1353 = extractvalue { ptr, i32 } %1352, 0
  store ptr %1353, ptr %35, align 8
  %1354 = extractvalue { ptr, i32 } %1352, 1
  store i32 %1354, ptr %36, align 4
  br label %1364

1355:                                             ; preds = %1321
  %1356 = landingpad { ptr, i32 }
          cleanup
  %1357 = extractvalue { ptr, i32 } %1356, 0
  store ptr %1357, ptr %35, align 8
  %1358 = extractvalue { ptr, i32 } %1356, 1
  store i32 %1358, ptr %36, align 4
  br label %1363

1359:                                             ; preds = %1329
  %1360 = landingpad { ptr, i32 }
          cleanup
  %1361 = extractvalue { ptr, i32 } %1360, 0
  store ptr %1361, ptr %35, align 8
  %1362 = extractvalue { ptr, i32 } %1360, 1
  store i32 %1362, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #7
  br label %1363

1363:                                             ; preds = %1359, %1355
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #7
  br label %1364

1364:                                             ; preds = %1363, %1351
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #7
  br label %1365

1365:                                             ; preds = %1364, %1347
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #7
  br label %1366

1366:                                             ; preds = %1365, %1343
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #7
  br label %1590

1367:                                             ; preds = %1338, %1298, %1293
  %1368 = load i8, ptr %13, align 1, !tbaa !9
  %1369 = zext i8 %1368 to i32
  %1370 = and i32 %1369, 16
  %1371 = icmp ne i32 %1370, 0
  br i1 %1371, label %1372, label %1441

1372:                                             ; preds = %1367
  %1373 = load i8, ptr %13, align 1, !tbaa !9
  %1374 = zext i8 %1373 to i32
  %1375 = and i32 %1374, 128
  %1376 = icmp ne i32 %1375, 0
  br i1 %1376, label %1377, label %1441

1377:                                             ; preds = %1372
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #7
  %1378 = load i32, ptr %21, align 4, !tbaa !12
  %1379 = sub nsw i32 %1378, 1
  %1380 = sext i32 %1379 to i64
  store i64 %1380, ptr %123, align 8, !tbaa !14
  %1381 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %123)
          to label %1382 unwind label %1417

1382:                                             ; preds = %1377
  %1383 = getelementptr inbounds double, ptr %1381, i64 1
  %1384 = load double, ptr %1383, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #7
  %1385 = load i32, ptr %21, align 4, !tbaa !12
  %1386 = sub nsw i32 %1385, 1
  %1387 = sext i32 %1386 to i64
  store i64 %1387, ptr %124, align 8, !tbaa !14
  %1388 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %124)
          to label %1389 unwind label %1421

1389:                                             ; preds = %1382
  %1390 = getelementptr inbounds double, ptr %1388, i64 2
  %1391 = load double, ptr %1390, align 8, !tbaa !10
  %1392 = fneg double %1391
  %1393 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1384, double %1392)
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #7
  %1394 = load i32, ptr %21, align 4, !tbaa !12
  %1395 = sub nsw i32 %1394, 2
  %1396 = sext i32 %1395 to i64
  store i64 %1396, ptr %125, align 8, !tbaa !14
  %1397 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %1398 unwind label %1425

1398:                                             ; preds = %1389
  %1399 = getelementptr inbounds double, ptr %1397, i64 0
  %1400 = load double, ptr %1399, align 8, !tbaa !10
  %1401 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1400, double %1393)
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #7
  %1402 = load i32, ptr %21, align 4, !tbaa !12
  %1403 = sub nsw i32 %1402, 3
  %1404 = sext i32 %1403 to i64
  store i64 %1404, ptr %126, align 8, !tbaa !14
  %1405 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %126)
          to label %1406 unwind label %1429

1406:                                             ; preds = %1398
  %1407 = getelementptr inbounds double, ptr %1405, i64 0
  %1408 = load double, ptr %1407, align 8, !tbaa !10
  %1409 = fsub double %1401, %1408
  %1410 = fdiv double %1409, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #7
  %1411 = load i32, ptr %21, align 4, !tbaa !12
  %1412 = sub nsw i32 %1411, 1
  %1413 = sext i32 %1412 to i64
  store i64 %1413, ptr %127, align 8, !tbaa !14
  %1414 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %127)
          to label %1415 unwind label %1433

1415:                                             ; preds = %1406
  %1416 = getelementptr inbounds double, ptr %1414, i64 0
  store double %1410, ptr %1416, 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 %1441

1417:                                             ; preds = %1377
  %1418 = landingpad { ptr, i32 }
          cleanup
  %1419 = extractvalue { ptr, i32 } %1418, 0
  store ptr %1419, ptr %35, align 8
  %1420 = extractvalue { ptr, i32 } %1418, 1
  store i32 %1420, ptr %36, align 4
  br label %1440

1421:                                             ; preds = %1382
  %1422 = landingpad { ptr, i32 }
          cleanup
  %1423 = extractvalue { ptr, i32 } %1422, 0
  store ptr %1423, ptr %35, align 8
  %1424 = extractvalue { ptr, i32 } %1422, 1
  store i32 %1424, ptr %36, align 4
  br label %1439

1425:                                             ; preds = %1389
  %1426 = landingpad { ptr, i32 }
          cleanup
  %1427 = extractvalue { ptr, i32 } %1426, 0
  store ptr %1427, ptr %35, align 8
  %1428 = extractvalue { ptr, i32 } %1426, 1
  store i32 %1428, ptr %36, align 4
  br label %1438

1429:                                             ; preds = %1398
  %1430 = landingpad { ptr, i32 }
          cleanup
  %1431 = extractvalue { ptr, i32 } %1430, 0
  store ptr %1431, ptr %35, align 8
  %1432 = extractvalue { ptr, i32 } %1430, 1
  store i32 %1432, ptr %36, align 4
  br label %1437

1433:                                             ; preds = %1406
  %1434 = landingpad { ptr, i32 }
          cleanup
  %1435 = extractvalue { ptr, i32 } %1434, 0
  store ptr %1435, ptr %35, align 8
  %1436 = extractvalue { ptr, i32 } %1434, 1
  store i32 %1436, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #7
  br label %1437

1437:                                             ; preds = %1433, %1429
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #7
  br label %1438

1438:                                             ; preds = %1437, %1425
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #7
  br label %1439

1439:                                             ; preds = %1438, %1421
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #7
  br label %1440

1440:                                             ; preds = %1439, %1417
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #7
  br label %1590

1441:                                             ; preds = %1415, %1372, %1367
  %1442 = load i8, ptr %13, align 1, !tbaa !9
  %1443 = zext i8 %1442 to i32
  %1444 = and i32 %1443, 128
  %1445 = icmp ne i32 %1444, 0
  br i1 %1445, label %1446, label %1530

1446:                                             ; preds = %1441
  %1447 = load i8, ptr %13, align 1, !tbaa !9
  %1448 = zext i8 %1447 to i32
  %1449 = and i32 %1448, 32
  %1450 = icmp ne i32 %1449, 0
  br i1 %1450, label %1451, label %1530

1451:                                             ; preds = %1446
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #7
  %1452 = load i32, ptr %21, align 4, !tbaa !12
  %1453 = sub nsw i32 %1452, 1
  %1454 = sext i32 %1453 to i64
  store i64 %1454, ptr %128, align 8, !tbaa !14
  %1455 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %128)
          to label %1456 unwind label %1506

1456:                                             ; preds = %1451
  %1457 = load i32, ptr %22, align 4, !tbaa !12
  %1458 = sub nsw i32 %1457, 2
  %1459 = sext i32 %1458 to i64
  %1460 = getelementptr inbounds double, ptr %1455, i64 %1459
  %1461 = load double, ptr %1460, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #7
  %1462 = load i32, ptr %21, align 4, !tbaa !12
  %1463 = sub nsw i32 %1462, 1
  %1464 = sext i32 %1463 to i64
  store i64 %1464, ptr %129, align 8, !tbaa !14
  %1465 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %129)
          to label %1466 unwind label %1510

1466:                                             ; preds = %1456
  %1467 = load i32, ptr %22, align 4, !tbaa !12
  %1468 = sub nsw i32 %1467, 3
  %1469 = sext i32 %1468 to i64
  %1470 = getelementptr inbounds double, ptr %1465, i64 %1469
  %1471 = load double, ptr %1470, align 8, !tbaa !10
  %1472 = fneg double %1471
  %1473 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1461, double %1472)
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #7
  %1474 = load i32, ptr %21, align 4, !tbaa !12
  %1475 = sub nsw i32 %1474, 2
  %1476 = sext i32 %1475 to i64
  store i64 %1476, ptr %130, align 8, !tbaa !14
  %1477 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %1478 unwind label %1514

1478:                                             ; preds = %1466
  %1479 = load i32, ptr %22, align 4, !tbaa !12
  %1480 = sub nsw i32 %1479, 1
  %1481 = sext i32 %1480 to i64
  %1482 = getelementptr inbounds double, ptr %1477, i64 %1481
  %1483 = load double, ptr %1482, align 8, !tbaa !10
  %1484 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1483, double %1473)
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #7
  %1485 = load i32, ptr %21, align 4, !tbaa !12
  %1486 = sub nsw i32 %1485, 3
  %1487 = sext i32 %1486 to i64
  store i64 %1487, ptr %131, align 8, !tbaa !14
  %1488 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %1489 unwind label %1518

1489:                                             ; preds = %1478
  %1490 = load i32, ptr %22, align 4, !tbaa !12
  %1491 = sub nsw i32 %1490, 1
  %1492 = sext i32 %1491 to i64
  %1493 = getelementptr inbounds double, ptr %1488, i64 %1492
  %1494 = load double, ptr %1493, align 8, !tbaa !10
  %1495 = fsub double %1484, %1494
  %1496 = fdiv double %1495, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #7
  %1497 = load i32, ptr %21, align 4, !tbaa !12
  %1498 = sub nsw i32 %1497, 1
  %1499 = sext i32 %1498 to i64
  store i64 %1499, ptr %132, align 8, !tbaa !14
  %1500 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %132)
          to label %1501 unwind label %1522

1501:                                             ; preds = %1489
  %1502 = load i32, ptr %22, align 4, !tbaa !12
  %1503 = sub nsw i32 %1502, 1
  %1504 = sext i32 %1503 to i64
  %1505 = getelementptr inbounds double, ptr %1500, i64 %1504
  store double %1496, ptr %1505, 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 %1530

1506:                                             ; preds = %1451
  %1507 = landingpad { ptr, i32 }
          cleanup
  %1508 = extractvalue { ptr, i32 } %1507, 0
  store ptr %1508, ptr %35, align 8
  %1509 = extractvalue { ptr, i32 } %1507, 1
  store i32 %1509, ptr %36, align 4
  br label %1529

1510:                                             ; preds = %1456
  %1511 = landingpad { ptr, i32 }
          cleanup
  %1512 = extractvalue { ptr, i32 } %1511, 0
  store ptr %1512, ptr %35, align 8
  %1513 = extractvalue { ptr, i32 } %1511, 1
  store i32 %1513, ptr %36, align 4
  br label %1528

1514:                                             ; preds = %1466
  %1515 = landingpad { ptr, i32 }
          cleanup
  %1516 = extractvalue { ptr, i32 } %1515, 0
  store ptr %1516, ptr %35, align 8
  %1517 = extractvalue { ptr, i32 } %1515, 1
  store i32 %1517, ptr %36, align 4
  br label %1527

1518:                                             ; preds = %1478
  %1519 = landingpad { ptr, i32 }
          cleanup
  %1520 = extractvalue { ptr, i32 } %1519, 0
  store ptr %1520, ptr %35, align 8
  %1521 = extractvalue { ptr, i32 } %1519, 1
  store i32 %1521, ptr %36, align 4
  br label %1526

1522:                                             ; preds = %1489
  %1523 = landingpad { ptr, i32 }
          cleanup
  %1524 = extractvalue { ptr, i32 } %1523, 0
  store ptr %1524, ptr %35, align 8
  %1525 = extractvalue { ptr, i32 } %1523, 1
  store i32 %1525, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #7
  br label %1526

1526:                                             ; preds = %1522, %1518
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #7
  br label %1527

1527:                                             ; preds = %1526, %1514
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #7
  br label %1528

1528:                                             ; preds = %1527, %1510
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #7
  br label %1529

1529:                                             ; preds = %1528, %1506
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #7
  br label %1590

1530:                                             ; preds = %1501, %1446, %1441
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #7
  %1531 = load i32, ptr %61, align 4, !tbaa !12
  %1532 = sext i32 %1531 to i64
  store i64 %1532, ptr %133, align 8, !tbaa !14
  %1533 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %133)
          to label %1534 unwind label %1573

1534:                                             ; preds = %1530
  %1535 = load i32, ptr %62, align 4, !tbaa !12
  %1536 = sext i32 %1535 to i64
  %1537 = getelementptr inbounds double, ptr %1533, i64 %1536
  %1538 = load double, ptr %1537, align 8, !tbaa !10
  %1539 = invoke noundef double @_ZSt3absd(double noundef %1538)
          to label %1540 unwind label %1573

1540:                                             ; preds = %1534
  %1541 = load double, ptr %52, align 8, !tbaa !10
  %1542 = fadd double %1541, %1539
  store double %1542, ptr %52, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #7
  %1543 = load i32, ptr %61, align 4, !tbaa !12
  %1544 = sext i32 %1543 to i64
  store i64 %1544, ptr %134, align 8, !tbaa !14
  %1545 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %1546 unwind label %1577

1546:                                             ; preds = %1540
  %1547 = load i32, ptr %62, align 4, !tbaa !12
  %1548 = sext i32 %1547 to i64
  %1549 = getelementptr inbounds double, ptr %1545, i64 %1548
  %1550 = load double, ptr %1549, align 8, !tbaa !10
  %1551 = invoke noundef double @_ZSt3absd(double noundef %1550)
          to label %1552 unwind label %1577

1552:                                             ; preds = %1546
  %1553 = load double, ptr %53, align 8, !tbaa !10
  %1554 = fadd double %1553, %1551
  store double %1554, ptr %53, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #7
  %1555 = load i32, ptr %61, align 4, !tbaa !12
  %1556 = sext i32 %1555 to i64
  store i64 %1556, ptr %135, align 8, !tbaa !14
  %1557 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %135)
          to label %1558 unwind label %1581

1558:                                             ; preds = %1552
  %1559 = load i32, ptr %62, align 4, !tbaa !12
  %1560 = sext i32 %1559 to i64
  %1561 = getelementptr inbounds double, ptr %1557, i64 %1560
  %1562 = load double, ptr %1561, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #7
  %1563 = load i32, ptr %61, align 4, !tbaa !12
  %1564 = sext i32 %1563 to i64
  store i64 %1564, ptr %136, align 8, !tbaa !14
  %1565 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(8) %136)
          to label %1566 unwind label %1585

1566:                                             ; preds = %1558
  %1567 = load i32, ptr %62, align 4, !tbaa !12
  %1568 = sext i32 %1567 to i64
  %1569 = getelementptr inbounds double, ptr %1565, i64 %1568
  store double %1562, ptr %1569, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #7
  br label %1570

1570:                                             ; preds = %1566
  %1571 = load i32, ptr %62, align 4, !tbaa !12
  %1572 = add nsw i32 %1571, 1
  store i32 %1572, ptr %62, align 4, !tbaa !12
  br label %419, !llvm.loop !34

1573:                                             ; preds = %1534, %1530
  %1574 = landingpad { ptr, i32 }
          cleanup
  %1575 = extractvalue { ptr, i32 } %1574, 0
  store ptr %1575, ptr %35, align 8
  %1576 = extractvalue { ptr, i32 } %1574, 1
  store i32 %1576, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #7
  br label %1590

1577:                                             ; preds = %1546, %1540
  %1578 = landingpad { ptr, i32 }
          cleanup
  %1579 = extractvalue { ptr, i32 } %1578, 0
  store ptr %1579, ptr %35, align 8
  %1580 = extractvalue { ptr, i32 } %1578, 1
  store i32 %1580, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #7
  br label %1590

1581:                                             ; preds = %1552
  %1582 = landingpad { ptr, i32 }
          cleanup
  %1583 = extractvalue { ptr, i32 } %1582, 0
  store ptr %1583, ptr %35, align 8
  %1584 = extractvalue { ptr, i32 } %1582, 1
  store i32 %1584, ptr %36, align 4
  br label %1589

1585:                                             ; preds = %1558
  %1586 = landingpad { ptr, i32 }
          cleanup
  %1587 = extractvalue { ptr, i32 } %1586, 0
  store ptr %1587, ptr %35, align 8
  %1588 = extractvalue { ptr, i32 } %1586, 1
  store i32 %1588, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #7
  br label %1589

1589:                                             ; preds = %1585, %1581
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #7
  br label %1590

1590:                                             ; preds = %1589, %1577, %1573, %1529, %1440, %1366, %1292, %1233, %1167, %1058, %992, %883, %797, %720, %666, %572, %518
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #7
  br label %1626

1591:                                             ; preds = %424
  %1592 = load double, ptr %52, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #7
  %1593 = load i32, ptr %61, align 4, !tbaa !12
  %1594 = sub nsw i32 %1593, 1
  %1595 = sext i32 %1594 to i64
  store i64 %1595, ptr %137, align 8, !tbaa !14
  %1596 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(8) %137)
          to label %1597 unwind label %1614

1597:                                             ; preds = %1591
  store double %1592, ptr %1596, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  %1598 = load double, ptr %53, align 8, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #7
  %1599 = load i32, ptr %61, align 4, !tbaa !12
  %1600 = sub nsw i32 %1599, 1
  %1601 = sext i32 %1600 to i64
  store i64 %1601, ptr %138, align 8, !tbaa !14
  %1602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 8 dereferenceable(8) %138)
          to label %1603 unwind label %1618

1603:                                             ; preds = %1597
  store double %1598, ptr %1602, align 8, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #7
  %1604 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %55)
          to label %1605 unwind label %1622

1605:                                             ; preds = %1603
  %1606 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %57)
          to label %1607 unwind label %1622

1607:                                             ; preds = %1605
  %1608 = fsub double %1604, %1606
  %1609 = invoke noundef double @_ZSt3absd(double noundef %1608)
          to label %1610 unwind label %1622

1610:                                             ; preds = %1607
  store double %1609, ptr %54, align 8, !tbaa !10
  br label %1611

1611:                                             ; preds = %1610
  %1612 = load i32, ptr %61, align 4, !tbaa !12
  %1613 = add nsw i32 %1612, 1
  store i32 %1613, ptr %61, align 4, !tbaa !12
  br label %412, !llvm.loop !35

1614:                                             ; preds = %1591
  %1615 = landingpad { ptr, i32 }
          cleanup
  %1616 = extractvalue { ptr, i32 } %1615, 0
  store ptr %1616, ptr %35, align 8
  %1617 = extractvalue { ptr, i32 } %1615, 1
  store i32 %1617, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #7
  br label %1626

1618:                                             ; preds = %1597
  %1619 = landingpad { ptr, i32 }
          cleanup
  %1620 = extractvalue { ptr, i32 } %1619, 0
  store ptr %1620, ptr %35, align 8
  %1621 = extractvalue { ptr, i32 } %1619, 1
  store i32 %1621, ptr %36, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #7
  br label %1626

1622:                                             ; preds = %1607, %1605, %1603
  %1623 = landingpad { ptr, i32 }
          cleanup
  %1624 = extractvalue { ptr, i32 } %1623, 0
  store ptr %1624, ptr %35, align 8
  %1625 = extractvalue { ptr, i32 } %1623, 1
  store i32 %1625, ptr %36, align 4
  br label %1626

1626:                                             ; preds = %1622, %1618, %1614, %1590
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  br label %1699

1627:                                             ; preds = %417
  %1628 = load i32, ptr %51, align 4, !tbaa !12
  %1629 = add nsw i32 %1628, 1
  store i32 %1629, ptr %51, align 4, !tbaa !12
  %1630 = load double, ptr %54, align 8, !tbaa !10
  %1631 = load double, ptr %19, align 8, !tbaa !10
  %1632 = fcmp olt double %1630, %1631
  br i1 %1632, label %1633, label %1634

1633:                                             ; preds = %1627
  store i32 8, ptr %60, align 4
  br label %1638

1634:                                             ; preds = %1627
  br label %1635

1635:                                             ; preds = %1634
  %1636 = load i32, ptr %59, align 4, !tbaa !12
  %1637 = add nsw i32 %1636, 1
  store i32 %1637, ptr %59, align 4, !tbaa !12
  br label %398, !llvm.loop !36

1638:                                             ; preds = %1633, %402
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #7
  br label %1639

1639:                                             ; preds = %1638
  %1640 = load i8, ptr %15, align 1, !tbaa !9
  %1641 = zext i8 %1640 to i32
  %1642 = and i32 %1641, 1
  %1643 = icmp ne i32 %1642, 0
  br i1 %1643, label %1644, label %1658

1644:                                             ; preds = %1639
  %1645 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.2)
          to label %1646 unwind label %1654

1646:                                             ; preds = %1644
  %1647 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1645, ptr noundef @_ZSt10scientificRSt8ios_base)
          to label %1648 unwind label %1654

1648:                                             ; preds = %1646
  %1649 = load i32, ptr %51, align 4, !tbaa !12
  %1650 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1647, i32 noundef %1649)
          to label %1651 unwind label %1654

1651:                                             ; preds = %1648
  %1652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1650, ptr noundef @.str.3)
          to label %1653 unwind label %1654

1653:                                             ; preds = %1651
  br label %1658

1654:                                             ; preds = %1669, %1666, %1664, %1662, %1651, %1648, %1646, %1644
  %1655 = landingpad { ptr, i32 }
          cleanup
  %1656 = extractvalue { ptr, i32 } %1655, 0
  store ptr %1656, ptr %35, align 8
  %1657 = extractvalue { ptr, i32 } %1655, 1
  store i32 %1657, ptr %36, align 4
  br label %1699

1658:                                             ; preds = %1653, %1639
  %1659 = load i32, ptr %51, align 4, !tbaa !12
  %1660 = load i32, ptr %20, align 4, !tbaa !12
  %1661 = icmp eq i32 %1659, %1660
  br i1 %1661, label %1662, label %1672

1662:                                             ; preds = %1658
  %1663 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.4)
          to label %1664 unwind label %1654

1664:                                             ; preds = %1662
  %1665 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1663, ptr noundef @_ZSt10scientificRSt8ios_base)
          to label %1666 unwind label %1654

1666:                                             ; preds = %1664
  %1667 = load i32, ptr %20, align 4, !tbaa !12
  %1668 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1665, i32 noundef %1667)
          to label %1669 unwind label %1654

1669:                                             ; preds = %1666
  %1670 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1668, ptr noundef @.str.5)
          to label %1671 unwind label %1654

1671:                                             ; preds = %1669
  br label %1672

1672:                                             ; preds = %1671, %1658
  %1673 = load i8, ptr %15, align 1, !tbaa !9
  %1674 = zext i8 %1673 to i32
  %1675 = and i32 %1674, 8
  %1676 = icmp ne i32 %1675, 0
  br i1 %1676, label %1677, label %1697

1677:                                             ; preds = %1672
  call void @llvm.lifetime.start.p0(i64 1, ptr %140) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %140) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %139, ptr noundef @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %140)
          to label %1678 unwind label %1683

1678:                                             ; preds = %1677
  call void @llvm.lifetime.start.p0(i64 1, ptr %142) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %142)
          to label %1679 unwind label %1687

1679:                                             ; preds = %1678
  %1680 = load ptr, ptr %16, align 8, !tbaa !5
  %1681 = 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) %143, ptr noundef %139, ptr noundef %141, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %1680, ptr noundef nonnull align 8 dereferenceable(24) %1681, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %1682 unwind label %1691

1682:                                             ; preds = %1679
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %140) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %140) #7
  br label %1697

1683:                                             ; preds = %1677
  %1684 = landingpad { ptr, i32 }
          cleanup
  %1685 = extractvalue { ptr, i32 } %1684, 0
  store ptr %1685, ptr %35, align 8
  %1686 = extractvalue { ptr, i32 } %1684, 1
  store i32 %1686, ptr %36, align 4
  br label %1696

1687:                                             ; preds = %1678
  %1688 = landingpad { ptr, i32 }
          cleanup
  %1689 = extractvalue { ptr, i32 } %1688, 0
  store ptr %1689, ptr %35, align 8
  %1690 = extractvalue { ptr, i32 } %1688, 1
  store i32 %1690, ptr %36, align 4
  br label %1695

1691:                                             ; preds = %1679
  %1692 = landingpad { ptr, i32 }
          cleanup
  %1693 = extractvalue { ptr, i32 } %1692, 0
  store ptr %1693, ptr %35, align 8
  %1694 = extractvalue { ptr, i32 } %1692, 1
  store i32 %1694, ptr %36, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #7
  br label %1695

1695:                                             ; preds = %1691, %1687
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %142) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #7
  br label %1696

1696:                                             ; preds = %1695, %1683
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %140) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %140) #7
  br label %1699

1697:                                             ; preds = %1682, %1672
  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
  %1698 = load i1, ptr %29, align 1
  br i1 %1698, label %1705, label %1704

1699:                                             ; preds = %1696, %1654, %1626
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %57) #7
  br label %1700

1700:                                             ; preds = %1699, %407
  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 %1701

1701:                                             ; preds = %1700, %403
  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 %1702

1702:                                             ; preds = %1701, %388, %293, %201
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #7
  br label %1703

1703:                                             ; preds = %1702, %197
  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 %1706

1704:                                             ; preds = %1697
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #7
  br label %1705

1705:                                             ; preds = %1704, %1697
  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

1706:                                             ; preds = %1703
  %1707 = load ptr, ptr %35, align 8
  %1708 = load i32, ptr %36, align 4
  %1709 = insertvalue { ptr, i32 } poison, ptr %1707, 0
  %1710 = insertvalue { ptr, i32 } %1709, i32 %1708, 1
  resume { ptr, i32 } %1710
}

; 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 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 192}
!30 = !{!17, !6, i64 208}
!31 = !{!17, !6, i64 224}
!32 = !{!17, !6, i64 216}
!33 = !{!17, !6, i64 200}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !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.2 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [77 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

; 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 uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP12solveLAPLACEEhhhRNS0_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 %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::allocator", align 1
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::allocator", align 1
  %116 = tail call noundef i64 @_ZNK3cda4math10containers6MatrixIdE4rowsEv(ptr noundef nonnull align 8 dereferenceable(40) %7)
  %117 = trunc i64 %116 to i32
  %118 = tail call noundef i64 @_ZNK3cda4math10containers6MatrixIdE7columnsEv(ptr noundef nonnull align 8 dereferenceable(40) %7)
  %119 = trunc i64 %118 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %120 = add i32 %119, -1
  %121 = sext i32 %120 to i64
  store i64 %121, ptr %11, align 8, !tbaa !5
  %122 = 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)
  %123 = load double, ptr %122, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  store i64 0, ptr %12, align 8, !tbaa !5
  %124 = 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)
  %125 = load double, ptr %124, align 8, !tbaa !9
  %126 = fsub double %123, %125
  %127 = sitofp i32 %120 to double
  %128 = fdiv double %126, %127
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %129 = add i32 %117, -1
  %130 = sext i32 %129 to i64
  store i64 %130, ptr %13, align 8, !tbaa !5
  %131 = 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)
  %132 = load double, ptr %131, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  store i64 0, ptr %14, align 8, !tbaa !5
  %133 = 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)
  %134 = load double, ptr %133, align 8, !tbaa !9
  %135 = fsub double %132, %134
  %136 = sitofp i32 %129 to double
  %137 = fdiv double %135, %136
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  %sext = shl i64 %116, 32
  %138 = ashr exact i64 %sext, 32
  store i64 %138, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %sext272 = shl i64 %118, 32
  %139 = ashr exact i64 %sext272, 32
  store i64 %139, 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) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  store i64 %138, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  store i64 %139, 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 %140 unwind label %176

140:                                              ; preds = %10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  %141 = 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 %142 unwind label %178

142:                                              ; preds = %140
  %143 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %141)
          to label %.preheader315 unwind label %178

.preheader315:                                    ; preds = %142
  %144 = icmp sgt i32 %119, 0
  br i1 %144, label %.lr.ph, label %.preheader314

.lr.ph:                                           ; preds = %.preheader315
  %145 = zext i8 %2 to i32
  %146 = and i32 %145, 4
  %.not304 = icmp eq i32 %146, 0
  %147 = getelementptr inbounds i8, ptr %1, i64 176
  %148 = and i32 %145, 8
  %.not305 = icmp eq i32 %148, 0
  %149 = getelementptr inbounds i8, ptr %1, i64 184
  br i1 %.not304, label %.lr.ph.split.us, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph
  br i1 %.not305, label %.preheader314, label %.lr.ph.split.us.split.preheader

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

.lr.ph.split.us.split:                            ; preds = %.lr.ph.split.us.split.preheader, %156
  %indvars.iv446 = phi i64 [ 0, %.lr.ph.split.us.split.preheader ], [ %indvars.iv.next447, %156 ]
  %150 = load ptr, ptr %149, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  store i64 %indvars.iv446, ptr %23, align 8, !tbaa !5
  %151 = 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)
  %152 = load double, ptr %151, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  store i64 %130, ptr %24, align 8, !tbaa !5
  %153 = 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)
  %154 = load double, ptr %153, align 8, !tbaa !9
  %155 = invoke noundef double %150(double noundef %152, double noundef %154)
          to label %156 unwind label %.split.us

156:                                              ; preds = %.lr.ph.split.us.split
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  store i64 %130, ptr %25, align 8, !tbaa !5
  %157 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %158 = getelementptr inbounds double, ptr %157, i64 %indvars.iv446
  store double %155, ptr %158, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  %indvars.iv.next447 = add nuw nsw i64 %indvars.iv446, 1
  %exitcond450.not = icmp eq i64 %indvars.iv.next447, %wide.trip.count449
  br i1 %exitcond450.not, label %.preheader314, label %.lr.ph.split.us.split, !llvm.loop !19

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

.lr.ph.split:                                     ; preds = %.lr.ph
  %wide.trip.count444 = and i64 %118, 2147483647
  br i1 %.not305, label %.lr.ph.split.split.us, label %.lr.ph.split.split

.lr.ph.split.split.us:                            ; preds = %.lr.ph.split, %166
  %indvars.iv441 = phi i64 [ %indvars.iv.next442, %166 ], [ 0, %.lr.ph.split ]
  %160 = load ptr, ptr %147, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  store i64 %indvars.iv441, ptr %20, align 8, !tbaa !5
  %161 = 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)
  %162 = load double, ptr %161, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store i64 0, ptr %21, align 8, !tbaa !5
  %163 = 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)
  %164 = load double, ptr %163, align 8, !tbaa !9
  %165 = invoke noundef double %160(double noundef %162, double noundef %164)
          to label %166 unwind label %.split347.us

166:                                              ; preds = %.lr.ph.split.split.us
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  store i64 0, ptr %22, align 8, !tbaa !5
  %167 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %168 = getelementptr inbounds double, ptr %167, i64 %indvars.iv441
  store double %165, ptr %168, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  %indvars.iv.next442 = add nuw nsw i64 %indvars.iv441, 1
  %exitcond445.not = icmp eq i64 %indvars.iv.next442, %wide.trip.count444
  br i1 %exitcond445.not, label %.preheader314, label %.lr.ph.split.split.us, !llvm.loop !19

.split347.us:                                     ; preds = %.lr.ph.split.split.us
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %196

.preheader314:                                    ; preds = %197, %166, %156, %.lr.ph.split.us, %.preheader315
  %170 = icmp sgt i32 %117, 0
  br i1 %170, label %.lr.ph350, label %._crit_edge

.lr.ph350:                                        ; preds = %.preheader314
  %171 = zext i8 %2 to i32
  %172 = and i32 %171, 1
  %.not300 = icmp eq i32 %172, 0
  %173 = getelementptr inbounds i8, ptr %1, i64 160
  %174 = and i32 %171, 2
  %.not301 = icmp eq i32 %174, 0
  %175 = getelementptr inbounds i8, ptr %1, i64 168
  %wide.trip.count454 = and i64 %116, 2147483647
  br label %203

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

178:                                              ; preds = %142, %140
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %646

.lr.ph.split.split:                               ; preds = %.lr.ph.split, %197
  %indvars.iv = phi i64 [ %indvars.iv.next, %197 ], [ 0, %.lr.ph.split ]
  %180 = load ptr, ptr %147, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  store i64 %indvars.iv, ptr %20, align 8, !tbaa !5
  %181 = 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)
  %182 = load double, ptr %181, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store i64 0, ptr %21, align 8, !tbaa !5
  %183 = 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)
  %184 = load double, ptr %183, align 8, !tbaa !9
  %185 = invoke noundef double %180(double noundef %182, double noundef %184)
          to label %186 unwind label %.split347

186:                                              ; preds = %.lr.ph.split.split
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  store i64 0, ptr %22, align 8, !tbaa !5
  %187 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %188 = getelementptr inbounds double, ptr %187, i64 %indvars.iv
  store double %185, ptr %188, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  %189 = load ptr, ptr %149, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  store i64 %indvars.iv, ptr %23, align 8, !tbaa !5
  %190 = 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)
  %191 = load double, ptr %190, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #7
  store i64 %130, ptr %24, align 8, !tbaa !5
  %192 = 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)
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = invoke noundef double %189(double noundef %191, double noundef %193)
          to label %197 unwind label %.split

.split347:                                        ; preds = %.lr.ph.split.split
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %196

196:                                              ; preds = %.split347.us, %.split347
  %.us-phi348 = phi { ptr, i32 } [ %195, %.split347 ], [ %169, %.split347.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  br label %646

197:                                              ; preds = %186
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  store i64 %130, ptr %25, align 8, !tbaa !5
  %198 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %199 = getelementptr inbounds double, ptr %198, i64 %indvars.iv
  store double %194, ptr %199, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count444
  br i1 %exitcond.not, label %.preheader314, label %.lr.ph.split.split, !llvm.loop !19

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

201:                                              ; preds = %.split.us, %.split
  %.us-phi = phi { ptr, i32 } [ %200, %.split ], [ %159, %.split.us ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  br label %646

._crit_edge:                                      ; preds = %228, %.preheader314
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #7
  %sext273 = add i64 %sext272, -8589934592
  %202 = ashr exact i64 %sext273, 32
  store i64 %202, 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 %229 unwind label %602

203:                                              ; preds = %.lr.ph350, %228
  %indvars.iv451 = phi i64 [ 0, %.lr.ph350 ], [ %indvars.iv.next452, %228 ]
  br i1 %.not300, label %215, label %204

204:                                              ; preds = %203
  %205 = load ptr, ptr %173, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #7
  store i64 0, ptr %26, align 8, !tbaa !5
  %206 = 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)
  %207 = load double, ptr %206, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  store i64 %indvars.iv451, ptr %27, align 8, !tbaa !5
  %208 = 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)
  %209 = load double, ptr %208, align 8, !tbaa !9
  %210 = invoke noundef double %205(double noundef %207, double noundef %209)
          to label %211 unwind label %213

211:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #7
  store i64 %indvars.iv451, ptr %28, align 8, !tbaa !5
  %212 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %28)
  store double %210, ptr %212, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  br label %215

213:                                              ; preds = %204
  %214 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #7
  br label %646

215:                                              ; preds = %211, %203
  br i1 %.not301, label %228, label %216

216:                                              ; preds = %215
  %217 = load ptr, ptr %175, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #7
  store i64 %121, ptr %29, align 8, !tbaa !5
  %218 = 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)
  %219 = load double, ptr %218, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  store i64 %indvars.iv451, ptr %30, align 8, !tbaa !5
  %220 = 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)
  %221 = load double, ptr %220, align 8, !tbaa !9
  %222 = invoke noundef double %217(double noundef %219, double noundef %221)
          to label %223 unwind label %226

223:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #7
  store i64 %indvars.iv451, ptr %31, align 8, !tbaa !5
  %224 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %31)
  %225 = getelementptr inbounds double, ptr %224, i64 %121
  store double %222, ptr %225, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br label %228

226:                                              ; preds = %216
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  br label %646

228:                                              ; preds = %215, %223
  %indvars.iv.next452 = add nuw nsw i64 %indvars.iv451, 1
  %exitcond455.not = icmp eq i64 %indvars.iv.next452, %wide.trip.count454
  br i1 %exitcond455.not, label %._crit_edge, label %203, !llvm.loop !24

229:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %34) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #7
  store i64 %202, 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 %230 unwind label %604

230:                                              ; preds = %229
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  %231 = icmp sgt i32 %9, 0
  br i1 %231, label %.preheader313.lr.ph, label %._crit_edge394

.preheader313.lr.ph:                              ; preds = %230
  %232 = icmp sgt i32 %117, 2
  %233 = zext i8 %2 to i32
  %234 = and i32 %233, 16
  %.not277 = icmp eq i32 %234, 0
  %235 = getelementptr inbounds i8, ptr %1, i64 160
  %236 = fmul double %137, %137
  %237 = fmul double %236, 2.000000e+00
  %238 = fmul double %128, %128
  %239 = call double @llvm.fmuladd.f64(double %137, double %137, double %238)
  %240 = fmul double %239, 2.000000e+00
  %241 = zext i8 %3 to i32
  %242 = and i32 %241, 1
  %.not278 = icmp eq i32 %242, 0
  %243 = getelementptr inbounds i8, ptr %1, i64 192
  %244 = and i32 %233, 64
  %.not279 = icmp eq i32 %244, 0
  %245 = getelementptr inbounds i8, ptr %1, i64 176
  %246 = fmul double %238, 2.000000e+00
  %247 = and i32 %241, 4
  %.not280 = icmp eq i32 %247, 0
  %248 = getelementptr inbounds i8, ptr %1, i64 208
  %249 = and i32 %241, 16
  %.not281 = icmp eq i32 %249, 0
  %250 = getelementptr inbounds i8, ptr %1, i64 224
  %.not282 = icmp sgt i8 %2, -1
  %sext283 = add i64 %sext, -8589934592
  %251 = ashr exact i64 %sext283, 32
  %252 = getelementptr inbounds i8, ptr %1, i64 184
  %253 = and i32 %241, 8
  %.not284 = icmp eq i32 %253, 0
  %254 = getelementptr inbounds i8, ptr %1, i64 216
  %255 = and i32 %233, 32
  %.not286 = icmp eq i32 %255, 0
  %256 = getelementptr inbounds i8, ptr %1, i64 168
  %257 = and i32 %241, 2
  %.not287 = icmp eq i32 %257, 0
  %258 = getelementptr inbounds i8, ptr %1, i64 200
  %259 = and i32 %233, 80
  %brmerge.not = icmp eq i32 %259, 80
  %260 = and i32 %233, 96
  %brmerge310.not = icmp eq i32 %260, 96
  %sext294 = add i64 %sext272, -12884901888
  %261 = ashr exact i64 %sext294, 29
  %brmerge311 = or i1 %.not282, %.not277
  %sext296 = add i64 %sext, -12884901888
  %262 = ashr exact i64 %sext296, 32
  %brmerge312 = or i1 %.not282, %.not286
  br i1 %232, label %.preheader313.lr.ph.split.us, label %._crit_edge394

.preheader313.lr.ph.split.us:                     ; preds = %.preheader313.lr.ph
  %263 = icmp sgt i32 %119, 2
  %wide.trip.count469 = zext i32 %129 to i64
  br i1 %263, label %.preheader313.us.us.preheader, label %.preheader313.us

.preheader313.us.us.preheader:                    ; preds = %.preheader313.lr.ph.split.us
  %wide.trip.count464 = zext i32 %120 to i64
  br label %.preheader313.us.us

.preheader313.us.us:                              ; preds = %.preheader313.us.us.preheader, %._crit_edge358.split.us.us.us
  %.0248393.us.us = phi i32 [ %576, %._crit_edge358.split.us.us.us ], [ 0, %.preheader313.us.us.preheader ]
  br label %.preheader.us.us.us

.preheader.us.us.us:                              ; preds = %267, %.preheader313.us.us
  %indvars.iv466 = phi i64 [ %indvars.iv.next467, %267 ], [ 1, %.preheader313.us.us ]
  %indvars.iv.next467 = add nuw nsw i64 %indvars.iv466, 1
  %264 = add nsw i64 %indvars.iv466, -1
  br label %270

265:                                              ; preds = %._crit_edge355.us.us.us
  %266 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %267 unwind label %.split361.us.split.us.split.us

267:                                              ; preds = %265
  %268 = fsub double %575, %266
  %269 = call noundef double @_ZSt3absd(double noundef %268)
  %exitcond470.not = icmp eq i64 %indvars.iv.next467, %wide.trip.count469
  br i1 %exitcond470.not, label %._crit_edge358.split.us.us.us, label %.preheader.us.us.us, !llvm.loop !25

270:                                              ; preds = %557, %.preheader.us.us.us
  %indvars.iv461 = phi i64 [ %indvars.iv.next462, %557 ], [ 1, %.preheader.us.us.us ]
  %.0250352.us.us.us = phi double [ %567, %557 ], [ 0.000000e+00, %.preheader.us.us.us ]
  %.0251351.us.us.us = phi double [ %562, %557 ], [ 0.000000e+00, %.preheader.us.us.us ]
  br i1 %.not277, label %292, label %271

271:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #7
  store i64 %indvars.iv.next467, ptr %36, align 8, !tbaa !5
  %272 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %36)
  %273 = load double, ptr %272, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #7
  store i64 %264, ptr %37, align 8, !tbaa !5
  %274 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %37)
  %275 = load double, ptr %274, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #7
  store i64 %indvars.iv466, ptr %38, align 8, !tbaa !5
  %276 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %38)
  %277 = getelementptr inbounds i8, ptr %276, i64 8
  %278 = load double, ptr %277, align 8, !tbaa !9
  %279 = load ptr, ptr %235, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #7
  store i64 0, ptr %39, align 8, !tbaa !5
  %280 = 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)
  %281 = load double, ptr %280, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #7
  store i64 %indvars.iv466, ptr %40, align 8, !tbaa !5
  %282 = 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)
  %283 = load double, ptr %282, align 8, !tbaa !9
  %284 = invoke noundef double %279(double noundef %281, double noundef %283)
          to label %285 unwind label %.split365.us.split.us.split.us

285:                                              ; preds = %271
  %286 = fadd double %273, %275
  %287 = call double @llvm.fmuladd.f64(double %128, double %284, double %278)
  %288 = fmul double %237, %287
  %289 = call double @llvm.fmuladd.f64(double %238, double %286, double %288)
  %290 = fdiv double %289, %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #7
  store i64 %indvars.iv466, ptr %41, align 8, !tbaa !5
  %291 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %41)
  store double %290, ptr %291, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #7
  br label %292

292:                                              ; preds = %285, %270
  br i1 %.not278, label %305, label %293

293:                                              ; preds = %292
  %294 = load ptr, ptr %243, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #7
  store i64 %indvars.iv466, ptr %42, align 8, !tbaa !5
  %295 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %42)
  %296 = getelementptr inbounds i8, ptr %295, i64 8
  %297 = load double, ptr %296, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #7
  store i64 %264, ptr %43, align 8, !tbaa !5
  %298 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %43)
  %299 = load double, ptr %298, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #7
  store i64 %indvars.iv.next467, ptr %44, align 8, !tbaa !5
  %300 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %301 = load double, ptr %300, align 8, !tbaa !9
  %302 = invoke noundef double %294(double noundef %297, double noundef %299, double noundef %301)
          to label %303 unwind label %.split368.us.split.us.split.us

303:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #7
  store i64 %indvars.iv466, ptr %45, align 8, !tbaa !5
  %304 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %45)
  store double %302, ptr %304, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #7
  br label %305

305:                                              ; preds = %303, %292
  br i1 %.not279, label %332, label %306

306:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #7
  store i64 1, ptr %46, align 8, !tbaa !5
  %307 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %308 = getelementptr inbounds double, ptr %307, i64 %indvars.iv461
  %309 = load double, ptr %308, align 8, !tbaa !9
  %310 = load ptr, ptr %245, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #7
  store i64 %indvars.iv461, ptr %47, align 8, !tbaa !5
  %311 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %47)
  %312 = load double, ptr %311, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #7
  store i64 0, ptr %48, align 8, !tbaa !5
  %313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %314 = load double, ptr %313, align 8, !tbaa !9
  %315 = invoke noundef double %310(double noundef %312, double noundef %314)
          to label %316 unwind label %.split371.us.split.us.split.us

316:                                              ; preds = %306
  %317 = call double @llvm.fmuladd.f64(double %137, double %315, double %309)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #7
  store i64 0, ptr %49, align 8, !tbaa !5
  %318 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
  %319 = getelementptr inbounds double, ptr %318, i64 %indvars.iv461
  %320 = getelementptr inbounds i8, ptr %319, i64 8
  %321 = load double, ptr %320, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #7
  store i64 0, ptr %50, align 8, !tbaa !5
  %322 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %50)
  %323 = getelementptr double, ptr %322, i64 %indvars.iv461
  %324 = getelementptr i8, ptr %323, i64 -8
  %325 = load double, ptr %324, align 8, !tbaa !9
  %326 = fadd double %321, %325
  %327 = fmul double %236, %326
  %328 = call double @llvm.fmuladd.f64(double %246, double %317, double %327)
  %329 = fdiv double %328, %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #7
  store i64 0, ptr %51, align 8, !tbaa !5
  %330 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %51)
  %331 = getelementptr inbounds double, ptr %330, i64 %indvars.iv461
  store double %329, ptr %331, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  br label %332

332:                                              ; preds = %316, %305
  br i1 %.not280, label %350, label %333

333:                                              ; preds = %332
  %334 = load ptr, ptr %248, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #7
  store i64 0, ptr %52, align 8, !tbaa !5
  %335 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %52)
  %336 = getelementptr double, ptr %335, i64 %indvars.iv461
  %337 = getelementptr i8, ptr %336, i64 -8
  %338 = load double, ptr %337, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #7
  store i64 0, ptr %53, align 8, !tbaa !5
  %339 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %53)
  %340 = getelementptr inbounds double, ptr %339, i64 %indvars.iv461
  %341 = getelementptr inbounds i8, ptr %340, i64 8
  %342 = load double, ptr %341, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #7
  store i64 1, ptr %54, align 8, !tbaa !5
  %343 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %54)
  %344 = getelementptr inbounds double, ptr %343, i64 %indvars.iv461
  %345 = load double, ptr %344, align 8, !tbaa !9
  %346 = invoke noundef double %334(double noundef %338, double noundef %342, double noundef %345)
          to label %347 unwind label %.split374.us.split.us.split.us

347:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #7
  store i64 0, ptr %55, align 8, !tbaa !5
  %348 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %55)
  %349 = getelementptr inbounds double, ptr %348, i64 %indvars.iv461
  store double %346, ptr %349, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #7
  br label %350

350:                                              ; preds = %347, %332
  br i1 %.not281, label %371, label %351

351:                                              ; preds = %350
  %352 = load ptr, ptr %250, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #7
  store i64 %indvars.iv466, ptr %56, align 8, !tbaa !5
  %353 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %56)
  %354 = getelementptr double, ptr %353, i64 %indvars.iv461
  %355 = getelementptr i8, ptr %354, i64 -8
  %356 = load double, ptr %355, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #7
  store i64 %indvars.iv466, ptr %57, align 8, !tbaa !5
  %357 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %57)
  %358 = getelementptr inbounds double, ptr %357, i64 %indvars.iv461
  %359 = getelementptr inbounds i8, ptr %358, i64 8
  %360 = load double, ptr %359, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #7
  store i64 %264, ptr %58, align 8, !tbaa !5
  %361 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %58)
  %362 = getelementptr inbounds double, ptr %361, i64 %indvars.iv461
  %363 = load double, ptr %362, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #7
  store i64 %indvars.iv.next467, ptr %59, align 8, !tbaa !5
  %364 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %365 = getelementptr inbounds double, ptr %364, i64 %indvars.iv461
  %366 = load double, ptr %365, align 8, !tbaa !9
  %367 = invoke noundef double %352(double noundef %356, double noundef %360, double noundef %363, double noundef %366)
          to label %368 unwind label %.split377.us.split.us.split.us

368:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #7
  store i64 %indvars.iv466, ptr %60, align 8, !tbaa !5
  %369 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %60)
  %370 = getelementptr inbounds double, ptr %369, i64 %indvars.iv461
  store double %367, ptr %370, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #7
  br label %393

371:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #7
  store i64 %indvars.iv.next467, ptr %61, align 8, !tbaa !5
  %372 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %61)
  %373 = getelementptr inbounds double, ptr %372, i64 %indvars.iv461
  %374 = load double, ptr %373, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #7
  store i64 %264, ptr %62, align 8, !tbaa !5
  %375 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %62)
  %376 = getelementptr inbounds double, ptr %375, i64 %indvars.iv461
  %377 = load double, ptr %376, align 8, !tbaa !9
  %378 = fadd double %374, %377
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #7
  store i64 %indvars.iv466, ptr %63, align 8, !tbaa !5
  %379 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %380 = getelementptr inbounds double, ptr %379, i64 %indvars.iv461
  %381 = getelementptr inbounds i8, ptr %380, i64 8
  %382 = load double, ptr %381, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #7
  store i64 %indvars.iv466, ptr %64, align 8, !tbaa !5
  %383 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %64)
  %384 = getelementptr double, ptr %383, i64 %indvars.iv461
  %385 = getelementptr i8, ptr %384, i64 -8
  %386 = load double, ptr %385, align 8, !tbaa !9
  %387 = fadd double %382, %386
  %388 = fmul double %236, %387
  %389 = call double @llvm.fmuladd.f64(double %238, double %378, double %388)
  %390 = fdiv double %389, %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #7
  store i64 %indvars.iv466, ptr %65, align 8, !tbaa !5
  %391 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %65)
  %392 = getelementptr inbounds double, ptr %391, i64 %indvars.iv461
  store double %390, ptr %392, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #7
  br label %393

393:                                              ; preds = %371, %368
  br i1 %.not282, label %420, label %394

394:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #7
  store i64 %251, ptr %66, align 8, !tbaa !5
  %395 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %66)
  %396 = getelementptr inbounds double, ptr %395, i64 %indvars.iv461
  %397 = load double, ptr %396, align 8, !tbaa !9
  %398 = load ptr, ptr %252, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #7
  store i64 %indvars.iv461, ptr %67, align 8, !tbaa !5
  %399 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %67)
  %400 = load double, ptr %399, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #7
  store i64 %130, ptr %68, align 8, !tbaa !5
  %401 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %68)
  %402 = load double, ptr %401, align 8, !tbaa !9
  %403 = invoke noundef double %398(double noundef %400, double noundef %402)
          to label %404 unwind label %.split380.us.split.us.split.us

404:                                              ; preds = %394
  %405 = call double @llvm.fmuladd.f64(double %137, double %403, double %397)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #7
  store i64 %130, ptr %69, align 8, !tbaa !5
  %406 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %69)
  %407 = getelementptr inbounds double, ptr %406, i64 %indvars.iv461
  %408 = getelementptr inbounds i8, ptr %407, i64 8
  %409 = load double, ptr %408, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #7
  store i64 %130, ptr %70, align 8, !tbaa !5
  %410 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %70)
  %411 = getelementptr double, ptr %410, i64 %indvars.iv461
  %412 = getelementptr i8, ptr %411, i64 -8
  %413 = load double, ptr %412, align 8, !tbaa !9
  %414 = fadd double %409, %413
  %415 = fmul double %236, %414
  %416 = call double @llvm.fmuladd.f64(double %246, double %405, double %415)
  %417 = fdiv double %416, %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #7
  store i64 %130, ptr %71, align 8, !tbaa !5
  %418 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
  %419 = getelementptr inbounds double, ptr %418, i64 %indvars.iv461
  store double %417, ptr %419, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #7
  br label %420

420:                                              ; preds = %404, %393
  br i1 %.not284, label %438, label %421

421:                                              ; preds = %420
  %422 = load ptr, ptr %254, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #7
  store i64 %130, ptr %72, align 8, !tbaa !5
  %423 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %72)
  %424 = getelementptr double, ptr %423, i64 %indvars.iv461
  %425 = getelementptr i8, ptr %424, i64 -8
  %426 = load double, ptr %425, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #7
  store i64 %130, ptr %73, align 8, !tbaa !5
  %427 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %73)
  %428 = getelementptr inbounds double, ptr %427, i64 %indvars.iv461
  %429 = getelementptr inbounds i8, ptr %428, i64 8
  %430 = load double, ptr %429, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #7
  store i64 %251, ptr %74, align 8, !tbaa !5
  %431 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %74)
  %432 = getelementptr inbounds double, ptr %431, i64 %indvars.iv461
  %433 = load double, ptr %432, align 8, !tbaa !9
  %434 = invoke noundef double %422(double noundef %426, double noundef %430, double noundef %433)
          to label %435 unwind label %.split383.us.split.us.split.us

435:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #7
  store i64 %130, ptr %75, align 8, !tbaa !5
  %436 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %75)
  %437 = getelementptr inbounds double, ptr %436, i64 %indvars.iv461
  store double %434, ptr %437, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #7
  br label %438

438:                                              ; preds = %435, %420
  br i1 %.not286, label %463, label %439

439:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #7
  store i64 %indvars.iv.next467, ptr %76, align 8, !tbaa !5
  %440 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %441 = getelementptr inbounds double, ptr %440, i64 %121
  %442 = load double, ptr %441, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #7
  store i64 %264, ptr %77, align 8, !tbaa !5
  %443 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %77)
  %444 = getelementptr inbounds double, ptr %443, i64 %121
  %445 = load double, ptr %444, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #7
  store i64 %indvars.iv466, ptr %78, align 8, !tbaa !5
  %446 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %78)
  %447 = getelementptr inbounds double, ptr %446, i64 %202
  %448 = load double, ptr %447, align 8, !tbaa !9
  %449 = load ptr, ptr %256, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #7
  store i64 %121, ptr %79, align 8, !tbaa !5
  %450 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %79)
  %451 = load double, ptr %450, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #7
  store i64 %indvars.iv466, ptr %80, align 8, !tbaa !5
  %452 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %453 = load double, ptr %452, align 8, !tbaa !9
  %454 = invoke noundef double %449(double noundef %451, double noundef %453)
          to label %455 unwind label %.split386.us.split.us.split.us

455:                                              ; preds = %439
  %456 = fadd double %442, %445
  %457 = call double @llvm.fmuladd.f64(double %128, double %454, double %448)
  %458 = fmul double %237, %457
  %459 = call double @llvm.fmuladd.f64(double %238, double %456, double %458)
  %460 = fdiv double %459, %240
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #7
  store i64 %indvars.iv466, ptr %81, align 8, !tbaa !5
  %461 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %81)
  %462 = getelementptr inbounds double, ptr %461, i64 %121
  store double %460, ptr %462, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #7
  br label %463

463:                                              ; preds = %455, %438
  br i1 %.not287, label %479, label %464

464:                                              ; preds = %463
  %465 = load ptr, ptr %258, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #7
  store i64 %indvars.iv466, ptr %82, align 8, !tbaa !5
  %466 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %82)
  %467 = getelementptr inbounds double, ptr %466, i64 %202
  %468 = load double, ptr %467, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #7
  store i64 %264, ptr %83, align 8, !tbaa !5
  %469 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %470 = getelementptr inbounds double, ptr %469, i64 %121
  %471 = load double, ptr %470, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #7
  store i64 %indvars.iv.next467, ptr %84, align 8, !tbaa !5
  %472 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %84)
  %473 = getelementptr inbounds double, ptr %472, i64 %121
  %474 = load double, ptr %473, align 8, !tbaa !9
  %475 = invoke noundef double %465(double noundef %468, double noundef %471, double noundef %474)
          to label %476 unwind label %.split389.us.split.us.split.us

476:                                              ; preds = %464
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #7
  store i64 %indvars.iv466, ptr %85, align 8, !tbaa !5
  %477 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %85)
  %478 = getelementptr inbounds double, ptr %477, i64 %121
  store double %475, ptr %478, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #7
  br label %479

479:                                              ; preds = %476, %463
  br i1 %brmerge.not, label %480, label %497

480:                                              ; preds = %479
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #7
  store i64 0, ptr %86, align 8, !tbaa !5
  %481 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %86)
  %482 = getelementptr inbounds i8, ptr %481, i64 8
  %483 = load double, ptr %482, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #7
  store i64 0, ptr %87, align 8, !tbaa !5
  %484 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %485 = getelementptr inbounds i8, ptr %484, i64 16
  %486 = load double, ptr %485, align 8, !tbaa !9
  %487 = fneg double %486
  %488 = call double @llvm.fmuladd.f64(double %483, double 2.000000e+00, double %487)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #7
  store i64 1, ptr %88, align 8, !tbaa !5
  %489 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %88)
  %490 = load double, ptr %489, align 8, !tbaa !9
  %491 = call double @llvm.fmuladd.f64(double %490, double 2.000000e+00, double %488)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #7
  store i64 2, ptr %89, align 8, !tbaa !5
  %492 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %493 = load double, ptr %492, align 8, !tbaa !9
  %494 = fsub double %491, %493
  %495 = fmul double %494, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #7
  store i64 0, ptr %90, align 8, !tbaa !5
  %496 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %90)
  store double %495, ptr %496, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #7
  br label %497

497:                                              ; preds = %480, %479
  br i1 %brmerge310.not, label %498, label %518

498:                                              ; preds = %497
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #7
  store i64 0, ptr %91, align 8, !tbaa !5
  %499 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %91)
  %500 = getelementptr inbounds double, ptr %499, i64 %202
  %501 = load double, ptr %500, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #7
  store i64 0, ptr %92, align 8, !tbaa !5
  %502 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %92)
  %503 = getelementptr inbounds i8, ptr %502, i64 %261
  %504 = load double, ptr %503, align 8, !tbaa !9
  %505 = fneg double %504
  %506 = call double @llvm.fmuladd.f64(double %501, double 2.000000e+00, double %505)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %93) #7
  store i64 1, ptr %93, align 8, !tbaa !5
  %507 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
  %508 = getelementptr inbounds double, ptr %507, i64 %121
  %509 = load double, ptr %508, align 8, !tbaa !9
  %510 = call double @llvm.fmuladd.f64(double %509, double 2.000000e+00, double %506)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %94) #7
  store i64 2, ptr %94, align 8, !tbaa !5
  %511 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %94)
  %512 = getelementptr inbounds double, ptr %511, i64 %121
  %513 = load double, ptr %512, align 8, !tbaa !9
  %514 = fsub double %510, %513
  %515 = fmul double %514, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #7
  store i64 0, ptr %95, align 8, !tbaa !5
  %516 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %95)
  %517 = getelementptr inbounds double, ptr %516, i64 %121
  store double %515, ptr %517, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #7
  br label %518

518:                                              ; preds = %498, %497
  br i1 %brmerge311, label %536, label %519

519:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %96) #7
  store i64 %130, ptr %96, align 8, !tbaa !5
  %520 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %96)
  %521 = getelementptr inbounds i8, ptr %520, i64 8
  %522 = load double, ptr %521, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %97) #7
  store i64 %130, ptr %97, align 8, !tbaa !5
  %523 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %97)
  %524 = getelementptr inbounds i8, ptr %523, i64 16
  %525 = load double, ptr %524, align 8, !tbaa !9
  %526 = fneg double %525
  %527 = call double @llvm.fmuladd.f64(double %522, double 2.000000e+00, double %526)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %98) #7
  store i64 %251, ptr %98, align 8, !tbaa !5
  %528 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %98)
  %529 = load double, ptr %528, align 8, !tbaa !9
  %530 = call double @llvm.fmuladd.f64(double %529, double 2.000000e+00, double %527)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #7
  store i64 %262, ptr %99, align 8, !tbaa !5
  %531 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
  %532 = load double, ptr %531, align 8, !tbaa !9
  %533 = fsub double %530, %532
  %534 = fmul double %533, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #7
  store i64 %130, ptr %100, align 8, !tbaa !5
  %535 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %100)
  store double %534, ptr %535, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #7
  br label %536

536:                                              ; preds = %519, %518
  br i1 %brmerge312, label %557, label %537

537:                                              ; preds = %536
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #7
  store i64 %130, ptr %101, align 8, !tbaa !5
  %538 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %101)
  %539 = getelementptr inbounds double, ptr %538, i64 %202
  %540 = load double, ptr %539, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #7
  store i64 %130, ptr %102, align 8, !tbaa !5
  %541 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
  %542 = getelementptr inbounds i8, ptr %541, i64 %261
  %543 = load double, ptr %542, align 8, !tbaa !9
  %544 = fneg double %543
  %545 = call double @llvm.fmuladd.f64(double %540, double 2.000000e+00, double %544)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #7
  store i64 %251, ptr %103, align 8, !tbaa !5
  %546 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %103)
  %547 = getelementptr inbounds double, ptr %546, i64 %121
  %548 = load double, ptr %547, align 8, !tbaa !9
  %549 = call double @llvm.fmuladd.f64(double %548, double 2.000000e+00, double %545)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #7
  store i64 %262, ptr %104, align 8, !tbaa !5
  %550 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %104)
  %551 = getelementptr inbounds double, ptr %550, i64 %121
  %552 = load double, ptr %551, align 8, !tbaa !9
  %553 = fsub double %549, %552
  %554 = fmul double %553, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #7
  store i64 %130, ptr %105, align 8, !tbaa !5
  %555 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %105)
  %556 = getelementptr inbounds double, ptr %555, i64 %121
  store double %554, ptr %556, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #7
  br label %557

557:                                              ; preds = %537, %536
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #7
  store i64 %indvars.iv466, ptr %106, align 8, !tbaa !5
  %558 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %106)
  %559 = getelementptr inbounds double, ptr %558, i64 %indvars.iv461
  %560 = load double, ptr %559, align 8, !tbaa !9
  %561 = call noundef double @_ZSt3absd(double noundef %560)
  %562 = fadd double %.0251351.us.us.us, %561
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %107) #7
  store i64 %indvars.iv466, ptr %107, align 8, !tbaa !5
  %563 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(8) %107)
  %564 = getelementptr inbounds double, ptr %563, i64 %indvars.iv461
  %565 = load double, ptr %564, align 8, !tbaa !9
  %566 = call noundef double @_ZSt3absd(double noundef %565)
  %567 = fadd double %.0250352.us.us.us, %566
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %107) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %108) #7
  store i64 %indvars.iv466, ptr %108, align 8, !tbaa !5
  %568 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %108)
  %569 = getelementptr inbounds double, ptr %568, i64 %indvars.iv461
  %570 = load double, ptr %569, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #7
  store i64 %indvars.iv466, ptr %109, align 8, !tbaa !5
  %571 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %17, ptr noundef nonnull align 8 dereferenceable(8) %109)
  %572 = getelementptr inbounds double, ptr %571, i64 %indvars.iv461
  store double %570, ptr %572, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #7
  %indvars.iv.next462 = add nuw nsw i64 %indvars.iv461, 1
  %exitcond465.not = icmp eq i64 %indvars.iv.next462, %wide.trip.count464
  br i1 %exitcond465.not, label %._crit_edge355.us.us.us, label %270, !llvm.loop !31

._crit_edge355.us.us.us:                          ; preds = %557
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #7
  store i64 %264, ptr %110, align 8, !tbaa !5
  %573 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %110)
  store double %562, ptr %573, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #7
  store i64 %264, ptr %111, align 8, !tbaa !5
  %574 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %111)
  store double %567, ptr %574, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #7
  %575 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %265 unwind label %.split361.us.split.us.split.us

._crit_edge358.split.us.us.us:                    ; preds = %267
  %576 = add nuw nsw i32 %.0248393.us.us, 1
  %577 = fcmp uge double %269, %8
  %578 = icmp slt i32 %576, %9
  %or.cond = select i1 %577, i1 %578, i1 false
  br i1 %or.cond, label %.preheader313.us.us, label %._crit_edge394, !llvm.loop !32

.split361.us.split.us.split.us:                   ; preds = %._crit_edge355.us.us.us, %265
  %579 = landingpad { ptr, i32 }
          cleanup
  br label %643

.split365.us.split.us.split.us:                   ; preds = %271
  %580 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #7
  br label %643

.split368.us.split.us.split.us:                   ; preds = %293
  %581 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #7
  br label %643

.split371.us.split.us.split.us:                   ; preds = %306
  %582 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  br label %643

.split374.us.split.us.split.us:                   ; preds = %333
  %583 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #7
  br label %643

.split377.us.split.us.split.us:                   ; preds = %351
  %584 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #7
  br label %643

.split380.us.split.us.split.us:                   ; preds = %394
  %585 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #7
  br label %643

.split383.us.split.us.split.us:                   ; preds = %421
  %586 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #7
  br label %643

.split386.us.split.us.split.us:                   ; preds = %439
  %587 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #7
  br label %643

.split389.us.split.us.split.us:                   ; preds = %464
  %588 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #7
  br label %643

.preheader313.us:                                 ; preds = %.preheader313.lr.ph.split.us, %._crit_edge358.split.us399
  %.0248393.us = phi i32 [ %598, %._crit_edge358.split.us399 ], [ 0, %.preheader313.lr.ph.split.us ]
  br label %.preheader.us397

589:                                              ; preds = %.preheader.us397
  %590 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %34)
          to label %591 unwind label %.split361.split.us

591:                                              ; preds = %589
  %592 = fsub double %597, %590
  %593 = call noundef double @_ZSt3absd(double noundef %592)
  %indvars.iv.next457 = add nuw nsw i64 %indvars.iv456, 1
  %exitcond460.not = icmp eq i64 %indvars.iv.next457, %wide.trip.count469
  br i1 %exitcond460.not, label %._crit_edge358.split.us399, label %.preheader.us397, !llvm.loop !25

.preheader.us397:                                 ; preds = %.preheader313.us, %591
  %indvars.iv456 = phi i64 [ 1, %.preheader313.us ], [ %indvars.iv.next457, %591 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #7
  %594 = add nsw i64 %indvars.iv456, -1
  store i64 %594, ptr %110, align 8, !tbaa !5
  %595 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(8) %110)
  store double 0.000000e+00, ptr %595, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #7
  store i64 %594, ptr %111, align 8, !tbaa !5
  %596 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(8) %111)
  store double 0.000000e+00, ptr %596, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #7
  %597 = invoke noundef double @_ZNK3cda4math10containers6VectorIdE11max_elementEv(ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %589 unwind label %.split361.split.us

._crit_edge358.split.us399:                       ; preds = %591
  %598 = add nuw nsw i32 %.0248393.us, 1
  %599 = fcmp uge double %593, %8
  %600 = icmp slt i32 %598, %9
  %or.cond428 = select i1 %599, i1 %600, i1 false
  br i1 %or.cond428, label %.preheader313.us, label %._crit_edge394, !llvm.loop !32

.split361.split.us:                               ; preds = %.preheader.us397, %589
  %601 = landingpad { ptr, i32 }
          cleanup
  br label %643

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

604:                                              ; preds = %229
  %605 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #7
  br label %644

._crit_edge394:                                   ; preds = %._crit_edge358.split.us399, %._crit_edge358.split.us.us.us, %.preheader313.lr.ph, %230
  %.1253 = phi i32 [ 0, %230 ], [ %9, %.preheader313.lr.ph ], [ %576, %._crit_edge358.split.us.us.us ], [ %598, %._crit_edge358.split.us399 ]
  %606 = zext i8 %4 to i32
  %607 = and i32 %606, 1
  %.not = icmp eq i32 %607, 0
  br i1 %.not, label %618, label %608

608:                                              ; preds = %._crit_edge394
  %609 = 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.2)
          to label %610 unwind label %616

610:                                              ; preds = %608
  %611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %609, ptr noundef nonnull @_ZSt10scientificRSt8ios_base)
          to label %612 unwind label %616

612:                                              ; preds = %610
  %613 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %611, i32 noundef %.1253)
          to label %614 unwind label %616

614:                                              ; preds = %612
  %615 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %613, ptr noundef nonnull @.str.3)
          to label %618 unwind label %616

616:                                              ; preds = %626, %624, %622, %620, %614, %612, %610, %608
  %617 = landingpad { ptr, i32 }
          cleanup
  br label %643

618:                                              ; preds = %614, %._crit_edge394
  %619 = icmp eq i32 %.1253, %9
  br i1 %619, label %620, label %628

620:                                              ; preds = %618
  %621 = 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.4)
          to label %622 unwind label %616

622:                                              ; preds = %620
  %623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %621, ptr noundef nonnull @_ZSt10scientificRSt8ios_base)
          to label %624 unwind label %616

624:                                              ; preds = %622
  %625 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %623, i32 noundef %9)
          to label %626 unwind label %616

626:                                              ; preds = %624
  %627 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %625, ptr noundef nonnull @.str.5)
          to label %628 unwind label %616

628:                                              ; preds = %626, %618
  %629 = and i32 %606, 8
  %.not274 = icmp eq i32 %629, 0
  br i1 %.not274, label %642, label %630

630:                                              ; preds = %628
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %113) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %112, ptr noundef nonnull @.str.6, ptr noundef nonnull align 1 dereferenceable(1) %113)
          to label %631 unwind label %634

631:                                              ; preds = %630
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %115) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull @.str.7, ptr noundef nonnull align 1 dereferenceable(1) %115)
          to label %632 unwind label %636

632:                                              ; preds = %631
  invoke void @_ZN3cda4math22differential_equations3EDP11printMATLABENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_hRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %112, ptr noundef nonnull %114, 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 %633 unwind label %638

633:                                              ; preds = %632
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %115) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #7
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %113) #7
  br label %642

634:                                              ; preds = %630
  %635 = landingpad { ptr, i32 }
          cleanup
  br label %641

636:                                              ; preds = %631
  %637 = landingpad { ptr, i32 }
          cleanup
  br label %640

638:                                              ; preds = %632
  %639 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #7
  br label %640

640:                                              ; preds = %638, %636
  %.pn = phi { ptr, i32 } [ %639, %638 ], [ %637, %636 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %115) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #7
  br label %641

641:                                              ; preds = %640, %634
  %.pn.pn = phi { ptr, i32 } [ %.pn, %640 ], [ %635, %634 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %113) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %113) #7
  br label %643

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

643:                                              ; preds = %.split361.split.us, %.split361.us.split.us.split.us, %.split389.us.split.us.split.us, %.split386.us.split.us.split.us, %.split383.us.split.us.split.us, %.split380.us.split.us.split.us, %.split377.us.split.us.split.us, %.split374.us.split.us.split.us, %.split371.us.split.us.split.us, %.split368.us.split.us.split.us, %.split365.us.split.us.split.us, %641, %616
  %.pn288.pn.pn = phi { ptr, i32 } [ %.pn.pn, %641 ], [ %617, %616 ], [ %588, %.split389.us.split.us.split.us ], [ %587, %.split386.us.split.us.split.us ], [ %586, %.split383.us.split.us.split.us ], [ %585, %.split380.us.split.us.split.us ], [ %584, %.split377.us.split.us.split.us ], [ %583, %.split374.us.split.us.split.us ], [ %582, %.split371.us.split.us.split.us ], [ %581, %.split368.us.split.us.split.us ], [ %580, %.split365.us.split.us.split.us ], [ %601, %.split361.split.us ], [ %579, %.split361.us.split.us.split.us ]
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #7
  br label %644

644:                                              ; preds = %643, %604
  %.pn288.pn.pn.pn = phi { ptr, i32 } [ %.pn288.pn.pn, %643 ], [ %605, %604 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %34) #7
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #7
  br label %645

645:                                              ; preds = %644, %602
  %.pn288.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn288.pn.pn.pn, %644 ], [ %603, %602 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #7
  br label %646

646:                                              ; preds = %213, %226, %196, %201, %645, %178
  %.pn306.pn = phi { ptr, i32 } [ %.pn288.pn.pn.pn.pn, %645 ], [ %179, %178 ], [ %.us-phi, %201 ], [ %.us-phi348, %196 ], [ %227, %226 ], [ %214, %213 ]
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #7
  br label %647

647:                                              ; preds = %646, %176
  %.pn306.pn.pn = phi { ptr, i32 } [ %.pn306.pn, %646 ], [ %177, %176 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #7
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #7
  resume { ptr, i32 } %.pn306.pn.pn
}

; 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 nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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


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