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

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.cda::math::containers::Matrix" = type { i64, i64, i64, ptr, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::thread, std::allocator<std::thread>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::thread, std::allocator<std::thread>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%class.anon = type { i32, i32, ptr, i32, i32, %"class.cda::math::containers::Matrix.0", ptr, %"class.cda::math::containers::Matrix", %"class.cda::math::containers::Matrix", %"class.cda::math::containers::Vector", %"class.cda::math::containers::Vector", double, double }
%"class.cda::math::containers::Matrix.0" = type { i64, i64, i64, ptr, ptr }
%"class.cda::math::containers::Vector" = type { i64, ptr, ptr }
%"struct.std::_List_iterator" = type { ptr }
%class.anon.4 = type { i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"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 }

@initEDP = external dso_local global i8, align 1
@_ZL10EDPwarningB5cxx11 = external hidden global %"class.std::__cxx11::basic_string", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [18 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 @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
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: nounwind
declare double @sqrt(double noundef) #5

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEE(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, ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(40) %8) #2 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i1, align 1
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca double, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  %29 = alloca double, 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 i32, align 4
  %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 i32, align 4
  %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 %"class.std::__cxx11::list", align 8
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca %class.anon, align 8
  %71 = alloca ptr, align 8
  %72 = alloca %"struct.std::_List_iterator", align 8
  %73 = alloca %"struct.std::_List_iterator", align 8
  %74 = alloca ptr, align 8
  %75 = alloca i32, align 4
  %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 i32, align 4
  %90 = alloca i64, align 8
  %91 = alloca i64, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i64, align 8
  %95 = alloca i64, align 8
  %96 = alloca i64, align 8
  %97 = alloca i64, align 8
  %98 = alloca i64, align 8
  %99 = alloca i64, align 8
  %100 = alloca i64, align 8
  %101 = alloca i64, align 8
  %102 = alloca i64, align 8
  %103 = alloca i64, align 8
  %104 = alloca i64, align 8
  %105 = alloca i64, align 8
  %106 = alloca i64, align 8
  %107 = alloca i64, align 8
  %108 = alloca i64, align 8
  %109 = alloca i64, align 8
  %110 = alloca i64, align 8
  %111 = alloca i64, align 8
  %112 = alloca i64, align 8
  %113 = alloca i64, align 8
  %114 = alloca i64, align 8
  %115 = alloca i64, align 8
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca i64, align 8
  %119 = alloca i64, align 8
  %120 = alloca i64, align 8
  %121 = alloca i64, align 8
  %122 = alloca i64, align 8
  %123 = alloca i64, align 8
  %124 = alloca i64, align 8
  %125 = alloca i64, align 8
  %126 = alloca i64, align 8
  %127 = alloca i64, align 8
  %128 = alloca i64, align 8
  %129 = alloca i64, align 8
  %130 = alloca i64, align 8
  %131 = alloca i64, align 8
  %132 = alloca i64, align 8
  %133 = alloca i64, align 8
  %134 = alloca i64, align 8
  %135 = alloca i64, align 8
  %136 = alloca i64, align 8
  %137 = alloca i64, align 8
  %138 = alloca i64, align 8
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca i64, align 8
  %142 = alloca i64, align 8
  %143 = alloca i64, align 8
  %144 = alloca i64, align 8
  %145 = alloca i64, align 8
  %146 = alloca i64, align 8
  %147 = alloca i64, align 8
  %148 = alloca i64, align 8
  %149 = alloca i64, align 8
  %150 = alloca i64, align 8
  %151 = alloca i64, align 8
  %152 = alloca i64, align 8
  %153 = alloca i64, align 8
  %154 = alloca i64, align 8
  %155 = alloca i64, align 8
  %156 = alloca i64, align 8
  %157 = alloca i64, align 8
  %158 = alloca i64, align 8
  %159 = alloca i32, align 4
  %160 = alloca i64, align 8
  %161 = alloca i64, align 8
  %162 = alloca i64, align 8
  %163 = alloca i64, align 8
  %164 = alloca i64, align 8
  %165 = alloca i64, align 8
  %166 = alloca i64, align 8
  %167 = alloca i64, align 8
  %168 = alloca i64, align 8
  %169 = alloca i64, align 8
  %170 = alloca i64, align 8
  %171 = alloca i64, align 8
  %172 = alloca i64, align 8
  %173 = alloca i32, align 4
  %174 = alloca i64, align 8
  %175 = alloca i64, align 8
  %176 = alloca i64, align 8
  %177 = alloca i64, align 8
  %178 = alloca i64, align 8
  %179 = alloca i64, align 8
  %180 = alloca i64, align 8
  %181 = alloca i64, align 8
  %182 = alloca i64, align 8
  %183 = alloca i64, align 8
  %184 = alloca i64, align 8
  %185 = alloca i64, align 8
  %186 = alloca i64, align 8
  %187 = alloca i64, align 8
  %188 = alloca %"class.std::__cxx11::list", align 8
  %189 = alloca i32, align 4
  %190 = alloca i32, align 4
  %191 = alloca i32, align 4
  %192 = alloca i32, align 4
  %193 = alloca %class.anon.4, align 8
  %194 = alloca ptr, align 8
  %195 = alloca %"struct.std::_List_iterator", align 8
  %196 = alloca %"struct.std::_List_iterator", align 8
  %197 = alloca ptr, align 8
  %198 = alloca i32, align 4
  %199 = alloca i64, align 8
  %200 = alloca i64, align 8
  %201 = alloca i64, align 8
  %202 = alloca i64, align 8
  %203 = alloca i64, align 8
  %204 = alloca i64, align 8
  %205 = alloca i64, align 8
  %206 = alloca i64, align 8
  %207 = alloca i64, align 8
  %208 = alloca i64, align 8
  %209 = alloca i64, align 8
  %210 = alloca i64, align 8
  %211 = alloca i64, align 8
  %212 = alloca i32, align 4
  %213 = alloca i64, align 8
  %214 = alloca i64, align 8
  %215 = alloca i64, align 8
  %216 = alloca i64, align 8
  %217 = alloca i64, align 8
  %218 = alloca i64, align 8
  %219 = alloca i64, align 8
  %220 = alloca i64, align 8
  %221 = alloca i64, align 8
  %222 = alloca i64, align 8
  %223 = alloca i64, align 8
  %224 = alloca i64, align 8
  %225 = alloca i64, align 8
  %226 = alloca i64, align 8
  %227 = alloca i64, align 8
  %228 = alloca i64, align 8
  %229 = alloca i64, align 8
  %230 = alloca i64, align 8
  %231 = alloca i64, align 8
  %232 = alloca i64, align 8
  %233 = alloca i64, align 8
  %234 = alloca i64, align 8
  %235 = alloca i64, align 8
  %236 = alloca i64, align 8
  %237 = alloca i64, align 8
  %238 = alloca i64, align 8
  %239 = alloca i64, align 8
  %240 = alloca i64, align 8
  %241 = alloca i64, align 8
  %242 = alloca i64, align 8
  %243 = alloca i64, align 8
  %244 = alloca i64, align 8
  %245 = alloca i64, align 8
  %246 = alloca i64, align 8
  %247 = alloca i64, align 8
  %248 = alloca i64, align 8
  %249 = alloca i64, align 8
  %250 = alloca i64, align 8
  %251 = alloca i64, align 8
  %252 = alloca i64, align 8
  %253 = alloca i64, align 8
  %254 = alloca i64, align 8
  %255 = alloca i64, align 8
  %256 = alloca i64, align 8
  %257 = alloca i64, align 8
  %258 = alloca i64, align 8
  %259 = alloca i64, align 8
  %260 = alloca i64, align 8
  %261 = alloca i64, align 8
  %262 = alloca i64, align 8
  %263 = alloca i64, align 8
  %264 = alloca i64, align 8
  %265 = alloca i64, align 8
  %266 = alloca i64, align 8
  %267 = alloca i64, align 8
  %268 = alloca i64, align 8
  %269 = alloca i64, align 8
  %270 = alloca i64, align 8
  %271 = alloca i64, align 8
  %272 = alloca i64, align 8
  %273 = alloca i64, align 8
  %274 = alloca i64, align 8
  %275 = alloca i64, align 8
  %276 = alloca i64, align 8
  %277 = alloca i64, align 8
  %278 = alloca i64, align 8
  %279 = alloca i64, align 8
  %280 = alloca i64, align 8
  %281 = alloca i64, align 8
  %282 = alloca %"class.std::__cxx11::basic_string", align 8
  %283 = alloca %"class.std::__cxx11::basic_string", align 8
  %284 = alloca %"class.std::allocator", align 1
  %285 = alloca %"class.std::__cxx11::basic_string", align 8
  %286 = alloca %"class.std::allocator", align 1
  store ptr %0, ptr %10, align 8
  store ptr %1, ptr %11, align 8, !tbaa !5
  store i8 %2, ptr %12, align 1, !tbaa !9
  store i8 %3, ptr %13, align 1, !tbaa !9
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  %287 = load ptr, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %288 = load ptr, ptr %15, align 8, !tbaa !5
  %289 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %288)
  %290 = trunc i64 %289 to i32
  store i32 %290, ptr %19, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %291 = load ptr, ptr %14, align 8, !tbaa !5
  %292 = call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %291)
  %293 = trunc i64 %292 to i32
  store i32 %293, ptr %20, align 4, !tbaa !10
  store i1 false, ptr %21, align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %294 = load i32, ptr %19, align 4, !tbaa !10
  %295 = sext i32 %294 to i64
  store i64 %295, ptr %22, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %296 = load i32, ptr %20, align 4, !tbaa !10
  %297 = sext i32 %296 to i64
  store i64 %297, ptr %23, align 8, !tbaa !12
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %298 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %299 = load i32, ptr %20, align 4, !tbaa !10
  %300 = sub nsw i32 %299, 1
  %301 = sext i32 %300 to i64
  store i64 %301, ptr %25, align 8, !tbaa !12
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %298, ptr noundef nonnull align 8 dereferenceable(8) %25)
          to label %303 unwind label %400

303:                                              ; preds = %9
  %304 = load double, ptr %302, align 8, !tbaa !14
  %305 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store i64 0, ptr %28, align 8, !tbaa !12
  %306 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %305, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %307 unwind label %404

307:                                              ; preds = %303
  %308 = load double, ptr %306, align 8, !tbaa !14
  %309 = fsub double %304, %308
  %310 = load i32, ptr %20, align 4, !tbaa !10
  %311 = sub nsw i32 %310, 1
  %312 = sitofp i32 %311 to double
  %313 = fdiv double %309, %312
  %314 = fptosi double %313 to i32
  %315 = call i32 @llvm.abs.i32(i32 %314, i1 true)
  %316 = sitofp i32 %315 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  store double %316, ptr %24, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %317 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %318 = load i32, ptr %19, align 4, !tbaa !10
  %319 = sub nsw i32 %318, 1
  %320 = sext i32 %319 to i64
  store i64 %320, ptr %30, align 8, !tbaa !12
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %317, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %322 unwind label %409

322:                                              ; preds = %307
  %323 = load double, ptr %321, align 8, !tbaa !14
  %324 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  store i64 0, ptr %31, align 8, !tbaa !12
  %325 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %324, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %326 unwind label %413

326:                                              ; preds = %322
  %327 = load double, ptr %325, align 8, !tbaa !14
  %328 = fsub double %323, %327
  %329 = load i32, ptr %19, align 4, !tbaa !10
  %330 = sub nsw i32 %329, 1
  %331 = sitofp i32 %330 to double
  %332 = fdiv double %328, %331
  %333 = fptosi double %332 to i32
  %334 = call i32 @llvm.abs.i32(i32 %333, i1 true)
  %335 = sitofp i32 %334 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  store double %335, ptr %29, align 8, !tbaa !14
  %336 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %337 = load double, ptr %336, align 8, !tbaa !16
  %338 = load double, ptr %24, align 8, !tbaa !14
  %339 = load double, ptr %29, align 8, !tbaa !14
  %340 = fmul double %338, %339
  %341 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %342 = load ptr, ptr %341, align 8, !tbaa !23
  %343 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store i64 0, ptr %32, align 8, !tbaa !12
  %344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %343, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %345 unwind label %418

345:                                              ; preds = %326
  %346 = load double, ptr %344, align 8, !tbaa !14
  %347 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  store i64 0, ptr %33, align 8, !tbaa !12
  %348 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %347, ptr noundef nonnull align 8 dereferenceable(8) %33)
          to label %349 unwind label %422

349:                                              ; preds = %345
  %350 = load double, ptr %348, align 8, !tbaa !14
  %351 = invoke noundef double %342(double noundef %346, double noundef %350)
          to label %352 unwind label %422

352:                                              ; preds = %349
  %353 = load double, ptr %24, align 8, !tbaa !14
  %354 = load double, ptr %24, align 8, !tbaa !14
  %355 = load double, ptr %29, align 8, !tbaa !14
  %356 = load double, ptr %29, align 8, !tbaa !14
  %357 = fmul double %355, %356
  %358 = call double @llvm.fmuladd.f64(double %353, double %354, double %357)
  %359 = fmul double %351, %358
  %360 = call double @sqrt(double noundef %359) #8
  %361 = fdiv double %340, %360
  %362 = fcmp ogt double %337, %361
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br i1 %362, label %363, label %440

363:                                              ; preds = %352
  %364 = load double, ptr %24, align 8, !tbaa !14
  %365 = load double, ptr %29, align 8, !tbaa !14
  %366 = fmul double %364, %365
  %367 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %368 = load ptr, ptr %367, align 8, !tbaa !23
  %369 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  store i64 0, ptr %34, align 8, !tbaa !12
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %369, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %371 unwind label %427

371:                                              ; preds = %363
  %372 = load double, ptr %370, align 8, !tbaa !14
  %373 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  store i64 0, ptr %35, align 8, !tbaa !12
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %373, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %375 unwind label %431

375:                                              ; preds = %371
  %376 = load double, ptr %374, align 8, !tbaa !14
  %377 = invoke noundef double %368(double noundef %372, double noundef %376)
          to label %378 unwind label %431

378:                                              ; preds = %375
  %379 = load double, ptr %24, align 8, !tbaa !14
  %380 = load double, ptr %24, align 8, !tbaa !14
  %381 = load double, ptr %29, align 8, !tbaa !14
  %382 = load double, ptr %29, align 8, !tbaa !14
  %383 = fmul double %381, %382
  %384 = call double @llvm.fmuladd.f64(double %379, double %380, double %383)
  %385 = fmul double %377, %384
  %386 = call double @sqrt(double noundef %385) #8
  %387 = fdiv double %366, %386
  %388 = fmul double %387, 9.000000e-01
  %389 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  store double %388, ptr %389, align 8, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  %390 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) @_ZL10EDPwarningB5cxx11)
          to label %391 unwind label %436

391:                                              ; preds = %378
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %390, ptr noundef @.str.10)
          to label %393 unwind label %436

393:                                              ; preds = %391
  %394 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %395 = load double, ptr %394, align 8, !tbaa !16
  %396 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %392, double noundef %395)
          to label %397 unwind label %436

397:                                              ; preds = %393
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %399 unwind label %436

399:                                              ; preds = %397
  br label %440

400:                                              ; preds = %9
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %26, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %27, align 4
  br label %408

404:                                              ; preds = %303
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %26, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %408

408:                                              ; preds = %404, %400
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %4193

409:                                              ; preds = %307
  %410 = landingpad { ptr, i32 }
          cleanup
  %411 = extractvalue { ptr, i32 } %410, 0
  store ptr %411, ptr %26, align 8
  %412 = extractvalue { ptr, i32 } %410, 1
  store i32 %412, ptr %27, align 4
  br label %417

413:                                              ; preds = %322
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %26, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %417

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

418:                                              ; preds = %326
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %26, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %27, align 4
  br label %426

422:                                              ; preds = %349, %345
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %26, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %426

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

427:                                              ; preds = %363
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %26, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %27, align 4
  br label %435

431:                                              ; preds = %375, %371
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %26, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %435

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

436:                                              ; preds = %4159, %4155, %4141, %446, %440, %397, %393, %391, %378
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %26, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %27, align 4
  br label %4192

440:                                              ; preds = %399, %352
  %441 = load ptr, ptr %16, align 8, !tbaa !5
  %442 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %441)
          to label %443 unwind label %436

443:                                              ; preds = %440
  %444 = load i8, ptr @initEDP, align 1, !tbaa !24, !range !26, !noundef !27
  %445 = trunc i8 %444 to i1
  br i1 %445, label %2317, label %446

446:                                              ; preds = %443
  store i8 1, ptr @initEDP, align 1, !tbaa !24
  %447 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  invoke void @_ZN3cda4math10containers6MatrixIdE4zeroEv(ptr noundef nonnull align 8 dereferenceable(40) %447)
          to label %448 unwind label %436

448:                                              ; preds = %446
  %449 = load i8, ptr %12, align 1, !tbaa !9
  %450 = zext i8 %449 to i32
  %451 = and i32 %450, 64
  %452 = icmp ne i32 %451, 0
  br i1 %452, label %453, label %652

453:                                              ; preds = %448
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  store i32 1, ptr %36, align 4, !tbaa !10
  br label %454

454:                                              ; preds = %647, %453
  %455 = load i32, ptr %36, align 4, !tbaa !10
  %456 = load i32, ptr %20, align 4, !tbaa !10
  %457 = sub nsw i32 %456, 1
  %458 = icmp slt i32 %455, %457
  br i1 %458, label %460, label %459

459:                                              ; preds = %454
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %651

460:                                              ; preds = %454
  %461 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  store i64 0, ptr %37, align 8, !tbaa !12
  %462 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %461, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %463 unwind label %583

463:                                              ; preds = %460
  %464 = load i32, ptr %36, align 4, !tbaa !10
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds i8, ptr %462, i64 %465
  %467 = load i8, ptr %466, align 1, !tbaa !24, !range !26, !noundef !27
  %468 = trunc i8 %467 to i1
  %469 = xor i1 %468, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br i1 %469, label %470, label %646

470:                                              ; preds = %463
  %471 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  store i64 0, ptr %38, align 8, !tbaa !12
  %472 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %471, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %473 unwind label %587

473:                                              ; preds = %470
  %474 = load i32, ptr %36, align 4, !tbaa !10
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds double, ptr %472, i64 %475
  %477 = load double, ptr %476, align 8, !tbaa !14
  %478 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %479 = load double, ptr %478, align 8, !tbaa !16
  %480 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  store i64 0, ptr %39, align 8, !tbaa !12
  %481 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %480, ptr noundef nonnull align 8 dereferenceable(8) %39)
          to label %482 unwind label %591

482:                                              ; preds = %473
  %483 = load i32, ptr %36, align 4, !tbaa !10
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds double, ptr %481, i64 %484
  %486 = load double, ptr %485, align 8, !tbaa !14
  %487 = call double @llvm.fmuladd.f64(double %479, double %486, double %477)
  %488 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %489 = load ptr, ptr %488, align 8, !tbaa !23
  %490 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %491 = load i32, ptr %36, align 4, !tbaa !10
  %492 = sext i32 %491 to i64
  store i64 %492, ptr %40, align 8, !tbaa !12
  %493 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %490, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %494 unwind label %595

494:                                              ; preds = %482
  %495 = load double, ptr %493, align 8, !tbaa !14
  %496 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  store i64 0, ptr %41, align 8, !tbaa !12
  %497 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %496, ptr noundef nonnull align 8 dereferenceable(8) %41)
          to label %498 unwind label %599

498:                                              ; preds = %494
  %499 = load double, ptr %497, align 8, !tbaa !14
  %500 = invoke noundef double %489(double noundef %495, double noundef %499)
          to label %501 unwind label %599

501:                                              ; preds = %498
  %502 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %503 = load double, ptr %502, align 8, !tbaa !16
  %504 = fmul double %500, %503
  %505 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %506 = load double, ptr %505, align 8, !tbaa !16
  %507 = fmul double %504, %506
  %508 = fdiv double %507, 2.000000e+00
  %509 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  store i64 1, ptr %42, align 8, !tbaa !12
  %510 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %509, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %511 unwind label %603

511:                                              ; preds = %501
  %512 = load i32, ptr %36, align 4, !tbaa !10
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds double, ptr %510, i64 %513
  %515 = load double, ptr %514, align 8, !tbaa !14
  %516 = load double, ptr %29, align 8, !tbaa !14
  %517 = fmul double 2.000000e+00, %516
  %518 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %519 = load ptr, ptr %518, align 8, !tbaa !28
  %520 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %521 = load i32, ptr %36, align 4, !tbaa !10
  %522 = sext i32 %521 to i64
  store i64 %522, ptr %43, align 8, !tbaa !12
  %523 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %520, ptr noundef nonnull align 8 dereferenceable(8) %43)
          to label %524 unwind label %607

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

528:                                              ; preds = %524
  %529 = load double, ptr %527, align 8, !tbaa !14
  %530 = invoke noundef double %519(double noundef %525, double noundef %529)
          to label %531 unwind label %611

531:                                              ; preds = %528
  %532 = fmul double %517, %530
  %533 = fneg double %532
  %534 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %515, double %533)
  %535 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  store i64 0, ptr %45, align 8, !tbaa !12
  %536 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %535, ptr noundef nonnull align 8 dereferenceable(8) %45)
          to label %537 unwind label %615

537:                                              ; preds = %531
  %538 = load i32, ptr %36, align 4, !tbaa !10
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds double, ptr %536, i64 %539
  %541 = load double, ptr %540, align 8, !tbaa !14
  %542 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %541, double %534)
  %543 = load double, ptr %29, align 8, !tbaa !14
  %544 = load double, ptr %29, align 8, !tbaa !14
  %545 = fmul double %543, %544
  %546 = fdiv double %542, %545
  %547 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  store i64 0, ptr %46, align 8, !tbaa !12
  %548 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %547, ptr noundef nonnull align 8 dereferenceable(8) %46)
          to label %549 unwind label %619

549:                                              ; preds = %537
  %550 = load i32, ptr %36, align 4, !tbaa !10
  %551 = add nsw i32 %550, 1
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds double, ptr %548, i64 %552
  %554 = load double, ptr %553, align 8, !tbaa !14
  %555 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  store i64 0, ptr %47, align 8, !tbaa !12
  %556 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %555, ptr noundef nonnull align 8 dereferenceable(8) %47)
          to label %557 unwind label %623

557:                                              ; preds = %549
  %558 = load i32, ptr %36, align 4, !tbaa !10
  %559 = sext i32 %558 to i64
  %560 = getelementptr inbounds double, ptr %556, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !14
  %562 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %561, double %554)
  %563 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  store i64 0, ptr %48, align 8, !tbaa !12
  %564 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %563, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %565 unwind label %627

565:                                              ; preds = %557
  %566 = load i32, ptr %36, align 4, !tbaa !10
  %567 = sub nsw i32 %566, 1
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds double, ptr %564, i64 %568
  %570 = load double, ptr %569, align 8, !tbaa !14
  %571 = fadd double %562, %570
  %572 = load double, ptr %24, align 8, !tbaa !14
  %573 = load double, ptr %24, align 8, !tbaa !14
  %574 = fmul double %572, %573
  %575 = fdiv double %571, %574
  %576 = fadd double %546, %575
  %577 = call double @llvm.fmuladd.f64(double %508, double %576, double %487)
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  store i64 0, ptr %49, align 8, !tbaa !12
  %578 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
          to label %579 unwind label %631

579:                                              ; preds = %565
  %580 = load i32, ptr %36, align 4, !tbaa !10
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %578, i64 %581
  store double %577, ptr %582, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %646

583:                                              ; preds = %460
  %584 = landingpad { ptr, i32 }
          cleanup
  %585 = extractvalue { ptr, i32 } %584, 0
  store ptr %585, ptr %26, align 8
  %586 = extractvalue { ptr, i32 } %584, 1
  store i32 %586, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %650

587:                                              ; preds = %470
  %588 = landingpad { ptr, i32 }
          cleanup
  %589 = extractvalue { ptr, i32 } %588, 0
  store ptr %589, ptr %26, align 8
  %590 = extractvalue { ptr, i32 } %588, 1
  store i32 %590, ptr %27, align 4
  br label %645

591:                                              ; preds = %473
  %592 = landingpad { ptr, i32 }
          cleanup
  %593 = extractvalue { ptr, i32 } %592, 0
  store ptr %593, ptr %26, align 8
  %594 = extractvalue { ptr, i32 } %592, 1
  store i32 %594, ptr %27, align 4
  br label %644

595:                                              ; preds = %482
  %596 = landingpad { ptr, i32 }
          cleanup
  %597 = extractvalue { ptr, i32 } %596, 0
  store ptr %597, ptr %26, align 8
  %598 = extractvalue { ptr, i32 } %596, 1
  store i32 %598, ptr %27, align 4
  br label %643

599:                                              ; preds = %498, %494
  %600 = landingpad { ptr, i32 }
          cleanup
  %601 = extractvalue { ptr, i32 } %600, 0
  store ptr %601, ptr %26, align 8
  %602 = extractvalue { ptr, i32 } %600, 1
  store i32 %602, ptr %27, align 4
  br label %642

603:                                              ; preds = %501
  %604 = landingpad { ptr, i32 }
          cleanup
  %605 = extractvalue { ptr, i32 } %604, 0
  store ptr %605, ptr %26, align 8
  %606 = extractvalue { ptr, i32 } %604, 1
  store i32 %606, ptr %27, align 4
  br label %641

607:                                              ; preds = %511
  %608 = landingpad { ptr, i32 }
          cleanup
  %609 = extractvalue { ptr, i32 } %608, 0
  store ptr %609, ptr %26, align 8
  %610 = extractvalue { ptr, i32 } %608, 1
  store i32 %610, ptr %27, align 4
  br label %640

611:                                              ; preds = %528, %524
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %26, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %27, align 4
  br label %639

615:                                              ; preds = %531
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %26, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %27, align 4
  br label %638

619:                                              ; preds = %537
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %26, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %27, align 4
  br label %637

623:                                              ; preds = %549
  %624 = landingpad { ptr, i32 }
          cleanup
  %625 = extractvalue { ptr, i32 } %624, 0
  store ptr %625, ptr %26, align 8
  %626 = extractvalue { ptr, i32 } %624, 1
  store i32 %626, ptr %27, align 4
  br label %636

627:                                              ; preds = %557
  %628 = landingpad { ptr, i32 }
          cleanup
  %629 = extractvalue { ptr, i32 } %628, 0
  store ptr %629, ptr %26, align 8
  %630 = extractvalue { ptr, i32 } %628, 1
  store i32 %630, ptr %27, align 4
  br label %635

631:                                              ; preds = %565
  %632 = landingpad { ptr, i32 }
          cleanup
  %633 = extractvalue { ptr, i32 } %632, 0
  store ptr %633, ptr %26, align 8
  %634 = extractvalue { ptr, i32 } %632, 1
  store i32 %634, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %635

635:                                              ; preds = %631, %627
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %636

636:                                              ; preds = %635, %623
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %637

637:                                              ; preds = %636, %619
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  br label %638

638:                                              ; preds = %637, %615
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %639

639:                                              ; preds = %638, %611
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %640

640:                                              ; preds = %639, %607
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  br label %641

641:                                              ; preds = %640, %603
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %642

642:                                              ; preds = %641, %599
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %643

643:                                              ; preds = %642, %595
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  br label %644

644:                                              ; preds = %643, %591
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %645

645:                                              ; preds = %644, %587
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %650

646:                                              ; preds = %579, %463
  br label %647

647:                                              ; preds = %646
  %648 = load i32, ptr %36, align 4, !tbaa !10
  %649 = add nsw i32 %648, 1
  store i32 %649, ptr %36, align 4, !tbaa !10
  br label %454, !llvm.loop !29

650:                                              ; preds = %645, %583
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  br label %4192

651:                                              ; preds = %459
  br label %652

652:                                              ; preds = %651, %448
  %653 = load i8, ptr %12, align 1, !tbaa !9
  %654 = zext i8 %653 to i32
  %655 = and i32 %654, 16
  %656 = icmp ne i32 %655, 0
  br i1 %656, label %657, label %856

657:                                              ; preds = %652
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  store i32 1, ptr %50, align 4, !tbaa !10
  br label %658

658:                                              ; preds = %851, %657
  %659 = load i32, ptr %50, align 4, !tbaa !10
  %660 = load i32, ptr %19, align 4, !tbaa !10
  %661 = sub nsw i32 %660, 1
  %662 = icmp slt i32 %659, %661
  br i1 %662, label %664, label %663

663:                                              ; preds = %658
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %855

664:                                              ; preds = %658
  %665 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %666 = load i32, ptr %50, align 4, !tbaa !10
  %667 = sext i32 %666 to i64
  store i64 %667, ptr %51, align 8, !tbaa !12
  %668 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %665, ptr noundef nonnull align 8 dereferenceable(8) %51)
          to label %669 unwind label %787

669:                                              ; preds = %664
  %670 = getelementptr inbounds i8, ptr %668, i64 0
  %671 = load i8, ptr %670, align 1, !tbaa !24, !range !26, !noundef !27
  %672 = trunc i8 %671 to i1
  %673 = xor i1 %672, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br i1 %673, label %674, label %850

674:                                              ; preds = %669
  %675 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %676 = load i32, ptr %50, align 4, !tbaa !10
  %677 = sext i32 %676 to i64
  store i64 %677, ptr %52, align 8, !tbaa !12
  %678 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %675, ptr noundef nonnull align 8 dereferenceable(8) %52)
          to label %679 unwind label %791

679:                                              ; preds = %674
  %680 = getelementptr inbounds double, ptr %678, i64 0
  %681 = load double, ptr %680, align 8, !tbaa !14
  %682 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %683 = load double, ptr %682, align 8, !tbaa !16
  %684 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %685 = load i32, ptr %50, align 4, !tbaa !10
  %686 = sext i32 %685 to i64
  store i64 %686, ptr %53, align 8, !tbaa !12
  %687 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %684, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %688 unwind label %795

688:                                              ; preds = %679
  %689 = getelementptr inbounds double, ptr %687, i64 0
  %690 = load double, ptr %689, align 8, !tbaa !14
  %691 = call double @llvm.fmuladd.f64(double %683, double %690, double %681)
  %692 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %693 = load ptr, ptr %692, align 8, !tbaa !23
  %694 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  store i64 0, ptr %54, align 8, !tbaa !12
  %695 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %694, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %696 unwind label %799

696:                                              ; preds = %688
  %697 = load double, ptr %695, align 8, !tbaa !14
  %698 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %699 = load i32, ptr %50, align 4, !tbaa !10
  %700 = sext i32 %699 to i64
  store i64 %700, ptr %55, align 8, !tbaa !12
  %701 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %698, ptr noundef nonnull align 8 dereferenceable(8) %55)
          to label %702 unwind label %803

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

705:                                              ; preds = %702
  %706 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %707 = load double, ptr %706, align 8, !tbaa !16
  %708 = fmul double %704, %707
  %709 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %710 = load double, ptr %709, align 8, !tbaa !16
  %711 = fmul double %708, %710
  %712 = fdiv double %711, 2.000000e+00
  %713 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %714 = load i32, ptr %50, align 4, !tbaa !10
  %715 = add nsw i32 %714, 1
  %716 = sext i32 %715 to i64
  store i64 %716, ptr %56, align 8, !tbaa !12
  %717 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %713, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %718 unwind label %807

718:                                              ; preds = %705
  %719 = getelementptr inbounds double, ptr %717, i64 0
  %720 = load double, ptr %719, align 8, !tbaa !14
  %721 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %722 = load i32, ptr %50, align 4, !tbaa !10
  %723 = sext i32 %722 to i64
  store i64 %723, ptr %57, align 8, !tbaa !12
  %724 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %721, ptr noundef nonnull align 8 dereferenceable(8) %57)
          to label %725 unwind label %811

725:                                              ; preds = %718
  %726 = getelementptr inbounds double, ptr %724, i64 0
  %727 = load double, ptr %726, align 8, !tbaa !14
  %728 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %727, double %720)
  %729 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %730 = load i32, ptr %50, align 4, !tbaa !10
  %731 = sub nsw i32 %730, 1
  %732 = sext i32 %731 to i64
  store i64 %732, ptr %58, align 8, !tbaa !12
  %733 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %729, ptr noundef nonnull align 8 dereferenceable(8) %58)
          to label %734 unwind label %815

734:                                              ; preds = %725
  %735 = getelementptr inbounds double, ptr %733, i64 0
  %736 = load double, ptr %735, align 8, !tbaa !14
  %737 = fadd double %728, %736
  %738 = load double, ptr %29, align 8, !tbaa !14
  %739 = load double, ptr %29, align 8, !tbaa !14
  %740 = fmul double %738, %739
  %741 = fdiv double %737, %740
  %742 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %743 = load i32, ptr %50, align 4, !tbaa !10
  %744 = sext i32 %743 to i64
  store i64 %744, ptr %59, align 8, !tbaa !12
  %745 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %742, ptr noundef nonnull align 8 dereferenceable(8) %59)
          to label %746 unwind label %819

746:                                              ; preds = %734
  %747 = getelementptr inbounds double, ptr %745, i64 1
  %748 = load double, ptr %747, align 8, !tbaa !14
  %749 = load double, ptr %24, align 8, !tbaa !14
  %750 = fmul double 2.000000e+00, %749
  %751 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %752 = load ptr, ptr %751, align 8, !tbaa !31
  %753 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  store i64 0, ptr %60, align 8, !tbaa !12
  %754 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %753, ptr noundef nonnull align 8 dereferenceable(8) %60)
          to label %755 unwind label %823

755:                                              ; preds = %746
  %756 = load double, ptr %754, align 8, !tbaa !14
  %757 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %758 = load i32, ptr %50, align 4, !tbaa !10
  %759 = sext i32 %758 to i64
  store i64 %759, ptr %61, align 8, !tbaa !12
  %760 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %757, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %761 unwind label %827

761:                                              ; preds = %755
  %762 = load double, ptr %760, align 8, !tbaa !14
  %763 = invoke noundef double %752(double noundef %756, double noundef %762)
          to label %764 unwind label %827

764:                                              ; preds = %761
  %765 = fmul double %750, %763
  %766 = fneg double %765
  %767 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %748, double %766)
  %768 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  %769 = load i32, ptr %50, align 4, !tbaa !10
  %770 = sext i32 %769 to i64
  store i64 %770, ptr %62, align 8, !tbaa !12
  %771 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %768, ptr noundef nonnull align 8 dereferenceable(8) %62)
          to label %772 unwind label %831

772:                                              ; preds = %764
  %773 = getelementptr inbounds double, ptr %771, i64 0
  %774 = load double, ptr %773, align 8, !tbaa !14
  %775 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %774, double %767)
  %776 = load double, ptr %24, align 8, !tbaa !14
  %777 = load double, ptr %24, align 8, !tbaa !14
  %778 = fmul double %776, %777
  %779 = fdiv double %775, %778
  %780 = fadd double %741, %779
  %781 = call double @llvm.fmuladd.f64(double %712, double %780, double %691)
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  %782 = load i32, ptr %50, align 4, !tbaa !10
  %783 = sext i32 %782 to i64
  store i64 %783, ptr %63, align 8, !tbaa !12
  %784 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %63)
          to label %785 unwind label %835

785:                                              ; preds = %772
  %786 = getelementptr inbounds double, ptr %784, i64 0
  store double %781, ptr %786, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  br label %850

787:                                              ; preds = %664
  %788 = landingpad { ptr, i32 }
          cleanup
  %789 = extractvalue { ptr, i32 } %788, 0
  store ptr %789, ptr %26, align 8
  %790 = extractvalue { ptr, i32 } %788, 1
  store i32 %790, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %854

791:                                              ; preds = %674
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %26, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %27, align 4
  br label %849

795:                                              ; preds = %679
  %796 = landingpad { ptr, i32 }
          cleanup
  %797 = extractvalue { ptr, i32 } %796, 0
  store ptr %797, ptr %26, align 8
  %798 = extractvalue { ptr, i32 } %796, 1
  store i32 %798, ptr %27, align 4
  br label %848

799:                                              ; preds = %688
  %800 = landingpad { ptr, i32 }
          cleanup
  %801 = extractvalue { ptr, i32 } %800, 0
  store ptr %801, ptr %26, align 8
  %802 = extractvalue { ptr, i32 } %800, 1
  store i32 %802, ptr %27, align 4
  br label %847

803:                                              ; preds = %702, %696
  %804 = landingpad { ptr, i32 }
          cleanup
  %805 = extractvalue { ptr, i32 } %804, 0
  store ptr %805, ptr %26, align 8
  %806 = extractvalue { ptr, i32 } %804, 1
  store i32 %806, ptr %27, align 4
  br label %846

807:                                              ; preds = %705
  %808 = landingpad { ptr, i32 }
          cleanup
  %809 = extractvalue { ptr, i32 } %808, 0
  store ptr %809, ptr %26, align 8
  %810 = extractvalue { ptr, i32 } %808, 1
  store i32 %810, ptr %27, align 4
  br label %845

811:                                              ; preds = %718
  %812 = landingpad { ptr, i32 }
          cleanup
  %813 = extractvalue { ptr, i32 } %812, 0
  store ptr %813, ptr %26, align 8
  %814 = extractvalue { ptr, i32 } %812, 1
  store i32 %814, ptr %27, align 4
  br label %844

815:                                              ; preds = %725
  %816 = landingpad { ptr, i32 }
          cleanup
  %817 = extractvalue { ptr, i32 } %816, 0
  store ptr %817, ptr %26, align 8
  %818 = extractvalue { ptr, i32 } %816, 1
  store i32 %818, ptr %27, align 4
  br label %843

819:                                              ; preds = %734
  %820 = landingpad { ptr, i32 }
          cleanup
  %821 = extractvalue { ptr, i32 } %820, 0
  store ptr %821, ptr %26, align 8
  %822 = extractvalue { ptr, i32 } %820, 1
  store i32 %822, ptr %27, align 4
  br label %842

823:                                              ; preds = %746
  %824 = landingpad { ptr, i32 }
          cleanup
  %825 = extractvalue { ptr, i32 } %824, 0
  store ptr %825, ptr %26, align 8
  %826 = extractvalue { ptr, i32 } %824, 1
  store i32 %826, ptr %27, align 4
  br label %841

827:                                              ; preds = %761, %755
  %828 = landingpad { ptr, i32 }
          cleanup
  %829 = extractvalue { ptr, i32 } %828, 0
  store ptr %829, ptr %26, align 8
  %830 = extractvalue { ptr, i32 } %828, 1
  store i32 %830, ptr %27, align 4
  br label %840

831:                                              ; preds = %764
  %832 = landingpad { ptr, i32 }
          cleanup
  %833 = extractvalue { ptr, i32 } %832, 0
  store ptr %833, ptr %26, align 8
  %834 = extractvalue { ptr, i32 } %832, 1
  store i32 %834, ptr %27, align 4
  br label %839

835:                                              ; preds = %772
  %836 = landingpad { ptr, i32 }
          cleanup
  %837 = extractvalue { ptr, i32 } %836, 0
  store ptr %837, ptr %26, align 8
  %838 = extractvalue { ptr, i32 } %836, 1
  store i32 %838, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  br label %839

839:                                              ; preds = %835, %831
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  br label %840

840:                                              ; preds = %839, %827
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  br label %841

841:                                              ; preds = %840, %823
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  br label %842

842:                                              ; preds = %841, %819
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %843

843:                                              ; preds = %842, %815
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %844

844:                                              ; preds = %843, %811
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  br label %845

845:                                              ; preds = %844, %807
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br label %846

846:                                              ; preds = %845, %803
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  br label %847

847:                                              ; preds = %846, %799
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  br label %848

848:                                              ; preds = %847, %795
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %849

849:                                              ; preds = %848, %791
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  br label %854

850:                                              ; preds = %785, %669
  br label %851

851:                                              ; preds = %850
  %852 = load i32, ptr %50, align 4, !tbaa !10
  %853 = add nsw i32 %852, 1
  store i32 %853, ptr %50, align 4, !tbaa !10
  br label %658, !llvm.loop !32

854:                                              ; preds = %849, %787
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %4192

855:                                              ; preds = %663
  br label %856

856:                                              ; preds = %855, %652
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %857 = call noundef i32 @_ZNSt6thread20hardware_concurrencyEv() #8
  %858 = zext i32 %857 to i64
  store i64 %858, ptr %64, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %65) #8
  call void @_ZNSt7__cxx114listISt6threadSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  store i32 1, ptr %66, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %859 = load i32, ptr %19, align 4, !tbaa !10
  %860 = sub nsw i32 %859, 1
  %861 = sext i32 %860 to i64
  %862 = load i64, ptr %64, align 8, !tbaa !12
  %863 = udiv i64 %861, %862
  %864 = trunc i64 %863 to i32
  store i32 %864, ptr %67, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %865 = load i32, ptr %67, align 4, !tbaa !10
  store i32 %865, ptr %68, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #8
  store i32 0, ptr %69, align 4, !tbaa !10
  br label %866

866:                                              ; preds = %924, %856
  %867 = load i32, ptr %69, align 4, !tbaa !10
  %868 = sext i32 %867 to i64
  %869 = load i64, ptr %64, align 8, !tbaa !12
  %870 = icmp ult i64 %868, %869
  br i1 %870, label %872, label %871

871:                                              ; preds = %866
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %955

872:                                              ; preds = %866
  %873 = load i32, ptr %69, align 4, !tbaa !10
  %874 = sext i32 %873 to i64
  %875 = load i64, ptr %64, align 8, !tbaa !12
  %876 = sub i64 %875, 1
  %877 = icmp eq i64 %874, %876
  br i1 %877, label %878, label %888

878:                                              ; preds = %872
  %879 = load i32, ptr %19, align 4, !tbaa !10
  %880 = sub nsw i32 %879, 1
  %881 = sext i32 %880 to i64
  %882 = load i64, ptr %64, align 8, !tbaa !12
  %883 = urem i64 %881, %882
  %884 = load i32, ptr %68, align 4, !tbaa !10
  %885 = sext i32 %884 to i64
  %886 = add i64 %885, %883
  %887 = trunc i64 %886 to i32
  store i32 %887, ptr %68, align 4, !tbaa !10
  br label %888

888:                                              ; preds = %878, %872
  call void @llvm.lifetime.start.p0(i64 216, ptr %70) #8
  %889 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 0
  %890 = load i32, ptr %66, align 4, !tbaa !10
  store i32 %890, ptr %889, align 8, !tbaa !33
  %891 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 1
  %892 = load i32, ptr %68, align 4, !tbaa !10
  store i32 %892, ptr %891, align 4, !tbaa !35
  %893 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 2
  store ptr %287, ptr %893, align 8, !tbaa !36
  %894 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 3
  %895 = load i32, ptr %19, align 4, !tbaa !10
  store i32 %895, ptr %894, align 8, !tbaa !37
  %896 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 4
  %897 = load i32, ptr %20, align 4, !tbaa !10
  store i32 %897, ptr %896, align 4, !tbaa !38
  %898 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 5
  %899 = load ptr, ptr %18, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIbEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %898, ptr noundef nonnull align 8 dereferenceable(40) %899)
          to label %900 unwind label %927

900:                                              ; preds = %888
  %901 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 6
  store ptr %0, ptr %901, align 8, !tbaa !5
  %902 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 7
  %903 = load ptr, ptr %16, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %902, ptr noundef nonnull align 8 dereferenceable(40) %903)
          to label %904 unwind label %931

904:                                              ; preds = %900
  %905 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 8
  %906 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %905, ptr noundef nonnull align 8 dereferenceable(40) %906)
          to label %907 unwind label %935

907:                                              ; preds = %904
  %908 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 9
  %909 = load ptr, ptr %14, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %908, ptr noundef nonnull align 8 dereferenceable(24) %909)
          to label %910 unwind label %939

910:                                              ; preds = %907
  %911 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 10
  %912 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %911, ptr noundef nonnull align 8 dereferenceable(24) %912)
          to label %913 unwind label %943

913:                                              ; preds = %910
  %914 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 11
  %915 = load double, ptr %24, align 8, !tbaa !14
  store double %915, ptr %914, align 8, !tbaa !39
  %916 = getelementptr inbounds %class.anon, ptr %70, i32 0, i32 12
  %917 = load double, ptr %29, align 8, !tbaa !14
  store double %917, ptr %916, align 8, !tbaa !40
  %918 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_0EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef nonnull align 8 dereferenceable(216) %70)
          to label %919 unwind label %950

919:                                              ; preds = %913
  call void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216) %70) #8
  call void @llvm.lifetime.end.p0(i64 216, ptr %70) #8
  %920 = load i32, ptr %68, align 4, !tbaa !10
  store i32 %920, ptr %66, align 4, !tbaa !10
  %921 = load i32, ptr %66, align 4, !tbaa !10
  %922 = load i32, ptr %67, align 4, !tbaa !10
  %923 = add nsw i32 %921, %922
  store i32 %923, ptr %68, align 4, !tbaa !10
  br label %924

924:                                              ; preds = %919
  %925 = load i32, ptr %69, align 4, !tbaa !10
  %926 = add nsw i32 %925, 1
  store i32 %926, ptr %69, align 4, !tbaa !10
  br label %866, !llvm.loop !41

927:                                              ; preds = %888
  %928 = landingpad { ptr, i32 }
          cleanup
  %929 = extractvalue { ptr, i32 } %928, 0
  store ptr %929, ptr %26, align 8
  %930 = extractvalue { ptr, i32 } %928, 1
  store i32 %930, ptr %27, align 4
  br label %954

931:                                              ; preds = %900
  %932 = landingpad { ptr, i32 }
          cleanup
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %26, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %27, align 4
  br label %949

935:                                              ; preds = %904
  %936 = landingpad { ptr, i32 }
          cleanup
  %937 = extractvalue { ptr, i32 } %936, 0
  store ptr %937, ptr %26, align 8
  %938 = extractvalue { ptr, i32 } %936, 1
  store i32 %938, ptr %27, align 4
  br label %948

939:                                              ; preds = %907
  %940 = landingpad { ptr, i32 }
          cleanup
  %941 = extractvalue { ptr, i32 } %940, 0
  store ptr %941, ptr %26, align 8
  %942 = extractvalue { ptr, i32 } %940, 1
  store i32 %942, ptr %27, align 4
  br label %947

943:                                              ; preds = %910
  %944 = landingpad { ptr, i32 }
          cleanup
  %945 = extractvalue { ptr, i32 } %944, 0
  store ptr %945, ptr %26, align 8
  %946 = extractvalue { ptr, i32 } %944, 1
  store i32 %946, ptr %27, align 4
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %908) #8
  br label %947

947:                                              ; preds = %943, %939
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %905) #8
  br label %948

948:                                              ; preds = %947, %935
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %902) #8
  br label %949

949:                                              ; preds = %948, %931
  call void @_ZN3cda4math10containers6MatrixIbED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %898) #8
  br label %954

950:                                              ; preds = %913
  %951 = landingpad { ptr, i32 }
          cleanup
  %952 = extractvalue { ptr, i32 } %951, 0
  store ptr %952, ptr %26, align 8
  %953 = extractvalue { ptr, i32 } %951, 1
  store i32 %953, ptr %27, align 4
  call void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216) %70) #8
  br label %954

954:                                              ; preds = %950, %949, %927
  call void @llvm.lifetime.end.p0(i64 216, ptr %70) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #8
  br label %2316

955:                                              ; preds = %871
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  store ptr %65, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %956 = load ptr, ptr %71, align 8, !tbaa !5
  %957 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %956) #8
  %958 = getelementptr inbounds %"struct.std::_List_iterator", ptr %72, i32 0, i32 0
  store ptr %957, ptr %958, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %959 = load ptr, ptr %71, align 8, !tbaa !5
  %960 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %959) #8
  %961 = getelementptr inbounds %"struct.std::_List_iterator", ptr %73, i32 0, i32 0
  store ptr %960, ptr %961, align 8
  br label %962

962:                                              ; preds = %969, %955
  %963 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 8 dereferenceable(8) %73) #8
  br i1 %963, label %965, label %964

964:                                              ; preds = %962
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  br label %975

965:                                              ; preds = %962
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %966 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt14_List_iteratorISt6threadEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %72) #8
  store ptr %966, ptr %74, align 8, !tbaa !5
  %967 = load ptr, ptr %74, align 8, !tbaa !5
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %967)
          to label %968 unwind label %971

968:                                              ; preds = %965
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %969

969:                                              ; preds = %968
  %970 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt6threadEppEv(ptr noundef nonnull align 8 dereferenceable(8) %72) #8
  br label %962

971:                                              ; preds = %965
  %972 = landingpad { ptr, i32 }
          cleanup
  %973 = extractvalue { ptr, i32 } %972, 0
  store ptr %973, ptr %26, align 8
  %974 = extractvalue { ptr, i32 } %972, 1
  store i32 %974, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  br label %2316

975:                                              ; preds = %964
  %976 = load i8, ptr %12, align 1, !tbaa !9
  %977 = zext i8 %976 to i32
  %978 = and i32 %977, 32
  %979 = icmp ne i32 %978, 0
  br i1 %979, label %980, label %1211

980:                                              ; preds = %975
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  store i32 1, ptr %75, align 4, !tbaa !10
  br label %981

981:                                              ; preds = %1206, %980
  %982 = load i32, ptr %75, align 4, !tbaa !10
  %983 = load i32, ptr %19, align 4, !tbaa !10
  %984 = sub nsw i32 %983, 1
  %985 = icmp slt i32 %982, %984
  br i1 %985, label %987, label %986

986:                                              ; preds = %981
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %1210

987:                                              ; preds = %981
  %988 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %989 = load i32, ptr %75, align 4, !tbaa !10
  %990 = sext i32 %989 to i64
  store i64 %990, ptr %76, align 8, !tbaa !12
  %991 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %988, ptr noundef nonnull align 8 dereferenceable(8) %76)
          to label %992 unwind label %1142

992:                                              ; preds = %987
  %993 = load i32, ptr %20, align 4, !tbaa !10
  %994 = sub nsw i32 %993, 1
  %995 = sext i32 %994 to i64
  %996 = getelementptr inbounds i8, ptr %991, i64 %995
  %997 = load i8, ptr %996, align 1, !tbaa !24, !range !26, !noundef !27
  %998 = trunc i8 %997 to i1
  %999 = xor i1 %998, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  br i1 %999, label %1000, label %1205

1000:                                             ; preds = %992
  %1001 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  %1002 = load i32, ptr %75, align 4, !tbaa !10
  %1003 = sext i32 %1002 to i64
  store i64 %1003, ptr %77, align 8, !tbaa !12
  %1004 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1001, ptr noundef nonnull align 8 dereferenceable(8) %77)
          to label %1005 unwind label %1146

1005:                                             ; preds = %1000
  %1006 = load i32, ptr %20, align 4, !tbaa !10
  %1007 = sub nsw i32 %1006, 1
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds double, ptr %1004, i64 %1008
  %1010 = load double, ptr %1009, align 8, !tbaa !14
  %1011 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1012 = load double, ptr %1011, align 8, !tbaa !16
  %1013 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %1014 = load i32, ptr %75, align 4, !tbaa !10
  %1015 = sext i32 %1014 to i64
  store i64 %1015, ptr %78, align 8, !tbaa !12
  %1016 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1013, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %1017 unwind label %1150

1017:                                             ; preds = %1005
  %1018 = load i32, ptr %20, align 4, !tbaa !10
  %1019 = sub nsw i32 %1018, 1
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds double, ptr %1016, i64 %1020
  %1022 = load double, ptr %1021, align 8, !tbaa !14
  %1023 = call double @llvm.fmuladd.f64(double %1012, double %1022, double %1010)
  %1024 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %1025 = load ptr, ptr %1024, align 8, !tbaa !23
  %1026 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %1027 = load i32, ptr %20, align 4, !tbaa !10
  %1028 = sub nsw i32 %1027, 1
  %1029 = sext i32 %1028 to i64
  store i64 %1029, ptr %79, 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) %79)
          to label %1031 unwind label %1154

1031:                                             ; preds = %1017
  %1032 = load double, ptr %1030, align 8, !tbaa !14
  %1033 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %1034 = load i32, ptr %75, align 4, !tbaa !10
  %1035 = sext i32 %1034 to i64
  store i64 %1035, ptr %80, align 8, !tbaa !12
  %1036 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1033, ptr noundef nonnull align 8 dereferenceable(8) %80)
          to label %1037 unwind label %1158

1037:                                             ; preds = %1031
  %1038 = load double, ptr %1036, align 8, !tbaa !14
  %1039 = invoke noundef double %1025(double noundef %1032, double noundef %1038)
          to label %1040 unwind label %1158

1040:                                             ; preds = %1037
  %1041 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1042 = load double, ptr %1041, align 8, !tbaa !16
  %1043 = fmul double %1039, %1042
  %1044 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1045 = load double, ptr %1044, align 8, !tbaa !16
  %1046 = fmul double %1043, %1045
  %1047 = fdiv double %1046, 2.000000e+00
  %1048 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #8
  %1049 = load i32, ptr %75, align 4, !tbaa !10
  %1050 = add nsw i32 %1049, 1
  %1051 = sext i32 %1050 to i64
  store i64 %1051, ptr %81, align 8, !tbaa !12
  %1052 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1048, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %1053 unwind label %1162

1053:                                             ; preds = %1040
  %1054 = load i32, ptr %20, align 4, !tbaa !10
  %1055 = sub nsw i32 %1054, 1
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds double, ptr %1052, i64 %1056
  %1058 = load double, ptr %1057, align 8, !tbaa !14
  %1059 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  %1060 = load i32, ptr %75, align 4, !tbaa !10
  %1061 = sext i32 %1060 to i64
  store i64 %1061, ptr %82, align 8, !tbaa !12
  %1062 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1059, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %1063 unwind label %1166

1063:                                             ; preds = %1053
  %1064 = load i32, ptr %20, align 4, !tbaa !10
  %1065 = sub nsw i32 %1064, 1
  %1066 = sext i32 %1065 to i64
  %1067 = getelementptr inbounds double, ptr %1062, i64 %1066
  %1068 = load double, ptr %1067, align 8, !tbaa !14
  %1069 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1068, double %1058)
  %1070 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #8
  %1071 = load i32, ptr %75, align 4, !tbaa !10
  %1072 = sub nsw i32 %1071, 1
  %1073 = sext i32 %1072 to i64
  store i64 %1073, ptr %83, align 8, !tbaa !12
  %1074 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1070, ptr noundef nonnull align 8 dereferenceable(8) %83)
          to label %1075 unwind label %1170

1075:                                             ; preds = %1063
  %1076 = load i32, ptr %20, align 4, !tbaa !10
  %1077 = sub nsw i32 %1076, 1
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds double, ptr %1074, i64 %1078
  %1080 = load double, ptr %1079, align 8, !tbaa !14
  %1081 = fadd double %1069, %1080
  %1082 = load double, ptr %29, align 8, !tbaa !14
  %1083 = load double, ptr %29, align 8, !tbaa !14
  %1084 = fmul double %1082, %1083
  %1085 = fdiv double %1081, %1084
  %1086 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #8
  %1087 = load i32, ptr %75, align 4, !tbaa !10
  %1088 = sext i32 %1087 to i64
  store i64 %1088, ptr %84, align 8, !tbaa !12
  %1089 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1086, ptr noundef nonnull align 8 dereferenceable(8) %84)
          to label %1090 unwind label %1174

1090:                                             ; preds = %1075
  %1091 = load i32, ptr %20, align 4, !tbaa !10
  %1092 = sub nsw i32 %1091, 2
  %1093 = sext i32 %1092 to i64
  %1094 = getelementptr inbounds double, ptr %1089, i64 %1093
  %1095 = load double, ptr %1094, align 8, !tbaa !14
  %1096 = load double, ptr %24, align 8, !tbaa !14
  %1097 = fmul double 2.000000e+00, %1096
  %1098 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %1099 = load ptr, ptr %1098, align 8, !tbaa !42
  %1100 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #8
  %1101 = load i32, ptr %20, align 4, !tbaa !10
  %1102 = sub nsw i32 %1101, 1
  %1103 = sext i32 %1102 to i64
  store i64 %1103, ptr %85, align 8, !tbaa !12
  %1104 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1100, ptr noundef nonnull align 8 dereferenceable(8) %85)
          to label %1105 unwind label %1178

1105:                                             ; preds = %1090
  %1106 = load double, ptr %1104, align 8, !tbaa !14
  %1107 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %1108 = load i32, ptr %75, align 4, !tbaa !10
  %1109 = sext i32 %1108 to i64
  store i64 %1109, ptr %86, align 8, !tbaa !12
  %1110 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1107, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %1111 unwind label %1182

1111:                                             ; preds = %1105
  %1112 = load double, ptr %1110, align 8, !tbaa !14
  %1113 = invoke noundef double %1099(double noundef %1106, double noundef %1112)
          to label %1114 unwind label %1182

1114:                                             ; preds = %1111
  %1115 = fmul double %1097, %1113
  %1116 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1095, double %1115)
  %1117 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %1118 = load i32, ptr %75, align 4, !tbaa !10
  %1119 = sext i32 %1118 to i64
  store i64 %1119, ptr %87, align 8, !tbaa !12
  %1120 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1117, ptr noundef nonnull align 8 dereferenceable(8) %87)
          to label %1121 unwind label %1186

1121:                                             ; preds = %1114
  %1122 = load i32, ptr %20, align 4, !tbaa !10
  %1123 = sub nsw i32 %1122, 1
  %1124 = sext i32 %1123 to i64
  %1125 = getelementptr inbounds double, ptr %1120, i64 %1124
  %1126 = load double, ptr %1125, align 8, !tbaa !14
  %1127 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1126, double %1116)
  %1128 = load double, ptr %24, align 8, !tbaa !14
  %1129 = load double, ptr %24, align 8, !tbaa !14
  %1130 = fmul double %1128, %1129
  %1131 = fdiv double %1127, %1130
  %1132 = fadd double %1085, %1131
  %1133 = call double @llvm.fmuladd.f64(double %1047, double %1132, double %1023)
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1134 = load i32, ptr %75, align 4, !tbaa !10
  %1135 = sext i32 %1134 to i64
  store i64 %1135, ptr %88, align 8, !tbaa !12
  %1136 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %1137 unwind label %1190

1137:                                             ; preds = %1121
  %1138 = load i32, ptr %20, align 4, !tbaa !10
  %1139 = sub nsw i32 %1138, 1
  %1140 = sext i32 %1139 to i64
  %1141 = getelementptr inbounds double, ptr %1136, i64 %1140
  store double %1133, ptr %1141, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  br label %1205

1142:                                             ; preds = %987
  %1143 = landingpad { ptr, i32 }
          cleanup
  %1144 = extractvalue { ptr, i32 } %1143, 0
  store ptr %1144, ptr %26, align 8
  %1145 = extractvalue { ptr, i32 } %1143, 1
  store i32 %1145, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  br label %1209

1146:                                             ; preds = %1000
  %1147 = landingpad { ptr, i32 }
          cleanup
  %1148 = extractvalue { ptr, i32 } %1147, 0
  store ptr %1148, ptr %26, align 8
  %1149 = extractvalue { ptr, i32 } %1147, 1
  store i32 %1149, ptr %27, align 4
  br label %1204

1150:                                             ; preds = %1005
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %26, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %27, align 4
  br label %1203

1154:                                             ; preds = %1017
  %1155 = landingpad { ptr, i32 }
          cleanup
  %1156 = extractvalue { ptr, i32 } %1155, 0
  store ptr %1156, ptr %26, align 8
  %1157 = extractvalue { ptr, i32 } %1155, 1
  store i32 %1157, ptr %27, align 4
  br label %1202

1158:                                             ; preds = %1037, %1031
  %1159 = landingpad { ptr, i32 }
          cleanup
  %1160 = extractvalue { ptr, i32 } %1159, 0
  store ptr %1160, ptr %26, align 8
  %1161 = extractvalue { ptr, i32 } %1159, 1
  store i32 %1161, ptr %27, align 4
  br label %1201

1162:                                             ; preds = %1040
  %1163 = landingpad { ptr, i32 }
          cleanup
  %1164 = extractvalue { ptr, i32 } %1163, 0
  store ptr %1164, ptr %26, align 8
  %1165 = extractvalue { ptr, i32 } %1163, 1
  store i32 %1165, ptr %27, align 4
  br label %1200

1166:                                             ; preds = %1053
  %1167 = landingpad { ptr, i32 }
          cleanup
  %1168 = extractvalue { ptr, i32 } %1167, 0
  store ptr %1168, ptr %26, align 8
  %1169 = extractvalue { ptr, i32 } %1167, 1
  store i32 %1169, ptr %27, align 4
  br label %1199

1170:                                             ; preds = %1063
  %1171 = landingpad { ptr, i32 }
          cleanup
  %1172 = extractvalue { ptr, i32 } %1171, 0
  store ptr %1172, ptr %26, align 8
  %1173 = extractvalue { ptr, i32 } %1171, 1
  store i32 %1173, ptr %27, align 4
  br label %1198

1174:                                             ; preds = %1075
  %1175 = landingpad { ptr, i32 }
          cleanup
  %1176 = extractvalue { ptr, i32 } %1175, 0
  store ptr %1176, ptr %26, align 8
  %1177 = extractvalue { ptr, i32 } %1175, 1
  store i32 %1177, ptr %27, align 4
  br label %1197

1178:                                             ; preds = %1090
  %1179 = landingpad { ptr, i32 }
          cleanup
  %1180 = extractvalue { ptr, i32 } %1179, 0
  store ptr %1180, ptr %26, align 8
  %1181 = extractvalue { ptr, i32 } %1179, 1
  store i32 %1181, ptr %27, align 4
  br label %1196

1182:                                             ; preds = %1111, %1105
  %1183 = landingpad { ptr, i32 }
          cleanup
  %1184 = extractvalue { ptr, i32 } %1183, 0
  store ptr %1184, ptr %26, align 8
  %1185 = extractvalue { ptr, i32 } %1183, 1
  store i32 %1185, ptr %27, align 4
  br label %1195

1186:                                             ; preds = %1114
  %1187 = landingpad { ptr, i32 }
          cleanup
  %1188 = extractvalue { ptr, i32 } %1187, 0
  store ptr %1188, ptr %26, align 8
  %1189 = extractvalue { ptr, i32 } %1187, 1
  store i32 %1189, ptr %27, align 4
  br label %1194

1190:                                             ; preds = %1121
  %1191 = landingpad { ptr, i32 }
          cleanup
  %1192 = extractvalue { ptr, i32 } %1191, 0
  store ptr %1192, ptr %26, align 8
  %1193 = extractvalue { ptr, i32 } %1191, 1
  store i32 %1193, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %1194

1194:                                             ; preds = %1190, %1186
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  br label %1195

1195:                                             ; preds = %1194, %1182
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  br label %1196

1196:                                             ; preds = %1195, %1178
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  br label %1197

1197:                                             ; preds = %1196, %1174
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  br label %1198

1198:                                             ; preds = %1197, %1170
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  br label %1199

1199:                                             ; preds = %1198, %1166
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  br label %1200

1200:                                             ; preds = %1199, %1162
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  br label %1201

1201:                                             ; preds = %1200, %1158
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  br label %1202

1202:                                             ; preds = %1201, %1154
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  br label %1203

1203:                                             ; preds = %1202, %1150
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  br label %1204

1204:                                             ; preds = %1203, %1146
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  br label %1209

1205:                                             ; preds = %1137, %992
  br label %1206

1206:                                             ; preds = %1205
  %1207 = load i32, ptr %75, align 4, !tbaa !10
  %1208 = add nsw i32 %1207, 1
  store i32 %1208, ptr %75, align 4, !tbaa !10
  br label %981, !llvm.loop !43

1209:                                             ; preds = %1204, %1142
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  br label %2316

1210:                                             ; preds = %986
  br label %1211

1211:                                             ; preds = %1210, %975
  %1212 = load i8, ptr %12, align 1, !tbaa !9
  %1213 = zext i8 %1212 to i32
  %1214 = and i32 %1213, 128
  %1215 = icmp ne i32 %1214, 0
  br i1 %1215, label %1216, label %1447

1216:                                             ; preds = %1211
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #8
  store i32 1, ptr %89, align 4, !tbaa !10
  br label %1217

1217:                                             ; preds = %1442, %1216
  %1218 = load i32, ptr %89, align 4, !tbaa !10
  %1219 = load i32, ptr %20, align 4, !tbaa !10
  %1220 = sub nsw i32 %1219, 1
  %1221 = icmp slt i32 %1218, %1220
  br i1 %1221, label %1223, label %1222

1222:                                             ; preds = %1217
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %1446

1223:                                             ; preds = %1217
  %1224 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %1225 = load i32, ptr %19, align 4, !tbaa !10
  %1226 = sub nsw i32 %1225, 1
  %1227 = sext i32 %1226 to i64
  store i64 %1227, ptr %90, align 8, !tbaa !12
  %1228 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1224, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %1229 unwind label %1378

1229:                                             ; preds = %1223
  %1230 = load i32, ptr %89, align 4, !tbaa !10
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds i8, ptr %1228, i64 %1231
  %1233 = load i8, ptr %1232, align 1, !tbaa !24, !range !26, !noundef !27
  %1234 = trunc i8 %1233 to i1
  %1235 = xor i1 %1234, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  br i1 %1235, label %1236, label %1441

1236:                                             ; preds = %1229
  %1237 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #8
  %1238 = load i32, ptr %19, align 4, !tbaa !10
  %1239 = sub nsw i32 %1238, 1
  %1240 = sext i32 %1239 to i64
  store i64 %1240, ptr %91, align 8, !tbaa !12
  %1241 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1237, ptr noundef nonnull align 8 dereferenceable(8) %91)
          to label %1242 unwind label %1382

1242:                                             ; preds = %1236
  %1243 = load i32, ptr %89, align 4, !tbaa !10
  %1244 = sext i32 %1243 to i64
  %1245 = getelementptr inbounds double, ptr %1241, i64 %1244
  %1246 = load double, ptr %1245, align 8, !tbaa !14
  %1247 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1248 = load double, ptr %1247, align 8, !tbaa !16
  %1249 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %1250 = load i32, ptr %19, align 4, !tbaa !10
  %1251 = sub nsw i32 %1250, 1
  %1252 = sext i32 %1251 to i64
  store i64 %1252, ptr %92, align 8, !tbaa !12
  %1253 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1249, ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %1254 unwind label %1386

1254:                                             ; preds = %1242
  %1255 = load i32, ptr %89, align 4, !tbaa !10
  %1256 = sext i32 %1255 to i64
  %1257 = getelementptr inbounds double, ptr %1253, i64 %1256
  %1258 = load double, ptr %1257, align 8, !tbaa !14
  %1259 = call double @llvm.fmuladd.f64(double %1248, double %1258, double %1246)
  %1260 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %1261 = load ptr, ptr %1260, align 8, !tbaa !23
  %1262 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %1263 = load i32, ptr %89, align 4, !tbaa !10
  %1264 = sext i32 %1263 to i64
  store i64 %1264, ptr %93, align 8, !tbaa !12
  %1265 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1262, ptr noundef nonnull align 8 dereferenceable(8) %93)
          to label %1266 unwind label %1390

1266:                                             ; preds = %1254
  %1267 = load double, ptr %1265, align 8, !tbaa !14
  %1268 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %1269 = load i32, ptr %19, align 4, !tbaa !10
  %1270 = sub nsw i32 %1269, 1
  %1271 = sext i32 %1270 to i64
  store i64 %1271, ptr %94, align 8, !tbaa !12
  %1272 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1268, ptr noundef nonnull align 8 dereferenceable(8) %94)
          to label %1273 unwind label %1394

1273:                                             ; preds = %1266
  %1274 = load double, ptr %1272, align 8, !tbaa !14
  %1275 = invoke noundef double %1261(double noundef %1267, double noundef %1274)
          to label %1276 unwind label %1394

1276:                                             ; preds = %1273
  %1277 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1278 = load double, ptr %1277, align 8, !tbaa !16
  %1279 = fmul double %1275, %1278
  %1280 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1281 = load double, ptr %1280, align 8, !tbaa !16
  %1282 = fmul double %1279, %1281
  %1283 = fdiv double %1282, 2.000000e+00
  %1284 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #8
  %1285 = load i32, ptr %19, align 4, !tbaa !10
  %1286 = sub nsw i32 %1285, 2
  %1287 = sext i32 %1286 to i64
  store i64 %1287, ptr %95, align 8, !tbaa !12
  %1288 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1284, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %1289 unwind label %1398

1289:                                             ; preds = %1276
  %1290 = load i32, ptr %89, align 4, !tbaa !10
  %1291 = sext i32 %1290 to i64
  %1292 = getelementptr inbounds double, ptr %1288, i64 %1291
  %1293 = load double, ptr %1292, align 8, !tbaa !14
  %1294 = load double, ptr %29, align 8, !tbaa !14
  %1295 = fmul double 2.000000e+00, %1294
  %1296 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %1297 = load ptr, ptr %1296, align 8, !tbaa !44
  %1298 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1299 = load i32, ptr %89, align 4, !tbaa !10
  %1300 = sext i32 %1299 to i64
  store i64 %1300, ptr %96, align 8, !tbaa !12
  %1301 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1298, ptr noundef nonnull align 8 dereferenceable(8) %96)
          to label %1302 unwind label %1402

1302:                                             ; preds = %1289
  %1303 = load double, ptr %1301, align 8, !tbaa !14
  %1304 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #8
  %1305 = load i32, ptr %19, align 4, !tbaa !10
  %1306 = sub nsw i32 %1305, 1
  %1307 = sext i32 %1306 to i64
  store i64 %1307, ptr %97, align 8, !tbaa !12
  %1308 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1304, ptr noundef nonnull align 8 dereferenceable(8) %97)
          to label %1309 unwind label %1406

1309:                                             ; preds = %1302
  %1310 = load double, ptr %1308, align 8, !tbaa !14
  %1311 = invoke noundef double %1297(double noundef %1303, double noundef %1310)
          to label %1312 unwind label %1406

1312:                                             ; preds = %1309
  %1313 = fmul double %1295, %1311
  %1314 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %1293, double %1313)
  %1315 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  %1316 = load i32, ptr %19, align 4, !tbaa !10
  %1317 = sub nsw i32 %1316, 1
  %1318 = sext i32 %1317 to i64
  store i64 %1318, ptr %98, align 8, !tbaa !12
  %1319 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1315, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %1320 unwind label %1410

1320:                                             ; preds = %1312
  %1321 = load i32, ptr %89, align 4, !tbaa !10
  %1322 = sext i32 %1321 to i64
  %1323 = getelementptr inbounds double, ptr %1319, i64 %1322
  %1324 = load double, ptr %1323, align 8, !tbaa !14
  %1325 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1324, double %1314)
  %1326 = load double, ptr %29, align 8, !tbaa !14
  %1327 = load double, ptr %29, align 8, !tbaa !14
  %1328 = fmul double %1326, %1327
  %1329 = fdiv double %1325, %1328
  %1330 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #8
  %1331 = load i32, ptr %19, align 4, !tbaa !10
  %1332 = sub nsw i32 %1331, 1
  %1333 = sext i32 %1332 to i64
  store i64 %1333, ptr %99, align 8, !tbaa !12
  %1334 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1330, ptr noundef nonnull align 8 dereferenceable(8) %99)
          to label %1335 unwind label %1414

1335:                                             ; preds = %1320
  %1336 = load i32, ptr %89, align 4, !tbaa !10
  %1337 = add nsw i32 %1336, 1
  %1338 = sext i32 %1337 to i64
  %1339 = getelementptr inbounds double, ptr %1334, i64 %1338
  %1340 = load double, ptr %1339, align 8, !tbaa !14
  %1341 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #8
  %1342 = load i32, ptr %19, align 4, !tbaa !10
  %1343 = sub nsw i32 %1342, 1
  %1344 = sext i32 %1343 to i64
  store i64 %1344, ptr %100, align 8, !tbaa !12
  %1345 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1341, ptr noundef nonnull align 8 dereferenceable(8) %100)
          to label %1346 unwind label %1418

1346:                                             ; preds = %1335
  %1347 = load i32, ptr %89, align 4, !tbaa !10
  %1348 = sext i32 %1347 to i64
  %1349 = getelementptr inbounds double, ptr %1345, i64 %1348
  %1350 = load double, ptr %1349, align 8, !tbaa !14
  %1351 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %1350, double %1340)
  %1352 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #8
  %1353 = load i32, ptr %19, align 4, !tbaa !10
  %1354 = sub nsw i32 %1353, 1
  %1355 = sext i32 %1354 to i64
  store i64 %1355, ptr %101, align 8, !tbaa !12
  %1356 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1352, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1357 unwind label %1422

1357:                                             ; preds = %1346
  %1358 = load i32, ptr %89, align 4, !tbaa !10
  %1359 = sub nsw i32 %1358, 1
  %1360 = sext i32 %1359 to i64
  %1361 = getelementptr inbounds double, ptr %1356, i64 %1360
  %1362 = load double, ptr %1361, align 8, !tbaa !14
  %1363 = fadd double %1351, %1362
  %1364 = load double, ptr %24, align 8, !tbaa !14
  %1365 = load double, ptr %24, align 8, !tbaa !14
  %1366 = fmul double %1364, %1365
  %1367 = fdiv double %1363, %1366
  %1368 = fadd double %1329, %1367
  %1369 = call double @llvm.fmuladd.f64(double %1283, double %1368, double %1259)
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #8
  %1370 = load i32, ptr %19, align 4, !tbaa !10
  %1371 = sub nsw i32 %1370, 1
  %1372 = sext i32 %1371 to i64
  store i64 %1372, ptr %102, align 8, !tbaa !12
  %1373 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %102)
          to label %1374 unwind label %1426

1374:                                             ; preds = %1357
  %1375 = load i32, ptr %89, align 4, !tbaa !10
  %1376 = sext i32 %1375 to i64
  %1377 = getelementptr inbounds double, ptr %1373, i64 %1376
  store double %1369, ptr %1377, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1441

1378:                                             ; preds = %1223
  %1379 = landingpad { ptr, i32 }
          cleanup
  %1380 = extractvalue { ptr, i32 } %1379, 0
  store ptr %1380, ptr %26, align 8
  %1381 = extractvalue { ptr, i32 } %1379, 1
  store i32 %1381, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  br label %1445

1382:                                             ; preds = %1236
  %1383 = landingpad { ptr, i32 }
          cleanup
  %1384 = extractvalue { ptr, i32 } %1383, 0
  store ptr %1384, ptr %26, align 8
  %1385 = extractvalue { ptr, i32 } %1383, 1
  store i32 %1385, ptr %27, align 4
  br label %1440

1386:                                             ; preds = %1242
  %1387 = landingpad { ptr, i32 }
          cleanup
  %1388 = extractvalue { ptr, i32 } %1387, 0
  store ptr %1388, ptr %26, align 8
  %1389 = extractvalue { ptr, i32 } %1387, 1
  store i32 %1389, ptr %27, align 4
  br label %1439

1390:                                             ; preds = %1254
  %1391 = landingpad { ptr, i32 }
          cleanup
  %1392 = extractvalue { ptr, i32 } %1391, 0
  store ptr %1392, ptr %26, align 8
  %1393 = extractvalue { ptr, i32 } %1391, 1
  store i32 %1393, ptr %27, align 4
  br label %1438

1394:                                             ; preds = %1273, %1266
  %1395 = landingpad { ptr, i32 }
          cleanup
  %1396 = extractvalue { ptr, i32 } %1395, 0
  store ptr %1396, ptr %26, align 8
  %1397 = extractvalue { ptr, i32 } %1395, 1
  store i32 %1397, ptr %27, align 4
  br label %1437

1398:                                             ; preds = %1276
  %1399 = landingpad { ptr, i32 }
          cleanup
  %1400 = extractvalue { ptr, i32 } %1399, 0
  store ptr %1400, ptr %26, align 8
  %1401 = extractvalue { ptr, i32 } %1399, 1
  store i32 %1401, ptr %27, align 4
  br label %1436

1402:                                             ; preds = %1289
  %1403 = landingpad { ptr, i32 }
          cleanup
  %1404 = extractvalue { ptr, i32 } %1403, 0
  store ptr %1404, ptr %26, align 8
  %1405 = extractvalue { ptr, i32 } %1403, 1
  store i32 %1405, ptr %27, align 4
  br label %1435

1406:                                             ; preds = %1309, %1302
  %1407 = landingpad { ptr, i32 }
          cleanup
  %1408 = extractvalue { ptr, i32 } %1407, 0
  store ptr %1408, ptr %26, align 8
  %1409 = extractvalue { ptr, i32 } %1407, 1
  store i32 %1409, ptr %27, align 4
  br label %1434

1410:                                             ; preds = %1312
  %1411 = landingpad { ptr, i32 }
          cleanup
  %1412 = extractvalue { ptr, i32 } %1411, 0
  store ptr %1412, ptr %26, align 8
  %1413 = extractvalue { ptr, i32 } %1411, 1
  store i32 %1413, ptr %27, align 4
  br label %1433

1414:                                             ; preds = %1320
  %1415 = landingpad { ptr, i32 }
          cleanup
  %1416 = extractvalue { ptr, i32 } %1415, 0
  store ptr %1416, ptr %26, align 8
  %1417 = extractvalue { ptr, i32 } %1415, 1
  store i32 %1417, ptr %27, align 4
  br label %1432

1418:                                             ; preds = %1335
  %1419 = landingpad { ptr, i32 }
          cleanup
  %1420 = extractvalue { ptr, i32 } %1419, 0
  store ptr %1420, ptr %26, align 8
  %1421 = extractvalue { ptr, i32 } %1419, 1
  store i32 %1421, ptr %27, align 4
  br label %1431

1422:                                             ; preds = %1346
  %1423 = landingpad { ptr, i32 }
          cleanup
  %1424 = extractvalue { ptr, i32 } %1423, 0
  store ptr %1424, ptr %26, align 8
  %1425 = extractvalue { ptr, i32 } %1423, 1
  store i32 %1425, ptr %27, align 4
  br label %1430

1426:                                             ; preds = %1357
  %1427 = landingpad { ptr, i32 }
          cleanup
  %1428 = extractvalue { ptr, i32 } %1427, 0
  store ptr %1428, ptr %26, align 8
  %1429 = extractvalue { ptr, i32 } %1427, 1
  store i32 %1429, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  br label %1430

1430:                                             ; preds = %1426, %1422
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  br label %1431

1431:                                             ; preds = %1430, %1418
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  br label %1432

1432:                                             ; preds = %1431, %1414
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  br label %1433

1433:                                             ; preds = %1432, %1410
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  br label %1434

1434:                                             ; preds = %1433, %1406
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  br label %1435

1435:                                             ; preds = %1434, %1402
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %1436

1436:                                             ; preds = %1435, %1398
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  br label %1437

1437:                                             ; preds = %1436, %1394
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  br label %1438

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

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

1440:                                             ; preds = %1439, %1382
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1445

1441:                                             ; preds = %1374, %1229
  br label %1442

1442:                                             ; preds = %1441
  %1443 = load i32, ptr %89, align 4, !tbaa !10
  %1444 = add nsw i32 %1443, 1
  store i32 %1444, ptr %89, align 4, !tbaa !10
  br label %1217, !llvm.loop !45

1445:                                             ; preds = %1440, %1378
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #8
  br label %2316

1446:                                             ; preds = %1222
  br label %1447

1447:                                             ; preds = %1446, %1211
  %1448 = load i8, ptr %12, align 1, !tbaa !9
  %1449 = zext i8 %1448 to i32
  %1450 = and i32 %1449, 16
  %1451 = icmp ne i32 %1450, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #8
  br i1 %1451, label %1452, label %1465

1452:                                             ; preds = %1447
  %1453 = load i8, ptr %12, align 1, !tbaa !9
  %1454 = zext i8 %1453 to i32
  %1455 = and i32 %1454, 64
  %1456 = icmp ne i32 %1455, 0
  br i1 %1456, label %1457, label %1465

1457:                                             ; preds = %1452
  %1458 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %103, align 8, !tbaa !12
  %1459 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1458, ptr noundef nonnull align 8 dereferenceable(8) %103)
          to label %1460 unwind label %1564

1460:                                             ; preds = %1457
  %1461 = getelementptr inbounds i8, ptr %1459, i64 0
  %1462 = load i8, ptr %1461, align 1, !tbaa !24, !range !26, !noundef !27
  %1463 = trunc i8 %1462 to i1
  %1464 = xor i1 %1463, true
  br label %1465

1465:                                             ; preds = %1460, %1452, %1447
  %1466 = phi i1 [ false, %1452 ], [ false, %1447 ], [ %1464, %1460 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  br i1 %1466, label %1467, label %1632

1467:                                             ; preds = %1465
  %1468 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #8
  store i64 0, ptr %104, align 8, !tbaa !12
  %1469 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1468, ptr noundef nonnull align 8 dereferenceable(8) %104)
          to label %1470 unwind label %1568

1470:                                             ; preds = %1467
  %1471 = getelementptr inbounds double, ptr %1469, i64 0
  %1472 = load double, ptr %1471, align 8, !tbaa !14
  %1473 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1474 = load double, ptr %1473, align 8, !tbaa !16
  %1475 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #8
  store i64 0, ptr %105, align 8, !tbaa !12
  %1476 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1475, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1477 unwind label %1572

1477:                                             ; preds = %1470
  %1478 = getelementptr inbounds double, ptr %1476, i64 0
  %1479 = load double, ptr %1478, align 8, !tbaa !14
  %1480 = call double @llvm.fmuladd.f64(double %1474, double %1479, double %1472)
  %1481 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %1482 = load ptr, ptr %1481, align 8, !tbaa !23
  %1483 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #8
  store i64 0, ptr %106, align 8, !tbaa !12
  %1484 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1483, ptr noundef nonnull align 8 dereferenceable(8) %106)
          to label %1485 unwind label %1576

1485:                                             ; preds = %1477
  %1486 = load double, ptr %1484, align 8, !tbaa !14
  %1487 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #8
  store i64 0, ptr %107, align 8, !tbaa !12
  %1488 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1487, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %1489 unwind label %1580

1489:                                             ; preds = %1485
  %1490 = load double, ptr %1488, align 8, !tbaa !14
  %1491 = invoke noundef double %1482(double noundef %1486, double noundef %1490)
          to label %1492 unwind label %1580

1492:                                             ; preds = %1489
  %1493 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1494 = load double, ptr %1493, align 8, !tbaa !16
  %1495 = fmul double %1491, %1494
  %1496 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1497 = load double, ptr %1496, align 8, !tbaa !16
  %1498 = fmul double %1495, %1497
  %1499 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #8
  store i64 1, ptr %108, align 8, !tbaa !12
  %1500 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1499, ptr noundef nonnull align 8 dereferenceable(8) %108)
          to label %1501 unwind label %1584

1501:                                             ; preds = %1492
  %1502 = getelementptr inbounds double, ptr %1500, i64 0
  %1503 = load double, ptr %1502, align 8, !tbaa !14
  %1504 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #8
  store i64 0, ptr %109, align 8, !tbaa !12
  %1505 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1504, ptr noundef nonnull align 8 dereferenceable(8) %109)
          to label %1506 unwind label %1588

1506:                                             ; preds = %1501
  %1507 = getelementptr inbounds double, ptr %1505, i64 0
  %1508 = load double, ptr %1507, align 8, !tbaa !14
  %1509 = fsub double %1503, %1508
  %1510 = load double, ptr %29, align 8, !tbaa !14
  %1511 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %1512 = load ptr, ptr %1511, align 8, !tbaa !28
  %1513 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #8
  store i64 0, ptr %110, align 8, !tbaa !12
  %1514 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1513, ptr noundef nonnull align 8 dereferenceable(8) %110)
          to label %1515 unwind label %1592

1515:                                             ; preds = %1506
  %1516 = load double, ptr %1514, align 8, !tbaa !14
  %1517 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  store i64 0, ptr %111, align 8, !tbaa !12
  %1518 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1517, ptr noundef nonnull align 8 dereferenceable(8) %111)
          to label %1519 unwind label %1596

1519:                                             ; preds = %1515
  %1520 = load double, ptr %1518, align 8, !tbaa !14
  %1521 = invoke noundef double %1512(double noundef %1516, double noundef %1520)
          to label %1522 unwind label %1596

1522:                                             ; preds = %1519
  %1523 = fneg double %1510
  %1524 = call double @llvm.fmuladd.f64(double %1523, double %1521, double %1509)
  %1525 = load double, ptr %29, align 8, !tbaa !14
  %1526 = load double, ptr %29, align 8, !tbaa !14
  %1527 = fmul double %1525, %1526
  %1528 = fdiv double %1524, %1527
  %1529 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #8
  store i64 0, ptr %112, align 8, !tbaa !12
  %1530 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1529, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %1531 unwind label %1600

1531:                                             ; preds = %1522
  %1532 = getelementptr inbounds double, ptr %1530, i64 1
  %1533 = load double, ptr %1532, align 8, !tbaa !14
  %1534 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #8
  store i64 0, ptr %113, align 8, !tbaa !12
  %1535 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1534, ptr noundef nonnull align 8 dereferenceable(8) %113)
          to label %1536 unwind label %1604

1536:                                             ; preds = %1531
  %1537 = getelementptr inbounds double, ptr %1535, i64 0
  %1538 = load double, ptr %1537, align 8, !tbaa !14
  %1539 = fsub double %1533, %1538
  %1540 = load double, ptr %24, align 8, !tbaa !14
  %1541 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %1542 = load ptr, ptr %1541, align 8, !tbaa !31
  %1543 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #8
  store i64 0, ptr %114, align 8, !tbaa !12
  %1544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1543, ptr noundef nonnull align 8 dereferenceable(8) %114)
          to label %1545 unwind label %1608

1545:                                             ; preds = %1536
  %1546 = load double, ptr %1544, align 8, !tbaa !14
  %1547 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #8
  store i64 0, ptr %115, align 8, !tbaa !12
  %1548 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1547, ptr noundef nonnull align 8 dereferenceable(8) %115)
          to label %1549 unwind label %1612

1549:                                             ; preds = %1545
  %1550 = load double, ptr %1548, align 8, !tbaa !14
  %1551 = invoke noundef double %1542(double noundef %1546, double noundef %1550)
          to label %1552 unwind label %1612

1552:                                             ; preds = %1549
  %1553 = fneg double %1540
  %1554 = call double @llvm.fmuladd.f64(double %1553, double %1551, double %1539)
  %1555 = load double, ptr %24, align 8, !tbaa !14
  %1556 = load double, ptr %24, align 8, !tbaa !14
  %1557 = fmul double %1555, %1556
  %1558 = fdiv double %1554, %1557
  %1559 = fadd double %1528, %1558
  %1560 = call double @llvm.fmuladd.f64(double %1498, double %1559, double %1480)
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #8
  store i64 0, ptr %116, align 8, !tbaa !12
  %1561 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %116)
          to label %1562 unwind label %1616

1562:                                             ; preds = %1552
  %1563 = getelementptr inbounds double, ptr %1561, i64 0
  store double %1560, ptr %1563, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  br label %1632

1564:                                             ; preds = %1457
  %1565 = landingpad { ptr, i32 }
          cleanup
  %1566 = extractvalue { ptr, i32 } %1565, 0
  store ptr %1566, ptr %26, align 8
  %1567 = extractvalue { ptr, i32 } %1565, 1
  store i32 %1567, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  br label %2316

1568:                                             ; preds = %1467
  %1569 = landingpad { ptr, i32 }
          cleanup
  %1570 = extractvalue { ptr, i32 } %1569, 0
  store ptr %1570, ptr %26, align 8
  %1571 = extractvalue { ptr, i32 } %1569, 1
  store i32 %1571, ptr %27, align 4
  br label %1631

1572:                                             ; preds = %1470
  %1573 = landingpad { ptr, i32 }
          cleanup
  %1574 = extractvalue { ptr, i32 } %1573, 0
  store ptr %1574, ptr %26, align 8
  %1575 = extractvalue { ptr, i32 } %1573, 1
  store i32 %1575, ptr %27, align 4
  br label %1630

1576:                                             ; preds = %1477
  %1577 = landingpad { ptr, i32 }
          cleanup
  %1578 = extractvalue { ptr, i32 } %1577, 0
  store ptr %1578, ptr %26, align 8
  %1579 = extractvalue { ptr, i32 } %1577, 1
  store i32 %1579, ptr %27, align 4
  br label %1629

1580:                                             ; preds = %1489, %1485
  %1581 = landingpad { ptr, i32 }
          cleanup
  %1582 = extractvalue { ptr, i32 } %1581, 0
  store ptr %1582, ptr %26, align 8
  %1583 = extractvalue { ptr, i32 } %1581, 1
  store i32 %1583, ptr %27, align 4
  br label %1628

1584:                                             ; preds = %1492
  %1585 = landingpad { ptr, i32 }
          cleanup
  %1586 = extractvalue { ptr, i32 } %1585, 0
  store ptr %1586, ptr %26, align 8
  %1587 = extractvalue { ptr, i32 } %1585, 1
  store i32 %1587, ptr %27, align 4
  br label %1627

1588:                                             ; preds = %1501
  %1589 = landingpad { ptr, i32 }
          cleanup
  %1590 = extractvalue { ptr, i32 } %1589, 0
  store ptr %1590, ptr %26, align 8
  %1591 = extractvalue { ptr, i32 } %1589, 1
  store i32 %1591, ptr %27, align 4
  br label %1626

1592:                                             ; preds = %1506
  %1593 = landingpad { ptr, i32 }
          cleanup
  %1594 = extractvalue { ptr, i32 } %1593, 0
  store ptr %1594, ptr %26, align 8
  %1595 = extractvalue { ptr, i32 } %1593, 1
  store i32 %1595, ptr %27, align 4
  br label %1625

1596:                                             ; preds = %1519, %1515
  %1597 = landingpad { ptr, i32 }
          cleanup
  %1598 = extractvalue { ptr, i32 } %1597, 0
  store ptr %1598, ptr %26, align 8
  %1599 = extractvalue { ptr, i32 } %1597, 1
  store i32 %1599, ptr %27, align 4
  br label %1624

1600:                                             ; preds = %1522
  %1601 = landingpad { ptr, i32 }
          cleanup
  %1602 = extractvalue { ptr, i32 } %1601, 0
  store ptr %1602, ptr %26, align 8
  %1603 = extractvalue { ptr, i32 } %1601, 1
  store i32 %1603, ptr %27, align 4
  br label %1623

1604:                                             ; preds = %1531
  %1605 = landingpad { ptr, i32 }
          cleanup
  %1606 = extractvalue { ptr, i32 } %1605, 0
  store ptr %1606, ptr %26, align 8
  %1607 = extractvalue { ptr, i32 } %1605, 1
  store i32 %1607, ptr %27, align 4
  br label %1622

1608:                                             ; preds = %1536
  %1609 = landingpad { ptr, i32 }
          cleanup
  %1610 = extractvalue { ptr, i32 } %1609, 0
  store ptr %1610, ptr %26, align 8
  %1611 = extractvalue { ptr, i32 } %1609, 1
  store i32 %1611, ptr %27, align 4
  br label %1621

1612:                                             ; preds = %1549, %1545
  %1613 = landingpad { ptr, i32 }
          cleanup
  %1614 = extractvalue { ptr, i32 } %1613, 0
  store ptr %1614, ptr %26, align 8
  %1615 = extractvalue { ptr, i32 } %1613, 1
  store i32 %1615, ptr %27, align 4
  br label %1620

1616:                                             ; preds = %1552
  %1617 = landingpad { ptr, i32 }
          cleanup
  %1618 = extractvalue { ptr, i32 } %1617, 0
  store ptr %1618, ptr %26, align 8
  %1619 = extractvalue { ptr, i32 } %1617, 1
  store i32 %1619, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  br label %1620

1620:                                             ; preds = %1616, %1612
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #8
  br label %1621

1621:                                             ; preds = %1620, %1608
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #8
  br label %1622

1622:                                             ; preds = %1621, %1604
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #8
  br label %1623

1623:                                             ; preds = %1622, %1600
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #8
  br label %1624

1624:                                             ; preds = %1623, %1596
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1625

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

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

1627:                                             ; preds = %1626, %1584
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #8
  br label %1628

1628:                                             ; preds = %1627, %1580
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #8
  br label %1629

1629:                                             ; preds = %1628, %1576
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #8
  br label %1630

1630:                                             ; preds = %1629, %1572
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #8
  br label %1631

1631:                                             ; preds = %1630, %1568
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #8
  br label %2316

1632:                                             ; preds = %1562, %1465
  %1633 = load i8, ptr %12, align 1, !tbaa !9
  %1634 = zext i8 %1633 to i32
  %1635 = and i32 %1634, 64
  %1636 = icmp ne i32 %1635, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #8
  br i1 %1636, label %1637, label %1653

1637:                                             ; preds = %1632
  %1638 = load i8, ptr %12, align 1, !tbaa !9
  %1639 = zext i8 %1638 to i32
  %1640 = and i32 %1639, 32
  %1641 = icmp ne i32 %1640, 0
  br i1 %1641, label %1642, label %1653

1642:                                             ; preds = %1637
  %1643 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %117, align 8, !tbaa !12
  %1644 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1643, ptr noundef nonnull align 8 dereferenceable(8) %117)
          to label %1645 unwind label %1781

1645:                                             ; preds = %1642
  %1646 = load i32, ptr %20, align 4, !tbaa !10
  %1647 = sub nsw i32 %1646, 1
  %1648 = sext i32 %1647 to i64
  %1649 = getelementptr inbounds i8, ptr %1644, i64 %1648
  %1650 = load i8, ptr %1649, align 1, !tbaa !24, !range !26, !noundef !27
  %1651 = trunc i8 %1650 to i1
  %1652 = xor i1 %1651, true
  br label %1653

1653:                                             ; preds = %1645, %1637, %1632
  %1654 = phi i1 [ false, %1637 ], [ false, %1632 ], [ %1652, %1645 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #8
  br i1 %1654, label %1655, label %1849

1655:                                             ; preds = %1653
  %1656 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #8
  store i64 0, ptr %118, align 8, !tbaa !12
  %1657 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1656, ptr noundef nonnull align 8 dereferenceable(8) %118)
          to label %1658 unwind label %1785

1658:                                             ; preds = %1655
  %1659 = load i32, ptr %20, align 4, !tbaa !10
  %1660 = sub nsw i32 %1659, 1
  %1661 = sext i32 %1660 to i64
  %1662 = getelementptr inbounds double, ptr %1657, i64 %1661
  %1663 = load double, ptr %1662, align 8, !tbaa !14
  %1664 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1665 = load double, ptr %1664, align 8, !tbaa !16
  %1666 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #8
  store i64 0, ptr %119, align 8, !tbaa !12
  %1667 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1666, ptr noundef nonnull align 8 dereferenceable(8) %119)
          to label %1668 unwind label %1789

1668:                                             ; preds = %1658
  %1669 = load i32, ptr %20, align 4, !tbaa !10
  %1670 = sub nsw i32 %1669, 1
  %1671 = sext i32 %1670 to i64
  %1672 = getelementptr inbounds double, ptr %1667, i64 %1671
  %1673 = load double, ptr %1672, align 8, !tbaa !14
  %1674 = call double @llvm.fmuladd.f64(double %1665, double %1673, double %1663)
  %1675 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %1676 = load ptr, ptr %1675, align 8, !tbaa !23
  %1677 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #8
  %1678 = load i32, ptr %20, align 4, !tbaa !10
  %1679 = sub nsw i32 %1678, 1
  %1680 = sext i32 %1679 to i64
  store i64 %1680, ptr %120, align 8, !tbaa !12
  %1681 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1677, ptr noundef nonnull align 8 dereferenceable(8) %120)
          to label %1682 unwind label %1793

1682:                                             ; preds = %1668
  %1683 = load double, ptr %1681, align 8, !tbaa !14
  %1684 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #8
  store i64 0, ptr %121, align 8, !tbaa !12
  %1685 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1684, ptr noundef nonnull align 8 dereferenceable(8) %121)
          to label %1686 unwind label %1797

1686:                                             ; preds = %1682
  %1687 = load double, ptr %1685, align 8, !tbaa !14
  %1688 = invoke noundef double %1676(double noundef %1683, double noundef %1687)
          to label %1689 unwind label %1797

1689:                                             ; preds = %1686
  %1690 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1691 = load double, ptr %1690, align 8, !tbaa !16
  %1692 = fmul double %1688, %1691
  %1693 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1694 = load double, ptr %1693, align 8, !tbaa !16
  %1695 = fmul double %1692, %1694
  %1696 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #8
  store i64 1, ptr %122, align 8, !tbaa !12
  %1697 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1696, ptr noundef nonnull align 8 dereferenceable(8) %122)
          to label %1698 unwind label %1801

1698:                                             ; preds = %1689
  %1699 = load i32, ptr %20, align 4, !tbaa !10
  %1700 = sub nsw i32 %1699, 1
  %1701 = sext i32 %1700 to i64
  %1702 = getelementptr inbounds double, ptr %1697, i64 %1701
  %1703 = load double, ptr %1702, align 8, !tbaa !14
  %1704 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #8
  store i64 0, ptr %123, align 8, !tbaa !12
  %1705 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1704, ptr noundef nonnull align 8 dereferenceable(8) %123)
          to label %1706 unwind label %1805

1706:                                             ; preds = %1698
  %1707 = load i32, ptr %20, align 4, !tbaa !10
  %1708 = sub nsw i32 %1707, 1
  %1709 = sext i32 %1708 to i64
  %1710 = getelementptr inbounds double, ptr %1705, i64 %1709
  %1711 = load double, ptr %1710, align 8, !tbaa !14
  %1712 = fsub double %1703, %1711
  %1713 = load double, ptr %29, align 8, !tbaa !14
  %1714 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %1715 = load ptr, ptr %1714, align 8, !tbaa !28
  %1716 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #8
  %1717 = load i32, ptr %20, align 4, !tbaa !10
  %1718 = sub nsw i32 %1717, 1
  %1719 = sext i32 %1718 to i64
  store i64 %1719, ptr %124, align 8, !tbaa !12
  %1720 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1716, ptr noundef nonnull align 8 dereferenceable(8) %124)
          to label %1721 unwind label %1809

1721:                                             ; preds = %1706
  %1722 = load double, ptr %1720, align 8, !tbaa !14
  %1723 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #8
  store i64 0, ptr %125, align 8, !tbaa !12
  %1724 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1723, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %1725 unwind label %1813

1725:                                             ; preds = %1721
  %1726 = load double, ptr %1724, align 8, !tbaa !14
  %1727 = invoke noundef double %1715(double noundef %1722, double noundef %1726)
          to label %1728 unwind label %1813

1728:                                             ; preds = %1725
  %1729 = fneg double %1713
  %1730 = call double @llvm.fmuladd.f64(double %1729, double %1727, double %1712)
  %1731 = load double, ptr %29, align 8, !tbaa !14
  %1732 = load double, ptr %29, align 8, !tbaa !14
  %1733 = fmul double %1731, %1732
  %1734 = fdiv double %1730, %1733
  %1735 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #8
  store i64 0, ptr %126, align 8, !tbaa !12
  %1736 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1735, ptr noundef nonnull align 8 dereferenceable(8) %126)
          to label %1737 unwind label %1817

1737:                                             ; preds = %1728
  %1738 = load i32, ptr %20, align 4, !tbaa !10
  %1739 = sub nsw i32 %1738, 2
  %1740 = sext i32 %1739 to i64
  %1741 = getelementptr inbounds double, ptr %1736, i64 %1740
  %1742 = load double, ptr %1741, align 8, !tbaa !14
  %1743 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #8
  store i64 0, ptr %127, align 8, !tbaa !12
  %1744 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1743, ptr noundef nonnull align 8 dereferenceable(8) %127)
          to label %1745 unwind label %1821

1745:                                             ; preds = %1737
  %1746 = load i32, ptr %20, align 4, !tbaa !10
  %1747 = sub nsw i32 %1746, 1
  %1748 = sext i32 %1747 to i64
  %1749 = getelementptr inbounds double, ptr %1744, i64 %1748
  %1750 = load double, ptr %1749, align 8, !tbaa !14
  %1751 = fsub double %1742, %1750
  %1752 = load double, ptr %24, align 8, !tbaa !14
  %1753 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %1754 = load ptr, ptr %1753, align 8, !tbaa !42
  %1755 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #8
  %1756 = load i32, ptr %20, align 4, !tbaa !10
  %1757 = sub nsw i32 %1756, 1
  %1758 = sext i32 %1757 to i64
  store i64 %1758, ptr %128, align 8, !tbaa !12
  %1759 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1755, ptr noundef nonnull align 8 dereferenceable(8) %128)
          to label %1760 unwind label %1825

1760:                                             ; preds = %1745
  %1761 = load double, ptr %1759, align 8, !tbaa !14
  %1762 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #8
  store i64 0, ptr %129, align 8, !tbaa !12
  %1763 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1762, ptr noundef nonnull align 8 dereferenceable(8) %129)
          to label %1764 unwind label %1829

1764:                                             ; preds = %1760
  %1765 = load double, ptr %1763, align 8, !tbaa !14
  %1766 = invoke noundef double %1754(double noundef %1761, double noundef %1765)
          to label %1767 unwind label %1829

1767:                                             ; preds = %1764
  %1768 = call double @llvm.fmuladd.f64(double %1752, double %1766, double %1751)
  %1769 = load double, ptr %24, align 8, !tbaa !14
  %1770 = load double, ptr %24, align 8, !tbaa !14
  %1771 = fmul double %1769, %1770
  %1772 = fdiv double %1768, %1771
  %1773 = fadd double %1734, %1772
  %1774 = call double @llvm.fmuladd.f64(double %1695, double %1773, double %1674)
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #8
  store i64 0, ptr %130, align 8, !tbaa !12
  %1775 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %1776 unwind label %1833

1776:                                             ; preds = %1767
  %1777 = load i32, ptr %20, align 4, !tbaa !10
  %1778 = sub nsw i32 %1777, 1
  %1779 = sext i32 %1778 to i64
  %1780 = getelementptr inbounds double, ptr %1775, i64 %1779
  store double %1774, ptr %1780, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  br label %1849

1781:                                             ; preds = %1642
  %1782 = landingpad { ptr, i32 }
          cleanup
  %1783 = extractvalue { ptr, i32 } %1782, 0
  store ptr %1783, ptr %26, align 8
  %1784 = extractvalue { ptr, i32 } %1782, 1
  store i32 %1784, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #8
  br label %2316

1785:                                             ; preds = %1655
  %1786 = landingpad { ptr, i32 }
          cleanup
  %1787 = extractvalue { ptr, i32 } %1786, 0
  store ptr %1787, ptr %26, align 8
  %1788 = extractvalue { ptr, i32 } %1786, 1
  store i32 %1788, ptr %27, align 4
  br label %1848

1789:                                             ; preds = %1658
  %1790 = landingpad { ptr, i32 }
          cleanup
  %1791 = extractvalue { ptr, i32 } %1790, 0
  store ptr %1791, ptr %26, align 8
  %1792 = extractvalue { ptr, i32 } %1790, 1
  store i32 %1792, ptr %27, align 4
  br label %1847

1793:                                             ; preds = %1668
  %1794 = landingpad { ptr, i32 }
          cleanup
  %1795 = extractvalue { ptr, i32 } %1794, 0
  store ptr %1795, ptr %26, align 8
  %1796 = extractvalue { ptr, i32 } %1794, 1
  store i32 %1796, ptr %27, align 4
  br label %1846

1797:                                             ; preds = %1686, %1682
  %1798 = landingpad { ptr, i32 }
          cleanup
  %1799 = extractvalue { ptr, i32 } %1798, 0
  store ptr %1799, ptr %26, align 8
  %1800 = extractvalue { ptr, i32 } %1798, 1
  store i32 %1800, ptr %27, align 4
  br label %1845

1801:                                             ; preds = %1689
  %1802 = landingpad { ptr, i32 }
          cleanup
  %1803 = extractvalue { ptr, i32 } %1802, 0
  store ptr %1803, ptr %26, align 8
  %1804 = extractvalue { ptr, i32 } %1802, 1
  store i32 %1804, ptr %27, align 4
  br label %1844

1805:                                             ; preds = %1698
  %1806 = landingpad { ptr, i32 }
          cleanup
  %1807 = extractvalue { ptr, i32 } %1806, 0
  store ptr %1807, ptr %26, align 8
  %1808 = extractvalue { ptr, i32 } %1806, 1
  store i32 %1808, ptr %27, align 4
  br label %1843

1809:                                             ; preds = %1706
  %1810 = landingpad { ptr, i32 }
          cleanup
  %1811 = extractvalue { ptr, i32 } %1810, 0
  store ptr %1811, ptr %26, align 8
  %1812 = extractvalue { ptr, i32 } %1810, 1
  store i32 %1812, ptr %27, align 4
  br label %1842

1813:                                             ; preds = %1725, %1721
  %1814 = landingpad { ptr, i32 }
          cleanup
  %1815 = extractvalue { ptr, i32 } %1814, 0
  store ptr %1815, ptr %26, align 8
  %1816 = extractvalue { ptr, i32 } %1814, 1
  store i32 %1816, ptr %27, align 4
  br label %1841

1817:                                             ; preds = %1728
  %1818 = landingpad { ptr, i32 }
          cleanup
  %1819 = extractvalue { ptr, i32 } %1818, 0
  store ptr %1819, ptr %26, align 8
  %1820 = extractvalue { ptr, i32 } %1818, 1
  store i32 %1820, ptr %27, align 4
  br label %1840

1821:                                             ; preds = %1737
  %1822 = landingpad { ptr, i32 }
          cleanup
  %1823 = extractvalue { ptr, i32 } %1822, 0
  store ptr %1823, ptr %26, align 8
  %1824 = extractvalue { ptr, i32 } %1822, 1
  store i32 %1824, ptr %27, align 4
  br label %1839

1825:                                             ; preds = %1745
  %1826 = landingpad { ptr, i32 }
          cleanup
  %1827 = extractvalue { ptr, i32 } %1826, 0
  store ptr %1827, ptr %26, align 8
  %1828 = extractvalue { ptr, i32 } %1826, 1
  store i32 %1828, ptr %27, align 4
  br label %1838

1829:                                             ; preds = %1764, %1760
  %1830 = landingpad { ptr, i32 }
          cleanup
  %1831 = extractvalue { ptr, i32 } %1830, 0
  store ptr %1831, ptr %26, align 8
  %1832 = extractvalue { ptr, i32 } %1830, 1
  store i32 %1832, ptr %27, align 4
  br label %1837

1833:                                             ; preds = %1767
  %1834 = landingpad { ptr, i32 }
          cleanup
  %1835 = extractvalue { ptr, i32 } %1834, 0
  store ptr %1835, ptr %26, align 8
  %1836 = extractvalue { ptr, i32 } %1834, 1
  store i32 %1836, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #8
  br label %1837

1837:                                             ; preds = %1833, %1829
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #8
  br label %1838

1838:                                             ; preds = %1837, %1825
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  br label %1839

1839:                                             ; preds = %1838, %1821
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  br label %1840

1840:                                             ; preds = %1839, %1817
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #8
  br label %1841

1841:                                             ; preds = %1840, %1813
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  br label %1842

1842:                                             ; preds = %1841, %1809
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #8
  br label %1843

1843:                                             ; preds = %1842, %1805
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #8
  br label %1844

1844:                                             ; preds = %1843, %1801
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #8
  br label %1845

1845:                                             ; preds = %1844, %1797
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  br label %1846

1846:                                             ; preds = %1845, %1793
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  br label %1847

1847:                                             ; preds = %1846, %1789
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  br label %1848

1848:                                             ; preds = %1847, %1785
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  br label %2316

1849:                                             ; preds = %1776, %1653
  %1850 = load i8, ptr %12, align 1, !tbaa !9
  %1851 = zext i8 %1850 to i32
  %1852 = and i32 %1851, 16
  %1853 = icmp ne i32 %1852, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #8
  br i1 %1853, label %1854, label %1870

1854:                                             ; preds = %1849
  %1855 = load i8, ptr %12, align 1, !tbaa !9
  %1856 = zext i8 %1855 to i32
  %1857 = and i32 %1856, 128
  %1858 = icmp ne i32 %1857, 0
  br i1 %1858, label %1859, label %1870

1859:                                             ; preds = %1854
  %1860 = load ptr, ptr %18, align 8, !tbaa !5
  %1861 = load i32, ptr %19, align 4, !tbaa !10
  %1862 = sub nsw i32 %1861, 1
  %1863 = sext i32 %1862 to i64
  store i64 %1863, ptr %131, align 8, !tbaa !12
  %1864 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1860, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %1865 unwind label %1998

1865:                                             ; preds = %1859
  %1866 = getelementptr inbounds i8, ptr %1864, i64 0
  %1867 = load i8, ptr %1866, align 1, !tbaa !24, !range !26, !noundef !27
  %1868 = trunc i8 %1867 to i1
  %1869 = xor i1 %1868, true
  br label %1870

1870:                                             ; preds = %1865, %1854, %1849
  %1871 = phi i1 [ false, %1854 ], [ false, %1849 ], [ %1869, %1865 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br i1 %1871, label %1872, label %2066

1872:                                             ; preds = %1870
  %1873 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #8
  %1874 = load i32, ptr %19, align 4, !tbaa !10
  %1875 = sub nsw i32 %1874, 1
  %1876 = sext i32 %1875 to i64
  store i64 %1876, ptr %132, align 8, !tbaa !12
  %1877 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1873, ptr noundef nonnull align 8 dereferenceable(8) %132)
          to label %1878 unwind label %2002

1878:                                             ; preds = %1872
  %1879 = getelementptr inbounds double, ptr %1877, i64 0
  %1880 = load double, ptr %1879, align 8, !tbaa !14
  %1881 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1882 = load double, ptr %1881, align 8, !tbaa !16
  %1883 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #8
  %1884 = load i32, ptr %19, align 4, !tbaa !10
  %1885 = sub nsw i32 %1884, 1
  %1886 = sext i32 %1885 to i64
  store i64 %1886, ptr %133, align 8, !tbaa !12
  %1887 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1883, ptr noundef nonnull align 8 dereferenceable(8) %133)
          to label %1888 unwind label %2006

1888:                                             ; preds = %1878
  %1889 = getelementptr inbounds double, ptr %1887, i64 0
  %1890 = load double, ptr %1889, align 8, !tbaa !14
  %1891 = call double @llvm.fmuladd.f64(double %1882, double %1890, double %1880)
  %1892 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %1893 = load ptr, ptr %1892, align 8, !tbaa !23
  %1894 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #8
  store i64 0, ptr %134, align 8, !tbaa !12
  %1895 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1894, ptr noundef nonnull align 8 dereferenceable(8) %134)
          to label %1896 unwind label %2010

1896:                                             ; preds = %1888
  %1897 = load double, ptr %1895, align 8, !tbaa !14
  %1898 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #8
  %1899 = load i32, ptr %19, align 4, !tbaa !10
  %1900 = sub nsw i32 %1899, 1
  %1901 = sext i32 %1900 to i64
  store i64 %1901, ptr %135, align 8, !tbaa !12
  %1902 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1898, ptr noundef nonnull align 8 dereferenceable(8) %135)
          to label %1903 unwind label %2014

1903:                                             ; preds = %1896
  %1904 = load double, ptr %1902, align 8, !tbaa !14
  %1905 = invoke noundef double %1893(double noundef %1897, double noundef %1904)
          to label %1906 unwind label %2014

1906:                                             ; preds = %1903
  %1907 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1908 = load double, ptr %1907, align 8, !tbaa !16
  %1909 = fmul double %1905, %1908
  %1910 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %1911 = load double, ptr %1910, align 8, !tbaa !16
  %1912 = fmul double %1909, %1911
  %1913 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #8
  %1914 = load i32, ptr %19, align 4, !tbaa !10
  %1915 = sub nsw i32 %1914, 2
  %1916 = sext i32 %1915 to i64
  store i64 %1916, ptr %136, align 8, !tbaa !12
  %1917 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1913, ptr noundef nonnull align 8 dereferenceable(8) %136)
          to label %1918 unwind label %2018

1918:                                             ; preds = %1906
  %1919 = getelementptr inbounds double, ptr %1917, i64 0
  %1920 = load double, ptr %1919, align 8, !tbaa !14
  %1921 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #8
  %1922 = load i32, ptr %19, align 4, !tbaa !10
  %1923 = sub nsw i32 %1922, 1
  %1924 = sext i32 %1923 to i64
  store i64 %1924, ptr %137, align 8, !tbaa !12
  %1925 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1921, ptr noundef nonnull align 8 dereferenceable(8) %137)
          to label %1926 unwind label %2022

1926:                                             ; preds = %1918
  %1927 = getelementptr inbounds double, ptr %1925, i64 0
  %1928 = load double, ptr %1927, align 8, !tbaa !14
  %1929 = fsub double %1920, %1928
  %1930 = load double, ptr %29, align 8, !tbaa !14
  %1931 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %1932 = load ptr, ptr %1931, align 8, !tbaa !44
  %1933 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #8
  store i64 0, ptr %138, align 8, !tbaa !12
  %1934 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1933, ptr noundef nonnull align 8 dereferenceable(8) %138)
          to label %1935 unwind label %2026

1935:                                             ; preds = %1926
  %1936 = load double, ptr %1934, align 8, !tbaa !14
  %1937 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #8
  %1938 = load i32, ptr %19, align 4, !tbaa !10
  %1939 = sub nsw i32 %1938, 1
  %1940 = sext i32 %1939 to i64
  store i64 %1940, ptr %139, align 8, !tbaa !12
  %1941 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1937, ptr noundef nonnull align 8 dereferenceable(8) %139)
          to label %1942 unwind label %2030

1942:                                             ; preds = %1935
  %1943 = load double, ptr %1941, align 8, !tbaa !14
  %1944 = invoke noundef double %1932(double noundef %1936, double noundef %1943)
          to label %1945 unwind label %2030

1945:                                             ; preds = %1942
  %1946 = call double @llvm.fmuladd.f64(double %1930, double %1944, double %1929)
  %1947 = load double, ptr %29, align 8, !tbaa !14
  %1948 = load double, ptr %29, align 8, !tbaa !14
  %1949 = fmul double %1947, %1948
  %1950 = fdiv double %1946, %1949
  %1951 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #8
  %1952 = load i32, ptr %19, align 4, !tbaa !10
  %1953 = sub nsw i32 %1952, 1
  %1954 = sext i32 %1953 to i64
  store i64 %1954, ptr %140, align 8, !tbaa !12
  %1955 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1951, ptr noundef nonnull align 8 dereferenceable(8) %140)
          to label %1956 unwind label %2034

1956:                                             ; preds = %1945
  %1957 = getelementptr inbounds double, ptr %1955, i64 1
  %1958 = load double, ptr %1957, align 8, !tbaa !14
  %1959 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #8
  %1960 = load i32, ptr %19, align 4, !tbaa !10
  %1961 = sub nsw i32 %1960, 1
  %1962 = sext i32 %1961 to i64
  store i64 %1962, ptr %141, align 8, !tbaa !12
  %1963 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1959, ptr noundef nonnull align 8 dereferenceable(8) %141)
          to label %1964 unwind label %2038

1964:                                             ; preds = %1956
  %1965 = getelementptr inbounds double, ptr %1963, i64 0
  %1966 = load double, ptr %1965, align 8, !tbaa !14
  %1967 = fsub double %1958, %1966
  %1968 = load double, ptr %24, align 8, !tbaa !14
  %1969 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %1970 = load ptr, ptr %1969, align 8, !tbaa !31
  %1971 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #8
  store i64 0, ptr %142, align 8, !tbaa !12
  %1972 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1971, ptr noundef nonnull align 8 dereferenceable(8) %142)
          to label %1973 unwind label %2042

1973:                                             ; preds = %1964
  %1974 = load double, ptr %1972, align 8, !tbaa !14
  %1975 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #8
  %1976 = load i32, ptr %19, align 4, !tbaa !10
  %1977 = sub nsw i32 %1976, 1
  %1978 = sext i32 %1977 to i64
  store i64 %1978, ptr %143, align 8, !tbaa !12
  %1979 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %1975, ptr noundef nonnull align 8 dereferenceable(8) %143)
          to label %1980 unwind label %2046

1980:                                             ; preds = %1973
  %1981 = load double, ptr %1979, align 8, !tbaa !14
  %1982 = invoke noundef double %1970(double noundef %1974, double noundef %1981)
          to label %1983 unwind label %2046

1983:                                             ; preds = %1980
  %1984 = fneg double %1968
  %1985 = call double @llvm.fmuladd.f64(double %1984, double %1982, double %1967)
  %1986 = load double, ptr %24, align 8, !tbaa !14
  %1987 = load double, ptr %24, align 8, !tbaa !14
  %1988 = fmul double %1986, %1987
  %1989 = fdiv double %1985, %1988
  %1990 = fadd double %1950, %1989
  %1991 = call double @llvm.fmuladd.f64(double %1912, double %1990, double %1891)
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #8
  %1992 = load i32, ptr %19, align 4, !tbaa !10
  %1993 = sub nsw i32 %1992, 1
  %1994 = sext i32 %1993 to i64
  store i64 %1994, ptr %144, align 8, !tbaa !12
  %1995 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1996 unwind label %2050

1996:                                             ; preds = %1983
  %1997 = getelementptr inbounds double, ptr %1995, i64 0
  store double %1991, ptr %1997, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  br label %2066

1998:                                             ; preds = %1859
  %1999 = landingpad { ptr, i32 }
          cleanup
  %2000 = extractvalue { ptr, i32 } %1999, 0
  store ptr %2000, ptr %26, align 8
  %2001 = extractvalue { ptr, i32 } %1999, 1
  store i32 %2001, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %2316

2002:                                             ; preds = %1872
  %2003 = landingpad { ptr, i32 }
          cleanup
  %2004 = extractvalue { ptr, i32 } %2003, 0
  store ptr %2004, ptr %26, align 8
  %2005 = extractvalue { ptr, i32 } %2003, 1
  store i32 %2005, ptr %27, align 4
  br label %2065

2006:                                             ; preds = %1878
  %2007 = landingpad { ptr, i32 }
          cleanup
  %2008 = extractvalue { ptr, i32 } %2007, 0
  store ptr %2008, ptr %26, align 8
  %2009 = extractvalue { ptr, i32 } %2007, 1
  store i32 %2009, ptr %27, align 4
  br label %2064

2010:                                             ; preds = %1888
  %2011 = landingpad { ptr, i32 }
          cleanup
  %2012 = extractvalue { ptr, i32 } %2011, 0
  store ptr %2012, ptr %26, align 8
  %2013 = extractvalue { ptr, i32 } %2011, 1
  store i32 %2013, ptr %27, align 4
  br label %2063

2014:                                             ; preds = %1903, %1896
  %2015 = landingpad { ptr, i32 }
          cleanup
  %2016 = extractvalue { ptr, i32 } %2015, 0
  store ptr %2016, ptr %26, align 8
  %2017 = extractvalue { ptr, i32 } %2015, 1
  store i32 %2017, ptr %27, align 4
  br label %2062

2018:                                             ; preds = %1906
  %2019 = landingpad { ptr, i32 }
          cleanup
  %2020 = extractvalue { ptr, i32 } %2019, 0
  store ptr %2020, ptr %26, align 8
  %2021 = extractvalue { ptr, i32 } %2019, 1
  store i32 %2021, ptr %27, align 4
  br label %2061

2022:                                             ; preds = %1918
  %2023 = landingpad { ptr, i32 }
          cleanup
  %2024 = extractvalue { ptr, i32 } %2023, 0
  store ptr %2024, ptr %26, align 8
  %2025 = extractvalue { ptr, i32 } %2023, 1
  store i32 %2025, ptr %27, align 4
  br label %2060

2026:                                             ; preds = %1926
  %2027 = landingpad { ptr, i32 }
          cleanup
  %2028 = extractvalue { ptr, i32 } %2027, 0
  store ptr %2028, ptr %26, align 8
  %2029 = extractvalue { ptr, i32 } %2027, 1
  store i32 %2029, ptr %27, align 4
  br label %2059

2030:                                             ; preds = %1942, %1935
  %2031 = landingpad { ptr, i32 }
          cleanup
  %2032 = extractvalue { ptr, i32 } %2031, 0
  store ptr %2032, ptr %26, align 8
  %2033 = extractvalue { ptr, i32 } %2031, 1
  store i32 %2033, ptr %27, align 4
  br label %2058

2034:                                             ; preds = %1945
  %2035 = landingpad { ptr, i32 }
          cleanup
  %2036 = extractvalue { ptr, i32 } %2035, 0
  store ptr %2036, ptr %26, align 8
  %2037 = extractvalue { ptr, i32 } %2035, 1
  store i32 %2037, ptr %27, align 4
  br label %2057

2038:                                             ; preds = %1956
  %2039 = landingpad { ptr, i32 }
          cleanup
  %2040 = extractvalue { ptr, i32 } %2039, 0
  store ptr %2040, ptr %26, align 8
  %2041 = extractvalue { ptr, i32 } %2039, 1
  store i32 %2041, ptr %27, align 4
  br label %2056

2042:                                             ; preds = %1964
  %2043 = landingpad { ptr, i32 }
          cleanup
  %2044 = extractvalue { ptr, i32 } %2043, 0
  store ptr %2044, ptr %26, align 8
  %2045 = extractvalue { ptr, i32 } %2043, 1
  store i32 %2045, ptr %27, align 4
  br label %2055

2046:                                             ; preds = %1980, %1973
  %2047 = landingpad { ptr, i32 }
          cleanup
  %2048 = extractvalue { ptr, i32 } %2047, 0
  store ptr %2048, ptr %26, align 8
  %2049 = extractvalue { ptr, i32 } %2047, 1
  store i32 %2049, ptr %27, align 4
  br label %2054

2050:                                             ; preds = %1983
  %2051 = landingpad { ptr, i32 }
          cleanup
  %2052 = extractvalue { ptr, i32 } %2051, 0
  store ptr %2052, ptr %26, align 8
  %2053 = extractvalue { ptr, i32 } %2051, 1
  store i32 %2053, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  br label %2054

2054:                                             ; preds = %2050, %2046
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #8
  br label %2055

2055:                                             ; preds = %2054, %2042
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #8
  br label %2056

2056:                                             ; preds = %2055, %2038
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #8
  br label %2057

2057:                                             ; preds = %2056, %2034
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #8
  br label %2058

2058:                                             ; preds = %2057, %2030
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #8
  br label %2059

2059:                                             ; preds = %2058, %2026
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #8
  br label %2060

2060:                                             ; preds = %2059, %2022
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #8
  br label %2061

2061:                                             ; preds = %2060, %2018
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #8
  br label %2062

2062:                                             ; preds = %2061, %2014
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  br label %2063

2063:                                             ; preds = %2062, %2010
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  br label %2064

2064:                                             ; preds = %2063, %2006
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #8
  br label %2065

2065:                                             ; preds = %2064, %2002
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  br label %2316

2066:                                             ; preds = %1996, %1870
  %2067 = load i8, ptr %12, align 1, !tbaa !9
  %2068 = zext i8 %2067 to i32
  %2069 = and i32 %2068, 128
  %2070 = icmp ne i32 %2069, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #8
  br i1 %2070, label %2071, label %2090

2071:                                             ; preds = %2066
  %2072 = load i8, ptr %12, align 1, !tbaa !9
  %2073 = zext i8 %2072 to i32
  %2074 = and i32 %2073, 32
  %2075 = icmp ne i32 %2074, 0
  br i1 %2075, label %2076, label %2090

2076:                                             ; preds = %2071
  %2077 = load ptr, ptr %18, align 8, !tbaa !5
  %2078 = load i32, ptr %19, align 4, !tbaa !10
  %2079 = sub nsw i32 %2078, 1
  %2080 = sext i32 %2079 to i64
  store i64 %2080, ptr %145, align 8, !tbaa !12
  %2081 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2077, ptr noundef nonnull align 8 dereferenceable(8) %145)
          to label %2082 unwind label %2247

2082:                                             ; preds = %2076
  %2083 = load i32, ptr %20, align 4, !tbaa !10
  %2084 = sub nsw i32 %2083, 1
  %2085 = sext i32 %2084 to i64
  %2086 = getelementptr inbounds i8, ptr %2081, i64 %2085
  %2087 = load i8, ptr %2086, align 1, !tbaa !24, !range !26, !noundef !27
  %2088 = trunc i8 %2087 to i1
  %2089 = xor i1 %2088, true
  br label %2090

2090:                                             ; preds = %2082, %2071, %2066
  %2091 = phi i1 [ false, %2071 ], [ false, %2066 ], [ %2089, %2082 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #8
  br i1 %2091, label %2092, label %2315

2092:                                             ; preds = %2090
  %2093 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %2094 = load i32, ptr %19, align 4, !tbaa !10
  %2095 = sub nsw i32 %2094, 1
  %2096 = sext i32 %2095 to i64
  store i64 %2096, ptr %146, align 8, !tbaa !12
  %2097 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2093, ptr noundef nonnull align 8 dereferenceable(8) %146)
          to label %2098 unwind label %2251

2098:                                             ; preds = %2092
  %2099 = load i32, ptr %20, align 4, !tbaa !10
  %2100 = sub nsw i32 %2099, 1
  %2101 = sext i32 %2100 to i64
  %2102 = getelementptr inbounds double, ptr %2097, i64 %2101
  %2103 = load double, ptr %2102, align 8, !tbaa !14
  %2104 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2105 = load double, ptr %2104, align 8, !tbaa !16
  %2106 = load ptr, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #8
  %2107 = load i32, ptr %19, align 4, !tbaa !10
  %2108 = sub nsw i32 %2107, 1
  %2109 = sext i32 %2108 to i64
  store i64 %2109, ptr %147, align 8, !tbaa !12
  %2110 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2106, ptr noundef nonnull align 8 dereferenceable(8) %147)
          to label %2111 unwind label %2255

2111:                                             ; preds = %2098
  %2112 = load i32, ptr %20, align 4, !tbaa !10
  %2113 = sub nsw i32 %2112, 1
  %2114 = sext i32 %2113 to i64
  %2115 = getelementptr inbounds double, ptr %2110, i64 %2114
  %2116 = load double, ptr %2115, align 8, !tbaa !14
  %2117 = call double @llvm.fmuladd.f64(double %2105, double %2116, double %2103)
  %2118 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %2119 = load ptr, ptr %2118, align 8, !tbaa !23
  %2120 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #8
  %2121 = load i32, ptr %20, align 4, !tbaa !10
  %2122 = sub nsw i32 %2121, 1
  %2123 = sext i32 %2122 to i64
  store i64 %2123, ptr %148, align 8, !tbaa !12
  %2124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2120, ptr noundef nonnull align 8 dereferenceable(8) %148)
          to label %2125 unwind label %2259

2125:                                             ; preds = %2111
  %2126 = load double, ptr %2124, align 8, !tbaa !14
  %2127 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #8
  %2128 = load i32, ptr %19, align 4, !tbaa !10
  %2129 = sub nsw i32 %2128, 1
  %2130 = sext i32 %2129 to i64
  store i64 %2130, ptr %149, align 8, !tbaa !12
  %2131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2127, ptr noundef nonnull align 8 dereferenceable(8) %149)
          to label %2132 unwind label %2263

2132:                                             ; preds = %2125
  %2133 = load double, ptr %2131, align 8, !tbaa !14
  %2134 = invoke noundef double %2119(double noundef %2126, double noundef %2133)
          to label %2135 unwind label %2263

2135:                                             ; preds = %2132
  %2136 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2137 = load double, ptr %2136, align 8, !tbaa !16
  %2138 = fmul double %2134, %2137
  %2139 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2140 = load double, ptr %2139, align 8, !tbaa !16
  %2141 = fmul double %2138, %2140
  %2142 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #8
  %2143 = load i32, ptr %19, align 4, !tbaa !10
  %2144 = sub nsw i32 %2143, 2
  %2145 = sext i32 %2144 to i64
  store i64 %2145, ptr %150, align 8, !tbaa !12
  %2146 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2142, ptr noundef nonnull align 8 dereferenceable(8) %150)
          to label %2147 unwind label %2267

2147:                                             ; preds = %2135
  %2148 = load i32, ptr %20, align 4, !tbaa !10
  %2149 = sub nsw i32 %2148, 1
  %2150 = sext i32 %2149 to i64
  %2151 = getelementptr inbounds double, ptr %2146, i64 %2150
  %2152 = load double, ptr %2151, align 8, !tbaa !14
  %2153 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #8
  %2154 = load i32, ptr %19, align 4, !tbaa !10
  %2155 = sub nsw i32 %2154, 1
  %2156 = sext i32 %2155 to i64
  store i64 %2156, ptr %151, align 8, !tbaa !12
  %2157 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2153, ptr noundef nonnull align 8 dereferenceable(8) %151)
          to label %2158 unwind label %2271

2158:                                             ; preds = %2147
  %2159 = load i32, ptr %20, align 4, !tbaa !10
  %2160 = sub nsw i32 %2159, 1
  %2161 = sext i32 %2160 to i64
  %2162 = getelementptr inbounds double, ptr %2157, i64 %2161
  %2163 = load double, ptr %2162, align 8, !tbaa !14
  %2164 = fsub double %2152, %2163
  %2165 = load double, ptr %29, align 8, !tbaa !14
  %2166 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %2167 = load ptr, ptr %2166, align 8, !tbaa !44
  %2168 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #8
  %2169 = load i32, ptr %20, align 4, !tbaa !10
  %2170 = sub nsw i32 %2169, 1
  %2171 = sext i32 %2170 to i64
  store i64 %2171, ptr %152, align 8, !tbaa !12
  %2172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2168, ptr noundef nonnull align 8 dereferenceable(8) %152)
          to label %2173 unwind label %2275

2173:                                             ; preds = %2158
  %2174 = load double, ptr %2172, align 8, !tbaa !14
  %2175 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #8
  %2176 = load i32, ptr %19, align 4, !tbaa !10
  %2177 = sub nsw i32 %2176, 1
  %2178 = sext i32 %2177 to i64
  store i64 %2178, ptr %153, align 8, !tbaa !12
  %2179 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2175, ptr noundef nonnull align 8 dereferenceable(8) %153)
          to label %2180 unwind label %2279

2180:                                             ; preds = %2173
  %2181 = load double, ptr %2179, align 8, !tbaa !14
  %2182 = invoke noundef double %2167(double noundef %2174, double noundef %2181)
          to label %2183 unwind label %2279

2183:                                             ; preds = %2180
  %2184 = call double @llvm.fmuladd.f64(double %2165, double %2182, double %2164)
  %2185 = load double, ptr %29, align 8, !tbaa !14
  %2186 = load double, ptr %29, align 8, !tbaa !14
  %2187 = fmul double %2185, %2186
  %2188 = fdiv double %2184, %2187
  %2189 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #8
  %2190 = load i32, ptr %19, align 4, !tbaa !10
  %2191 = sub nsw i32 %2190, 1
  %2192 = sext i32 %2191 to i64
  store i64 %2192, ptr %154, align 8, !tbaa !12
  %2193 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2189, ptr noundef nonnull align 8 dereferenceable(8) %154)
          to label %2194 unwind label %2283

2194:                                             ; preds = %2183
  %2195 = load i32, ptr %20, align 4, !tbaa !10
  %2196 = sub nsw i32 %2195, 2
  %2197 = sext i32 %2196 to i64
  %2198 = getelementptr inbounds double, ptr %2193, i64 %2197
  %2199 = load double, ptr %2198, align 8, !tbaa !14
  %2200 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #8
  %2201 = load i32, ptr %19, align 4, !tbaa !10
  %2202 = sub nsw i32 %2201, 1
  %2203 = sext i32 %2202 to i64
  store i64 %2203, ptr %155, align 8, !tbaa !12
  %2204 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2200, ptr noundef nonnull align 8 dereferenceable(8) %155)
          to label %2205 unwind label %2287

2205:                                             ; preds = %2194
  %2206 = load i32, ptr %20, align 4, !tbaa !10
  %2207 = sub nsw i32 %2206, 1
  %2208 = sext i32 %2207 to i64
  %2209 = getelementptr inbounds double, ptr %2204, i64 %2208
  %2210 = load double, ptr %2209, align 8, !tbaa !14
  %2211 = fsub double %2199, %2210
  %2212 = load double, ptr %24, align 8, !tbaa !14
  %2213 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %2214 = load ptr, ptr %2213, align 8, !tbaa !42
  %2215 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #8
  %2216 = load i32, ptr %20, align 4, !tbaa !10
  %2217 = sub nsw i32 %2216, 1
  %2218 = sext i32 %2217 to i64
  store i64 %2218, ptr %156, align 8, !tbaa !12
  %2219 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2215, ptr noundef nonnull align 8 dereferenceable(8) %156)
          to label %2220 unwind label %2291

2220:                                             ; preds = %2205
  %2221 = load double, ptr %2219, align 8, !tbaa !14
  %2222 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #8
  %2223 = load i32, ptr %19, align 4, !tbaa !10
  %2224 = sub nsw i32 %2223, 1
  %2225 = sext i32 %2224 to i64
  store i64 %2225, ptr %157, align 8, !tbaa !12
  %2226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2222, ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %2227 unwind label %2295

2227:                                             ; preds = %2220
  %2228 = load double, ptr %2226, align 8, !tbaa !14
  %2229 = invoke noundef double %2214(double noundef %2221, double noundef %2228)
          to label %2230 unwind label %2295

2230:                                             ; preds = %2227
  %2231 = call double @llvm.fmuladd.f64(double %2212, double %2229, double %2211)
  %2232 = load double, ptr %24, align 8, !tbaa !14
  %2233 = load double, ptr %24, align 8, !tbaa !14
  %2234 = fmul double %2232, %2233
  %2235 = fdiv double %2231, %2234
  %2236 = fadd double %2188, %2235
  %2237 = call double @llvm.fmuladd.f64(double %2141, double %2236, double %2117)
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #8
  %2238 = load i32, ptr %19, align 4, !tbaa !10
  %2239 = sub nsw i32 %2238, 1
  %2240 = sext i32 %2239 to i64
  store i64 %2240, ptr %158, align 8, !tbaa !12
  %2241 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %2242 unwind label %2299

2242:                                             ; preds = %2230
  %2243 = load i32, ptr %20, align 4, !tbaa !10
  %2244 = sub nsw i32 %2243, 1
  %2245 = sext i32 %2244 to i64
  %2246 = getelementptr inbounds double, ptr %2241, i64 %2245
  store double %2237, ptr %2246, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  br label %2315

2247:                                             ; preds = %2076
  %2248 = landingpad { ptr, i32 }
          cleanup
  %2249 = extractvalue { ptr, i32 } %2248, 0
  store ptr %2249, ptr %26, align 8
  %2250 = extractvalue { ptr, i32 } %2248, 1
  store i32 %2250, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #8
  br label %2316

2251:                                             ; preds = %2092
  %2252 = landingpad { ptr, i32 }
          cleanup
  %2253 = extractvalue { ptr, i32 } %2252, 0
  store ptr %2253, ptr %26, align 8
  %2254 = extractvalue { ptr, i32 } %2252, 1
  store i32 %2254, ptr %27, align 4
  br label %2314

2255:                                             ; preds = %2098
  %2256 = landingpad { ptr, i32 }
          cleanup
  %2257 = extractvalue { ptr, i32 } %2256, 0
  store ptr %2257, ptr %26, align 8
  %2258 = extractvalue { ptr, i32 } %2256, 1
  store i32 %2258, ptr %27, align 4
  br label %2313

2259:                                             ; preds = %2111
  %2260 = landingpad { ptr, i32 }
          cleanup
  %2261 = extractvalue { ptr, i32 } %2260, 0
  store ptr %2261, ptr %26, align 8
  %2262 = extractvalue { ptr, i32 } %2260, 1
  store i32 %2262, ptr %27, align 4
  br label %2312

2263:                                             ; preds = %2132, %2125
  %2264 = landingpad { ptr, i32 }
          cleanup
  %2265 = extractvalue { ptr, i32 } %2264, 0
  store ptr %2265, ptr %26, align 8
  %2266 = extractvalue { ptr, i32 } %2264, 1
  store i32 %2266, ptr %27, align 4
  br label %2311

2267:                                             ; preds = %2135
  %2268 = landingpad { ptr, i32 }
          cleanup
  %2269 = extractvalue { ptr, i32 } %2268, 0
  store ptr %2269, ptr %26, align 8
  %2270 = extractvalue { ptr, i32 } %2268, 1
  store i32 %2270, ptr %27, align 4
  br label %2310

2271:                                             ; preds = %2147
  %2272 = landingpad { ptr, i32 }
          cleanup
  %2273 = extractvalue { ptr, i32 } %2272, 0
  store ptr %2273, ptr %26, align 8
  %2274 = extractvalue { ptr, i32 } %2272, 1
  store i32 %2274, ptr %27, align 4
  br label %2309

2275:                                             ; preds = %2158
  %2276 = landingpad { ptr, i32 }
          cleanup
  %2277 = extractvalue { ptr, i32 } %2276, 0
  store ptr %2277, ptr %26, align 8
  %2278 = extractvalue { ptr, i32 } %2276, 1
  store i32 %2278, ptr %27, align 4
  br label %2308

2279:                                             ; preds = %2180, %2173
  %2280 = landingpad { ptr, i32 }
          cleanup
  %2281 = extractvalue { ptr, i32 } %2280, 0
  store ptr %2281, ptr %26, align 8
  %2282 = extractvalue { ptr, i32 } %2280, 1
  store i32 %2282, ptr %27, align 4
  br label %2307

2283:                                             ; preds = %2183
  %2284 = landingpad { ptr, i32 }
          cleanup
  %2285 = extractvalue { ptr, i32 } %2284, 0
  store ptr %2285, ptr %26, align 8
  %2286 = extractvalue { ptr, i32 } %2284, 1
  store i32 %2286, ptr %27, align 4
  br label %2306

2287:                                             ; preds = %2194
  %2288 = landingpad { ptr, i32 }
          cleanup
  %2289 = extractvalue { ptr, i32 } %2288, 0
  store ptr %2289, ptr %26, align 8
  %2290 = extractvalue { ptr, i32 } %2288, 1
  store i32 %2290, ptr %27, align 4
  br label %2305

2291:                                             ; preds = %2205
  %2292 = landingpad { ptr, i32 }
          cleanup
  %2293 = extractvalue { ptr, i32 } %2292, 0
  store ptr %2293, ptr %26, align 8
  %2294 = extractvalue { ptr, i32 } %2292, 1
  store i32 %2294, ptr %27, align 4
  br label %2304

2295:                                             ; preds = %2227, %2220
  %2296 = landingpad { ptr, i32 }
          cleanup
  %2297 = extractvalue { ptr, i32 } %2296, 0
  store ptr %2297, ptr %26, align 8
  %2298 = extractvalue { ptr, i32 } %2296, 1
  store i32 %2298, ptr %27, align 4
  br label %2303

2299:                                             ; preds = %2230
  %2300 = landingpad { ptr, i32 }
          cleanup
  %2301 = extractvalue { ptr, i32 } %2300, 0
  store ptr %2301, ptr %26, align 8
  %2302 = extractvalue { ptr, i32 } %2300, 1
  store i32 %2302, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #8
  br label %2303

2303:                                             ; preds = %2299, %2295
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #8
  br label %2304

2304:                                             ; preds = %2303, %2291
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #8
  br label %2305

2305:                                             ; preds = %2304, %2287
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #8
  br label %2306

2306:                                             ; preds = %2305, %2283
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  br label %2307

2307:                                             ; preds = %2306, %2279
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #8
  br label %2308

2308:                                             ; preds = %2307, %2275
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #8
  br label %2309

2309:                                             ; preds = %2308, %2271
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  br label %2310

2310:                                             ; preds = %2309, %2267
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #8
  br label %2311

2311:                                             ; preds = %2310, %2263
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  br label %2312

2312:                                             ; preds = %2311, %2259
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  br label %2313

2313:                                             ; preds = %2312, %2255
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #8
  br label %2314

2314:                                             ; preds = %2313, %2251
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  br label %2316

2315:                                             ; preds = %2242, %2090
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  br label %4141

2316:                                             ; preds = %2314, %2247, %2065, %1998, %1848, %1781, %1631, %1564, %1445, %1209, %971, %954
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  br label %4192

2317:                                             ; preds = %443
  %2318 = load i8, ptr %12, align 1, !tbaa !9
  %2319 = zext i8 %2318 to i32
  %2320 = and i32 %2319, 64
  %2321 = icmp ne i32 %2320, 0
  br i1 %2321, label %2322, label %2519

2322:                                             ; preds = %2317
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #8
  store i32 1, ptr %159, align 4, !tbaa !10
  br label %2323

2323:                                             ; preds = %2514, %2322
  %2324 = load i32, ptr %159, align 4, !tbaa !10
  %2325 = load i32, ptr %20, align 4, !tbaa !10
  %2326 = sub nsw i32 %2325, 1
  %2327 = icmp slt i32 %2324, %2326
  br i1 %2327, label %2329, label %2328

2328:                                             ; preds = %2323
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #8
  br label %2518

2329:                                             ; preds = %2323
  %2330 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #8
  store i64 0, ptr %160, align 8, !tbaa !12
  %2331 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2330, ptr noundef nonnull align 8 dereferenceable(8) %160)
          to label %2332 unwind label %2450

2332:                                             ; preds = %2329
  %2333 = load i32, ptr %159, align 4, !tbaa !10
  %2334 = sext i32 %2333 to i64
  %2335 = getelementptr inbounds i8, ptr %2331, i64 %2334
  %2336 = load i8, ptr %2335, align 1, !tbaa !24, !range !26, !noundef !27
  %2337 = trunc i8 %2336 to i1
  %2338 = xor i1 %2337, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #8
  br i1 %2338, label %2339, label %2513

2339:                                             ; preds = %2332
  %2340 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #8
  store i64 0, ptr %161, align 8, !tbaa !12
  %2341 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2340, ptr noundef nonnull align 8 dereferenceable(8) %161)
          to label %2342 unwind label %2454

2342:                                             ; preds = %2339
  %2343 = load i32, ptr %159, align 4, !tbaa !10
  %2344 = sext i32 %2343 to i64
  %2345 = getelementptr inbounds double, ptr %2341, i64 %2344
  %2346 = load double, ptr %2345, align 8, !tbaa !14
  %2347 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2348 = load double, ptr %2347, align 8, !tbaa !16
  %2349 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2350 = load double, ptr %2349, align 8, !tbaa !16
  %2351 = fmul double %2348, %2350
  %2352 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %2353 = load ptr, ptr %2352, align 8, !tbaa !23
  %2354 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #8
  %2355 = load i32, ptr %159, align 4, !tbaa !10
  %2356 = sext i32 %2355 to i64
  store i64 %2356, ptr %162, align 8, !tbaa !12
  %2357 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2354, ptr noundef nonnull align 8 dereferenceable(8) %162)
          to label %2358 unwind label %2458

2358:                                             ; preds = %2342
  %2359 = load double, ptr %2357, align 8, !tbaa !14
  %2360 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #8
  store i64 0, ptr %163, align 8, !tbaa !12
  %2361 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2360, ptr noundef nonnull align 8 dereferenceable(8) %163)
          to label %2362 unwind label %2462

2362:                                             ; preds = %2358
  %2363 = load double, ptr %2361, align 8, !tbaa !14
  %2364 = invoke noundef double %2353(double noundef %2359, double noundef %2363)
          to label %2365 unwind label %2462

2365:                                             ; preds = %2362
  %2366 = fmul double %2351, %2364
  %2367 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #8
  store i64 1, ptr %164, align 8, !tbaa !12
  %2368 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2367, ptr noundef nonnull align 8 dereferenceable(8) %164)
          to label %2369 unwind label %2466

2369:                                             ; preds = %2365
  %2370 = load i32, ptr %159, align 4, !tbaa !10
  %2371 = sext i32 %2370 to i64
  %2372 = getelementptr inbounds double, ptr %2368, i64 %2371
  %2373 = load double, ptr %2372, align 8, !tbaa !14
  %2374 = load double, ptr %29, align 8, !tbaa !14
  %2375 = fmul double 2.000000e+00, %2374
  %2376 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %2377 = load ptr, ptr %2376, align 8, !tbaa !28
  %2378 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #8
  %2379 = load i32, ptr %159, align 4, !tbaa !10
  %2380 = sext i32 %2379 to i64
  store i64 %2380, ptr %165, align 8, !tbaa !12
  %2381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2378, ptr noundef nonnull align 8 dereferenceable(8) %165)
          to label %2382 unwind label %2470

2382:                                             ; preds = %2369
  %2383 = load double, ptr %2381, align 8, !tbaa !14
  %2384 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #8
  store i64 0, ptr %166, align 8, !tbaa !12
  %2385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2384, ptr noundef nonnull align 8 dereferenceable(8) %166)
          to label %2386 unwind label %2474

2386:                                             ; preds = %2382
  %2387 = load double, ptr %2385, align 8, !tbaa !14
  %2388 = invoke noundef double %2377(double noundef %2383, double noundef %2387)
          to label %2389 unwind label %2474

2389:                                             ; preds = %2386
  %2390 = fmul double %2375, %2388
  %2391 = fneg double %2390
  %2392 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2373, double %2391)
  %2393 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #8
  store i64 0, ptr %167, align 8, !tbaa !12
  %2394 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2393, ptr noundef nonnull align 8 dereferenceable(8) %167)
          to label %2395 unwind label %2478

2395:                                             ; preds = %2389
  %2396 = load i32, ptr %159, align 4, !tbaa !10
  %2397 = sext i32 %2396 to i64
  %2398 = getelementptr inbounds double, ptr %2394, i64 %2397
  %2399 = load double, ptr %2398, align 8, !tbaa !14
  %2400 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2399, double %2392)
  %2401 = load double, ptr %29, align 8, !tbaa !14
  %2402 = load double, ptr %29, align 8, !tbaa !14
  %2403 = fmul double %2401, %2402
  %2404 = fdiv double %2400, %2403
  %2405 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #8
  store i64 0, ptr %168, align 8, !tbaa !12
  %2406 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2405, ptr noundef nonnull align 8 dereferenceable(8) %168)
          to label %2407 unwind label %2482

2407:                                             ; preds = %2395
  %2408 = load i32, ptr %159, align 4, !tbaa !10
  %2409 = add nsw i32 %2408, 1
  %2410 = sext i32 %2409 to i64
  %2411 = getelementptr inbounds double, ptr %2406, i64 %2410
  %2412 = load double, ptr %2411, align 8, !tbaa !14
  %2413 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #8
  store i64 0, ptr %169, align 8, !tbaa !12
  %2414 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2413, ptr noundef nonnull align 8 dereferenceable(8) %169)
          to label %2415 unwind label %2486

2415:                                             ; preds = %2407
  %2416 = load i32, ptr %159, align 4, !tbaa !10
  %2417 = sext i32 %2416 to i64
  %2418 = getelementptr inbounds double, ptr %2414, i64 %2417
  %2419 = load double, ptr %2418, align 8, !tbaa !14
  %2420 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2419, double %2412)
  %2421 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %170) #8
  store i64 0, ptr %170, align 8, !tbaa !12
  %2422 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2421, ptr noundef nonnull align 8 dereferenceable(8) %170)
          to label %2423 unwind label %2490

2423:                                             ; preds = %2415
  %2424 = load i32, ptr %159, align 4, !tbaa !10
  %2425 = sub nsw i32 %2424, 1
  %2426 = sext i32 %2425 to i64
  %2427 = getelementptr inbounds double, ptr %2422, i64 %2426
  %2428 = load double, ptr %2427, align 8, !tbaa !14
  %2429 = fadd double %2420, %2428
  %2430 = load double, ptr %24, align 8, !tbaa !14
  %2431 = load double, ptr %24, align 8, !tbaa !14
  %2432 = fmul double %2430, %2431
  %2433 = fdiv double %2429, %2432
  %2434 = fadd double %2404, %2433
  %2435 = fmul double %2366, %2434
  %2436 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2346, double %2435)
  %2437 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %171) #8
  store i64 0, ptr %171, align 8, !tbaa !12
  %2438 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2437, ptr noundef nonnull align 8 dereferenceable(8) %171)
          to label %2439 unwind label %2494

2439:                                             ; preds = %2423
  %2440 = load i32, ptr %159, align 4, !tbaa !10
  %2441 = sext i32 %2440 to i64
  %2442 = getelementptr inbounds double, ptr %2438, i64 %2441
  %2443 = load double, ptr %2442, align 8, !tbaa !14
  %2444 = fsub double %2436, %2443
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #8
  store i64 0, ptr %172, align 8, !tbaa !12
  %2445 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %172)
          to label %2446 unwind label %2498

2446:                                             ; preds = %2439
  %2447 = load i32, ptr %159, align 4, !tbaa !10
  %2448 = sext i32 %2447 to i64
  %2449 = getelementptr inbounds double, ptr %2445, i64 %2448
  store double %2444, ptr %2449, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #8
  br label %2513

2450:                                             ; preds = %2329
  %2451 = landingpad { ptr, i32 }
          cleanup
  %2452 = extractvalue { ptr, i32 } %2451, 0
  store ptr %2452, ptr %26, align 8
  %2453 = extractvalue { ptr, i32 } %2451, 1
  store i32 %2453, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #8
  br label %2517

2454:                                             ; preds = %2339
  %2455 = landingpad { ptr, i32 }
          cleanup
  %2456 = extractvalue { ptr, i32 } %2455, 0
  store ptr %2456, ptr %26, align 8
  %2457 = extractvalue { ptr, i32 } %2455, 1
  store i32 %2457, ptr %27, align 4
  br label %2512

2458:                                             ; preds = %2342
  %2459 = landingpad { ptr, i32 }
          cleanup
  %2460 = extractvalue { ptr, i32 } %2459, 0
  store ptr %2460, ptr %26, align 8
  %2461 = extractvalue { ptr, i32 } %2459, 1
  store i32 %2461, ptr %27, align 4
  br label %2511

2462:                                             ; preds = %2362, %2358
  %2463 = landingpad { ptr, i32 }
          cleanup
  %2464 = extractvalue { ptr, i32 } %2463, 0
  store ptr %2464, ptr %26, align 8
  %2465 = extractvalue { ptr, i32 } %2463, 1
  store i32 %2465, ptr %27, align 4
  br label %2510

2466:                                             ; preds = %2365
  %2467 = landingpad { ptr, i32 }
          cleanup
  %2468 = extractvalue { ptr, i32 } %2467, 0
  store ptr %2468, ptr %26, align 8
  %2469 = extractvalue { ptr, i32 } %2467, 1
  store i32 %2469, ptr %27, align 4
  br label %2509

2470:                                             ; preds = %2369
  %2471 = landingpad { ptr, i32 }
          cleanup
  %2472 = extractvalue { ptr, i32 } %2471, 0
  store ptr %2472, ptr %26, align 8
  %2473 = extractvalue { ptr, i32 } %2471, 1
  store i32 %2473, ptr %27, align 4
  br label %2508

2474:                                             ; preds = %2386, %2382
  %2475 = landingpad { ptr, i32 }
          cleanup
  %2476 = extractvalue { ptr, i32 } %2475, 0
  store ptr %2476, ptr %26, align 8
  %2477 = extractvalue { ptr, i32 } %2475, 1
  store i32 %2477, ptr %27, align 4
  br label %2507

2478:                                             ; preds = %2389
  %2479 = landingpad { ptr, i32 }
          cleanup
  %2480 = extractvalue { ptr, i32 } %2479, 0
  store ptr %2480, ptr %26, align 8
  %2481 = extractvalue { ptr, i32 } %2479, 1
  store i32 %2481, ptr %27, align 4
  br label %2506

2482:                                             ; preds = %2395
  %2483 = landingpad { ptr, i32 }
          cleanup
  %2484 = extractvalue { ptr, i32 } %2483, 0
  store ptr %2484, ptr %26, align 8
  %2485 = extractvalue { ptr, i32 } %2483, 1
  store i32 %2485, ptr %27, align 4
  br label %2505

2486:                                             ; preds = %2407
  %2487 = landingpad { ptr, i32 }
          cleanup
  %2488 = extractvalue { ptr, i32 } %2487, 0
  store ptr %2488, ptr %26, align 8
  %2489 = extractvalue { ptr, i32 } %2487, 1
  store i32 %2489, ptr %27, align 4
  br label %2504

2490:                                             ; preds = %2415
  %2491 = landingpad { ptr, i32 }
          cleanup
  %2492 = extractvalue { ptr, i32 } %2491, 0
  store ptr %2492, ptr %26, align 8
  %2493 = extractvalue { ptr, i32 } %2491, 1
  store i32 %2493, ptr %27, align 4
  br label %2503

2494:                                             ; preds = %2423
  %2495 = landingpad { ptr, i32 }
          cleanup
  %2496 = extractvalue { ptr, i32 } %2495, 0
  store ptr %2496, ptr %26, align 8
  %2497 = extractvalue { ptr, i32 } %2495, 1
  store i32 %2497, ptr %27, align 4
  br label %2502

2498:                                             ; preds = %2439
  %2499 = landingpad { ptr, i32 }
          cleanup
  %2500 = extractvalue { ptr, i32 } %2499, 0
  store ptr %2500, ptr %26, align 8
  %2501 = extractvalue { ptr, i32 } %2499, 1
  store i32 %2501, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #8
  br label %2502

2502:                                             ; preds = %2498, %2494
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #8
  br label %2503

2503:                                             ; preds = %2502, %2490
  call void @llvm.lifetime.end.p0(i64 8, ptr %170) #8
  br label %2504

2504:                                             ; preds = %2503, %2486
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #8
  br label %2505

2505:                                             ; preds = %2504, %2482
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #8
  br label %2506

2506:                                             ; preds = %2505, %2478
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #8
  br label %2507

2507:                                             ; preds = %2506, %2474
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #8
  br label %2508

2508:                                             ; preds = %2507, %2470
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #8
  br label %2509

2509:                                             ; preds = %2508, %2466
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #8
  br label %2510

2510:                                             ; preds = %2509, %2462
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #8
  br label %2511

2511:                                             ; preds = %2510, %2458
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #8
  br label %2512

2512:                                             ; preds = %2511, %2454
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #8
  br label %2517

2513:                                             ; preds = %2446, %2332
  br label %2514

2514:                                             ; preds = %2513
  %2515 = load i32, ptr %159, align 4, !tbaa !10
  %2516 = add nsw i32 %2515, 1
  store i32 %2516, ptr %159, align 4, !tbaa !10
  br label %2323, !llvm.loop !46

2517:                                             ; preds = %2512, %2450
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #8
  br label %4192

2518:                                             ; preds = %2328
  br label %2519

2519:                                             ; preds = %2518, %2317
  %2520 = load i8, ptr %12, align 1, !tbaa !9
  %2521 = zext i8 %2520 to i32
  %2522 = and i32 %2521, 16
  %2523 = icmp ne i32 %2522, 0
  br i1 %2523, label %2524, label %2721

2524:                                             ; preds = %2519
  call void @llvm.lifetime.start.p0(i64 4, ptr %173) #8
  store i32 1, ptr %173, align 4, !tbaa !10
  br label %2525

2525:                                             ; preds = %2716, %2524
  %2526 = load i32, ptr %173, align 4, !tbaa !10
  %2527 = load i32, ptr %19, align 4, !tbaa !10
  %2528 = sub nsw i32 %2527, 1
  %2529 = icmp slt i32 %2526, %2528
  br i1 %2529, label %2531, label %2530

2530:                                             ; preds = %2525
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #8
  br label %2720

2531:                                             ; preds = %2525
  %2532 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %174) #8
  %2533 = load i32, ptr %173, align 4, !tbaa !10
  %2534 = sext i32 %2533 to i64
  store i64 %2534, ptr %174, align 8, !tbaa !12
  %2535 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2532, ptr noundef nonnull align 8 dereferenceable(8) %174)
          to label %2536 unwind label %2652

2536:                                             ; preds = %2531
  %2537 = getelementptr inbounds i8, ptr %2535, i64 0
  %2538 = load i8, ptr %2537, align 1, !tbaa !24, !range !26, !noundef !27
  %2539 = trunc i8 %2538 to i1
  %2540 = xor i1 %2539, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #8
  br i1 %2540, label %2541, label %2715

2541:                                             ; preds = %2536
  %2542 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %175) #8
  %2543 = load i32, ptr %173, align 4, !tbaa !10
  %2544 = sext i32 %2543 to i64
  store i64 %2544, ptr %175, align 8, !tbaa !12
  %2545 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2542, ptr noundef nonnull align 8 dereferenceable(8) %175)
          to label %2546 unwind label %2656

2546:                                             ; preds = %2541
  %2547 = getelementptr inbounds double, ptr %2545, i64 0
  %2548 = load double, ptr %2547, align 8, !tbaa !14
  %2549 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2550 = load double, ptr %2549, align 8, !tbaa !16
  %2551 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2552 = load double, ptr %2551, align 8, !tbaa !16
  %2553 = fmul double %2550, %2552
  %2554 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %2555 = load ptr, ptr %2554, align 8, !tbaa !23
  %2556 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %176) #8
  store i64 0, ptr %176, align 8, !tbaa !12
  %2557 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2556, ptr noundef nonnull align 8 dereferenceable(8) %176)
          to label %2558 unwind label %2660

2558:                                             ; preds = %2546
  %2559 = load double, ptr %2557, align 8, !tbaa !14
  %2560 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %177) #8
  %2561 = load i32, ptr %173, align 4, !tbaa !10
  %2562 = sext i32 %2561 to i64
  store i64 %2562, ptr %177, align 8, !tbaa !12
  %2563 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2560, ptr noundef nonnull align 8 dereferenceable(8) %177)
          to label %2564 unwind label %2664

2564:                                             ; preds = %2558
  %2565 = load double, ptr %2563, align 8, !tbaa !14
  %2566 = invoke noundef double %2555(double noundef %2559, double noundef %2565)
          to label %2567 unwind label %2664

2567:                                             ; preds = %2564
  %2568 = fmul double %2553, %2566
  %2569 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #8
  %2570 = load i32, ptr %173, align 4, !tbaa !10
  %2571 = add nsw i32 %2570, 1
  %2572 = sext i32 %2571 to i64
  store i64 %2572, ptr %178, align 8, !tbaa !12
  %2573 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2569, ptr noundef nonnull align 8 dereferenceable(8) %178)
          to label %2574 unwind label %2668

2574:                                             ; preds = %2567
  %2575 = getelementptr inbounds double, ptr %2573, i64 0
  %2576 = load double, ptr %2575, align 8, !tbaa !14
  %2577 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %179) #8
  %2578 = load i32, ptr %173, align 4, !tbaa !10
  %2579 = sext i32 %2578 to i64
  store i64 %2579, ptr %179, align 8, !tbaa !12
  %2580 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2577, ptr noundef nonnull align 8 dereferenceable(8) %179)
          to label %2581 unwind label %2672

2581:                                             ; preds = %2574
  %2582 = getelementptr inbounds double, ptr %2580, i64 0
  %2583 = load double, ptr %2582, align 8, !tbaa !14
  %2584 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2583, double %2576)
  %2585 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #8
  %2586 = load i32, ptr %173, align 4, !tbaa !10
  %2587 = sub nsw i32 %2586, 1
  %2588 = sext i32 %2587 to i64
  store i64 %2588, ptr %180, align 8, !tbaa !12
  %2589 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2585, ptr noundef nonnull align 8 dereferenceable(8) %180)
          to label %2590 unwind label %2676

2590:                                             ; preds = %2581
  %2591 = getelementptr inbounds double, ptr %2589, i64 0
  %2592 = load double, ptr %2591, align 8, !tbaa !14
  %2593 = fadd double %2584, %2592
  %2594 = load double, ptr %29, align 8, !tbaa !14
  %2595 = load double, ptr %29, align 8, !tbaa !14
  %2596 = fmul double %2594, %2595
  %2597 = fdiv double %2593, %2596
  %2598 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %181) #8
  %2599 = load i32, ptr %173, align 4, !tbaa !10
  %2600 = sext i32 %2599 to i64
  store i64 %2600, ptr %181, align 8, !tbaa !12
  %2601 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2598, ptr noundef nonnull align 8 dereferenceable(8) %181)
          to label %2602 unwind label %2680

2602:                                             ; preds = %2590
  %2603 = getelementptr inbounds double, ptr %2601, i64 1
  %2604 = load double, ptr %2603, align 8, !tbaa !14
  %2605 = load double, ptr %24, align 8, !tbaa !14
  %2606 = fmul double 2.000000e+00, %2605
  %2607 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %2608 = load ptr, ptr %2607, align 8, !tbaa !31
  %2609 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %182) #8
  store i64 0, ptr %182, align 8, !tbaa !12
  %2610 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2609, ptr noundef nonnull align 8 dereferenceable(8) %182)
          to label %2611 unwind label %2684

2611:                                             ; preds = %2602
  %2612 = load double, ptr %2610, align 8, !tbaa !14
  %2613 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %183) #8
  %2614 = load i32, ptr %173, align 4, !tbaa !10
  %2615 = sext i32 %2614 to i64
  store i64 %2615, ptr %183, align 8, !tbaa !12
  %2616 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2613, ptr noundef nonnull align 8 dereferenceable(8) %183)
          to label %2617 unwind label %2688

2617:                                             ; preds = %2611
  %2618 = load double, ptr %2616, align 8, !tbaa !14
  %2619 = invoke noundef double %2608(double noundef %2612, double noundef %2618)
          to label %2620 unwind label %2688

2620:                                             ; preds = %2617
  %2621 = fmul double %2606, %2619
  %2622 = fneg double %2621
  %2623 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2604, double %2622)
  %2624 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %184) #8
  %2625 = load i32, ptr %173, align 4, !tbaa !10
  %2626 = sext i32 %2625 to i64
  store i64 %2626, ptr %184, align 8, !tbaa !12
  %2627 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2624, ptr noundef nonnull align 8 dereferenceable(8) %184)
          to label %2628 unwind label %2692

2628:                                             ; preds = %2620
  %2629 = getelementptr inbounds double, ptr %2627, i64 0
  %2630 = load double, ptr %2629, align 8, !tbaa !14
  %2631 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2630, double %2623)
  %2632 = load double, ptr %24, align 8, !tbaa !14
  %2633 = load double, ptr %24, align 8, !tbaa !14
  %2634 = fmul double %2632, %2633
  %2635 = fdiv double %2631, %2634
  %2636 = fadd double %2597, %2635
  %2637 = fmul double %2568, %2636
  %2638 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2548, double %2637)
  %2639 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %185) #8
  %2640 = load i32, ptr %173, align 4, !tbaa !10
  %2641 = sext i32 %2640 to i64
  store i64 %2641, ptr %185, align 8, !tbaa !12
  %2642 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2639, ptr noundef nonnull align 8 dereferenceable(8) %185)
          to label %2643 unwind label %2696

2643:                                             ; preds = %2628
  %2644 = getelementptr inbounds double, ptr %2642, i64 0
  %2645 = load double, ptr %2644, align 8, !tbaa !14
  %2646 = fsub double %2638, %2645
  call void @llvm.lifetime.start.p0(i64 8, ptr %186) #8
  %2647 = load i32, ptr %173, align 4, !tbaa !10
  %2648 = sext i32 %2647 to i64
  store i64 %2648, ptr %186, align 8, !tbaa !12
  %2649 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %186)
          to label %2650 unwind label %2700

2650:                                             ; preds = %2643
  %2651 = getelementptr inbounds double, ptr %2649, i64 0
  store double %2646, ptr %2651, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %186) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #8
  br label %2715

2652:                                             ; preds = %2531
  %2653 = landingpad { ptr, i32 }
          cleanup
  %2654 = extractvalue { ptr, i32 } %2653, 0
  store ptr %2654, ptr %26, align 8
  %2655 = extractvalue { ptr, i32 } %2653, 1
  store i32 %2655, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %174) #8
  br label %2719

2656:                                             ; preds = %2541
  %2657 = landingpad { ptr, i32 }
          cleanup
  %2658 = extractvalue { ptr, i32 } %2657, 0
  store ptr %2658, ptr %26, align 8
  %2659 = extractvalue { ptr, i32 } %2657, 1
  store i32 %2659, ptr %27, align 4
  br label %2714

2660:                                             ; preds = %2546
  %2661 = landingpad { ptr, i32 }
          cleanup
  %2662 = extractvalue { ptr, i32 } %2661, 0
  store ptr %2662, ptr %26, align 8
  %2663 = extractvalue { ptr, i32 } %2661, 1
  store i32 %2663, ptr %27, align 4
  br label %2713

2664:                                             ; preds = %2564, %2558
  %2665 = landingpad { ptr, i32 }
          cleanup
  %2666 = extractvalue { ptr, i32 } %2665, 0
  store ptr %2666, ptr %26, align 8
  %2667 = extractvalue { ptr, i32 } %2665, 1
  store i32 %2667, ptr %27, align 4
  br label %2712

2668:                                             ; preds = %2567
  %2669 = landingpad { ptr, i32 }
          cleanup
  %2670 = extractvalue { ptr, i32 } %2669, 0
  store ptr %2670, ptr %26, align 8
  %2671 = extractvalue { ptr, i32 } %2669, 1
  store i32 %2671, ptr %27, align 4
  br label %2711

2672:                                             ; preds = %2574
  %2673 = landingpad { ptr, i32 }
          cleanup
  %2674 = extractvalue { ptr, i32 } %2673, 0
  store ptr %2674, ptr %26, align 8
  %2675 = extractvalue { ptr, i32 } %2673, 1
  store i32 %2675, ptr %27, align 4
  br label %2710

2676:                                             ; preds = %2581
  %2677 = landingpad { ptr, i32 }
          cleanup
  %2678 = extractvalue { ptr, i32 } %2677, 0
  store ptr %2678, ptr %26, align 8
  %2679 = extractvalue { ptr, i32 } %2677, 1
  store i32 %2679, ptr %27, align 4
  br label %2709

2680:                                             ; preds = %2590
  %2681 = landingpad { ptr, i32 }
          cleanup
  %2682 = extractvalue { ptr, i32 } %2681, 0
  store ptr %2682, ptr %26, align 8
  %2683 = extractvalue { ptr, i32 } %2681, 1
  store i32 %2683, ptr %27, align 4
  br label %2708

2684:                                             ; preds = %2602
  %2685 = landingpad { ptr, i32 }
          cleanup
  %2686 = extractvalue { ptr, i32 } %2685, 0
  store ptr %2686, ptr %26, align 8
  %2687 = extractvalue { ptr, i32 } %2685, 1
  store i32 %2687, ptr %27, align 4
  br label %2707

2688:                                             ; preds = %2617, %2611
  %2689 = landingpad { ptr, i32 }
          cleanup
  %2690 = extractvalue { ptr, i32 } %2689, 0
  store ptr %2690, ptr %26, align 8
  %2691 = extractvalue { ptr, i32 } %2689, 1
  store i32 %2691, ptr %27, align 4
  br label %2706

2692:                                             ; preds = %2620
  %2693 = landingpad { ptr, i32 }
          cleanup
  %2694 = extractvalue { ptr, i32 } %2693, 0
  store ptr %2694, ptr %26, align 8
  %2695 = extractvalue { ptr, i32 } %2693, 1
  store i32 %2695, ptr %27, align 4
  br label %2705

2696:                                             ; preds = %2628
  %2697 = landingpad { ptr, i32 }
          cleanup
  %2698 = extractvalue { ptr, i32 } %2697, 0
  store ptr %2698, ptr %26, align 8
  %2699 = extractvalue { ptr, i32 } %2697, 1
  store i32 %2699, ptr %27, align 4
  br label %2704

2700:                                             ; preds = %2643
  %2701 = landingpad { ptr, i32 }
          cleanup
  %2702 = extractvalue { ptr, i32 } %2701, 0
  store ptr %2702, ptr %26, align 8
  %2703 = extractvalue { ptr, i32 } %2701, 1
  store i32 %2703, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %186) #8
  br label %2704

2704:                                             ; preds = %2700, %2696
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #8
  br label %2705

2705:                                             ; preds = %2704, %2692
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #8
  br label %2706

2706:                                             ; preds = %2705, %2688
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #8
  br label %2707

2707:                                             ; preds = %2706, %2684
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #8
  br label %2708

2708:                                             ; preds = %2707, %2680
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #8
  br label %2709

2709:                                             ; preds = %2708, %2676
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #8
  br label %2710

2710:                                             ; preds = %2709, %2672
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #8
  br label %2711

2711:                                             ; preds = %2710, %2668
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #8
  br label %2712

2712:                                             ; preds = %2711, %2664
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #8
  br label %2713

2713:                                             ; preds = %2712, %2660
  call void @llvm.lifetime.end.p0(i64 8, ptr %176) #8
  br label %2714

2714:                                             ; preds = %2713, %2656
  call void @llvm.lifetime.end.p0(i64 8, ptr %175) #8
  br label %2719

2715:                                             ; preds = %2650, %2536
  br label %2716

2716:                                             ; preds = %2715
  %2717 = load i32, ptr %173, align 4, !tbaa !10
  %2718 = add nsw i32 %2717, 1
  store i32 %2718, ptr %173, align 4, !tbaa !10
  br label %2525, !llvm.loop !47

2719:                                             ; preds = %2714, %2652
  call void @llvm.lifetime.end.p0(i64 4, ptr %173) #8
  br label %4192

2720:                                             ; preds = %2530
  br label %2721

2721:                                             ; preds = %2720, %2519
  call void @llvm.lifetime.start.p0(i64 8, ptr %187) #8
  %2722 = call noundef i32 @_ZNSt6thread20hardware_concurrencyEv() #8
  %2723 = zext i32 %2722 to i64
  store i64 %2723, ptr %187, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 24, ptr %188) #8
  call void @_ZNSt7__cxx114listISt6threadSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %188) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %189) #8
  store i32 1, ptr %189, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %190) #8
  %2724 = load i32, ptr %19, align 4, !tbaa !10
  %2725 = sub nsw i32 %2724, 1
  %2726 = sext i32 %2725 to i64
  %2727 = load i64, ptr %187, align 8, !tbaa !12
  %2728 = udiv i64 %2726, %2727
  %2729 = trunc i64 %2728 to i32
  store i32 %2729, ptr %190, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %191) #8
  %2730 = load i32, ptr %190, align 4, !tbaa !10
  store i32 %2730, ptr %191, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %192) #8
  store i32 0, ptr %192, align 4, !tbaa !10
  br label %2731

2731:                                             ; preds = %2780, %2721
  %2732 = load i32, ptr %192, align 4, !tbaa !10
  %2733 = sext i32 %2732 to i64
  %2734 = load i64, ptr %187, align 8, !tbaa !12
  %2735 = icmp ult i64 %2733, %2734
  br i1 %2735, label %2737, label %2736

2736:                                             ; preds = %2731
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #8
  br label %2787

2737:                                             ; preds = %2731
  %2738 = load i32, ptr %192, align 4, !tbaa !10
  %2739 = sext i32 %2738 to i64
  %2740 = load i64, ptr %187, align 8, !tbaa !12
  %2741 = sub i64 %2740, 1
  %2742 = icmp eq i64 %2739, %2741
  br i1 %2742, label %2743, label %2753

2743:                                             ; preds = %2737
  %2744 = load i32, ptr %19, align 4, !tbaa !10
  %2745 = sub nsw i32 %2744, 1
  %2746 = sext i32 %2745 to i64
  %2747 = load i64, ptr %187, align 8, !tbaa !12
  %2748 = urem i64 %2746, %2747
  %2749 = load i32, ptr %191, align 4, !tbaa !10
  %2750 = sext i32 %2749 to i64
  %2751 = add i64 %2750, %2748
  %2752 = trunc i64 %2751 to i32
  store i32 %2752, ptr %191, align 4, !tbaa !10
  br label %2753

2753:                                             ; preds = %2743, %2737
  call void @llvm.lifetime.start.p0(i64 96, ptr %193) #8
  %2754 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 0
  %2755 = load i32, ptr %189, align 4, !tbaa !10
  store i32 %2755, ptr %2754, align 8, !tbaa !48
  %2756 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 1
  %2757 = load i32, ptr %191, align 4, !tbaa !10
  store i32 %2757, ptr %2756, align 4, !tbaa !50
  %2758 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 2
  store ptr %287, ptr %2758, align 8, !tbaa !51
  %2759 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 3
  store ptr %19, ptr %2759, align 8, !tbaa !5
  %2760 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 4
  store ptr %20, ptr %2760, align 8, !tbaa !5
  %2761 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 5
  %2762 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %2762, ptr %2761, align 8, !tbaa !5
  %2763 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 6
  store ptr %0, ptr %2763, align 8, !tbaa !5
  %2764 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 7
  %2765 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %2765, ptr %2764, align 8, !tbaa !5
  %2766 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 8
  %2767 = load ptr, ptr %17, align 8, !tbaa !5
  store ptr %2767, ptr %2766, align 8, !tbaa !5
  %2768 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 9
  %2769 = load ptr, ptr %14, align 8, !tbaa !5
  store ptr %2769, ptr %2768, align 8, !tbaa !5
  %2770 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 10
  %2771 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %2771, ptr %2770, align 8, !tbaa !5
  %2772 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 11
  store ptr %24, ptr %2772, align 8, !tbaa !5
  %2773 = getelementptr inbounds %class.anon.4, ptr %193, i32 0, i32 12
  store ptr %29, ptr %2773, align 8, !tbaa !5
  %2774 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_1EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %188, ptr noundef nonnull align 8 dereferenceable(96) %193)
          to label %2775 unwind label %2783

2775:                                             ; preds = %2753
  call void @llvm.lifetime.end.p0(i64 96, ptr %193) #8
  %2776 = load i32, ptr %191, align 4, !tbaa !10
  store i32 %2776, ptr %189, align 4, !tbaa !10
  %2777 = load i32, ptr %189, align 4, !tbaa !10
  %2778 = load i32, ptr %190, align 4, !tbaa !10
  %2779 = add nsw i32 %2777, %2778
  store i32 %2779, ptr %191, align 4, !tbaa !10
  br label %2780

2780:                                             ; preds = %2775
  %2781 = load i32, ptr %192, align 4, !tbaa !10
  %2782 = add nsw i32 %2781, 1
  store i32 %2782, ptr %192, align 4, !tbaa !10
  br label %2731, !llvm.loop !52

2783:                                             ; preds = %2753
  %2784 = landingpad { ptr, i32 }
          cleanup
  %2785 = extractvalue { ptr, i32 } %2784, 0
  store ptr %2785, ptr %26, align 8
  %2786 = extractvalue { ptr, i32 } %2784, 1
  store i32 %2786, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 96, ptr %193) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #8
  br label %4140

2787:                                             ; preds = %2736
  call void @llvm.lifetime.start.p0(i64 8, ptr %194) #8
  store ptr %188, ptr %194, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %195) #8
  %2788 = load ptr, ptr %194, align 8, !tbaa !5
  %2789 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2788) #8
  %2790 = getelementptr inbounds %"struct.std::_List_iterator", ptr %195, i32 0, i32 0
  store ptr %2789, ptr %2790, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %196) #8
  %2791 = load ptr, ptr %194, align 8, !tbaa !5
  %2792 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2791) #8
  %2793 = getelementptr inbounds %"struct.std::_List_iterator", ptr %196, i32 0, i32 0
  store ptr %2792, ptr %2793, align 8
  br label %2794

2794:                                             ; preds = %2801, %2787
  %2795 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %195, ptr noundef nonnull align 8 dereferenceable(8) %196) #8
  br i1 %2795, label %2797, label %2796

2796:                                             ; preds = %2794
  call void @llvm.lifetime.end.p0(i64 8, ptr %196) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %194) #8
  br label %2807

2797:                                             ; preds = %2794
  call void @llvm.lifetime.start.p0(i64 8, ptr %197) #8
  %2798 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt14_List_iteratorISt6threadEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %195) #8
  store ptr %2798, ptr %197, align 8, !tbaa !5
  %2799 = load ptr, ptr %197, align 8, !tbaa !5
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %2799)
          to label %2800 unwind label %2803

2800:                                             ; preds = %2797
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  br label %2801

2801:                                             ; preds = %2800
  %2802 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt6threadEppEv(ptr noundef nonnull align 8 dereferenceable(8) %195) #8
  br label %2794

2803:                                             ; preds = %2797
  %2804 = landingpad { ptr, i32 }
          cleanup
  %2805 = extractvalue { ptr, i32 } %2804, 0
  store ptr %2805, ptr %26, align 8
  %2806 = extractvalue { ptr, i32 } %2804, 1
  store i32 %2806, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %196) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %194) #8
  br label %4140

2807:                                             ; preds = %2796
  %2808 = load i8, ptr %12, align 1, !tbaa !9
  %2809 = zext i8 %2808 to i32
  %2810 = and i32 %2809, 32
  %2811 = icmp ne i32 %2810, 0
  br i1 %2811, label %2812, label %3041

2812:                                             ; preds = %2807
  call void @llvm.lifetime.start.p0(i64 4, ptr %198) #8
  store i32 1, ptr %198, align 4, !tbaa !10
  br label %2813

2813:                                             ; preds = %3036, %2812
  %2814 = load i32, ptr %198, align 4, !tbaa !10
  %2815 = load i32, ptr %19, align 4, !tbaa !10
  %2816 = sub nsw i32 %2815, 1
  %2817 = icmp slt i32 %2814, %2816
  br i1 %2817, label %2819, label %2818

2818:                                             ; preds = %2813
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #8
  br label %3040

2819:                                             ; preds = %2813
  %2820 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %199) #8
  %2821 = load i32, ptr %198, align 4, !tbaa !10
  %2822 = sext i32 %2821 to i64
  store i64 %2822, ptr %199, align 8, !tbaa !12
  %2823 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2820, ptr noundef nonnull align 8 dereferenceable(8) %199)
          to label %2824 unwind label %2972

2824:                                             ; preds = %2819
  %2825 = load i32, ptr %20, align 4, !tbaa !10
  %2826 = sub nsw i32 %2825, 1
  %2827 = sext i32 %2826 to i64
  %2828 = getelementptr inbounds i8, ptr %2823, i64 %2827
  %2829 = load i8, ptr %2828, align 1, !tbaa !24, !range !26, !noundef !27
  %2830 = trunc i8 %2829 to i1
  %2831 = xor i1 %2830, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #8
  br i1 %2831, label %2832, label %3035

2832:                                             ; preds = %2824
  %2833 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %200) #8
  %2834 = load i32, ptr %198, align 4, !tbaa !10
  %2835 = sext i32 %2834 to i64
  store i64 %2835, ptr %200, align 8, !tbaa !12
  %2836 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2833, ptr noundef nonnull align 8 dereferenceable(8) %200)
          to label %2837 unwind label %2976

2837:                                             ; preds = %2832
  %2838 = load i32, ptr %20, align 4, !tbaa !10
  %2839 = sub nsw i32 %2838, 1
  %2840 = sext i32 %2839 to i64
  %2841 = getelementptr inbounds double, ptr %2836, i64 %2840
  %2842 = load double, ptr %2841, align 8, !tbaa !14
  %2843 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2844 = load double, ptr %2843, align 8, !tbaa !16
  %2845 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %2846 = load double, ptr %2845, align 8, !tbaa !16
  %2847 = fmul double %2844, %2846
  %2848 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %2849 = load ptr, ptr %2848, align 8, !tbaa !23
  %2850 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %201) #8
  %2851 = load i32, ptr %20, align 4, !tbaa !10
  %2852 = sub nsw i32 %2851, 1
  %2853 = sext i32 %2852 to i64
  store i64 %2853, ptr %201, align 8, !tbaa !12
  %2854 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2850, ptr noundef nonnull align 8 dereferenceable(8) %201)
          to label %2855 unwind label %2980

2855:                                             ; preds = %2837
  %2856 = load double, ptr %2854, align 8, !tbaa !14
  %2857 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %202) #8
  %2858 = load i32, ptr %198, align 4, !tbaa !10
  %2859 = sext i32 %2858 to i64
  store i64 %2859, ptr %202, align 8, !tbaa !12
  %2860 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2857, ptr noundef nonnull align 8 dereferenceable(8) %202)
          to label %2861 unwind label %2984

2861:                                             ; preds = %2855
  %2862 = load double, ptr %2860, align 8, !tbaa !14
  %2863 = invoke noundef double %2849(double noundef %2856, double noundef %2862)
          to label %2864 unwind label %2984

2864:                                             ; preds = %2861
  %2865 = fmul double %2847, %2863
  %2866 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %203) #8
  %2867 = load i32, ptr %198, align 4, !tbaa !10
  %2868 = add nsw i32 %2867, 1
  %2869 = sext i32 %2868 to i64
  store i64 %2869, ptr %203, align 8, !tbaa !12
  %2870 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2866, ptr noundef nonnull align 8 dereferenceable(8) %203)
          to label %2871 unwind label %2988

2871:                                             ; preds = %2864
  %2872 = load i32, ptr %20, align 4, !tbaa !10
  %2873 = sub nsw i32 %2872, 1
  %2874 = sext i32 %2873 to i64
  %2875 = getelementptr inbounds double, ptr %2870, i64 %2874
  %2876 = load double, ptr %2875, align 8, !tbaa !14
  %2877 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %204) #8
  %2878 = load i32, ptr %198, align 4, !tbaa !10
  %2879 = sext i32 %2878 to i64
  store i64 %2879, ptr %204, align 8, !tbaa !12
  %2880 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2877, ptr noundef nonnull align 8 dereferenceable(8) %204)
          to label %2881 unwind label %2992

2881:                                             ; preds = %2871
  %2882 = load i32, ptr %20, align 4, !tbaa !10
  %2883 = sub nsw i32 %2882, 1
  %2884 = sext i32 %2883 to i64
  %2885 = getelementptr inbounds double, ptr %2880, i64 %2884
  %2886 = load double, ptr %2885, align 8, !tbaa !14
  %2887 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2886, double %2876)
  %2888 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %205) #8
  %2889 = load i32, ptr %198, align 4, !tbaa !10
  %2890 = sub nsw i32 %2889, 1
  %2891 = sext i32 %2890 to i64
  store i64 %2891, ptr %205, align 8, !tbaa !12
  %2892 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2888, ptr noundef nonnull align 8 dereferenceable(8) %205)
          to label %2893 unwind label %2996

2893:                                             ; preds = %2881
  %2894 = load i32, ptr %20, align 4, !tbaa !10
  %2895 = sub nsw i32 %2894, 1
  %2896 = sext i32 %2895 to i64
  %2897 = getelementptr inbounds double, ptr %2892, i64 %2896
  %2898 = load double, ptr %2897, align 8, !tbaa !14
  %2899 = fadd double %2887, %2898
  %2900 = load double, ptr %29, align 8, !tbaa !14
  %2901 = load double, ptr %29, align 8, !tbaa !14
  %2902 = fmul double %2900, %2901
  %2903 = fdiv double %2899, %2902
  %2904 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #8
  %2905 = load i32, ptr %198, align 4, !tbaa !10
  %2906 = sext i32 %2905 to i64
  store i64 %2906, ptr %206, align 8, !tbaa !12
  %2907 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2904, ptr noundef nonnull align 8 dereferenceable(8) %206)
          to label %2908 unwind label %3000

2908:                                             ; preds = %2893
  %2909 = load i32, ptr %20, align 4, !tbaa !10
  %2910 = sub nsw i32 %2909, 2
  %2911 = sext i32 %2910 to i64
  %2912 = getelementptr inbounds double, ptr %2907, i64 %2911
  %2913 = load double, ptr %2912, align 8, !tbaa !14
  %2914 = load double, ptr %24, align 8, !tbaa !14
  %2915 = fmul double 2.000000e+00, %2914
  %2916 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %2917 = load ptr, ptr %2916, align 8, !tbaa !42
  %2918 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %207) #8
  %2919 = load i32, ptr %20, align 4, !tbaa !10
  %2920 = sub nsw i32 %2919, 1
  %2921 = sext i32 %2920 to i64
  store i64 %2921, ptr %207, align 8, !tbaa !12
  %2922 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2918, ptr noundef nonnull align 8 dereferenceable(8) %207)
          to label %2923 unwind label %3004

2923:                                             ; preds = %2908
  %2924 = load double, ptr %2922, align 8, !tbaa !14
  %2925 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %208) #8
  %2926 = load i32, ptr %198, align 4, !tbaa !10
  %2927 = sext i32 %2926 to i64
  store i64 %2927, ptr %208, align 8, !tbaa !12
  %2928 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %2925, ptr noundef nonnull align 8 dereferenceable(8) %208)
          to label %2929 unwind label %3008

2929:                                             ; preds = %2923
  %2930 = load double, ptr %2928, align 8, !tbaa !14
  %2931 = invoke noundef double %2917(double noundef %2924, double noundef %2930)
          to label %2932 unwind label %3008

2932:                                             ; preds = %2929
  %2933 = fmul double %2915, %2931
  %2934 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2913, double %2933)
  %2935 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %209) #8
  %2936 = load i32, ptr %198, align 4, !tbaa !10
  %2937 = sext i32 %2936 to i64
  store i64 %2937, ptr %209, align 8, !tbaa !12
  %2938 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2935, ptr noundef nonnull align 8 dereferenceable(8) %209)
          to label %2939 unwind label %3012

2939:                                             ; preds = %2932
  %2940 = load i32, ptr %20, align 4, !tbaa !10
  %2941 = sub nsw i32 %2940, 1
  %2942 = sext i32 %2941 to i64
  %2943 = getelementptr inbounds double, ptr %2938, i64 %2942
  %2944 = load double, ptr %2943, align 8, !tbaa !14
  %2945 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %2944, double %2934)
  %2946 = load double, ptr %24, align 8, !tbaa !14
  %2947 = load double, ptr %24, align 8, !tbaa !14
  %2948 = fmul double %2946, %2947
  %2949 = fdiv double %2945, %2948
  %2950 = fadd double %2903, %2949
  %2951 = fmul double %2865, %2950
  %2952 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %2842, double %2951)
  %2953 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %210) #8
  %2954 = load i32, ptr %198, align 4, !tbaa !10
  %2955 = sext i32 %2954 to i64
  store i64 %2955, ptr %210, align 8, !tbaa !12
  %2956 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2953, ptr noundef nonnull align 8 dereferenceable(8) %210)
          to label %2957 unwind label %3016

2957:                                             ; preds = %2939
  %2958 = load i32, ptr %20, align 4, !tbaa !10
  %2959 = sub nsw i32 %2958, 1
  %2960 = sext i32 %2959 to i64
  %2961 = getelementptr inbounds double, ptr %2956, i64 %2960
  %2962 = load double, ptr %2961, align 8, !tbaa !14
  %2963 = fsub double %2952, %2962
  call void @llvm.lifetime.start.p0(i64 8, ptr %211) #8
  %2964 = load i32, ptr %198, align 4, !tbaa !10
  %2965 = sext i32 %2964 to i64
  store i64 %2965, ptr %211, align 8, !tbaa !12
  %2966 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %211)
          to label %2967 unwind label %3020

2967:                                             ; preds = %2957
  %2968 = load i32, ptr %20, align 4, !tbaa !10
  %2969 = sub nsw i32 %2968, 1
  %2970 = sext i32 %2969 to i64
  %2971 = getelementptr inbounds double, ptr %2966, i64 %2970
  store double %2963, ptr %2971, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %211) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %209) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %205) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %203) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #8
  br label %3035

2972:                                             ; preds = %2819
  %2973 = landingpad { ptr, i32 }
          cleanup
  %2974 = extractvalue { ptr, i32 } %2973, 0
  store ptr %2974, ptr %26, align 8
  %2975 = extractvalue { ptr, i32 } %2973, 1
  store i32 %2975, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #8
  br label %3039

2976:                                             ; preds = %2832
  %2977 = landingpad { ptr, i32 }
          cleanup
  %2978 = extractvalue { ptr, i32 } %2977, 0
  store ptr %2978, ptr %26, align 8
  %2979 = extractvalue { ptr, i32 } %2977, 1
  store i32 %2979, ptr %27, align 4
  br label %3034

2980:                                             ; preds = %2837
  %2981 = landingpad { ptr, i32 }
          cleanup
  %2982 = extractvalue { ptr, i32 } %2981, 0
  store ptr %2982, ptr %26, align 8
  %2983 = extractvalue { ptr, i32 } %2981, 1
  store i32 %2983, ptr %27, align 4
  br label %3033

2984:                                             ; preds = %2861, %2855
  %2985 = landingpad { ptr, i32 }
          cleanup
  %2986 = extractvalue { ptr, i32 } %2985, 0
  store ptr %2986, ptr %26, align 8
  %2987 = extractvalue { ptr, i32 } %2985, 1
  store i32 %2987, ptr %27, align 4
  br label %3032

2988:                                             ; preds = %2864
  %2989 = landingpad { ptr, i32 }
          cleanup
  %2990 = extractvalue { ptr, i32 } %2989, 0
  store ptr %2990, ptr %26, align 8
  %2991 = extractvalue { ptr, i32 } %2989, 1
  store i32 %2991, ptr %27, align 4
  br label %3031

2992:                                             ; preds = %2871
  %2993 = landingpad { ptr, i32 }
          cleanup
  %2994 = extractvalue { ptr, i32 } %2993, 0
  store ptr %2994, ptr %26, align 8
  %2995 = extractvalue { ptr, i32 } %2993, 1
  store i32 %2995, ptr %27, align 4
  br label %3030

2996:                                             ; preds = %2881
  %2997 = landingpad { ptr, i32 }
          cleanup
  %2998 = extractvalue { ptr, i32 } %2997, 0
  store ptr %2998, ptr %26, align 8
  %2999 = extractvalue { ptr, i32 } %2997, 1
  store i32 %2999, ptr %27, align 4
  br label %3029

3000:                                             ; preds = %2893
  %3001 = landingpad { ptr, i32 }
          cleanup
  %3002 = extractvalue { ptr, i32 } %3001, 0
  store ptr %3002, ptr %26, align 8
  %3003 = extractvalue { ptr, i32 } %3001, 1
  store i32 %3003, ptr %27, align 4
  br label %3028

3004:                                             ; preds = %2908
  %3005 = landingpad { ptr, i32 }
          cleanup
  %3006 = extractvalue { ptr, i32 } %3005, 0
  store ptr %3006, ptr %26, align 8
  %3007 = extractvalue { ptr, i32 } %3005, 1
  store i32 %3007, ptr %27, align 4
  br label %3027

3008:                                             ; preds = %2929, %2923
  %3009 = landingpad { ptr, i32 }
          cleanup
  %3010 = extractvalue { ptr, i32 } %3009, 0
  store ptr %3010, ptr %26, align 8
  %3011 = extractvalue { ptr, i32 } %3009, 1
  store i32 %3011, ptr %27, align 4
  br label %3026

3012:                                             ; preds = %2932
  %3013 = landingpad { ptr, i32 }
          cleanup
  %3014 = extractvalue { ptr, i32 } %3013, 0
  store ptr %3014, ptr %26, align 8
  %3015 = extractvalue { ptr, i32 } %3013, 1
  store i32 %3015, ptr %27, align 4
  br label %3025

3016:                                             ; preds = %2939
  %3017 = landingpad { ptr, i32 }
          cleanup
  %3018 = extractvalue { ptr, i32 } %3017, 0
  store ptr %3018, ptr %26, align 8
  %3019 = extractvalue { ptr, i32 } %3017, 1
  store i32 %3019, ptr %27, align 4
  br label %3024

3020:                                             ; preds = %2957
  %3021 = landingpad { ptr, i32 }
          cleanup
  %3022 = extractvalue { ptr, i32 } %3021, 0
  store ptr %3022, ptr %26, align 8
  %3023 = extractvalue { ptr, i32 } %3021, 1
  store i32 %3023, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %211) #8
  br label %3024

3024:                                             ; preds = %3020, %3016
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #8
  br label %3025

3025:                                             ; preds = %3024, %3012
  call void @llvm.lifetime.end.p0(i64 8, ptr %209) #8
  br label %3026

3026:                                             ; preds = %3025, %3008
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #8
  br label %3027

3027:                                             ; preds = %3026, %3004
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #8
  br label %3028

3028:                                             ; preds = %3027, %3000
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #8
  br label %3029

3029:                                             ; preds = %3028, %2996
  call void @llvm.lifetime.end.p0(i64 8, ptr %205) #8
  br label %3030

3030:                                             ; preds = %3029, %2992
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #8
  br label %3031

3031:                                             ; preds = %3030, %2988
  call void @llvm.lifetime.end.p0(i64 8, ptr %203) #8
  br label %3032

3032:                                             ; preds = %3031, %2984
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #8
  br label %3033

3033:                                             ; preds = %3032, %2980
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #8
  br label %3034

3034:                                             ; preds = %3033, %2976
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #8
  br label %3039

3035:                                             ; preds = %2967, %2824
  br label %3036

3036:                                             ; preds = %3035
  %3037 = load i32, ptr %198, align 4, !tbaa !10
  %3038 = add nsw i32 %3037, 1
  store i32 %3038, ptr %198, align 4, !tbaa !10
  br label %2813, !llvm.loop !53

3039:                                             ; preds = %3034, %2972
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #8
  br label %4140

3040:                                             ; preds = %2818
  br label %3041

3041:                                             ; preds = %3040, %2807
  %3042 = load i8, ptr %12, align 1, !tbaa !9
  %3043 = zext i8 %3042 to i32
  %3044 = and i32 %3043, 128
  %3045 = icmp ne i32 %3044, 0
  br i1 %3045, label %3046, label %3275

3046:                                             ; preds = %3041
  call void @llvm.lifetime.start.p0(i64 4, ptr %212) #8
  store i32 1, ptr %212, align 4, !tbaa !10
  br label %3047

3047:                                             ; preds = %3270, %3046
  %3048 = load i32, ptr %212, align 4, !tbaa !10
  %3049 = load i32, ptr %20, align 4, !tbaa !10
  %3050 = sub nsw i32 %3049, 1
  %3051 = icmp slt i32 %3048, %3050
  br i1 %3051, label %3053, label %3052

3052:                                             ; preds = %3047
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #8
  br label %3274

3053:                                             ; preds = %3047
  %3054 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %213) #8
  %3055 = load i32, ptr %19, align 4, !tbaa !10
  %3056 = sub nsw i32 %3055, 1
  %3057 = sext i32 %3056 to i64
  store i64 %3057, ptr %213, align 8, !tbaa !12
  %3058 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3054, ptr noundef nonnull align 8 dereferenceable(8) %213)
          to label %3059 unwind label %3206

3059:                                             ; preds = %3053
  %3060 = load i32, ptr %212, align 4, !tbaa !10
  %3061 = sext i32 %3060 to i64
  %3062 = getelementptr inbounds i8, ptr %3058, i64 %3061
  %3063 = load i8, ptr %3062, align 1, !tbaa !24, !range !26, !noundef !27
  %3064 = trunc i8 %3063 to i1
  %3065 = xor i1 %3064, true
  call void @llvm.lifetime.end.p0(i64 8, ptr %213) #8
  br i1 %3065, label %3066, label %3269

3066:                                             ; preds = %3059
  %3067 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %214) #8
  %3068 = load i32, ptr %19, align 4, !tbaa !10
  %3069 = sub nsw i32 %3068, 1
  %3070 = sext i32 %3069 to i64
  store i64 %3070, ptr %214, align 8, !tbaa !12
  %3071 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3067, ptr noundef nonnull align 8 dereferenceable(8) %214)
          to label %3072 unwind label %3210

3072:                                             ; preds = %3066
  %3073 = load i32, ptr %212, align 4, !tbaa !10
  %3074 = sext i32 %3073 to i64
  %3075 = getelementptr inbounds double, ptr %3071, i64 %3074
  %3076 = load double, ptr %3075, align 8, !tbaa !14
  %3077 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3078 = load double, ptr %3077, align 8, !tbaa !16
  %3079 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3080 = load double, ptr %3079, align 8, !tbaa !16
  %3081 = fmul double %3078, %3080
  %3082 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %3083 = load ptr, ptr %3082, align 8, !tbaa !23
  %3084 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %215) #8
  %3085 = load i32, ptr %212, align 4, !tbaa !10
  %3086 = sext i32 %3085 to i64
  store i64 %3086, ptr %215, align 8, !tbaa !12
  %3087 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3084, ptr noundef nonnull align 8 dereferenceable(8) %215)
          to label %3088 unwind label %3214

3088:                                             ; preds = %3072
  %3089 = load double, ptr %3087, align 8, !tbaa !14
  %3090 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %216) #8
  %3091 = load i32, ptr %19, align 4, !tbaa !10
  %3092 = sub nsw i32 %3091, 1
  %3093 = sext i32 %3092 to i64
  store i64 %3093, ptr %216, align 8, !tbaa !12
  %3094 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3090, ptr noundef nonnull align 8 dereferenceable(8) %216)
          to label %3095 unwind label %3218

3095:                                             ; preds = %3088
  %3096 = load double, ptr %3094, align 8, !tbaa !14
  %3097 = invoke noundef double %3083(double noundef %3089, double noundef %3096)
          to label %3098 unwind label %3218

3098:                                             ; preds = %3095
  %3099 = fmul double %3081, %3097
  %3100 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %217) #8
  %3101 = load i32, ptr %19, align 4, !tbaa !10
  %3102 = sub nsw i32 %3101, 2
  %3103 = sext i32 %3102 to i64
  store i64 %3103, ptr %217, align 8, !tbaa !12
  %3104 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3100, ptr noundef nonnull align 8 dereferenceable(8) %217)
          to label %3105 unwind label %3222

3105:                                             ; preds = %3098
  %3106 = load i32, ptr %212, align 4, !tbaa !10
  %3107 = sext i32 %3106 to i64
  %3108 = getelementptr inbounds double, ptr %3104, i64 %3107
  %3109 = load double, ptr %3108, align 8, !tbaa !14
  %3110 = load double, ptr %29, align 8, !tbaa !14
  %3111 = fmul double 2.000000e+00, %3110
  %3112 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %3113 = load ptr, ptr %3112, align 8, !tbaa !44
  %3114 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %218) #8
  %3115 = load i32, ptr %212, align 4, !tbaa !10
  %3116 = sext i32 %3115 to i64
  store i64 %3116, ptr %218, align 8, !tbaa !12
  %3117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3114, ptr noundef nonnull align 8 dereferenceable(8) %218)
          to label %3118 unwind label %3226

3118:                                             ; preds = %3105
  %3119 = load double, ptr %3117, align 8, !tbaa !14
  %3120 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %219) #8
  %3121 = load i32, ptr %19, align 4, !tbaa !10
  %3122 = sub nsw i32 %3121, 1
  %3123 = sext i32 %3122 to i64
  store i64 %3123, ptr %219, align 8, !tbaa !12
  %3124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3120, ptr noundef nonnull align 8 dereferenceable(8) %219)
          to label %3125 unwind label %3230

3125:                                             ; preds = %3118
  %3126 = load double, ptr %3124, align 8, !tbaa !14
  %3127 = invoke noundef double %3113(double noundef %3119, double noundef %3126)
          to label %3128 unwind label %3230

3128:                                             ; preds = %3125
  %3129 = fmul double %3111, %3127
  %3130 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3109, double %3129)
  %3131 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %220) #8
  %3132 = load i32, ptr %19, align 4, !tbaa !10
  %3133 = sub nsw i32 %3132, 1
  %3134 = sext i32 %3133 to i64
  store i64 %3134, ptr %220, align 8, !tbaa !12
  %3135 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3131, ptr noundef nonnull align 8 dereferenceable(8) %220)
          to label %3136 unwind label %3234

3136:                                             ; preds = %3128
  %3137 = load i32, ptr %212, align 4, !tbaa !10
  %3138 = sext i32 %3137 to i64
  %3139 = getelementptr inbounds double, ptr %3135, i64 %3138
  %3140 = load double, ptr %3139, align 8, !tbaa !14
  %3141 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %3140, double %3130)
  %3142 = load double, ptr %29, align 8, !tbaa !14
  %3143 = load double, ptr %29, align 8, !tbaa !14
  %3144 = fmul double %3142, %3143
  %3145 = fdiv double %3141, %3144
  %3146 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %221) #8
  %3147 = load i32, ptr %19, align 4, !tbaa !10
  %3148 = sub nsw i32 %3147, 1
  %3149 = sext i32 %3148 to i64
  store i64 %3149, ptr %221, align 8, !tbaa !12
  %3150 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3146, ptr noundef nonnull align 8 dereferenceable(8) %221)
          to label %3151 unwind label %3238

3151:                                             ; preds = %3136
  %3152 = load i32, ptr %212, align 4, !tbaa !10
  %3153 = add nsw i32 %3152, 1
  %3154 = sext i32 %3153 to i64
  %3155 = getelementptr inbounds double, ptr %3150, i64 %3154
  %3156 = load double, ptr %3155, align 8, !tbaa !14
  %3157 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %222) #8
  %3158 = load i32, ptr %19, align 4, !tbaa !10
  %3159 = sub nsw i32 %3158, 1
  %3160 = sext i32 %3159 to i64
  store i64 %3160, ptr %222, align 8, !tbaa !12
  %3161 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3157, ptr noundef nonnull align 8 dereferenceable(8) %222)
          to label %3162 unwind label %3242

3162:                                             ; preds = %3151
  %3163 = load i32, ptr %212, align 4, !tbaa !10
  %3164 = sext i32 %3163 to i64
  %3165 = getelementptr inbounds double, ptr %3161, i64 %3164
  %3166 = load double, ptr %3165, align 8, !tbaa !14
  %3167 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %3166, double %3156)
  %3168 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %223) #8
  %3169 = load i32, ptr %19, align 4, !tbaa !10
  %3170 = sub nsw i32 %3169, 1
  %3171 = sext i32 %3170 to i64
  store i64 %3171, ptr %223, align 8, !tbaa !12
  %3172 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3168, ptr noundef nonnull align 8 dereferenceable(8) %223)
          to label %3173 unwind label %3246

3173:                                             ; preds = %3162
  %3174 = load i32, ptr %212, align 4, !tbaa !10
  %3175 = sub nsw i32 %3174, 1
  %3176 = sext i32 %3175 to i64
  %3177 = getelementptr inbounds double, ptr %3172, i64 %3176
  %3178 = load double, ptr %3177, align 8, !tbaa !14
  %3179 = fadd double %3167, %3178
  %3180 = load double, ptr %24, align 8, !tbaa !14
  %3181 = load double, ptr %24, align 8, !tbaa !14
  %3182 = fmul double %3180, %3181
  %3183 = fdiv double %3179, %3182
  %3184 = fadd double %3145, %3183
  %3185 = fmul double %3099, %3184
  %3186 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3076, double %3185)
  %3187 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %224) #8
  %3188 = load i32, ptr %19, align 4, !tbaa !10
  %3189 = sub nsw i32 %3188, 1
  %3190 = sext i32 %3189 to i64
  store i64 %3190, ptr %224, align 8, !tbaa !12
  %3191 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3187, ptr noundef nonnull align 8 dereferenceable(8) %224)
          to label %3192 unwind label %3250

3192:                                             ; preds = %3173
  %3193 = load i32, ptr %212, align 4, !tbaa !10
  %3194 = sext i32 %3193 to i64
  %3195 = getelementptr inbounds double, ptr %3191, i64 %3194
  %3196 = load double, ptr %3195, align 8, !tbaa !14
  %3197 = fsub double %3186, %3196
  call void @llvm.lifetime.start.p0(i64 8, ptr %225) #8
  %3198 = load i32, ptr %19, align 4, !tbaa !10
  %3199 = sub nsw i32 %3198, 1
  %3200 = sext i32 %3199 to i64
  store i64 %3200, ptr %225, align 8, !tbaa !12
  %3201 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %225)
          to label %3202 unwind label %3254

3202:                                             ; preds = %3192
  %3203 = load i32, ptr %212, align 4, !tbaa !10
  %3204 = sext i32 %3203 to i64
  %3205 = getelementptr inbounds double, ptr %3201, i64 %3204
  store double %3197, ptr %3205, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %225) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %223) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %222) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %218) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %215) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %214) #8
  br label %3269

3206:                                             ; preds = %3053
  %3207 = landingpad { ptr, i32 }
          cleanup
  %3208 = extractvalue { ptr, i32 } %3207, 0
  store ptr %3208, ptr %26, align 8
  %3209 = extractvalue { ptr, i32 } %3207, 1
  store i32 %3209, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %213) #8
  br label %3273

3210:                                             ; preds = %3066
  %3211 = landingpad { ptr, i32 }
          cleanup
  %3212 = extractvalue { ptr, i32 } %3211, 0
  store ptr %3212, ptr %26, align 8
  %3213 = extractvalue { ptr, i32 } %3211, 1
  store i32 %3213, ptr %27, align 4
  br label %3268

3214:                                             ; preds = %3072
  %3215 = landingpad { ptr, i32 }
          cleanup
  %3216 = extractvalue { ptr, i32 } %3215, 0
  store ptr %3216, ptr %26, align 8
  %3217 = extractvalue { ptr, i32 } %3215, 1
  store i32 %3217, ptr %27, align 4
  br label %3267

3218:                                             ; preds = %3095, %3088
  %3219 = landingpad { ptr, i32 }
          cleanup
  %3220 = extractvalue { ptr, i32 } %3219, 0
  store ptr %3220, ptr %26, align 8
  %3221 = extractvalue { ptr, i32 } %3219, 1
  store i32 %3221, ptr %27, align 4
  br label %3266

3222:                                             ; preds = %3098
  %3223 = landingpad { ptr, i32 }
          cleanup
  %3224 = extractvalue { ptr, i32 } %3223, 0
  store ptr %3224, ptr %26, align 8
  %3225 = extractvalue { ptr, i32 } %3223, 1
  store i32 %3225, ptr %27, align 4
  br label %3265

3226:                                             ; preds = %3105
  %3227 = landingpad { ptr, i32 }
          cleanup
  %3228 = extractvalue { ptr, i32 } %3227, 0
  store ptr %3228, ptr %26, align 8
  %3229 = extractvalue { ptr, i32 } %3227, 1
  store i32 %3229, ptr %27, align 4
  br label %3264

3230:                                             ; preds = %3125, %3118
  %3231 = landingpad { ptr, i32 }
          cleanup
  %3232 = extractvalue { ptr, i32 } %3231, 0
  store ptr %3232, ptr %26, align 8
  %3233 = extractvalue { ptr, i32 } %3231, 1
  store i32 %3233, ptr %27, align 4
  br label %3263

3234:                                             ; preds = %3128
  %3235 = landingpad { ptr, i32 }
          cleanup
  %3236 = extractvalue { ptr, i32 } %3235, 0
  store ptr %3236, ptr %26, align 8
  %3237 = extractvalue { ptr, i32 } %3235, 1
  store i32 %3237, ptr %27, align 4
  br label %3262

3238:                                             ; preds = %3136
  %3239 = landingpad { ptr, i32 }
          cleanup
  %3240 = extractvalue { ptr, i32 } %3239, 0
  store ptr %3240, ptr %26, align 8
  %3241 = extractvalue { ptr, i32 } %3239, 1
  store i32 %3241, ptr %27, align 4
  br label %3261

3242:                                             ; preds = %3151
  %3243 = landingpad { ptr, i32 }
          cleanup
  %3244 = extractvalue { ptr, i32 } %3243, 0
  store ptr %3244, ptr %26, align 8
  %3245 = extractvalue { ptr, i32 } %3243, 1
  store i32 %3245, ptr %27, align 4
  br label %3260

3246:                                             ; preds = %3162
  %3247 = landingpad { ptr, i32 }
          cleanup
  %3248 = extractvalue { ptr, i32 } %3247, 0
  store ptr %3248, ptr %26, align 8
  %3249 = extractvalue { ptr, i32 } %3247, 1
  store i32 %3249, ptr %27, align 4
  br label %3259

3250:                                             ; preds = %3173
  %3251 = landingpad { ptr, i32 }
          cleanup
  %3252 = extractvalue { ptr, i32 } %3251, 0
  store ptr %3252, ptr %26, align 8
  %3253 = extractvalue { ptr, i32 } %3251, 1
  store i32 %3253, ptr %27, align 4
  br label %3258

3254:                                             ; preds = %3192
  %3255 = landingpad { ptr, i32 }
          cleanup
  %3256 = extractvalue { ptr, i32 } %3255, 0
  store ptr %3256, ptr %26, align 8
  %3257 = extractvalue { ptr, i32 } %3255, 1
  store i32 %3257, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %225) #8
  br label %3258

3258:                                             ; preds = %3254, %3250
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #8
  br label %3259

3259:                                             ; preds = %3258, %3246
  call void @llvm.lifetime.end.p0(i64 8, ptr %223) #8
  br label %3260

3260:                                             ; preds = %3259, %3242
  call void @llvm.lifetime.end.p0(i64 8, ptr %222) #8
  br label %3261

3261:                                             ; preds = %3260, %3238
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #8
  br label %3262

3262:                                             ; preds = %3261, %3234
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #8
  br label %3263

3263:                                             ; preds = %3262, %3230
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #8
  br label %3264

3264:                                             ; preds = %3263, %3226
  call void @llvm.lifetime.end.p0(i64 8, ptr %218) #8
  br label %3265

3265:                                             ; preds = %3264, %3222
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #8
  br label %3266

3266:                                             ; preds = %3265, %3218
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #8
  br label %3267

3267:                                             ; preds = %3266, %3214
  call void @llvm.lifetime.end.p0(i64 8, ptr %215) #8
  br label %3268

3268:                                             ; preds = %3267, %3210
  call void @llvm.lifetime.end.p0(i64 8, ptr %214) #8
  br label %3273

3269:                                             ; preds = %3202, %3059
  br label %3270

3270:                                             ; preds = %3269
  %3271 = load i32, ptr %212, align 4, !tbaa !10
  %3272 = add nsw i32 %3271, 1
  store i32 %3272, ptr %212, align 4, !tbaa !10
  br label %3047, !llvm.loop !54

3273:                                             ; preds = %3268, %3206
  call void @llvm.lifetime.end.p0(i64 4, ptr %212) #8
  br label %4140

3274:                                             ; preds = %3052
  br label %3275

3275:                                             ; preds = %3274, %3041
  %3276 = load i8, ptr %12, align 1, !tbaa !9
  %3277 = zext i8 %3276 to i32
  %3278 = and i32 %3277, 16
  %3279 = icmp ne i32 %3278, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %226) #8
  br i1 %3279, label %3280, label %3293

3280:                                             ; preds = %3275
  %3281 = load i8, ptr %12, align 1, !tbaa !9
  %3282 = zext i8 %3281 to i32
  %3283 = and i32 %3282, 64
  %3284 = icmp ne i32 %3283, 0
  br i1 %3284, label %3285, label %3293

3285:                                             ; preds = %3280
  %3286 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %226, align 8, !tbaa !12
  %3287 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3286, ptr noundef nonnull align 8 dereferenceable(8) %226)
          to label %3288 unwind label %3391

3288:                                             ; preds = %3285
  %3289 = getelementptr inbounds i8, ptr %3287, i64 0
  %3290 = load i8, ptr %3289, align 1, !tbaa !24, !range !26, !noundef !27
  %3291 = trunc i8 %3290 to i1
  %3292 = xor i1 %3291, true
  br label %3293

3293:                                             ; preds = %3288, %3280, %3275
  %3294 = phi i1 [ false, %3280 ], [ false, %3275 ], [ %3292, %3288 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %226) #8
  br i1 %3294, label %3295, label %3459

3295:                                             ; preds = %3293
  %3296 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %227) #8
  store i64 0, ptr %227, align 8, !tbaa !12
  %3297 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3296, ptr noundef nonnull align 8 dereferenceable(8) %227)
          to label %3298 unwind label %3395

3298:                                             ; preds = %3295
  %3299 = getelementptr inbounds double, ptr %3297, i64 0
  %3300 = load double, ptr %3299, align 8, !tbaa !14
  %3301 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3302 = load double, ptr %3301, align 8, !tbaa !16
  %3303 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3304 = load double, ptr %3303, align 8, !tbaa !16
  %3305 = fmul double %3302, %3304
  %3306 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %3307 = load ptr, ptr %3306, align 8, !tbaa !23
  %3308 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %228) #8
  store i64 0, ptr %228, align 8, !tbaa !12
  %3309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3308, ptr noundef nonnull align 8 dereferenceable(8) %228)
          to label %3310 unwind label %3399

3310:                                             ; preds = %3298
  %3311 = load double, ptr %3309, align 8, !tbaa !14
  %3312 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %229) #8
  store i64 0, ptr %229, align 8, !tbaa !12
  %3313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3312, ptr noundef nonnull align 8 dereferenceable(8) %229)
          to label %3314 unwind label %3403

3314:                                             ; preds = %3310
  %3315 = load double, ptr %3313, align 8, !tbaa !14
  %3316 = invoke noundef double %3307(double noundef %3311, double noundef %3315)
          to label %3317 unwind label %3403

3317:                                             ; preds = %3314
  %3318 = fmul double %3305, %3316
  %3319 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #8
  store i64 1, ptr %230, align 8, !tbaa !12
  %3320 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3319, ptr noundef nonnull align 8 dereferenceable(8) %230)
          to label %3321 unwind label %3407

3321:                                             ; preds = %3317
  %3322 = getelementptr inbounds double, ptr %3320, i64 0
  %3323 = load double, ptr %3322, align 8, !tbaa !14
  %3324 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %231) #8
  store i64 0, ptr %231, align 8, !tbaa !12
  %3325 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3324, ptr noundef nonnull align 8 dereferenceable(8) %231)
          to label %3326 unwind label %3411

3326:                                             ; preds = %3321
  %3327 = getelementptr inbounds double, ptr %3325, i64 0
  %3328 = load double, ptr %3327, align 8, !tbaa !14
  %3329 = fsub double %3323, %3328
  %3330 = load double, ptr %29, align 8, !tbaa !14
  %3331 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %3332 = load ptr, ptr %3331, align 8, !tbaa !28
  %3333 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %232) #8
  store i64 0, ptr %232, align 8, !tbaa !12
  %3334 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3333, ptr noundef nonnull align 8 dereferenceable(8) %232)
          to label %3335 unwind label %3415

3335:                                             ; preds = %3326
  %3336 = load double, ptr %3334, align 8, !tbaa !14
  %3337 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %233) #8
  store i64 0, ptr %233, align 8, !tbaa !12
  %3338 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3337, ptr noundef nonnull align 8 dereferenceable(8) %233)
          to label %3339 unwind label %3419

3339:                                             ; preds = %3335
  %3340 = load double, ptr %3338, align 8, !tbaa !14
  %3341 = invoke noundef double %3332(double noundef %3336, double noundef %3340)
          to label %3342 unwind label %3419

3342:                                             ; preds = %3339
  %3343 = fneg double %3330
  %3344 = call double @llvm.fmuladd.f64(double %3343, double %3341, double %3329)
  %3345 = load double, ptr %29, align 8, !tbaa !14
  %3346 = load double, ptr %29, align 8, !tbaa !14
  %3347 = fmul double %3345, %3346
  %3348 = fdiv double %3344, %3347
  %3349 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %234) #8
  store i64 0, ptr %234, align 8, !tbaa !12
  %3350 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3349, ptr noundef nonnull align 8 dereferenceable(8) %234)
          to label %3351 unwind label %3423

3351:                                             ; preds = %3342
  %3352 = getelementptr inbounds double, ptr %3350, i64 1
  %3353 = load double, ptr %3352, align 8, !tbaa !14
  %3354 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %235) #8
  store i64 0, ptr %235, align 8, !tbaa !12
  %3355 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3354, ptr noundef nonnull align 8 dereferenceable(8) %235)
          to label %3356 unwind label %3427

3356:                                             ; preds = %3351
  %3357 = getelementptr inbounds double, ptr %3355, i64 0
  %3358 = load double, ptr %3357, align 8, !tbaa !14
  %3359 = fsub double %3353, %3358
  %3360 = load double, ptr %24, align 8, !tbaa !14
  %3361 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %3362 = load ptr, ptr %3361, align 8, !tbaa !31
  %3363 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %236) #8
  store i64 0, ptr %236, align 8, !tbaa !12
  %3364 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3363, ptr noundef nonnull align 8 dereferenceable(8) %236)
          to label %3365 unwind label %3431

3365:                                             ; preds = %3356
  %3366 = load double, ptr %3364, align 8, !tbaa !14
  %3367 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %237) #8
  store i64 0, ptr %237, align 8, !tbaa !12
  %3368 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3367, ptr noundef nonnull align 8 dereferenceable(8) %237)
          to label %3369 unwind label %3435

3369:                                             ; preds = %3365
  %3370 = load double, ptr %3368, align 8, !tbaa !14
  %3371 = invoke noundef double %3362(double noundef %3366, double noundef %3370)
          to label %3372 unwind label %3435

3372:                                             ; preds = %3369
  %3373 = fneg double %3360
  %3374 = call double @llvm.fmuladd.f64(double %3373, double %3371, double %3359)
  %3375 = load double, ptr %24, align 8, !tbaa !14
  %3376 = load double, ptr %24, align 8, !tbaa !14
  %3377 = fmul double %3375, %3376
  %3378 = fdiv double %3374, %3377
  %3379 = fadd double %3348, %3378
  %3380 = call double @llvm.fmuladd.f64(double %3318, double %3379, double %3300)
  %3381 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %238) #8
  store i64 0, ptr %238, align 8, !tbaa !12
  %3382 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3381, ptr noundef nonnull align 8 dereferenceable(8) %238)
          to label %3383 unwind label %3439

3383:                                             ; preds = %3372
  %3384 = getelementptr inbounds double, ptr %3382, i64 0
  %3385 = load double, ptr %3384, align 8, !tbaa !14
  %3386 = fneg double %3385
  %3387 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3380, double %3386)
  call void @llvm.lifetime.start.p0(i64 8, ptr %239) #8
  store i64 0, ptr %239, align 8, !tbaa !12
  %3388 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %239)
          to label %3389 unwind label %3443

3389:                                             ; preds = %3383
  %3390 = getelementptr inbounds double, ptr %3388, i64 0
  store double %3387, ptr %3390, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %239) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %238) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %235) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %233) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %232) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #8
  br label %3459

3391:                                             ; preds = %3285
  %3392 = landingpad { ptr, i32 }
          cleanup
  %3393 = extractvalue { ptr, i32 } %3392, 0
  store ptr %3393, ptr %26, align 8
  %3394 = extractvalue { ptr, i32 } %3392, 1
  store i32 %3394, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %226) #8
  br label %4140

3395:                                             ; preds = %3295
  %3396 = landingpad { ptr, i32 }
          cleanup
  %3397 = extractvalue { ptr, i32 } %3396, 0
  store ptr %3397, ptr %26, align 8
  %3398 = extractvalue { ptr, i32 } %3396, 1
  store i32 %3398, ptr %27, align 4
  br label %3458

3399:                                             ; preds = %3298
  %3400 = landingpad { ptr, i32 }
          cleanup
  %3401 = extractvalue { ptr, i32 } %3400, 0
  store ptr %3401, ptr %26, align 8
  %3402 = extractvalue { ptr, i32 } %3400, 1
  store i32 %3402, ptr %27, align 4
  br label %3457

3403:                                             ; preds = %3314, %3310
  %3404 = landingpad { ptr, i32 }
          cleanup
  %3405 = extractvalue { ptr, i32 } %3404, 0
  store ptr %3405, ptr %26, align 8
  %3406 = extractvalue { ptr, i32 } %3404, 1
  store i32 %3406, ptr %27, align 4
  br label %3456

3407:                                             ; preds = %3317
  %3408 = landingpad { ptr, i32 }
          cleanup
  %3409 = extractvalue { ptr, i32 } %3408, 0
  store ptr %3409, ptr %26, align 8
  %3410 = extractvalue { ptr, i32 } %3408, 1
  store i32 %3410, ptr %27, align 4
  br label %3455

3411:                                             ; preds = %3321
  %3412 = landingpad { ptr, i32 }
          cleanup
  %3413 = extractvalue { ptr, i32 } %3412, 0
  store ptr %3413, ptr %26, align 8
  %3414 = extractvalue { ptr, i32 } %3412, 1
  store i32 %3414, ptr %27, align 4
  br label %3454

3415:                                             ; preds = %3326
  %3416 = landingpad { ptr, i32 }
          cleanup
  %3417 = extractvalue { ptr, i32 } %3416, 0
  store ptr %3417, ptr %26, align 8
  %3418 = extractvalue { ptr, i32 } %3416, 1
  store i32 %3418, ptr %27, align 4
  br label %3453

3419:                                             ; preds = %3339, %3335
  %3420 = landingpad { ptr, i32 }
          cleanup
  %3421 = extractvalue { ptr, i32 } %3420, 0
  store ptr %3421, ptr %26, align 8
  %3422 = extractvalue { ptr, i32 } %3420, 1
  store i32 %3422, ptr %27, align 4
  br label %3452

3423:                                             ; preds = %3342
  %3424 = landingpad { ptr, i32 }
          cleanup
  %3425 = extractvalue { ptr, i32 } %3424, 0
  store ptr %3425, ptr %26, align 8
  %3426 = extractvalue { ptr, i32 } %3424, 1
  store i32 %3426, ptr %27, align 4
  br label %3451

3427:                                             ; preds = %3351
  %3428 = landingpad { ptr, i32 }
          cleanup
  %3429 = extractvalue { ptr, i32 } %3428, 0
  store ptr %3429, ptr %26, align 8
  %3430 = extractvalue { ptr, i32 } %3428, 1
  store i32 %3430, ptr %27, align 4
  br label %3450

3431:                                             ; preds = %3356
  %3432 = landingpad { ptr, i32 }
          cleanup
  %3433 = extractvalue { ptr, i32 } %3432, 0
  store ptr %3433, ptr %26, align 8
  %3434 = extractvalue { ptr, i32 } %3432, 1
  store i32 %3434, ptr %27, align 4
  br label %3449

3435:                                             ; preds = %3369, %3365
  %3436 = landingpad { ptr, i32 }
          cleanup
  %3437 = extractvalue { ptr, i32 } %3436, 0
  store ptr %3437, ptr %26, align 8
  %3438 = extractvalue { ptr, i32 } %3436, 1
  store i32 %3438, ptr %27, align 4
  br label %3448

3439:                                             ; preds = %3372
  %3440 = landingpad { ptr, i32 }
          cleanup
  %3441 = extractvalue { ptr, i32 } %3440, 0
  store ptr %3441, ptr %26, align 8
  %3442 = extractvalue { ptr, i32 } %3440, 1
  store i32 %3442, ptr %27, align 4
  br label %3447

3443:                                             ; preds = %3383
  %3444 = landingpad { ptr, i32 }
          cleanup
  %3445 = extractvalue { ptr, i32 } %3444, 0
  store ptr %3445, ptr %26, align 8
  %3446 = extractvalue { ptr, i32 } %3444, 1
  store i32 %3446, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %239) #8
  br label %3447

3447:                                             ; preds = %3443, %3439
  call void @llvm.lifetime.end.p0(i64 8, ptr %238) #8
  br label %3448

3448:                                             ; preds = %3447, %3435
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #8
  br label %3449

3449:                                             ; preds = %3448, %3431
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #8
  br label %3450

3450:                                             ; preds = %3449, %3427
  call void @llvm.lifetime.end.p0(i64 8, ptr %235) #8
  br label %3451

3451:                                             ; preds = %3450, %3423
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #8
  br label %3452

3452:                                             ; preds = %3451, %3419
  call void @llvm.lifetime.end.p0(i64 8, ptr %233) #8
  br label %3453

3453:                                             ; preds = %3452, %3415
  call void @llvm.lifetime.end.p0(i64 8, ptr %232) #8
  br label %3454

3454:                                             ; preds = %3453, %3411
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #8
  br label %3455

3455:                                             ; preds = %3454, %3407
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #8
  br label %3456

3456:                                             ; preds = %3455, %3403
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #8
  br label %3457

3457:                                             ; preds = %3456, %3399
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #8
  br label %3458

3458:                                             ; preds = %3457, %3395
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #8
  br label %4140

3459:                                             ; preds = %3389, %3293
  %3460 = load i8, ptr %12, align 1, !tbaa !9
  %3461 = zext i8 %3460 to i32
  %3462 = and i32 %3461, 64
  %3463 = icmp ne i32 %3462, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %240) #8
  br i1 %3463, label %3464, label %3480

3464:                                             ; preds = %3459
  %3465 = load i8, ptr %12, align 1, !tbaa !9
  %3466 = zext i8 %3465 to i32
  %3467 = and i32 %3466, 32
  %3468 = icmp ne i32 %3467, 0
  br i1 %3468, label %3469, label %3480

3469:                                             ; preds = %3464
  %3470 = load ptr, ptr %18, align 8, !tbaa !5
  store i64 0, ptr %240, align 8, !tbaa !12
  %3471 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3470, ptr noundef nonnull align 8 dereferenceable(8) %240)
          to label %3472 unwind label %3607

3472:                                             ; preds = %3469
  %3473 = load i32, ptr %20, align 4, !tbaa !10
  %3474 = sub nsw i32 %3473, 1
  %3475 = sext i32 %3474 to i64
  %3476 = getelementptr inbounds i8, ptr %3471, i64 %3475
  %3477 = load i8, ptr %3476, align 1, !tbaa !24, !range !26, !noundef !27
  %3478 = trunc i8 %3477 to i1
  %3479 = xor i1 %3478, true
  br label %3480

3480:                                             ; preds = %3472, %3464, %3459
  %3481 = phi i1 [ false, %3464 ], [ false, %3459 ], [ %3479, %3472 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #8
  br i1 %3481, label %3482, label %3675

3482:                                             ; preds = %3480
  %3483 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %241) #8
  store i64 0, ptr %241, align 8, !tbaa !12
  %3484 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3483, ptr noundef nonnull align 8 dereferenceable(8) %241)
          to label %3485 unwind label %3611

3485:                                             ; preds = %3482
  %3486 = load i32, ptr %20, align 4, !tbaa !10
  %3487 = sub nsw i32 %3486, 1
  %3488 = sext i32 %3487 to i64
  %3489 = getelementptr inbounds double, ptr %3484, i64 %3488
  %3490 = load double, ptr %3489, align 8, !tbaa !14
  %3491 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3492 = load double, ptr %3491, align 8, !tbaa !16
  %3493 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3494 = load double, ptr %3493, align 8, !tbaa !16
  %3495 = fmul double %3492, %3494
  %3496 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %3497 = load ptr, ptr %3496, align 8, !tbaa !23
  %3498 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %242) #8
  %3499 = load i32, ptr %20, align 4, !tbaa !10
  %3500 = sub nsw i32 %3499, 1
  %3501 = sext i32 %3500 to i64
  store i64 %3501, ptr %242, align 8, !tbaa !12
  %3502 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3498, ptr noundef nonnull align 8 dereferenceable(8) %242)
          to label %3503 unwind label %3615

3503:                                             ; preds = %3485
  %3504 = load double, ptr %3502, align 8, !tbaa !14
  %3505 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %243) #8
  store i64 0, ptr %243, align 8, !tbaa !12
  %3506 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3505, ptr noundef nonnull align 8 dereferenceable(8) %243)
          to label %3507 unwind label %3619

3507:                                             ; preds = %3503
  %3508 = load double, ptr %3506, align 8, !tbaa !14
  %3509 = invoke noundef double %3497(double noundef %3504, double noundef %3508)
          to label %3510 unwind label %3619

3510:                                             ; preds = %3507
  %3511 = fmul double %3495, %3509
  %3512 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %244) #8
  store i64 1, ptr %244, align 8, !tbaa !12
  %3513 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3512, ptr noundef nonnull align 8 dereferenceable(8) %244)
          to label %3514 unwind label %3623

3514:                                             ; preds = %3510
  %3515 = load i32, ptr %20, align 4, !tbaa !10
  %3516 = sub nsw i32 %3515, 1
  %3517 = sext i32 %3516 to i64
  %3518 = getelementptr inbounds double, ptr %3513, i64 %3517
  %3519 = load double, ptr %3518, align 8, !tbaa !14
  %3520 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #8
  store i64 0, ptr %245, align 8, !tbaa !12
  %3521 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3520, ptr noundef nonnull align 8 dereferenceable(8) %245)
          to label %3522 unwind label %3627

3522:                                             ; preds = %3514
  %3523 = load i32, ptr %20, align 4, !tbaa !10
  %3524 = sub nsw i32 %3523, 1
  %3525 = sext i32 %3524 to i64
  %3526 = getelementptr inbounds double, ptr %3521, i64 %3525
  %3527 = load double, ptr %3526, align 8, !tbaa !14
  %3528 = fsub double %3519, %3527
  %3529 = load double, ptr %29, align 8, !tbaa !14
  %3530 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 9
  %3531 = load ptr, ptr %3530, align 8, !tbaa !28
  %3532 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %246) #8
  %3533 = load i32, ptr %20, align 4, !tbaa !10
  %3534 = sub nsw i32 %3533, 1
  %3535 = sext i32 %3534 to i64
  store i64 %3535, ptr %246, align 8, !tbaa !12
  %3536 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3532, ptr noundef nonnull align 8 dereferenceable(8) %246)
          to label %3537 unwind label %3631

3537:                                             ; preds = %3522
  %3538 = load double, ptr %3536, align 8, !tbaa !14
  %3539 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #8
  store i64 0, ptr %247, align 8, !tbaa !12
  %3540 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3539, ptr noundef nonnull align 8 dereferenceable(8) %247)
          to label %3541 unwind label %3635

3541:                                             ; preds = %3537
  %3542 = load double, ptr %3540, align 8, !tbaa !14
  %3543 = invoke noundef double %3531(double noundef %3538, double noundef %3542)
          to label %3544 unwind label %3635

3544:                                             ; preds = %3541
  %3545 = fneg double %3529
  %3546 = call double @llvm.fmuladd.f64(double %3545, double %3543, double %3528)
  %3547 = load double, ptr %29, align 8, !tbaa !14
  %3548 = load double, ptr %29, align 8, !tbaa !14
  %3549 = fmul double %3547, %3548
  %3550 = fdiv double %3546, %3549
  %3551 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %248) #8
  store i64 0, ptr %248, align 8, !tbaa !12
  %3552 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3551, ptr noundef nonnull align 8 dereferenceable(8) %248)
          to label %3553 unwind label %3639

3553:                                             ; preds = %3544
  %3554 = load i32, ptr %20, align 4, !tbaa !10
  %3555 = sub nsw i32 %3554, 2
  %3556 = sext i32 %3555 to i64
  %3557 = getelementptr inbounds double, ptr %3552, i64 %3556
  %3558 = load double, ptr %3557, align 8, !tbaa !14
  %3559 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %249) #8
  store i64 0, ptr %249, align 8, !tbaa !12
  %3560 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3559, ptr noundef nonnull align 8 dereferenceable(8) %249)
          to label %3561 unwind label %3643

3561:                                             ; preds = %3553
  %3562 = load i32, ptr %20, align 4, !tbaa !10
  %3563 = sub nsw i32 %3562, 1
  %3564 = sext i32 %3563 to i64
  %3565 = getelementptr inbounds double, ptr %3560, i64 %3564
  %3566 = load double, ptr %3565, align 8, !tbaa !14
  %3567 = fsub double %3558, %3566
  %3568 = load double, ptr %24, align 8, !tbaa !14
  %3569 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %3570 = load ptr, ptr %3569, align 8, !tbaa !42
  %3571 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %250) #8
  %3572 = load i32, ptr %20, align 4, !tbaa !10
  %3573 = sub nsw i32 %3572, 1
  %3574 = sext i32 %3573 to i64
  store i64 %3574, ptr %250, align 8, !tbaa !12
  %3575 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3571, ptr noundef nonnull align 8 dereferenceable(8) %250)
          to label %3576 unwind label %3647

3576:                                             ; preds = %3561
  %3577 = load double, ptr %3575, align 8, !tbaa !14
  %3578 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %251) #8
  store i64 0, ptr %251, align 8, !tbaa !12
  %3579 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3578, ptr noundef nonnull align 8 dereferenceable(8) %251)
          to label %3580 unwind label %3651

3580:                                             ; preds = %3576
  %3581 = load double, ptr %3579, align 8, !tbaa !14
  %3582 = invoke noundef double %3570(double noundef %3577, double noundef %3581)
          to label %3583 unwind label %3651

3583:                                             ; preds = %3580
  %3584 = call double @llvm.fmuladd.f64(double %3568, double %3582, double %3567)
  %3585 = load double, ptr %24, align 8, !tbaa !14
  %3586 = load double, ptr %24, align 8, !tbaa !14
  %3587 = fmul double %3585, %3586
  %3588 = fdiv double %3584, %3587
  %3589 = fadd double %3550, %3588
  %3590 = call double @llvm.fmuladd.f64(double %3511, double %3589, double %3490)
  %3591 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %252) #8
  store i64 0, ptr %252, align 8, !tbaa !12
  %3592 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3591, ptr noundef nonnull align 8 dereferenceable(8) %252)
          to label %3593 unwind label %3655

3593:                                             ; preds = %3583
  %3594 = load i32, ptr %20, align 4, !tbaa !10
  %3595 = sub nsw i32 %3594, 1
  %3596 = sext i32 %3595 to i64
  %3597 = getelementptr inbounds double, ptr %3592, i64 %3596
  %3598 = load double, ptr %3597, align 8, !tbaa !14
  %3599 = fneg double %3598
  %3600 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3590, double %3599)
  call void @llvm.lifetime.start.p0(i64 8, ptr %253) #8
  store i64 0, ptr %253, align 8, !tbaa !12
  %3601 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %253)
          to label %3602 unwind label %3659

3602:                                             ; preds = %3593
  %3603 = load i32, ptr %20, align 4, !tbaa !10
  %3604 = sub nsw i32 %3603, 1
  %3605 = sext i32 %3604 to i64
  %3606 = getelementptr inbounds double, ptr %3601, i64 %3605
  store double %3600, ptr %3606, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %253) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %252) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %251) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %250) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %249) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %244) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %242) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #8
  br label %3675

3607:                                             ; preds = %3469
  %3608 = landingpad { ptr, i32 }
          cleanup
  %3609 = extractvalue { ptr, i32 } %3608, 0
  store ptr %3609, ptr %26, align 8
  %3610 = extractvalue { ptr, i32 } %3608, 1
  store i32 %3610, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #8
  br label %4140

3611:                                             ; preds = %3482
  %3612 = landingpad { ptr, i32 }
          cleanup
  %3613 = extractvalue { ptr, i32 } %3612, 0
  store ptr %3613, ptr %26, align 8
  %3614 = extractvalue { ptr, i32 } %3612, 1
  store i32 %3614, ptr %27, align 4
  br label %3674

3615:                                             ; preds = %3485
  %3616 = landingpad { ptr, i32 }
          cleanup
  %3617 = extractvalue { ptr, i32 } %3616, 0
  store ptr %3617, ptr %26, align 8
  %3618 = extractvalue { ptr, i32 } %3616, 1
  store i32 %3618, ptr %27, align 4
  br label %3673

3619:                                             ; preds = %3507, %3503
  %3620 = landingpad { ptr, i32 }
          cleanup
  %3621 = extractvalue { ptr, i32 } %3620, 0
  store ptr %3621, ptr %26, align 8
  %3622 = extractvalue { ptr, i32 } %3620, 1
  store i32 %3622, ptr %27, align 4
  br label %3672

3623:                                             ; preds = %3510
  %3624 = landingpad { ptr, i32 }
          cleanup
  %3625 = extractvalue { ptr, i32 } %3624, 0
  store ptr %3625, ptr %26, align 8
  %3626 = extractvalue { ptr, i32 } %3624, 1
  store i32 %3626, ptr %27, align 4
  br label %3671

3627:                                             ; preds = %3514
  %3628 = landingpad { ptr, i32 }
          cleanup
  %3629 = extractvalue { ptr, i32 } %3628, 0
  store ptr %3629, ptr %26, align 8
  %3630 = extractvalue { ptr, i32 } %3628, 1
  store i32 %3630, ptr %27, align 4
  br label %3670

3631:                                             ; preds = %3522
  %3632 = landingpad { ptr, i32 }
          cleanup
  %3633 = extractvalue { ptr, i32 } %3632, 0
  store ptr %3633, ptr %26, align 8
  %3634 = extractvalue { ptr, i32 } %3632, 1
  store i32 %3634, ptr %27, align 4
  br label %3669

3635:                                             ; preds = %3541, %3537
  %3636 = landingpad { ptr, i32 }
          cleanup
  %3637 = extractvalue { ptr, i32 } %3636, 0
  store ptr %3637, ptr %26, align 8
  %3638 = extractvalue { ptr, i32 } %3636, 1
  store i32 %3638, ptr %27, align 4
  br label %3668

3639:                                             ; preds = %3544
  %3640 = landingpad { ptr, i32 }
          cleanup
  %3641 = extractvalue { ptr, i32 } %3640, 0
  store ptr %3641, ptr %26, align 8
  %3642 = extractvalue { ptr, i32 } %3640, 1
  store i32 %3642, ptr %27, align 4
  br label %3667

3643:                                             ; preds = %3553
  %3644 = landingpad { ptr, i32 }
          cleanup
  %3645 = extractvalue { ptr, i32 } %3644, 0
  store ptr %3645, ptr %26, align 8
  %3646 = extractvalue { ptr, i32 } %3644, 1
  store i32 %3646, ptr %27, align 4
  br label %3666

3647:                                             ; preds = %3561
  %3648 = landingpad { ptr, i32 }
          cleanup
  %3649 = extractvalue { ptr, i32 } %3648, 0
  store ptr %3649, ptr %26, align 8
  %3650 = extractvalue { ptr, i32 } %3648, 1
  store i32 %3650, ptr %27, align 4
  br label %3665

3651:                                             ; preds = %3580, %3576
  %3652 = landingpad { ptr, i32 }
          cleanup
  %3653 = extractvalue { ptr, i32 } %3652, 0
  store ptr %3653, ptr %26, align 8
  %3654 = extractvalue { ptr, i32 } %3652, 1
  store i32 %3654, ptr %27, align 4
  br label %3664

3655:                                             ; preds = %3583
  %3656 = landingpad { ptr, i32 }
          cleanup
  %3657 = extractvalue { ptr, i32 } %3656, 0
  store ptr %3657, ptr %26, align 8
  %3658 = extractvalue { ptr, i32 } %3656, 1
  store i32 %3658, ptr %27, align 4
  br label %3663

3659:                                             ; preds = %3593
  %3660 = landingpad { ptr, i32 }
          cleanup
  %3661 = extractvalue { ptr, i32 } %3660, 0
  store ptr %3661, ptr %26, align 8
  %3662 = extractvalue { ptr, i32 } %3660, 1
  store i32 %3662, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %253) #8
  br label %3663

3663:                                             ; preds = %3659, %3655
  call void @llvm.lifetime.end.p0(i64 8, ptr %252) #8
  br label %3664

3664:                                             ; preds = %3663, %3651
  call void @llvm.lifetime.end.p0(i64 8, ptr %251) #8
  br label %3665

3665:                                             ; preds = %3664, %3647
  call void @llvm.lifetime.end.p0(i64 8, ptr %250) #8
  br label %3666

3666:                                             ; preds = %3665, %3643
  call void @llvm.lifetime.end.p0(i64 8, ptr %249) #8
  br label %3667

3667:                                             ; preds = %3666, %3639
  call void @llvm.lifetime.end.p0(i64 8, ptr %248) #8
  br label %3668

3668:                                             ; preds = %3667, %3635
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #8
  br label %3669

3669:                                             ; preds = %3668, %3631
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #8
  br label %3670

3670:                                             ; preds = %3669, %3627
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #8
  br label %3671

3671:                                             ; preds = %3670, %3623
  call void @llvm.lifetime.end.p0(i64 8, ptr %244) #8
  br label %3672

3672:                                             ; preds = %3671, %3619
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #8
  br label %3673

3673:                                             ; preds = %3672, %3615
  call void @llvm.lifetime.end.p0(i64 8, ptr %242) #8
  br label %3674

3674:                                             ; preds = %3673, %3611
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #8
  br label %4140

3675:                                             ; preds = %3602, %3480
  %3676 = load i8, ptr %12, align 1, !tbaa !9
  %3677 = zext i8 %3676 to i32
  %3678 = and i32 %3677, 16
  %3679 = icmp ne i32 %3678, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %254) #8
  br i1 %3679, label %3680, label %3696

3680:                                             ; preds = %3675
  %3681 = load i8, ptr %12, align 1, !tbaa !9
  %3682 = zext i8 %3681 to i32
  %3683 = and i32 %3682, 128
  %3684 = icmp ne i32 %3683, 0
  br i1 %3684, label %3685, label %3696

3685:                                             ; preds = %3680
  %3686 = load ptr, ptr %18, align 8, !tbaa !5
  %3687 = load i32, ptr %19, align 4, !tbaa !10
  %3688 = sub nsw i32 %3687, 1
  %3689 = sext i32 %3688 to i64
  store i64 %3689, ptr %254, align 8, !tbaa !12
  %3690 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3686, ptr noundef nonnull align 8 dereferenceable(8) %254)
          to label %3691 unwind label %3823

3691:                                             ; preds = %3685
  %3692 = getelementptr inbounds i8, ptr %3690, i64 0
  %3693 = load i8, ptr %3692, align 1, !tbaa !24, !range !26, !noundef !27
  %3694 = trunc i8 %3693 to i1
  %3695 = xor i1 %3694, true
  br label %3696

3696:                                             ; preds = %3691, %3680, %3675
  %3697 = phi i1 [ false, %3680 ], [ false, %3675 ], [ %3695, %3691 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %254) #8
  br i1 %3697, label %3698, label %3891

3698:                                             ; preds = %3696
  %3699 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %255) #8
  %3700 = load i32, ptr %19, align 4, !tbaa !10
  %3701 = sub nsw i32 %3700, 1
  %3702 = sext i32 %3701 to i64
  store i64 %3702, ptr %255, align 8, !tbaa !12
  %3703 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3699, ptr noundef nonnull align 8 dereferenceable(8) %255)
          to label %3704 unwind label %3827

3704:                                             ; preds = %3698
  %3705 = getelementptr inbounds double, ptr %3703, i64 0
  %3706 = load double, ptr %3705, align 8, !tbaa !14
  %3707 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3708 = load double, ptr %3707, align 8, !tbaa !16
  %3709 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3710 = load double, ptr %3709, align 8, !tbaa !16
  %3711 = fmul double %3708, %3710
  %3712 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %3713 = load ptr, ptr %3712, align 8, !tbaa !23
  %3714 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %256) #8
  store i64 0, ptr %256, align 8, !tbaa !12
  %3715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3714, ptr noundef nonnull align 8 dereferenceable(8) %256)
          to label %3716 unwind label %3831

3716:                                             ; preds = %3704
  %3717 = load double, ptr %3715, align 8, !tbaa !14
  %3718 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %257) #8
  %3719 = load i32, ptr %19, align 4, !tbaa !10
  %3720 = sub nsw i32 %3719, 1
  %3721 = sext i32 %3720 to i64
  store i64 %3721, ptr %257, align 8, !tbaa !12
  %3722 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3718, ptr noundef nonnull align 8 dereferenceable(8) %257)
          to label %3723 unwind label %3835

3723:                                             ; preds = %3716
  %3724 = load double, ptr %3722, align 8, !tbaa !14
  %3725 = invoke noundef double %3713(double noundef %3717, double noundef %3724)
          to label %3726 unwind label %3835

3726:                                             ; preds = %3723
  %3727 = fmul double %3711, %3725
  %3728 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %258) #8
  %3729 = load i32, ptr %19, align 4, !tbaa !10
  %3730 = sub nsw i32 %3729, 2
  %3731 = sext i32 %3730 to i64
  store i64 %3731, ptr %258, align 8, !tbaa !12
  %3732 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3728, ptr noundef nonnull align 8 dereferenceable(8) %258)
          to label %3733 unwind label %3839

3733:                                             ; preds = %3726
  %3734 = getelementptr inbounds double, ptr %3732, i64 0
  %3735 = load double, ptr %3734, align 8, !tbaa !14
  %3736 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %259) #8
  %3737 = load i32, ptr %19, align 4, !tbaa !10
  %3738 = sub nsw i32 %3737, 1
  %3739 = sext i32 %3738 to i64
  store i64 %3739, ptr %259, align 8, !tbaa !12
  %3740 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3736, ptr noundef nonnull align 8 dereferenceable(8) %259)
          to label %3741 unwind label %3843

3741:                                             ; preds = %3733
  %3742 = getelementptr inbounds double, ptr %3740, i64 0
  %3743 = load double, ptr %3742, align 8, !tbaa !14
  %3744 = fsub double %3735, %3743
  %3745 = load double, ptr %29, align 8, !tbaa !14
  %3746 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %3747 = load ptr, ptr %3746, align 8, !tbaa !44
  %3748 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %260) #8
  store i64 0, ptr %260, align 8, !tbaa !12
  %3749 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3748, ptr noundef nonnull align 8 dereferenceable(8) %260)
          to label %3750 unwind label %3847

3750:                                             ; preds = %3741
  %3751 = load double, ptr %3749, align 8, !tbaa !14
  %3752 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %261) #8
  %3753 = load i32, ptr %19, align 4, !tbaa !10
  %3754 = sub nsw i32 %3753, 1
  %3755 = sext i32 %3754 to i64
  store i64 %3755, ptr %261, align 8, !tbaa !12
  %3756 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3752, ptr noundef nonnull align 8 dereferenceable(8) %261)
          to label %3757 unwind label %3851

3757:                                             ; preds = %3750
  %3758 = load double, ptr %3756, align 8, !tbaa !14
  %3759 = invoke noundef double %3747(double noundef %3751, double noundef %3758)
          to label %3760 unwind label %3851

3760:                                             ; preds = %3757
  %3761 = call double @llvm.fmuladd.f64(double %3745, double %3759, double %3744)
  %3762 = load double, ptr %29, align 8, !tbaa !14
  %3763 = load double, ptr %29, align 8, !tbaa !14
  %3764 = fmul double %3762, %3763
  %3765 = fdiv double %3761, %3764
  %3766 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %262) #8
  %3767 = load i32, ptr %19, align 4, !tbaa !10
  %3768 = sub nsw i32 %3767, 1
  %3769 = sext i32 %3768 to i64
  store i64 %3769, ptr %262, align 8, !tbaa !12
  %3770 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3766, ptr noundef nonnull align 8 dereferenceable(8) %262)
          to label %3771 unwind label %3855

3771:                                             ; preds = %3760
  %3772 = getelementptr inbounds double, ptr %3770, i64 1
  %3773 = load double, ptr %3772, align 8, !tbaa !14
  %3774 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %263) #8
  %3775 = load i32, ptr %19, align 4, !tbaa !10
  %3776 = sub nsw i32 %3775, 1
  %3777 = sext i32 %3776 to i64
  store i64 %3777, ptr %263, align 8, !tbaa !12
  %3778 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3774, ptr noundef nonnull align 8 dereferenceable(8) %263)
          to label %3779 unwind label %3859

3779:                                             ; preds = %3771
  %3780 = getelementptr inbounds double, ptr %3778, i64 0
  %3781 = load double, ptr %3780, align 8, !tbaa !14
  %3782 = fsub double %3773, %3781
  %3783 = load double, ptr %24, align 8, !tbaa !14
  %3784 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 7
  %3785 = load ptr, ptr %3784, align 8, !tbaa !31
  %3786 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %264) #8
  store i64 0, ptr %264, align 8, !tbaa !12
  %3787 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3786, ptr noundef nonnull align 8 dereferenceable(8) %264)
          to label %3788 unwind label %3863

3788:                                             ; preds = %3779
  %3789 = load double, ptr %3787, align 8, !tbaa !14
  %3790 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %265) #8
  %3791 = load i32, ptr %19, align 4, !tbaa !10
  %3792 = sub nsw i32 %3791, 1
  %3793 = sext i32 %3792 to i64
  store i64 %3793, ptr %265, align 8, !tbaa !12
  %3794 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3790, ptr noundef nonnull align 8 dereferenceable(8) %265)
          to label %3795 unwind label %3867

3795:                                             ; preds = %3788
  %3796 = load double, ptr %3794, align 8, !tbaa !14
  %3797 = invoke noundef double %3785(double noundef %3789, double noundef %3796)
          to label %3798 unwind label %3867

3798:                                             ; preds = %3795
  %3799 = fneg double %3783
  %3800 = call double @llvm.fmuladd.f64(double %3799, double %3797, double %3782)
  %3801 = load double, ptr %24, align 8, !tbaa !14
  %3802 = load double, ptr %24, align 8, !tbaa !14
  %3803 = fmul double %3801, %3802
  %3804 = fdiv double %3800, %3803
  %3805 = fadd double %3765, %3804
  %3806 = call double @llvm.fmuladd.f64(double %3727, double %3805, double %3706)
  %3807 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %266) #8
  %3808 = load i32, ptr %19, align 4, !tbaa !10
  %3809 = sub nsw i32 %3808, 1
  %3810 = sext i32 %3809 to i64
  store i64 %3810, ptr %266, align 8, !tbaa !12
  %3811 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3807, ptr noundef nonnull align 8 dereferenceable(8) %266)
          to label %3812 unwind label %3871

3812:                                             ; preds = %3798
  %3813 = getelementptr inbounds double, ptr %3811, i64 0
  %3814 = load double, ptr %3813, align 8, !tbaa !14
  %3815 = fneg double %3814
  %3816 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %3806, double %3815)
  call void @llvm.lifetime.start.p0(i64 8, ptr %267) #8
  %3817 = load i32, ptr %19, align 4, !tbaa !10
  %3818 = sub nsw i32 %3817, 1
  %3819 = sext i32 %3818 to i64
  store i64 %3819, ptr %267, align 8, !tbaa !12
  %3820 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %267)
          to label %3821 unwind label %3875

3821:                                             ; preds = %3812
  %3822 = getelementptr inbounds double, ptr %3820, i64 0
  store double %3816, ptr %3822, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %267) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %266) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %265) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %264) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %263) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %262) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %261) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %259) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %258) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %256) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %255) #8
  br label %3891

3823:                                             ; preds = %3685
  %3824 = landingpad { ptr, i32 }
          cleanup
  %3825 = extractvalue { ptr, i32 } %3824, 0
  store ptr %3825, ptr %26, align 8
  %3826 = extractvalue { ptr, i32 } %3824, 1
  store i32 %3826, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %254) #8
  br label %4140

3827:                                             ; preds = %3698
  %3828 = landingpad { ptr, i32 }
          cleanup
  %3829 = extractvalue { ptr, i32 } %3828, 0
  store ptr %3829, ptr %26, align 8
  %3830 = extractvalue { ptr, i32 } %3828, 1
  store i32 %3830, ptr %27, align 4
  br label %3890

3831:                                             ; preds = %3704
  %3832 = landingpad { ptr, i32 }
          cleanup
  %3833 = extractvalue { ptr, i32 } %3832, 0
  store ptr %3833, ptr %26, align 8
  %3834 = extractvalue { ptr, i32 } %3832, 1
  store i32 %3834, ptr %27, align 4
  br label %3889

3835:                                             ; preds = %3723, %3716
  %3836 = landingpad { ptr, i32 }
          cleanup
  %3837 = extractvalue { ptr, i32 } %3836, 0
  store ptr %3837, ptr %26, align 8
  %3838 = extractvalue { ptr, i32 } %3836, 1
  store i32 %3838, ptr %27, align 4
  br label %3888

3839:                                             ; preds = %3726
  %3840 = landingpad { ptr, i32 }
          cleanup
  %3841 = extractvalue { ptr, i32 } %3840, 0
  store ptr %3841, ptr %26, align 8
  %3842 = extractvalue { ptr, i32 } %3840, 1
  store i32 %3842, ptr %27, align 4
  br label %3887

3843:                                             ; preds = %3733
  %3844 = landingpad { ptr, i32 }
          cleanup
  %3845 = extractvalue { ptr, i32 } %3844, 0
  store ptr %3845, ptr %26, align 8
  %3846 = extractvalue { ptr, i32 } %3844, 1
  store i32 %3846, ptr %27, align 4
  br label %3886

3847:                                             ; preds = %3741
  %3848 = landingpad { ptr, i32 }
          cleanup
  %3849 = extractvalue { ptr, i32 } %3848, 0
  store ptr %3849, ptr %26, align 8
  %3850 = extractvalue { ptr, i32 } %3848, 1
  store i32 %3850, ptr %27, align 4
  br label %3885

3851:                                             ; preds = %3757, %3750
  %3852 = landingpad { ptr, i32 }
          cleanup
  %3853 = extractvalue { ptr, i32 } %3852, 0
  store ptr %3853, ptr %26, align 8
  %3854 = extractvalue { ptr, i32 } %3852, 1
  store i32 %3854, ptr %27, align 4
  br label %3884

3855:                                             ; preds = %3760
  %3856 = landingpad { ptr, i32 }
          cleanup
  %3857 = extractvalue { ptr, i32 } %3856, 0
  store ptr %3857, ptr %26, align 8
  %3858 = extractvalue { ptr, i32 } %3856, 1
  store i32 %3858, ptr %27, align 4
  br label %3883

3859:                                             ; preds = %3771
  %3860 = landingpad { ptr, i32 }
          cleanup
  %3861 = extractvalue { ptr, i32 } %3860, 0
  store ptr %3861, ptr %26, align 8
  %3862 = extractvalue { ptr, i32 } %3860, 1
  store i32 %3862, ptr %27, align 4
  br label %3882

3863:                                             ; preds = %3779
  %3864 = landingpad { ptr, i32 }
          cleanup
  %3865 = extractvalue { ptr, i32 } %3864, 0
  store ptr %3865, ptr %26, align 8
  %3866 = extractvalue { ptr, i32 } %3864, 1
  store i32 %3866, ptr %27, align 4
  br label %3881

3867:                                             ; preds = %3795, %3788
  %3868 = landingpad { ptr, i32 }
          cleanup
  %3869 = extractvalue { ptr, i32 } %3868, 0
  store ptr %3869, ptr %26, align 8
  %3870 = extractvalue { ptr, i32 } %3868, 1
  store i32 %3870, ptr %27, align 4
  br label %3880

3871:                                             ; preds = %3798
  %3872 = landingpad { ptr, i32 }
          cleanup
  %3873 = extractvalue { ptr, i32 } %3872, 0
  store ptr %3873, ptr %26, align 8
  %3874 = extractvalue { ptr, i32 } %3872, 1
  store i32 %3874, ptr %27, align 4
  br label %3879

3875:                                             ; preds = %3812
  %3876 = landingpad { ptr, i32 }
          cleanup
  %3877 = extractvalue { ptr, i32 } %3876, 0
  store ptr %3877, ptr %26, align 8
  %3878 = extractvalue { ptr, i32 } %3876, 1
  store i32 %3878, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %267) #8
  br label %3879

3879:                                             ; preds = %3875, %3871
  call void @llvm.lifetime.end.p0(i64 8, ptr %266) #8
  br label %3880

3880:                                             ; preds = %3879, %3867
  call void @llvm.lifetime.end.p0(i64 8, ptr %265) #8
  br label %3881

3881:                                             ; preds = %3880, %3863
  call void @llvm.lifetime.end.p0(i64 8, ptr %264) #8
  br label %3882

3882:                                             ; preds = %3881, %3859
  call void @llvm.lifetime.end.p0(i64 8, ptr %263) #8
  br label %3883

3883:                                             ; preds = %3882, %3855
  call void @llvm.lifetime.end.p0(i64 8, ptr %262) #8
  br label %3884

3884:                                             ; preds = %3883, %3851
  call void @llvm.lifetime.end.p0(i64 8, ptr %261) #8
  br label %3885

3885:                                             ; preds = %3884, %3847
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #8
  br label %3886

3886:                                             ; preds = %3885, %3843
  call void @llvm.lifetime.end.p0(i64 8, ptr %259) #8
  br label %3887

3887:                                             ; preds = %3886, %3839
  call void @llvm.lifetime.end.p0(i64 8, ptr %258) #8
  br label %3888

3888:                                             ; preds = %3887, %3835
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #8
  br label %3889

3889:                                             ; preds = %3888, %3831
  call void @llvm.lifetime.end.p0(i64 8, ptr %256) #8
  br label %3890

3890:                                             ; preds = %3889, %3827
  call void @llvm.lifetime.end.p0(i64 8, ptr %255) #8
  br label %4140

3891:                                             ; preds = %3821, %3696
  %3892 = load i8, ptr %12, align 1, !tbaa !9
  %3893 = zext i8 %3892 to i32
  %3894 = and i32 %3893, 128
  %3895 = icmp ne i32 %3894, 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %268) #8
  br i1 %3895, label %3896, label %3915

3896:                                             ; preds = %3891
  %3897 = load i8, ptr %12, align 1, !tbaa !9
  %3898 = zext i8 %3897 to i32
  %3899 = and i32 %3898, 32
  %3900 = icmp ne i32 %3899, 0
  br i1 %3900, label %3901, label %3915

3901:                                             ; preds = %3896
  %3902 = load ptr, ptr %18, align 8, !tbaa !5
  %3903 = load i32, ptr %19, align 4, !tbaa !10
  %3904 = sub nsw i32 %3903, 1
  %3905 = sext i32 %3904 to i64
  store i64 %3905, ptr %268, align 8, !tbaa !12
  %3906 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3902, ptr noundef nonnull align 8 dereferenceable(8) %268)
          to label %3907 unwind label %4071

3907:                                             ; preds = %3901
  %3908 = load i32, ptr %20, align 4, !tbaa !10
  %3909 = sub nsw i32 %3908, 1
  %3910 = sext i32 %3909 to i64
  %3911 = getelementptr inbounds i8, ptr %3906, i64 %3910
  %3912 = load i8, ptr %3911, align 1, !tbaa !24, !range !26, !noundef !27
  %3913 = trunc i8 %3912 to i1
  %3914 = xor i1 %3913, true
  br label %3915

3915:                                             ; preds = %3907, %3896, %3891
  %3916 = phi i1 [ false, %3896 ], [ false, %3891 ], [ %3914, %3907 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %268) #8
  br i1 %3916, label %3917, label %4139

3917:                                             ; preds = %3915
  %3918 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %269) #8
  %3919 = load i32, ptr %19, align 4, !tbaa !10
  %3920 = sub nsw i32 %3919, 1
  %3921 = sext i32 %3920 to i64
  store i64 %3921, ptr %269, align 8, !tbaa !12
  %3922 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3918, ptr noundef nonnull align 8 dereferenceable(8) %269)
          to label %3923 unwind label %4075

3923:                                             ; preds = %3917
  %3924 = load i32, ptr %20, align 4, !tbaa !10
  %3925 = sub nsw i32 %3924, 1
  %3926 = sext i32 %3925 to i64
  %3927 = getelementptr inbounds double, ptr %3922, i64 %3926
  %3928 = load double, ptr %3927, align 8, !tbaa !14
  %3929 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3930 = load double, ptr %3929, align 8, !tbaa !16
  %3931 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %3932 = load double, ptr %3931, align 8, !tbaa !16
  %3933 = fmul double %3930, %3932
  %3934 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 20
  %3935 = load ptr, ptr %3934, align 8, !tbaa !23
  %3936 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %270) #8
  %3937 = load i32, ptr %20, align 4, !tbaa !10
  %3938 = sub nsw i32 %3937, 1
  %3939 = sext i32 %3938 to i64
  store i64 %3939, ptr %270, align 8, !tbaa !12
  %3940 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3936, ptr noundef nonnull align 8 dereferenceable(8) %270)
          to label %3941 unwind label %4079

3941:                                             ; preds = %3923
  %3942 = load double, ptr %3940, align 8, !tbaa !14
  %3943 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %271) #8
  %3944 = load i32, ptr %19, align 4, !tbaa !10
  %3945 = sub nsw i32 %3944, 1
  %3946 = sext i32 %3945 to i64
  store i64 %3946, ptr %271, align 8, !tbaa !12
  %3947 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3943, ptr noundef nonnull align 8 dereferenceable(8) %271)
          to label %3948 unwind label %4083

3948:                                             ; preds = %3941
  %3949 = load double, ptr %3947, align 8, !tbaa !14
  %3950 = invoke noundef double %3935(double noundef %3942, double noundef %3949)
          to label %3951 unwind label %4083

3951:                                             ; preds = %3948
  %3952 = fmul double %3933, %3950
  %3953 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %272) #8
  %3954 = load i32, ptr %19, align 4, !tbaa !10
  %3955 = sub nsw i32 %3954, 2
  %3956 = sext i32 %3955 to i64
  store i64 %3956, ptr %272, align 8, !tbaa !12
  %3957 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3953, ptr noundef nonnull align 8 dereferenceable(8) %272)
          to label %3958 unwind label %4087

3958:                                             ; preds = %3951
  %3959 = load i32, ptr %20, align 4, !tbaa !10
  %3960 = sub nsw i32 %3959, 1
  %3961 = sext i32 %3960 to i64
  %3962 = getelementptr inbounds double, ptr %3957, i64 %3961
  %3963 = load double, ptr %3962, align 8, !tbaa !14
  %3964 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %273) #8
  %3965 = load i32, ptr %19, align 4, !tbaa !10
  %3966 = sub nsw i32 %3965, 1
  %3967 = sext i32 %3966 to i64
  store i64 %3967, ptr %273, align 8, !tbaa !12
  %3968 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %3964, ptr noundef nonnull align 8 dereferenceable(8) %273)
          to label %3969 unwind label %4091

3969:                                             ; preds = %3958
  %3970 = load i32, ptr %20, align 4, !tbaa !10
  %3971 = sub nsw i32 %3970, 1
  %3972 = sext i32 %3971 to i64
  %3973 = getelementptr inbounds double, ptr %3968, i64 %3972
  %3974 = load double, ptr %3973, align 8, !tbaa !14
  %3975 = fsub double %3963, %3974
  %3976 = load double, ptr %29, align 8, !tbaa !14
  %3977 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 10
  %3978 = load ptr, ptr %3977, align 8, !tbaa !44
  %3979 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %274) #8
  %3980 = load i32, ptr %20, align 4, !tbaa !10
  %3981 = sub nsw i32 %3980, 1
  %3982 = sext i32 %3981 to i64
  store i64 %3982, ptr %274, align 8, !tbaa !12
  %3983 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3979, ptr noundef nonnull align 8 dereferenceable(8) %274)
          to label %3984 unwind label %4095

3984:                                             ; preds = %3969
  %3985 = load double, ptr %3983, align 8, !tbaa !14
  %3986 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %275) #8
  %3987 = load i32, ptr %19, align 4, !tbaa !10
  %3988 = sub nsw i32 %3987, 1
  %3989 = sext i32 %3988 to i64
  store i64 %3989, ptr %275, align 8, !tbaa !12
  %3990 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %3986, ptr noundef nonnull align 8 dereferenceable(8) %275)
          to label %3991 unwind label %4099

3991:                                             ; preds = %3984
  %3992 = load double, ptr %3990, align 8, !tbaa !14
  %3993 = invoke noundef double %3978(double noundef %3985, double noundef %3992)
          to label %3994 unwind label %4099

3994:                                             ; preds = %3991
  %3995 = call double @llvm.fmuladd.f64(double %3976, double %3993, double %3975)
  %3996 = load double, ptr %29, align 8, !tbaa !14
  %3997 = load double, ptr %29, align 8, !tbaa !14
  %3998 = fmul double %3996, %3997
  %3999 = fdiv double %3995, %3998
  %4000 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %276) #8
  %4001 = load i32, ptr %19, align 4, !tbaa !10
  %4002 = sub nsw i32 %4001, 1
  %4003 = sext i32 %4002 to i64
  store i64 %4003, ptr %276, align 8, !tbaa !12
  %4004 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %4000, ptr noundef nonnull align 8 dereferenceable(8) %276)
          to label %4005 unwind label %4103

4005:                                             ; preds = %3994
  %4006 = load i32, ptr %20, align 4, !tbaa !10
  %4007 = sub nsw i32 %4006, 2
  %4008 = sext i32 %4007 to i64
  %4009 = getelementptr inbounds double, ptr %4004, i64 %4008
  %4010 = load double, ptr %4009, align 8, !tbaa !14
  %4011 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %277) #8
  %4012 = load i32, ptr %19, align 4, !tbaa !10
  %4013 = sub nsw i32 %4012, 1
  %4014 = sext i32 %4013 to i64
  store i64 %4014, ptr %277, align 8, !tbaa !12
  %4015 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %4011, ptr noundef nonnull align 8 dereferenceable(8) %277)
          to label %4016 unwind label %4107

4016:                                             ; preds = %4005
  %4017 = load i32, ptr %20, align 4, !tbaa !10
  %4018 = sub nsw i32 %4017, 1
  %4019 = sext i32 %4018 to i64
  %4020 = getelementptr inbounds double, ptr %4015, i64 %4019
  %4021 = load double, ptr %4020, align 8, !tbaa !14
  %4022 = fsub double %4010, %4021
  %4023 = load double, ptr %24, align 8, !tbaa !14
  %4024 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 8
  %4025 = load ptr, ptr %4024, align 8, !tbaa !42
  %4026 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %278) #8
  %4027 = load i32, ptr %20, align 4, !tbaa !10
  %4028 = sub nsw i32 %4027, 1
  %4029 = sext i32 %4028 to i64
  store i64 %4029, ptr %278, align 8, !tbaa !12
  %4030 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4026, ptr noundef nonnull align 8 dereferenceable(8) %278)
          to label %4031 unwind label %4111

4031:                                             ; preds = %4016
  %4032 = load double, ptr %4030, align 8, !tbaa !14
  %4033 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %279) #8
  %4034 = load i32, ptr %19, align 4, !tbaa !10
  %4035 = sub nsw i32 %4034, 1
  %4036 = sext i32 %4035 to i64
  store i64 %4036, ptr %279, align 8, !tbaa !12
  %4037 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4033, ptr noundef nonnull align 8 dereferenceable(8) %279)
          to label %4038 unwind label %4115

4038:                                             ; preds = %4031
  %4039 = load double, ptr %4037, align 8, !tbaa !14
  %4040 = invoke noundef double %4025(double noundef %4032, double noundef %4039)
          to label %4041 unwind label %4115

4041:                                             ; preds = %4038
  %4042 = call double @llvm.fmuladd.f64(double %4023, double %4040, double %4022)
  %4043 = load double, ptr %24, align 8, !tbaa !14
  %4044 = load double, ptr %24, align 8, !tbaa !14
  %4045 = fmul double %4043, %4044
  %4046 = fdiv double %4042, %4045
  %4047 = fadd double %3999, %4046
  %4048 = call double @llvm.fmuladd.f64(double %3952, double %4047, double %3928)
  %4049 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %280) #8
  %4050 = load i32, ptr %19, align 4, !tbaa !10
  %4051 = sub nsw i32 %4050, 1
  %4052 = sext i32 %4051 to i64
  store i64 %4052, ptr %280, align 8, !tbaa !12
  %4053 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %4049, ptr noundef nonnull align 8 dereferenceable(8) %280)
          to label %4054 unwind label %4119

4054:                                             ; preds = %4041
  %4055 = load i32, ptr %20, align 4, !tbaa !10
  %4056 = sub nsw i32 %4055, 1
  %4057 = sext i32 %4056 to i64
  %4058 = getelementptr inbounds double, ptr %4053, i64 %4057
  %4059 = load double, ptr %4058, align 8, !tbaa !14
  %4060 = fneg double %4059
  %4061 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %4048, double %4060)
  call void @llvm.lifetime.start.p0(i64 8, ptr %281) #8
  %4062 = load i32, ptr %19, align 4, !tbaa !10
  %4063 = sub nsw i32 %4062, 1
  %4064 = sext i32 %4063 to i64
  store i64 %4064, ptr %281, align 8, !tbaa !12
  %4065 = invoke noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %281)
          to label %4066 unwind label %4123

4066:                                             ; preds = %4054
  %4067 = load i32, ptr %20, align 4, !tbaa !10
  %4068 = sub nsw i32 %4067, 1
  %4069 = sext i32 %4068 to i64
  %4070 = getelementptr inbounds double, ptr %4065, i64 %4069
  store double %4061, ptr %4070, align 8, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %281) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %280) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %279) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %278) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %277) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %275) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %274) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %273) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %272) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %271) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %270) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %269) #8
  br label %4139

4071:                                             ; preds = %3901
  %4072 = landingpad { ptr, i32 }
          cleanup
  %4073 = extractvalue { ptr, i32 } %4072, 0
  store ptr %4073, ptr %26, align 8
  %4074 = extractvalue { ptr, i32 } %4072, 1
  store i32 %4074, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %268) #8
  br label %4140

4075:                                             ; preds = %3917
  %4076 = landingpad { ptr, i32 }
          cleanup
  %4077 = extractvalue { ptr, i32 } %4076, 0
  store ptr %4077, ptr %26, align 8
  %4078 = extractvalue { ptr, i32 } %4076, 1
  store i32 %4078, ptr %27, align 4
  br label %4138

4079:                                             ; preds = %3923
  %4080 = landingpad { ptr, i32 }
          cleanup
  %4081 = extractvalue { ptr, i32 } %4080, 0
  store ptr %4081, ptr %26, align 8
  %4082 = extractvalue { ptr, i32 } %4080, 1
  store i32 %4082, ptr %27, align 4
  br label %4137

4083:                                             ; preds = %3948, %3941
  %4084 = landingpad { ptr, i32 }
          cleanup
  %4085 = extractvalue { ptr, i32 } %4084, 0
  store ptr %4085, ptr %26, align 8
  %4086 = extractvalue { ptr, i32 } %4084, 1
  store i32 %4086, ptr %27, align 4
  br label %4136

4087:                                             ; preds = %3951
  %4088 = landingpad { ptr, i32 }
          cleanup
  %4089 = extractvalue { ptr, i32 } %4088, 0
  store ptr %4089, ptr %26, align 8
  %4090 = extractvalue { ptr, i32 } %4088, 1
  store i32 %4090, ptr %27, align 4
  br label %4135

4091:                                             ; preds = %3958
  %4092 = landingpad { ptr, i32 }
          cleanup
  %4093 = extractvalue { ptr, i32 } %4092, 0
  store ptr %4093, ptr %26, align 8
  %4094 = extractvalue { ptr, i32 } %4092, 1
  store i32 %4094, ptr %27, align 4
  br label %4134

4095:                                             ; preds = %3969
  %4096 = landingpad { ptr, i32 }
          cleanup
  %4097 = extractvalue { ptr, i32 } %4096, 0
  store ptr %4097, ptr %26, align 8
  %4098 = extractvalue { ptr, i32 } %4096, 1
  store i32 %4098, ptr %27, align 4
  br label %4133

4099:                                             ; preds = %3991, %3984
  %4100 = landingpad { ptr, i32 }
          cleanup
  %4101 = extractvalue { ptr, i32 } %4100, 0
  store ptr %4101, ptr %26, align 8
  %4102 = extractvalue { ptr, i32 } %4100, 1
  store i32 %4102, ptr %27, align 4
  br label %4132

4103:                                             ; preds = %3994
  %4104 = landingpad { ptr, i32 }
          cleanup
  %4105 = extractvalue { ptr, i32 } %4104, 0
  store ptr %4105, ptr %26, align 8
  %4106 = extractvalue { ptr, i32 } %4104, 1
  store i32 %4106, ptr %27, align 4
  br label %4131

4107:                                             ; preds = %4005
  %4108 = landingpad { ptr, i32 }
          cleanup
  %4109 = extractvalue { ptr, i32 } %4108, 0
  store ptr %4109, ptr %26, align 8
  %4110 = extractvalue { ptr, i32 } %4108, 1
  store i32 %4110, ptr %27, align 4
  br label %4130

4111:                                             ; preds = %4016
  %4112 = landingpad { ptr, i32 }
          cleanup
  %4113 = extractvalue { ptr, i32 } %4112, 0
  store ptr %4113, ptr %26, align 8
  %4114 = extractvalue { ptr, i32 } %4112, 1
  store i32 %4114, ptr %27, align 4
  br label %4129

4115:                                             ; preds = %4038, %4031
  %4116 = landingpad { ptr, i32 }
          cleanup
  %4117 = extractvalue { ptr, i32 } %4116, 0
  store ptr %4117, ptr %26, align 8
  %4118 = extractvalue { ptr, i32 } %4116, 1
  store i32 %4118, ptr %27, align 4
  br label %4128

4119:                                             ; preds = %4041
  %4120 = landingpad { ptr, i32 }
          cleanup
  %4121 = extractvalue { ptr, i32 } %4120, 0
  store ptr %4121, ptr %26, align 8
  %4122 = extractvalue { ptr, i32 } %4120, 1
  store i32 %4122, ptr %27, align 4
  br label %4127

4123:                                             ; preds = %4054
  %4124 = landingpad { ptr, i32 }
          cleanup
  %4125 = extractvalue { ptr, i32 } %4124, 0
  store ptr %4125, ptr %26, align 8
  %4126 = extractvalue { ptr, i32 } %4124, 1
  store i32 %4126, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %281) #8
  br label %4127

4127:                                             ; preds = %4123, %4119
  call void @llvm.lifetime.end.p0(i64 8, ptr %280) #8
  br label %4128

4128:                                             ; preds = %4127, %4115
  call void @llvm.lifetime.end.p0(i64 8, ptr %279) #8
  br label %4129

4129:                                             ; preds = %4128, %4111
  call void @llvm.lifetime.end.p0(i64 8, ptr %278) #8
  br label %4130

4130:                                             ; preds = %4129, %4107
  call void @llvm.lifetime.end.p0(i64 8, ptr %277) #8
  br label %4131

4131:                                             ; preds = %4130, %4103
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #8
  br label %4132

4132:                                             ; preds = %4131, %4099
  call void @llvm.lifetime.end.p0(i64 8, ptr %275) #8
  br label %4133

4133:                                             ; preds = %4132, %4095
  call void @llvm.lifetime.end.p0(i64 8, ptr %274) #8
  br label %4134

4134:                                             ; preds = %4133, %4091
  call void @llvm.lifetime.end.p0(i64 8, ptr %273) #8
  br label %4135

4135:                                             ; preds = %4134, %4087
  call void @llvm.lifetime.end.p0(i64 8, ptr %272) #8
  br label %4136

4136:                                             ; preds = %4135, %4083
  call void @llvm.lifetime.end.p0(i64 8, ptr %271) #8
  br label %4137

4137:                                             ; preds = %4136, %4079
  call void @llvm.lifetime.end.p0(i64 8, ptr %270) #8
  br label %4138

4138:                                             ; preds = %4137, %4075
  call void @llvm.lifetime.end.p0(i64 8, ptr %269) #8
  br label %4140

4139:                                             ; preds = %4066, %3915
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %190) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #8
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %188) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %188) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #8
  br label %4141

4140:                                             ; preds = %4138, %4071, %3890, %3823, %3674, %3607, %3458, %3391, %3273, %3039, %2803, %2783
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %190) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #8
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %188) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %188) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #8
  br label %4192

4141:                                             ; preds = %4139, %2315
  %4142 = load ptr, ptr %16, align 8, !tbaa !5
  %4143 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 1
  %4144 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(40) %4143, ptr noundef nonnull align 8 dereferenceable(40) %4142)
          to label %4145 unwind label %436

4145:                                             ; preds = %4141
  %4146 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 18
  %4147 = load double, ptr %4146, align 8, !tbaa !16
  %4148 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 17
  %4149 = load double, ptr %4148, align 8, !tbaa !55
  %4150 = fadd double %4149, %4147
  store double %4150, ptr %4148, align 8, !tbaa !55
  %4151 = load i8, ptr %13, align 1, !tbaa !9
  %4152 = zext i8 %4151 to i32
  %4153 = and i32 %4152, 2
  %4154 = icmp ne i32 %4153, 0
  br i1 %4154, label %4155, label %4190

4155:                                             ; preds = %4145
  %4156 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 3
  %4157 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %4156, ptr noundef @.str.6)
          to label %4158 unwind label %436

4158:                                             ; preds = %4155
  br i1 %4157, label %4159, label %4175

4159:                                             ; preds = %4158
  %4160 = getelementptr inbounds %"class.cda::math::differential_equations::EDP", ptr %287, i32 0, i32 3
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %282, ptr noundef nonnull align 8 dereferenceable(32) %4160)
          to label %4161 unwind label %436

4161:                                             ; preds = %4159
  call void @llvm.lifetime.start.p0(i64 1, ptr %284) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %284) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %283, ptr noundef @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %284)
          to label %4162 unwind label %4166

4162:                                             ; preds = %4161
  %4163 = load ptr, ptr %14, align 8, !tbaa !5
  %4164 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %287, ptr noundef %282, ptr noundef %283, ptr noundef nonnull align 8 dereferenceable(24) %4163, ptr noundef nonnull align 8 dereferenceable(24) %4164, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %4165 unwind label %4170

4165:                                             ; preds = %4162
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %283) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %284) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %284) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %282) #8
  br label %4189

4166:                                             ; preds = %4161
  %4167 = landingpad { ptr, i32 }
          cleanup
  %4168 = extractvalue { ptr, i32 } %4167, 0
  store ptr %4168, ptr %26, align 8
  %4169 = extractvalue { ptr, i32 } %4167, 1
  store i32 %4169, ptr %27, align 4
  br label %4174

4170:                                             ; preds = %4162
  %4171 = landingpad { ptr, i32 }
          cleanup
  %4172 = extractvalue { ptr, i32 } %4171, 0
  store ptr %4172, ptr %26, align 8
  %4173 = extractvalue { ptr, i32 } %4171, 1
  store i32 %4173, ptr %27, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %283) #8
  br label %4174

4174:                                             ; preds = %4170, %4166
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %284) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %284) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %282) #8
  br label %4192

4175:                                             ; preds = %4158
  call void @llvm.lifetime.start.p0(i64 1, ptr %286) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %286) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %285, ptr noundef @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %286)
          to label %4176 unwind label %4180

4176:                                             ; preds = %4175
  %4177 = load ptr, ptr %14, align 8, !tbaa !5
  %4178 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEhRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %287, ptr noundef %285, i8 noundef zeroext 16, ptr noundef nonnull align 8 dereferenceable(24) %4177, ptr noundef nonnull align 8 dereferenceable(24) %4178, ptr noundef nonnull align 8 dereferenceable(40) %0)
          to label %4179 unwind label %4184

4179:                                             ; preds = %4176
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %286) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #8
  br label %4189

4180:                                             ; preds = %4175
  %4181 = landingpad { ptr, i32 }
          cleanup
  %4182 = extractvalue { ptr, i32 } %4181, 0
  store ptr %4182, ptr %26, align 8
  %4183 = extractvalue { ptr, i32 } %4181, 1
  store i32 %4183, ptr %27, align 4
  br label %4188

4184:                                             ; preds = %4176
  %4185 = landingpad { ptr, i32 }
          cleanup
  %4186 = extractvalue { ptr, i32 } %4185, 0
  store ptr %4186, ptr %26, align 8
  %4187 = extractvalue { ptr, i32 } %4185, 1
  store i32 %4187, ptr %27, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #8
  br label %4188

4188:                                             ; preds = %4184, %4180
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %286) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #8
  br label %4192

4189:                                             ; preds = %4179, %4165
  br label %4190

4190:                                             ; preds = %4189, %4145
  store i1 true, ptr %21, align 1
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  %4191 = load i1, ptr %21, align 1
  br i1 %4191, label %4195, label %4194

4192:                                             ; preds = %4188, %4174, %4140, %2719, %2517, %2316, %854, %650, %436, %435, %426, %417
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  br label %4193

4193:                                             ; preds = %4192, %408
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %4196

4194:                                             ; preds = %4190
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #8
  br label %4195

4195:                                             ; preds = %4194, %4190
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  ret void

4196:                                             ; preds = %4193
  %4197 = load ptr, ptr %26, align 8
  %4198 = load i32, ptr %27, align 4
  %4199 = insertvalue { ptr, i32 } poison, ptr %4197, 0
  %4200 = insertvalue { ptr, i32 } %4199, i32 %4198, 1
  resume { ptr, i32 } %4200
}

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

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

; Function Attrs: nounwind
declare noundef i32 @_ZNSt6thread20hardware_concurrencyEv() #5

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

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_0EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(216)) #2 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216)) unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) #7

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_1EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) #2 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!25, !25, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!17, !6, i64 176}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!17, !6, i64 160}
!32 = distinct !{!32, !30}
!33 = !{!34, !11, i64 0}
!34 = !{!"_ZTSZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEE3$_0", !11, i64 0, !11, i64 4, !6, i64 8, !11, i64 16, !11, i64 20, !20, i64 24, !6, i64 64, !19, i64 72, !19, i64 112, !18, i64 152, !18, i64 176, !15, i64 200, !15, i64 208}
!35 = !{!34, !11, i64 4}
!36 = !{!34, !6, i64 8}
!37 = !{!34, !11, i64 16}
!38 = !{!34, !11, i64 20}
!39 = !{!34, !15, i64 200}
!40 = !{!34, !15, i64 208}
!41 = distinct !{!41, !30}
!42 = !{!17, !6, i64 168}
!43 = distinct !{!43, !30}
!44 = !{!17, !6, i64 184}
!45 = distinct !{!45, !30}
!46 = distinct !{!46, !30}
!47 = distinct !{!47, !30}
!48 = !{!49, !11, i64 0}
!49 = !{!"_ZTSZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEE3$_1", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88}
!50 = !{!49, !11, i64 4}
!51 = !{!49, !6, i64 8}
!52 = distinct !{!52, !30}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !30}
!55 = !{!17, !15, i64 240}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.cda::math::containers::Matrix" = type { i64, i64, i64, ptr, ptr }
%"class.std::__cxx11::list" = type { %"class.std::__cxx11::_List_base" }
%"class.std::__cxx11::_List_base" = type { %"struct.std::__cxx11::_List_base<std::thread, std::allocator<std::thread>>::_List_impl" }
%"struct.std::__cxx11::_List_base<std::thread, std::allocator<std::thread>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { ptr, ptr }
%class.anon = type { i32, i32, ptr, i32, i32, %"class.cda::math::containers::Matrix.0", ptr, %"class.cda::math::containers::Matrix", %"class.cda::math::containers::Matrix", %"class.cda::math::containers::Vector", %"class.cda::math::containers::Vector", double, double }
%"class.cda::math::containers::Matrix.0" = type { i64, i64, i64, ptr, ptr }
%"class.cda::math::containers::Vector" = type { i64, ptr, ptr }
%"struct.std::_List_iterator" = type { ptr }
%class.anon.4 = type { i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::allocator" = type { i8 }

@initEDP = external dso_local local_unnamed_addr global i8, align 1
@_ZL10EDPwarningB5cxx11 = external hidden global %"class.std::__cxx11::basic_string", align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [133 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [18 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 @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
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 nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #3

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEE(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, ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(40) %8) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca double, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca double, 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 %"class.std::__cxx11::list", align 8
  %51 = alloca %class.anon, align 8
  %52 = alloca %"struct.std::_List_iterator", align 8
  %53 = alloca %"struct.std::_List_iterator", align 8
  %54 = alloca i64, align 8
  %55 = alloca i64, align 8
  %56 = alloca i64, align 8
  %57 = alloca i64, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca i64, align 8
  %72 = alloca i64, align 8
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca i64, align 8
  %76 = alloca i64, align 8
  %77 = alloca i64, align 8
  %78 = alloca i64, align 8
  %79 = alloca i64, align 8
  %80 = alloca i64, align 8
  %81 = alloca i64, align 8
  %82 = alloca i64, align 8
  %83 = alloca i64, align 8
  %84 = alloca i64, align 8
  %85 = alloca i64, align 8
  %86 = alloca i64, align 8
  %87 = alloca i64, align 8
  %88 = alloca i64, align 8
  %89 = alloca i64, align 8
  %90 = alloca i64, align 8
  %91 = alloca i64, align 8
  %92 = alloca i64, align 8
  %93 = alloca i64, align 8
  %94 = alloca i64, align 8
  %95 = alloca i64, align 8
  %96 = alloca i64, align 8
  %97 = alloca i64, align 8
  %98 = alloca i64, align 8
  %99 = alloca i64, align 8
  %100 = alloca i64, align 8
  %101 = alloca i64, align 8
  %102 = alloca i64, align 8
  %103 = alloca i64, align 8
  %104 = alloca i64, align 8
  %105 = alloca i64, align 8
  %106 = alloca i64, align 8
  %107 = alloca i64, align 8
  %108 = alloca i64, align 8
  %109 = alloca i64, align 8
  %110 = alloca i64, align 8
  %111 = alloca i64, align 8
  %112 = alloca i64, align 8
  %113 = alloca i64, align 8
  %114 = alloca i64, align 8
  %115 = alloca i64, align 8
  %116 = alloca i64, align 8
  %117 = alloca i64, align 8
  %118 = alloca i64, align 8
  %119 = alloca i64, align 8
  %120 = alloca i64, align 8
  %121 = alloca i64, align 8
  %122 = alloca i64, align 8
  %123 = alloca i64, align 8
  %124 = alloca i64, align 8
  %125 = alloca i64, align 8
  %126 = alloca i64, align 8
  %127 = alloca i64, align 8
  %128 = alloca i64, align 8
  %129 = alloca i64, align 8
  %130 = alloca i64, align 8
  %131 = alloca i64, align 8
  %132 = alloca i64, align 8
  %133 = alloca i64, align 8
  %134 = alloca i64, align 8
  %135 = alloca i64, align 8
  %136 = alloca i64, align 8
  %137 = alloca i64, align 8
  %138 = alloca i64, align 8
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca i64, align 8
  %142 = alloca i64, align 8
  %143 = alloca i64, align 8
  %144 = alloca i64, align 8
  %145 = alloca i64, align 8
  %146 = alloca i64, align 8
  %147 = alloca i64, align 8
  %148 = alloca i64, align 8
  %149 = alloca i64, align 8
  %150 = alloca i64, align 8
  %151 = alloca i64, align 8
  %152 = alloca i64, align 8
  %153 = alloca i64, align 8
  %154 = alloca i64, align 8
  %155 = alloca i64, align 8
  %156 = alloca i64, align 8
  %157 = alloca i64, align 8
  %158 = alloca i64, align 8
  %159 = alloca i64, align 8
  %160 = alloca i64, align 8
  %161 = alloca i64, align 8
  %162 = alloca %"class.std::__cxx11::list", align 8
  %163 = alloca %class.anon.4, align 8
  %164 = alloca %"struct.std::_List_iterator", align 8
  %165 = alloca %"struct.std::_List_iterator", align 8
  %166 = alloca i64, align 8
  %167 = alloca i64, align 8
  %168 = alloca i64, align 8
  %169 = alloca i64, align 8
  %170 = alloca i64, align 8
  %171 = alloca i64, align 8
  %172 = alloca i64, align 8
  %173 = alloca i64, align 8
  %174 = alloca i64, align 8
  %175 = alloca i64, align 8
  %176 = alloca i64, align 8
  %177 = alloca i64, align 8
  %178 = alloca i64, align 8
  %179 = alloca i64, align 8
  %180 = alloca i64, align 8
  %181 = alloca i64, align 8
  %182 = alloca i64, align 8
  %183 = alloca i64, align 8
  %184 = alloca i64, align 8
  %185 = alloca i64, align 8
  %186 = alloca i64, align 8
  %187 = alloca i64, align 8
  %188 = alloca i64, align 8
  %189 = alloca i64, align 8
  %190 = alloca i64, align 8
  %191 = alloca i64, align 8
  %192 = alloca i64, align 8
  %193 = alloca i64, align 8
  %194 = alloca i64, align 8
  %195 = alloca i64, align 8
  %196 = alloca i64, align 8
  %197 = alloca i64, align 8
  %198 = alloca i64, align 8
  %199 = alloca i64, align 8
  %200 = alloca i64, align 8
  %201 = alloca i64, align 8
  %202 = alloca i64, align 8
  %203 = alloca i64, align 8
  %204 = alloca i64, align 8
  %205 = alloca i64, align 8
  %206 = alloca i64, align 8
  %207 = alloca i64, align 8
  %208 = alloca i64, align 8
  %209 = alloca i64, align 8
  %210 = alloca i64, align 8
  %211 = alloca i64, align 8
  %212 = alloca i64, align 8
  %213 = alloca i64, align 8
  %214 = alloca i64, align 8
  %215 = alloca i64, align 8
  %216 = alloca i64, align 8
  %217 = alloca i64, align 8
  %218 = alloca i64, align 8
  %219 = alloca i64, align 8
  %220 = alloca i64, align 8
  %221 = alloca i64, align 8
  %222 = alloca i64, align 8
  %223 = alloca i64, align 8
  %224 = alloca i64, align 8
  %225 = alloca i64, align 8
  %226 = alloca i64, align 8
  %227 = alloca i64, align 8
  %228 = alloca i64, align 8
  %229 = alloca i64, align 8
  %230 = alloca i64, align 8
  %231 = alloca i64, align 8
  %232 = alloca i64, align 8
  %233 = alloca i64, align 8
  %234 = alloca i64, align 8
  %235 = alloca i64, align 8
  %236 = alloca i64, align 8
  %237 = alloca i64, align 8
  %238 = alloca i64, align 8
  %239 = alloca i64, align 8
  %240 = alloca i64, align 8
  %241 = alloca i64, align 8
  %242 = alloca i64, align 8
  %243 = alloca i64, align 8
  %244 = alloca i64, align 8
  %245 = alloca i64, align 8
  %246 = alloca i64, align 8
  %247 = alloca i64, align 8
  %248 = alloca %"class.std::__cxx11::basic_string", align 8
  %249 = alloca %"class.std::__cxx11::basic_string", align 8
  %250 = alloca %"class.std::allocator", align 1
  %251 = alloca %"class.std::__cxx11::basic_string", align 8
  %252 = alloca %"class.std::allocator", align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #10
  %253 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5)
  %254 = trunc i64 %253 to i32
  store i32 %254, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #10
  %255 = tail call noundef i64 @_ZNK3cda4math10containers6VectorIdE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %256 = trunc i64 %255 to i32
  store i32 %256, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #10
  %sext581 = shl i64 %253, 32
  %257 = ashr exact i64 %sext581, 32
  store i64 %257, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  %sext = shl i64 %255, 32
  %258 = ashr exact i64 %sext, 32
  store i64 %258, ptr %13, align 8, !tbaa !9
  call void @_ZN3cda4math10containers6MatrixIdEC2ERKmS5_(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %259 = add nsw i32 %256, -1
  %260 = sext i32 %259 to i64
  store i64 %260, ptr %15, align 8, !tbaa !9
  %261 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %15)
  %262 = load double, ptr %261, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #10
  store i64 0, ptr %16, align 8, !tbaa !9
  %263 = 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)
  %264 = load double, ptr %263, align 8, !tbaa !11
  %265 = fsub double %262, %264
  %266 = sitofp i32 %259 to double
  %267 = fdiv double %265, %266
  %268 = fptosi double %267 to i32
  %269 = call i32 @llvm.abs.i32(i32 %268, i1 true)
  %270 = uitofp nneg i32 %269 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  store double %270, ptr %14, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #10
  %271 = add nsw i32 %254, -1
  %272 = sext i32 %271 to i64
  store i64 %272, ptr %18, align 8, !tbaa !9
  %273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %18)
  %274 = load double, ptr %273, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #10
  store i64 0, ptr %19, align 8, !tbaa !9
  %275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %19)
  %276 = load double, ptr %275, align 8, !tbaa !11
  %277 = fsub double %274, %276
  %278 = sitofp i32 %271 to double
  %279 = fdiv double %277, %278
  %280 = fptosi double %279 to i32
  %281 = call i32 @llvm.abs.i32(i32 %280, i1 true)
  %282 = uitofp nneg i32 %281 to double
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #10
  store double %282, ptr %17, align 8, !tbaa !11
  %283 = getelementptr inbounds i8, ptr %1, i64 248
  %284 = load double, ptr %283, align 8, !tbaa !13
  %285 = getelementptr inbounds i8, ptr %1, i64 264
  %286 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  store i64 0, ptr %20, align 8, !tbaa !9
  %287 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %20)
  %288 = load double, ptr %287, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  store i64 0, ptr %21, align 8, !tbaa !9
  %289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %21)
  %290 = load double, ptr %289, align 8, !tbaa !11
  %291 = invoke noundef double %286(double noundef %288, double noundef %290)
          to label %292 unwind label %327

292:                                              ; preds = %9
  %293 = fmul double %270, %282
  %294 = fmul double %282, %282
  %295 = call double @llvm.fmuladd.f64(double %270, double %270, double %294)
  %296 = fmul double %291, %295
  %297 = call double @sqrt(double noundef %296) #10
  %298 = fdiv double %293, %297
  %299 = fcmp ogt double %284, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br i1 %299, label %300, label %333

300:                                              ; preds = %292
  %301 = load double, ptr %14, align 8, !tbaa !11
  %302 = load double, ptr %17, align 8, !tbaa !11
  %303 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #10
  store i64 0, ptr %22, align 8, !tbaa !9
  %304 = 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)
  %305 = load double, ptr %304, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #10
  store i64 0, ptr %23, align 8, !tbaa !9
  %306 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %23)
  %307 = load double, ptr %306, align 8, !tbaa !11
  %308 = invoke noundef double %303(double noundef %305, double noundef %307)
          to label %309 unwind label %329

309:                                              ; preds = %300
  %310 = fmul double %301, %302
  %311 = load double, ptr %14, align 8, !tbaa !11
  %312 = load double, ptr %17, align 8, !tbaa !11
  %313 = fmul double %312, %312
  %314 = call double @llvm.fmuladd.f64(double %311, double %311, double %313)
  %315 = fmul double %308, %314
  %316 = call double @sqrt(double noundef %315) #10
  %317 = fdiv double %310, %316
  %318 = fmul double %317, 9.000000e-01
  store double %318, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(32) @_ZL10EDPwarningB5cxx11)
          to label %320 unwind label %331

320:                                              ; preds = %309
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %319, ptr noundef nonnull @.str.10)
          to label %322 unwind label %331

322:                                              ; preds = %320
  %323 = load double, ptr %283, align 8, !tbaa !13
  %324 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %321, double noundef %323)
          to label %325 unwind label %331

325:                                              ; preds = %322
  %326 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %324, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %333 unwind label %331

327:                                              ; preds = %9
  %328 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br label %2169

329:                                              ; preds = %300
  %330 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  br label %2169

331:                                              ; preds = %2151, %2147, %338, %333, %325, %322, %320, %309
  %332 = landingpad { ptr, i32 }
          cleanup
  br label %2169

333:                                              ; preds = %325, %292
  %334 = 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 %335 unwind label %331

335:                                              ; preds = %333
  %336 = load i8, ptr @initEDP, align 1, !tbaa !22, !range !24, !noundef !25
  %337 = trunc nuw i8 %336 to i1
  br i1 %337, label %1248, label %338

338:                                              ; preds = %335
  store i8 1, ptr @initEDP, align 1, !tbaa !22
  %339 = getelementptr inbounds i8, ptr %1, i64 24
  invoke void @_ZN3cda4math10containers6MatrixIdE4zeroEv(ptr noundef nonnull align 8 dereferenceable(40) %339)
          to label %340 unwind label %331

340:                                              ; preds = %338
  %341 = zext i8 %2 to i32
  %342 = and i32 %341, 64
  %.not = icmp ne i32 %342, 0
  %343 = load i32, ptr %11, align 4
  %344 = icmp sgt i32 %343, 2
  %or.cond = select i1 %.not, i1 %344, i1 false
  br i1 %or.cond, label %.lr.ph, label %.loopexit532

.lr.ph:                                           ; preds = %340
  %345 = getelementptr inbounds i8, ptr %1, i64 176
  br label %346

346:                                              ; preds = %.lr.ph, %420
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %420 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #10
  store i64 0, ptr %24, align 8, !tbaa !9
  %347 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %24)
  %348 = getelementptr inbounds i8, ptr %347, i64 %indvars.iv
  %349 = load i8, ptr %348, align 1, !tbaa !22, !range !24, !noundef !25
  %350 = trunc nuw i8 %349 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #10
  br i1 %350, label %420, label %351

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  store i64 0, ptr %25, align 8, !tbaa !9
  %352 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %25)
  %353 = getelementptr inbounds double, ptr %352, i64 %indvars.iv
  %354 = load double, ptr %353, align 8, !tbaa !11
  %355 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  store i64 0, ptr %26, align 8, !tbaa !9
  %356 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %26)
  %357 = getelementptr inbounds double, ptr %356, i64 %indvars.iv
  %358 = load double, ptr %357, align 8, !tbaa !11
  %359 = call double @llvm.fmuladd.f64(double %355, double %358, double %354)
  %360 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #10
  store i64 %indvars.iv, ptr %27, align 8, !tbaa !9
  %361 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %27)
  %362 = load double, ptr %361, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #10
  store i64 0, ptr %28, align 8, !tbaa !9
  %363 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %28)
  %364 = load double, ptr %363, align 8, !tbaa !11
  %365 = invoke noundef double %360(double noundef %362, double noundef %364)
          to label %366 unwind label %415

366:                                              ; preds = %351
  %367 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #10
  store i64 1, ptr %29, align 8, !tbaa !9
  %368 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %29)
  %369 = getelementptr inbounds double, ptr %368, i64 %indvars.iv
  %370 = load double, ptr %369, align 8, !tbaa !11
  %371 = load double, ptr %17, align 8, !tbaa !11
  %372 = load ptr, ptr %345, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #10
  store i64 %indvars.iv, ptr %30, align 8, !tbaa !9
  %373 = 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)
  %374 = load double, ptr %373, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #10
  store i64 0, ptr %31, align 8, !tbaa !9
  %375 = 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)
  %376 = load double, ptr %375, align 8, !tbaa !11
  %377 = invoke noundef double %372(double noundef %374, double noundef %376)
          to label %378 unwind label %417

378:                                              ; preds = %366
  %379 = fmul double %365, %367
  %380 = fmul double %367, %379
  %381 = fmul double %380, 5.000000e-01
  %382 = fmul double %371, -2.000000e+00
  %383 = fmul double %382, %377
  %384 = call double @llvm.fmuladd.f64(double %370, double 2.000000e+00, double %383)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #10
  store i64 0, ptr %32, align 8, !tbaa !9
  %385 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %32)
  %386 = getelementptr inbounds double, ptr %385, i64 %indvars.iv
  %387 = load double, ptr %386, align 8, !tbaa !11
  %388 = call double @llvm.fmuladd.f64(double %387, double -2.000000e+00, double %384)
  %389 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  store i64 0, ptr %33, align 8, !tbaa !9
  %390 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %33)
  %391 = getelementptr inbounds double, ptr %390, i64 %indvars.iv
  %392 = getelementptr inbounds i8, ptr %391, i64 8
  %393 = load double, ptr %392, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  store i64 0, ptr %34, align 8, !tbaa !9
  %394 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %34)
  %395 = getelementptr inbounds double, ptr %394, i64 %indvars.iv
  %396 = load double, ptr %395, align 8, !tbaa !11
  %397 = call double @llvm.fmuladd.f64(double %396, double -2.000000e+00, double %393)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #10
  store i64 0, ptr %35, align 8, !tbaa !9
  %398 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %35)
  %399 = getelementptr double, ptr %398, i64 %indvars.iv
  %400 = getelementptr i8, ptr %399, i64 -8
  %401 = load double, ptr %400, align 8, !tbaa !11
  %402 = fadd double %397, %401
  %403 = load double, ptr %14, align 8, !tbaa !11
  %404 = insertelement <2 x double> poison, double %389, i64 0
  %405 = insertelement <2 x double> %404, double %403, i64 1
  %406 = fmul <2 x double> %405, %405
  %407 = insertelement <2 x double> poison, double %388, i64 0
  %408 = insertelement <2 x double> %407, double %402, i64 1
  %409 = fdiv <2 x double> %408, %406
  %shift = shufflevector <2 x double> %409, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %410 = fadd <2 x double> %409, %shift
  %411 = extractelement <2 x double> %410, i64 0
  %412 = call double @llvm.fmuladd.f64(double %381, double %411, double %359)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #10
  store i64 0, ptr %36, align 8, !tbaa !9
  %413 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %36)
  %414 = getelementptr inbounds double, ptr %413, i64 %indvars.iv
  store double %412, ptr %414, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %420

415:                                              ; preds = %351
  %416 = landingpad { ptr, i32 }
          cleanup
  br label %419

417:                                              ; preds = %366
  %418 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  br label %419

419:                                              ; preds = %417, %415
  %.pn478 = phi { ptr, i32 } [ %418, %417 ], [ %416, %415 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %2169

420:                                              ; preds = %346, %378
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %421 = load i32, ptr %11, align 4, !tbaa !5
  %422 = add nsw i32 %421, -1
  %423 = sext i32 %422 to i64
  %424 = icmp slt i64 %indvars.iv.next, %423
  br i1 %424, label %346, label %.loopexit532, !llvm.loop !27

.loopexit532:                                     ; preds = %420, %340
  %425 = and i32 %341, 16
  %.not451 = icmp eq i32 %425, 0
  %426 = load i32, ptr %10, align 4
  %427 = icmp slt i32 %426, 3
  %or.cond624.not = select i1 %.not451, i1 true, i1 %427
  br i1 %or.cond624.not, label %.loopexit530, label %.lr.ph552

.lr.ph552:                                        ; preds = %.loopexit532
  %428 = getelementptr inbounds i8, ptr %1, i64 160
  br label %429

429:                                              ; preds = %.lr.ph552, %495
  %indvars.iv585 = phi i64 [ 1, %.lr.ph552 ], [ %indvars.iv.next586.pre-phi, %495 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #10
  store i64 %indvars.iv585, ptr %37, align 8, !tbaa !9
  %430 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %37)
  %431 = load i8, ptr %430, align 1, !tbaa !22, !range !24, !noundef !25
  %432 = trunc nuw i8 %431 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  br i1 %432, label %._crit_edge614, label %433

._crit_edge614:                                   ; preds = %429
  %.pre621 = add nuw nsw i64 %indvars.iv585, 1
  br label %495

433:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #10
  store i64 %indvars.iv585, ptr %38, align 8, !tbaa !9
  %434 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %38)
  %435 = load double, ptr %434, align 8, !tbaa !11
  %436 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %39) #10
  store i64 %indvars.iv585, ptr %39, align 8, !tbaa !9
  %437 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %39)
  %438 = load double, ptr %437, align 8, !tbaa !11
  %439 = call double @llvm.fmuladd.f64(double %436, double %438, double %435)
  %440 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #10
  store i64 0, ptr %40, align 8, !tbaa !9
  %441 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %40)
  %442 = load double, ptr %441, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #10
  store i64 %indvars.iv585, ptr %41, align 8, !tbaa !9
  %443 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %444 = load double, ptr %443, align 8, !tbaa !11
  %445 = invoke noundef double %440(double noundef %442, double noundef %444)
          to label %446 unwind label %490

446:                                              ; preds = %433
  %447 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #10
  %448 = add nuw nsw i64 %indvars.iv585, 1
  store i64 %448, ptr %42, align 8, !tbaa !9
  %449 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %42)
  %450 = load double, ptr %449, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #10
  store i64 %indvars.iv585, ptr %43, align 8, !tbaa !9
  %451 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %43)
  %452 = load double, ptr %451, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #10
  %453 = add nsw i64 %indvars.iv585, -1
  store i64 %453, ptr %44, align 8, !tbaa !9
  %454 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %44)
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #10
  store i64 %indvars.iv585, ptr %45, align 8, !tbaa !9
  %457 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %45)
  %458 = getelementptr inbounds i8, ptr %457, i64 8
  %459 = load double, ptr %458, align 8, !tbaa !11
  %460 = load double, ptr %14, align 8, !tbaa !11
  %461 = load ptr, ptr %428, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #10
  store i64 0, ptr %46, align 8, !tbaa !9
  %462 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %46)
  %463 = load double, ptr %462, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #10
  store i64 %indvars.iv585, ptr %47, align 8, !tbaa !9
  %464 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %47)
  %465 = load double, ptr %464, align 8, !tbaa !11
  %466 = invoke noundef double %461(double noundef %463, double noundef %465)
          to label %467 unwind label %492

467:                                              ; preds = %446
  %468 = call double @llvm.fmuladd.f64(double %452, double -2.000000e+00, double %450)
  %469 = fadd double %468, %455
  %470 = fmul double %445, %447
  %471 = fmul double %447, %470
  %472 = fmul double %471, 5.000000e-01
  %473 = fmul double %460, -2.000000e+00
  %474 = fmul double %473, %466
  %475 = call double @llvm.fmuladd.f64(double %459, double 2.000000e+00, double %474)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #10
  store i64 %indvars.iv585, ptr %48, align 8, !tbaa !9
  %476 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %48)
  %477 = load double, ptr %476, align 8, !tbaa !11
  %478 = call double @llvm.fmuladd.f64(double %477, double -2.000000e+00, double %475)
  %479 = load double, ptr %14, align 8, !tbaa !11
  %480 = insertelement <2 x double> poison, double %456, i64 0
  %481 = insertelement <2 x double> %480, double %479, i64 1
  %482 = fmul <2 x double> %481, %481
  %483 = insertelement <2 x double> poison, double %469, i64 0
  %484 = insertelement <2 x double> %483, double %478, i64 1
  %485 = fdiv <2 x double> %484, %482
  %shift643 = shufflevector <2 x double> %485, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %486 = fadd <2 x double> %485, %shift643
  %487 = extractelement <2 x double> %486, i64 0
  %488 = call double @llvm.fmuladd.f64(double %472, double %487, double %439)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #10
  store i64 %indvars.iv585, ptr %49, align 8, !tbaa !9
  %489 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %49)
  store double %488, ptr %489, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #10
  br label %495

490:                                              ; preds = %433
  %491 = landingpad { ptr, i32 }
          cleanup
  br label %494

492:                                              ; preds = %446
  %493 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #10
  br label %494

494:                                              ; preds = %492, %490
  %.pn476 = phi { ptr, i32 } [ %493, %492 ], [ %491, %490 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #10
  br label %2169

495:                                              ; preds = %._crit_edge614, %467
  %indvars.iv.next586.pre-phi = phi i64 [ %.pre621, %._crit_edge614 ], [ %448, %467 ]
  %496 = load i32, ptr %10, align 4, !tbaa !5
  %497 = add nsw i32 %496, -1
  %498 = sext i32 %497 to i64
  %499 = icmp slt i64 %indvars.iv.next586.pre-phi, %498
  br i1 %499, label %429, label %.loopexit530, !llvm.loop !30

.loopexit530:                                     ; preds = %495, %.loopexit532
  %500 = call noundef i32 @_ZNSt6thread20hardware_concurrencyEv() #10
  %501 = zext i32 %500 to i64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %50) #10
  call void @_ZNSt7__cxx114listISt6threadSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  %502 = load i32, ptr %10, align 4, !tbaa !5
  %503 = add nsw i32 %502, -1
  %504 = sext i32 %503 to i64
  %505 = udiv i64 %504, %501
  %506 = trunc i64 %505 to i32
  %.not582 = icmp eq i32 %500, 0
  br i1 %.not582, label %._crit_edge, label %.lr.ph556

.lr.ph556:                                        ; preds = %.loopexit530
  %507 = add nsw i64 %501, -1
  %508 = getelementptr inbounds i8, ptr %51, i64 4
  %509 = getelementptr inbounds i8, ptr %51, i64 8
  %510 = getelementptr inbounds i8, ptr %51, i64 16
  %511 = getelementptr inbounds i8, ptr %51, i64 20
  %512 = getelementptr inbounds i8, ptr %51, i64 24
  %513 = getelementptr inbounds i8, ptr %51, i64 64
  %514 = getelementptr inbounds i8, ptr %51, i64 72
  %515 = getelementptr inbounds i8, ptr %51, i64 112
  %516 = getelementptr inbounds i8, ptr %51, i64 152
  %517 = getelementptr inbounds i8, ptr %51, i64 176
  %518 = getelementptr inbounds i8, ptr %51, i64 200
  %519 = getelementptr inbounds i8, ptr %51, i64 208
  br label %523

._crit_edge:                                      ; preds = %541, %.loopexit530
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #10
  %520 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  store ptr %520, ptr %52, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #10
  %521 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  store ptr %521, ptr %53, align 8
  %522 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  br i1 %522, label %.lr.ph558, label %._crit_edge559

523:                                              ; preds = %.lr.ph556, %541
  %indvars.iv588 = phi i64 [ 0, %.lr.ph556 ], [ %indvars.iv.next589, %541 ]
  %.0443555 = phi i32 [ 1, %.lr.ph556 ], [ %.1446, %541 ]
  %.0445553 = phi i32 [ %506, %.lr.ph556 ], [ %542, %541 ]
  %524 = icmp eq i64 %507, %indvars.iv588
  %.pre = load i32, ptr %10, align 4, !tbaa !5
  br i1 %524, label %525, label %531

525:                                              ; preds = %523
  %526 = add nsw i32 %.pre, -1
  %527 = sext i32 %526 to i64
  %528 = urem i64 %527, %501
  %529 = trunc nuw i64 %528 to i32
  %530 = add i32 %.0445553, %529
  br label %531

531:                                              ; preds = %525, %523
  %.1446 = phi i32 [ %530, %525 ], [ %.0445553, %523 ]
  call void @llvm.lifetime.start.p0(i64 216, ptr nonnull %51) #10
  store i32 %.0443555, ptr %51, align 8, !tbaa !31
  store i32 %.1446, ptr %508, align 4, !tbaa !33
  store ptr %1, ptr %509, align 8, !tbaa !34
  store i32 %.pre, ptr %510, align 8, !tbaa !35
  %532 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %532, ptr %511, align 4, !tbaa !36
  invoke void @_ZN3cda4math10containers6MatrixIbEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %512, ptr noundef nonnull align 8 dereferenceable(40) %8)
          to label %533 unwind label %543

533:                                              ; preds = %531
  store ptr %0, ptr %513, align 8, !tbaa !37
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %514, ptr noundef nonnull align 8 dereferenceable(40) %6)
          to label %534 unwind label %545

534:                                              ; preds = %533
  invoke void @_ZN3cda4math10containers6MatrixIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(40) %515, ptr noundef nonnull align 8 dereferenceable(40) %7)
          to label %535 unwind label %547

535:                                              ; preds = %534
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %516, ptr noundef nonnull align 8 dereferenceable(24) %4)
          to label %536 unwind label %549

536:                                              ; preds = %535
  invoke void @_ZN3cda4math10containers6VectorIdEC2ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %517, ptr noundef nonnull align 8 dereferenceable(24) %5)
          to label %537 unwind label %551

537:                                              ; preds = %536
  %538 = load double, ptr %14, align 8, !tbaa !11
  store double %538, ptr %518, align 8, !tbaa !38
  %539 = load double, ptr %17, align 8, !tbaa !11
  store double %539, ptr %519, align 8, !tbaa !39
  %540 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_0EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %50, ptr noundef nonnull align 8 dereferenceable(216) %51)
          to label %541 unwind label %556

541:                                              ; preds = %537
  call void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216) %51) #10
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %51) #10
  %542 = add nsw i32 %.1446, %506
  %indvars.iv.next589 = add nuw nsw i64 %indvars.iv588, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next589, %501
  br i1 %exitcond.not, label %._crit_edge, label %523, !llvm.loop !40

543:                                              ; preds = %531
  %544 = landingpad { ptr, i32 }
          cleanup
  br label %558

545:                                              ; preds = %533
  %546 = landingpad { ptr, i32 }
          cleanup
  br label %555

547:                                              ; preds = %534
  %548 = landingpad { ptr, i32 }
          cleanup
  br label %554

549:                                              ; preds = %535
  %550 = landingpad { ptr, i32 }
          cleanup
  br label %553

551:                                              ; preds = %536
  %552 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3cda4math10containers6VectorIdED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %516) #10
  br label %553

553:                                              ; preds = %551, %549
  %.pn469 = phi { ptr, i32 } [ %552, %551 ], [ %550, %549 ]
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %515) #10
  br label %554

554:                                              ; preds = %553, %547
  %.pn469.pn = phi { ptr, i32 } [ %.pn469, %553 ], [ %548, %547 ]
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %514) #10
  br label %555

555:                                              ; preds = %554, %545
  %.pn469.pn.pn = phi { ptr, i32 } [ %.pn469.pn, %554 ], [ %546, %545 ]
  call void @_ZN3cda4math10containers6MatrixIbED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %512) #10
  br label %558

556:                                              ; preds = %537
  %557 = landingpad { ptr, i32 }
          cleanup
  call void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216) %51) #10
  br label %558

558:                                              ; preds = %556, %555, %543
  %.pn473 = phi { ptr, i32 } [ %557, %556 ], [ %.pn469.pn.pn, %555 ], [ %544, %543 ]
  call void @llvm.lifetime.end.p0(i64 216, ptr nonnull %51) #10
  br label %1247

._crit_edge559:                                   ; preds = %564, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #10
  %559 = and i32 %341, 32
  %.not452 = icmp eq i32 %559, 0
  %560 = load i32, ptr %10, align 4
  %561 = icmp slt i32 %560, 3
  %or.cond626.not = select i1 %.not452, i1 true, i1 %561
  br i1 %or.cond626.not, label %.loopexit528, label %.lr.ph561

.lr.ph561:                                        ; preds = %._crit_edge559
  %562 = getelementptr inbounds i8, ptr %1, i64 168
  br label %569

.lr.ph558:                                        ; preds = %._crit_edge, %564
  %563 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt14_List_iteratorISt6threadEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #10
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %563)
          to label %564 unwind label %567

564:                                              ; preds = %.lr.ph558
  %565 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt6threadEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #10
  %566 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  br i1 %566, label %.lr.ph558, label %._crit_edge559

567:                                              ; preds = %.lr.ph558
  %568 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #10
  br label %1247

569:                                              ; preds = %.lr.ph561, %674
  %indvars.iv591 = phi i64 [ 1, %.lr.ph561 ], [ %indvars.iv.next592.pre-phi, %674 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #10
  store i64 %indvars.iv591, ptr %54, align 8, !tbaa !9
  %570 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %54)
  %571 = load i32, ptr %11, align 4, !tbaa !5
  %572 = sext i32 %571 to i64
  %573 = getelementptr i8, ptr %570, i64 %572
  %574 = getelementptr i8, ptr %573, i64 -1
  %575 = load i8, ptr %574, align 1, !tbaa !22, !range !24, !noundef !25
  %576 = trunc nuw i8 %575 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #10
  br i1 %576, label %._crit_edge615, label %577

._crit_edge615:                                   ; preds = %569
  %.pre620 = add nuw nsw i64 %indvars.iv591, 1
  br label %674

577:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #10
  store i64 %indvars.iv591, ptr %55, align 8, !tbaa !9
  %578 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %55)
  %579 = load i32, ptr %11, align 4, !tbaa !5
  %580 = sext i32 %579 to i64
  %581 = getelementptr double, ptr %578, i64 %580
  %582 = getelementptr i8, ptr %581, i64 -8
  %583 = load double, ptr %582, align 8, !tbaa !11
  %584 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #10
  store i64 %indvars.iv591, ptr %56, align 8, !tbaa !9
  %585 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %56)
  %586 = load i32, ptr %11, align 4, !tbaa !5
  %587 = sext i32 %586 to i64
  %588 = getelementptr double, ptr %585, i64 %587
  %589 = getelementptr i8, ptr %588, i64 -8
  %590 = load double, ptr %589, align 8, !tbaa !11
  %591 = call double @llvm.fmuladd.f64(double %584, double %590, double %583)
  %592 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #10
  %593 = add nsw i32 %586, -1
  %594 = sext i32 %593 to i64
  store i64 %594, ptr %57, align 8, !tbaa !9
  %595 = 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)
  %596 = load double, ptr %595, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #10
  store i64 %indvars.iv591, ptr %58, align 8, !tbaa !9
  %597 = 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)
  %598 = load double, ptr %597, align 8, !tbaa !11
  %599 = invoke noundef double %592(double noundef %596, double noundef %598)
          to label %600 unwind label %669

600:                                              ; preds = %577
  %601 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #10
  %602 = add nuw nsw i64 %indvars.iv591, 1
  store i64 %602, ptr %59, align 8, !tbaa !9
  %603 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %59)
  %604 = load i32, ptr %11, align 4, !tbaa !5
  %605 = sext i32 %604 to i64
  %606 = getelementptr double, ptr %603, i64 %605
  %607 = getelementptr i8, ptr %606, i64 -8
  %608 = load double, ptr %607, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #10
  store i64 %indvars.iv591, ptr %60, align 8, !tbaa !9
  %609 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %60)
  %610 = load i32, ptr %11, align 4, !tbaa !5
  %611 = sext i32 %610 to i64
  %612 = getelementptr double, ptr %609, i64 %611
  %613 = getelementptr i8, ptr %612, i64 -8
  %614 = load double, ptr %613, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %61) #10
  %615 = add nsw i64 %indvars.iv591, -1
  store i64 %615, ptr %61, align 8, !tbaa !9
  %616 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %61)
  %617 = load i32, ptr %11, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr double, ptr %616, i64 %618
  %620 = getelementptr i8, ptr %619, i64 -8
  %621 = load double, ptr %620, align 8, !tbaa !11
  %622 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #10
  store i64 %indvars.iv591, ptr %62, align 8, !tbaa !9
  %623 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %62)
  %624 = load i32, ptr %11, align 4, !tbaa !5
  %625 = sext i32 %624 to i64
  %626 = getelementptr double, ptr %623, i64 %625
  %627 = getelementptr i8, ptr %626, i64 -16
  %628 = load double, ptr %627, align 8, !tbaa !11
  %629 = load double, ptr %14, align 8, !tbaa !11
  %630 = load ptr, ptr %562, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #10
  %631 = add nsw i32 %624, -1
  %632 = sext i32 %631 to i64
  store i64 %632, ptr %63, align 8, !tbaa !9
  %633 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %63)
  %634 = load double, ptr %633, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #10
  store i64 %indvars.iv591, ptr %64, align 8, !tbaa !9
  %635 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %64)
  %636 = load double, ptr %635, align 8, !tbaa !11
  %637 = invoke noundef double %630(double noundef %634, double noundef %636)
          to label %638 unwind label %671

638:                                              ; preds = %600
  %639 = fmul double %629, 2.000000e+00
  %640 = call double @llvm.fmuladd.f64(double %614, double -2.000000e+00, double %608)
  %641 = fadd double %640, %621
  %642 = fmul double %599, %601
  %643 = fmul double %601, %642
  %644 = fmul double %643, 5.000000e-01
  %645 = fmul double %639, %637
  %646 = call double @llvm.fmuladd.f64(double %628, double 2.000000e+00, double %645)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #10
  store i64 %indvars.iv591, ptr %65, align 8, !tbaa !9
  %647 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %65)
  %648 = load i32, ptr %11, align 4, !tbaa !5
  %649 = sext i32 %648 to i64
  %650 = getelementptr double, ptr %647, i64 %649
  %651 = getelementptr i8, ptr %650, i64 -8
  %652 = load double, ptr %651, align 8, !tbaa !11
  %653 = call double @llvm.fmuladd.f64(double %652, double -2.000000e+00, double %646)
  %654 = load double, ptr %14, align 8, !tbaa !11
  %655 = insertelement <2 x double> poison, double %622, i64 0
  %656 = insertelement <2 x double> %655, double %654, i64 1
  %657 = fmul <2 x double> %656, %656
  %658 = insertelement <2 x double> poison, double %641, i64 0
  %659 = insertelement <2 x double> %658, double %653, i64 1
  %660 = fdiv <2 x double> %659, %657
  %shift644 = shufflevector <2 x double> %660, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %661 = fadd <2 x double> %660, %shift644
  %662 = extractelement <2 x double> %661, i64 0
  %663 = call double @llvm.fmuladd.f64(double %644, double %662, double %591)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #10
  store i64 %indvars.iv591, ptr %66, align 8, !tbaa !9
  %664 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %66)
  %665 = load i32, ptr %11, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr double, ptr %664, i64 %666
  %668 = getelementptr i8, ptr %667, i64 -8
  store double %663, ptr %668, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #10
  br label %674

669:                                              ; preds = %577
  %670 = landingpad { ptr, i32 }
          cleanup
  br label %673

671:                                              ; preds = %600
  %672 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %61) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #10
  br label %673

673:                                              ; preds = %671, %669
  %.pn467 = phi { ptr, i32 } [ %672, %671 ], [ %670, %669 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #10
  br label %1247

674:                                              ; preds = %._crit_edge615, %638
  %indvars.iv.next592.pre-phi = phi i64 [ %.pre620, %._crit_edge615 ], [ %602, %638 ]
  %675 = load i32, ptr %10, align 4, !tbaa !5
  %676 = add nsw i32 %675, -1
  %677 = sext i32 %676 to i64
  %678 = icmp slt i64 %indvars.iv.next592.pre-phi, %677
  br i1 %678, label %569, label %.loopexit528, !llvm.loop !42

.loopexit528:                                     ; preds = %674, %._crit_edge559
  %.not453 = icmp sgt i8 %2, -1
  %679 = load i32, ptr %11, align 4
  %680 = icmp slt i32 %679, 3
  %or.cond628.not = select i1 %.not453, i1 true, i1 %680
  br i1 %or.cond628.not, label %.loopexit526, label %.lr.ph563

.lr.ph563:                                        ; preds = %.loopexit528
  %681 = getelementptr inbounds i8, ptr %1, i64 184
  br label %682

682:                                              ; preds = %.lr.ph563, %789
  %indvars.iv594 = phi i64 [ 1, %.lr.ph563 ], [ %indvars.iv.next595, %789 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #10
  %683 = load i32, ptr %10, align 4, !tbaa !5
  %684 = add nsw i32 %683, -1
  %685 = sext i32 %684 to i64
  store i64 %685, ptr %67, align 8, !tbaa !9
  %686 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %67)
  %687 = getelementptr inbounds i8, ptr %686, i64 %indvars.iv594
  %688 = load i8, ptr %687, align 1, !tbaa !22, !range !24, !noundef !25
  %689 = trunc nuw i8 %688 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #10
  br i1 %689, label %789, label %690

690:                                              ; preds = %682
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #10
  %691 = load i32, ptr %10, align 4, !tbaa !5
  %692 = add nsw i32 %691, -1
  %693 = sext i32 %692 to i64
  store i64 %693, ptr %68, align 8, !tbaa !9
  %694 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %68)
  %695 = getelementptr inbounds double, ptr %694, i64 %indvars.iv594
  %696 = load double, ptr %695, align 8, !tbaa !11
  %697 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #10
  %698 = load i32, ptr %10, align 4, !tbaa !5
  %699 = add nsw i32 %698, -1
  %700 = sext i32 %699 to i64
  store i64 %700, ptr %69, align 8, !tbaa !9
  %701 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %69)
  %702 = getelementptr inbounds double, ptr %701, i64 %indvars.iv594
  %703 = load double, ptr %702, align 8, !tbaa !11
  %704 = call double @llvm.fmuladd.f64(double %697, double %703, double %696)
  %705 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #10
  store i64 %indvars.iv594, ptr %70, align 8, !tbaa !9
  %706 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %70)
  %707 = load double, ptr %706, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #10
  %708 = load i32, ptr %10, align 4, !tbaa !5
  %709 = add nsw i32 %708, -1
  %710 = sext i32 %709 to i64
  store i64 %710, ptr %71, align 8, !tbaa !9
  %711 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %71)
  %712 = load double, ptr %711, align 8, !tbaa !11
  %713 = invoke noundef double %705(double noundef %707, double noundef %712)
          to label %714 unwind label %784

714:                                              ; preds = %690
  %715 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #10
  %716 = load i32, ptr %10, align 4, !tbaa !5
  %717 = add nsw i32 %716, -2
  %718 = sext i32 %717 to i64
  store i64 %718, ptr %72, align 8, !tbaa !9
  %719 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %72)
  %720 = getelementptr inbounds double, ptr %719, i64 %indvars.iv594
  %721 = load double, ptr %720, align 8, !tbaa !11
  %722 = load double, ptr %17, align 8, !tbaa !11
  %723 = load ptr, ptr %681, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #10
  store i64 %indvars.iv594, ptr %73, align 8, !tbaa !9
  %724 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %73)
  %725 = load double, ptr %724, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #10
  %726 = load i32, ptr %10, align 4, !tbaa !5
  %727 = add nsw i32 %726, -1
  %728 = sext i32 %727 to i64
  store i64 %728, ptr %74, align 8, !tbaa !9
  %729 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %74)
  %730 = load double, ptr %729, align 8, !tbaa !11
  %731 = invoke noundef double %723(double noundef %725, double noundef %730)
          to label %732 unwind label %786

732:                                              ; preds = %714
  %733 = fmul double %722, 2.000000e+00
  %734 = fmul double %713, %715
  %735 = fmul double %715, %734
  %736 = fmul double %735, 5.000000e-01
  %737 = fmul double %733, %731
  %738 = call double @llvm.fmuladd.f64(double %721, double 2.000000e+00, double %737)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %75) #10
  %739 = load i32, ptr %10, align 4, !tbaa !5
  %740 = add nsw i32 %739, -1
  %741 = sext i32 %740 to i64
  store i64 %741, ptr %75, align 8, !tbaa !9
  %742 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %75)
  %743 = getelementptr inbounds double, ptr %742, i64 %indvars.iv594
  %744 = load double, ptr %743, align 8, !tbaa !11
  %745 = call double @llvm.fmuladd.f64(double %744, double -2.000000e+00, double %738)
  %746 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %76) #10
  %747 = load i32, ptr %10, align 4, !tbaa !5
  %748 = add nsw i32 %747, -1
  %749 = sext i32 %748 to i64
  store i64 %749, ptr %76, align 8, !tbaa !9
  %750 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %76)
  %751 = getelementptr inbounds double, ptr %750, i64 %indvars.iv594
  %752 = getelementptr inbounds i8, ptr %751, i64 8
  %753 = load double, ptr %752, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #10
  %754 = load i32, ptr %10, align 4, !tbaa !5
  %755 = add nsw i32 %754, -1
  %756 = sext i32 %755 to i64
  store i64 %756, ptr %77, align 8, !tbaa !9
  %757 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %77)
  %758 = getelementptr inbounds double, ptr %757, i64 %indvars.iv594
  %759 = load double, ptr %758, align 8, !tbaa !11
  %760 = call double @llvm.fmuladd.f64(double %759, double -2.000000e+00, double %753)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #10
  %761 = load i32, ptr %10, align 4, !tbaa !5
  %762 = add nsw i32 %761, -1
  %763 = sext i32 %762 to i64
  store i64 %763, ptr %78, align 8, !tbaa !9
  %764 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %78)
  %765 = getelementptr double, ptr %764, i64 %indvars.iv594
  %766 = getelementptr i8, ptr %765, i64 -8
  %767 = load double, ptr %766, align 8, !tbaa !11
  %768 = fadd double %760, %767
  %769 = load double, ptr %14, align 8, !tbaa !11
  %770 = insertelement <2 x double> poison, double %746, i64 0
  %771 = insertelement <2 x double> %770, double %769, i64 1
  %772 = fmul <2 x double> %771, %771
  %773 = insertelement <2 x double> poison, double %745, i64 0
  %774 = insertelement <2 x double> %773, double %768, i64 1
  %775 = fdiv <2 x double> %774, %772
  %shift645 = shufflevector <2 x double> %775, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %776 = fadd <2 x double> %775, %shift645
  %777 = extractelement <2 x double> %776, i64 0
  %778 = call double @llvm.fmuladd.f64(double %736, double %777, double %704)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #10
  %779 = load i32, ptr %10, align 4, !tbaa !5
  %780 = add nsw i32 %779, -1
  %781 = sext i32 %780 to i64
  store i64 %781, ptr %79, align 8, !tbaa !9
  %782 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %79)
  %783 = getelementptr inbounds double, ptr %782, i64 %indvars.iv594
  store double %778, ptr %783, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %76) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %75) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #10
  br label %789

784:                                              ; preds = %690
  %785 = landingpad { ptr, i32 }
          cleanup
  br label %788

786:                                              ; preds = %714
  %787 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #10
  br label %788

788:                                              ; preds = %786, %784
  %.pn465 = phi { ptr, i32 } [ %787, %786 ], [ %785, %784 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #10
  br label %1247

789:                                              ; preds = %682, %732
  %indvars.iv.next595 = add nuw nsw i64 %indvars.iv594, 1
  %790 = load i32, ptr %11, align 4, !tbaa !5
  %791 = add nsw i32 %790, -1
  %792 = sext i32 %791 to i64
  %793 = icmp slt i64 %indvars.iv.next595, %792
  br i1 %793, label %682, label %.loopexit526, !llvm.loop !44

.loopexit526:                                     ; preds = %789, %.loopexit528
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #10
  %794 = and i32 %341, 80
  %brmerge.not = icmp eq i32 %794, 80
  br i1 %brmerge.not, label %795, label %.critedge

795:                                              ; preds = %.loopexit526
  store i64 0, ptr %80, align 8, !tbaa !9
  %796 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %80)
  %797 = load i8, ptr %796, align 1, !tbaa !22, !range !24, !noundef !25
  %798 = trunc nuw i8 %797 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #10
  br i1 %798, label %872, label %799

799:                                              ; preds = %795
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #10
  store i64 0, ptr %81, align 8, !tbaa !9
  %800 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %81)
  %801 = load double, ptr %800, align 8, !tbaa !11
  %802 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #10
  store i64 0, ptr %82, align 8, !tbaa !9
  %803 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %82)
  %804 = load double, ptr %803, align 8, !tbaa !11
  %805 = call double @llvm.fmuladd.f64(double %802, double %804, double %801)
  %806 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %83) #10
  store i64 0, ptr %83, align 8, !tbaa !9
  %807 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %808 = load double, ptr %807, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #10
  store i64 0, ptr %84, align 8, !tbaa !9
  %809 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %84)
  %810 = load double, ptr %809, align 8, !tbaa !11
  %811 = invoke noundef double %806(double noundef %808, double noundef %810)
          to label %812 unwind label %864

812:                                              ; preds = %799
  %813 = load double, ptr %283, align 8, !tbaa !13
  %814 = fmul double %811, %813
  %815 = fmul double %813, %814
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #10
  store i64 1, ptr %85, align 8, !tbaa !9
  %816 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %85)
  %817 = load double, ptr %816, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %86) #10
  store i64 0, ptr %86, align 8, !tbaa !9
  %818 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %86)
  %819 = load double, ptr %818, align 8, !tbaa !11
  %820 = load double, ptr %17, align 8, !tbaa !11
  %821 = getelementptr inbounds i8, ptr %1, i64 176
  %822 = load ptr, ptr %821, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %87) #10
  store i64 0, ptr %87, align 8, !tbaa !9
  %823 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %824 = load double, ptr %823, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %88) #10
  store i64 0, ptr %88, align 8, !tbaa !9
  %825 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %88)
  %826 = load double, ptr %825, align 8, !tbaa !11
  %827 = invoke noundef double %822(double noundef %824, double noundef %826)
          to label %828 unwind label %866

828:                                              ; preds = %812
  %829 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %89) #10
  store i64 0, ptr %89, align 8, !tbaa !9
  %830 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %831 = getelementptr inbounds i8, ptr %830, i64 8
  %832 = load double, ptr %831, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #10
  store i64 0, ptr %90, align 8, !tbaa !9
  %833 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %90)
  %834 = load double, ptr %833, align 8, !tbaa !11
  %835 = load double, ptr %14, align 8, !tbaa !11
  %836 = getelementptr inbounds i8, ptr %1, i64 160
  %837 = load ptr, ptr %836, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #10
  store i64 0, ptr %91, align 8, !tbaa !9
  %838 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %91)
  %839 = load double, ptr %838, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #10
  store i64 0, ptr %92, align 8, !tbaa !9
  %840 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %92)
  %841 = load double, ptr %840, align 8, !tbaa !11
  %842 = invoke noundef double %837(double noundef %839, double noundef %841)
          to label %843 unwind label %868

843:                                              ; preds = %828
  %844 = insertelement <2 x double> poison, double %817, i64 0
  %845 = insertelement <2 x double> %844, double %832, i64 1
  %846 = insertelement <2 x double> poison, double %819, i64 0
  %847 = insertelement <2 x double> %846, double %834, i64 1
  %848 = fsub <2 x double> %845, %847
  %849 = insertelement <2 x double> poison, double %820, i64 0
  %850 = insertelement <2 x double> %849, double %835, i64 1
  %851 = fneg <2 x double> %850
  %852 = load double, ptr %14, align 8, !tbaa !11
  %853 = insertelement <2 x double> poison, double %827, i64 0
  %854 = insertelement <2 x double> %853, double %842, i64 1
  %855 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %851, <2 x double> %854, <2 x double> %848)
  %856 = insertelement <2 x double> poison, double %829, i64 0
  %857 = insertelement <2 x double> %856, double %852, i64 1
  %858 = fmul <2 x double> %857, %857
  %859 = fdiv <2 x double> %855, %858
  %shift646 = shufflevector <2 x double> %859, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %860 = fadd <2 x double> %859, %shift646
  %861 = extractelement <2 x double> %860, i64 0
  %862 = call double @llvm.fmuladd.f64(double %815, double %861, double %805)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %93) #10
  store i64 0, ptr %93, align 8, !tbaa !9
  %863 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %93)
  store double %862, ptr %863, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %93) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #10
  br label %872

864:                                              ; preds = %799
  %865 = landingpad { ptr, i32 }
          cleanup
  br label %871

866:                                              ; preds = %812
  %867 = landingpad { ptr, i32 }
          cleanup
  br label %870

868:                                              ; preds = %828
  %869 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %89) #10
  br label %870

870:                                              ; preds = %868, %866
  %.pn = phi { ptr, i32 } [ %869, %868 ], [ %867, %866 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %87) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %86) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #10
  br label %871

871:                                              ; preds = %870, %864
  %.pn.pn = phi { ptr, i32 } [ %.pn, %870 ], [ %865, %864 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %83) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #10
  br label %1247

.critedge:                                        ; preds = %.loopexit526
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #10
  br label %872

872:                                              ; preds = %.critedge, %843, %795
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %94) #10
  %873 = and i32 %341, 96
  %brmerge512.not = icmp eq i32 %873, 96
  br i1 %brmerge512.not, label %874, label %.critedge2

874:                                              ; preds = %872
  store i64 0, ptr %94, align 8, !tbaa !9
  %875 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %94)
  %876 = load i32, ptr %11, align 4, !tbaa !5
  %877 = sext i32 %876 to i64
  %878 = getelementptr i8, ptr %875, i64 %877
  %879 = getelementptr i8, ptr %878, i64 -1
  %880 = load i8, ptr %879, align 1, !tbaa !22, !range !24, !noundef !25
  %881 = trunc nuw i8 %880 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #10
  br i1 %881, label %988, label %882

882:                                              ; preds = %874
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #10
  store i64 0, ptr %95, align 8, !tbaa !9
  %883 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %95)
  %884 = load i32, ptr %11, align 4, !tbaa !5
  %885 = sext i32 %884 to i64
  %886 = getelementptr double, ptr %883, i64 %885
  %887 = getelementptr i8, ptr %886, i64 -8
  %888 = load double, ptr %887, align 8, !tbaa !11
  %889 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %96) #10
  store i64 0, ptr %96, align 8, !tbaa !9
  %890 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %96)
  %891 = load i32, ptr %11, align 4, !tbaa !5
  %892 = sext i32 %891 to i64
  %893 = getelementptr double, ptr %890, i64 %892
  %894 = getelementptr i8, ptr %893, i64 -8
  %895 = load double, ptr %894, align 8, !tbaa !11
  %896 = call double @llvm.fmuladd.f64(double %889, double %895, double %888)
  %897 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %97) #10
  %898 = add nsw i32 %891, -1
  %899 = sext i32 %898 to i64
  store i64 %899, ptr %97, align 8, !tbaa !9
  %900 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %97)
  %901 = load double, ptr %900, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %98) #10
  store i64 0, ptr %98, align 8, !tbaa !9
  %902 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %98)
  %903 = load double, ptr %902, align 8, !tbaa !11
  %904 = invoke noundef double %897(double noundef %901, double noundef %903)
          to label %905 unwind label %980

905:                                              ; preds = %882
  %906 = load double, ptr %283, align 8, !tbaa !13
  %907 = fmul double %904, %906
  %908 = fmul double %906, %907
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %99) #10
  store i64 1, ptr %99, align 8, !tbaa !9
  %909 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %99)
  %910 = load i32, ptr %11, align 4, !tbaa !5
  %911 = sext i32 %910 to i64
  %912 = getelementptr double, ptr %909, i64 %911
  %913 = getelementptr i8, ptr %912, i64 -8
  %914 = load double, ptr %913, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #10
  store i64 0, ptr %100, align 8, !tbaa !9
  %915 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %100)
  %916 = load i32, ptr %11, align 4, !tbaa !5
  %917 = sext i32 %916 to i64
  %918 = getelementptr double, ptr %915, i64 %917
  %919 = getelementptr i8, ptr %918, i64 -8
  %920 = load double, ptr %919, align 8, !tbaa !11
  %921 = load double, ptr %17, align 8, !tbaa !11
  %922 = getelementptr inbounds i8, ptr %1, i64 176
  %923 = load ptr, ptr %922, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #10
  %924 = add nsw i32 %916, -1
  %925 = sext i32 %924 to i64
  store i64 %925, ptr %101, align 8, !tbaa !9
  %926 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %101)
  %927 = load double, ptr %926, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #10
  store i64 0, ptr %102, align 8, !tbaa !9
  %928 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %102)
  %929 = load double, ptr %928, align 8, !tbaa !11
  %930 = invoke noundef double %923(double noundef %927, double noundef %929)
          to label %931 unwind label %982

931:                                              ; preds = %905
  %932 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #10
  store i64 0, ptr %103, align 8, !tbaa !9
  %933 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %103)
  %934 = load i32, ptr %11, align 4, !tbaa !5
  %935 = sext i32 %934 to i64
  %936 = getelementptr double, ptr %933, i64 %935
  %937 = getelementptr i8, ptr %936, i64 -16
  %938 = load double, ptr %937, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #10
  store i64 0, ptr %104, align 8, !tbaa !9
  %939 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %104)
  %940 = load i32, ptr %11, align 4, !tbaa !5
  %941 = sext i32 %940 to i64
  %942 = getelementptr double, ptr %939, i64 %941
  %943 = getelementptr i8, ptr %942, i64 -8
  %944 = load double, ptr %943, align 8, !tbaa !11
  %945 = load double, ptr %14, align 8, !tbaa !11
  %946 = getelementptr inbounds i8, ptr %1, i64 168
  %947 = load ptr, ptr %946, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #10
  %948 = add nsw i32 %940, -1
  %949 = sext i32 %948 to i64
  store i64 %949, ptr %105, align 8, !tbaa !9
  %950 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %105)
  %951 = load double, ptr %950, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #10
  store i64 0, ptr %106, align 8, !tbaa !9
  %952 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %106)
  %953 = load double, ptr %952, align 8, !tbaa !11
  %954 = invoke noundef double %947(double noundef %951, double noundef %953)
          to label %955 unwind label %984

955:                                              ; preds = %931
  %956 = insertelement <2 x double> poison, double %914, i64 0
  %957 = insertelement <2 x double> %956, double %938, i64 1
  %958 = insertelement <2 x double> poison, double %920, i64 0
  %959 = insertelement <2 x double> %958, double %944, i64 1
  %960 = fsub <2 x double> %957, %959
  %961 = fneg double %921
  %962 = load double, ptr %14, align 8, !tbaa !11
  %963 = insertelement <2 x double> poison, double %961, i64 0
  %964 = insertelement <2 x double> %963, double %945, i64 1
  %965 = insertelement <2 x double> poison, double %930, i64 0
  %966 = insertelement <2 x double> %965, double %954, i64 1
  %967 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %964, <2 x double> %966, <2 x double> %960)
  %968 = insertelement <2 x double> poison, double %932, i64 0
  %969 = insertelement <2 x double> %968, double %962, i64 1
  %970 = fmul <2 x double> %969, %969
  %971 = fdiv <2 x double> %967, %970
  %shift647 = shufflevector <2 x double> %971, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %972 = fadd <2 x double> %971, %shift647
  %973 = extractelement <2 x double> %972, i64 0
  %974 = call double @llvm.fmuladd.f64(double %908, double %973, double %896)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %107) #10
  store i64 0, ptr %107, align 8, !tbaa !9
  %975 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %107)
  %976 = load i32, ptr %11, align 4, !tbaa !5
  %977 = sext i32 %976 to i64
  %978 = getelementptr double, ptr %975, i64 %977
  %979 = getelementptr i8, ptr %978, i64 -8
  store double %974, ptr %979, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %107) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #10
  br label %988

980:                                              ; preds = %882
  %981 = landingpad { ptr, i32 }
          cleanup
  br label %987

982:                                              ; preds = %905
  %983 = landingpad { ptr, i32 }
          cleanup
  br label %986

984:                                              ; preds = %931
  %985 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #10
  br label %986

986:                                              ; preds = %984, %982
  %.pn456 = phi { ptr, i32 } [ %985, %984 ], [ %983, %982 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %99) #10
  br label %987

987:                                              ; preds = %986, %980
  %.pn456.pn = phi { ptr, i32 } [ %.pn456, %986 ], [ %981, %980 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %98) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %97) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %96) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #10
  br label %1247

.critedge2:                                       ; preds = %872
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %94) #10
  br label %988

988:                                              ; preds = %.critedge2, %955, %874
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %108) #10
  %brmerge513 = or i1 %.not453, %.not451
  br i1 %brmerge513, label %.critedge4, label %989

989:                                              ; preds = %988
  %990 = load i32, ptr %10, align 4, !tbaa !5
  %991 = add nsw i32 %990, -1
  %992 = sext i32 %991 to i64
  store i64 %992, ptr %108, align 8, !tbaa !9
  %993 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %108)
  %994 = load i8, ptr %993, align 1, !tbaa !22, !range !24, !noundef !25
  %995 = trunc nuw i8 %994 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #10
  br i1 %995, label %1099, label %996

996:                                              ; preds = %989
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #10
  %997 = load i32, ptr %10, align 4, !tbaa !5
  %998 = add nsw i32 %997, -1
  %999 = sext i32 %998 to i64
  store i64 %999, ptr %109, align 8, !tbaa !9
  %1000 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %109)
  %1001 = load double, ptr %1000, align 8, !tbaa !11
  %1002 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %110) #10
  %1003 = load i32, ptr %10, align 4, !tbaa !5
  %1004 = add nsw i32 %1003, -1
  %1005 = sext i32 %1004 to i64
  store i64 %1005, ptr %110, align 8, !tbaa !9
  %1006 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %110)
  %1007 = load double, ptr %1006, align 8, !tbaa !11
  %1008 = call double @llvm.fmuladd.f64(double %1002, double %1007, double %1001)
  %1009 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %111) #10
  store i64 0, ptr %111, align 8, !tbaa !9
  %1010 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %111)
  %1011 = load double, ptr %1010, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %112) #10
  %1012 = load i32, ptr %10, align 4, !tbaa !5
  %1013 = add nsw i32 %1012, -1
  %1014 = sext i32 %1013 to i64
  store i64 %1014, ptr %112, align 8, !tbaa !9
  %1015 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %112)
  %1016 = load double, ptr %1015, align 8, !tbaa !11
  %1017 = invoke noundef double %1009(double noundef %1011, double noundef %1016)
          to label %1018 unwind label %1091

1018:                                             ; preds = %996
  %1019 = load double, ptr %283, align 8, !tbaa !13
  %1020 = fmul double %1017, %1019
  %1021 = fmul double %1019, %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %113) #10
  %1022 = load i32, ptr %10, align 4, !tbaa !5
  %1023 = add nsw i32 %1022, -2
  %1024 = sext i32 %1023 to i64
  store i64 %1024, ptr %113, align 8, !tbaa !9
  %1025 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %113)
  %1026 = load double, ptr %1025, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #10
  %1027 = load i32, ptr %10, align 4, !tbaa !5
  %1028 = add nsw i32 %1027, -1
  %1029 = sext i32 %1028 to i64
  store i64 %1029, ptr %114, align 8, !tbaa !9
  %1030 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %114)
  %1031 = load double, ptr %1030, align 8, !tbaa !11
  %1032 = load double, ptr %17, align 8, !tbaa !11
  %1033 = getelementptr inbounds i8, ptr %1, i64 184
  %1034 = load ptr, ptr %1033, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #10
  store i64 0, ptr %115, align 8, !tbaa !9
  %1035 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %115)
  %1036 = load double, ptr %1035, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #10
  %1037 = load i32, ptr %10, align 4, !tbaa !5
  %1038 = add nsw i32 %1037, -1
  %1039 = sext i32 %1038 to i64
  store i64 %1039, ptr %116, align 8, !tbaa !9
  %1040 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %116)
  %1041 = load double, ptr %1040, align 8, !tbaa !11
  %1042 = invoke noundef double %1034(double noundef %1036, double noundef %1041)
          to label %1043 unwind label %1093

1043:                                             ; preds = %1018
  %1044 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %117) #10
  %1045 = load i32, ptr %10, align 4, !tbaa !5
  %1046 = add nsw i32 %1045, -1
  %1047 = sext i32 %1046 to i64
  store i64 %1047, ptr %117, align 8, !tbaa !9
  %1048 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %117)
  %1049 = getelementptr inbounds i8, ptr %1048, i64 8
  %1050 = load double, ptr %1049, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %118) #10
  %1051 = load i32, ptr %10, align 4, !tbaa !5
  %1052 = add nsw i32 %1051, -1
  %1053 = sext i32 %1052 to i64
  store i64 %1053, ptr %118, align 8, !tbaa !9
  %1054 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %118)
  %1055 = load double, ptr %1054, align 8, !tbaa !11
  %1056 = load double, ptr %14, align 8, !tbaa !11
  %1057 = getelementptr inbounds i8, ptr %1, i64 160
  %1058 = load ptr, ptr %1057, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #10
  store i64 0, ptr %119, align 8, !tbaa !9
  %1059 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %119)
  %1060 = load double, ptr %1059, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %120) #10
  %1061 = load i32, ptr %10, align 4, !tbaa !5
  %1062 = add nsw i32 %1061, -1
  %1063 = sext i32 %1062 to i64
  store i64 %1063, ptr %120, align 8, !tbaa !9
  %1064 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %120)
  %1065 = load double, ptr %1064, align 8, !tbaa !11
  %1066 = invoke noundef double %1058(double noundef %1060, double noundef %1065)
          to label %1067 unwind label %1095

1067:                                             ; preds = %1043
  %1068 = insertelement <2 x double> poison, double %1026, i64 0
  %1069 = insertelement <2 x double> %1068, double %1050, i64 1
  %1070 = insertelement <2 x double> poison, double %1031, i64 0
  %1071 = insertelement <2 x double> %1070, double %1055, i64 1
  %1072 = fsub <2 x double> %1069, %1071
  %1073 = fneg double %1056
  %1074 = load double, ptr %14, align 8, !tbaa !11
  %1075 = insertelement <2 x double> poison, double %1032, i64 0
  %1076 = insertelement <2 x double> %1075, double %1073, i64 1
  %1077 = insertelement <2 x double> poison, double %1042, i64 0
  %1078 = insertelement <2 x double> %1077, double %1066, i64 1
  %1079 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1076, <2 x double> %1078, <2 x double> %1072)
  %1080 = insertelement <2 x double> poison, double %1044, i64 0
  %1081 = insertelement <2 x double> %1080, double %1074, i64 1
  %1082 = fmul <2 x double> %1081, %1081
  %1083 = fdiv <2 x double> %1079, %1082
  %shift648 = shufflevector <2 x double> %1083, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1084 = fadd <2 x double> %1083, %shift648
  %1085 = extractelement <2 x double> %1084, i64 0
  %1086 = call double @llvm.fmuladd.f64(double %1021, double %1085, double %1008)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %121) #10
  %1087 = load i32, ptr %10, align 4, !tbaa !5
  %1088 = add nsw i32 %1087, -1
  %1089 = sext i32 %1088 to i64
  store i64 %1089, ptr %121, align 8, !tbaa !9
  %1090 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %121)
  store double %1086, ptr %1090, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %121) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #10
  br label %1099

1091:                                             ; preds = %996
  %1092 = landingpad { ptr, i32 }
          cleanup
  br label %1098

1093:                                             ; preds = %1018
  %1094 = landingpad { ptr, i32 }
          cleanup
  br label %1097

1095:                                             ; preds = %1043
  %1096 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %120) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %118) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %117) #10
  br label %1097

1097:                                             ; preds = %1095, %1093
  %.pn459 = phi { ptr, i32 } [ %1096, %1095 ], [ %1094, %1093 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #10
  br label %1098

1098:                                             ; preds = %1097, %1091
  %.pn459.pn = phi { ptr, i32 } [ %.pn459, %1097 ], [ %1092, %1091 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %111) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %110) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #10
  br label %1247

.critedge4:                                       ; preds = %988
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %108) #10
  br label %1099

1099:                                             ; preds = %.critedge4, %1067, %989
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %122) #10
  %brmerge514 = or i1 %.not453, %.not452
  br i1 %brmerge514, label %.critedge6, label %1100

1100:                                             ; preds = %1099
  %1101 = load i32, ptr %10, align 4, !tbaa !5
  %1102 = add nsw i32 %1101, -1
  %1103 = sext i32 %1102 to i64
  store i64 %1103, ptr %122, align 8, !tbaa !9
  %1104 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %122)
  %1105 = load i32, ptr %11, align 4, !tbaa !5
  %1106 = sext i32 %1105 to i64
  %1107 = getelementptr i8, ptr %1104, i64 %1106
  %1108 = getelementptr i8, ptr %1107, i64 -1
  %1109 = load i8, ptr %1108, align 1, !tbaa !22, !range !24, !noundef !25
  %1110 = trunc nuw i8 %1109 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #10
  br i1 %1110, label %1246, label %1111

1111:                                             ; preds = %1100
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %123) #10
  %1112 = load i32, ptr %10, align 4, !tbaa !5
  %1113 = add nsw i32 %1112, -1
  %1114 = sext i32 %1113 to i64
  store i64 %1114, ptr %123, align 8, !tbaa !9
  %1115 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %123)
  %1116 = load i32, ptr %11, align 4, !tbaa !5
  %1117 = sext i32 %1116 to i64
  %1118 = getelementptr double, ptr %1115, i64 %1117
  %1119 = getelementptr i8, ptr %1118, i64 -8
  %1120 = load double, ptr %1119, align 8, !tbaa !11
  %1121 = load double, ptr %283, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %124) #10
  %1122 = load i32, ptr %10, align 4, !tbaa !5
  %1123 = add nsw i32 %1122, -1
  %1124 = sext i32 %1123 to i64
  store i64 %1124, ptr %124, align 8, !tbaa !9
  %1125 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(8) %124)
  %1126 = load i32, ptr %11, align 4, !tbaa !5
  %1127 = sext i32 %1126 to i64
  %1128 = getelementptr double, ptr %1125, i64 %1127
  %1129 = getelementptr i8, ptr %1128, i64 -8
  %1130 = load double, ptr %1129, align 8, !tbaa !11
  %1131 = call double @llvm.fmuladd.f64(double %1121, double %1130, double %1120)
  %1132 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %125) #10
  %1133 = add nsw i32 %1126, -1
  %1134 = sext i32 %1133 to i64
  store i64 %1134, ptr %125, align 8, !tbaa !9
  %1135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %125)
  %1136 = load double, ptr %1135, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #10
  %1137 = load i32, ptr %10, align 4, !tbaa !5
  %1138 = add nsw i32 %1137, -1
  %1139 = sext i32 %1138 to i64
  store i64 %1139, ptr %126, align 8, !tbaa !9
  %1140 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %126)
  %1141 = load double, ptr %1140, align 8, !tbaa !11
  %1142 = invoke noundef double %1132(double noundef %1136, double noundef %1141)
          to label %1143 unwind label %1238

1143:                                             ; preds = %1111
  %1144 = load double, ptr %283, align 8, !tbaa !13
  %1145 = fmul double %1142, %1144
  %1146 = fmul double %1144, %1145
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %127) #10
  %1147 = load i32, ptr %10, align 4, !tbaa !5
  %1148 = add nsw i32 %1147, -2
  %1149 = sext i32 %1148 to i64
  store i64 %1149, ptr %127, align 8, !tbaa !9
  %1150 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %127)
  %1151 = load i32, ptr %11, align 4, !tbaa !5
  %1152 = sext i32 %1151 to i64
  %1153 = getelementptr double, ptr %1150, i64 %1152
  %1154 = getelementptr i8, ptr %1153, i64 -8
  %1155 = load double, ptr %1154, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %128) #10
  %1156 = load i32, ptr %10, align 4, !tbaa !5
  %1157 = add nsw i32 %1156, -1
  %1158 = sext i32 %1157 to i64
  store i64 %1158, ptr %128, align 8, !tbaa !9
  %1159 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %128)
  %1160 = load i32, ptr %11, align 4, !tbaa !5
  %1161 = sext i32 %1160 to i64
  %1162 = getelementptr double, ptr %1159, i64 %1161
  %1163 = getelementptr i8, ptr %1162, i64 -8
  %1164 = load double, ptr %1163, align 8, !tbaa !11
  %1165 = load double, ptr %17, align 8, !tbaa !11
  %1166 = getelementptr inbounds i8, ptr %1, i64 184
  %1167 = load ptr, ptr %1166, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %129) #10
  %1168 = add nsw i32 %1160, -1
  %1169 = sext i32 %1168 to i64
  store i64 %1169, ptr %129, align 8, !tbaa !9
  %1170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %129)
  %1171 = load double, ptr %1170, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %130) #10
  %1172 = load i32, ptr %10, align 4, !tbaa !5
  %1173 = add nsw i32 %1172, -1
  %1174 = sext i32 %1173 to i64
  store i64 %1174, ptr %130, align 8, !tbaa !9
  %1175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %130)
  %1176 = load double, ptr %1175, align 8, !tbaa !11
  %1177 = invoke noundef double %1167(double noundef %1171, double noundef %1176)
          to label %1178 unwind label %1240

1178:                                             ; preds = %1143
  %1179 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %131) #10
  %1180 = load i32, ptr %10, align 4, !tbaa !5
  %1181 = add nsw i32 %1180, -1
  %1182 = sext i32 %1181 to i64
  store i64 %1182, ptr %131, align 8, !tbaa !9
  %1183 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %131)
  %1184 = load i32, ptr %11, align 4, !tbaa !5
  %1185 = sext i32 %1184 to i64
  %1186 = getelementptr double, ptr %1183, i64 %1185
  %1187 = getelementptr i8, ptr %1186, i64 -16
  %1188 = load double, ptr %1187, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %132) #10
  %1189 = load i32, ptr %10, align 4, !tbaa !5
  %1190 = add nsw i32 %1189, -1
  %1191 = sext i32 %1190 to i64
  store i64 %1191, ptr %132, align 8, !tbaa !9
  %1192 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %132)
  %1193 = load i32, ptr %11, align 4, !tbaa !5
  %1194 = sext i32 %1193 to i64
  %1195 = getelementptr double, ptr %1192, i64 %1194
  %1196 = getelementptr i8, ptr %1195, i64 -8
  %1197 = load double, ptr %1196, align 8, !tbaa !11
  %1198 = load double, ptr %14, align 8, !tbaa !11
  %1199 = getelementptr inbounds i8, ptr %1, i64 168
  %1200 = load ptr, ptr %1199, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %133) #10
  %1201 = add nsw i32 %1193, -1
  %1202 = sext i32 %1201 to i64
  store i64 %1202, ptr %133, align 8, !tbaa !9
  %1203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %133)
  %1204 = load double, ptr %1203, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %134) #10
  %1205 = load i32, ptr %10, align 4, !tbaa !5
  %1206 = add nsw i32 %1205, -1
  %1207 = sext i32 %1206 to i64
  store i64 %1207, ptr %134, align 8, !tbaa !9
  %1208 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %134)
  %1209 = load double, ptr %1208, align 8, !tbaa !11
  %1210 = invoke noundef double %1200(double noundef %1204, double noundef %1209)
          to label %1211 unwind label %1242

1211:                                             ; preds = %1178
  %1212 = insertelement <2 x double> poison, double %1155, i64 0
  %1213 = insertelement <2 x double> %1212, double %1188, i64 1
  %1214 = insertelement <2 x double> poison, double %1164, i64 0
  %1215 = insertelement <2 x double> %1214, double %1197, i64 1
  %1216 = fsub <2 x double> %1213, %1215
  %1217 = load double, ptr %14, align 8, !tbaa !11
  %1218 = insertelement <2 x double> poison, double %1165, i64 0
  %1219 = insertelement <2 x double> %1218, double %1198, i64 1
  %1220 = insertelement <2 x double> poison, double %1177, i64 0
  %1221 = insertelement <2 x double> %1220, double %1210, i64 1
  %1222 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1219, <2 x double> %1221, <2 x double> %1216)
  %1223 = insertelement <2 x double> poison, double %1179, i64 0
  %1224 = insertelement <2 x double> %1223, double %1217, i64 1
  %1225 = fmul <2 x double> %1224, %1224
  %1226 = fdiv <2 x double> %1222, %1225
  %shift649 = shufflevector <2 x double> %1226, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1227 = fadd <2 x double> %1226, %shift649
  %1228 = extractelement <2 x double> %1227, i64 0
  %1229 = call double @llvm.fmuladd.f64(double %1146, double %1228, double %1131)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %135) #10
  %1230 = load i32, ptr %10, align 4, !tbaa !5
  %1231 = add nsw i32 %1230, -1
  %1232 = sext i32 %1231 to i64
  store i64 %1232, ptr %135, align 8, !tbaa !9
  %1233 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %135)
  %1234 = load i32, ptr %11, align 4, !tbaa !5
  %1235 = sext i32 %1234 to i64
  %1236 = getelementptr double, ptr %1233, i64 %1235
  %1237 = getelementptr i8, ptr %1236, i64 -8
  store double %1229, ptr %1237, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %135) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %134) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %130) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %129) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #10
  br label %1246

1238:                                             ; preds = %1111
  %1239 = landingpad { ptr, i32 }
          cleanup
  br label %1245

1240:                                             ; preds = %1143
  %1241 = landingpad { ptr, i32 }
          cleanup
  br label %1244

1242:                                             ; preds = %1178
  %1243 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %134) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #10
  br label %1244

1244:                                             ; preds = %1242, %1240
  %.pn462 = phi { ptr, i32 } [ %1243, %1242 ], [ %1241, %1240 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %130) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %129) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #10
  br label %1245

1245:                                             ; preds = %1244, %1238
  %.pn462.pn = phi { ptr, i32 } [ %.pn462, %1244 ], [ %1239, %1238 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %123) #10
  br label %1247

.critedge6:                                       ; preds = %1099
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #10
  br label %1246

1246:                                             ; preds = %.critedge6, %1211, %1100
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %50) #10
  br label %2139

1247:                                             ; preds = %1245, %1098, %987, %871, %788, %673, %567, %558
  %.pn473.pn = phi { ptr, i32 } [ %.pn473, %558 ], [ %568, %567 ], [ %.pn467, %673 ], [ %.pn465, %788 ], [ %.pn462.pn, %1245 ], [ %.pn459.pn, %1098 ], [ %.pn456.pn, %987 ], [ %.pn.pn, %871 ]
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %50) #10
  br label %2169

1248:                                             ; preds = %335
  %1249 = zext i8 %2 to i32
  %1250 = and i32 %1249, 64
  %.not480 = icmp ne i32 %1250, 0
  %1251 = load i32, ptr %11, align 4
  %1252 = icmp sgt i32 %1251, 2
  %or.cond630 = select i1 %.not480, i1 %1252, i1 false
  br i1 %or.cond630, label %.lr.ph565, label %.loopexit524

.lr.ph565:                                        ; preds = %1248
  %1253 = getelementptr inbounds i8, ptr %1, i64 176
  %1254 = getelementptr inbounds i8, ptr %1, i64 24
  br label %1255

1255:                                             ; preds = %.lr.ph565, %1328
  %indvars.iv597 = phi i64 [ 1, %.lr.ph565 ], [ %indvars.iv.next598, %1328 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %136) #10
  store i64 0, ptr %136, align 8, !tbaa !9
  %1256 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %136)
  %1257 = getelementptr inbounds i8, ptr %1256, i64 %indvars.iv597
  %1258 = load i8, ptr %1257, align 1, !tbaa !22, !range !24, !noundef !25
  %1259 = trunc nuw i8 %1258 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %136) #10
  br i1 %1259, label %1328, label %1260

1260:                                             ; preds = %1255
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %137) #10
  store i64 0, ptr %137, align 8, !tbaa !9
  %1261 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %137)
  %1262 = getelementptr inbounds double, ptr %1261, i64 %indvars.iv597
  %1263 = load double, ptr %1262, align 8, !tbaa !11
  %1264 = load double, ptr %283, align 8, !tbaa !13
  %1265 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %138) #10
  store i64 %indvars.iv597, ptr %138, align 8, !tbaa !9
  %1266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %138)
  %1267 = load double, ptr %1266, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %139) #10
  store i64 0, ptr %139, align 8, !tbaa !9
  %1268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %139)
  %1269 = load double, ptr %1268, align 8, !tbaa !11
  %1270 = invoke noundef double %1265(double noundef %1267, double noundef %1269)
          to label %1271 unwind label %1323

1271:                                             ; preds = %1260
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %140) #10
  store i64 1, ptr %140, align 8, !tbaa !9
  %1272 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %140)
  %1273 = getelementptr inbounds double, ptr %1272, i64 %indvars.iv597
  %1274 = load double, ptr %1273, align 8, !tbaa !11
  %1275 = load double, ptr %17, align 8, !tbaa !11
  %1276 = load ptr, ptr %1253, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %141) #10
  store i64 %indvars.iv597, ptr %141, align 8, !tbaa !9
  %1277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %141)
  %1278 = load double, ptr %1277, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %142) #10
  store i64 0, ptr %142, align 8, !tbaa !9
  %1279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %142)
  %1280 = load double, ptr %1279, align 8, !tbaa !11
  %1281 = invoke noundef double %1276(double noundef %1278, double noundef %1280)
          to label %1282 unwind label %1325

1282:                                             ; preds = %1271
  %1283 = fmul double %1264, %1264
  %1284 = fmul double %1283, %1270
  %1285 = fmul double %1275, -2.000000e+00
  %1286 = fmul double %1285, %1281
  %1287 = call double @llvm.fmuladd.f64(double %1274, double 2.000000e+00, double %1286)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %143) #10
  store i64 0, ptr %143, align 8, !tbaa !9
  %1288 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %143)
  %1289 = getelementptr inbounds double, ptr %1288, i64 %indvars.iv597
  %1290 = load double, ptr %1289, align 8, !tbaa !11
  %1291 = call double @llvm.fmuladd.f64(double %1290, double -2.000000e+00, double %1287)
  %1292 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %144) #10
  store i64 0, ptr %144, align 8, !tbaa !9
  %1293 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %144)
  %1294 = getelementptr inbounds double, ptr %1293, i64 %indvars.iv597
  %1295 = getelementptr inbounds i8, ptr %1294, i64 8
  %1296 = load double, ptr %1295, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %145) #10
  store i64 0, ptr %145, align 8, !tbaa !9
  %1297 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %145)
  %1298 = getelementptr inbounds double, ptr %1297, i64 %indvars.iv597
  %1299 = load double, ptr %1298, align 8, !tbaa !11
  %1300 = call double @llvm.fmuladd.f64(double %1299, double -2.000000e+00, double %1296)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %146) #10
  store i64 0, ptr %146, align 8, !tbaa !9
  %1301 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %146)
  %1302 = getelementptr double, ptr %1301, i64 %indvars.iv597
  %1303 = getelementptr i8, ptr %1302, i64 -8
  %1304 = load double, ptr %1303, align 8, !tbaa !11
  %1305 = fadd double %1300, %1304
  %1306 = load double, ptr %14, align 8, !tbaa !11
  %1307 = insertelement <2 x double> poison, double %1292, i64 0
  %1308 = insertelement <2 x double> %1307, double %1306, i64 1
  %1309 = fmul <2 x double> %1308, %1308
  %1310 = insertelement <2 x double> poison, double %1291, i64 0
  %1311 = insertelement <2 x double> %1310, double %1305, i64 1
  %1312 = fdiv <2 x double> %1311, %1309
  %shift650 = shufflevector <2 x double> %1312, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1313 = fadd <2 x double> %1312, %shift650
  %1314 = extractelement <2 x double> %1313, i64 0
  %1315 = fmul double %1284, %1314
  %1316 = call double @llvm.fmuladd.f64(double %1263, double 2.000000e+00, double %1315)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %147) #10
  store i64 0, ptr %147, align 8, !tbaa !9
  %1317 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1254, ptr noundef nonnull align 8 dereferenceable(8) %147)
  %1318 = getelementptr inbounds double, ptr %1317, i64 %indvars.iv597
  %1319 = load double, ptr %1318, align 8, !tbaa !11
  %1320 = fsub double %1316, %1319
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %148) #10
  store i64 0, ptr %148, align 8, !tbaa !9
  %1321 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %148)
  %1322 = getelementptr inbounds double, ptr %1321, i64 %indvars.iv597
  store double %1320, ptr %1322, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %148) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %147) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %146) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %145) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %144) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %143) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %141) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %140) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %139) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %138) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %137) #10
  br label %1328

1323:                                             ; preds = %1260
  %1324 = landingpad { ptr, i32 }
          cleanup
  br label %1327

1325:                                             ; preds = %1271
  %1326 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %142) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %141) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %140) #10
  br label %1327

1327:                                             ; preds = %1325, %1323
  %.pn509 = phi { ptr, i32 } [ %1326, %1325 ], [ %1324, %1323 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %139) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %138) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %137) #10
  br label %2169

1328:                                             ; preds = %1255, %1282
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %1329 = load i32, ptr %11, align 4, !tbaa !5
  %1330 = add nsw i32 %1329, -1
  %1331 = sext i32 %1330 to i64
  %1332 = icmp slt i64 %indvars.iv.next598, %1331
  br i1 %1332, label %1255, label %.loopexit524, !llvm.loop !45

.loopexit524:                                     ; preds = %1328, %1248
  %1333 = and i32 %1249, 16
  %.not481 = icmp eq i32 %1333, 0
  %1334 = load i32, ptr %10, align 4
  %1335 = icmp slt i32 %1334, 3
  %or.cond632.not = select i1 %.not481, i1 true, i1 %1335
  br i1 %or.cond632.not, label %.loopexit522, label %.lr.ph567

.lr.ph567:                                        ; preds = %.loopexit524
  %1336 = getelementptr inbounds i8, ptr %1, i64 160
  %1337 = getelementptr inbounds i8, ptr %1, i64 24
  br label %1338

1338:                                             ; preds = %.lr.ph567, %1403
  %indvars.iv600 = phi i64 [ 1, %.lr.ph567 ], [ %indvars.iv.next601.pre-phi, %1403 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %149) #10
  store i64 %indvars.iv600, ptr %149, align 8, !tbaa !9
  %1339 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %149)
  %1340 = load i8, ptr %1339, align 1, !tbaa !22, !range !24, !noundef !25
  %1341 = trunc nuw i8 %1340 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %149) #10
  br i1 %1341, label %._crit_edge616, label %1342

._crit_edge616:                                   ; preds = %1338
  %.pre619 = add nuw nsw i64 %indvars.iv600, 1
  br label %1403

1342:                                             ; preds = %1338
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %150) #10
  store i64 %indvars.iv600, ptr %150, align 8, !tbaa !9
  %1343 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %150)
  %1344 = load double, ptr %1343, align 8, !tbaa !11
  %1345 = load double, ptr %283, align 8, !tbaa !13
  %1346 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %151) #10
  store i64 0, ptr %151, align 8, !tbaa !9
  %1347 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %151)
  %1348 = load double, ptr %1347, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %152) #10
  store i64 %indvars.iv600, ptr %152, align 8, !tbaa !9
  %1349 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %152)
  %1350 = load double, ptr %1349, align 8, !tbaa !11
  %1351 = invoke noundef double %1346(double noundef %1348, double noundef %1350)
          to label %1352 unwind label %1398

1352:                                             ; preds = %1342
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %153) #10
  %1353 = add nuw nsw i64 %indvars.iv600, 1
  store i64 %1353, ptr %153, align 8, !tbaa !9
  %1354 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %153)
  %1355 = load double, ptr %1354, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %154) #10
  store i64 %indvars.iv600, ptr %154, align 8, !tbaa !9
  %1356 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %154)
  %1357 = load double, ptr %1356, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %155) #10
  %1358 = add nsw i64 %indvars.iv600, -1
  store i64 %1358, ptr %155, align 8, !tbaa !9
  %1359 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %155)
  %1360 = load double, ptr %1359, align 8, !tbaa !11
  %1361 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %156) #10
  store i64 %indvars.iv600, ptr %156, align 8, !tbaa !9
  %1362 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %156)
  %1363 = getelementptr inbounds i8, ptr %1362, i64 8
  %1364 = load double, ptr %1363, align 8, !tbaa !11
  %1365 = load double, ptr %14, align 8, !tbaa !11
  %1366 = load ptr, ptr %1336, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %157) #10
  store i64 0, ptr %157, align 8, !tbaa !9
  %1367 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %157)
  %1368 = load double, ptr %1367, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %158) #10
  store i64 %indvars.iv600, ptr %158, align 8, !tbaa !9
  %1369 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %158)
  %1370 = load double, ptr %1369, align 8, !tbaa !11
  %1371 = invoke noundef double %1366(double noundef %1368, double noundef %1370)
          to label %1372 unwind label %1400

1372:                                             ; preds = %1352
  %1373 = call double @llvm.fmuladd.f64(double %1357, double -2.000000e+00, double %1355)
  %1374 = fadd double %1373, %1360
  %1375 = fmul double %1345, %1345
  %1376 = fmul double %1375, %1351
  %1377 = fmul double %1365, -2.000000e+00
  %1378 = fmul double %1377, %1371
  %1379 = call double @llvm.fmuladd.f64(double %1364, double 2.000000e+00, double %1378)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %159) #10
  store i64 %indvars.iv600, ptr %159, align 8, !tbaa !9
  %1380 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %159)
  %1381 = load double, ptr %1380, align 8, !tbaa !11
  %1382 = call double @llvm.fmuladd.f64(double %1381, double -2.000000e+00, double %1379)
  %1383 = load double, ptr %14, align 8, !tbaa !11
  %1384 = insertelement <2 x double> poison, double %1361, i64 0
  %1385 = insertelement <2 x double> %1384, double %1383, i64 1
  %1386 = fmul <2 x double> %1385, %1385
  %1387 = insertelement <2 x double> poison, double %1374, i64 0
  %1388 = insertelement <2 x double> %1387, double %1382, i64 1
  %1389 = fdiv <2 x double> %1388, %1386
  %shift651 = shufflevector <2 x double> %1389, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1390 = fadd <2 x double> %1389, %shift651
  %1391 = extractelement <2 x double> %1390, i64 0
  %1392 = fmul double %1376, %1391
  %1393 = call double @llvm.fmuladd.f64(double %1344, double 2.000000e+00, double %1392)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %160) #10
  store i64 %indvars.iv600, ptr %160, align 8, !tbaa !9
  %1394 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1337, ptr noundef nonnull align 8 dereferenceable(8) %160)
  %1395 = load double, ptr %1394, align 8, !tbaa !11
  %1396 = fsub double %1393, %1395
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %161) #10
  store i64 %indvars.iv600, ptr %161, align 8, !tbaa !9
  %1397 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %161)
  store double %1396, ptr %1397, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %161) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %160) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %159) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %158) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %157) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %156) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %155) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %154) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %153) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %152) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %151) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %150) #10
  br label %1403

1398:                                             ; preds = %1342
  %1399 = landingpad { ptr, i32 }
          cleanup
  br label %1402

1400:                                             ; preds = %1352
  %1401 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %158) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %157) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %156) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %155) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %154) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %153) #10
  br label %1402

1402:                                             ; preds = %1400, %1398
  %.pn507 = phi { ptr, i32 } [ %1401, %1400 ], [ %1399, %1398 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %152) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %151) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %150) #10
  br label %2169

1403:                                             ; preds = %._crit_edge616, %1372
  %indvars.iv.next601.pre-phi = phi i64 [ %.pre619, %._crit_edge616 ], [ %1353, %1372 ]
  %1404 = load i32, ptr %10, align 4, !tbaa !5
  %1405 = add nsw i32 %1404, -1
  %1406 = sext i32 %1405 to i64
  %1407 = icmp slt i64 %indvars.iv.next601.pre-phi, %1406
  br i1 %1407, label %1338, label %.loopexit522, !llvm.loop !46

.loopexit522:                                     ; preds = %1403, %.loopexit524
  %1408 = call noundef i32 @_ZNSt6thread20hardware_concurrencyEv() #10
  %1409 = zext i32 %1408 to i64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %162) #10
  call void @_ZNSt7__cxx114listISt6threadSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %162) #10
  %1410 = load i32, ptr %10, align 4, !tbaa !5
  %1411 = add nsw i32 %1410, -1
  %1412 = sext i32 %1411 to i64
  %1413 = udiv i64 %1412, %1409
  %1414 = trunc i64 %1413 to i32
  %.not583 = icmp eq i32 %1408, 0
  br i1 %.not583, label %._crit_edge573, label %.lr.ph572

.lr.ph572:                                        ; preds = %.loopexit522
  %1415 = add nsw i64 %1409, -1
  %1416 = getelementptr inbounds i8, ptr %163, i64 4
  %1417 = getelementptr inbounds i8, ptr %163, i64 8
  %1418 = getelementptr inbounds i8, ptr %163, i64 16
  %1419 = getelementptr inbounds i8, ptr %163, i64 24
  %1420 = getelementptr inbounds i8, ptr %163, i64 32
  %1421 = getelementptr inbounds i8, ptr %163, i64 40
  %1422 = getelementptr inbounds i8, ptr %163, i64 48
  %1423 = getelementptr inbounds i8, ptr %163, i64 56
  %1424 = getelementptr inbounds i8, ptr %163, i64 64
  %1425 = getelementptr inbounds i8, ptr %163, i64 72
  %1426 = getelementptr inbounds i8, ptr %163, i64 80
  %1427 = getelementptr inbounds i8, ptr %163, i64 88
  br label %1431

._crit_edge573:                                   ; preds = %1442, %.loopexit522
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %164) #10
  %1428 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %162) #10
  store ptr %1428, ptr %164, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %165) #10
  %1429 = call ptr @_ZNSt7__cxx114listISt6threadSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %162) #10
  store ptr %1429, ptr %165, align 8
  %1430 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull align 8 dereferenceable(8) %165) #10
  br i1 %1430, label %.lr.ph575, label %._crit_edge576

1431:                                             ; preds = %.lr.ph572, %1442
  %indvars.iv603 = phi i64 [ 0, %.lr.ph572 ], [ %indvars.iv.next604, %1442 ]
  %.0401569 = phi i32 [ %1414, %.lr.ph572 ], [ %1443, %1442 ]
  %.0436568 = phi i32 [ 1, %.lr.ph572 ], [ %.1402, %1442 ]
  %1432 = icmp eq i64 %1415, %indvars.iv603
  br i1 %1432, label %1433, label %1440

1433:                                             ; preds = %1431
  %1434 = load i32, ptr %10, align 4, !tbaa !5
  %1435 = add nsw i32 %1434, -1
  %1436 = sext i32 %1435 to i64
  %1437 = urem i64 %1436, %1409
  %1438 = trunc nuw i64 %1437 to i32
  %1439 = add i32 %.0401569, %1438
  br label %1440

1440:                                             ; preds = %1433, %1431
  %.1402 = phi i32 [ %1439, %1433 ], [ %.0401569, %1431 ]
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %163) #10
  store i32 %.0436568, ptr %163, align 8, !tbaa !47
  store i32 %.1402, ptr %1416, align 4, !tbaa !49
  store ptr %1, ptr %1417, align 8, !tbaa !50
  store ptr %10, ptr %1418, align 8, !tbaa !37
  store ptr %11, ptr %1419, align 8, !tbaa !37
  store ptr %8, ptr %1420, align 8, !tbaa !37
  store ptr %0, ptr %1421, align 8, !tbaa !37
  store ptr %6, ptr %1422, align 8, !tbaa !37
  store ptr %7, ptr %1423, align 8, !tbaa !37
  store ptr %4, ptr %1424, align 8, !tbaa !37
  store ptr %5, ptr %1425, align 8, !tbaa !37
  store ptr %14, ptr %1426, align 8, !tbaa !37
  store ptr %17, ptr %1427, align 8, !tbaa !37
  %1441 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_1EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24) %162, ptr noundef nonnull align 8 dereferenceable(96) %163)
          to label %1442 unwind label %1444

1442:                                             ; preds = %1440
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %163) #10
  %1443 = add nsw i32 %.1402, %1414
  %indvars.iv.next604 = add nuw nsw i64 %indvars.iv603, 1
  %exitcond607.not = icmp eq i64 %indvars.iv.next604, %1409
  br i1 %exitcond607.not, label %._crit_edge573, label %1431, !llvm.loop !51

1444:                                             ; preds = %1440
  %1445 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %163) #10
  br label %2138

._crit_edge576:                                   ; preds = %1452, %._crit_edge573
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %165) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %164) #10
  %1446 = and i32 %1249, 32
  %.not482 = icmp eq i32 %1446, 0
  %1447 = load i32, ptr %10, align 4
  %1448 = icmp slt i32 %1447, 3
  %or.cond634.not = select i1 %.not482, i1 true, i1 %1448
  br i1 %or.cond634.not, label %.loopexit520, label %.lr.ph578

.lr.ph578:                                        ; preds = %._crit_edge576
  %1449 = getelementptr inbounds i8, ptr %1, i64 168
  %1450 = getelementptr inbounds i8, ptr %1, i64 24
  br label %1457

.lr.ph575:                                        ; preds = %._crit_edge573, %1452
  %1451 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt14_List_iteratorISt6threadEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %164) #10
  invoke void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8) %1451)
          to label %1452 unwind label %1455

1452:                                             ; preds = %.lr.ph575
  %1453 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt14_List_iteratorISt6threadEppEv(ptr noundef nonnull align 8 dereferenceable(8) %164) #10
  %1454 = call noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull align 8 dereferenceable(8) %165) #10
  br i1 %1454, label %.lr.ph575, label %._crit_edge576

1455:                                             ; preds = %.lr.ph575
  %1456 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %165) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %164) #10
  br label %2138

1457:                                             ; preds = %.lr.ph578, %1561
  %indvars.iv608 = phi i64 [ 1, %.lr.ph578 ], [ %indvars.iv.next609.pre-phi, %1561 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %166) #10
  store i64 %indvars.iv608, ptr %166, align 8, !tbaa !9
  %1458 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %166)
  %1459 = load i32, ptr %11, align 4, !tbaa !5
  %1460 = sext i32 %1459 to i64
  %1461 = getelementptr i8, ptr %1458, i64 %1460
  %1462 = getelementptr i8, ptr %1461, i64 -1
  %1463 = load i8, ptr %1462, align 1, !tbaa !22, !range !24, !noundef !25
  %1464 = trunc nuw i8 %1463 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %166) #10
  br i1 %1464, label %._crit_edge617, label %1465

._crit_edge617:                                   ; preds = %1457
  %.pre618 = add nuw nsw i64 %indvars.iv608, 1
  br label %1561

1465:                                             ; preds = %1457
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %167) #10
  store i64 %indvars.iv608, ptr %167, align 8, !tbaa !9
  %1466 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %167)
  %1467 = load i32, ptr %11, align 4, !tbaa !5
  %1468 = sext i32 %1467 to i64
  %1469 = getelementptr double, ptr %1466, i64 %1468
  %1470 = getelementptr i8, ptr %1469, i64 -8
  %1471 = load double, ptr %1470, align 8, !tbaa !11
  %1472 = load double, ptr %283, align 8, !tbaa !13
  %1473 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %168) #10
  %1474 = add nsw i32 %1467, -1
  %1475 = sext i32 %1474 to i64
  store i64 %1475, ptr %168, align 8, !tbaa !9
  %1476 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %168)
  %1477 = load double, ptr %1476, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %169) #10
  store i64 %indvars.iv608, ptr %169, align 8, !tbaa !9
  %1478 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %169)
  %1479 = load double, ptr %1478, align 8, !tbaa !11
  %1480 = invoke noundef double %1473(double noundef %1477, double noundef %1479)
          to label %1481 unwind label %1556

1481:                                             ; preds = %1465
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %170) #10
  %1482 = add nuw nsw i64 %indvars.iv608, 1
  store i64 %1482, ptr %170, align 8, !tbaa !9
  %1483 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %170)
  %1484 = load i32, ptr %11, align 4, !tbaa !5
  %1485 = sext i32 %1484 to i64
  %1486 = getelementptr double, ptr %1483, i64 %1485
  %1487 = getelementptr i8, ptr %1486, i64 -8
  %1488 = load double, ptr %1487, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %171) #10
  store i64 %indvars.iv608, ptr %171, align 8, !tbaa !9
  %1489 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %171)
  %1490 = load i32, ptr %11, align 4, !tbaa !5
  %1491 = sext i32 %1490 to i64
  %1492 = getelementptr double, ptr %1489, i64 %1491
  %1493 = getelementptr i8, ptr %1492, i64 -8
  %1494 = load double, ptr %1493, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %172) #10
  %1495 = add nsw i64 %indvars.iv608, -1
  store i64 %1495, ptr %172, align 8, !tbaa !9
  %1496 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %172)
  %1497 = load i32, ptr %11, align 4, !tbaa !5
  %1498 = sext i32 %1497 to i64
  %1499 = getelementptr double, ptr %1496, i64 %1498
  %1500 = getelementptr i8, ptr %1499, i64 -8
  %1501 = load double, ptr %1500, align 8, !tbaa !11
  %1502 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %173) #10
  store i64 %indvars.iv608, ptr %173, align 8, !tbaa !9
  %1503 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %173)
  %1504 = load i32, ptr %11, align 4, !tbaa !5
  %1505 = sext i32 %1504 to i64
  %1506 = getelementptr double, ptr %1503, i64 %1505
  %1507 = getelementptr i8, ptr %1506, i64 -16
  %1508 = load double, ptr %1507, align 8, !tbaa !11
  %1509 = load double, ptr %14, align 8, !tbaa !11
  %1510 = load ptr, ptr %1449, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %174) #10
  %1511 = add nsw i32 %1504, -1
  %1512 = sext i32 %1511 to i64
  store i64 %1512, ptr %174, align 8, !tbaa !9
  %1513 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %174)
  %1514 = load double, ptr %1513, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %175) #10
  store i64 %indvars.iv608, ptr %175, align 8, !tbaa !9
  %1515 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %175)
  %1516 = load double, ptr %1515, align 8, !tbaa !11
  %1517 = invoke noundef double %1510(double noundef %1514, double noundef %1516)
          to label %1518 unwind label %1558

1518:                                             ; preds = %1481
  %1519 = fmul double %1509, 2.000000e+00
  %1520 = call double @llvm.fmuladd.f64(double %1494, double -2.000000e+00, double %1488)
  %1521 = fadd double %1520, %1501
  %1522 = fmul double %1472, %1472
  %1523 = fmul double %1522, %1480
  %1524 = fmul double %1519, %1517
  %1525 = call double @llvm.fmuladd.f64(double %1508, double 2.000000e+00, double %1524)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %176) #10
  store i64 %indvars.iv608, ptr %176, align 8, !tbaa !9
  %1526 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %176)
  %1527 = load i32, ptr %11, align 4, !tbaa !5
  %1528 = sext i32 %1527 to i64
  %1529 = getelementptr double, ptr %1526, i64 %1528
  %1530 = getelementptr i8, ptr %1529, i64 -8
  %1531 = load double, ptr %1530, align 8, !tbaa !11
  %1532 = call double @llvm.fmuladd.f64(double %1531, double -2.000000e+00, double %1525)
  %1533 = load double, ptr %14, align 8, !tbaa !11
  %1534 = insertelement <2 x double> poison, double %1502, i64 0
  %1535 = insertelement <2 x double> %1534, double %1533, i64 1
  %1536 = fmul <2 x double> %1535, %1535
  %1537 = insertelement <2 x double> poison, double %1521, i64 0
  %1538 = insertelement <2 x double> %1537, double %1532, i64 1
  %1539 = fdiv <2 x double> %1538, %1536
  %shift652 = shufflevector <2 x double> %1539, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1540 = fadd <2 x double> %1539, %shift652
  %1541 = extractelement <2 x double> %1540, i64 0
  %1542 = fmul double %1523, %1541
  %1543 = call double @llvm.fmuladd.f64(double %1471, double 2.000000e+00, double %1542)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %177) #10
  store i64 %indvars.iv608, ptr %177, align 8, !tbaa !9
  %1544 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1450, ptr noundef nonnull align 8 dereferenceable(8) %177)
  %1545 = load i32, ptr %11, align 4, !tbaa !5
  %1546 = sext i32 %1545 to i64
  %1547 = getelementptr double, ptr %1544, i64 %1546
  %1548 = getelementptr i8, ptr %1547, i64 -8
  %1549 = load double, ptr %1548, align 8, !tbaa !11
  %1550 = fsub double %1543, %1549
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %178) #10
  store i64 %indvars.iv608, ptr %178, align 8, !tbaa !9
  %1551 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %178)
  %1552 = load i32, ptr %11, align 4, !tbaa !5
  %1553 = sext i32 %1552 to i64
  %1554 = getelementptr double, ptr %1551, i64 %1553
  %1555 = getelementptr i8, ptr %1554, i64 -8
  store double %1550, ptr %1555, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %178) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %177) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %176) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %175) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %174) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %173) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %172) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %171) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %170) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %169) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %168) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #10
  br label %1561

1556:                                             ; preds = %1465
  %1557 = landingpad { ptr, i32 }
          cleanup
  br label %1560

1558:                                             ; preds = %1481
  %1559 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %175) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %174) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %173) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %172) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %171) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %170) #10
  br label %1560

1560:                                             ; preds = %1558, %1556
  %.pn503 = phi { ptr, i32 } [ %1559, %1558 ], [ %1557, %1556 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %169) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %168) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #10
  br label %2138

1561:                                             ; preds = %._crit_edge617, %1518
  %indvars.iv.next609.pre-phi = phi i64 [ %.pre618, %._crit_edge617 ], [ %1482, %1518 ]
  %1562 = load i32, ptr %10, align 4, !tbaa !5
  %1563 = add nsw i32 %1562, -1
  %1564 = sext i32 %1563 to i64
  %1565 = icmp slt i64 %indvars.iv.next609.pre-phi, %1564
  br i1 %1565, label %1457, label %.loopexit520, !llvm.loop !52

.loopexit520:                                     ; preds = %1561, %._crit_edge576
  %.not483 = icmp sgt i8 %2, -1
  %1566 = load i32, ptr %11, align 4
  %1567 = icmp slt i32 %1566, 3
  %or.cond636.not = select i1 %.not483, i1 true, i1 %1567
  br i1 %or.cond636.not, label %.loopexit, label %.lr.ph580

.lr.ph580:                                        ; preds = %.loopexit520
  %1568 = getelementptr inbounds i8, ptr %1, i64 184
  %1569 = getelementptr inbounds i8, ptr %1, i64 24
  br label %1570

1570:                                             ; preds = %.lr.ph580, %1676
  %indvars.iv611 = phi i64 [ 1, %.lr.ph580 ], [ %indvars.iv.next612, %1676 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %179) #10
  %1571 = load i32, ptr %10, align 4, !tbaa !5
  %1572 = add nsw i32 %1571, -1
  %1573 = sext i32 %1572 to i64
  store i64 %1573, ptr %179, align 8, !tbaa !9
  %1574 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %179)
  %1575 = getelementptr inbounds i8, ptr %1574, i64 %indvars.iv611
  %1576 = load i8, ptr %1575, align 1, !tbaa !22, !range !24, !noundef !25
  %1577 = trunc nuw i8 %1576 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %179) #10
  br i1 %1577, label %1676, label %1578

1578:                                             ; preds = %1570
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %180) #10
  %1579 = load i32, ptr %10, align 4, !tbaa !5
  %1580 = add nsw i32 %1579, -1
  %1581 = sext i32 %1580 to i64
  store i64 %1581, ptr %180, align 8, !tbaa !9
  %1582 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %180)
  %1583 = getelementptr inbounds double, ptr %1582, i64 %indvars.iv611
  %1584 = load double, ptr %1583, align 8, !tbaa !11
  %1585 = load double, ptr %283, align 8, !tbaa !13
  %1586 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %181) #10
  store i64 %indvars.iv611, ptr %181, align 8, !tbaa !9
  %1587 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %181)
  %1588 = load double, ptr %1587, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %182) #10
  %1589 = load i32, ptr %10, align 4, !tbaa !5
  %1590 = add nsw i32 %1589, -1
  %1591 = sext i32 %1590 to i64
  store i64 %1591, ptr %182, align 8, !tbaa !9
  %1592 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %182)
  %1593 = load double, ptr %1592, align 8, !tbaa !11
  %1594 = invoke noundef double %1586(double noundef %1588, double noundef %1593)
          to label %1595 unwind label %1671

1595:                                             ; preds = %1578
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %183) #10
  %1596 = load i32, ptr %10, align 4, !tbaa !5
  %1597 = add nsw i32 %1596, -2
  %1598 = sext i32 %1597 to i64
  store i64 %1598, ptr %183, align 8, !tbaa !9
  %1599 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %183)
  %1600 = getelementptr inbounds double, ptr %1599, i64 %indvars.iv611
  %1601 = load double, ptr %1600, align 8, !tbaa !11
  %1602 = load double, ptr %17, align 8, !tbaa !11
  %1603 = load ptr, ptr %1568, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %184) #10
  store i64 %indvars.iv611, ptr %184, align 8, !tbaa !9
  %1604 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %184)
  %1605 = load double, ptr %1604, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %185) #10
  %1606 = load i32, ptr %10, align 4, !tbaa !5
  %1607 = add nsw i32 %1606, -1
  %1608 = sext i32 %1607 to i64
  store i64 %1608, ptr %185, align 8, !tbaa !9
  %1609 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %185)
  %1610 = load double, ptr %1609, align 8, !tbaa !11
  %1611 = invoke noundef double %1603(double noundef %1605, double noundef %1610)
          to label %1612 unwind label %1673

1612:                                             ; preds = %1595
  %1613 = fmul double %1602, 2.000000e+00
  %1614 = fmul double %1585, %1585
  %1615 = fmul double %1614, %1594
  %1616 = fmul double %1613, %1611
  %1617 = call double @llvm.fmuladd.f64(double %1601, double 2.000000e+00, double %1616)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %186) #10
  %1618 = load i32, ptr %10, align 4, !tbaa !5
  %1619 = add nsw i32 %1618, -1
  %1620 = sext i32 %1619 to i64
  store i64 %1620, ptr %186, align 8, !tbaa !9
  %1621 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %186)
  %1622 = getelementptr inbounds double, ptr %1621, i64 %indvars.iv611
  %1623 = load double, ptr %1622, align 8, !tbaa !11
  %1624 = call double @llvm.fmuladd.f64(double %1623, double -2.000000e+00, double %1617)
  %1625 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %187) #10
  %1626 = load i32, ptr %10, align 4, !tbaa !5
  %1627 = add nsw i32 %1626, -1
  %1628 = sext i32 %1627 to i64
  store i64 %1628, ptr %187, align 8, !tbaa !9
  %1629 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %187)
  %1630 = getelementptr inbounds double, ptr %1629, i64 %indvars.iv611
  %1631 = getelementptr inbounds i8, ptr %1630, i64 8
  %1632 = load double, ptr %1631, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %188) #10
  %1633 = load i32, ptr %10, align 4, !tbaa !5
  %1634 = add nsw i32 %1633, -1
  %1635 = sext i32 %1634 to i64
  store i64 %1635, ptr %188, align 8, !tbaa !9
  %1636 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %188)
  %1637 = getelementptr inbounds double, ptr %1636, i64 %indvars.iv611
  %1638 = load double, ptr %1637, align 8, !tbaa !11
  %1639 = call double @llvm.fmuladd.f64(double %1638, double -2.000000e+00, double %1632)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %189) #10
  %1640 = load i32, ptr %10, align 4, !tbaa !5
  %1641 = add nsw i32 %1640, -1
  %1642 = sext i32 %1641 to i64
  store i64 %1642, ptr %189, align 8, !tbaa !9
  %1643 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %189)
  %1644 = getelementptr double, ptr %1643, i64 %indvars.iv611
  %1645 = getelementptr i8, ptr %1644, i64 -8
  %1646 = load double, ptr %1645, align 8, !tbaa !11
  %1647 = fadd double %1639, %1646
  %1648 = load double, ptr %14, align 8, !tbaa !11
  %1649 = insertelement <2 x double> poison, double %1625, i64 0
  %1650 = insertelement <2 x double> %1649, double %1648, i64 1
  %1651 = fmul <2 x double> %1650, %1650
  %1652 = insertelement <2 x double> poison, double %1624, i64 0
  %1653 = insertelement <2 x double> %1652, double %1647, i64 1
  %1654 = fdiv <2 x double> %1653, %1651
  %shift653 = shufflevector <2 x double> %1654, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1655 = fadd <2 x double> %1654, %shift653
  %1656 = extractelement <2 x double> %1655, i64 0
  %1657 = fmul double %1615, %1656
  %1658 = call double @llvm.fmuladd.f64(double %1584, double 2.000000e+00, double %1657)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %190) #10
  %1659 = load i32, ptr %10, align 4, !tbaa !5
  %1660 = add nsw i32 %1659, -1
  %1661 = sext i32 %1660 to i64
  store i64 %1661, ptr %190, align 8, !tbaa !9
  %1662 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1569, ptr noundef nonnull align 8 dereferenceable(8) %190)
  %1663 = getelementptr inbounds double, ptr %1662, i64 %indvars.iv611
  %1664 = load double, ptr %1663, align 8, !tbaa !11
  %1665 = fsub double %1658, %1664
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %191) #10
  %1666 = load i32, ptr %10, align 4, !tbaa !5
  %1667 = add nsw i32 %1666, -1
  %1668 = sext i32 %1667 to i64
  store i64 %1668, ptr %191, align 8, !tbaa !9
  %1669 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %191)
  %1670 = getelementptr inbounds double, ptr %1669, i64 %indvars.iv611
  store double %1665, ptr %1670, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %191) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %190) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %189) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %188) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %187) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %186) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %185) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %184) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %183) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %182) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %181) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %180) #10
  br label %1676

1671:                                             ; preds = %1578
  %1672 = landingpad { ptr, i32 }
          cleanup
  br label %1675

1673:                                             ; preds = %1595
  %1674 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %185) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %184) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %183) #10
  br label %1675

1675:                                             ; preds = %1673, %1671
  %.pn501 = phi { ptr, i32 } [ %1674, %1673 ], [ %1672, %1671 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %182) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %181) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %180) #10
  br label %2138

1676:                                             ; preds = %1570, %1612
  %indvars.iv.next612 = add nuw nsw i64 %indvars.iv611, 1
  %1677 = load i32, ptr %11, align 4, !tbaa !5
  %1678 = add nsw i32 %1677, -1
  %1679 = sext i32 %1678 to i64
  %1680 = icmp slt i64 %indvars.iv.next612, %1679
  br i1 %1680, label %1570, label %.loopexit, !llvm.loop !53

.loopexit:                                        ; preds = %1676, %.loopexit520
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %192) #10
  %1681 = and i32 %1249, 80
  %brmerge515.not = icmp eq i32 %1681, 80
  br i1 %brmerge515.not, label %1682, label %.critedge8

1682:                                             ; preds = %.loopexit
  store i64 0, ptr %192, align 8, !tbaa !9
  %1683 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %192)
  %1684 = load i8, ptr %1683, align 1, !tbaa !22, !range !24, !noundef !25
  %1685 = trunc nuw i8 %1684 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %192) #10
  br i1 %1685, label %1760, label %1686

1686:                                             ; preds = %1682
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %193) #10
  store i64 0, ptr %193, align 8, !tbaa !9
  %1687 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %193)
  %1688 = load double, ptr %1687, align 8, !tbaa !11
  %1689 = load double, ptr %283, align 8, !tbaa !13
  %1690 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %194) #10
  store i64 0, ptr %194, align 8, !tbaa !9
  %1691 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %194)
  %1692 = load double, ptr %1691, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %195) #10
  store i64 0, ptr %195, align 8, !tbaa !9
  %1693 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %195)
  %1694 = load double, ptr %1693, align 8, !tbaa !11
  %1695 = invoke noundef double %1690(double noundef %1692, double noundef %1694)
          to label %1696 unwind label %1752

1696:                                             ; preds = %1686
  %1697 = fmul double %1689, %1689
  %1698 = fmul double %1697, %1695
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %196) #10
  store i64 1, ptr %196, align 8, !tbaa !9
  %1699 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %196)
  %1700 = load double, ptr %1699, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %197) #10
  store i64 0, ptr %197, align 8, !tbaa !9
  %1701 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %197)
  %1702 = load double, ptr %1701, align 8, !tbaa !11
  %1703 = load double, ptr %17, align 8, !tbaa !11
  %1704 = getelementptr inbounds i8, ptr %1, i64 176
  %1705 = load ptr, ptr %1704, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %198) #10
  store i64 0, ptr %198, align 8, !tbaa !9
  %1706 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %198)
  %1707 = load double, ptr %1706, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %199) #10
  store i64 0, ptr %199, align 8, !tbaa !9
  %1708 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %199)
  %1709 = load double, ptr %1708, align 8, !tbaa !11
  %1710 = invoke noundef double %1705(double noundef %1707, double noundef %1709)
          to label %1711 unwind label %1754

1711:                                             ; preds = %1696
  %1712 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %200) #10
  store i64 0, ptr %200, align 8, !tbaa !9
  %1713 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %200)
  %1714 = getelementptr inbounds i8, ptr %1713, i64 8
  %1715 = load double, ptr %1714, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %201) #10
  store i64 0, ptr %201, align 8, !tbaa !9
  %1716 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %201)
  %1717 = load double, ptr %1716, align 8, !tbaa !11
  %1718 = load double, ptr %14, align 8, !tbaa !11
  %1719 = getelementptr inbounds i8, ptr %1, i64 160
  %1720 = load ptr, ptr %1719, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %202) #10
  store i64 0, ptr %202, align 8, !tbaa !9
  %1721 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %202)
  %1722 = load double, ptr %1721, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %203) #10
  store i64 0, ptr %203, align 8, !tbaa !9
  %1723 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %203)
  %1724 = load double, ptr %1723, align 8, !tbaa !11
  %1725 = invoke noundef double %1720(double noundef %1722, double noundef %1724)
          to label %1726 unwind label %1756

1726:                                             ; preds = %1711
  %1727 = insertelement <2 x double> poison, double %1700, i64 0
  %1728 = insertelement <2 x double> %1727, double %1715, i64 1
  %1729 = insertelement <2 x double> poison, double %1702, i64 0
  %1730 = insertelement <2 x double> %1729, double %1717, i64 1
  %1731 = fsub <2 x double> %1728, %1730
  %1732 = insertelement <2 x double> poison, double %1703, i64 0
  %1733 = insertelement <2 x double> %1732, double %1718, i64 1
  %1734 = fneg <2 x double> %1733
  %1735 = load double, ptr %14, align 8, !tbaa !11
  %1736 = insertelement <2 x double> poison, double %1710, i64 0
  %1737 = insertelement <2 x double> %1736, double %1725, i64 1
  %1738 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1734, <2 x double> %1737, <2 x double> %1731)
  %1739 = insertelement <2 x double> poison, double %1712, i64 0
  %1740 = insertelement <2 x double> %1739, double %1735, i64 1
  %1741 = fmul <2 x double> %1740, %1740
  %1742 = fdiv <2 x double> %1738, %1741
  %shift654 = shufflevector <2 x double> %1742, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1743 = fadd <2 x double> %1742, %shift654
  %1744 = extractelement <2 x double> %1743, i64 0
  %1745 = call double @llvm.fmuladd.f64(double %1698, double %1744, double %1688)
  %1746 = getelementptr inbounds i8, ptr %1, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %204) #10
  store i64 0, ptr %204, align 8, !tbaa !9
  %1747 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1746, ptr noundef nonnull align 8 dereferenceable(8) %204)
  %1748 = load double, ptr %1747, align 8, !tbaa !11
  %1749 = fneg double %1748
  %1750 = call double @llvm.fmuladd.f64(double %1745, double 2.000000e+00, double %1749)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %205) #10
  store i64 0, ptr %205, align 8, !tbaa !9
  %1751 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %205)
  store double %1750, ptr %1751, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %205) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %204) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %203) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %202) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %201) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %200) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %199) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %198) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %197) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %196) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %195) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %194) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %193) #10
  br label %1760

1752:                                             ; preds = %1686
  %1753 = landingpad { ptr, i32 }
          cleanup
  br label %1759

1754:                                             ; preds = %1696
  %1755 = landingpad { ptr, i32 }
          cleanup
  br label %1758

1756:                                             ; preds = %1711
  %1757 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %203) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %202) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %201) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %200) #10
  br label %1758

1758:                                             ; preds = %1756, %1754
  %.pn484 = phi { ptr, i32 } [ %1757, %1756 ], [ %1755, %1754 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %199) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %198) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %197) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %196) #10
  br label %1759

1759:                                             ; preds = %1758, %1752
  %.pn484.pn = phi { ptr, i32 } [ %.pn484, %1758 ], [ %1753, %1752 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %195) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %194) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %193) #10
  br label %2138

.critedge8:                                       ; preds = %.loopexit
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %192) #10
  br label %1760

1760:                                             ; preds = %.critedge8, %1726, %1682
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %206) #10
  %1761 = and i32 %1249, 96
  %brmerge516.not = icmp eq i32 %1761, 96
  br i1 %brmerge516.not, label %1762, label %.critedge10

1762:                                             ; preds = %1760
  store i64 0, ptr %206, align 8, !tbaa !9
  %1763 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %206)
  %1764 = load i32, ptr %11, align 4, !tbaa !5
  %1765 = sext i32 %1764 to i64
  %1766 = getelementptr i8, ptr %1763, i64 %1765
  %1767 = getelementptr i8, ptr %1766, i64 -1
  %1768 = load i8, ptr %1767, align 1, !tbaa !22, !range !24, !noundef !25
  %1769 = trunc nuw i8 %1768 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %206) #10
  br i1 %1769, label %1877, label %1770

1770:                                             ; preds = %1762
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %207) #10
  store i64 0, ptr %207, align 8, !tbaa !9
  %1771 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %207)
  %1772 = load i32, ptr %11, align 4, !tbaa !5
  %1773 = sext i32 %1772 to i64
  %1774 = getelementptr double, ptr %1771, i64 %1773
  %1775 = getelementptr i8, ptr %1774, i64 -8
  %1776 = load double, ptr %1775, align 8, !tbaa !11
  %1777 = load double, ptr %283, align 8, !tbaa !13
  %1778 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %208) #10
  %1779 = add nsw i32 %1772, -1
  %1780 = sext i32 %1779 to i64
  store i64 %1780, ptr %208, align 8, !tbaa !9
  %1781 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %208)
  %1782 = load double, ptr %1781, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %209) #10
  store i64 0, ptr %209, align 8, !tbaa !9
  %1783 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %209)
  %1784 = load double, ptr %1783, align 8, !tbaa !11
  %1785 = invoke noundef double %1778(double noundef %1782, double noundef %1784)
          to label %1786 unwind label %1869

1786:                                             ; preds = %1770
  %1787 = fmul double %1777, %1777
  %1788 = fmul double %1787, %1785
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %210) #10
  store i64 1, ptr %210, align 8, !tbaa !9
  %1789 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %210)
  %1790 = load i32, ptr %11, align 4, !tbaa !5
  %1791 = sext i32 %1790 to i64
  %1792 = getelementptr double, ptr %1789, i64 %1791
  %1793 = getelementptr i8, ptr %1792, i64 -8
  %1794 = load double, ptr %1793, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %211) #10
  store i64 0, ptr %211, align 8, !tbaa !9
  %1795 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %211)
  %1796 = load i32, ptr %11, align 4, !tbaa !5
  %1797 = sext i32 %1796 to i64
  %1798 = getelementptr double, ptr %1795, i64 %1797
  %1799 = getelementptr i8, ptr %1798, i64 -8
  %1800 = load double, ptr %1799, align 8, !tbaa !11
  %1801 = load double, ptr %17, align 8, !tbaa !11
  %1802 = getelementptr inbounds i8, ptr %1, i64 176
  %1803 = load ptr, ptr %1802, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %212) #10
  %1804 = add nsw i32 %1796, -1
  %1805 = sext i32 %1804 to i64
  store i64 %1805, ptr %212, align 8, !tbaa !9
  %1806 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %212)
  %1807 = load double, ptr %1806, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %213) #10
  store i64 0, ptr %213, align 8, !tbaa !9
  %1808 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %213)
  %1809 = load double, ptr %1808, align 8, !tbaa !11
  %1810 = invoke noundef double %1803(double noundef %1807, double noundef %1809)
          to label %1811 unwind label %1871

1811:                                             ; preds = %1786
  %1812 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %214) #10
  store i64 0, ptr %214, align 8, !tbaa !9
  %1813 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %214)
  %1814 = load i32, ptr %11, align 4, !tbaa !5
  %1815 = sext i32 %1814 to i64
  %1816 = getelementptr double, ptr %1813, i64 %1815
  %1817 = getelementptr i8, ptr %1816, i64 -16
  %1818 = load double, ptr %1817, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %215) #10
  store i64 0, ptr %215, align 8, !tbaa !9
  %1819 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %215)
  %1820 = load i32, ptr %11, align 4, !tbaa !5
  %1821 = sext i32 %1820 to i64
  %1822 = getelementptr double, ptr %1819, i64 %1821
  %1823 = getelementptr i8, ptr %1822, i64 -8
  %1824 = load double, ptr %1823, align 8, !tbaa !11
  %1825 = load double, ptr %14, align 8, !tbaa !11
  %1826 = getelementptr inbounds i8, ptr %1, i64 168
  %1827 = load ptr, ptr %1826, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %216) #10
  %1828 = add nsw i32 %1820, -1
  %1829 = sext i32 %1828 to i64
  store i64 %1829, ptr %216, align 8, !tbaa !9
  %1830 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %216)
  %1831 = load double, ptr %1830, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %217) #10
  store i64 0, ptr %217, align 8, !tbaa !9
  %1832 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %217)
  %1833 = load double, ptr %1832, align 8, !tbaa !11
  %1834 = invoke noundef double %1827(double noundef %1831, double noundef %1833)
          to label %1835 unwind label %1873

1835:                                             ; preds = %1811
  %1836 = insertelement <2 x double> poison, double %1794, i64 0
  %1837 = insertelement <2 x double> %1836, double %1818, i64 1
  %1838 = insertelement <2 x double> poison, double %1800, i64 0
  %1839 = insertelement <2 x double> %1838, double %1824, i64 1
  %1840 = fsub <2 x double> %1837, %1839
  %1841 = fneg double %1801
  %1842 = load double, ptr %14, align 8, !tbaa !11
  %1843 = insertelement <2 x double> poison, double %1841, i64 0
  %1844 = insertelement <2 x double> %1843, double %1825, i64 1
  %1845 = insertelement <2 x double> poison, double %1810, i64 0
  %1846 = insertelement <2 x double> %1845, double %1834, i64 1
  %1847 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1844, <2 x double> %1846, <2 x double> %1840)
  %1848 = insertelement <2 x double> poison, double %1812, i64 0
  %1849 = insertelement <2 x double> %1848, double %1842, i64 1
  %1850 = fmul <2 x double> %1849, %1849
  %1851 = fdiv <2 x double> %1847, %1850
  %shift655 = shufflevector <2 x double> %1851, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1852 = fadd <2 x double> %1851, %shift655
  %1853 = extractelement <2 x double> %1852, i64 0
  %1854 = call double @llvm.fmuladd.f64(double %1788, double %1853, double %1776)
  %1855 = getelementptr inbounds i8, ptr %1, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %218) #10
  store i64 0, ptr %218, align 8, !tbaa !9
  %1856 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1855, ptr noundef nonnull align 8 dereferenceable(8) %218)
  %1857 = load i32, ptr %11, align 4, !tbaa !5
  %1858 = sext i32 %1857 to i64
  %1859 = getelementptr double, ptr %1856, i64 %1858
  %1860 = getelementptr i8, ptr %1859, i64 -8
  %1861 = load double, ptr %1860, align 8, !tbaa !11
  %1862 = fneg double %1861
  %1863 = call double @llvm.fmuladd.f64(double %1854, double 2.000000e+00, double %1862)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %219) #10
  store i64 0, ptr %219, align 8, !tbaa !9
  %1864 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %219)
  %1865 = load i32, ptr %11, align 4, !tbaa !5
  %1866 = sext i32 %1865 to i64
  %1867 = getelementptr double, ptr %1864, i64 %1866
  %1868 = getelementptr i8, ptr %1867, i64 -8
  store double %1863, ptr %1868, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %219) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %218) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %217) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %216) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %215) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %214) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %213) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %212) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %211) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %210) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %207) #10
  br label %1877

1869:                                             ; preds = %1770
  %1870 = landingpad { ptr, i32 }
          cleanup
  br label %1876

1871:                                             ; preds = %1786
  %1872 = landingpad { ptr, i32 }
          cleanup
  br label %1875

1873:                                             ; preds = %1811
  %1874 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %217) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %216) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %215) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %214) #10
  br label %1875

1875:                                             ; preds = %1873, %1871
  %.pn487 = phi { ptr, i32 } [ %1874, %1873 ], [ %1872, %1871 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %213) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %212) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %211) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %210) #10
  br label %1876

1876:                                             ; preds = %1875, %1869
  %.pn487.pn = phi { ptr, i32 } [ %.pn487, %1875 ], [ %1870, %1869 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %209) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %208) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %207) #10
  br label %2138

.critedge10:                                      ; preds = %1760
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %206) #10
  br label %1877

1877:                                             ; preds = %.critedge10, %1835, %1762
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %220) #10
  %brmerge517 = or i1 %.not483, %.not481
  br i1 %brmerge517, label %.critedge12, label %1878

1878:                                             ; preds = %1877
  %1879 = load i32, ptr %10, align 4, !tbaa !5
  %1880 = add nsw i32 %1879, -1
  %1881 = sext i32 %1880 to i64
  store i64 %1881, ptr %220, align 8, !tbaa !9
  %1882 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %220)
  %1883 = load i8, ptr %1882, align 1, !tbaa !22, !range !24, !noundef !25
  %1884 = trunc nuw i8 %1883 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %220) #10
  br i1 %1884, label %1989, label %1885

1885:                                             ; preds = %1878
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %221) #10
  %1886 = load i32, ptr %10, align 4, !tbaa !5
  %1887 = add nsw i32 %1886, -1
  %1888 = sext i32 %1887 to i64
  store i64 %1888, ptr %221, align 8, !tbaa !9
  %1889 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %221)
  %1890 = load double, ptr %1889, align 8, !tbaa !11
  %1891 = load double, ptr %283, align 8, !tbaa !13
  %1892 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %222) #10
  store i64 0, ptr %222, align 8, !tbaa !9
  %1893 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %222)
  %1894 = load double, ptr %1893, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %223) #10
  %1895 = load i32, ptr %10, align 4, !tbaa !5
  %1896 = add nsw i32 %1895, -1
  %1897 = sext i32 %1896 to i64
  store i64 %1897, ptr %223, align 8, !tbaa !9
  %1898 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %223)
  %1899 = load double, ptr %1898, align 8, !tbaa !11
  %1900 = invoke noundef double %1892(double noundef %1894, double noundef %1899)
          to label %1901 unwind label %1981

1901:                                             ; preds = %1885
  %1902 = fmul double %1891, %1891
  %1903 = fmul double %1902, %1900
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %224) #10
  %1904 = load i32, ptr %10, align 4, !tbaa !5
  %1905 = add nsw i32 %1904, -2
  %1906 = sext i32 %1905 to i64
  store i64 %1906, ptr %224, align 8, !tbaa !9
  %1907 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %224)
  %1908 = load double, ptr %1907, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %225) #10
  %1909 = load i32, ptr %10, align 4, !tbaa !5
  %1910 = add nsw i32 %1909, -1
  %1911 = sext i32 %1910 to i64
  store i64 %1911, ptr %225, align 8, !tbaa !9
  %1912 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %225)
  %1913 = load double, ptr %1912, align 8, !tbaa !11
  %1914 = load double, ptr %17, align 8, !tbaa !11
  %1915 = getelementptr inbounds i8, ptr %1, i64 184
  %1916 = load ptr, ptr %1915, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %226) #10
  store i64 0, ptr %226, align 8, !tbaa !9
  %1917 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %226)
  %1918 = load double, ptr %1917, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %227) #10
  %1919 = load i32, ptr %10, align 4, !tbaa !5
  %1920 = add nsw i32 %1919, -1
  %1921 = sext i32 %1920 to i64
  store i64 %1921, ptr %227, align 8, !tbaa !9
  %1922 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %227)
  %1923 = load double, ptr %1922, align 8, !tbaa !11
  %1924 = invoke noundef double %1916(double noundef %1918, double noundef %1923)
          to label %1925 unwind label %1983

1925:                                             ; preds = %1901
  %1926 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %228) #10
  %1927 = load i32, ptr %10, align 4, !tbaa !5
  %1928 = add nsw i32 %1927, -1
  %1929 = sext i32 %1928 to i64
  store i64 %1929, ptr %228, align 8, !tbaa !9
  %1930 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %228)
  %1931 = getelementptr inbounds i8, ptr %1930, i64 8
  %1932 = load double, ptr %1931, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %229) #10
  %1933 = load i32, ptr %10, align 4, !tbaa !5
  %1934 = add nsw i32 %1933, -1
  %1935 = sext i32 %1934 to i64
  store i64 %1935, ptr %229, align 8, !tbaa !9
  %1936 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %229)
  %1937 = load double, ptr %1936, align 8, !tbaa !11
  %1938 = load double, ptr %14, align 8, !tbaa !11
  %1939 = getelementptr inbounds i8, ptr %1, i64 160
  %1940 = load ptr, ptr %1939, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %230) #10
  store i64 0, ptr %230, align 8, !tbaa !9
  %1941 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %230)
  %1942 = load double, ptr %1941, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %231) #10
  %1943 = load i32, ptr %10, align 4, !tbaa !5
  %1944 = add nsw i32 %1943, -1
  %1945 = sext i32 %1944 to i64
  store i64 %1945, ptr %231, align 8, !tbaa !9
  %1946 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %231)
  %1947 = load double, ptr %1946, align 8, !tbaa !11
  %1948 = invoke noundef double %1940(double noundef %1942, double noundef %1947)
          to label %1949 unwind label %1985

1949:                                             ; preds = %1925
  %1950 = insertelement <2 x double> poison, double %1908, i64 0
  %1951 = insertelement <2 x double> %1950, double %1932, i64 1
  %1952 = insertelement <2 x double> poison, double %1913, i64 0
  %1953 = insertelement <2 x double> %1952, double %1937, i64 1
  %1954 = fsub <2 x double> %1951, %1953
  %1955 = fneg double %1938
  %1956 = load double, ptr %14, align 8, !tbaa !11
  %1957 = insertelement <2 x double> poison, double %1914, i64 0
  %1958 = insertelement <2 x double> %1957, double %1955, i64 1
  %1959 = insertelement <2 x double> poison, double %1924, i64 0
  %1960 = insertelement <2 x double> %1959, double %1948, i64 1
  %1961 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1958, <2 x double> %1960, <2 x double> %1954)
  %1962 = insertelement <2 x double> poison, double %1926, i64 0
  %1963 = insertelement <2 x double> %1962, double %1956, i64 1
  %1964 = fmul <2 x double> %1963, %1963
  %1965 = fdiv <2 x double> %1961, %1964
  %shift656 = shufflevector <2 x double> %1965, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1966 = fadd <2 x double> %1965, %shift656
  %1967 = extractelement <2 x double> %1966, i64 0
  %1968 = call double @llvm.fmuladd.f64(double %1903, double %1967, double %1890)
  %1969 = getelementptr inbounds i8, ptr %1, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %232) #10
  %1970 = load i32, ptr %10, align 4, !tbaa !5
  %1971 = add nsw i32 %1970, -1
  %1972 = sext i32 %1971 to i64
  store i64 %1972, ptr %232, align 8, !tbaa !9
  %1973 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %1969, ptr noundef nonnull align 8 dereferenceable(8) %232)
  %1974 = load double, ptr %1973, align 8, !tbaa !11
  %1975 = fneg double %1974
  %1976 = call double @llvm.fmuladd.f64(double %1968, double 2.000000e+00, double %1975)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %233) #10
  %1977 = load i32, ptr %10, align 4, !tbaa !5
  %1978 = add nsw i32 %1977, -1
  %1979 = sext i32 %1978 to i64
  store i64 %1979, ptr %233, align 8, !tbaa !9
  %1980 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %233)
  store double %1976, ptr %1980, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %233) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %232) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %231) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %228) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %225) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %224) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %223) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %222) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %221) #10
  br label %1989

1981:                                             ; preds = %1885
  %1982 = landingpad { ptr, i32 }
          cleanup
  br label %1988

1983:                                             ; preds = %1901
  %1984 = landingpad { ptr, i32 }
          cleanup
  br label %1987

1985:                                             ; preds = %1925
  %1986 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %231) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %229) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %228) #10
  br label %1987

1987:                                             ; preds = %1985, %1983
  %.pn490 = phi { ptr, i32 } [ %1986, %1985 ], [ %1984, %1983 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %225) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %224) #10
  br label %1988

1988:                                             ; preds = %1987, %1981
  %.pn490.pn = phi { ptr, i32 } [ %.pn490, %1987 ], [ %1982, %1981 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %223) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %222) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %221) #10
  br label %2138

.critedge12:                                      ; preds = %1877
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %220) #10
  br label %1989

1989:                                             ; preds = %.critedge12, %1949, %1878
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %234) #10
  %brmerge518 = or i1 %.not483, %.not482
  br i1 %brmerge518, label %.critedge14, label %1990

1990:                                             ; preds = %1989
  %1991 = load i32, ptr %10, align 4, !tbaa !5
  %1992 = add nsw i32 %1991, -1
  %1993 = sext i32 %1992 to i64
  store i64 %1993, ptr %234, align 8, !tbaa !9
  %1994 = call noundef ptr @_ZN3cda4math10containers6MatrixIbEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(8) %234)
  %1995 = load i32, ptr %11, align 4, !tbaa !5
  %1996 = sext i32 %1995 to i64
  %1997 = getelementptr i8, ptr %1994, i64 %1996
  %1998 = getelementptr i8, ptr %1997, i64 -1
  %1999 = load i8, ptr %1998, align 1, !tbaa !22, !range !24, !noundef !25
  %2000 = trunc nuw i8 %1999 to i1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %234) #10
  br i1 %2000, label %2137, label %2001

2001:                                             ; preds = %1990
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %235) #10
  %2002 = load i32, ptr %10, align 4, !tbaa !5
  %2003 = add nsw i32 %2002, -1
  %2004 = sext i32 %2003 to i64
  store i64 %2004, ptr %235, align 8, !tbaa !9
  %2005 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %235)
  %2006 = load i32, ptr %11, align 4, !tbaa !5
  %2007 = sext i32 %2006 to i64
  %2008 = getelementptr double, ptr %2005, i64 %2007
  %2009 = getelementptr i8, ptr %2008, i64 -8
  %2010 = load double, ptr %2009, align 8, !tbaa !11
  %2011 = load double, ptr %283, align 8, !tbaa !13
  %2012 = load ptr, ptr %285, align 8, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %236) #10
  %2013 = add nsw i32 %2006, -1
  %2014 = sext i32 %2013 to i64
  store i64 %2014, ptr %236, align 8, !tbaa !9
  %2015 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %236)
  %2016 = load double, ptr %2015, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %237) #10
  %2017 = load i32, ptr %10, align 4, !tbaa !5
  %2018 = add nsw i32 %2017, -1
  %2019 = sext i32 %2018 to i64
  store i64 %2019, ptr %237, align 8, !tbaa !9
  %2020 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %237)
  %2021 = load double, ptr %2020, align 8, !tbaa !11
  %2022 = invoke noundef double %2012(double noundef %2016, double noundef %2021)
          to label %2023 unwind label %2129

2023:                                             ; preds = %2001
  %2024 = fmul double %2011, %2011
  %2025 = fmul double %2024, %2022
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %238) #10
  %2026 = load i32, ptr %10, align 4, !tbaa !5
  %2027 = add nsw i32 %2026, -2
  %2028 = sext i32 %2027 to i64
  store i64 %2028, ptr %238, align 8, !tbaa !9
  %2029 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %238)
  %2030 = load i32, ptr %11, align 4, !tbaa !5
  %2031 = sext i32 %2030 to i64
  %2032 = getelementptr double, ptr %2029, i64 %2031
  %2033 = getelementptr i8, ptr %2032, i64 -8
  %2034 = load double, ptr %2033, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %239) #10
  %2035 = load i32, ptr %10, align 4, !tbaa !5
  %2036 = add nsw i32 %2035, -1
  %2037 = sext i32 %2036 to i64
  store i64 %2037, ptr %239, align 8, !tbaa !9
  %2038 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %239)
  %2039 = load i32, ptr %11, align 4, !tbaa !5
  %2040 = sext i32 %2039 to i64
  %2041 = getelementptr double, ptr %2038, i64 %2040
  %2042 = getelementptr i8, ptr %2041, i64 -8
  %2043 = load double, ptr %2042, align 8, !tbaa !11
  %2044 = load double, ptr %17, align 8, !tbaa !11
  %2045 = getelementptr inbounds i8, ptr %1, i64 184
  %2046 = load ptr, ptr %2045, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %240) #10
  %2047 = add nsw i32 %2039, -1
  %2048 = sext i32 %2047 to i64
  store i64 %2048, ptr %240, align 8, !tbaa !9
  %2049 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %240)
  %2050 = load double, ptr %2049, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %241) #10
  %2051 = load i32, ptr %10, align 4, !tbaa !5
  %2052 = add nsw i32 %2051, -1
  %2053 = sext i32 %2052 to i64
  store i64 %2053, ptr %241, align 8, !tbaa !9
  %2054 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %241)
  %2055 = load double, ptr %2054, align 8, !tbaa !11
  %2056 = invoke noundef double %2046(double noundef %2050, double noundef %2055)
          to label %2057 unwind label %2131

2057:                                             ; preds = %2023
  %2058 = load double, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %242) #10
  %2059 = load i32, ptr %10, align 4, !tbaa !5
  %2060 = add nsw i32 %2059, -1
  %2061 = sext i32 %2060 to i64
  store i64 %2061, ptr %242, align 8, !tbaa !9
  %2062 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %242)
  %2063 = load i32, ptr %11, align 4, !tbaa !5
  %2064 = sext i32 %2063 to i64
  %2065 = getelementptr double, ptr %2062, i64 %2064
  %2066 = getelementptr i8, ptr %2065, i64 -16
  %2067 = load double, ptr %2066, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %243) #10
  %2068 = load i32, ptr %10, align 4, !tbaa !5
  %2069 = add nsw i32 %2068, -1
  %2070 = sext i32 %2069 to i64
  store i64 %2070, ptr %243, align 8, !tbaa !9
  %2071 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef nonnull align 8 dereferenceable(8) %243)
  %2072 = load i32, ptr %11, align 4, !tbaa !5
  %2073 = sext i32 %2072 to i64
  %2074 = getelementptr double, ptr %2071, i64 %2073
  %2075 = getelementptr i8, ptr %2074, i64 -8
  %2076 = load double, ptr %2075, align 8, !tbaa !11
  %2077 = load double, ptr %14, align 8, !tbaa !11
  %2078 = getelementptr inbounds i8, ptr %1, i64 168
  %2079 = load ptr, ptr %2078, align 8, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %244) #10
  %2080 = add nsw i32 %2072, -1
  %2081 = sext i32 %2080 to i64
  store i64 %2081, ptr %244, align 8, !tbaa !9
  %2082 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(8) %244)
  %2083 = load double, ptr %2082, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %245) #10
  %2084 = load i32, ptr %10, align 4, !tbaa !5
  %2085 = add nsw i32 %2084, -1
  %2086 = sext i32 %2085 to i64
  store i64 %2086, ptr %245, align 8, !tbaa !9
  %2087 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3cda4math10containers6VectorIdEixERKm(ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %245)
  %2088 = load double, ptr %2087, align 8, !tbaa !11
  %2089 = invoke noundef double %2079(double noundef %2083, double noundef %2088)
          to label %2090 unwind label %2133

2090:                                             ; preds = %2057
  %2091 = insertelement <2 x double> poison, double %2034, i64 0
  %2092 = insertelement <2 x double> %2091, double %2067, i64 1
  %2093 = insertelement <2 x double> poison, double %2043, i64 0
  %2094 = insertelement <2 x double> %2093, double %2076, i64 1
  %2095 = fsub <2 x double> %2092, %2094
  %2096 = load double, ptr %14, align 8, !tbaa !11
  %2097 = insertelement <2 x double> poison, double %2044, i64 0
  %2098 = insertelement <2 x double> %2097, double %2077, i64 1
  %2099 = insertelement <2 x double> poison, double %2056, i64 0
  %2100 = insertelement <2 x double> %2099, double %2089, i64 1
  %2101 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %2098, <2 x double> %2100, <2 x double> %2095)
  %2102 = insertelement <2 x double> poison, double %2058, i64 0
  %2103 = insertelement <2 x double> %2102, double %2096, i64 1
  %2104 = fmul <2 x double> %2103, %2103
  %2105 = fdiv <2 x double> %2101, %2104
  %shift657 = shufflevector <2 x double> %2105, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %2106 = fadd <2 x double> %2105, %shift657
  %2107 = extractelement <2 x double> %2106, i64 0
  %2108 = call double @llvm.fmuladd.f64(double %2025, double %2107, double %2010)
  %2109 = getelementptr inbounds i8, ptr %1, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %246) #10
  %2110 = load i32, ptr %10, align 4, !tbaa !5
  %2111 = add nsw i32 %2110, -1
  %2112 = sext i32 %2111 to i64
  store i64 %2112, ptr %246, align 8, !tbaa !9
  %2113 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %2109, ptr noundef nonnull align 8 dereferenceable(8) %246)
  %2114 = load i32, ptr %11, align 4, !tbaa !5
  %2115 = sext i32 %2114 to i64
  %2116 = getelementptr double, ptr %2113, i64 %2115
  %2117 = getelementptr i8, ptr %2116, i64 -8
  %2118 = load double, ptr %2117, align 8, !tbaa !11
  %2119 = fneg double %2118
  %2120 = call double @llvm.fmuladd.f64(double %2108, double 2.000000e+00, double %2119)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %247) #10
  %2121 = load i32, ptr %10, align 4, !tbaa !5
  %2122 = add nsw i32 %2121, -1
  %2123 = sext i32 %2122 to i64
  store i64 %2123, ptr %247, align 8, !tbaa !9
  %2124 = call noundef ptr @_ZN3cda4math10containers6MatrixIdEixERKm(ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(8) %247)
  %2125 = load i32, ptr %11, align 4, !tbaa !5
  %2126 = sext i32 %2125 to i64
  %2127 = getelementptr double, ptr %2124, i64 %2126
  %2128 = getelementptr i8, ptr %2127, i64 -8
  store double %2120, ptr %2128, align 8, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %247) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %246) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %245) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %244) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %243) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %242) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %241) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %240) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %239) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %238) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %237) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %236) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %235) #10
  br label %2137

2129:                                             ; preds = %2001
  %2130 = landingpad { ptr, i32 }
          cleanup
  br label %2136

2131:                                             ; preds = %2023
  %2132 = landingpad { ptr, i32 }
          cleanup
  br label %2135

2133:                                             ; preds = %2057
  %2134 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %245) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %244) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %243) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %242) #10
  br label %2135

2135:                                             ; preds = %2133, %2131
  %.pn493 = phi { ptr, i32 } [ %2134, %2133 ], [ %2132, %2131 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %241) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %240) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %239) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %238) #10
  br label %2136

2136:                                             ; preds = %2135, %2129
  %.pn493.pn = phi { ptr, i32 } [ %.pn493, %2135 ], [ %2130, %2129 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %237) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %236) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %235) #10
  br label %2138

.critedge14:                                      ; preds = %1989
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %234) #10
  br label %2137

2137:                                             ; preds = %.critedge14, %2090, %1990
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %162) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %162) #10
  br label %2139

2138:                                             ; preds = %2136, %1988, %1876, %1759, %1675, %1560, %1455, %1444
  %.pn505 = phi { ptr, i32 } [ %1445, %1444 ], [ %1456, %1455 ], [ %.pn503, %1560 ], [ %.pn501, %1675 ], [ %.pn493.pn, %2136 ], [ %.pn490.pn, %1988 ], [ %.pn487.pn, %1876 ], [ %.pn484.pn, %1759 ]
  call void @_ZNSt7__cxx1110_List_baseISt6threadSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %162) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %162) #10
  br label %2169

2139:                                             ; preds = %2137, %1246
  %2140 = getelementptr inbounds i8, ptr %1, i64 24
  %2141 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3cda4math10containers6MatrixIdEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(40) %2140, ptr noundef nonnull align 8 dereferenceable(40) %6)
  %2142 = load double, ptr %283, align 8, !tbaa !13
  %2143 = getelementptr inbounds i8, ptr %1, i64 240
  %2144 = load double, ptr %2143, align 8, !tbaa !54
  %2145 = fadd double %2142, %2144
  store double %2145, ptr %2143, align 8, !tbaa !54
  %2146 = and i8 %3, 2
  %.not496 = icmp eq i8 %2146, 0
  br i1 %.not496, label %2168, label %2147

2147:                                             ; preds = %2139
  %2148 = getelementptr inbounds i8, ptr %1, i64 104
  %2149 = invoke noundef zeroext i1 @_ZStneIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %2148, ptr noundef nonnull @.str.6)
          to label %2150 unwind label %331

2150:                                             ; preds = %2147
  br i1 %2149, label %2151, label %2160

2151:                                             ; preds = %2150
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %248, ptr noundef nonnull align 8 dereferenceable(32) %2148)
          to label %2152 unwind label %331

2152:                                             ; preds = %2151
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %250) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %250) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %249, ptr noundef nonnull @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %250)
          to label %2153 unwind label %2155

2153:                                             ; preds = %2152
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_RNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %248, ptr noundef nonnull %249, 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 %2154 unwind label %2157

2154:                                             ; preds = %2153
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %250) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %250) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #10
  br label %2168

2155:                                             ; preds = %2152
  %2156 = landingpad { ptr, i32 }
          cleanup
  br label %2159

2157:                                             ; preds = %2153
  %2158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #10
  br label %2159

2159:                                             ; preds = %2157, %2155
  %.pn499 = phi { ptr, i32 } [ %2158, %2157 ], [ %2156, %2155 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %250) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %250) #10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #10
  br label %2169

2160:                                             ; preds = %2150
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %252) #10
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #10
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %251, ptr noundef nonnull @.str.11, ptr noundef nonnull align 1 dereferenceable(1) %252)
          to label %2161 unwind label %2163

2161:                                             ; preds = %2160
  invoke void @_ZN3cda4math22differential_equations3EDP8saveDATAENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEhRNS0_10containers6VectorIdEESC_RNS9_6MatrixIdEE(ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull %251, 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 %2162 unwind label %2165

2162:                                             ; preds = %2161
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #10
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %252) #10
  br label %2168

2163:                                             ; preds = %2160
  %2164 = landingpad { ptr, i32 }
          cleanup
  br label %2167

2165:                                             ; preds = %2161
  %2166 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #10
  br label %2167

2167:                                             ; preds = %2165, %2163
  %.pn497 = phi { ptr, i32 } [ %2166, %2165 ], [ %2164, %2163 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %252) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %252) #10
  br label %2169

2168:                                             ; preds = %2154, %2162, %2139
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  ret void

2169:                                             ; preds = %2167, %2159, %2138, %1402, %1327, %1247, %494, %419, %331, %329, %327
  %.pn509.pn = phi { ptr, i32 } [ %.pn509, %1327 ], [ %.pn507, %1402 ], [ %.pn505, %2138 ], [ %.pn499, %2159 ], [ %332, %331 ], [ %.pn497, %2167 ], [ %.pn478, %419 ], [ %.pn476, %494 ], [ %.pn473.pn, %1247 ], [ %330, %329 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @_ZN3cda4math10containers6MatrixIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  resume { ptr, i32 } %.pn509.pn
}

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

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

; Function Attrs: nounwind
declare noundef i32 @_ZNSt6thread20hardware_concurrencyEv() local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_0EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(216)) local_unnamed_addr #2 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEEN3$_0D2Ev"(ptr noundef nonnull align 8 dereferenceable(216)) unnamed_addr #7 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt14_List_iteratorISt6threadES3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

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

declare void @_ZNSt6thread4joinEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #8

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZNSt7__cxx114listISt6threadSaIS1_EE12emplace_backIJZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS6_10containers6VectorIdEESC_RNS9_6MatrixIdEESF_RNSD_IbEEE3$_1EEERS1_DpOT_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #2 align 2

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "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 #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 248}
!14 = !{!"_ZTSN3cda4math22differential_equations3EDPE", !15, i64 0, !17, i64 24, !18, i64 64, !19, i64 104, !16, i64 136, !16, i64 144, !16, i64 152, !16, i64 160, !16, i64 168, !16, i64 176, !16, i64 184, !16, i64 192, !16, i64 200, !16, i64 208, !16, i64 216, !16, i64 224, !16, i64 232, !12, i64 240, !12, i64 248, !16, i64 256, !16, i64 264, !12, i64 272}
!15 = !{!"_ZTSN3cda4math10containers6VectorIdEE", !10, i64 0, !16, i64 8, !16, i64 16}
!16 = !{!"any pointer", !7, i64 0}
!17 = !{!"_ZTSN3cda4math10containers6MatrixIdEE", !10, i64 0, !10, i64 8, !10, i64 16, !16, i64 24, !16, i64 32}
!18 = !{!"_ZTSN3cda4math10containers6MatrixIbEE", !10, i64 0, !10, i64 8, !10, i64 16, !16, i64 24, !16, i64 32}
!19 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !20, i64 0, !10, i64 8, !7, i64 16}
!20 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !16, i64 0}
!21 = !{!14, !16, i64 264}
!22 = !{!23, !23, i64 0}
!23 = !{!"bool", !7, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!14, !16, i64 176}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!14, !16, i64 160}
!30 = distinct !{!30, !28}
!31 = !{!32, !6, i64 0}
!32 = !{!"_ZTSZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEE3$_0", !6, i64 0, !6, i64 4, !16, i64 8, !6, i64 16, !6, i64 20, !18, i64 24, !16, i64 64, !17, i64 72, !17, i64 112, !15, i64 152, !15, i64 176, !12, i64 200, !12, i64 208}
!33 = !{!32, !6, i64 4}
!34 = !{!32, !16, i64 8}
!35 = !{!32, !6, i64 16}
!36 = !{!32, !6, i64 20}
!37 = !{!16, !16, i64 0}
!38 = !{!32, !12, i64 200}
!39 = !{!32, !12, i64 208}
!40 = distinct !{!40, !28}
!41 = !{!14, !16, i64 168}
!42 = distinct !{!42, !28}
!43 = !{!14, !16, i64 184}
!44 = distinct !{!44, !28}
!45 = distinct !{!45, !28}
!46 = distinct !{!46, !28}
!47 = !{!48, !6, i64 0}
!48 = !{!"_ZTSZN3cda4math22differential_equations3EDP9solveWAVEEhhRNS0_10containers6VectorIdEES6_RNS3_6MatrixIdEES9_RNS7_IbEEE3$_1", !6, i64 0, !6, i64 4, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !16, i64 80, !16, i64 88}
!49 = !{!48, !6, i64 4}
!50 = !{!48, !16, i64 8}
!51 = distinct !{!51, !28}
!52 = distinct !{!52, !28}
!53 = distinct !{!53, !28}
!54 = !{!14, !12, i64 240}


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