; 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.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::Vector" = type { i64, ptr, ptr }
%"class.cda::math::containers::Matrix.0" = type { i64, i64, i64, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [17 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 nounwind uwtable
declare dso_local noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #1 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 @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) 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)) #2 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveHEATEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEE(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, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(40) %6) #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i1, align 1
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca double, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i64, align 8
  %25 = alloca double, 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 i32, align 4
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca 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 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 i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %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 i32, align 4
  %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 i32, align 4
  %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 %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::allocator", align 1
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::allocator", align 1
  store ptr %0, ptr %8, align 8
  store ptr %1, ptr %9, align 8, !tbaa !5
  store i8 %2, ptr %10, align 1, !tbaa !9
  store i8 %3, ptr %11, align 1, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  %118 = load ptr, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %119 = load ptr, ptr %13, align 8, !tbaa !5
  %120 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %119)
  %121 = trunc i64 %120 to i32
  store i32 %121, ptr %15, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %122 = load ptr, ptr %12, align 8, !tbaa !5
  %123 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %122)
  %124 = trunc i64 %123 to i32
  store i32 %124, ptr %16, align 4, !tbaa !10
  store i1 false, ptr %17, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %125 = load i32, ptr %15, align 4, !tbaa !10
  %126 = sext i32 %125 to i64
  store i64 %126, ptr %18, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %127 = load i32, ptr %16, align 4, !tbaa !10
  %128 = sext i32 %127 to i64
  store i64 %128, ptr %19, align 8, !tbaa !12
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %130 = load i32, ptr %16, align 4, !tbaa !10
  %131 = sub nsw i32 %130, 1
  %132 = sext i32 %131 to i64
  store i64 %132, ptr %21, align 8, !tbaa !12
  %133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %129, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %134 unwind label %239

134:                                              ; preds = %7
  %135 = load double, ptr %133, align 8, !tbaa !14
  %136 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store i64 0, ptr %24, align 8, !tbaa !12
  %137 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %136, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %138 unwind label %243

138:                                              ; preds = %134
  %139 = load double, ptr %137, align 8, !tbaa !14
  %140 = fsub double %135, %139
  %141 = load i32, ptr %16, align 4, !tbaa !10
  %142 = sub nsw i32 %141, 1
  %143 = sitofp i32 %142 to double
  %144 = fdiv double %140, %143
  %145 = fptosi double %144 to i32
  %146 = call i32 @llvm.abs.i32(i32 %145, i1 true)
  %147 = sitofp i32 %146 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  store double %147, ptr %20, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %148 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %149 = load i32, ptr %15, align 4, !tbaa !10
  %150 = sub nsw i32 %149, 1
  %151 = sext i32 %150 to i64
  store i64 %151, ptr %26, align 8, !tbaa !12
  %152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %148, ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %153 unwind label %248

153:                                              ; preds = %138
  %154 = load double, ptr %152, align 8, !tbaa !14
  %155 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  store i64 0, ptr %27, align 8, !tbaa !12
  %156 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %155, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %157 unwind label %252

157:                                              ; preds = %153
  %158 = load double, ptr %156, align 8, !tbaa !14
  %159 = fsub double %154, %158
  %160 = load i32, ptr %15, align 4, !tbaa !10
  %161 = sub nsw i32 %160, 1
  %162 = sitofp i32 %161 to double
  %163 = fdiv double %159, %162
  %164 = fptosi double %163 to i32
  %165 = call i32 @llvm.abs.i32(i32 %164, i1 true)
  %166 = sitofp i32 %165 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  store double %166, ptr %25, align 8, !tbaa !14
  %167 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %168 = load double, ptr %167, align 8, !tbaa !16
  %169 = load double, ptr %20, align 8, !tbaa !14
  %170 = load double, ptr %20, align 8, !tbaa !14
  %171 = fmul double %169, %170
  %172 = load double, ptr %25, align 8, !tbaa !14
  %173 = fmul double %171, %172
  %174 = load double, ptr %25, align 8, !tbaa !14
  %175 = fmul double %173, %174
  %176 = load double, ptr %20, align 8, !tbaa !14
  %177 = load double, ptr %20, align 8, !tbaa !14
  %178 = load double, ptr %25, align 8, !tbaa !14
  %179 = load double, ptr %25, align 8, !tbaa !14
  %180 = fmul double %178, %179
  %181 = call double @llvm.fmuladd.f64(double %176, double %177, double %180)
  %182 = fdiv double %175, %181
  %183 = fmul double %182, 1.000000e+00
  %184 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %185 = load ptr, ptr %184, align 8, !tbaa !23
  %186 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  store i64 0, ptr %28, align 8, !tbaa !12
  %187 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %186, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %188 unwind label %257

188:                                              ; preds = %157
  %189 = load double, ptr %187, align 8, !tbaa !14
  %190 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  store i64 0, ptr %29, align 8, !tbaa !12
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %190, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %192 unwind label %261

192:                                              ; preds = %188
  %193 = load double, ptr %191, align 8, !tbaa !14
  %194 = invoke noundef double %185(double noundef %189, double noundef %193)
          to label %195 unwind label %261

195:                                              ; preds = %192
  %196 = fmul double 4.000000e+00, %194
  %197 = fdiv double %183, %196
  %198 = fcmp ogt double %168, %197
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br i1 %198, label %199, label %279

199:                                              ; preds = %195
  %200 = load double, ptr %20, align 8, !tbaa !14
  %201 = load double, ptr %20, align 8, !tbaa !14
  %202 = fmul double %200, %201
  %203 = load double, ptr %25, align 8, !tbaa !14
  %204 = fmul double %202, %203
  %205 = load double, ptr %25, align 8, !tbaa !14
  %206 = fmul double %204, %205
  %207 = load double, ptr %20, align 8, !tbaa !14
  %208 = load double, ptr %20, align 8, !tbaa !14
  %209 = load double, ptr %25, align 8, !tbaa !14
  %210 = load double, ptr %25, align 8, !tbaa !14
  %211 = fmul double %209, %210
  %212 = call double @llvm.fmuladd.f64(double %207, double %208, double %211)
  %213 = fdiv double %206, %212
  %214 = fmul double %213, 1.000000e+00
  %215 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %216 = load ptr, ptr %215, align 8, !tbaa !23
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  store i64 0, ptr %30, align 8, !tbaa !12
  %218 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %217, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %219 unwind label %266

219:                                              ; preds = %199
  %220 = load double, ptr %218, align 8, !tbaa !14
  %221 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  store i64 0, ptr %31, align 8, !tbaa !12
  %222 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %221, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %223 unwind label %270

223:                                              ; preds = %219
  %224 = load double, ptr %222, align 8, !tbaa !14
  %225 = invoke noundef double %216(double noundef %220, double noundef %224)
          to label %226 unwind label %270

226:                                              ; preds = %223
  %227 = fmul double 4.000000e+00, %225
  %228 = fdiv double %214, %227
  %229 = fmul double %228, 9.000000e-01
  %230 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  store double %229, ptr %230, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  %231 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
          to label %232 unwind label %275

232:                                              ; preds = %226
  %233 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %234 = load double, ptr %233, align 8, !tbaa !16
  %235 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %231, double noundef %234)
          to label %236 unwind label %275

236:                                              ; preds = %232
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %238 unwind label %275

238:                                              ; preds = %236
  br label %279

239:                                              ; preds = %7
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %22, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %23, align 4
  br label %247

243:                                              ; preds = %134
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %22, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %247

247:                                              ; preds = %243, %239
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %1532

248:                                              ; preds = %138
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %22, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %23, align 4
  br label %256

252:                                              ; preds = %153
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %22, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %256

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

257:                                              ; preds = %157
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %22, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %23, align 4
  br label %265

261:                                              ; preds = %192, %188
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %22, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  br label %265

265:                                              ; preds = %261, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %1531

266:                                              ; preds = %199
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %22, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %23, align 4
  br label %274

270:                                              ; preds = %223, %219
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %22, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %274

274:                                              ; preds = %270, %266
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  br label %1531

275:                                              ; preds = %1498, %1494, %279, %236, %232, %226
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %22, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %23, align 4
  br label %1531

279:                                              ; preds = %238, %195
  %280 = load ptr, ptr %14, align 8, !tbaa !5
  %281 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %280)
          to label %282 unwind label %275

282:                                              ; preds = %279
  %283 = load i8, ptr %10, align 1, !tbaa !9
  %284 = zext i8 %283 to i32
  %285 = and i32 %284, 64
  %286 = icmp ne i32 %285, 0
  br i1 %286, label %287, label %451

287:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 1, ptr %32, align 4, !tbaa !10
  br label %288

288:                                              ; preds = %393, %287
  %289 = load i32, ptr %32, align 4, !tbaa !10
  %290 = load i32, ptr %16, align 4, !tbaa !10
  %291 = sub nsw i32 %290, 1
  %292 = icmp slt i32 %289, %291
  br i1 %292, label %294, label %293

293:                                              ; preds = %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %450

294:                                              ; preds = %288
  %295 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  store i64 0, ptr %33, align 8, !tbaa !12
  %296 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %295, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %297 unwind label %396

297:                                              ; preds = %294
  %298 = load i32, ptr %32, align 4, !tbaa !10
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds double, ptr %296, i64 %299
  %301 = load double, ptr %300, align 8, !tbaa !14
  %302 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %303 = load double, ptr %302, align 8, !tbaa !16
  %304 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %305 = load ptr, ptr %304, align 8, !tbaa !23
  %306 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %307 = load i32, ptr %32, align 4, !tbaa !10
  %308 = sext i32 %307 to i64
  store i64 %308, ptr %34, align 8, !tbaa !12
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %306, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %310 unwind label %400

310:                                              ; preds = %297
  %311 = load double, ptr %309, align 8, !tbaa !14
  %312 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  store i64 0, ptr %35, align 8, !tbaa !12
  %313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %312, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %314 unwind label %404

314:                                              ; preds = %310
  %315 = load double, ptr %313, align 8, !tbaa !14
  %316 = invoke noundef double %305(double noundef %311, double noundef %315)
          to label %317 unwind label %404

317:                                              ; preds = %314
  %318 = fmul double %303, %316
  %319 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  store i64 1, ptr %36, align 8, !tbaa !12
  %320 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %319, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %321 unwind label %408

321:                                              ; preds = %317
  %322 = load i32, ptr %32, align 4, !tbaa !10
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds double, ptr %320, i64 %323
  %325 = load double, ptr %324, align 8, !tbaa !14
  %326 = load double, ptr %25, align 8, !tbaa !14
  %327 = fmul double 2.000000e+00, %326
  %328 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 9
  %329 = load ptr, ptr %328, align 8, !tbaa !24
  %330 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %331 = load i32, ptr %32, align 4, !tbaa !10
  %332 = sext i32 %331 to i64
  store i64 %332, ptr %37, align 8, !tbaa !12
  %333 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %330, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %334 unwind label %412

334:                                              ; preds = %321
  %335 = load double, ptr %333, align 8, !tbaa !14
  %336 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  store i64 0, ptr %38, align 8, !tbaa !12
  %337 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %336, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %338 unwind label %416

338:                                              ; preds = %334
  %339 = load double, ptr %337, align 8, !tbaa !14
  %340 = invoke noundef double %329(double noundef %335, double noundef %339)
          to label %341 unwind label %416

341:                                              ; preds = %338
  %342 = fmul double %327, %340
  %343 = fneg double %342
  %344 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %325, double %343)
  %345 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  store i64 0, ptr %39, align 8, !tbaa !12
  %346 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %345, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %347 unwind label %420

347:                                              ; preds = %341
  %348 = load i32, ptr %32, align 4, !tbaa !10
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds double, ptr %346, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !14
  %352 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %351, double %344)
  %353 = load double, ptr %25, align 8, !tbaa !14
  %354 = load double, ptr %25, align 8, !tbaa !14
  %355 = fmul double %353, %354
  %356 = fdiv double %352, %355
  %357 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  store i64 0, ptr %40, align 8, !tbaa !12
  %358 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %357, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %359 unwind label %424

359:                                              ; preds = %347
  %360 = load i32, ptr %32, align 4, !tbaa !10
  %361 = add nsw i32 %360, 1
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds double, ptr %358, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !14
  %365 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  store i64 0, ptr %41, align 8, !tbaa !12
  %366 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %365, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %367 unwind label %428

367:                                              ; preds = %359
  %368 = load i32, ptr %32, align 4, !tbaa !10
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds double, ptr %366, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !14
  %372 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %371, double %364)
  %373 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  store i64 0, ptr %42, align 8, !tbaa !12
  %374 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %373, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %375 unwind label %432

375:                                              ; preds = %367
  %376 = load i32, ptr %32, align 4, !tbaa !10
  %377 = sub nsw i32 %376, 1
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds double, ptr %374, i64 %378
  %380 = load double, ptr %379, align 8, !tbaa !14
  %381 = fadd double %372, %380
  %382 = load double, ptr %20, align 8, !tbaa !14
  %383 = load double, ptr %20, align 8, !tbaa !14
  %384 = fmul double %382, %383
  %385 = fdiv double %381, %384
  %386 = fadd double %356, %385
  %387 = call double @llvm.fmuladd.f64(double %318, double %386, double %301)
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  store i64 0, ptr %43, align 8, !tbaa !12
  %388 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %389 unwind label %436

389:                                              ; preds = %375
  %390 = load i32, ptr %32, align 4, !tbaa !10
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds double, ptr %388, i64 %391
  store double %387, ptr %392, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %393

393:                                              ; preds = %389
  %394 = load i32, ptr %32, align 4, !tbaa !10
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %32, align 4, !tbaa !10
  br label %288, !llvm.loop !25

396:                                              ; preds = %294
  %397 = landingpad { ptr, i32 }
          cleanup
  %398 = extractvalue { ptr, i32 } %397, 0
  store ptr %398, ptr %22, align 8
  %399 = extractvalue { ptr, i32 } %397, 1
  store i32 %399, ptr %23, align 4
  br label %449

400:                                              ; preds = %297
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %22, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %23, align 4
  br label %448

404:                                              ; preds = %314, %310
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %22, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %23, align 4
  br label %447

408:                                              ; preds = %317
  %409 = landingpad { ptr, i32 }
          cleanup
  %410 = extractvalue { ptr, i32 } %409, 0
  store ptr %410, ptr %22, align 8
  %411 = extractvalue { ptr, i32 } %409, 1
  store i32 %411, ptr %23, align 4
  br label %446

412:                                              ; preds = %321
  %413 = landingpad { ptr, i32 }
          cleanup
  %414 = extractvalue { ptr, i32 } %413, 0
  store ptr %414, ptr %22, align 8
  %415 = extractvalue { ptr, i32 } %413, 1
  store i32 %415, ptr %23, align 4
  br label %445

416:                                              ; preds = %338, %334
  %417 = landingpad { ptr, i32 }
          cleanup
  %418 = extractvalue { ptr, i32 } %417, 0
  store ptr %418, ptr %22, align 8
  %419 = extractvalue { ptr, i32 } %417, 1
  store i32 %419, ptr %23, align 4
  br label %444

420:                                              ; preds = %341
  %421 = landingpad { ptr, i32 }
          cleanup
  %422 = extractvalue { ptr, i32 } %421, 0
  store ptr %422, ptr %22, align 8
  %423 = extractvalue { ptr, i32 } %421, 1
  store i32 %423, ptr %23, align 4
  br label %443

424:                                              ; preds = %347
  %425 = landingpad { ptr, i32 }
          cleanup
  %426 = extractvalue { ptr, i32 } %425, 0
  store ptr %426, ptr %22, align 8
  %427 = extractvalue { ptr, i32 } %425, 1
  store i32 %427, ptr %23, align 4
  br label %442

428:                                              ; preds = %359
  %429 = landingpad { ptr, i32 }
          cleanup
  %430 = extractvalue { ptr, i32 } %429, 0
  store ptr %430, ptr %22, align 8
  %431 = extractvalue { ptr, i32 } %429, 1
  store i32 %431, ptr %23, align 4
  br label %441

432:                                              ; preds = %367
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %22, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %23, align 4
  br label %440

436:                                              ; preds = %375
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %22, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  br label %440

440:                                              ; preds = %436, %432
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  br label %441

441:                                              ; preds = %440, %428
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  br label %442

442:                                              ; preds = %441, %424
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %443

443:                                              ; preds = %442, %420
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %444

444:                                              ; preds = %443, %416
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %445

445:                                              ; preds = %444, %412
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  br label %446

446:                                              ; preds = %445, %408
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %447

447:                                              ; preds = %446, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %448

448:                                              ; preds = %447, %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %449

449:                                              ; preds = %448, %396
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %1531

450:                                              ; preds = %293
  br label %451

451:                                              ; preds = %450, %282
  %452 = load i8, ptr %10, align 1, !tbaa !9
  %453 = zext i8 %452 to i32
  %454 = and i32 %453, 16
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %456, label %620

456:                                              ; preds = %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  store i32 1, ptr %44, align 4, !tbaa !10
  br label %457

457:                                              ; preds = %562, %456
  %458 = load i32, ptr %44, align 4, !tbaa !10
  %459 = load i32, ptr %15, align 4, !tbaa !10
  %460 = sub nsw i32 %459, 1
  %461 = icmp slt i32 %458, %460
  br i1 %461, label %463, label %462

462:                                              ; preds = %457
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  br label %619

463:                                              ; preds = %457
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %465 = load i32, ptr %44, align 4, !tbaa !10
  %466 = sext i32 %465 to i64
  store i64 %466, ptr %45, align 8, !tbaa !12
  %467 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %464, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %468 unwind label %565

468:                                              ; preds = %463
  %469 = getelementptr inbounds double, ptr %467, i64 0
  %470 = load double, ptr %469, align 8, !tbaa !14
  %471 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %472 = load double, ptr %471, align 8, !tbaa !16
  %473 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %474 = load ptr, ptr %473, align 8, !tbaa !23
  %475 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  store i64 0, ptr %46, align 8, !tbaa !12
  %476 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %475, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %477 unwind label %569

477:                                              ; preds = %468
  %478 = load double, ptr %476, align 8, !tbaa !14
  %479 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %480 = load i32, ptr %44, align 4, !tbaa !10
  %481 = sext i32 %480 to i64
  store i64 %481, ptr %47, align 8, !tbaa !12
  %482 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %479, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %483 unwind label %573

483:                                              ; preds = %477
  %484 = load double, ptr %482, align 8, !tbaa !14
  %485 = invoke noundef double %474(double noundef %478, double noundef %484)
          to label %486 unwind label %573

486:                                              ; preds = %483
  %487 = fmul double %472, %485
  %488 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %489 = load i32, ptr %44, align 4, !tbaa !10
  %490 = add nsw i32 %489, 1
  %491 = sext i32 %490 to i64
  store i64 %491, ptr %48, align 8, !tbaa !12
  %492 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %488, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %493 unwind label %577

493:                                              ; preds = %486
  %494 = getelementptr inbounds double, ptr %492, i64 0
  %495 = load double, ptr %494, align 8, !tbaa !14
  %496 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %497 = load i32, ptr %44, align 4, !tbaa !10
  %498 = sext i32 %497 to i64
  store i64 %498, ptr %49, align 8, !tbaa !12
  %499 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %496, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %500 unwind label %581

500:                                              ; preds = %493
  %501 = getelementptr inbounds double, ptr %499, i64 0
  %502 = load double, ptr %501, align 8, !tbaa !14
  %503 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %502, double %495)
  %504 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %505 = load i32, ptr %44, align 4, !tbaa !10
  %506 = sub nsw i32 %505, 1
  %507 = sext i32 %506 to i64
  store i64 %507, ptr %50, align 8, !tbaa !12
  %508 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %504, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %509 unwind label %585

509:                                              ; preds = %500
  %510 = getelementptr inbounds double, ptr %508, i64 0
  %511 = load double, ptr %510, align 8, !tbaa !14
  %512 = fadd double %503, %511
  %513 = load double, ptr %25, align 8, !tbaa !14
  %514 = load double, ptr %25, align 8, !tbaa !14
  %515 = fmul double %513, %514
  %516 = fdiv double %512, %515
  %517 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %518 = load i32, ptr %44, align 4, !tbaa !10
  %519 = sext i32 %518 to i64
  store i64 %519, ptr %51, align 8, !tbaa !12
  %520 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %517, ptr noundef nonnull align 8 dereferenceable(8) %51)
          to label %521 unwind label %589

521:                                              ; preds = %509
  %522 = getelementptr inbounds double, ptr %520, i64 1
  %523 = load double, ptr %522, align 8, !tbaa !14
  %524 = load double, ptr %20, align 8, !tbaa !14
  %525 = fmul double 2.000000e+00, %524
  %526 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 7
  %527 = load ptr, ptr %526, align 8, !tbaa !27
  %528 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  store i64 0, ptr %52, align 8, !tbaa !12
  %529 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %528, ptr noundef nonnull align 8 dereferenceable(8) %52)
          to label %530 unwind label %593

530:                                              ; preds = %521
  %531 = load double, ptr %529, align 8, !tbaa !14
  %532 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %533 = load i32, ptr %44, align 4, !tbaa !10
  %534 = sext i32 %533 to i64
  store i64 %534, ptr %53, align 8, !tbaa !12
  %535 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %532, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %536 unwind label %597

536:                                              ; preds = %530
  %537 = load double, ptr %535, align 8, !tbaa !14
  %538 = invoke noundef double %527(double noundef %531, double noundef %537)
          to label %539 unwind label %597

539:                                              ; preds = %536
  %540 = fmul double %525, %538
  %541 = fneg double %540
  %542 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %523, double %541)
  %543 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %544 = load i32, ptr %44, align 4, !tbaa !10
  %545 = sext i32 %544 to i64
  store i64 %545, ptr %54, align 8, !tbaa !12
  %546 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %543, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %547 unwind label %601

547:                                              ; preds = %539
  %548 = getelementptr inbounds double, ptr %546, i64 0
  %549 = load double, ptr %548, align 8, !tbaa !14
  %550 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %549, double %542)
  %551 = load double, ptr %20, align 8, !tbaa !14
  %552 = load double, ptr %20, align 8, !tbaa !14
  %553 = fmul double %551, %552
  %554 = fdiv double %550, %553
  %555 = fadd double %516, %554
  %556 = call double @llvm.fmuladd.f64(double %487, double %555, double %470)
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %557 = load i32, ptr %44, align 4, !tbaa !10
  %558 = sext i32 %557 to i64
  store i64 %558, ptr %55, align 8, !tbaa !12
  %559 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %560 unwind label %605

560:                                              ; preds = %547
  %561 = getelementptr inbounds double, ptr %559, i64 0
  store double %556, ptr %561, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %562

562:                                              ; preds = %560
  %563 = load i32, ptr %44, align 4, !tbaa !10
  %564 = add nsw i32 %563, 1
  store i32 %564, ptr %44, align 4, !tbaa !10
  br label %457, !llvm.loop !28

565:                                              ; preds = %463
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %22, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %23, align 4
  br label %618

569:                                              ; preds = %468
  %570 = landingpad { ptr, i32 }
          cleanup
  %571 = extractvalue { ptr, i32 } %570, 0
  store ptr %571, ptr %22, align 8
  %572 = extractvalue { ptr, i32 } %570, 1
  store i32 %572, ptr %23, align 4
  br label %617

573:                                              ; preds = %483, %477
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %22, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %23, align 4
  br label %616

577:                                              ; preds = %486
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %22, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %23, align 4
  br label %615

581:                                              ; preds = %493
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %22, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %23, align 4
  br label %614

585:                                              ; preds = %500
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %22, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %23, align 4
  br label %613

589:                                              ; preds = %509
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %22, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %23, align 4
  br label %612

593:                                              ; preds = %521
  %594 = landingpad { ptr, i32 }
          cleanup
  %595 = extractvalue { ptr, i32 } %594, 0
  store ptr %595, ptr %22, align 8
  %596 = extractvalue { ptr, i32 } %594, 1
  store i32 %596, ptr %23, align 4
  br label %611

597:                                              ; preds = %536, %530
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %22, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %23, align 4
  br label %610

601:                                              ; preds = %539
  %602 = landingpad { ptr, i32 }
          cleanup
  %603 = extractvalue { ptr, i32 } %602, 0
  store ptr %603, ptr %22, align 8
  %604 = extractvalue { ptr, i32 } %602, 1
  store i32 %604, ptr %23, align 4
  br label %609

605:                                              ; preds = %547
  %606 = landingpad { ptr, i32 }
          cleanup
  %607 = extractvalue { ptr, i32 } %606, 0
  store ptr %607, ptr %22, align 8
  %608 = extractvalue { ptr, i32 } %606, 1
  store i32 %608, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  br label %609

609:                                              ; preds = %605, %601
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  br label %610

610:                                              ; preds = %609, %597
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %611

611:                                              ; preds = %610, %593
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  br label %612

612:                                              ; preds = %611, %589
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %613

613:                                              ; preds = %612, %585
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  br label %614

614:                                              ; preds = %613, %581
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %615

615:                                              ; preds = %614, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  br label %616

616:                                              ; preds = %615, %573
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  br label %617

617:                                              ; preds = %616, %569
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  br label %618

618:                                              ; preds = %617, %565
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  br label %1531

619:                                              ; preds = %462
  br label %620

620:                                              ; preds = %619, %451
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  store i32 1, ptr %56, align 4, !tbaa !10
  br label %621

621:                                              ; preds = %795, %620
  %622 = load i32, ptr %56, align 4, !tbaa !10
  %623 = load i32, ptr %15, align 4, !tbaa !10
  %624 = sub nsw i32 %623, 1
  %625 = icmp slt i32 %622, %624
  br i1 %625, label %627, label %626

626:                                              ; preds = %621
  store i32 8, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  br label %798

627:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  store i32 1, ptr %58, align 4, !tbaa !10
  br label %628

628:                                              ; preds = %742, %627
  %629 = load i32, ptr %58, align 4, !tbaa !10
  %630 = load i32, ptr %16, align 4, !tbaa !10
  %631 = sub nsw i32 %630, 1
  %632 = icmp slt i32 %629, %631
  br i1 %632, label %634, label %633

633:                                              ; preds = %628
  store i32 11, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  br label %794

634:                                              ; preds = %628
  %635 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %636 = load i32, ptr %56, align 4, !tbaa !10
  %637 = sext i32 %636 to i64
  store i64 %637, ptr %59, align 8, !tbaa !12
  %638 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %635, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %639 unwind label %745

639:                                              ; preds = %634
  %640 = load i32, ptr %58, align 4, !tbaa !10
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds double, ptr %638, i64 %641
  %643 = load double, ptr %642, align 8, !tbaa !14
  %644 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %645 = load double, ptr %644, align 8, !tbaa !16
  %646 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %647 = load ptr, ptr %646, align 8, !tbaa !23
  %648 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  %649 = load i32, ptr %58, align 4, !tbaa !10
  %650 = sext i32 %649 to i64
  store i64 %650, ptr %60, align 8, !tbaa !12
  %651 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %648, ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %652 unwind label %749

652:                                              ; preds = %639
  %653 = load double, ptr %651, align 8, !tbaa !14
  %654 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  %655 = load i32, ptr %56, align 4, !tbaa !10
  %656 = sext i32 %655 to i64
  store i64 %656, ptr %61, align 8, !tbaa !12
  %657 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %654, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %658 unwind label %753

658:                                              ; preds = %652
  %659 = load double, ptr %657, align 8, !tbaa !14
  %660 = invoke noundef double %647(double noundef %653, double noundef %659)
          to label %661 unwind label %753

661:                                              ; preds = %658
  %662 = fmul double %645, %660
  %663 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %664 = load i32, ptr %56, align 4, !tbaa !10
  %665 = add nsw i32 %664, 1
  %666 = sext i32 %665 to i64
  store i64 %666, ptr %62, align 8, !tbaa !12
  %667 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %663, ptr noundef nonnull align 8 dereferenceable(8) %62)
          to label %668 unwind label %757

668:                                              ; preds = %661
  %669 = load i32, ptr %58, align 4, !tbaa !10
  %670 = sext i32 %669 to i64
  %671 = getelementptr inbounds double, ptr %667, i64 %670
  %672 = load double, ptr %671, align 8, !tbaa !14
  %673 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %674 = load i32, ptr %56, align 4, !tbaa !10
  %675 = sext i32 %674 to i64
  store i64 %675, ptr %63, align 8, !tbaa !12
  %676 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %673, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %677 unwind label %761

677:                                              ; preds = %668
  %678 = load i32, ptr %58, align 4, !tbaa !10
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds double, ptr %676, i64 %679
  %681 = load double, ptr %680, align 8, !tbaa !14
  %682 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %681, double %672)
  %683 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %684 = load i32, ptr %56, align 4, !tbaa !10
  %685 = sub nsw i32 %684, 1
  %686 = sext i32 %685 to i64
  store i64 %686, ptr %64, align 8, !tbaa !12
  %687 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %683, ptr noundef nonnull align 8 dereferenceable(8) %64)
          to label %688 unwind label %765

688:                                              ; preds = %677
  %689 = load i32, ptr %58, align 4, !tbaa !10
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds double, ptr %687, i64 %690
  %692 = load double, ptr %691, align 8, !tbaa !14
  %693 = fadd double %682, %692
  %694 = load double, ptr %25, align 8, !tbaa !14
  %695 = load double, ptr %25, align 8, !tbaa !14
  %696 = fmul double %694, %695
  %697 = fdiv double %693, %696
  %698 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #5
  %699 = load i32, ptr %56, align 4, !tbaa !10
  %700 = sext i32 %699 to i64
  store i64 %700, ptr %65, align 8, !tbaa !12
  %701 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %698, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %702 unwind label %769

702:                                              ; preds = %688
  %703 = load i32, ptr %58, align 4, !tbaa !10
  %704 = add nsw i32 %703, 1
  %705 = sext i32 %704 to i64
  %706 = getelementptr inbounds double, ptr %701, i64 %705
  %707 = load double, ptr %706, align 8, !tbaa !14
  %708 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %709 = load i32, ptr %56, align 4, !tbaa !10
  %710 = sext i32 %709 to i64
  store i64 %710, ptr %66, align 8, !tbaa !12
  %711 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %708, ptr noundef nonnull align 8 dereferenceable(8) %66)
          to label %712 unwind label %773

712:                                              ; preds = %702
  %713 = load i32, ptr %58, align 4, !tbaa !10
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds double, ptr %711, i64 %714
  %716 = load double, ptr %715, align 8, !tbaa !14
  %717 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %716, double %707)
  %718 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  %719 = load i32, ptr %56, align 4, !tbaa !10
  %720 = sext i32 %719 to i64
  store i64 %720, ptr %67, align 8, !tbaa !12
  %721 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %718, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %722 unwind label %777

722:                                              ; preds = %712
  %723 = load i32, ptr %58, align 4, !tbaa !10
  %724 = sub nsw i32 %723, 1
  %725 = sext i32 %724 to i64
  %726 = getelementptr inbounds double, ptr %721, i64 %725
  %727 = load double, ptr %726, align 8, !tbaa !14
  %728 = fadd double %717, %727
  %729 = load double, ptr %20, align 8, !tbaa !14
  %730 = load double, ptr %20, align 8, !tbaa !14
  %731 = fmul double %729, %730
  %732 = fdiv double %728, %731
  %733 = fadd double %697, %732
  %734 = call double @llvm.fmuladd.f64(double %662, double %733, double %643)
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %735 = load i32, ptr %56, align 4, !tbaa !10
  %736 = sext i32 %735 to i64
  store i64 %736, ptr %68, align 8, !tbaa !12
  %737 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %738 unwind label %781

738:                                              ; preds = %722
  %739 = load i32, ptr %58, align 4, !tbaa !10
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds double, ptr %737, i64 %740
  store double %734, ptr %741, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  br label %742

742:                                              ; preds = %738
  %743 = load i32, ptr %58, align 4, !tbaa !10
  %744 = add nsw i32 %743, 1
  store i32 %744, ptr %58, align 4, !tbaa !10
  br label %628, !llvm.loop !29

745:                                              ; preds = %634
  %746 = landingpad { ptr, i32 }
          cleanup
  %747 = extractvalue { ptr, i32 } %746, 0
  store ptr %747, ptr %22, align 8
  %748 = extractvalue { ptr, i32 } %746, 1
  store i32 %748, ptr %23, align 4
  br label %793

749:                                              ; preds = %639
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %22, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %23, align 4
  br label %792

753:                                              ; preds = %658, %652
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %22, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %23, align 4
  br label %791

757:                                              ; preds = %661
  %758 = landingpad { ptr, i32 }
          cleanup
  %759 = extractvalue { ptr, i32 } %758, 0
  store ptr %759, ptr %22, align 8
  %760 = extractvalue { ptr, i32 } %758, 1
  store i32 %760, ptr %23, align 4
  br label %790

761:                                              ; preds = %668
  %762 = landingpad { ptr, i32 }
          cleanup
  %763 = extractvalue { ptr, i32 } %762, 0
  store ptr %763, ptr %22, align 8
  %764 = extractvalue { ptr, i32 } %762, 1
  store i32 %764, ptr %23, align 4
  br label %789

765:                                              ; preds = %677
  %766 = landingpad { ptr, i32 }
          cleanup
  %767 = extractvalue { ptr, i32 } %766, 0
  store ptr %767, ptr %22, align 8
  %768 = extractvalue { ptr, i32 } %766, 1
  store i32 %768, ptr %23, align 4
  br label %788

769:                                              ; preds = %688
  %770 = landingpad { ptr, i32 }
          cleanup
  %771 = extractvalue { ptr, i32 } %770, 0
  store ptr %771, ptr %22, align 8
  %772 = extractvalue { ptr, i32 } %770, 1
  store i32 %772, ptr %23, align 4
  br label %787

773:                                              ; preds = %702
  %774 = landingpad { ptr, i32 }
          cleanup
  %775 = extractvalue { ptr, i32 } %774, 0
  store ptr %775, ptr %22, align 8
  %776 = extractvalue { ptr, i32 } %774, 1
  store i32 %776, ptr %23, align 4
  br label %786

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

781:                                              ; preds = %722
  %782 = landingpad { ptr, i32 }
          cleanup
  %783 = extractvalue { ptr, i32 } %782, 0
  store ptr %783, ptr %22, align 8
  %784 = extractvalue { ptr, i32 } %782, 1
  store i32 %784, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  br label %785

785:                                              ; preds = %781, %777
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  br label %786

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

787:                                              ; preds = %786, %769
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  br label %788

788:                                              ; preds = %787, %765
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  br label %789

789:                                              ; preds = %788, %761
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  br label %790

790:                                              ; preds = %789, %757
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  br label %791

791:                                              ; preds = %790, %753
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  br label %792

792:                                              ; preds = %791, %749
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  br label %793

793:                                              ; preds = %792, %745
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  br label %1531

794:                                              ; preds = %633
  br label %795

795:                                              ; preds = %794
  %796 = load i32, ptr %56, align 4, !tbaa !10
  %797 = add nsw i32 %796, 1
  store i32 %797, ptr %56, align 4, !tbaa !10
  br label %621, !llvm.loop !30

798:                                              ; preds = %626
  %799 = load i8, ptr %10, align 1, !tbaa !9
  %800 = zext i8 %799 to i32
  %801 = and i32 %800, 32
  %802 = icmp ne i32 %801, 0
  br i1 %802, label %803, label %993

803:                                              ; preds = %798
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  store i32 1, ptr %69, align 4, !tbaa !10
  br label %804

804:                                              ; preds = %935, %803
  %805 = load i32, ptr %69, align 4, !tbaa !10
  %806 = load i32, ptr %15, align 4, !tbaa !10
  %807 = sub nsw i32 %806, 1
  %808 = icmp slt i32 %805, %807
  br i1 %808, label %810, label %809

809:                                              ; preds = %804
  store i32 14, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  br label %992

810:                                              ; preds = %804
  %811 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  %812 = load i32, ptr %69, align 4, !tbaa !10
  %813 = sext i32 %812 to i64
  store i64 %813, ptr %70, align 8, !tbaa !12
  %814 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %811, ptr noundef nonnull align 8 dereferenceable(8) %70)
          to label %815 unwind label %938

815:                                              ; preds = %810
  %816 = load i32, ptr %16, align 4, !tbaa !10
  %817 = sub nsw i32 %816, 1
  %818 = sext i32 %817 to i64
  %819 = getelementptr inbounds double, ptr %814, i64 %818
  %820 = load double, ptr %819, align 8, !tbaa !14
  %821 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %822 = load double, ptr %821, align 8, !tbaa !16
  %823 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %824 = load ptr, ptr %823, align 8, !tbaa !23
  %825 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  %826 = load i32, ptr %16, align 4, !tbaa !10
  %827 = sub nsw i32 %826, 1
  %828 = sext i32 %827 to i64
  store i64 %828, ptr %71, align 8, !tbaa !12
  %829 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %825, ptr noundef nonnull align 8 dereferenceable(8) %71)
          to label %830 unwind label %942

830:                                              ; preds = %815
  %831 = load double, ptr %829, align 8, !tbaa !14
  %832 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  %833 = load i32, ptr %69, align 4, !tbaa !10
  %834 = sext i32 %833 to i64
  store i64 %834, ptr %72, align 8, !tbaa !12
  %835 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %832, ptr noundef nonnull align 8 dereferenceable(8) %72)
          to label %836 unwind label %946

836:                                              ; preds = %830
  %837 = load double, ptr %835, align 8, !tbaa !14
  %838 = invoke noundef double %824(double noundef %831, double noundef %837)
          to label %839 unwind label %946

839:                                              ; preds = %836
  %840 = fmul double %822, %838
  %841 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  %842 = load i32, ptr %69, align 4, !tbaa !10
  %843 = add nsw i32 %842, 1
  %844 = sext i32 %843 to i64
  store i64 %844, ptr %73, align 8, !tbaa !12
  %845 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %841, ptr noundef nonnull align 8 dereferenceable(8) %73)
          to label %846 unwind label %950

846:                                              ; preds = %839
  %847 = load i32, ptr %16, align 4, !tbaa !10
  %848 = sub nsw i32 %847, 1
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds double, ptr %845, i64 %849
  %851 = load double, ptr %850, align 8, !tbaa !14
  %852 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #5
  %853 = load i32, ptr %69, align 4, !tbaa !10
  %854 = sext i32 %853 to i64
  store i64 %854, ptr %74, align 8, !tbaa !12
  %855 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %852, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %856 unwind label %954

856:                                              ; preds = %846
  %857 = load i32, ptr %16, align 4, !tbaa !10
  %858 = sub nsw i32 %857, 1
  %859 = sext i32 %858 to i64
  %860 = getelementptr inbounds double, ptr %855, i64 %859
  %861 = load double, ptr %860, align 8, !tbaa !14
  %862 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %861, double %851)
  %863 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  %864 = load i32, ptr %69, align 4, !tbaa !10
  %865 = sub nsw i32 %864, 1
  %866 = sext i32 %865 to i64
  store i64 %866, ptr %75, align 8, !tbaa !12
  %867 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %863, ptr noundef nonnull align 8 dereferenceable(8) %75)
          to label %868 unwind label %958

868:                                              ; preds = %856
  %869 = load i32, ptr %16, align 4, !tbaa !10
  %870 = sub nsw i32 %869, 1
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds double, ptr %867, i64 %871
  %873 = load double, ptr %872, align 8, !tbaa !14
  %874 = fadd double %862, %873
  %875 = load double, ptr %25, align 8, !tbaa !14
  %876 = load double, ptr %25, align 8, !tbaa !14
  %877 = fmul double %875, %876
  %878 = fdiv double %874, %877
  %879 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #5
  %880 = load i32, ptr %69, align 4, !tbaa !10
  %881 = sext i32 %880 to i64
  store i64 %881, ptr %76, align 8, !tbaa !12
  %882 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %879, ptr noundef nonnull align 8 dereferenceable(8) %76)
          to label %883 unwind label %962

883:                                              ; preds = %868
  %884 = load i32, ptr %16, align 4, !tbaa !10
  %885 = sub nsw i32 %884, 2
  %886 = sext i32 %885 to i64
  %887 = getelementptr inbounds double, ptr %882, i64 %886
  %888 = load double, ptr %887, align 8, !tbaa !14
  %889 = load double, ptr %20, align 8, !tbaa !14
  %890 = fmul double 2.000000e+00, %889
  %891 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 8
  %892 = load ptr, ptr %891, align 8, !tbaa !31
  %893 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #5
  %894 = load i32, ptr %16, align 4, !tbaa !10
  %895 = sub nsw i32 %894, 1
  %896 = sext i32 %895 to i64
  store i64 %896, ptr %77, align 8, !tbaa !12
  %897 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %893, ptr noundef nonnull align 8 dereferenceable(8) %77)
          to label %898 unwind label %966

898:                                              ; preds = %883
  %899 = load double, ptr %897, align 8, !tbaa !14
  %900 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  %901 = load i32, ptr %69, align 4, !tbaa !10
  %902 = sext i32 %901 to i64
  store i64 %902, ptr %78, align 8, !tbaa !12
  %903 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %900, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %904 unwind label %970

904:                                              ; preds = %898
  %905 = load double, ptr %903, align 8, !tbaa !14
  %906 = invoke noundef double %892(double noundef %899, double noundef %905)
          to label %907 unwind label %970

907:                                              ; preds = %904
  %908 = fmul double %890, %906
  %909 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %888, double %908)
  %910 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  %911 = load i32, ptr %69, align 4, !tbaa !10
  %912 = sext i32 %911 to i64
  store i64 %912, ptr %79, align 8, !tbaa !12
  %913 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %910, ptr noundef nonnull align 8 dereferenceable(8) %79)
          to label %914 unwind label %974

914:                                              ; preds = %907
  %915 = load i32, ptr %16, align 4, !tbaa !10
  %916 = sub nsw i32 %915, 1
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds double, ptr %913, i64 %917
  %919 = load double, ptr %918, align 8, !tbaa !14
  %920 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %919, double %909)
  %921 = load double, ptr %20, align 8, !tbaa !14
  %922 = load double, ptr %20, align 8, !tbaa !14
  %923 = fmul double %921, %922
  %924 = fdiv double %920, %923
  %925 = fadd double %878, %924
  %926 = call double @llvm.fmuladd.f64(double %840, double %925, double %820)
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #5
  %927 = load i32, ptr %69, align 4, !tbaa !10
  %928 = sext i32 %927 to i64
  store i64 %928, ptr %80, align 8, !tbaa !12
  %929 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %930 unwind label %978

930:                                              ; preds = %914
  %931 = load i32, ptr %16, align 4, !tbaa !10
  %932 = sub nsw i32 %931, 1
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds double, ptr %929, i64 %933
  store double %926, ptr %934, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  br label %935

935:                                              ; preds = %930
  %936 = load i32, ptr %69, align 4, !tbaa !10
  %937 = add nsw i32 %936, 1
  store i32 %937, ptr %69, align 4, !tbaa !10
  br label %804, !llvm.loop !32

938:                                              ; preds = %810
  %939 = landingpad { ptr, i32 }
          cleanup
  %940 = extractvalue { ptr, i32 } %939, 0
  store ptr %940, ptr %22, align 8
  %941 = extractvalue { ptr, i32 } %939, 1
  store i32 %941, ptr %23, align 4
  br label %991

942:                                              ; preds = %815
  %943 = landingpad { ptr, i32 }
          cleanup
  %944 = extractvalue { ptr, i32 } %943, 0
  store ptr %944, ptr %22, align 8
  %945 = extractvalue { ptr, i32 } %943, 1
  store i32 %945, ptr %23, align 4
  br label %990

946:                                              ; preds = %836, %830
  %947 = landingpad { ptr, i32 }
          cleanup
  %948 = extractvalue { ptr, i32 } %947, 0
  store ptr %948, ptr %22, align 8
  %949 = extractvalue { ptr, i32 } %947, 1
  store i32 %949, ptr %23, align 4
  br label %989

950:                                              ; preds = %839
  %951 = landingpad { ptr, i32 }
          cleanup
  %952 = extractvalue { ptr, i32 } %951, 0
  store ptr %952, ptr %22, align 8
  %953 = extractvalue { ptr, i32 } %951, 1
  store i32 %953, ptr %23, align 4
  br label %988

954:                                              ; preds = %846
  %955 = landingpad { ptr, i32 }
          cleanup
  %956 = extractvalue { ptr, i32 } %955, 0
  store ptr %956, ptr %22, align 8
  %957 = extractvalue { ptr, i32 } %955, 1
  store i32 %957, ptr %23, align 4
  br label %987

958:                                              ; preds = %856
  %959 = landingpad { ptr, i32 }
          cleanup
  %960 = extractvalue { ptr, i32 } %959, 0
  store ptr %960, ptr %22, align 8
  %961 = extractvalue { ptr, i32 } %959, 1
  store i32 %961, ptr %23, align 4
  br label %986

962:                                              ; preds = %868
  %963 = landingpad { ptr, i32 }
          cleanup
  %964 = extractvalue { ptr, i32 } %963, 0
  store ptr %964, ptr %22, align 8
  %965 = extractvalue { ptr, i32 } %963, 1
  store i32 %965, ptr %23, align 4
  br label %985

966:                                              ; preds = %883
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %22, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %23, align 4
  br label %984

970:                                              ; preds = %904, %898
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %22, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %23, align 4
  br label %983

974:                                              ; preds = %907
  %975 = landingpad { ptr, i32 }
          cleanup
  %976 = extractvalue { ptr, i32 } %975, 0
  store ptr %976, ptr %22, align 8
  %977 = extractvalue { ptr, i32 } %975, 1
  store i32 %977, ptr %23, align 4
  br label %982

978:                                              ; preds = %914
  %979 = landingpad { ptr, i32 }
          cleanup
  %980 = extractvalue { ptr, i32 } %979, 0
  store ptr %980, ptr %22, align 8
  %981 = extractvalue { ptr, i32 } %979, 1
  store i32 %981, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  br label %982

982:                                              ; preds = %978, %974
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  br label %983

983:                                              ; preds = %982, %970
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  br label %984

984:                                              ; preds = %983, %966
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  br label %985

985:                                              ; preds = %984, %962
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #5
  br label %986

986:                                              ; preds = %985, %958
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  br label %987

987:                                              ; preds = %986, %954
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  br label %988

988:                                              ; preds = %987, %950
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  br label %989

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

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

991:                                              ; preds = %990, %938
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  br label %1531

992:                                              ; preds = %809
  br label %993

993:                                              ; preds = %992, %798
  %994 = load i8, ptr %10, align 1, !tbaa !9
  %995 = zext i8 %994 to i32
  %996 = and i32 %995, 128
  %997 = icmp ne i32 %996, 0
  br i1 %997, label %998, label %1188

998:                                              ; preds = %993
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  store i32 1, ptr %81, align 4, !tbaa !10
  br label %999

999:                                              ; preds = %1130, %998
  %1000 = load i32, ptr %81, align 4, !tbaa !10
  %1001 = load i32, ptr %16, align 4, !tbaa !10
  %1002 = sub nsw i32 %1001, 1
  %1003 = icmp slt i32 %1000, %1002
  br i1 %1003, label %1005, label %1004

1004:                                             ; preds = %999
  store i32 17, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  br label %1187

1005:                                             ; preds = %999
  %1006 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  %1007 = load i32, ptr %15, align 4, !tbaa !10
  %1008 = sub nsw i32 %1007, 1
  %1009 = sext i32 %1008 to i64
  store i64 %1009, ptr %82, align 8, !tbaa !12
  %1010 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1006, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %1011 unwind label %1133

1011:                                             ; preds = %1005
  %1012 = load i32, ptr %81, align 4, !tbaa !10
  %1013 = sext i32 %1012 to i64
  %1014 = getelementptr inbounds double, ptr %1010, i64 %1013
  %1015 = load double, ptr %1014, align 8, !tbaa !14
  %1016 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %1017 = load double, ptr %1016, align 8, !tbaa !16
  %1018 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 20
  %1019 = load ptr, ptr %1018, align 8, !tbaa !23
  %1020 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #5
  %1021 = load i32, ptr %81, align 4, !tbaa !10
  %1022 = sext i32 %1021 to i64
  store i64 %1022, ptr %83, align 8, !tbaa !12
  %1023 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1020, ptr noundef nonnull align 8 dereferenceable(8) %83)
          to label %1024 unwind label %1137

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

1031:                                             ; preds = %1024
  %1032 = load double, ptr %1030, align 8, !tbaa !14
  %1033 = invoke noundef double %1019(double noundef %1025, double noundef %1032)
          to label %1034 unwind label %1141

1034:                                             ; preds = %1031
  %1035 = fmul double %1017, %1033
  %1036 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #5
  %1037 = load i32, ptr %15, align 4, !tbaa !10
  %1038 = sub nsw i32 %1037, 2
  %1039 = sext i32 %1038 to i64
  store i64 %1039, ptr %85, align 8, !tbaa !12
  %1040 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1036, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %1041 unwind label %1145

1041:                                             ; preds = %1034
  %1042 = load i32, ptr %81, align 4, !tbaa !10
  %1043 = sext i32 %1042 to i64
  %1044 = getelementptr inbounds double, ptr %1040, i64 %1043
  %1045 = load double, ptr %1044, align 8, !tbaa !14
  %1046 = load double, ptr %25, align 8, !tbaa !14
  %1047 = fmul double 2.000000e+00, %1046
  %1048 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 10
  %1049 = load ptr, ptr %1048, align 8, !tbaa !33
  %1050 = load ptr, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #5
  %1051 = load i32, ptr %81, align 4, !tbaa !10
  %1052 = sext i32 %1051 to i64
  store i64 %1052, ptr %86, align 8, !tbaa !12
  %1053 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1050, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %1054 unwind label %1149

1054:                                             ; preds = %1041
  %1055 = load double, ptr %1053, align 8, !tbaa !14
  %1056 = load ptr, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #5
  %1057 = load i32, ptr %15, align 4, !tbaa !10
  %1058 = sub nsw i32 %1057, 1
  %1059 = sext i32 %1058 to i64
  store i64 %1059, ptr %87, align 8, !tbaa !12
  %1060 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1056, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %1061 unwind label %1153

1061:                                             ; preds = %1054
  %1062 = load double, ptr %1060, align 8, !tbaa !14
  %1063 = invoke noundef double %1049(double noundef %1055, double noundef %1062)
          to label %1064 unwind label %1153

1064:                                             ; preds = %1061
  %1065 = fmul double %1047, %1063
  %1066 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1045, double %1065)
  %1067 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #5
  %1068 = load i32, ptr %15, align 4, !tbaa !10
  %1069 = sub nsw i32 %1068, 1
  %1070 = sext i32 %1069 to i64
  store i64 %1070, ptr %88, align 8, !tbaa !12
  %1071 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1067, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %1072 unwind label %1157

1072:                                             ; preds = %1064
  %1073 = load i32, ptr %81, align 4, !tbaa !10
  %1074 = sext i32 %1073 to i64
  %1075 = getelementptr inbounds double, ptr %1071, i64 %1074
  %1076 = load double, ptr %1075, align 8, !tbaa !14
  %1077 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1076, double %1066)
  %1078 = load double, ptr %25, align 8, !tbaa !14
  %1079 = load double, ptr %25, align 8, !tbaa !14
  %1080 = fmul double %1078, %1079
  %1081 = fdiv double %1077, %1080
  %1082 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #5
  %1083 = load i32, ptr %15, align 4, !tbaa !10
  %1084 = sub nsw i32 %1083, 1
  %1085 = sext i32 %1084 to i64
  store i64 %1085, ptr %89, align 8, !tbaa !12
  %1086 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1082, ptr noundef nonnull align 8 dereferenceable(8) %89)
          to label %1087 unwind label %1161

1087:                                             ; preds = %1072
  %1088 = load i32, ptr %81, align 4, !tbaa !10
  %1089 = add nsw i32 %1088, 1
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds double, ptr %1086, i64 %1090
  %1092 = load double, ptr %1091, align 8, !tbaa !14
  %1093 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #5
  %1094 = load i32, ptr %15, align 4, !tbaa !10
  %1095 = sub nsw i32 %1094, 1
  %1096 = sext i32 %1095 to i64
  store i64 %1096, ptr %90, align 8, !tbaa !12
  %1097 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1093, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %1098 unwind label %1165

1098:                                             ; preds = %1087
  %1099 = load i32, ptr %81, align 4, !tbaa !10
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds double, ptr %1097, i64 %1100
  %1102 = load double, ptr %1101, align 8, !tbaa !14
  %1103 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1102, double %1092)
  %1104 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #5
  %1105 = load i32, ptr %15, align 4, !tbaa !10
  %1106 = sub nsw i32 %1105, 1
  %1107 = sext i32 %1106 to i64
  store i64 %1107, ptr %91, align 8, !tbaa !12
  %1108 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1104, ptr noundef nonnull align 8 dereferenceable(8) %91)
          to label %1109 unwind label %1169

1109:                                             ; preds = %1098
  %1110 = load i32, ptr %81, align 4, !tbaa !10
  %1111 = sub nsw i32 %1110, 1
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds double, ptr %1108, i64 %1112
  %1114 = load double, ptr %1113, align 8, !tbaa !14
  %1115 = fadd double %1103, %1114
  %1116 = load double, ptr %20, align 8, !tbaa !14
  %1117 = load double, ptr %20, align 8, !tbaa !14
  %1118 = fmul double %1116, %1117
  %1119 = fdiv double %1115, %1118
  %1120 = fadd double %1081, %1119
  %1121 = call double @llvm.fmuladd.f64(double %1035, double %1120, double %1015)
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #5
  %1122 = load i32, ptr %15, align 4, !tbaa !10
  %1123 = sub nsw i32 %1122, 1
  %1124 = sext i32 %1123 to i64
  store i64 %1124, ptr %92, align 8, !tbaa !12
  %1125 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %1126 unwind label %1173

1126:                                             ; preds = %1109
  %1127 = load i32, ptr %81, align 4, !tbaa !10
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds double, ptr %1125, i64 %1128
  store double %1121, ptr %1129, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  br label %1130

1130:                                             ; preds = %1126
  %1131 = load i32, ptr %81, align 4, !tbaa !10
  %1132 = add nsw i32 %1131, 1
  store i32 %1132, ptr %81, align 4, !tbaa !10
  br label %999, !llvm.loop !34

1133:                                             ; preds = %1005
  %1134 = landingpad { ptr, i32 }
          cleanup
  %1135 = extractvalue { ptr, i32 } %1134, 0
  store ptr %1135, ptr %22, align 8
  %1136 = extractvalue { ptr, i32 } %1134, 1
  store i32 %1136, ptr %23, align 4
  br label %1186

1137:                                             ; preds = %1011
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %22, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %23, align 4
  br label %1185

1141:                                             ; preds = %1031, %1024
  %1142 = landingpad { ptr, i32 }
          cleanup
  %1143 = extractvalue { ptr, i32 } %1142, 0
  store ptr %1143, ptr %22, align 8
  %1144 = extractvalue { ptr, i32 } %1142, 1
  store i32 %1144, ptr %23, align 4
  br label %1184

1145:                                             ; preds = %1034
  %1146 = landingpad { ptr, i32 }
          cleanup
  %1147 = extractvalue { ptr, i32 } %1146, 0
  store ptr %1147, ptr %22, align 8
  %1148 = extractvalue { ptr, i32 } %1146, 1
  store i32 %1148, ptr %23, align 4
  br label %1183

1149:                                             ; preds = %1041
  %1150 = landingpad { ptr, i32 }
          cleanup
  %1151 = extractvalue { ptr, i32 } %1150, 0
  store ptr %1151, ptr %22, align 8
  %1152 = extractvalue { ptr, i32 } %1150, 1
  store i32 %1152, ptr %23, align 4
  br label %1182

1153:                                             ; preds = %1061, %1054
  %1154 = landingpad { ptr, i32 }
          cleanup
  %1155 = extractvalue { ptr, i32 } %1154, 0
  store ptr %1155, ptr %22, align 8
  %1156 = extractvalue { ptr, i32 } %1154, 1
  store i32 %1156, ptr %23, align 4
  br label %1181

1157:                                             ; preds = %1064
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %22, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %23, align 4
  br label %1180

1161:                                             ; preds = %1072
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %22, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %23, align 4
  br label %1179

1165:                                             ; preds = %1087
  %1166 = landingpad { ptr, i32 }
          cleanup
  %1167 = extractvalue { ptr, i32 } %1166, 0
  store ptr %1167, ptr %22, align 8
  %1168 = extractvalue { ptr, i32 } %1166, 1
  store i32 %1168, ptr %23, align 4
  br label %1178

1169:                                             ; preds = %1098
  %1170 = landingpad { ptr, i32 }
          cleanup
  %1171 = extractvalue { ptr, i32 } %1170, 0
  store ptr %1171, ptr %22, align 8
  %1172 = extractvalue { ptr, i32 } %1170, 1
  store i32 %1172, ptr %23, align 4
  br label %1177

1173:                                             ; preds = %1109
  %1174 = landingpad { ptr, i32 }
          cleanup
  %1175 = extractvalue { ptr, i32 } %1174, 0
  store ptr %1175, ptr %22, align 8
  %1176 = extractvalue { ptr, i32 } %1174, 1
  store i32 %1176, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  br label %1177

1177:                                             ; preds = %1173, %1169
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  br label %1178

1178:                                             ; preds = %1177, %1165
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  br label %1179

1179:                                             ; preds = %1178, %1161
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #5
  br label %1180

1180:                                             ; preds = %1179, %1157
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #5
  br label %1181

1181:                                             ; preds = %1180, %1153
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  br label %1182

1182:                                             ; preds = %1181, %1149
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  br label %1183

1183:                                             ; preds = %1182, %1145
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  br label %1184

1184:                                             ; preds = %1183, %1141
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #5
  br label %1185

1185:                                             ; preds = %1184, %1137
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  br label %1186

1186:                                             ; preds = %1185, %1133
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  br label %1531

1187:                                             ; preds = %1004
  br label %1188

1188:                                             ; preds = %1187, %993
  %1189 = load i8, ptr %10, align 1, !tbaa !9
  %1190 = zext i8 %1189 to i32
  %1191 = and i32 %1190, 16
  %1192 = icmp ne i32 %1191, 0
  br i1 %1192, label %1193, label %1247

1193:                                             ; preds = %1188
  %1194 = load i8, ptr %10, align 1, !tbaa !9
  %1195 = zext i8 %1194 to i32
  %1196 = and i32 %1195, 64
  %1197 = icmp ne i32 %1196, 0
  br i1 %1197, label %1198, label %1247

1198:                                             ; preds = %1193
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #5
  store i64 0, ptr %93, align 8, !tbaa !12
  %1199 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %1200 unwind label %1223

1200:                                             ; preds = %1198
  %1201 = getelementptr inbounds double, ptr %1199, i64 1
  %1202 = load double, ptr %1201, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #5
  store i64 0, ptr %94, align 8, !tbaa !12
  %1203 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %1204 unwind label %1227

1204:                                             ; preds = %1200
  %1205 = getelementptr inbounds double, ptr %1203, i64 2
  %1206 = load double, ptr %1205, align 8, !tbaa !14
  %1207 = fneg double %1206
  %1208 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1202, double %1207)
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #5
  store i64 1, ptr %95, align 8, !tbaa !12
  %1209 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %1210 unwind label %1231

1210:                                             ; preds = %1204
  %1211 = getelementptr inbounds double, ptr %1209, i64 0
  %1212 = load double, ptr %1211, align 8, !tbaa !14
  %1213 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1212, double %1208)
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #5
  store i64 2, ptr %96, align 8, !tbaa !12
  %1214 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %1215 unwind label %1235

1215:                                             ; preds = %1210
  %1216 = getelementptr inbounds double, ptr %1214, i64 0
  %1217 = load double, ptr %1216, align 8, !tbaa !14
  %1218 = fsub double %1213, %1217
  %1219 = fdiv double %1218, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #5
  store i64 0, ptr %97, align 8, !tbaa !12
  %1220 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %1221 unwind label %1239

1221:                                             ; preds = %1215
  %1222 = getelementptr inbounds double, ptr %1220, i64 0
  store double %1219, ptr %1222, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #5
  br label %1247

1223:                                             ; preds = %1198
  %1224 = landingpad { ptr, i32 }
          cleanup
  %1225 = extractvalue { ptr, i32 } %1224, 0
  store ptr %1225, ptr %22, align 8
  %1226 = extractvalue { ptr, i32 } %1224, 1
  store i32 %1226, ptr %23, align 4
  br label %1246

1227:                                             ; preds = %1200
  %1228 = landingpad { ptr, i32 }
          cleanup
  %1229 = extractvalue { ptr, i32 } %1228, 0
  store ptr %1229, ptr %22, align 8
  %1230 = extractvalue { ptr, i32 } %1228, 1
  store i32 %1230, ptr %23, align 4
  br label %1245

1231:                                             ; preds = %1204
  %1232 = landingpad { ptr, i32 }
          cleanup
  %1233 = extractvalue { ptr, i32 } %1232, 0
  store ptr %1233, ptr %22, align 8
  %1234 = extractvalue { ptr, i32 } %1232, 1
  store i32 %1234, ptr %23, align 4
  br label %1244

1235:                                             ; preds = %1210
  %1236 = landingpad { ptr, i32 }
          cleanup
  %1237 = extractvalue { ptr, i32 } %1236, 0
  store ptr %1237, ptr %22, align 8
  %1238 = extractvalue { ptr, i32 } %1236, 1
  store i32 %1238, ptr %23, align 4
  br label %1243

1239:                                             ; preds = %1215
  %1240 = landingpad { ptr, i32 }
          cleanup
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %22, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #5
  br label %1243

1243:                                             ; preds = %1239, %1235
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #5
  br label %1244

1244:                                             ; preds = %1243, %1231
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  br label %1245

1245:                                             ; preds = %1244, %1227
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #5
  br label %1246

1246:                                             ; preds = %1245, %1223
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #5
  br label %1531

1247:                                             ; preds = %1221, %1193, %1188
  %1248 = load i8, ptr %10, align 1, !tbaa !9
  %1249 = zext i8 %1248 to i32
  %1250 = and i32 %1249, 64
  %1251 = icmp ne i32 %1250, 0
  br i1 %1251, label %1252, label %1321

1252:                                             ; preds = %1247
  %1253 = load i8, ptr %10, align 1, !tbaa !9
  %1254 = zext i8 %1253 to i32
  %1255 = and i32 %1254, 32
  %1256 = icmp ne i32 %1255, 0
  br i1 %1256, label %1257, label %1321

1257:                                             ; preds = %1252
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #5
  store i64 0, ptr %98, align 8, !tbaa !12
  %1258 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %1259 unwind label %1297

1259:                                             ; preds = %1257
  %1260 = load i32, ptr %16, align 4, !tbaa !10
  %1261 = sub nsw i32 %1260, 2
  %1262 = sext i32 %1261 to i64
  %1263 = getelementptr inbounds double, ptr %1258, i64 %1262
  %1264 = load double, ptr %1263, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #5
  store i64 0, ptr %99, align 8, !tbaa !12
  %1265 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %1266 unwind label %1301

1266:                                             ; preds = %1259
  %1267 = load i32, ptr %16, align 4, !tbaa !10
  %1268 = sub nsw i32 %1267, 3
  %1269 = sext i32 %1268 to i64
  %1270 = getelementptr inbounds double, ptr %1265, i64 %1269
  %1271 = load double, ptr %1270, align 8, !tbaa !14
  %1272 = fneg double %1271
  %1273 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1264, double %1272)
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #5
  store i64 1, ptr %100, align 8, !tbaa !12
  %1274 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %100)
          to label %1275 unwind label %1305

1275:                                             ; preds = %1266
  %1276 = load i32, ptr %16, align 4, !tbaa !10
  %1277 = sub nsw i32 %1276, 1
  %1278 = sext i32 %1277 to i64
  %1279 = getelementptr inbounds double, ptr %1274, i64 %1278
  %1280 = load double, ptr %1279, align 8, !tbaa !14
  %1281 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1280, double %1273)
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #5
  store i64 2, ptr %101, align 8, !tbaa !12
  %1282 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1283 unwind label %1309

1283:                                             ; preds = %1275
  %1284 = load i32, ptr %16, align 4, !tbaa !10
  %1285 = sub nsw i32 %1284, 1
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds double, ptr %1282, i64 %1286
  %1288 = load double, ptr %1287, align 8, !tbaa !14
  %1289 = fsub double %1281, %1288
  %1290 = fdiv double %1289, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #5
  store i64 0, ptr %102, align 8, !tbaa !12
  %1291 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %1292 unwind label %1313

1292:                                             ; preds = %1283
  %1293 = load i32, ptr %16, align 4, !tbaa !10
  %1294 = sub nsw i32 %1293, 1
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds double, ptr %1291, i64 %1295
  store double %1290, ptr %1296, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #5
  br label %1321

1297:                                             ; preds = %1257
  %1298 = landingpad { ptr, i32 }
          cleanup
  %1299 = extractvalue { ptr, i32 } %1298, 0
  store ptr %1299, ptr %22, align 8
  %1300 = extractvalue { ptr, i32 } %1298, 1
  store i32 %1300, ptr %23, align 4
  br label %1320

1301:                                             ; preds = %1259
  %1302 = landingpad { ptr, i32 }
          cleanup
  %1303 = extractvalue { ptr, i32 } %1302, 0
  store ptr %1303, ptr %22, align 8
  %1304 = extractvalue { ptr, i32 } %1302, 1
  store i32 %1304, ptr %23, align 4
  br label %1319

1305:                                             ; preds = %1266
  %1306 = landingpad { ptr, i32 }
          cleanup
  %1307 = extractvalue { ptr, i32 } %1306, 0
  store ptr %1307, ptr %22, align 8
  %1308 = extractvalue { ptr, i32 } %1306, 1
  store i32 %1308, ptr %23, align 4
  br label %1318

1309:                                             ; preds = %1275
  %1310 = landingpad { ptr, i32 }
          cleanup
  %1311 = extractvalue { ptr, i32 } %1310, 0
  store ptr %1311, ptr %22, align 8
  %1312 = extractvalue { ptr, i32 } %1310, 1
  store i32 %1312, ptr %23, align 4
  br label %1317

1313:                                             ; preds = %1283
  %1314 = landingpad { ptr, i32 }
          cleanup
  %1315 = extractvalue { ptr, i32 } %1314, 0
  store ptr %1315, ptr %22, align 8
  %1316 = extractvalue { ptr, i32 } %1314, 1
  store i32 %1316, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #5
  br label %1317

1317:                                             ; preds = %1313, %1309
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #5
  br label %1318

1318:                                             ; preds = %1317, %1305
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #5
  br label %1319

1319:                                             ; preds = %1318, %1301
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #5
  br label %1320

1320:                                             ; preds = %1319, %1297
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #5
  br label %1531

1321:                                             ; preds = %1292, %1252, %1247
  %1322 = load i8, ptr %10, align 1, !tbaa !9
  %1323 = zext i8 %1322 to i32
  %1324 = and i32 %1323, 16
  %1325 = icmp ne i32 %1324, 0
  br i1 %1325, label %1326, label %1395

1326:                                             ; preds = %1321
  %1327 = load i8, ptr %10, align 1, !tbaa !9
  %1328 = zext i8 %1327 to i32
  %1329 = and i32 %1328, 128
  %1330 = icmp ne i32 %1329, 0
  br i1 %1330, label %1331, label %1395

1331:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #5
  %1332 = load i32, ptr %15, align 4, !tbaa !10
  %1333 = sub nsw i32 %1332, 1
  %1334 = sext i32 %1333 to i64
  store i64 %1334, ptr %103, align 8, !tbaa !12
  %1335 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %103)
          to label %1336 unwind label %1371

1336:                                             ; preds = %1331
  %1337 = getelementptr inbounds double, ptr %1335, i64 1
  %1338 = load double, ptr %1337, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #5
  %1339 = load i32, ptr %15, align 4, !tbaa !10
  %1340 = sub nsw i32 %1339, 1
  %1341 = sext i32 %1340 to i64
  store i64 %1341, ptr %104, align 8, !tbaa !12
  %1342 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %1343 unwind label %1375

1343:                                             ; preds = %1336
  %1344 = getelementptr inbounds double, ptr %1342, i64 2
  %1345 = load double, ptr %1344, align 8, !tbaa !14
  %1346 = fneg double %1345
  %1347 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1338, double %1346)
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #5
  %1348 = load i32, ptr %15, align 4, !tbaa !10
  %1349 = sub nsw i32 %1348, 2
  %1350 = sext i32 %1349 to i64
  store i64 %1350, ptr %105, align 8, !tbaa !12
  %1351 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1352 unwind label %1379

1352:                                             ; preds = %1343
  %1353 = getelementptr inbounds double, ptr %1351, i64 0
  %1354 = load double, ptr %1353, align 8, !tbaa !14
  %1355 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1354, double %1347)
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #5
  %1356 = load i32, ptr %15, align 4, !tbaa !10
  %1357 = sub nsw i32 %1356, 3
  %1358 = sext i32 %1357 to i64
  store i64 %1358, ptr %106, align 8, !tbaa !12
  %1359 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %1360 unwind label %1383

1360:                                             ; preds = %1352
  %1361 = getelementptr inbounds double, ptr %1359, i64 0
  %1362 = load double, ptr %1361, align 8, !tbaa !14
  %1363 = fsub double %1355, %1362
  %1364 = fdiv double %1363, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #5
  %1365 = load i32, ptr %15, align 4, !tbaa !10
  %1366 = sub nsw i32 %1365, 1
  %1367 = sext i32 %1366 to i64
  store i64 %1367, ptr %107, align 8, !tbaa !12
  %1368 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %1369 unwind label %1387

1369:                                             ; preds = %1360
  %1370 = getelementptr inbounds double, ptr %1368, i64 0
  store double %1364, ptr %1370, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #5
  br label %1395

1371:                                             ; preds = %1331
  %1372 = landingpad { ptr, i32 }
          cleanup
  %1373 = extractvalue { ptr, i32 } %1372, 0
  store ptr %1373, ptr %22, align 8
  %1374 = extractvalue { ptr, i32 } %1372, 1
  store i32 %1374, ptr %23, align 4
  br label %1394

1375:                                             ; preds = %1336
  %1376 = landingpad { ptr, i32 }
          cleanup
  %1377 = extractvalue { ptr, i32 } %1376, 0
  store ptr %1377, ptr %22, align 8
  %1378 = extractvalue { ptr, i32 } %1376, 1
  store i32 %1378, ptr %23, align 4
  br label %1393

1379:                                             ; preds = %1343
  %1380 = landingpad { ptr, i32 }
          cleanup
  %1381 = extractvalue { ptr, i32 } %1380, 0
  store ptr %1381, ptr %22, align 8
  %1382 = extractvalue { ptr, i32 } %1380, 1
  store i32 %1382, ptr %23, align 4
  br label %1392

1383:                                             ; preds = %1352
  %1384 = landingpad { ptr, i32 }
          cleanup
  %1385 = extractvalue { ptr, i32 } %1384, 0
  store ptr %1385, ptr %22, align 8
  %1386 = extractvalue { ptr, i32 } %1384, 1
  store i32 %1386, ptr %23, align 4
  br label %1391

1387:                                             ; preds = %1360
  %1388 = landingpad { ptr, i32 }
          cleanup
  %1389 = extractvalue { ptr, i32 } %1388, 0
  store ptr %1389, ptr %22, align 8
  %1390 = extractvalue { ptr, i32 } %1388, 1
  store i32 %1390, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #5
  br label %1391

1391:                                             ; preds = %1387, %1383
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #5
  br label %1392

1392:                                             ; preds = %1391, %1379
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #5
  br label %1393

1393:                                             ; preds = %1392, %1375
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #5
  br label %1394

1394:                                             ; preds = %1393, %1371
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #5
  br label %1531

1395:                                             ; preds = %1369, %1326, %1321
  %1396 = load i8, ptr %10, align 1, !tbaa !9
  %1397 = zext i8 %1396 to i32
  %1398 = and i32 %1397, 128
  %1399 = icmp ne i32 %1398, 0
  br i1 %1399, label %1400, label %1484

1400:                                             ; preds = %1395
  %1401 = load i8, ptr %10, align 1, !tbaa !9
  %1402 = zext i8 %1401 to i32
  %1403 = and i32 %1402, 32
  %1404 = icmp ne i32 %1403, 0
  br i1 %1404, label %1405, label %1484

1405:                                             ; preds = %1400
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #5
  %1406 = load i32, ptr %15, align 4, !tbaa !10
  %1407 = sub nsw i32 %1406, 1
  %1408 = sext i32 %1407 to i64
  store i64 %1408, ptr %108, align 8, !tbaa !12
  %1409 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %1410 unwind label %1460

1410:                                             ; preds = %1405
  %1411 = load i32, ptr %16, align 4, !tbaa !10
  %1412 = sub nsw i32 %1411, 2
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds double, ptr %1409, i64 %1413
  %1415 = load double, ptr %1414, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #5
  %1416 = load i32, ptr %15, align 4, !tbaa !10
  %1417 = sub nsw i32 %1416, 1
  %1418 = sext i32 %1417 to i64
  store i64 %1418, ptr %109, align 8, !tbaa !12
  %1419 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %1420 unwind label %1464

1420:                                             ; preds = %1410
  %1421 = load i32, ptr %16, align 4, !tbaa !10
  %1422 = sub nsw i32 %1421, 3
  %1423 = sext i32 %1422 to i64
  %1424 = getelementptr inbounds double, ptr %1419, i64 %1423
  %1425 = load double, ptr %1424, align 8, !tbaa !14
  %1426 = fneg double %1425
  %1427 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1415, double %1426)
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #5
  %1428 = load i32, ptr %15, align 4, !tbaa !10
  %1429 = sub nsw i32 %1428, 2
  %1430 = sext i32 %1429 to i64
  store i64 %1430, ptr %110, align 8, !tbaa !12
  %1431 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %1432 unwind label %1468

1432:                                             ; preds = %1420
  %1433 = load i32, ptr %16, align 4, !tbaa !10
  %1434 = sub nsw i32 %1433, 1
  %1435 = sext i32 %1434 to i64
  %1436 = getelementptr inbounds double, ptr %1431, i64 %1435
  %1437 = load double, ptr %1436, align 8, !tbaa !14
  %1438 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1437, double %1427)
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #5
  %1439 = load i32, ptr %15, align 4, !tbaa !10
  %1440 = sub nsw i32 %1439, 3
  %1441 = sext i32 %1440 to i64
  store i64 %1441, ptr %111, align 8, !tbaa !12
  %1442 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %1443 unwind label %1472

1443:                                             ; preds = %1432
  %1444 = load i32, ptr %16, align 4, !tbaa !10
  %1445 = sub nsw i32 %1444, 1
  %1446 = sext i32 %1445 to i64
  %1447 = getelementptr inbounds double, ptr %1442, i64 %1446
  %1448 = load double, ptr %1447, align 8, !tbaa !14
  %1449 = fsub double %1438, %1448
  %1450 = fdiv double %1449, 2.000000e+00
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #5
  %1451 = load i32, ptr %15, align 4, !tbaa !10
  %1452 = sub nsw i32 %1451, 1
  %1453 = sext i32 %1452 to i64
  store i64 %1453, ptr %112, align 8, !tbaa !12
  %1454 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %1455 unwind label %1476

1455:                                             ; preds = %1443
  %1456 = load i32, ptr %16, align 4, !tbaa !10
  %1457 = sub nsw i32 %1456, 1
  %1458 = sext i32 %1457 to i64
  %1459 = getelementptr inbounds double, ptr %1454, i64 %1458
  store double %1450, ptr %1459, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #5
  br label %1484

1460:                                             ; preds = %1405
  %1461 = landingpad { ptr, i32 }
          cleanup
  %1462 = extractvalue { ptr, i32 } %1461, 0
  store ptr %1462, ptr %22, align 8
  %1463 = extractvalue { ptr, i32 } %1461, 1
  store i32 %1463, ptr %23, align 4
  br label %1483

1464:                                             ; preds = %1410
  %1465 = landingpad { ptr, i32 }
          cleanup
  %1466 = extractvalue { ptr, i32 } %1465, 0
  store ptr %1466, ptr %22, align 8
  %1467 = extractvalue { ptr, i32 } %1465, 1
  store i32 %1467, ptr %23, align 4
  br label %1482

1468:                                             ; preds = %1420
  %1469 = landingpad { ptr, i32 }
          cleanup
  %1470 = extractvalue { ptr, i32 } %1469, 0
  store ptr %1470, ptr %22, align 8
  %1471 = extractvalue { ptr, i32 } %1469, 1
  store i32 %1471, ptr %23, align 4
  br label %1481

1472:                                             ; preds = %1432
  %1473 = landingpad { ptr, i32 }
          cleanup
  %1474 = extractvalue { ptr, i32 } %1473, 0
  store ptr %1474, ptr %22, align 8
  %1475 = extractvalue { ptr, i32 } %1473, 1
  store i32 %1475, ptr %23, align 4
  br label %1480

1476:                                             ; preds = %1443
  %1477 = landingpad { ptr, i32 }
          cleanup
  %1478 = extractvalue { ptr, i32 } %1477, 0
  store ptr %1478, ptr %22, align 8
  %1479 = extractvalue { ptr, i32 } %1477, 1
  store i32 %1479, ptr %23, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #5
  br label %1480

1480:                                             ; preds = %1476, %1472
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #5
  br label %1481

1481:                                             ; preds = %1480, %1468
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  br label %1482

1482:                                             ; preds = %1481, %1464
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #5
  br label %1483

1483:                                             ; preds = %1482, %1460
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #5
  br label %1531

1484:                                             ; preds = %1455, %1400, %1395
  %1485 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 18
  %1486 = load double, ptr %1485, align 8, !tbaa !16
  %1487 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 17
  %1488 = load double, ptr %1487, align 8, !tbaa !35
  %1489 = fadd double %1488, %1486
  store double %1489, ptr %1487, align 8, !tbaa !35
  %1490 = load i8, ptr %11, align 1, !tbaa !9
  %1491 = zext i8 %1490 to i32
  %1492 = and i32 %1491, 2
  %1493 = icmp ne i32 %1492, 0
  br i1 %1493, label %1494, label %1529

1494:                                             ; preds = %1484
  %1495 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 3
  %1496 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %1495, ptr noundef @.str.6)
          to label %1497 unwind label %275

1497:                                             ; preds = %1494
  br i1 %1496, label %1498, label %1514

1498:                                             ; preds = %1497
  %1499 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %118, i32 0, i32 3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %113, ptr noundef nonnull align 8 dereferenceable(32) %1499)
          to label %1500 unwind label %275

1500:                                             ; preds = %1498
  call void @llvm.lifetime.start.p0(i64 1, ptr %115) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.13, ptr noundef nonnull align 1 dereferenceable(1) %115)
          to label %1501 unwind label %1505

1501:                                             ; preds = %1500
  %1502 = load ptr, ptr %12, align 8, !tbaa !5
  %1503 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %118, ptr noundef %113, ptr noundef %114, ptr noundef nonnull align 8 dereferenceable(24) %1502, ptr noundef nonnull align 8 dereferenceable(24) %1503, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %1504 unwind label %1509

1504:                                             ; preds = %1501
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #5
  br label %1528

1505:                                             ; preds = %1500
  %1506 = landingpad { ptr, i32 }
          cleanup
  %1507 = extractvalue { ptr, i32 } %1506, 0
  store ptr %1507, ptr %22, align 8
  %1508 = extractvalue { ptr, i32 } %1506, 1
  store i32 %1508, ptr %23, align 4
  br label %1513

1509:                                             ; preds = %1501
  %1510 = landingpad { ptr, i32 }
          cleanup
  %1511 = extractvalue { ptr, i32 } %1510, 0
  store ptr %1511, ptr %22, align 8
  %1512 = extractvalue { ptr, i32 } %1510, 1
  store i32 %1512, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #5
  br label %1513

1513:                                             ; preds = %1509, %1505
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %115) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #5
  br label %1531

1514:                                             ; preds = %1497
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef @.str.13, ptr noundef nonnull align 1 dereferenceable(1) %117)
          to label %1515 unwind label %1519

1515:                                             ; preds = %1514
  %1516 = load ptr, ptr %12, align 8, !tbaa !5
  %1517 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEhRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %118, ptr noundef %116, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %1516, ptr noundef nonnull align 8 dereferenceable(24) %1517, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %1518 unwind label %1523

1518:                                             ; preds = %1515
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #5
  br label %1528

1519:                                             ; preds = %1514
  %1520 = landingpad { ptr, i32 }
          cleanup
  %1521 = extractvalue { ptr, i32 } %1520, 0
  store ptr %1521, ptr %22, align 8
  %1522 = extractvalue { ptr, i32 } %1520, 1
  store i32 %1522, ptr %23, align 4
  br label %1527

1523:                                             ; preds = %1515
  %1524 = landingpad { ptr, i32 }
          cleanup
  %1525 = extractvalue { ptr, i32 } %1524, 0
  store ptr %1525, ptr %22, align 8
  %1526 = extractvalue { ptr, i32 } %1524, 1
  store i32 %1526, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #5
  br label %1527

1527:                                             ; preds = %1523, %1519
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #5
  br label %1531

1528:                                             ; preds = %1518, %1504
  br label %1529

1529:                                             ; preds = %1528, %1484
  store i1 true, ptr %17, align 1
  store i32 1, ptr %57, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  %1530 = load i1, ptr %17, align 1
  br i1 %1530, label %1534, label %1533

1531:                                             ; preds = %1527, %1513, %1483, %1394, %1320, %1246, %1186, %991, %793, %618, %449, %275, %274, %265, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %1532

1532:                                             ; preds = %1531, %247
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %1535

1533:                                             ; preds = %1529
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #5
  br label %1534

1534:                                             ; preds = %1533, %1529
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  ret void

1535:                                             ; preds = %1532
  %1536 = load ptr, ptr %22, align 8
  %1537 = load i32, ptr %23, align 4
  %1538 = insertvalue { ptr, i32 } poison, ptr %1536, 0
  %1539 = insertvalue { ptr, i32 } %1538, i32 %1537, 1
  resume { ptr, i32 } %1539
}

; 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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

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


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

%"class.std::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.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.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [17 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 nounwind uwtable
declare dso_local noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #1 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 @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40)) 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 uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #4

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveHEATEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEE(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, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(40) %6) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca i64, align 8
  %47 = alloca i64, align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca i64, align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = 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 %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.std::__cxx11::basic_string", align 8
  %94 = alloca %"class.std::allocator", align 1
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca %"class.std::allocator", align 1
  %97 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %98 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #6
  %sext = shl i64 %97, 32
  %99 = ashr exact i64 %sext, 32
  store i64 %99, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #6
  %sext250 = shl i64 %98, 32
  %100 = ashr exact i64 %sext250, 32
  store i64 %100, ptr %9, align 8, !tbaa !5
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #6
  %101 = getelementptr inbounds i8, ptr %1, i64 248
  %102 = trunc i64 %97 to i32
  %103 = insertelement <2 x i32> poison, i32 %102, i64 0
  %104 = trunc i64 %98 to i32
  %105 = insertelement <2 x i32> %103, i32 %104, i64 1
  %106 = add <2 x i32> %105, <i32 -1, i32 -1>
  %107 = extractelement <2 x i32> %106, i64 1
  %108 = sext i32 %107 to i64
  store i64 %108, ptr %10, align 8, !tbaa !5
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %10)
  %110 = load double, ptr %109, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #6
  store i64 0, ptr %11, align 8, !tbaa !5
  %111 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %11)
  %112 = load double, ptr %111, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #6
  %113 = extractelement <2 x i32> %106, i64 0
  %114 = sext i32 %113 to i64
  store i64 %114, ptr %12, align 8, !tbaa !5
  %115 = 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)
  %116 = load double, ptr %115, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  store i64 0, ptr %13, align 8, !tbaa !5
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %13)
  %118 = load double, ptr %117, align 8, !tbaa !9
  %119 = insertelement <2 x double> poison, double %116, i64 0
  %120 = insertelement <2 x double> %119, double %110, i64 1
  %121 = insertelement <2 x double> poison, double %118, i64 0
  %122 = insertelement <2 x double> %121, double %112, i64 1
  %123 = fsub <2 x double> %120, %122
  %124 = sitofp <2 x i32> %106 to <2 x double>
  %125 = fdiv <2 x double> %123, %124
  %126 = fptosi <2 x double> %125 to <2 x i32>
  %127 = call <2 x i32> @llvm.abs.v2i32(<2 x i32> %126, i1 true)
  %128 = uitofp nneg <2 x i32> %127 to <2 x double>
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #6
  %129 = load double, ptr %101, align 8, !tbaa !11
  %130 = fmul <2 x double> %128, %128
  %shift = shufflevector <2 x double> %130, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %131 = fmul <2 x double> %shift, %128
  %132 = fmul <2 x double> %131, %128
  %133 = extractelement <2 x double> %132, i64 0
  %134 = extractelement <2 x double> %130, i64 0
  %135 = extractelement <2 x double> %128, i64 1
  %136 = call double @llvm.fmuladd.f64(double %135, double %135, double %134)
  %137 = fdiv double %133, %136
  %138 = getelementptr inbounds i8, ptr %1, i64 264
  %139 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  store i64 0, ptr %14, align 8, !tbaa !5
  %140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %14)
  %141 = load double, ptr %140, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  store i64 0, ptr %15, align 8, !tbaa !5
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %143 = load double, ptr %142, align 8, !tbaa !9
  %144 = invoke noundef double %139(double noundef %141, double noundef %143)
          to label %145 unwind label %166

145:                                              ; preds = %7
  %146 = fmul double %144, 4.000000e+00
  %147 = fdiv double %137, %146
  %148 = fcmp ogt double %129, %147
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  br i1 %148, label %149, label %172

149:                                              ; preds = %145
  %150 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  store i64 0, ptr %16, align 8, !tbaa !5
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %16)
  %152 = load double, ptr %151, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  store i64 0, ptr %17, align 8, !tbaa !5
  %153 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %17)
  %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 %168

156:                                              ; preds = %149
  %157 = fmul double %155, 4.000000e+00
  %158 = fdiv double %137, %157
  %159 = fmul double %158, 9.000000e-01
  store double %159, ptr %101, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  %160 = 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.12)
          to label %161 unwind label %170

161:                                              ; preds = %156
  %162 = load double, ptr %101, align 8, !tbaa !11
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %160, double noundef %162)
          to label %164 unwind label %170

164:                                              ; preds = %161
  %165 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %163, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %172 unwind label %170

166:                                              ; preds = %7
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  br label %576

168:                                              ; preds = %149
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  br label %576

170:                                              ; preds = %559, %555, %172, %164, %161, %156
  %171 = landingpad { ptr, i32 }
          cleanup
  br label %576

172:                                              ; preds = %164, %145
  %173 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %6)
          to label %174 unwind label %170

174:                                              ; preds = %172
  %175 = zext i8 %2 to i32
  %176 = and i32 %175, 64
  %.not = icmp ne i32 %176, 0
  %177 = icmp sgt i32 %104, 2
  %or.cond = and i1 %.not, %177
  br i1 %or.cond, label %.lr.ph, label %.loopexit286

.lr.ph:                                           ; preds = %174
  %178 = getelementptr inbounds i8, ptr %1, i64 176
  %179 = extractelement <2 x i32> %127, i64 0
  %180 = shl nuw i32 %179, 1
  %181 = uitofp i32 %180 to double
  %wide.trip.count = zext nneg i32 %107 to i64
  br label %182

182:                                              ; preds = %.lr.ph, %203
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %203 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #6
  store i64 0, ptr %18, align 8, !tbaa !5
  %183 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %18)
  %184 = getelementptr inbounds double, ptr %183, i64 %indvars.iv
  %185 = load double, ptr %184, align 8, !tbaa !9
  %186 = load double, ptr %101, align 8, !tbaa !11
  %187 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #6
  store i64 %indvars.iv, ptr %19, align 8, !tbaa !5
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %19)
  %189 = load double, ptr %188, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #6
  store i64 0, ptr %20, 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) %20)
  %191 = load double, ptr %190, align 8, !tbaa !9
  %192 = invoke noundef double %187(double noundef %189, double noundef %191)
          to label %193 unwind label %232

193:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #6
  store i64 1, ptr %21, align 8, !tbaa !5
  %194 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %195 = getelementptr inbounds double, ptr %194, i64 %indvars.iv
  %196 = load double, ptr %195, align 8, !tbaa !9
  %197 = load ptr, ptr %178, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #6
  store i64 %indvars.iv, ptr %22, align 8, !tbaa !5
  %198 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %22)
  %199 = load double, ptr %198, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #6
  store i64 0, ptr %23, align 8, !tbaa !5
  %200 = 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)
  %201 = load double, ptr %200, align 8, !tbaa !9
  %202 = invoke noundef double %197(double noundef %199, double noundef %201)
          to label %203 unwind label %234

203:                                              ; preds = %193
  %204 = fmul double %186, %192
  %205 = fneg double %202
  %206 = fmul double %181, %205
  %207 = call double @llvm.fmuladd.f64(double %196, double 2.000000e+00, double %206)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #6
  store i64 0, ptr %24, align 8, !tbaa !5
  %208 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %209 = getelementptr inbounds double, ptr %208, i64 %indvars.iv
  %210 = load double, ptr %209, align 8, !tbaa !9
  %211 = call double @llvm.fmuladd.f64(double %210, double -2.000000e+00, double %207)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #6
  store i64 0, ptr %25, align 8, !tbaa !5
  %212 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %213 = getelementptr inbounds double, ptr %212, i64 %indvars.iv.next
  %214 = load double, ptr %213, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #6
  store i64 0, ptr %26, align 8, !tbaa !5
  %215 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %26)
  %216 = getelementptr inbounds double, ptr %215, i64 %indvars.iv
  %217 = load double, ptr %216, align 8, !tbaa !9
  %218 = call double @llvm.fmuladd.f64(double %217, double -2.000000e+00, double %214)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #6
  store i64 0, ptr %27, align 8, !tbaa !5
  %219 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %220 = getelementptr double, ptr %219, i64 %indvars.iv
  %221 = getelementptr i8, ptr %220, i64 -8
  %222 = load double, ptr %221, align 8, !tbaa !9
  %223 = fadd double %218, %222
  %224 = insertelement <2 x double> poison, double %211, i64 0
  %225 = insertelement <2 x double> %224, double %223, i64 1
  %226 = fdiv <2 x double> %225, %130
  %shift334 = shufflevector <2 x double> %226, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %227 = fadd <2 x double> %226, %shift334
  %228 = extractelement <2 x double> %227, i64 0
  %229 = call double @llvm.fmuladd.f64(double %204, double %228, double %185)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #6
  store i64 0, ptr %28, align 8, !tbaa !5
  %230 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %28)
  %231 = getelementptr inbounds double, ptr %230, i64 %indvars.iv
  store double %229, ptr %231, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit286, label %182, !llvm.loop !21

232:                                              ; preds = %182
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %236

234:                                              ; preds = %193
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #6
  br label %236

236:                                              ; preds = %234, %232
  %.pn274 = phi { ptr, i32 } [ %235, %234 ], [ %233, %232 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #6
  br label %576

.loopexit286:                                     ; preds = %203, %174
  %237 = and i32 %175, 16
  %.not251 = icmp eq i32 %237, 0
  %238 = icmp slt i32 %102, 3
  %or.cond298.not = or i1 %238, %.not251
  br i1 %or.cond298.not, label %.loopexit284, label %.lr.ph289

.lr.ph289:                                        ; preds = %.loopexit286
  %239 = getelementptr inbounds i8, ptr %1, i64 160
  %240 = extractelement <2 x i32> %127, i64 1
  %241 = shl nuw i32 %240, 1
  %242 = uitofp i32 %241 to double
  %wide.trip.count309 = zext nneg i32 %113 to i64
  br label %243

243:                                              ; preds = %.lr.ph289, %270
  %indvars.iv306 = phi i64 [ 1, %.lr.ph289 ], [ %indvars.iv.next307, %270 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #6
  store i64 %indvars.iv306, ptr %29, align 8, !tbaa !5
  %244 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %29)
  %245 = load double, ptr %244, align 8, !tbaa !9
  %246 = load double, ptr %101, align 8, !tbaa !11
  %247 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  store i64 0, ptr %30, align 8, !tbaa !5
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %30)
  %249 = load double, ptr %248, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #6
  store i64 %indvars.iv306, ptr %31, align 8, !tbaa !5
  %250 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %31)
  %251 = load double, ptr %250, align 8, !tbaa !9
  %252 = invoke noundef double %247(double noundef %249, double noundef %251)
          to label %253 unwind label %287

253:                                              ; preds = %243
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #6
  %indvars.iv.next307 = add nuw nsw i64 %indvars.iv306, 1
  store i64 %indvars.iv.next307, ptr %32, align 8, !tbaa !5
  %254 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %32)
  %255 = load double, ptr %254, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #6
  store i64 %indvars.iv306, ptr %33, align 8, !tbaa !5
  %256 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %33)
  %257 = load double, ptr %256, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #6
  %258 = add nsw i64 %indvars.iv306, -1
  store i64 %258, ptr %34, align 8, !tbaa !5
  %259 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %34)
  %260 = load double, ptr %259, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #6
  store i64 %indvars.iv306, ptr %35, align 8, !tbaa !5
  %261 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %35)
  %262 = getelementptr inbounds i8, ptr %261, i64 8
  %263 = load double, ptr %262, align 8, !tbaa !9
  %264 = load ptr, ptr %239, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #6
  store i64 0, ptr %36, align 8, !tbaa !5
  %265 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %36)
  %266 = load double, ptr %265, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #6
  store i64 %indvars.iv306, ptr %37, align 8, !tbaa !5
  %267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %37)
  %268 = load double, ptr %267, align 8, !tbaa !9
  %269 = invoke noundef double %264(double noundef %266, double noundef %268)
          to label %270 unwind label %289

270:                                              ; preds = %253
  %271 = call double @llvm.fmuladd.f64(double %257, double -2.000000e+00, double %255)
  %272 = fadd double %271, %260
  %273 = fmul double %246, %252
  %274 = fneg double %269
  %275 = fmul double %242, %274
  %276 = call double @llvm.fmuladd.f64(double %263, double 2.000000e+00, double %275)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #6
  store i64 %indvars.iv306, ptr %38, align 8, !tbaa !5
  %277 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %38)
  %278 = load double, ptr %277, align 8, !tbaa !9
  %279 = call double @llvm.fmuladd.f64(double %278, double -2.000000e+00, double %276)
  %280 = insertelement <2 x double> poison, double %272, i64 0
  %281 = insertelement <2 x double> %280, double %279, i64 1
  %282 = fdiv <2 x double> %281, %130
  %shift335 = shufflevector <2 x double> %282, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %283 = fadd <2 x double> %282, %shift335
  %284 = extractelement <2 x double> %283, i64 0
  %285 = call double @llvm.fmuladd.f64(double %273, double %284, double %245)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #6
  store i64 %indvars.iv306, ptr %39, align 8, !tbaa !5
  %286 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %39)
  store double %285, ptr %286, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  %exitcond310.not = icmp eq i64 %indvars.iv.next307, %wide.trip.count309
  br i1 %exitcond310.not, label %.loopexit284, label %243, !llvm.loop !24

287:                                              ; preds = %243
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %291

289:                                              ; preds = %253
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #6
  br label %291

291:                                              ; preds = %289, %287
  %.pn272 = phi { ptr, i32 } [ %290, %289 ], [ %288, %287 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %576

.loopexit284:                                     ; preds = %270, %.loopexit286
  %292 = icmp sgt i32 %102, 2
  br i1 %292, label %.preheader282.lr.ph, label %._crit_edge293.thread

._crit_edge293.thread:                            ; preds = %.loopexit284
  %293 = and i32 %175, 32
  %.not252331 = icmp eq i32 %293, 0
  br label %.loopexit281

.preheader282.lr.ph:                              ; preds = %.loopexit284
  br i1 %177, label %.preheader282.us.preheader, label %._crit_edge293

.preheader282.us.preheader:                       ; preds = %.preheader282.lr.ph
  %wide.trip.count319 = zext nneg i32 %113 to i64
  %wide.trip.count314 = zext i32 %107 to i64
  br label %.preheader282.us

.preheader282.us:                                 ; preds = %.preheader282.us.preheader, %._crit_edge.us
  %indvars.iv316 = phi i64 [ 1, %.preheader282.us.preheader ], [ %indvars.iv.next317, %._crit_edge.us ]
  %indvars.iv.next317 = add nuw nsw i64 %indvars.iv316, 1
  %294 = add nsw i64 %indvars.iv316, -1
  br label %295

295:                                              ; preds = %.preheader282.us, %306
  %indvars.iv311 = phi i64 [ 1, %.preheader282.us ], [ %indvars.iv.next312, %306 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #6
  store i64 %indvars.iv316, ptr %40, align 8, !tbaa !5
  %296 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %297 = getelementptr inbounds double, ptr %296, i64 %indvars.iv311
  %298 = load double, ptr %297, align 8, !tbaa !9
  %299 = load double, ptr %101, align 8, !tbaa !11
  %300 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #6
  store i64 %indvars.iv311, ptr %41, align 8, !tbaa !5
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %302 = load double, ptr %301, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #6
  store i64 %indvars.iv316, ptr %42, align 8, !tbaa !5
  %303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %42)
  %304 = load double, ptr %303, align 8, !tbaa !9
  %305 = invoke noundef double %300(double noundef %302, double noundef %304)
          to label %306 unwind label %.split.us

306:                                              ; preds = %295
  %307 = fmul double %299, %305
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #6
  store i64 %indvars.iv.next317, ptr %43, align 8, !tbaa !5
  %308 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %43)
  %309 = getelementptr inbounds double, ptr %308, i64 %indvars.iv311
  %310 = load double, ptr %309, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #6
  store i64 %indvars.iv316, ptr %44, align 8, !tbaa !5
  %311 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %312 = getelementptr inbounds double, ptr %311, i64 %indvars.iv311
  %313 = load double, ptr %312, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #6
  store i64 %294, ptr %45, align 8, !tbaa !5
  %314 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %45)
  %315 = getelementptr inbounds double, ptr %314, i64 %indvars.iv311
  %316 = load double, ptr %315, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #6
  store i64 %indvars.iv316, ptr %46, align 8, !tbaa !5
  %317 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %indvars.iv.next312 = add nuw nsw i64 %indvars.iv311, 1
  %318 = getelementptr inbounds double, ptr %317, i64 %indvars.iv.next312
  %319 = load double, ptr %318, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #6
  store i64 %indvars.iv316, ptr %47, align 8, !tbaa !5
  %320 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %47)
  %321 = getelementptr inbounds double, ptr %320, i64 %indvars.iv311
  %322 = load double, ptr %321, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #6
  store i64 %indvars.iv316, ptr %48, align 8, !tbaa !5
  %323 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %324 = getelementptr double, ptr %323, i64 %indvars.iv311
  %325 = getelementptr i8, ptr %324, i64 -8
  %326 = load double, ptr %325, align 8, !tbaa !9
  %327 = insertelement <2 x double> poison, double %313, i64 0
  %328 = insertelement <2 x double> %327, double %322, i64 1
  %329 = insertelement <2 x double> poison, double %310, i64 0
  %330 = insertelement <2 x double> %329, double %319, i64 1
  %331 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %328, <2 x double> <double -2.000000e+00, double -2.000000e+00>, <2 x double> %330)
  %332 = insertelement <2 x double> poison, double %316, i64 0
  %333 = insertelement <2 x double> %332, double %326, i64 1
  %334 = fadd <2 x double> %331, %333
  %335 = fdiv <2 x double> %334, %130
  %shift336 = shufflevector <2 x double> %335, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %336 = fadd <2 x double> %335, %shift336
  %337 = extractelement <2 x double> %336, i64 0
  %338 = call double @llvm.fmuladd.f64(double %307, double %337, double %298)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #6
  store i64 %indvars.iv316, ptr %49, align 8, !tbaa !5
  %339 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
  %340 = getelementptr inbounds double, ptr %339, i64 %indvars.iv311
  store double %338, ptr %340, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  %exitcond315.not = icmp eq i64 %indvars.iv.next312, %wide.trip.count314
  br i1 %exitcond315.not, label %._crit_edge.us, label %295, !llvm.loop !25

._crit_edge.us:                                   ; preds = %306
  %exitcond320.not = icmp eq i64 %indvars.iv.next317, %wide.trip.count319
  br i1 %exitcond320.not, label %._crit_edge293, label %.preheader282.us, !llvm.loop !26

.split.us:                                        ; preds = %295
  %341 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #6
  br label %576

._crit_edge293:                                   ; preds = %._crit_edge.us, %.preheader282.lr.ph
  %342 = and i32 %175, 32
  %.not252 = icmp eq i32 %342, 0
  %or.cond299.not = or i1 %238, %.not252
  br i1 %or.cond299.not, label %.loopexit281, label %.lr.ph295

.lr.ph295:                                        ; preds = %._crit_edge293
  %sext269 = add i64 %sext250, -8589934592
  %343 = ashr exact i64 %sext269, 29
  %344 = getelementptr inbounds i8, ptr %1, i64 168
  %345 = extractelement <2 x i32> %127, i64 1
  %346 = shl nuw i32 %345, 1
  %347 = uitofp i32 %346 to double
  %wide.trip.count324 = zext nneg i32 %113 to i64
  br label %348

348:                                              ; preds = %.lr.ph295, %379
  %indvars.iv321 = phi i64 [ 1, %.lr.ph295 ], [ %indvars.iv.next322, %379 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #6
  store i64 %indvars.iv321, ptr %50, align 8, !tbaa !5
  %349 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %50)
  %350 = getelementptr inbounds double, ptr %349, i64 %108
  %351 = load double, ptr %350, align 8, !tbaa !9
  %352 = load double, ptr %101, align 8, !tbaa !11
  %353 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %51) #6
  store i64 %108, ptr %51, align 8, !tbaa !5
  %354 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %51)
  %355 = load double, ptr %354, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #6
  store i64 %indvars.iv321, ptr %52, align 8, !tbaa !5
  %356 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %52)
  %357 = load double, ptr %356, align 8, !tbaa !9
  %358 = invoke noundef double %353(double noundef %355, double noundef %357)
          to label %359 unwind label %397

359:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #6
  %indvars.iv.next322 = add nuw nsw i64 %indvars.iv321, 1
  store i64 %indvars.iv.next322, ptr %53, align 8, !tbaa !5
  %360 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %53)
  %361 = getelementptr inbounds double, ptr %360, i64 %108
  %362 = load double, ptr %361, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #6
  store i64 %indvars.iv321, ptr %54, align 8, !tbaa !5
  %363 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %54)
  %364 = getelementptr inbounds double, ptr %363, i64 %108
  %365 = load double, ptr %364, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #6
  %366 = add nsw i64 %indvars.iv321, -1
  store i64 %366, ptr %55, align 8, !tbaa !5
  %367 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %55)
  %368 = getelementptr inbounds double, ptr %367, i64 %108
  %369 = load double, ptr %368, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #6
  store i64 %indvars.iv321, ptr %56, align 8, !tbaa !5
  %370 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %56)
  %371 = getelementptr inbounds i8, ptr %370, i64 %343
  %372 = load double, ptr %371, align 8, !tbaa !9
  %373 = load ptr, ptr %344, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #6
  store i64 %108, ptr %57, align 8, !tbaa !5
  %374 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %57)
  %375 = load double, ptr %374, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #6
  store i64 %indvars.iv321, ptr %58, align 8, !tbaa !5
  %376 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %58)
  %377 = load double, ptr %376, align 8, !tbaa !9
  %378 = invoke noundef double %373(double noundef %375, double noundef %377)
          to label %379 unwind label %399

379:                                              ; preds = %359
  %380 = call double @llvm.fmuladd.f64(double %365, double -2.000000e+00, double %362)
  %381 = fadd double %380, %369
  %382 = fmul double %352, %358
  %383 = fmul double %378, %347
  %384 = call double @llvm.fmuladd.f64(double %372, double 2.000000e+00, double %383)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #6
  store i64 %indvars.iv321, ptr %59, align 8, !tbaa !5
  %385 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %386 = getelementptr inbounds double, ptr %385, i64 %108
  %387 = load double, ptr %386, align 8, !tbaa !9
  %388 = call double @llvm.fmuladd.f64(double %387, double -2.000000e+00, double %384)
  %389 = insertelement <2 x double> poison, double %381, i64 0
  %390 = insertelement <2 x double> %389, double %388, i64 1
  %391 = fdiv <2 x double> %390, %130
  %shift337 = shufflevector <2 x double> %391, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %392 = fadd <2 x double> %391, %shift337
  %393 = extractelement <2 x double> %392, i64 0
  %394 = call double @llvm.fmuladd.f64(double %382, double %393, double %351)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #6
  store i64 %indvars.iv321, ptr %60, align 8, !tbaa !5
  %395 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %60)
  %396 = getelementptr inbounds double, ptr %395, i64 %108
  store double %394, ptr %396, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #6
  %exitcond325.not = icmp eq i64 %indvars.iv.next322, %wide.trip.count324
  br i1 %exitcond325.not, label %.loopexit281, label %348, !llvm.loop !28

397:                                              ; preds = %348
  %398 = landingpad { ptr, i32 }
          cleanup
  br label %401

399:                                              ; preds = %359
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #6
  br label %401

401:                                              ; preds = %399, %397
  %.pn270 = phi { ptr, i32 } [ %400, %399 ], [ %398, %397 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %51) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #6
  br label %576

.loopexit281:                                     ; preds = %379, %._crit_edge293.thread, %._crit_edge293
  %.not252333 = phi i1 [ %.not252331, %._crit_edge293.thread ], [ %.not252, %._crit_edge293 ], [ %.not252, %379 ]
  %.not253 = icmp sgt i8 %2, -1
  %402 = icmp slt i32 %104, 3
  %or.cond300.not = or i1 %402, %.not253
  br i1 %or.cond300.not, label %.loopexit, label %.lr.ph297

.lr.ph297:                                        ; preds = %.loopexit281
  %sext266 = add i64 %sext, -8589934592
  %403 = ashr exact i64 %sext266, 32
  %404 = getelementptr inbounds i8, ptr %1, i64 184
  %405 = extractelement <2 x i32> %127, i64 0
  %406 = shl nuw i32 %405, 1
  %407 = uitofp i32 %406 to double
  %wide.trip.count329 = zext nneg i32 %107 to i64
  br label %408

408:                                              ; preds = %.lr.ph297, %429
  %indvars.iv326 = phi i64 [ 1, %.lr.ph297 ], [ %indvars.iv.next327, %429 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #6
  store i64 %114, ptr %61, align 8, !tbaa !5
  %409 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %61)
  %410 = getelementptr inbounds double, ptr %409, i64 %indvars.iv326
  %411 = load double, ptr %410, align 8, !tbaa !9
  %412 = load double, ptr %101, align 8, !tbaa !11
  %413 = load ptr, ptr %138, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #6
  store i64 %indvars.iv326, ptr %62, align 8, !tbaa !5
  %414 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %62)
  %415 = load double, ptr %414, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #6
  store i64 %114, ptr %63, align 8, !tbaa !5
  %416 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %417 = load double, ptr %416, align 8, !tbaa !9
  %418 = invoke noundef double %413(double noundef %415, double noundef %417)
          to label %419 unwind label %457

419:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #6
  store i64 %403, ptr %64, align 8, !tbaa !5
  %420 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %64)
  %421 = getelementptr inbounds double, ptr %420, i64 %indvars.iv326
  %422 = load double, ptr %421, align 8, !tbaa !9
  %423 = load ptr, ptr %404, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #6
  store i64 %indvars.iv326, ptr %65, align 8, !tbaa !5
  %424 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %65)
  %425 = load double, ptr %424, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #6
  store i64 %114, ptr %66, align 8, !tbaa !5
  %426 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %66)
  %427 = load double, ptr %426, align 8, !tbaa !9
  %428 = invoke noundef double %423(double noundef %425, double noundef %427)
          to label %429 unwind label %459

429:                                              ; preds = %419
  %430 = fmul double %412, %418
  %431 = fmul double %428, %407
  %432 = call double @llvm.fmuladd.f64(double %422, double 2.000000e+00, double %431)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #6
  store i64 %114, ptr %67, align 8, !tbaa !5
  %433 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %67)
  %434 = getelementptr inbounds double, ptr %433, i64 %indvars.iv326
  %435 = load double, ptr %434, align 8, !tbaa !9
  %436 = call double @llvm.fmuladd.f64(double %435, double -2.000000e+00, double %432)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #6
  store i64 %114, ptr %68, align 8, !tbaa !5
  %437 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %68)
  %indvars.iv.next327 = add nuw nsw i64 %indvars.iv326, 1
  %438 = getelementptr inbounds double, ptr %437, i64 %indvars.iv.next327
  %439 = load double, ptr %438, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #6
  store i64 %114, ptr %69, align 8, !tbaa !5
  %440 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %69)
  %441 = getelementptr inbounds double, ptr %440, i64 %indvars.iv326
  %442 = load double, ptr %441, align 8, !tbaa !9
  %443 = call double @llvm.fmuladd.f64(double %442, double -2.000000e+00, double %439)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #6
  store i64 %114, ptr %70, align 8, !tbaa !5
  %444 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %70)
  %445 = getelementptr double, ptr %444, i64 %indvars.iv326
  %446 = getelementptr i8, ptr %445, i64 -8
  %447 = load double, ptr %446, align 8, !tbaa !9
  %448 = fadd double %443, %447
  %449 = insertelement <2 x double> poison, double %436, i64 0
  %450 = insertelement <2 x double> %449, double %448, i64 1
  %451 = fdiv <2 x double> %450, %130
  %shift338 = shufflevector <2 x double> %451, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %452 = fadd <2 x double> %451, %shift338
  %453 = extractelement <2 x double> %452, i64 0
  %454 = call double @llvm.fmuladd.f64(double %430, double %453, double %411)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #6
  store i64 %114, ptr %71, align 8, !tbaa !5
  %455 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %71)
  %456 = getelementptr inbounds double, ptr %455, i64 %indvars.iv326
  store double %454, ptr %456, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #6
  %exitcond330.not = icmp eq i64 %indvars.iv.next327, %wide.trip.count329
  br i1 %exitcond330.not, label %.loopexit, label %408, !llvm.loop !30

457:                                              ; preds = %408
  %458 = landingpad { ptr, i32 }
          cleanup
  br label %461

459:                                              ; preds = %419
  %460 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #6
  br label %461

461:                                              ; preds = %459, %457
  %.pn267 = phi { ptr, i32 } [ %460, %459 ], [ %458, %457 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #6
  br label %576

.loopexit:                                        ; preds = %429, %.loopexit281
  %462 = and i32 %175, 80
  %brmerge.not = icmp eq i32 %462, 80
  br i1 %brmerge.not, label %463, label %480

463:                                              ; preds = %.loopexit
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #6
  store i64 0, ptr %72, align 8, !tbaa !5
  %464 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %72)
  %465 = getelementptr inbounds i8, ptr %464, i64 8
  %466 = load double, ptr %465, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #6
  store i64 0, ptr %73, align 8, !tbaa !5
  %467 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %73)
  %468 = getelementptr inbounds i8, ptr %467, i64 16
  %469 = load double, ptr %468, align 8, !tbaa !9
  %470 = fneg double %469
  %471 = call double @llvm.fmuladd.f64(double %466, double 2.000000e+00, double %470)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #6
  store i64 1, ptr %74, align 8, !tbaa !5
  %472 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %74)
  %473 = load double, ptr %472, align 8, !tbaa !9
  %474 = call double @llvm.fmuladd.f64(double %473, double 2.000000e+00, double %471)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #6
  store i64 2, ptr %75, align 8, !tbaa !5
  %475 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %75)
  %476 = load double, ptr %475, align 8, !tbaa !9
  %477 = fsub double %474, %476
  %478 = fmul double %477, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #6
  store i64 0, ptr %76, align 8, !tbaa !5
  %479 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %76)
  store double %478, ptr %479, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #6
  br label %480

480:                                              ; preds = %.loopexit, %463
  %481 = and i32 %175, 96
  %brmerge277.not = icmp eq i32 %481, 96
  br i1 %brmerge277.not, label %482, label %504

482:                                              ; preds = %480
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #6
  store i64 0, ptr %77, align 8, !tbaa !5
  %483 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %77)
  %sext254 = add i64 %sext250, -8589934592
  %484 = ashr exact i64 %sext254, 29
  %485 = getelementptr inbounds i8, ptr %483, i64 %484
  %486 = load double, ptr %485, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #6
  store i64 0, ptr %78, align 8, !tbaa !5
  %487 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %78)
  %sext255 = add i64 %sext250, -12884901888
  %488 = ashr exact i64 %sext255, 29
  %489 = getelementptr inbounds i8, ptr %487, i64 %488
  %490 = load double, ptr %489, align 8, !tbaa !9
  %491 = fneg double %490
  %492 = call double @llvm.fmuladd.f64(double %486, double 2.000000e+00, double %491)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #6
  store i64 1, ptr %79, align 8, !tbaa !5
  %493 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %79)
  %494 = getelementptr inbounds double, ptr %493, i64 %108
  %495 = load double, ptr %494, align 8, !tbaa !9
  %496 = call double @llvm.fmuladd.f64(double %495, double 2.000000e+00, double %492)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #6
  store i64 2, ptr %80, align 8, !tbaa !5
  %497 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %498 = getelementptr inbounds double, ptr %497, i64 %108
  %499 = load double, ptr %498, align 8, !tbaa !9
  %500 = fsub double %496, %499
  %501 = fmul double %500, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #6
  store i64 0, ptr %81, align 8, !tbaa !5
  %502 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %81)
  %503 = getelementptr inbounds double, ptr %502, i64 %108
  store double %501, ptr %503, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #6
  br label %504

504:                                              ; preds = %480, %482
  %brmerge278 = or i1 %.not253, %.not251
  br i1 %brmerge278, label %524, label %505

505:                                              ; preds = %504
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #6
  store i64 %114, ptr %82, align 8, !tbaa !5
  %506 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %82)
  %507 = getelementptr inbounds i8, ptr %506, i64 8
  %508 = load double, ptr %507, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #6
  store i64 %114, ptr %83, align 8, !tbaa !5
  %509 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %510 = getelementptr inbounds i8, ptr %509, i64 16
  %511 = load double, ptr %510, align 8, !tbaa !9
  %512 = fneg double %511
  %513 = call double @llvm.fmuladd.f64(double %508, double 2.000000e+00, double %512)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #6
  %sext256 = add i64 %sext, -8589934592
  %514 = ashr exact i64 %sext256, 32
  store i64 %514, ptr %84, align 8, !tbaa !5
  %515 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %84)
  %516 = load double, ptr %515, align 8, !tbaa !9
  %517 = call double @llvm.fmuladd.f64(double %516, double 2.000000e+00, double %513)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #6
  %sext257 = add i64 %sext, -12884901888
  %518 = ashr exact i64 %sext257, 32
  store i64 %518, ptr %85, align 8, !tbaa !5
  %519 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %85)
  %520 = load double, ptr %519, align 8, !tbaa !9
  %521 = fsub double %517, %520
  %522 = fmul double %521, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #6
  store i64 %114, ptr %86, align 8, !tbaa !5
  %523 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %86)
  store double %522, ptr %523, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #6
  br label %524

524:                                              ; preds = %504, %505
  %brmerge279 = or i1 %.not253, %.not252333
  br i1 %brmerge279, label %549, label %525

525:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #6
  store i64 %114, ptr %87, align 8, !tbaa !5
  %526 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %sext258 = add i64 %sext250, -8589934592
  %527 = ashr exact i64 %sext258, 29
  %528 = getelementptr inbounds i8, ptr %526, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #6
  store i64 %114, ptr %88, align 8, !tbaa !5
  %530 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %88)
  %sext259 = add i64 %sext250, -12884901888
  %531 = ashr exact i64 %sext259, 29
  %532 = getelementptr inbounds i8, ptr %530, i64 %531
  %533 = load double, ptr %532, align 8, !tbaa !9
  %534 = fneg double %533
  %535 = call double @llvm.fmuladd.f64(double %529, double 2.000000e+00, double %534)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #6
  %sext260 = add i64 %sext, -8589934592
  %536 = ashr exact i64 %sext260, 32
  store i64 %536, ptr %89, align 8, !tbaa !5
  %537 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %538 = getelementptr inbounds double, ptr %537, i64 %108
  %539 = load double, ptr %538, align 8, !tbaa !9
  %540 = call double @llvm.fmuladd.f64(double %539, double 2.000000e+00, double %535)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #6
  %sext261 = add i64 %sext, -12884901888
  %541 = ashr exact i64 %sext261, 32
  store i64 %541, ptr %90, align 8, !tbaa !5
  %542 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %90)
  %543 = getelementptr inbounds double, ptr %542, i64 %108
  %544 = load double, ptr %543, align 8, !tbaa !9
  %545 = fsub double %540, %544
  %546 = fmul double %545, 5.000000e-01
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #6
  store i64 %114, ptr %91, align 8, !tbaa !5
  %547 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %91)
  %548 = getelementptr inbounds double, ptr %547, i64 %108
  store double %546, ptr %548, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #6
  br label %549

549:                                              ; preds = %524, %525
  %550 = load double, ptr %101, align 8, !tbaa !11
  %551 = getelementptr inbounds i8, ptr %1, i64 240
  %552 = load double, ptr %551, align 8, !tbaa !31
  %553 = fadd double %550, %552
  store double %553, ptr %551, align 8, !tbaa !31
  %554 = and i8 %3, 2
  %.not262 = icmp eq i8 %554, 0
  br i1 %.not262, label %577, label %555

555:                                              ; preds = %549
  %556 = getelementptr inbounds i8, ptr %1, i64 104
  %557 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %556, ptr noundef nonnull @.str.6)
          to label %558 unwind label %170

558:                                              ; preds = %555
  br i1 %557, label %559, label %568

559:                                              ; preds = %558
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 8 dereferenceable(32) %556)
          to label %560 unwind label %170

560:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %94) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %93, ptr noundef nonnull @.str.13, ptr noundef nonnull align 1 dereferenceable(1) %94)
          to label %561 unwind label %563

561:                                              ; preds = %560
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %92, ptr noundef nonnull %93, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %562 unwind label %565

562:                                              ; preds = %561
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %94) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #6
  br label %577

563:                                              ; preds = %560
  %564 = landingpad { ptr, i32 }
          cleanup
  br label %567

565:                                              ; preds = %561
  %566 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %93) #6
  br label %567

567:                                              ; preds = %565, %563
  %.pn264 = phi { ptr, i32 } [ %566, %565 ], [ %564, %563 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %94) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %94) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #6
  br label %576

568:                                              ; preds = %558
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %96) #6
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #6
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull @.str.13, ptr noundef nonnull align 1 dereferenceable(1) %96)
          to label %569 unwind label %571

569:                                              ; preds = %568
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEhRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %95, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %570 unwind label %573

570:                                              ; preds = %569
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #6
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %96) #6
  br label %577

571:                                              ; preds = %568
  %572 = landingpad { ptr, i32 }
          cleanup
  br label %575

573:                                              ; preds = %569
  %574 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #6
  br label %575

575:                                              ; preds = %573, %571
  %.pn = phi { ptr, i32 } [ %574, %573 ], [ %572, %571 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %96) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %96) #6
  br label %576

576:                                              ; preds = %575, %567, %461, %401, %.split.us, %291, %236, %170, %168, %166
  %.pn274.pn = phi { ptr, i32 } [ %.pn274, %236 ], [ %.pn272, %291 ], [ %341, %.split.us ], [ %.pn270, %401 ], [ %.pn267, %461 ], [ %.pn264, %567 ], [ %171, %170 ], [ %.pn, %575 ], [ %169, %168 ], [ %167, %166 ]
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #6
  resume { ptr, i32 } %.pn274.pn

577:                                              ; preds = %549, %570, %562
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i32> @llvm.abs.v2i32(<2 x i32>, i1 immarg) #5

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

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

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

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


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