; LLVM IR from LukeMcCulloch/cfd_solvers_cpp :: src/EulerUnsteady2D_basic_package.ll (ZN13EulerSolver2D10MainData2D19construct_grid_dataEv)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.Array2D = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%class.Array2D.4 = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%class.bracket_proxy = type <{ ptr, i32, [4 x i8] }>
%"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.EulerSolver2D::MainData2D" = type { %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i64, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", double, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i64, double, double, double, double, double, double, double, double, i64, ptr, i64, i64, i64, ptr, i64, ptr, i64, ptr, i64, ptr, i64 }
%"class.EulerSolver2D::node_type" = type { double, double, i32, ptr, i32, %class.Vector1D, double, i32, i32, ptr, double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, ptr, ptr, ptr }
%class.Vector1D = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.EulerSolver2D::elm_type" = type <{ i32, [4 x i8], ptr, i32, [4 x i8], ptr, double, double, double, ptr, ptr, ptr, ptr, ptr, double, double, i32, i32, %class.Vector1D, double, ptr, ptr, i32, [4 x i8] }>
%"class.EulerSolver2D::edge_type" = type { i32, i32, i32, i32, %class.Array2D.4, double, %class.Array2D.4, double, i32, i32 }
%"class.EulerSolver2D::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.EulerSolver2D::face_type" = type { i32, i32, i32, i32, double, %class.Array2D.4 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [27 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: 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) #1

; 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)) #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #3

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) #5

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #4

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D19construct_grid_dataEv(ptr noundef nonnull align 8 dereferenceable(512) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca i8, align 1
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca double, align 8
  %53 = alloca i64, align 8
  %54 = alloca i32, align 4
  %55 = alloca i64, align 8
  %56 = alloca i32, align 4
  %57 = alloca i64, align 8
  %58 = alloca ptr, align 8
  %59 = alloca i32, align 4
  %60 = alloca %class.Array2D, align 8
  %61 = alloca i32, align 4
  %62 = alloca i64, align 8
  %63 = alloca i32, align 4
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i32, align 4
  %70 = alloca i64, align 8
  %71 = alloca i64, align 8
  %72 = alloca %class.Array2D.4, align 8
  %73 = alloca %class.Array2D.4, align 8
  %74 = alloca %class.Array2D.4, align 8
  %75 = alloca %class.Array2D.4, align 8
  %76 = alloca %class.Array2D.4, align 8
  %77 = alloca i64, align 8
  %78 = alloca i64, align 8
  %79 = alloca i64, align 8
  %80 = alloca %class.Array2D, align 8
  %81 = alloca i64, align 8
  %82 = alloca %class.Array2D, align 8
  %83 = alloca i64, align 8
  %84 = alloca i64, align 8
  %85 = alloca i64, align 8
  %86 = alloca i64, align 8
  %87 = alloca i64, align 8
  %88 = alloca i64, align 8
  %89 = alloca i64, align 8
  %90 = alloca i64, align 8
  %91 = alloca i64, align 8
  %92 = alloca %class.bracket_proxy, align 8
  %93 = alloca { ptr, i32 }, align 8
  %94 = alloca %class.bracket_proxy, align 8
  %95 = alloca { ptr, i32 }, align 8
  %96 = alloca %class.bracket_proxy, align 8
  %97 = alloca { ptr, i32 }, align 8
  %98 = alloca %class.bracket_proxy, align 8
  %99 = alloca { ptr, i32 }, align 8
  %100 = alloca %class.bracket_proxy, align 8
  %101 = alloca { ptr, i32 }, align 8
  %102 = alloca %class.bracket_proxy, align 8
  %103 = alloca { ptr, i32 }, align 8
  %104 = alloca %class.bracket_proxy, align 8
  %105 = alloca { ptr, i32 }, align 8
  %106 = alloca %class.bracket_proxy, align 8
  %107 = alloca { ptr, i32 }, align 8
  %108 = alloca %class.bracket_proxy, align 8
  %109 = alloca { ptr, i32 }, align 8
  %110 = alloca %class.bracket_proxy, align 8
  %111 = alloca { ptr, i32 }, align 8
  %112 = alloca %class.bracket_proxy, align 8
  %113 = alloca { ptr, i32 }, 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 %class.bracket_proxy, align 8
  %121 = alloca { ptr, i32 }, align 8
  %122 = alloca %class.bracket_proxy, align 8
  %123 = alloca { ptr, i32 }, align 8
  %124 = alloca %class.bracket_proxy, align 8
  %125 = alloca { ptr, i32 }, 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 %class.bracket_proxy, align 8
  %132 = alloca { ptr, i32 }, align 8
  %133 = alloca %class.bracket_proxy, align 8
  %134 = alloca { ptr, i32 }, align 8
  %135 = alloca %class.bracket_proxy, align 8
  %136 = alloca { ptr, i32 }, align 8
  %137 = alloca %class.bracket_proxy, align 8
  %138 = alloca { ptr, i32 }, align 8
  %139 = alloca i64, align 8
  %140 = alloca i64, align 8
  %141 = alloca %class.bracket_proxy, align 8
  %142 = alloca { ptr, i32 }, align 8
  %143 = alloca %class.bracket_proxy, align 8
  %144 = alloca { ptr, i32 }, 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 %class.Array2D.4, align 8
  %162 = alloca %class.Array2D.4, 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 i32, align 4
  %170 = alloca i32, align 4
  %171 = alloca %"class.std::__cxx11::basic_string", align 8
  %172 = alloca %"class.std::__cxx11::basic_string", align 8
  %173 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %174 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #12
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #12
  store i32 0, ptr %11, align 4, !tbaa !9
  store i32 -1, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %8, align 4, !tbaa !9
  store i32 0, ptr %9, align 4, !tbaa !9
  %175 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %175, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %177 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.27)
  %178 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #12
  store i64 0, ptr %53, align 8, !tbaa !11
  br label %179

179:                                              ; preds = %191, %1
  %180 = load i64, ptr %53, align 8, !tbaa !11
  %181 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %182 = load i64, ptr %181, align 8, !tbaa !13
  %183 = icmp ult i64 %180, %182
  br i1 %183, label %185, label %184

184:                                              ; preds = %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #12
  br label %194

185:                                              ; preds = %179
  %186 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %187 = load ptr, ptr %186, align 8, !tbaa !18
  %188 = load i64, ptr %53, align 8, !tbaa !11
  %189 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %187, i64 %188
  %190 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %189, i32 0, i32 4
  store i32 0, ptr %190, align 8, !tbaa !19
  br label %191

191:                                              ; preds = %185
  %192 = load i64, ptr %53, align 8, !tbaa !11
  %193 = add i64 %192, 1
  store i64 %193, ptr %53, align 8, !tbaa !11
  br label %179, !llvm.loop !26

194:                                              ; preds = %184
  %195 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 0, ptr %195, align 8, !tbaa !28
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.28)
  %197 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %198 = load i64, ptr %197, align 8, !tbaa !13
  %199 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %196, i64 noundef %198)
  %200 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %199, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.29)
  %202 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %203 = load i64, ptr %202, align 8, !tbaa !29
  %204 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %201, i64 noundef %203)
  %205 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %204, ptr noundef @.str.14)
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %205, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #12
  store i32 0, ptr %54, align 4, !tbaa !9
  br label %207

207:                                              ; preds = %700, %194
  %208 = load i32, ptr %54, align 4, !tbaa !9
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %211 = load i64, ptr %210, align 8, !tbaa !29
  %212 = icmp ult i64 %209, %211
  br i1 %212, label %214, label %213

213:                                              ; preds = %207
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #12
  br label %703

214:                                              ; preds = %207
  %215 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %216 = load ptr, ptr %215, align 8, !tbaa !30
  %217 = load i32, ptr %54, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %216, i64 %218
  %220 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %219, i32 0, i32 2
  %221 = load ptr, ptr %220, align 8, !tbaa !31
  %222 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %221, i32 noundef 0, i32 noundef 0)
  %223 = load i32, ptr %222, align 4, !tbaa !9
  store i32 %223, ptr %10, align 4, !tbaa !9
  %224 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %225 = load ptr, ptr %224, align 8, !tbaa !30
  %226 = load i32, ptr %54, align 4, !tbaa !9
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %225, i64 %227
  %229 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %228, i32 0, i32 2
  %230 = load ptr, ptr %229, align 8, !tbaa !31
  %231 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %230, i32 noundef 1, i32 noundef 0)
  %232 = load i32, ptr %231, align 4, !tbaa !9
  store i32 %232, ptr %11, align 4, !tbaa !9
  %233 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %234 = load ptr, ptr %233, align 8, !tbaa !30
  %235 = load i32, ptr %54, align 4, !tbaa !9
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %234, i64 %236
  %238 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %237, i32 0, i32 2
  %239 = load ptr, ptr %238, align 8, !tbaa !31
  %240 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %239, i32 noundef 2, i32 noundef 0)
  %241 = load i32, ptr %240, align 4, !tbaa !9
  store i32 %241, ptr %12, align 4, !tbaa !9
  %242 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %243 = load ptr, ptr %242, align 8, !tbaa !18
  %244 = load i32, ptr %10, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %243, i64 %245
  %247 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %246, i32 0, i32 0
  %248 = load double, ptr %247, align 8, !tbaa !33
  store double %248, ptr %14, align 8, !tbaa !34
  %249 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %250 = load ptr, ptr %249, align 8, !tbaa !18
  %251 = load i32, ptr %11, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %250, i64 %252
  %254 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %253, i32 0, i32 0
  %255 = load double, ptr %254, align 8, !tbaa !33
  store double %255, ptr %15, align 8, !tbaa !34
  %256 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %257 = load ptr, ptr %256, align 8, !tbaa !18
  %258 = load i32, ptr %12, align 4, !tbaa !9
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %257, i64 %259
  %261 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %260, i32 0, i32 0
  %262 = load double, ptr %261, align 8, !tbaa !33
  store double %262, ptr %16, align 8, !tbaa !34
  %263 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %264 = load ptr, ptr %263, align 8, !tbaa !18
  %265 = load i32, ptr %10, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %264, i64 %266
  %268 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %267, i32 0, i32 1
  %269 = load double, ptr %268, align 8, !tbaa !35
  store double %269, ptr %18, align 8, !tbaa !34
  %270 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %271 = load ptr, ptr %270, align 8, !tbaa !18
  %272 = load i32, ptr %11, align 4, !tbaa !9
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %271, i64 %273
  %275 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %274, i32 0, i32 1
  %276 = load double, ptr %275, align 8, !tbaa !35
  store double %276, ptr %19, align 8, !tbaa !34
  %277 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %278 = load ptr, ptr %277, align 8, !tbaa !18
  %279 = load i32, ptr %12, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %278, i64 %280
  %282 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %281, i32 0, i32 1
  %283 = load double, ptr %282, align 8, !tbaa !35
  store double %283, ptr %20, align 8, !tbaa !34
  %284 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %285 = load ptr, ptr %284, align 8, !tbaa !18
  %286 = load i32, ptr %10, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %285, i64 %287
  %289 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %288, i32 0, i32 4
  %290 = load i32, ptr %289, align 8, !tbaa !19
  %291 = add nsw i32 %290, 1
  %292 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %293 = load ptr, ptr %292, align 8, !tbaa !18
  %294 = load i32, ptr %10, align 4, !tbaa !9
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %293, i64 %295
  %297 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %296, i32 0, i32 4
  store i32 %291, ptr %297, align 8, !tbaa !19
  %298 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %299 = load ptr, ptr %298, align 8, !tbaa !18
  %300 = load i32, ptr %10, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %299, i64 %301
  %303 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %302, i32 0, i32 5
  %304 = load i32, ptr %54, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %303, i32 noundef %304)
  %305 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %306 = load ptr, ptr %305, align 8, !tbaa !18
  %307 = load i32, ptr %11, align 4, !tbaa !9
  %308 = sext i32 %307 to i64
  %309 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %306, i64 %308
  %310 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %309, i32 0, i32 4
  %311 = load i32, ptr %310, align 8, !tbaa !19
  %312 = add nsw i32 %311, 1
  %313 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %314 = load ptr, ptr %313, align 8, !tbaa !18
  %315 = load i32, ptr %11, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %314, i64 %316
  %318 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %317, i32 0, i32 4
  store i32 %312, ptr %318, align 8, !tbaa !19
  %319 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %320 = load ptr, ptr %319, align 8, !tbaa !18
  %321 = load i32, ptr %11, align 4, !tbaa !9
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %320, i64 %322
  %324 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %323, i32 0, i32 5
  %325 = load i32, ptr %54, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %324, i32 noundef %325)
  %326 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %327 = load ptr, ptr %326, align 8, !tbaa !18
  %328 = load i32, ptr %12, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %327, i64 %329
  %331 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %330, i32 0, i32 4
  %332 = load i32, ptr %331, align 8, !tbaa !19
  %333 = add nsw i32 %332, 1
  %334 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %335 = load ptr, ptr %334, align 8, !tbaa !18
  %336 = load i32, ptr %12, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %335, i64 %337
  %339 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %338, i32 0, i32 4
  store i32 %333, ptr %339, align 8, !tbaa !19
  %340 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %341 = load ptr, ptr %340, align 8, !tbaa !18
  %342 = load i32, ptr %12, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %341, i64 %343
  %345 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %344, i32 0, i32 5
  %346 = load i32, ptr %54, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %345, i32 noundef %346)
  %347 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %348 = load ptr, ptr %347, align 8, !tbaa !30
  %349 = load i32, ptr %54, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %348, i64 %350
  %352 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %351, i32 0, i32 0
  %353 = load i32, ptr %352, align 8, !tbaa !36
  %354 = icmp eq i32 %353, 3
  br i1 %354, label %355, label %393

355:                                              ; preds = %214
  %356 = load double, ptr %14, align 8, !tbaa !34
  %357 = load double, ptr %15, align 8, !tbaa !34
  %358 = fadd double %356, %357
  %359 = load double, ptr %16, align 8, !tbaa !34
  %360 = fadd double %358, %359
  %361 = fmul double 0x3FD5555555555555, %360
  %362 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %363 = load ptr, ptr %362, align 8, !tbaa !30
  %364 = load i32, ptr %54, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %363, i64 %365
  %367 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %366, i32 0, i32 6
  store double %361, ptr %367, align 8, !tbaa !37
  %368 = load double, ptr %18, align 8, !tbaa !34
  %369 = load double, ptr %19, align 8, !tbaa !34
  %370 = fadd double %368, %369
  %371 = load double, ptr %20, align 8, !tbaa !34
  %372 = fadd double %370, %371
  %373 = fmul double 0x3FD5555555555555, %372
  %374 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %375 = load ptr, ptr %374, align 8, !tbaa !30
  %376 = load i32, ptr %54, align 4, !tbaa !9
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %375, i64 %377
  %379 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %378, i32 0, i32 7
  store double %373, ptr %379, align 8, !tbaa !38
  %380 = load double, ptr %14, align 8, !tbaa !34
  %381 = load double, ptr %15, align 8, !tbaa !34
  %382 = load double, ptr %16, align 8, !tbaa !34
  %383 = load double, ptr %18, align 8, !tbaa !34
  %384 = load double, ptr %19, align 8, !tbaa !34
  %385 = load double, ptr %20, align 8, !tbaa !34
  %386 = call noundef double @_Z8tri_areadddddd(double noundef %380, double noundef %381, double noundef %382, double noundef %383, double noundef %384, double noundef %385)
  %387 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %388 = load ptr, ptr %387, align 8, !tbaa !30
  %389 = load i32, ptr %54, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %388, i64 %390
  %392 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %391, i32 0, i32 8
  store double %386, ptr %392, align 8, !tbaa !39
  br label %699

393:                                              ; preds = %214
  %394 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %395 = load ptr, ptr %394, align 8, !tbaa !30
  %396 = load i32, ptr %54, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %395, i64 %397
  %399 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %398, i32 0, i32 0
  %400 = load i32, ptr %399, align 8, !tbaa !36
  %401 = icmp eq i32 %400, 4
  br i1 %401, label %402, label %694

402:                                              ; preds = %393
  %403 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %404 = load ptr, ptr %403, align 8, !tbaa !30
  %405 = load i32, ptr %54, align 4, !tbaa !9
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %404, i64 %406
  %408 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %407, i32 0, i32 2
  %409 = load ptr, ptr %408, align 8, !tbaa !31
  %410 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %409, i32 noundef 3)
  %411 = load i32, ptr %410, align 4, !tbaa !9
  store i32 %411, ptr %13, align 4, !tbaa !9
  %412 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %413 = load ptr, ptr %412, align 8, !tbaa !18
  %414 = load i32, ptr %13, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %413, i64 %415
  %417 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %416, i32 0, i32 4
  %418 = load i32, ptr %417, align 8, !tbaa !19
  %419 = add nsw i32 %418, 1
  %420 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %421 = load ptr, ptr %420, align 8, !tbaa !18
  %422 = load i32, ptr %13, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %421, i64 %423
  %425 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %424, i32 0, i32 4
  store i32 %419, ptr %425, align 8, !tbaa !19
  %426 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %427 = load ptr, ptr %426, align 8, !tbaa !18
  %428 = load i32, ptr %13, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %427, i64 %429
  %431 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %430, i32 0, i32 5
  %432 = load i32, ptr %54, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %431, i32 noundef %432)
  %433 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %434 = load ptr, ptr %433, align 8, !tbaa !18
  %435 = load i32, ptr %13, align 4, !tbaa !9
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %434, i64 %436
  %438 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %437, i32 0, i32 0
  %439 = load double, ptr %438, align 8, !tbaa !33
  store double %439, ptr %17, align 8, !tbaa !34
  %440 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %441 = load ptr, ptr %440, align 8, !tbaa !18
  %442 = load i32, ptr %13, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %441, i64 %443
  %445 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %444, i32 0, i32 1
  %446 = load double, ptr %445, align 8, !tbaa !35
  store double %446, ptr %21, align 8, !tbaa !34
  %447 = load double, ptr %14, align 8, !tbaa !34
  %448 = load double, ptr %15, align 8, !tbaa !34
  %449 = fadd double %447, %448
  %450 = fmul double 5.000000e-01, %449
  store double %450, ptr %28, align 8, !tbaa !34
  %451 = load double, ptr %18, align 8, !tbaa !34
  %452 = load double, ptr %19, align 8, !tbaa !34
  %453 = fadd double %451, %452
  %454 = fmul double 5.000000e-01, %453
  store double %454, ptr %29, align 8, !tbaa !34
  %455 = load double, ptr %16, align 8, !tbaa !34
  %456 = load double, ptr %17, align 8, !tbaa !34
  %457 = fadd double %455, %456
  %458 = fmul double 5.000000e-01, %457
  store double %458, ptr %30, align 8, !tbaa !34
  %459 = load double, ptr %20, align 8, !tbaa !34
  %460 = load double, ptr %21, align 8, !tbaa !34
  %461 = fadd double %459, %460
  %462 = fmul double 5.000000e-01, %461
  store double %462, ptr %31, align 8, !tbaa !34
  %463 = load double, ptr %28, align 8, !tbaa !34
  %464 = load double, ptr %30, align 8, !tbaa !34
  %465 = fadd double %463, %464
  %466 = fmul double 5.000000e-01, %465
  %467 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %468 = load ptr, ptr %467, align 8, !tbaa !30
  %469 = load i32, ptr %54, align 4, !tbaa !9
  %470 = sext i32 %469 to i64
  %471 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %468, i64 %470
  %472 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %471, i32 0, i32 6
  store double %466, ptr %472, align 8, !tbaa !37
  %473 = load double, ptr %29, align 8, !tbaa !34
  %474 = load double, ptr %31, align 8, !tbaa !34
  %475 = fadd double %473, %474
  %476 = fmul double 5.000000e-01, %475
  %477 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %478 = load ptr, ptr %477, align 8, !tbaa !30
  %479 = load i32, ptr %54, align 4, !tbaa !9
  %480 = sext i32 %479 to i64
  %481 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %478, i64 %480
  %482 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %481, i32 0, i32 7
  store double %476, ptr %482, align 8, !tbaa !38
  %483 = load double, ptr %14, align 8, !tbaa !34
  %484 = load double, ptr %15, align 8, !tbaa !34
  %485 = load double, ptr %16, align 8, !tbaa !34
  %486 = load double, ptr %18, align 8, !tbaa !34
  %487 = load double, ptr %19, align 8, !tbaa !34
  %488 = load double, ptr %20, align 8, !tbaa !34
  %489 = call noundef double @_Z8tri_areadddddd(double noundef %483, double noundef %484, double noundef %485, double noundef %486, double noundef %487, double noundef %488)
  %490 = load double, ptr %14, align 8, !tbaa !34
  %491 = load double, ptr %16, align 8, !tbaa !34
  %492 = load double, ptr %17, align 8, !tbaa !34
  %493 = load double, ptr %18, align 8, !tbaa !34
  %494 = load double, ptr %20, align 8, !tbaa !34
  %495 = load double, ptr %21, align 8, !tbaa !34
  %496 = call noundef double @_Z8tri_areadddddd(double noundef %490, double noundef %491, double noundef %492, double noundef %493, double noundef %494, double noundef %495)
  %497 = fadd double %489, %496
  %498 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %499 = load ptr, ptr %498, align 8, !tbaa !30
  %500 = load i32, ptr %54, align 4, !tbaa !9
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %499, i64 %501
  %503 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %502, i32 0, i32 8
  store double %497, ptr %503, align 8, !tbaa !39
  %504 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %505 = load ptr, ptr %504, align 8, !tbaa !30
  %506 = load i32, ptr %54, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %505, i64 %507
  %509 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %508, i32 0, i32 6
  %510 = load double, ptr %509, align 8, !tbaa !37
  store double %510, ptr %24, align 8, !tbaa !34
  %511 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %512 = load ptr, ptr %511, align 8, !tbaa !30
  %513 = load i32, ptr %54, align 4, !tbaa !9
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %512, i64 %514
  %516 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %515, i32 0, i32 7
  %517 = load double, ptr %516, align 8, !tbaa !38
  store double %517, ptr %25, align 8, !tbaa !34
  %518 = load double, ptr %14, align 8, !tbaa !34
  %519 = load double, ptr %15, align 8, !tbaa !34
  %520 = load double, ptr %24, align 8, !tbaa !34
  %521 = load double, ptr %18, align 8, !tbaa !34
  %522 = load double, ptr %19, align 8, !tbaa !34
  %523 = load double, ptr %25, align 8, !tbaa !34
  %524 = call noundef double @_Z8tri_areadddddd(double noundef %518, double noundef %519, double noundef %520, double noundef %521, double noundef %522, double noundef %523)
  %525 = fcmp ole double %524, 0.000000e+00
  br i1 %525, label %526, label %561

526:                                              ; preds = %402
  %527 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.30)
  %528 = load i32, ptr %54, align 4, !tbaa !9
  %529 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %527, i32 noundef %528)
  %530 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %529, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %531 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.31)
  %532 = load double, ptr %14, align 8, !tbaa !34
  %533 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %531, double noundef %532)
  %534 = load double, ptr %18, align 8, !tbaa !34
  %535 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %533, double noundef %534)
  %536 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %535, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %537 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.32)
  %538 = load double, ptr %15, align 8, !tbaa !34
  %539 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %537, double noundef %538)
  %540 = load double, ptr %19, align 8, !tbaa !34
  %541 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %539, double noundef %540)
  %542 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %541, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %543 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.33)
  %544 = load double, ptr %16, align 8, !tbaa !34
  %545 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %543, double noundef %544)
  %546 = load double, ptr %20, align 8, !tbaa !34
  %547 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %545, double noundef %546)
  %548 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %547, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %549 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.34)
  %550 = load double, ptr %17, align 8, !tbaa !34
  %551 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %549, double noundef %550)
  %552 = load double, ptr %21, align 8, !tbaa !34
  %553 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %551, double noundef %552)
  %554 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %553, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %555 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.35)
  %556 = load double, ptr %24, align 8, !tbaa !34
  %557 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %555, double noundef %556)
  %558 = load double, ptr %25, align 8, !tbaa !34
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %557, double noundef %558)
  %560 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %559, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

561:                                              ; preds = %402
  %562 = load double, ptr %15, align 8, !tbaa !34
  %563 = load double, ptr %16, align 8, !tbaa !34
  %564 = load double, ptr %24, align 8, !tbaa !34
  %565 = load double, ptr %19, align 8, !tbaa !34
  %566 = load double, ptr %20, align 8, !tbaa !34
  %567 = load double, ptr %25, align 8, !tbaa !34
  %568 = call noundef double @_Z8tri_areadddddd(double noundef %562, double noundef %563, double noundef %564, double noundef %565, double noundef %566, double noundef %567)
  %569 = fcmp ole double %568, 0.000000e+00
  br i1 %569, label %570, label %605

570:                                              ; preds = %561
  %571 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.36)
  %572 = load i32, ptr %54, align 4, !tbaa !9
  %573 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %571, i32 noundef %572)
  %574 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %573, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %575 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.31)
  %576 = load double, ptr %14, align 8, !tbaa !34
  %577 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %575, double noundef %576)
  %578 = load double, ptr %18, align 8, !tbaa !34
  %579 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %577, double noundef %578)
  %580 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %579, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %581 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.32)
  %582 = load double, ptr %15, align 8, !tbaa !34
  %583 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %581, double noundef %582)
  %584 = load double, ptr %19, align 8, !tbaa !34
  %585 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %583, double noundef %584)
  %586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %585, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %587 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.33)
  %588 = load double, ptr %16, align 8, !tbaa !34
  %589 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %587, double noundef %588)
  %590 = load double, ptr %20, align 8, !tbaa !34
  %591 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %589, double noundef %590)
  %592 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %591, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %593 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.34)
  %594 = load double, ptr %17, align 8, !tbaa !34
  %595 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %593, double noundef %594)
  %596 = load double, ptr %21, align 8, !tbaa !34
  %597 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %595, double noundef %596)
  %598 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %597, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %599 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.35)
  %600 = load double, ptr %24, align 8, !tbaa !34
  %601 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %599, double noundef %600)
  %602 = load double, ptr %25, align 8, !tbaa !34
  %603 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %601, double noundef %602)
  %604 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %603, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

605:                                              ; preds = %561
  %606 = load double, ptr %16, align 8, !tbaa !34
  %607 = load double, ptr %17, align 8, !tbaa !34
  %608 = load double, ptr %24, align 8, !tbaa !34
  %609 = load double, ptr %20, align 8, !tbaa !34
  %610 = load double, ptr %21, align 8, !tbaa !34
  %611 = load double, ptr %25, align 8, !tbaa !34
  %612 = call noundef double @_Z8tri_areadddddd(double noundef %606, double noundef %607, double noundef %608, double noundef %609, double noundef %610, double noundef %611)
  %613 = fcmp ole double %612, 0.000000e+00
  br i1 %613, label %614, label %649

614:                                              ; preds = %605
  %615 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.37)
  %616 = load i32, ptr %54, align 4, !tbaa !9
  %617 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %615, i32 noundef %616)
  %618 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %617, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %619 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.31)
  %620 = load double, ptr %14, align 8, !tbaa !34
  %621 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %619, double noundef %620)
  %622 = load double, ptr %18, align 8, !tbaa !34
  %623 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %621, double noundef %622)
  %624 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %623, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %625 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.32)
  %626 = load double, ptr %15, align 8, !tbaa !34
  %627 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %625, double noundef %626)
  %628 = load double, ptr %19, align 8, !tbaa !34
  %629 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %627, double noundef %628)
  %630 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %629, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %631 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.33)
  %632 = load double, ptr %16, align 8, !tbaa !34
  %633 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %631, double noundef %632)
  %634 = load double, ptr %20, align 8, !tbaa !34
  %635 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %633, double noundef %634)
  %636 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %635, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %637 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.34)
  %638 = load double, ptr %17, align 8, !tbaa !34
  %639 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %637, double noundef %638)
  %640 = load double, ptr %21, align 8, !tbaa !34
  %641 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %639, double noundef %640)
  %642 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %641, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %643 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.35)
  %644 = load double, ptr %24, align 8, !tbaa !34
  %645 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %643, double noundef %644)
  %646 = load double, ptr %25, align 8, !tbaa !34
  %647 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %645, double noundef %646)
  %648 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %647, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

649:                                              ; preds = %605
  %650 = load double, ptr %17, align 8, !tbaa !34
  %651 = load double, ptr %14, align 8, !tbaa !34
  %652 = load double, ptr %24, align 8, !tbaa !34
  %653 = load double, ptr %21, align 8, !tbaa !34
  %654 = load double, ptr %18, align 8, !tbaa !34
  %655 = load double, ptr %25, align 8, !tbaa !34
  %656 = call noundef double @_Z8tri_areadddddd(double noundef %650, double noundef %651, double noundef %652, double noundef %653, double noundef %654, double noundef %655)
  %657 = fcmp ole double %656, 0.000000e+00
  br i1 %657, label %658, label %693

658:                                              ; preds = %649
  %659 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.38)
  %660 = load i32, ptr %54, align 4, !tbaa !9
  %661 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %659, i32 noundef %660)
  %662 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %661, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %663 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.31)
  %664 = load double, ptr %14, align 8, !tbaa !34
  %665 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %663, double noundef %664)
  %666 = load double, ptr %18, align 8, !tbaa !34
  %667 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %665, double noundef %666)
  %668 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %667, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %669 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.32)
  %670 = load double, ptr %15, align 8, !tbaa !34
  %671 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %669, double noundef %670)
  %672 = load double, ptr %19, align 8, !tbaa !34
  %673 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %671, double noundef %672)
  %674 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %673, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %675 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.33)
  %676 = load double, ptr %16, align 8, !tbaa !34
  %677 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %675, double noundef %676)
  %678 = load double, ptr %20, align 8, !tbaa !34
  %679 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %677, double noundef %678)
  %680 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %679, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %681 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.34)
  %682 = load double, ptr %17, align 8, !tbaa !34
  %683 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %681, double noundef %682)
  %684 = load double, ptr %21, align 8, !tbaa !34
  %685 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %683, double noundef %684)
  %686 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %685, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %687 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.35)
  %688 = load double, ptr %24, align 8, !tbaa !34
  %689 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %687, double noundef %688)
  %690 = load double, ptr %25, align 8, !tbaa !34
  %691 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %689, double noundef %690)
  %692 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %691, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

693:                                              ; preds = %649
  br label %698

694:                                              ; preds = %393
  %695 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.39)
  %696 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %695, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %697

697:                                              ; preds = %694
  call void @exit(i32 noundef 0) #13
  unreachable

698:                                              ; preds = %693
  br label %699

699:                                              ; preds = %698, %355
  br label %700

700:                                              ; preds = %699
  %701 = load i32, ptr %54, align 4, !tbaa !9
  %702 = add nsw i32 %701, 1
  store i32 %702, ptr %54, align 4, !tbaa !9
  br label %207, !llvm.loop !40

703:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #12
  store i64 0, ptr %55, align 8, !tbaa !11
  br label %704

704:                                              ; preds = %716, %703
  %705 = load i64, ptr %55, align 8, !tbaa !11
  %706 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %707 = load i64, ptr %706, align 8, !tbaa !13
  %708 = icmp ult i64 %705, %707
  br i1 %708, label %710, label %709

709:                                              ; preds = %704
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #12
  br label %719

710:                                              ; preds = %704
  %711 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %712 = load ptr, ptr %711, align 8, !tbaa !18
  %713 = load i64, ptr %55, align 8, !tbaa !11
  %714 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %712, i64 %713
  %715 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %714, i32 0, i32 6
  store double 0.000000e+00, ptr %715, align 8, !tbaa !41
  br label %716

716:                                              ; preds = %710
  %717 = load i64, ptr %55, align 8, !tbaa !11
  %718 = add i64 %717, 1
  store i64 %718, ptr %55, align 8, !tbaa !11
  br label %704, !llvm.loop !42

719:                                              ; preds = %709
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #12
  store i32 0, ptr %56, align 4, !tbaa !9
  br label %720

720:                                              ; preds = %1154, %719
  %721 = load i32, ptr %56, align 4, !tbaa !9
  %722 = sext i32 %721 to i64
  %723 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %724 = load i64, ptr %723, align 8, !tbaa !29
  %725 = icmp ult i64 %722, %724
  br i1 %725, label %727, label %726

726:                                              ; preds = %720
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #12
  br label %1157

727:                                              ; preds = %720
  %728 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %729 = load ptr, ptr %728, align 8, !tbaa !30
  %730 = load i32, ptr %56, align 4, !tbaa !9
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %729, i64 %731
  %733 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %732, i32 0, i32 2
  %734 = load ptr, ptr %733, align 8, !tbaa !31
  %735 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %734, i32 noundef 0)
  %736 = load i32, ptr %735, align 4, !tbaa !9
  store i32 %736, ptr %10, align 4, !tbaa !9
  %737 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %738 = load ptr, ptr %737, align 8, !tbaa !30
  %739 = load i32, ptr %56, align 4, !tbaa !9
  %740 = sext i32 %739 to i64
  %741 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %738, i64 %740
  %742 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %741, i32 0, i32 2
  %743 = load ptr, ptr %742, align 8, !tbaa !31
  %744 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %743, i32 noundef 1)
  %745 = load i32, ptr %744, align 4, !tbaa !9
  store i32 %745, ptr %11, align 4, !tbaa !9
  %746 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %747 = load ptr, ptr %746, align 8, !tbaa !30
  %748 = load i32, ptr %56, align 4, !tbaa !9
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %747, i64 %749
  %751 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %750, i32 0, i32 2
  %752 = load ptr, ptr %751, align 8, !tbaa !31
  %753 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %752, i32 noundef 2)
  %754 = load i32, ptr %753, align 4, !tbaa !9
  store i32 %754, ptr %12, align 4, !tbaa !9
  %755 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %756 = load ptr, ptr %755, align 8, !tbaa !30
  %757 = load i32, ptr %56, align 4, !tbaa !9
  %758 = sext i32 %757 to i64
  %759 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %756, i64 %758
  %760 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %759, i32 0, i32 0
  %761 = load i32, ptr %760, align 8, !tbaa !36
  %762 = icmp eq i32 %761, 3
  br i1 %762, label %763, label %827

763:                                              ; preds = %727
  %764 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %765 = load ptr, ptr %764, align 8, !tbaa !18
  %766 = load i32, ptr %10, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %765, i64 %767
  %769 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %768, i32 0, i32 6
  %770 = load double, ptr %769, align 8, !tbaa !41
  %771 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %772 = load ptr, ptr %771, align 8, !tbaa !30
  %773 = load i32, ptr %56, align 4, !tbaa !9
  %774 = sext i32 %773 to i64
  %775 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %772, i64 %774
  %776 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %775, i32 0, i32 8
  %777 = load double, ptr %776, align 8, !tbaa !39
  %778 = call double @llvm.fmuladd.f64(double 0x3FD5555555555555, double %777, double %770)
  %779 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %780 = load ptr, ptr %779, align 8, !tbaa !18
  %781 = load i32, ptr %10, align 4, !tbaa !9
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %780, i64 %782
  %784 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %783, i32 0, i32 6
  store double %778, ptr %784, align 8, !tbaa !41
  %785 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %786 = load ptr, ptr %785, align 8, !tbaa !18
  %787 = load i32, ptr %11, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %786, i64 %788
  %790 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %789, i32 0, i32 6
  %791 = load double, ptr %790, align 8, !tbaa !41
  %792 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %793 = load ptr, ptr %792, align 8, !tbaa !30
  %794 = load i32, ptr %56, align 4, !tbaa !9
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %793, i64 %795
  %797 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %796, i32 0, i32 8
  %798 = load double, ptr %797, align 8, !tbaa !39
  %799 = call double @llvm.fmuladd.f64(double 0x3FD5555555555555, double %798, double %791)
  %800 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %801 = load ptr, ptr %800, align 8, !tbaa !18
  %802 = load i32, ptr %11, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %801, i64 %803
  %805 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %804, i32 0, i32 6
  store double %799, ptr %805, align 8, !tbaa !41
  %806 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %807 = load ptr, ptr %806, align 8, !tbaa !18
  %808 = load i32, ptr %12, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %807, i64 %809
  %811 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %810, i32 0, i32 6
  %812 = load double, ptr %811, align 8, !tbaa !41
  %813 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %814 = load ptr, ptr %813, align 8, !tbaa !30
  %815 = load i32, ptr %56, align 4, !tbaa !9
  %816 = sext i32 %815 to i64
  %817 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %814, i64 %816
  %818 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %817, i32 0, i32 8
  %819 = load double, ptr %818, align 8, !tbaa !39
  %820 = call double @llvm.fmuladd.f64(double 0x3FD5555555555555, double %819, double %812)
  %821 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %822 = load ptr, ptr %821, align 8, !tbaa !18
  %823 = load i32, ptr %12, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %822, i64 %824
  %826 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %825, i32 0, i32 6
  store double %820, ptr %826, align 8, !tbaa !41
  br label %1153

827:                                              ; preds = %727
  %828 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %829 = load ptr, ptr %828, align 8, !tbaa !30
  %830 = load i32, ptr %56, align 4, !tbaa !9
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %829, i64 %831
  %833 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %832, i32 0, i32 0
  %834 = load i32, ptr %833, align 8, !tbaa !36
  %835 = icmp eq i32 %834, 4
  br i1 %835, label %836, label %1152

836:                                              ; preds = %827
  %837 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %838 = load ptr, ptr %837, align 8, !tbaa !30
  %839 = load i32, ptr %56, align 4, !tbaa !9
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %838, i64 %840
  %842 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %841, i32 0, i32 2
  %843 = load ptr, ptr %842, align 8, !tbaa !31
  %844 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %843, i32 noundef 3)
  %845 = load i32, ptr %844, align 4, !tbaa !9
  store i32 %845, ptr %13, align 4, !tbaa !9
  %846 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %847 = load ptr, ptr %846, align 8, !tbaa !18
  %848 = load i32, ptr %10, align 4, !tbaa !9
  %849 = sext i32 %848 to i64
  %850 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %847, i64 %849
  %851 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %850, i32 0, i32 0
  %852 = load double, ptr %851, align 8, !tbaa !33
  store double %852, ptr %14, align 8, !tbaa !34
  %853 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %854 = load ptr, ptr %853, align 8, !tbaa !18
  %855 = load i32, ptr %11, align 4, !tbaa !9
  %856 = sext i32 %855 to i64
  %857 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %854, i64 %856
  %858 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %857, i32 0, i32 0
  %859 = load double, ptr %858, align 8, !tbaa !33
  store double %859, ptr %15, align 8, !tbaa !34
  %860 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %861 = load ptr, ptr %860, align 8, !tbaa !18
  %862 = load i32, ptr %12, align 4, !tbaa !9
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %861, i64 %863
  %865 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %864, i32 0, i32 0
  %866 = load double, ptr %865, align 8, !tbaa !33
  store double %866, ptr %16, align 8, !tbaa !34
  %867 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %868 = load ptr, ptr %867, align 8, !tbaa !18
  %869 = load i32, ptr %13, align 4, !tbaa !9
  %870 = sext i32 %869 to i64
  %871 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %868, i64 %870
  %872 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %871, i32 0, i32 0
  %873 = load double, ptr %872, align 8, !tbaa !33
  store double %873, ptr %17, align 8, !tbaa !34
  %874 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %875 = load ptr, ptr %874, align 8, !tbaa !30
  %876 = load i32, ptr %56, align 4, !tbaa !9
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %875, i64 %877
  %879 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %878, i32 0, i32 6
  %880 = load double, ptr %879, align 8, !tbaa !37
  store double %880, ptr %24, align 8, !tbaa !34
  %881 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %882 = load ptr, ptr %881, align 8, !tbaa !18
  %883 = load i32, ptr %10, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %882, i64 %884
  %886 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %885, i32 0, i32 1
  %887 = load double, ptr %886, align 8, !tbaa !35
  store double %887, ptr %18, align 8, !tbaa !34
  %888 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %889 = load ptr, ptr %888, align 8, !tbaa !18
  %890 = load i32, ptr %11, align 4, !tbaa !9
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %889, i64 %891
  %893 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %892, i32 0, i32 1
  %894 = load double, ptr %893, align 8, !tbaa !35
  store double %894, ptr %19, align 8, !tbaa !34
  %895 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %896 = load ptr, ptr %895, align 8, !tbaa !18
  %897 = load i32, ptr %12, align 4, !tbaa !9
  %898 = sext i32 %897 to i64
  %899 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %896, i64 %898
  %900 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %899, i32 0, i32 1
  %901 = load double, ptr %900, align 8, !tbaa !35
  store double %901, ptr %20, align 8, !tbaa !34
  %902 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %903 = load ptr, ptr %902, align 8, !tbaa !18
  %904 = load i32, ptr %13, align 4, !tbaa !9
  %905 = sext i32 %904 to i64
  %906 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %903, i64 %905
  %907 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %906, i32 0, i32 1
  %908 = load double, ptr %907, align 8, !tbaa !35
  store double %908, ptr %21, align 8, !tbaa !34
  %909 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %910 = load ptr, ptr %909, align 8, !tbaa !30
  %911 = load i32, ptr %56, align 4, !tbaa !9
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %910, i64 %912
  %914 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %913, i32 0, i32 7
  %915 = load double, ptr %914, align 8, !tbaa !38
  store double %915, ptr %25, align 8, !tbaa !34
  %916 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %917 = load ptr, ptr %916, align 8, !tbaa !18
  %918 = load i32, ptr %10, align 4, !tbaa !9
  %919 = sext i32 %918 to i64
  %920 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %917, i64 %919
  %921 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %920, i32 0, i32 0
  %922 = load double, ptr %921, align 8, !tbaa !33
  store double %922, ptr %26, align 8, !tbaa !34
  %923 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %924 = load ptr, ptr %923, align 8, !tbaa !18
  %925 = load i32, ptr %10, align 4, !tbaa !9
  %926 = sext i32 %925 to i64
  %927 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %924, i64 %926
  %928 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %927, i32 0, i32 1
  %929 = load double, ptr %928, align 8, !tbaa !35
  store double %929, ptr %27, align 8, !tbaa !34
  %930 = load double, ptr %26, align 8, !tbaa !34
  %931 = load double, ptr %15, align 8, !tbaa !34
  %932 = fadd double %930, %931
  %933 = fmul double 5.000000e-01, %932
  store double %933, ptr %28, align 8, !tbaa !34
  %934 = load double, ptr %27, align 8, !tbaa !34
  %935 = load double, ptr %19, align 8, !tbaa !34
  %936 = fadd double %934, %935
  %937 = fmul double 5.000000e-01, %936
  store double %937, ptr %29, align 8, !tbaa !34
  %938 = load double, ptr %26, align 8, !tbaa !34
  %939 = load double, ptr %17, align 8, !tbaa !34
  %940 = fadd double %938, %939
  %941 = fmul double 5.000000e-01, %940
  store double %941, ptr %30, align 8, !tbaa !34
  %942 = load double, ptr %27, align 8, !tbaa !34
  %943 = load double, ptr %21, align 8, !tbaa !34
  %944 = fadd double %942, %943
  %945 = fmul double 5.000000e-01, %944
  store double %945, ptr %31, align 8, !tbaa !34
  %946 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %947 = load ptr, ptr %946, align 8, !tbaa !18
  %948 = load i32, ptr %10, align 4, !tbaa !9
  %949 = sext i32 %948 to i64
  %950 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %947, i64 %949
  %951 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %950, i32 0, i32 6
  %952 = load double, ptr %951, align 8, !tbaa !41
  %953 = load double, ptr %26, align 8, !tbaa !34
  %954 = load double, ptr %28, align 8, !tbaa !34
  %955 = load double, ptr %24, align 8, !tbaa !34
  %956 = load double, ptr %27, align 8, !tbaa !34
  %957 = load double, ptr %29, align 8, !tbaa !34
  %958 = load double, ptr %25, align 8, !tbaa !34
  %959 = call noundef double @_Z8tri_areadddddd(double noundef %953, double noundef %954, double noundef %955, double noundef %956, double noundef %957, double noundef %958)
  %960 = fadd double %952, %959
  %961 = load double, ptr %26, align 8, !tbaa !34
  %962 = load double, ptr %24, align 8, !tbaa !34
  %963 = load double, ptr %30, align 8, !tbaa !34
  %964 = load double, ptr %27, align 8, !tbaa !34
  %965 = load double, ptr %25, align 8, !tbaa !34
  %966 = load double, ptr %31, align 8, !tbaa !34
  %967 = call noundef double @_Z8tri_areadddddd(double noundef %961, double noundef %962, double noundef %963, double noundef %964, double noundef %965, double noundef %966)
  %968 = fadd double %960, %967
  %969 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %970 = load ptr, ptr %969, align 8, !tbaa !18
  %971 = load i32, ptr %10, align 4, !tbaa !9
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %970, i64 %972
  %974 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %973, i32 0, i32 6
  store double %968, ptr %974, align 8, !tbaa !41
  %975 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %976 = load ptr, ptr %975, align 8, !tbaa !18
  %977 = load i32, ptr %11, align 4, !tbaa !9
  %978 = sext i32 %977 to i64
  %979 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %976, i64 %978
  %980 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %979, i32 0, i32 0
  %981 = load double, ptr %980, align 8, !tbaa !33
  store double %981, ptr %26, align 8, !tbaa !34
  %982 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %983 = load ptr, ptr %982, align 8, !tbaa !18
  %984 = load i32, ptr %11, align 4, !tbaa !9
  %985 = sext i32 %984 to i64
  %986 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %983, i64 %985
  %987 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %986, i32 0, i32 1
  %988 = load double, ptr %987, align 8, !tbaa !35
  store double %988, ptr %27, align 8, !tbaa !34
  %989 = load double, ptr %26, align 8, !tbaa !34
  %990 = load double, ptr %16, align 8, !tbaa !34
  %991 = fadd double %989, %990
  %992 = fmul double 5.000000e-01, %991
  store double %992, ptr %28, align 8, !tbaa !34
  %993 = load double, ptr %27, align 8, !tbaa !34
  %994 = load double, ptr %20, align 8, !tbaa !34
  %995 = fadd double %993, %994
  %996 = fmul double 5.000000e-01, %995
  store double %996, ptr %29, align 8, !tbaa !34
  %997 = load double, ptr %26, align 8, !tbaa !34
  %998 = load double, ptr %14, align 8, !tbaa !34
  %999 = fadd double %997, %998
  %1000 = fmul double 5.000000e-01, %999
  store double %1000, ptr %30, align 8, !tbaa !34
  %1001 = load double, ptr %27, align 8, !tbaa !34
  %1002 = load double, ptr %18, align 8, !tbaa !34
  %1003 = fadd double %1001, %1002
  %1004 = fmul double 5.000000e-01, %1003
  store double %1004, ptr %31, align 8, !tbaa !34
  %1005 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1006 = load ptr, ptr %1005, align 8, !tbaa !18
  %1007 = load i32, ptr %11, align 4, !tbaa !9
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1006, i64 %1008
  %1010 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1009, i32 0, i32 6
  %1011 = load double, ptr %1010, align 8, !tbaa !41
  %1012 = load double, ptr %26, align 8, !tbaa !34
  %1013 = load double, ptr %28, align 8, !tbaa !34
  %1014 = load double, ptr %24, align 8, !tbaa !34
  %1015 = load double, ptr %27, align 8, !tbaa !34
  %1016 = load double, ptr %29, align 8, !tbaa !34
  %1017 = load double, ptr %25, align 8, !tbaa !34
  %1018 = call noundef double @_Z8tri_areadddddd(double noundef %1012, double noundef %1013, double noundef %1014, double noundef %1015, double noundef %1016, double noundef %1017)
  %1019 = fadd double %1011, %1018
  %1020 = load double, ptr %26, align 8, !tbaa !34
  %1021 = load double, ptr %24, align 8, !tbaa !34
  %1022 = load double, ptr %30, align 8, !tbaa !34
  %1023 = load double, ptr %27, align 8, !tbaa !34
  %1024 = load double, ptr %25, align 8, !tbaa !34
  %1025 = load double, ptr %31, align 8, !tbaa !34
  %1026 = call noundef double @_Z8tri_areadddddd(double noundef %1020, double noundef %1021, double noundef %1022, double noundef %1023, double noundef %1024, double noundef %1025)
  %1027 = fadd double %1019, %1026
  %1028 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1029 = load ptr, ptr %1028, align 8, !tbaa !18
  %1030 = load i32, ptr %11, align 4, !tbaa !9
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1029, i64 %1031
  %1033 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1032, i32 0, i32 6
  store double %1027, ptr %1033, align 8, !tbaa !41
  %1034 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1035 = load ptr, ptr %1034, align 8, !tbaa !18
  %1036 = load i32, ptr %12, align 4, !tbaa !9
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1035, i64 %1037
  %1039 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1038, i32 0, i32 0
  %1040 = load double, ptr %1039, align 8, !tbaa !33
  store double %1040, ptr %26, align 8, !tbaa !34
  %1041 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1042 = load ptr, ptr %1041, align 8, !tbaa !18
  %1043 = load i32, ptr %12, align 4, !tbaa !9
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1042, i64 %1044
  %1046 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1045, i32 0, i32 1
  %1047 = load double, ptr %1046, align 8, !tbaa !35
  store double %1047, ptr %27, align 8, !tbaa !34
  %1048 = load double, ptr %26, align 8, !tbaa !34
  %1049 = load double, ptr %17, align 8, !tbaa !34
  %1050 = fadd double %1048, %1049
  %1051 = fmul double 5.000000e-01, %1050
  store double %1051, ptr %28, align 8, !tbaa !34
  %1052 = load double, ptr %27, align 8, !tbaa !34
  %1053 = load double, ptr %21, align 8, !tbaa !34
  %1054 = fadd double %1052, %1053
  %1055 = fmul double 5.000000e-01, %1054
  store double %1055, ptr %29, align 8, !tbaa !34
  %1056 = load double, ptr %26, align 8, !tbaa !34
  %1057 = load double, ptr %15, align 8, !tbaa !34
  %1058 = fadd double %1056, %1057
  %1059 = fmul double 5.000000e-01, %1058
  store double %1059, ptr %30, align 8, !tbaa !34
  %1060 = load double, ptr %27, align 8, !tbaa !34
  %1061 = load double, ptr %19, align 8, !tbaa !34
  %1062 = fadd double %1060, %1061
  %1063 = fmul double 5.000000e-01, %1062
  store double %1063, ptr %31, align 8, !tbaa !34
  %1064 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1065 = load ptr, ptr %1064, align 8, !tbaa !18
  %1066 = load i32, ptr %12, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1065, i64 %1067
  %1069 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1068, i32 0, i32 6
  %1070 = load double, ptr %1069, align 8, !tbaa !41
  %1071 = load double, ptr %26, align 8, !tbaa !34
  %1072 = load double, ptr %28, align 8, !tbaa !34
  %1073 = load double, ptr %24, align 8, !tbaa !34
  %1074 = load double, ptr %27, align 8, !tbaa !34
  %1075 = load double, ptr %29, align 8, !tbaa !34
  %1076 = load double, ptr %25, align 8, !tbaa !34
  %1077 = call noundef double @_Z8tri_areadddddd(double noundef %1071, double noundef %1072, double noundef %1073, double noundef %1074, double noundef %1075, double noundef %1076)
  %1078 = fadd double %1070, %1077
  %1079 = load double, ptr %26, align 8, !tbaa !34
  %1080 = load double, ptr %24, align 8, !tbaa !34
  %1081 = load double, ptr %30, align 8, !tbaa !34
  %1082 = load double, ptr %27, align 8, !tbaa !34
  %1083 = load double, ptr %25, align 8, !tbaa !34
  %1084 = load double, ptr %31, align 8, !tbaa !34
  %1085 = call noundef double @_Z8tri_areadddddd(double noundef %1079, double noundef %1080, double noundef %1081, double noundef %1082, double noundef %1083, double noundef %1084)
  %1086 = fadd double %1078, %1085
  %1087 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1088 = load ptr, ptr %1087, align 8, !tbaa !18
  %1089 = load i32, ptr %12, align 4, !tbaa !9
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1088, i64 %1090
  %1092 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1091, i32 0, i32 6
  store double %1086, ptr %1092, align 8, !tbaa !41
  %1093 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1094 = load ptr, ptr %1093, align 8, !tbaa !18
  %1095 = load i32, ptr %13, align 4, !tbaa !9
  %1096 = sext i32 %1095 to i64
  %1097 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1094, i64 %1096
  %1098 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1097, i32 0, i32 0
  %1099 = load double, ptr %1098, align 8, !tbaa !33
  store double %1099, ptr %26, align 8, !tbaa !34
  %1100 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1101 = load ptr, ptr %1100, align 8, !tbaa !18
  %1102 = load i32, ptr %13, align 4, !tbaa !9
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1101, i64 %1103
  %1105 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1104, i32 0, i32 1
  %1106 = load double, ptr %1105, align 8, !tbaa !35
  store double %1106, ptr %27, align 8, !tbaa !34
  %1107 = load double, ptr %26, align 8, !tbaa !34
  %1108 = load double, ptr %14, align 8, !tbaa !34
  %1109 = fadd double %1107, %1108
  %1110 = fmul double 5.000000e-01, %1109
  store double %1110, ptr %28, align 8, !tbaa !34
  %1111 = load double, ptr %27, align 8, !tbaa !34
  %1112 = load double, ptr %18, align 8, !tbaa !34
  %1113 = fadd double %1111, %1112
  %1114 = fmul double 5.000000e-01, %1113
  store double %1114, ptr %29, align 8, !tbaa !34
  %1115 = load double, ptr %26, align 8, !tbaa !34
  %1116 = load double, ptr %16, align 8, !tbaa !34
  %1117 = fadd double %1115, %1116
  %1118 = fmul double 5.000000e-01, %1117
  store double %1118, ptr %30, align 8, !tbaa !34
  %1119 = load double, ptr %27, align 8, !tbaa !34
  %1120 = load double, ptr %20, align 8, !tbaa !34
  %1121 = fadd double %1119, %1120
  %1122 = fmul double 5.000000e-01, %1121
  store double %1122, ptr %31, align 8, !tbaa !34
  %1123 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1124 = load ptr, ptr %1123, align 8, !tbaa !18
  %1125 = load i32, ptr %13, align 4, !tbaa !9
  %1126 = sext i32 %1125 to i64
  %1127 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1124, i64 %1126
  %1128 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1127, i32 0, i32 6
  %1129 = load double, ptr %1128, align 8, !tbaa !41
  %1130 = load double, ptr %26, align 8, !tbaa !34
  %1131 = load double, ptr %28, align 8, !tbaa !34
  %1132 = load double, ptr %24, align 8, !tbaa !34
  %1133 = load double, ptr %27, align 8, !tbaa !34
  %1134 = load double, ptr %29, align 8, !tbaa !34
  %1135 = load double, ptr %25, align 8, !tbaa !34
  %1136 = call noundef double @_Z8tri_areadddddd(double noundef %1130, double noundef %1131, double noundef %1132, double noundef %1133, double noundef %1134, double noundef %1135)
  %1137 = fadd double %1129, %1136
  %1138 = load double, ptr %26, align 8, !tbaa !34
  %1139 = load double, ptr %24, align 8, !tbaa !34
  %1140 = load double, ptr %30, align 8, !tbaa !34
  %1141 = load double, ptr %27, align 8, !tbaa !34
  %1142 = load double, ptr %25, align 8, !tbaa !34
  %1143 = load double, ptr %31, align 8, !tbaa !34
  %1144 = call noundef double @_Z8tri_areadddddd(double noundef %1138, double noundef %1139, double noundef %1140, double noundef %1141, double noundef %1142, double noundef %1143)
  %1145 = fadd double %1137, %1144
  %1146 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1147 = load ptr, ptr %1146, align 8, !tbaa !18
  %1148 = load i32, ptr %13, align 4, !tbaa !9
  %1149 = sext i32 %1148 to i64
  %1150 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1147, i64 %1149
  %1151 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1150, i32 0, i32 6
  store double %1145, ptr %1151, align 8, !tbaa !41
  br label %1152

1152:                                             ; preds = %836, %827
  br label %1153

1153:                                             ; preds = %1152, %763
  br label %1154

1154:                                             ; preds = %1153
  %1155 = load i32, ptr %56, align 4, !tbaa !9
  %1156 = add nsw i32 %1155, 1
  store i32 %1156, ptr %56, align 4, !tbaa !9
  br label %720, !llvm.loop !43

1157:                                             ; preds = %726
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #12
  store i64 0, ptr %57, align 8, !tbaa !11
  br label %1158

1158:                                             ; preds = %1222, %1157
  %1159 = load i64, ptr %57, align 8, !tbaa !11
  %1160 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %1161 = load i64, ptr %1160, align 8, !tbaa !29
  %1162 = icmp ult i64 %1159, %1161
  br i1 %1162, label %1164, label %1163

1163:                                             ; preds = %1158
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  br label %1226

1164:                                             ; preds = %1158
  %1165 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1166 = load ptr, ptr %1165, align 8, !tbaa !30
  %1167 = load i64, ptr %57, align 8, !tbaa !11
  %1168 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1166, i64 %1167
  %1169 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1168, i32 0, i32 0
  %1170 = load i32, ptr %1169, align 8, !tbaa !36
  %1171 = icmp eq i32 %1170, 3
  br i1 %1171, label %1172, label %1189

1172:                                             ; preds = %1164
  %1173 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1174 = load ptr, ptr %1173, align 8, !tbaa !30
  %1175 = load i64, ptr %57, align 8, !tbaa !11
  %1176 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1174, i64 %1175
  %1177 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1176, i32 0, i32 3
  store i32 3, ptr %1177, align 8, !tbaa !44
  %1178 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1178, i32 noundef 3, i32 noundef 1)
          to label %1179 unwind label %1185

1179:                                             ; preds = %1172
  %1180 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1181 = load ptr, ptr %1180, align 8, !tbaa !30
  %1182 = load i64, ptr %57, align 8, !tbaa !11
  %1183 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1181, i64 %1182
  %1184 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1183, i32 0, i32 5
  store ptr %1178, ptr %1184, align 8, !tbaa !45
  br label %1215

1185:                                             ; preds = %1172
  %1186 = landingpad { ptr, i32 }
          cleanup
  %1187 = extractvalue { ptr, i32 } %1186, 0
  store ptr %1187, ptr %58, align 8
  %1188 = extractvalue { ptr, i32 } %1186, 1
  store i32 %1188, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %1178, i64 noundef 40) #15
  br label %1225

1189:                                             ; preds = %1164
  %1190 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1191 = load ptr, ptr %1190, align 8, !tbaa !30
  %1192 = load i64, ptr %57, align 8, !tbaa !11
  %1193 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1191, i64 %1192
  %1194 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1193, i32 0, i32 0
  %1195 = load i32, ptr %1194, align 8, !tbaa !36
  %1196 = icmp eq i32 %1195, 4
  br i1 %1196, label %1197, label %1214

1197:                                             ; preds = %1189
  %1198 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1199 = load ptr, ptr %1198, align 8, !tbaa !30
  %1200 = load i64, ptr %57, align 8, !tbaa !11
  %1201 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1199, i64 %1200
  %1202 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1201, i32 0, i32 3
  store i32 4, ptr %1202, align 8, !tbaa !44
  %1203 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1203, i32 noundef 4, i32 noundef 1)
          to label %1204 unwind label %1210

1204:                                             ; preds = %1197
  %1205 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1206 = load ptr, ptr %1205, align 8, !tbaa !30
  %1207 = load i64, ptr %57, align 8, !tbaa !11
  %1208 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1206, i64 %1207
  %1209 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1208, i32 0, i32 5
  store ptr %1203, ptr %1209, align 8, !tbaa !45
  br label %1214

1210:                                             ; preds = %1197
  %1211 = landingpad { ptr, i32 }
          cleanup
  %1212 = extractvalue { ptr, i32 } %1211, 0
  store ptr %1212, ptr %58, align 8
  %1213 = extractvalue { ptr, i32 } %1211, 1
  store i32 %1213, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %1203, i64 noundef 40) #15
  br label %1225

1214:                                             ; preds = %1204, %1189
  br label %1215

1215:                                             ; preds = %1214, %1179
  %1216 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1217 = load ptr, ptr %1216, align 8, !tbaa !30
  %1218 = load i64, ptr %57, align 8, !tbaa !11
  %1219 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1217, i64 %1218
  %1220 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1219, i32 0, i32 5
  %1221 = load ptr, ptr %1220, align 8, !tbaa !45
  call void @_ZN7Array2DIiEaSEi(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %60, ptr noundef nonnull align 8 dereferenceable(40) %1221, i32 noundef -1)
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %60) #12
  br label %1222

1222:                                             ; preds = %1215
  %1223 = load i64, ptr %57, align 8, !tbaa !11
  %1224 = add i64 %1223, 1
  store i64 %1224, ptr %57, align 8, !tbaa !11
  br label %1158, !llvm.loop !46

1225:                                             ; preds = %1210, %1185
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #12
  br label %5791

1226:                                             ; preds = %1163
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #12
  store i32 2, ptr %61, align 4, !tbaa !9
  %1227 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.40)
  %1228 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1227, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #12
  store i64 0, ptr %62, align 8, !tbaa !11
  br label %1229

1229:                                             ; preds = %1493, %1226
  %1230 = load i64, ptr %62, align 8, !tbaa !11
  %1231 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %1232 = load i64, ptr %1231, align 8, !tbaa !29
  %1233 = icmp ult i64 %1230, %1232
  br i1 %1233, label %1235, label %1234

1234:                                             ; preds = %1229
  store i32 18, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #12
  br label %1496

1235:                                             ; preds = %1229
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #12
  store i64 0, ptr %64, align 8, !tbaa !11
  br label %1236

1236:                                             ; preds = %1489, %1235
  %1237 = load i64, ptr %64, align 8, !tbaa !11
  %1238 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1239 = load ptr, ptr %1238, align 8, !tbaa !30
  %1240 = load i64, ptr %62, align 8, !tbaa !11
  %1241 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1239, i64 %1240
  %1242 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1241, i32 0, i32 0
  %1243 = load i32, ptr %1242, align 8, !tbaa !36
  %1244 = sext i32 %1243 to i64
  %1245 = icmp ult i64 %1237, %1244
  br i1 %1245, label %1247, label %1246

1246:                                             ; preds = %1236
  store i32 21, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #12
  br label %1492

1247:                                             ; preds = %1236
  %1248 = load i64, ptr %64, align 8, !tbaa !11
  %1249 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1250 = load ptr, ptr %1249, align 8, !tbaa !30
  %1251 = load i64, ptr %62, align 8, !tbaa !11
  %1252 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1250, i64 %1251
  %1253 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1252, i32 0, i32 0
  %1254 = load i32, ptr %1253, align 8, !tbaa !36
  %1255 = sub nsw i32 %1254, 1
  %1256 = sext i32 %1255 to i64
  %1257 = icmp ult i64 %1248, %1256
  br i1 %1257, label %1258, label %1270

1258:                                             ; preds = %1247
  %1259 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1260 = load ptr, ptr %1259, align 8, !tbaa !30
  %1261 = load i64, ptr %62, align 8, !tbaa !11
  %1262 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1260, i64 %1261
  %1263 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1262, i32 0, i32 2
  %1264 = load ptr, ptr %1263, align 8, !tbaa !31
  %1265 = load i64, ptr %64, align 8, !tbaa !11
  %1266 = add i64 %1265, 1
  %1267 = trunc i64 %1266 to i32
  %1268 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1264, i32 noundef %1267)
  %1269 = load i32, ptr %1268, align 4, !tbaa !9
  store i32 %1269, ptr %37, align 4, !tbaa !9
  br label %1270

1270:                                             ; preds = %1258, %1247
  %1271 = load i64, ptr %64, align 8, !tbaa !11
  %1272 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1273 = load ptr, ptr %1272, align 8, !tbaa !30
  %1274 = load i64, ptr %62, align 8, !tbaa !11
  %1275 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1273, i64 %1274
  %1276 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1275, i32 0, i32 0
  %1277 = load i32, ptr %1276, align 8, !tbaa !36
  %1278 = sub nsw i32 %1277, 1
  %1279 = sext i32 %1278 to i64
  %1280 = icmp eq i64 %1271, %1279
  br i1 %1280, label %1281, label %1290

1281:                                             ; preds = %1270
  %1282 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1283 = load ptr, ptr %1282, align 8, !tbaa !30
  %1284 = load i64, ptr %62, align 8, !tbaa !11
  %1285 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1283, i64 %1284
  %1286 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1285, i32 0, i32 2
  %1287 = load ptr, ptr %1286, align 8, !tbaa !31
  %1288 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1287, i32 noundef 0)
  %1289 = load i32, ptr %1288, align 4, !tbaa !9
  store i32 %1289, ptr %37, align 4, !tbaa !9
  br label %1290

1290:                                             ; preds = %1281, %1270
  %1291 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1292 = load ptr, ptr %1291, align 8, !tbaa !30
  %1293 = load i64, ptr %62, align 8, !tbaa !11
  %1294 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1292, i64 %1293
  %1295 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1294, i32 0, i32 2
  %1296 = load ptr, ptr %1295, align 8, !tbaa !31
  %1297 = load i64, ptr %64, align 8, !tbaa !11
  %1298 = trunc i64 %1297 to i32
  %1299 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1296, i32 noundef %1298)
  %1300 = load i32, ptr %1299, align 4, !tbaa !9
  store i32 %1300, ptr %38, align 4, !tbaa !9
  store i8 0, ptr %36, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #12
  store i64 0, ptr %65, align 8, !tbaa !11
  br label %1301

1301:                                             ; preds = %1428, %1290
  %1302 = load i64, ptr %65, align 8, !tbaa !11
  %1303 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1304 = load ptr, ptr %1303, align 8, !tbaa !18
  %1305 = load i32, ptr %38, align 4, !tbaa !9
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1304, i64 %1306
  %1308 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1307, i32 0, i32 4
  %1309 = load i32, ptr %1308, align 8, !tbaa !19
  %1310 = sext i32 %1309 to i64
  %1311 = icmp ult i64 %1302, %1310
  br i1 %1311, label %1313, label %1312

1312:                                             ; preds = %1301
  store i32 24, ptr %63, align 4
  br label %1431

1313:                                             ; preds = %1301
  %1314 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %1315 = load ptr, ptr %1314, align 8, !tbaa !18
  %1316 = load i32, ptr %38, align 4, !tbaa !9
  %1317 = sext i32 %1316 to i64
  %1318 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1315, i64 %1317
  %1319 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1318, i32 0, i32 5
  %1320 = load i64, ptr %65, align 8, !tbaa !11
  %1321 = trunc i64 %1320 to i32
  %1322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %1319, i32 noundef %1321)
  %1323 = load i32, ptr %1322, align 4, !tbaa !9
  store i32 %1323, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #12
  store i64 0, ptr %66, align 8, !tbaa !11
  br label %1324

1324:                                             ; preds = %1419, %1313
  %1325 = load i64, ptr %66, align 8, !tbaa !11
  %1326 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1327 = load ptr, ptr %1326, align 8, !tbaa !30
  %1328 = load i32, ptr %9, align 4, !tbaa !9
  %1329 = sext i32 %1328 to i64
  %1330 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1327, i64 %1329
  %1331 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1330, i32 0, i32 0
  %1332 = load i32, ptr %1331, align 8, !tbaa !36
  %1333 = sext i32 %1332 to i64
  %1334 = icmp ult i64 %1325, %1333
  br i1 %1334, label %1336, label %1335

1335:                                             ; preds = %1324
  store i32 27, ptr %63, align 4
  br label %1422

1336:                                             ; preds = %1324
  %1337 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1338 = load ptr, ptr %1337, align 8, !tbaa !30
  %1339 = load i32, ptr %9, align 4, !tbaa !9
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1338, i64 %1340
  %1342 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1341, i32 0, i32 2
  %1343 = load ptr, ptr %1342, align 8, !tbaa !31
  %1344 = load i64, ptr %66, align 8, !tbaa !11
  %1345 = trunc i64 %1344 to i32
  %1346 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1343, i32 noundef %1345)
  %1347 = load i32, ptr %1346, align 4, !tbaa !9
  store i32 %1347, ptr %10, align 4, !tbaa !9
  %1348 = load i64, ptr %66, align 8, !tbaa !11
  %1349 = icmp ugt i64 %1348, 0
  br i1 %1349, label %1350, label %1363

1350:                                             ; preds = %1336
  %1351 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1352 = load ptr, ptr %1351, align 8, !tbaa !30
  %1353 = load i32, ptr %9, align 4, !tbaa !9
  %1354 = sext i32 %1353 to i64
  %1355 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1352, i64 %1354
  %1356 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1355, i32 0, i32 2
  %1357 = load ptr, ptr %1356, align 8, !tbaa !31
  %1358 = load i64, ptr %66, align 8, !tbaa !11
  %1359 = sub i64 %1358, 1
  %1360 = trunc i64 %1359 to i32
  %1361 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1357, i32 noundef %1360)
  %1362 = load i32, ptr %1361, align 4, !tbaa !9
  store i32 %1362, ptr %11, align 4, !tbaa !9
  br label %1363

1363:                                             ; preds = %1350, %1336
  %1364 = load i64, ptr %66, align 8, !tbaa !11
  %1365 = icmp eq i64 %1364, 0
  br i1 %1365, label %1366, label %1384

1366:                                             ; preds = %1363
  %1367 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1368 = load ptr, ptr %1367, align 8, !tbaa !30
  %1369 = load i32, ptr %9, align 4, !tbaa !9
  %1370 = sext i32 %1369 to i64
  %1371 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1368, i64 %1370
  %1372 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1371, i32 0, i32 2
  %1373 = load ptr, ptr %1372, align 8, !tbaa !31
  %1374 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1375 = load ptr, ptr %1374, align 8, !tbaa !30
  %1376 = load i32, ptr %9, align 4, !tbaa !9
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1375, i64 %1377
  %1379 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1378, i32 0, i32 0
  %1380 = load i32, ptr %1379, align 8, !tbaa !36
  %1381 = sub nsw i32 %1380, 1
  %1382 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1373, i32 noundef %1381)
  %1383 = load i32, ptr %1382, align 4, !tbaa !9
  store i32 %1383, ptr %11, align 4, !tbaa !9
  br label %1384

1384:                                             ; preds = %1366, %1363
  %1385 = load i32, ptr %10, align 4, !tbaa !9
  %1386 = load i32, ptr %38, align 4, !tbaa !9
  %1387 = icmp eq i32 %1385, %1386
  br i1 %1387, label %1388, label %1418

1388:                                             ; preds = %1384
  %1389 = load i32, ptr %11, align 4, !tbaa !9
  %1390 = load i32, ptr %37, align 4, !tbaa !9
  %1391 = icmp eq i32 %1389, %1390
  br i1 %1391, label %1392, label %1418

1392:                                             ; preds = %1388
  store i8 1, ptr %36, align 1, !tbaa !47
  %1393 = load i64, ptr %66, align 8, !tbaa !11
  %1394 = add i64 %1393, 1
  %1395 = trunc i64 %1394 to i32
  store i32 %1395, ptr %8, align 4, !tbaa !9
  %1396 = load i32, ptr %8, align 4, !tbaa !9
  %1397 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1398 = load ptr, ptr %1397, align 8, !tbaa !30
  %1399 = load i32, ptr %9, align 4, !tbaa !9
  %1400 = sext i32 %1399 to i64
  %1401 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1398, i64 %1400
  %1402 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1401, i32 0, i32 0
  %1403 = load i32, ptr %1402, align 8, !tbaa !36
  %1404 = sub nsw i32 %1403, 1
  %1405 = icmp sgt i32 %1396, %1404
  br i1 %1405, label %1406, label %1417

1406:                                             ; preds = %1392
  %1407 = load i32, ptr %8, align 4, !tbaa !9
  %1408 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1409 = load ptr, ptr %1408, align 8, !tbaa !30
  %1410 = load i32, ptr %9, align 4, !tbaa !9
  %1411 = sext i32 %1410 to i64
  %1412 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1409, i64 %1411
  %1413 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1412, i32 0, i32 0
  %1414 = load i32, ptr %1413, align 8, !tbaa !36
  %1415 = sub nsw i32 %1414, 0
  %1416 = sub nsw i32 %1407, %1415
  store i32 %1416, ptr %8, align 4, !tbaa !9
  br label %1417

1417:                                             ; preds = %1406, %1392
  store i32 27, ptr %63, align 4
  br label %1422

1418:                                             ; preds = %1388, %1384
  br label %1419

1419:                                             ; preds = %1418
  %1420 = load i64, ptr %66, align 8, !tbaa !11
  %1421 = add i64 %1420, 1
  store i64 %1421, ptr %66, align 8, !tbaa !11
  br label %1324, !llvm.loop !49

1422:                                             ; preds = %1417, %1335
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #12
  br label %1423

1423:                                             ; preds = %1422
  %1424 = load i8, ptr %36, align 1, !tbaa !47, !range !50, !noundef !51
  %1425 = trunc i8 %1424 to i1
  br i1 %1425, label %1426, label %1427

1426:                                             ; preds = %1423
  store i32 24, ptr %63, align 4
  br label %1431

1427:                                             ; preds = %1423
  br label %1428

1428:                                             ; preds = %1427
  %1429 = load i64, ptr %65, align 8, !tbaa !11
  %1430 = add i64 %1429, 1
  store i64 %1430, ptr %65, align 8, !tbaa !11
  br label %1301, !llvm.loop !52

1431:                                             ; preds = %1426, %1312
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #12
  br label %1432

1432:                                             ; preds = %1431
  %1433 = load i64, ptr %64, align 8, !tbaa !11
  %1434 = add i64 %1433, 2
  %1435 = trunc i64 %1434 to i32
  store i32 %1435, ptr %7, align 4, !tbaa !9
  %1436 = load i32, ptr %7, align 4, !tbaa !9
  %1437 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1438 = load ptr, ptr %1437, align 8, !tbaa !30
  %1439 = load i64, ptr %62, align 8, !tbaa !11
  %1440 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1438, i64 %1439
  %1441 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1440, i32 0, i32 0
  %1442 = load i32, ptr %1441, align 8, !tbaa !36
  %1443 = sub nsw i32 %1442, 1
  %1444 = icmp sgt i32 %1436, %1443
  br i1 %1444, label %1445, label %1455

1445:                                             ; preds = %1432
  %1446 = load i32, ptr %7, align 4, !tbaa !9
  %1447 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1448 = load ptr, ptr %1447, align 8, !tbaa !30
  %1449 = load i64, ptr %62, align 8, !tbaa !11
  %1450 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1448, i64 %1449
  %1451 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1450, i32 0, i32 0
  %1452 = load i32, ptr %1451, align 8, !tbaa !36
  %1453 = sub nsw i32 %1446, %1452
  %1454 = sub nsw i32 %1453, 0
  store i32 %1454, ptr %7, align 4, !tbaa !9
  br label %1455

1455:                                             ; preds = %1445, %1432
  %1456 = load i8, ptr %36, align 1, !tbaa !47, !range !50, !noundef !51
  %1457 = trunc i8 %1456 to i1
  br i1 %1457, label %1458, label %1479

1458:                                             ; preds = %1455
  %1459 = load i32, ptr %9, align 4, !tbaa !9
  %1460 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1461 = load ptr, ptr %1460, align 8, !tbaa !30
  %1462 = load i64, ptr %62, align 8, !tbaa !11
  %1463 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1461, i64 %1462
  %1464 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1463, i32 0, i32 5
  %1465 = load ptr, ptr %1464, align 8, !tbaa !45
  %1466 = load i32, ptr %7, align 4, !tbaa !9
  %1467 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1465, i32 noundef %1466)
  store i32 %1459, ptr %1467, align 4, !tbaa !9
  %1468 = load i64, ptr %62, align 8, !tbaa !11
  %1469 = trunc i64 %1468 to i32
  %1470 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1471 = load ptr, ptr %1470, align 8, !tbaa !30
  %1472 = load i32, ptr %9, align 4, !tbaa !9
  %1473 = sext i32 %1472 to i64
  %1474 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1471, i64 %1473
  %1475 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1474, i32 0, i32 5
  %1476 = load ptr, ptr %1475, align 8, !tbaa !45
  %1477 = load i32, ptr %8, align 4, !tbaa !9
  %1478 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1476, i32 noundef %1477)
  store i32 %1469, ptr %1478, align 4, !tbaa !9
  br label %1488

1479:                                             ; preds = %1455
  %1480 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1481 = load ptr, ptr %1480, align 8, !tbaa !30
  %1482 = load i64, ptr %62, align 8, !tbaa !11
  %1483 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1481, i64 %1482
  %1484 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1483, i32 0, i32 5
  %1485 = load ptr, ptr %1484, align 8, !tbaa !45
  %1486 = load i32, ptr %7, align 4, !tbaa !9
  %1487 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1485, i32 noundef %1486)
  store i32 -1, ptr %1487, align 4, !tbaa !9
  br label %1488

1488:                                             ; preds = %1479, %1458
  br label %1489

1489:                                             ; preds = %1488
  %1490 = load i64, ptr %64, align 8, !tbaa !11
  %1491 = add i64 %1490, 1
  store i64 %1491, ptr %64, align 8, !tbaa !11
  br label %1236, !llvm.loop !53

1492:                                             ; preds = %1246
  br label %1493

1493:                                             ; preds = %1492
  %1494 = load i64, ptr %62, align 8, !tbaa !11
  %1495 = add i64 %1494, 1
  store i64 %1495, ptr %62, align 8, !tbaa !11
  br label %1229, !llvm.loop !54

1496:                                             ; preds = %1234
  %1497 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.41)
  %1498 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1497, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #12
  store i64 0, ptr %67, align 8, !tbaa !11
  br label %1499

1499:                                             ; preds = %1746, %1496
  %1500 = load i64, ptr %67, align 8, !tbaa !11
  %1501 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %1502 = load i64, ptr %1501, align 8, !tbaa !29
  %1503 = icmp ult i64 %1500, %1502
  br i1 %1503, label %1505, label %1504

1504:                                             ; preds = %1499
  store i32 30, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #12
  br label %1749

1505:                                             ; preds = %1499
  %1506 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1507 = load ptr, ptr %1506, align 8, !tbaa !30
  %1508 = load i64, ptr %67, align 8, !tbaa !11
  %1509 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1507, i64 %1508
  %1510 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1509, i32 0, i32 2
  %1511 = load ptr, ptr %1510, align 8, !tbaa !31
  %1512 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1511, i32 noundef 0)
  %1513 = load i32, ptr %1512, align 4, !tbaa !9
  store i32 %1513, ptr %10, align 4, !tbaa !9
  %1514 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1515 = load ptr, ptr %1514, align 8, !tbaa !30
  %1516 = load i64, ptr %67, align 8, !tbaa !11
  %1517 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1515, i64 %1516
  %1518 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1517, i32 0, i32 2
  %1519 = load ptr, ptr %1518, align 8, !tbaa !31
  %1520 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1519, i32 noundef 1)
  %1521 = load i32, ptr %1520, align 4, !tbaa !9
  store i32 %1521, ptr %11, align 4, !tbaa !9
  %1522 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1523 = load ptr, ptr %1522, align 8, !tbaa !30
  %1524 = load i64, ptr %67, align 8, !tbaa !11
  %1525 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1523, i64 %1524
  %1526 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1525, i32 0, i32 2
  %1527 = load ptr, ptr %1526, align 8, !tbaa !31
  %1528 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1527, i32 noundef 2)
  %1529 = load i32, ptr %1528, align 4, !tbaa !9
  store i32 %1529, ptr %12, align 4, !tbaa !9
  %1530 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1531 = load ptr, ptr %1530, align 8, !tbaa !30
  %1532 = load i64, ptr %67, align 8, !tbaa !11
  %1533 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1531, i64 %1532
  %1534 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1533, i32 0, i32 0
  %1535 = load i32, ptr %1534, align 8, !tbaa !36
  %1536 = icmp eq i32 %1535, 3
  br i1 %1536, label %1537, label %1619

1537:                                             ; preds = %1505
  %1538 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1539 = load ptr, ptr %1538, align 8, !tbaa !30
  %1540 = load i64, ptr %67, align 8, !tbaa !11
  %1541 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1539, i64 %1540
  %1542 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1541, i32 0, i32 5
  %1543 = load ptr, ptr %1542, align 8, !tbaa !45
  %1544 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1543, i32 noundef 2)
  %1545 = load i32, ptr %1544, align 4, !tbaa !9
  %1546 = sext i32 %1545 to i64
  %1547 = load i64, ptr %67, align 8, !tbaa !11
  %1548 = icmp ugt i64 %1546, %1547
  br i1 %1548, label %1559, label %1549

1549:                                             ; preds = %1537
  %1550 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1551 = load ptr, ptr %1550, align 8, !tbaa !30
  %1552 = load i64, ptr %67, align 8, !tbaa !11
  %1553 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1551, i64 %1552
  %1554 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1553, i32 0, i32 5
  %1555 = load ptr, ptr %1554, align 8, !tbaa !45
  %1556 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1555, i32 noundef 2)
  %1557 = load i32, ptr %1556, align 4, !tbaa !9
  %1558 = icmp eq i32 %1557, -1
  br i1 %1558, label %1559, label %1564

1559:                                             ; preds = %1549, %1537
  %1560 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1561 = load i64, ptr %1560, align 8, !tbaa !28
  %1562 = add i64 %1561, 1
  %1563 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1562, ptr %1563, align 8, !tbaa !28
  br label %1564

1564:                                             ; preds = %1559, %1549
  %1565 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1566 = load ptr, ptr %1565, align 8, !tbaa !30
  %1567 = load i64, ptr %67, align 8, !tbaa !11
  %1568 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1566, i64 %1567
  %1569 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1568, i32 0, i32 5
  %1570 = load ptr, ptr %1569, align 8, !tbaa !45
  %1571 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1570, i32 noundef 0)
  %1572 = load i32, ptr %1571, align 4, !tbaa !9
  %1573 = sext i32 %1572 to i64
  %1574 = load i64, ptr %67, align 8, !tbaa !11
  %1575 = icmp ugt i64 %1573, %1574
  br i1 %1575, label %1586, label %1576

1576:                                             ; preds = %1564
  %1577 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1578 = load ptr, ptr %1577, align 8, !tbaa !30
  %1579 = load i64, ptr %67, align 8, !tbaa !11
  %1580 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1578, i64 %1579
  %1581 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1580, i32 0, i32 5
  %1582 = load ptr, ptr %1581, align 8, !tbaa !45
  %1583 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1582, i32 noundef 0)
  %1584 = load i32, ptr %1583, align 4, !tbaa !9
  %1585 = icmp eq i32 %1584, -1
  br i1 %1585, label %1586, label %1591

1586:                                             ; preds = %1576, %1564
  %1587 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1588 = load i64, ptr %1587, align 8, !tbaa !28
  %1589 = add i64 %1588, 1
  %1590 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1589, ptr %1590, align 8, !tbaa !28
  br label %1591

1591:                                             ; preds = %1586, %1576
  %1592 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1593 = load ptr, ptr %1592, align 8, !tbaa !30
  %1594 = load i64, ptr %67, align 8, !tbaa !11
  %1595 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1593, i64 %1594
  %1596 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1595, i32 0, i32 5
  %1597 = load ptr, ptr %1596, align 8, !tbaa !45
  %1598 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1597, i32 noundef 1)
  %1599 = load i32, ptr %1598, align 4, !tbaa !9
  %1600 = sext i32 %1599 to i64
  %1601 = load i64, ptr %67, align 8, !tbaa !11
  %1602 = icmp ugt i64 %1600, %1601
  br i1 %1602, label %1613, label %1603

1603:                                             ; preds = %1591
  %1604 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1605 = load ptr, ptr %1604, align 8, !tbaa !30
  %1606 = load i64, ptr %67, align 8, !tbaa !11
  %1607 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1605, i64 %1606
  %1608 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1607, i32 0, i32 5
  %1609 = load ptr, ptr %1608, align 8, !tbaa !45
  %1610 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1609, i32 noundef 1)
  %1611 = load i32, ptr %1610, align 4, !tbaa !9
  %1612 = icmp eq i32 %1611, -1
  br i1 %1612, label %1613, label %1618

1613:                                             ; preds = %1603, %1591
  %1614 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1615 = load i64, ptr %1614, align 8, !tbaa !28
  %1616 = add i64 %1615, 1
  %1617 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1616, ptr %1617, align 8, !tbaa !28
  br label %1618

1618:                                             ; preds = %1613, %1603
  br label %1745

1619:                                             ; preds = %1505
  %1620 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1621 = load ptr, ptr %1620, align 8, !tbaa !30
  %1622 = load i64, ptr %67, align 8, !tbaa !11
  %1623 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1621, i64 %1622
  %1624 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1623, i32 0, i32 0
  %1625 = load i32, ptr %1624, align 8, !tbaa !36
  %1626 = icmp eq i32 %1625, 4
  br i1 %1626, label %1627, label %1744

1627:                                             ; preds = %1619
  %1628 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1629 = load ptr, ptr %1628, align 8, !tbaa !30
  %1630 = load i64, ptr %67, align 8, !tbaa !11
  %1631 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1629, i64 %1630
  %1632 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1631, i32 0, i32 2
  %1633 = load ptr, ptr %1632, align 8, !tbaa !31
  %1634 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1633, i32 noundef 3)
  %1635 = load i32, ptr %1634, align 4, !tbaa !9
  store i32 %1635, ptr %13, align 4, !tbaa !9
  %1636 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1637 = load ptr, ptr %1636, align 8, !tbaa !30
  %1638 = load i64, ptr %67, align 8, !tbaa !11
  %1639 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1637, i64 %1638
  %1640 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1639, i32 0, i32 5
  %1641 = load ptr, ptr %1640, align 8, !tbaa !45
  %1642 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1641, i32 noundef 2)
  %1643 = load i32, ptr %1642, align 4, !tbaa !9
  %1644 = sext i32 %1643 to i64
  %1645 = load i64, ptr %67, align 8, !tbaa !11
  %1646 = icmp ugt i64 %1644, %1645
  br i1 %1646, label %1657, label %1647

1647:                                             ; preds = %1627
  %1648 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1649 = load ptr, ptr %1648, align 8, !tbaa !30
  %1650 = load i64, ptr %67, align 8, !tbaa !11
  %1651 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1649, i64 %1650
  %1652 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1651, i32 0, i32 5
  %1653 = load ptr, ptr %1652, align 8, !tbaa !45
  %1654 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1653, i32 noundef 2)
  %1655 = load i32, ptr %1654, align 4, !tbaa !9
  %1656 = icmp eq i32 %1655, -1
  br i1 %1656, label %1657, label %1662

1657:                                             ; preds = %1647, %1627
  %1658 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1659 = load i64, ptr %1658, align 8, !tbaa !28
  %1660 = add i64 %1659, 1
  %1661 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1660, ptr %1661, align 8, !tbaa !28
  br label %1662

1662:                                             ; preds = %1657, %1647
  %1663 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1664 = load ptr, ptr %1663, align 8, !tbaa !30
  %1665 = load i64, ptr %67, align 8, !tbaa !11
  %1666 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1664, i64 %1665
  %1667 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1666, i32 0, i32 5
  %1668 = load ptr, ptr %1667, align 8, !tbaa !45
  %1669 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1668, i32 noundef 3)
  %1670 = load i32, ptr %1669, align 4, !tbaa !9
  %1671 = sext i32 %1670 to i64
  %1672 = load i64, ptr %67, align 8, !tbaa !11
  %1673 = icmp ugt i64 %1671, %1672
  br i1 %1673, label %1684, label %1674

1674:                                             ; preds = %1662
  %1675 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1676 = load ptr, ptr %1675, align 8, !tbaa !30
  %1677 = load i64, ptr %67, align 8, !tbaa !11
  %1678 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1676, i64 %1677
  %1679 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1678, i32 0, i32 5
  %1680 = load ptr, ptr %1679, align 8, !tbaa !45
  %1681 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1680, i32 noundef 3)
  %1682 = load i32, ptr %1681, align 4, !tbaa !9
  %1683 = icmp eq i32 %1682, -1
  br i1 %1683, label %1684, label %1689

1684:                                             ; preds = %1674, %1662
  %1685 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1686 = load i64, ptr %1685, align 8, !tbaa !28
  %1687 = add i64 %1686, 1
  %1688 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1687, ptr %1688, align 8, !tbaa !28
  br label %1689

1689:                                             ; preds = %1684, %1674
  %1690 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1691 = load ptr, ptr %1690, align 8, !tbaa !30
  %1692 = load i64, ptr %67, align 8, !tbaa !11
  %1693 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1691, i64 %1692
  %1694 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1693, i32 0, i32 5
  %1695 = load ptr, ptr %1694, align 8, !tbaa !45
  %1696 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1695, i32 noundef 0)
  %1697 = load i32, ptr %1696, align 4, !tbaa !9
  %1698 = sext i32 %1697 to i64
  %1699 = load i64, ptr %67, align 8, !tbaa !11
  %1700 = icmp ugt i64 %1698, %1699
  br i1 %1700, label %1711, label %1701

1701:                                             ; preds = %1689
  %1702 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1703 = load ptr, ptr %1702, align 8, !tbaa !30
  %1704 = load i64, ptr %67, align 8, !tbaa !11
  %1705 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1703, i64 %1704
  %1706 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1705, i32 0, i32 5
  %1707 = load ptr, ptr %1706, align 8, !tbaa !45
  %1708 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1707, i32 noundef 0)
  %1709 = load i32, ptr %1708, align 4, !tbaa !9
  %1710 = icmp eq i32 %1709, -1
  br i1 %1710, label %1711, label %1716

1711:                                             ; preds = %1701, %1689
  %1712 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1713 = load i64, ptr %1712, align 8, !tbaa !28
  %1714 = add i64 %1713, 1
  %1715 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1714, ptr %1715, align 8, !tbaa !28
  br label %1716

1716:                                             ; preds = %1711, %1701
  %1717 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1718 = load ptr, ptr %1717, align 8, !tbaa !30
  %1719 = load i64, ptr %67, align 8, !tbaa !11
  %1720 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1718, i64 %1719
  %1721 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1720, i32 0, i32 5
  %1722 = load ptr, ptr %1721, align 8, !tbaa !45
  %1723 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1722, i32 noundef 1)
  %1724 = load i32, ptr %1723, align 4, !tbaa !9
  %1725 = sext i32 %1724 to i64
  %1726 = load i64, ptr %67, align 8, !tbaa !11
  %1727 = icmp ugt i64 %1725, %1726
  br i1 %1727, label %1738, label %1728

1728:                                             ; preds = %1716
  %1729 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1730 = load ptr, ptr %1729, align 8, !tbaa !30
  %1731 = load i64, ptr %67, align 8, !tbaa !11
  %1732 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1730, i64 %1731
  %1733 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1732, i32 0, i32 5
  %1734 = load ptr, ptr %1733, align 8, !tbaa !45
  %1735 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1734, i32 noundef 1)
  %1736 = load i32, ptr %1735, align 4, !tbaa !9
  %1737 = icmp eq i32 %1736, -1
  br i1 %1737, label %1738, label %1743

1738:                                             ; preds = %1728, %1716
  %1739 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1740 = load i64, ptr %1739, align 8, !tbaa !28
  %1741 = add i64 %1740, 1
  %1742 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1741, ptr %1742, align 8, !tbaa !28
  br label %1743

1743:                                             ; preds = %1738, %1728
  br label %1744

1744:                                             ; preds = %1743, %1619
  br label %1745

1745:                                             ; preds = %1744, %1618
  br label %1746

1746:                                             ; preds = %1745
  %1747 = load i64, ptr %67, align 8, !tbaa !11
  %1748 = add i64 %1747, 1
  store i64 %1748, ptr %67, align 8, !tbaa !11
  br label %1499, !llvm.loop !55

1749:                                             ; preds = %1504
  %1750 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1751 = load i64, ptr %1750, align 8, !tbaa !28
  %1752 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %1751, i64 120)
  %1753 = extractvalue { i64, i1 } %1752, 1
  %1754 = extractvalue { i64, i1 } %1752, 0
  %1755 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %1754, i64 8)
  %1756 = extractvalue { i64, i1 } %1755, 1
  %1757 = or i1 %1753, %1756
  %1758 = extractvalue { i64, i1 } %1755, 0
  %1759 = select i1 %1757, i64 -1, i64 %1758
  %1760 = call noalias noundef nonnull ptr @_Znam(i64 noundef %1759) #14
  store i64 %1751, ptr %1760, align 16
  %1761 = getelementptr inbounds i8, ptr %1760, i64 8
  %1762 = icmp eq i64 %1751, 0
  br i1 %1762, label %1770, label %1763

1763:                                             ; preds = %1749
  %1764 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1761, i64 %1751
  br label %1765

1765:                                             ; preds = %1767, %1763
  %1766 = phi ptr [ %1761, %1763 ], [ %1768, %1767 ]
  invoke void @_ZN13EulerSolver2D9edge_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %1766)
          to label %1767 unwind label %1778

1767:                                             ; preds = %1765
  %1768 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1766, i64 1
  %1769 = icmp eq ptr %1768, %1764
  br i1 %1769, label %1770, label %1765

1770:                                             ; preds = %1767, %1749
  %1771 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  store ptr %1761, ptr %1771, align 8, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #12
  store i64 0, ptr %68, align 8, !tbaa !11
  br label %1772

1772:                                             ; preds = %1799, %1770
  %1773 = load i64, ptr %68, align 8, !tbaa !11
  %1774 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1775 = load i64, ptr %1774, align 8, !tbaa !28
  %1776 = icmp ult i64 %1773, %1775
  br i1 %1776, label %1788, label %1777

1777:                                             ; preds = %1772
  store i32 33, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #12
  br label %1802

1778:                                             ; preds = %1765
  %1779 = landingpad { ptr, i32 }
          cleanup
  %1780 = extractvalue { ptr, i32 } %1779, 0
  store ptr %1780, ptr %58, align 8
  %1781 = extractvalue { ptr, i32 } %1779, 1
  store i32 %1781, ptr %59, align 4
  %1782 = icmp eq ptr %1761, %1766
  br i1 %1782, label %1787, label %1783

1783:                                             ; preds = %1783, %1778
  %1784 = phi ptr [ %1766, %1778 ], [ %1785, %1783 ]
  %1785 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1784, i64 -1
  call void @_ZN13EulerSolver2D9edge_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %1785) #12
  %1786 = icmp eq ptr %1785, %1761
  br i1 %1786, label %1787, label %1783

1787:                                             ; preds = %1783, %1778
  call void @_ZdaPvm(ptr noundef %1760, i64 noundef %1759) #15
  br label %5790

1788:                                             ; preds = %1772
  %1789 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1790 = load ptr, ptr %1789, align 8, !tbaa !56
  %1791 = load i64, ptr %68, align 8, !tbaa !11
  %1792 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1790, i64 %1791
  %1793 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1792, i32 0, i32 2
  store i32 -1, ptr %1793, align 8, !tbaa !57
  %1794 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1795 = load ptr, ptr %1794, align 8, !tbaa !56
  %1796 = load i64, ptr %68, align 8, !tbaa !11
  %1797 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1795, i64 %1796
  %1798 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1797, i32 0, i32 3
  store i32 -1, ptr %1798, align 4, !tbaa !60
  br label %1799

1799:                                             ; preds = %1788
  %1800 = load i64, ptr %68, align 8, !tbaa !11
  %1801 = add i64 %1800, 1
  store i64 %1801, ptr %68, align 8, !tbaa !11
  br label %1772, !llvm.loop !61

1802:                                             ; preds = %1777
  %1803 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 -1, ptr %1803, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #12
  store i32 -1, ptr %69, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #12
  store i64 0, ptr %70, align 8, !tbaa !11
  br label %1804

1804:                                             ; preds = %2303, %1802
  %1805 = load i64, ptr %70, align 8, !tbaa !11
  %1806 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %1807 = load i64, ptr %1806, align 8, !tbaa !29
  %1808 = icmp ult i64 %1805, %1807
  br i1 %1808, label %1810, label %1809

1809:                                             ; preds = %1804
  store i32 36, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #12
  br label %2306

1810:                                             ; preds = %1804
  %1811 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1812 = load ptr, ptr %1811, align 8, !tbaa !30
  %1813 = load i64, ptr %70, align 8, !tbaa !11
  %1814 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1812, i64 %1813
  %1815 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1814, i32 0, i32 2
  %1816 = load ptr, ptr %1815, align 8, !tbaa !31
  %1817 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1816, i32 noundef 0)
  %1818 = load i32, ptr %1817, align 4, !tbaa !9
  store i32 %1818, ptr %10, align 4, !tbaa !9
  %1819 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1820 = load ptr, ptr %1819, align 8, !tbaa !30
  %1821 = load i64, ptr %70, align 8, !tbaa !11
  %1822 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1820, i64 %1821
  %1823 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1822, i32 0, i32 2
  %1824 = load ptr, ptr %1823, align 8, !tbaa !31
  %1825 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1824, i32 noundef 1)
  %1826 = load i32, ptr %1825, align 4, !tbaa !9
  store i32 %1826, ptr %11, align 4, !tbaa !9
  %1827 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1828 = load ptr, ptr %1827, align 8, !tbaa !30
  %1829 = load i64, ptr %70, align 8, !tbaa !11
  %1830 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1828, i64 %1829
  %1831 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1830, i32 0, i32 2
  %1832 = load ptr, ptr %1831, align 8, !tbaa !31
  %1833 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1832, i32 noundef 2)
  %1834 = load i32, ptr %1833, align 4, !tbaa !9
  store i32 %1834, ptr %12, align 4, !tbaa !9
  %1835 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1836 = load ptr, ptr %1835, align 8, !tbaa !30
  %1837 = load i64, ptr %70, align 8, !tbaa !11
  %1838 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1836, i64 %1837
  %1839 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1838, i32 0, i32 0
  %1840 = load i32, ptr %1839, align 8, !tbaa !36
  %1841 = icmp eq i32 %1840, 3
  br i1 %1841, label %1842, label %2032

1842:                                             ; preds = %1810
  %1843 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1844 = load ptr, ptr %1843, align 8, !tbaa !30
  %1845 = load i64, ptr %70, align 8, !tbaa !11
  %1846 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1844, i64 %1845
  %1847 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1846, i32 0, i32 5
  %1848 = load ptr, ptr %1847, align 8, !tbaa !45
  %1849 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1848, i32 noundef 2)
  %1850 = load i32, ptr %1849, align 4, !tbaa !9
  %1851 = sext i32 %1850 to i64
  %1852 = load i64, ptr %70, align 8, !tbaa !11
  %1853 = icmp ugt i64 %1851, %1852
  br i1 %1853, label %1864, label %1854

1854:                                             ; preds = %1842
  %1855 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1856 = load ptr, ptr %1855, align 8, !tbaa !30
  %1857 = load i64, ptr %70, align 8, !tbaa !11
  %1858 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1856, i64 %1857
  %1859 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1858, i32 0, i32 5
  %1860 = load ptr, ptr %1859, align 8, !tbaa !45
  %1861 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1860, i32 noundef 2)
  %1862 = load i32, ptr %1861, align 4, !tbaa !9
  %1863 = icmp eq i32 %1862, -1
  br i1 %1863, label %1864, label %1905

1864:                                             ; preds = %1854, %1842
  %1865 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1866 = load i64, ptr %1865, align 8, !tbaa !28
  %1867 = add i64 %1866, 1
  %1868 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1867, ptr %1868, align 8, !tbaa !28
  %1869 = load i32, ptr %10, align 4, !tbaa !9
  %1870 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1871 = load ptr, ptr %1870, align 8, !tbaa !56
  %1872 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1873 = load i64, ptr %1872, align 8, !tbaa !28
  %1874 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1871, i64 %1873
  %1875 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1874, i32 0, i32 0
  store i32 %1869, ptr %1875, align 8, !tbaa !62
  %1876 = load i32, ptr %11, align 4, !tbaa !9
  %1877 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1878 = load ptr, ptr %1877, align 8, !tbaa !56
  %1879 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1880 = load i64, ptr %1879, align 8, !tbaa !28
  %1881 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1878, i64 %1880
  %1882 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1881, i32 0, i32 1
  store i32 %1876, ptr %1882, align 4, !tbaa !63
  %1883 = load i64, ptr %70, align 8, !tbaa !11
  %1884 = trunc i64 %1883 to i32
  %1885 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1886 = load ptr, ptr %1885, align 8, !tbaa !56
  %1887 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1888 = load i64, ptr %1887, align 8, !tbaa !28
  %1889 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1886, i64 %1888
  %1890 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1889, i32 0, i32 2
  store i32 %1884, ptr %1890, align 8, !tbaa !57
  %1891 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1892 = load ptr, ptr %1891, align 8, !tbaa !30
  %1893 = load i64, ptr %70, align 8, !tbaa !11
  %1894 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1892, i64 %1893
  %1895 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1894, i32 0, i32 5
  %1896 = load ptr, ptr %1895, align 8, !tbaa !45
  %1897 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1896, i32 noundef 2)
  %1898 = load i32, ptr %1897, align 4, !tbaa !9
  %1899 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1900 = load ptr, ptr %1899, align 8, !tbaa !56
  %1901 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1902 = load i64, ptr %1901, align 8, !tbaa !28
  %1903 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1900, i64 %1902
  %1904 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1903, i32 0, i32 3
  store i32 %1898, ptr %1904, align 4, !tbaa !60
  br label %1905

1905:                                             ; preds = %1864, %1854
  %1906 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1907 = load ptr, ptr %1906, align 8, !tbaa !30
  %1908 = load i64, ptr %70, align 8, !tbaa !11
  %1909 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1907, i64 %1908
  %1910 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1909, i32 0, i32 5
  %1911 = load ptr, ptr %1910, align 8, !tbaa !45
  %1912 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1911, i32 noundef 0)
  %1913 = load i32, ptr %1912, align 4, !tbaa !9
  %1914 = sext i32 %1913 to i64
  %1915 = load i64, ptr %70, align 8, !tbaa !11
  %1916 = icmp ugt i64 %1914, %1915
  br i1 %1916, label %1927, label %1917

1917:                                             ; preds = %1905
  %1918 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1919 = load ptr, ptr %1918, align 8, !tbaa !30
  %1920 = load i64, ptr %70, align 8, !tbaa !11
  %1921 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1919, i64 %1920
  %1922 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1921, i32 0, i32 5
  %1923 = load ptr, ptr %1922, align 8, !tbaa !45
  %1924 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1923, i32 noundef 0)
  %1925 = load i32, ptr %1924, align 4, !tbaa !9
  %1926 = icmp eq i32 %1925, -1
  br i1 %1926, label %1927, label %1968

1927:                                             ; preds = %1917, %1905
  %1928 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1929 = load i64, ptr %1928, align 8, !tbaa !28
  %1930 = add i64 %1929, 1
  %1931 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1930, ptr %1931, align 8, !tbaa !28
  %1932 = load i32, ptr %11, align 4, !tbaa !9
  %1933 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1934 = load ptr, ptr %1933, align 8, !tbaa !56
  %1935 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1936 = load i64, ptr %1935, align 8, !tbaa !28
  %1937 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1934, i64 %1936
  %1938 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1937, i32 0, i32 0
  store i32 %1932, ptr %1938, align 8, !tbaa !62
  %1939 = load i32, ptr %12, align 4, !tbaa !9
  %1940 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1941 = load ptr, ptr %1940, align 8, !tbaa !56
  %1942 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1943 = load i64, ptr %1942, align 8, !tbaa !28
  %1944 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1941, i64 %1943
  %1945 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1944, i32 0, i32 1
  store i32 %1939, ptr %1945, align 4, !tbaa !63
  %1946 = load i64, ptr %70, align 8, !tbaa !11
  %1947 = trunc i64 %1946 to i32
  %1948 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1949 = load ptr, ptr %1948, align 8, !tbaa !56
  %1950 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1951 = load i64, ptr %1950, align 8, !tbaa !28
  %1952 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1949, i64 %1951
  %1953 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1952, i32 0, i32 2
  store i32 %1947, ptr %1953, align 8, !tbaa !57
  %1954 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1955 = load ptr, ptr %1954, align 8, !tbaa !30
  %1956 = load i64, ptr %70, align 8, !tbaa !11
  %1957 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1955, i64 %1956
  %1958 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1957, i32 0, i32 5
  %1959 = load ptr, ptr %1958, align 8, !tbaa !45
  %1960 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1959, i32 noundef 0)
  %1961 = load i32, ptr %1960, align 4, !tbaa !9
  %1962 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1963 = load ptr, ptr %1962, align 8, !tbaa !56
  %1964 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1965 = load i64, ptr %1964, align 8, !tbaa !28
  %1966 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1963, i64 %1965
  %1967 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1966, i32 0, i32 3
  store i32 %1961, ptr %1967, align 4, !tbaa !60
  br label %1968

1968:                                             ; preds = %1927, %1917
  %1969 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1970 = load ptr, ptr %1969, align 8, !tbaa !30
  %1971 = load i64, ptr %70, align 8, !tbaa !11
  %1972 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1970, i64 %1971
  %1973 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1972, i32 0, i32 5
  %1974 = load ptr, ptr %1973, align 8, !tbaa !45
  %1975 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1974, i32 noundef 1)
  %1976 = load i32, ptr %1975, align 4, !tbaa !9
  %1977 = sext i32 %1976 to i64
  %1978 = load i64, ptr %70, align 8, !tbaa !11
  %1979 = icmp ugt i64 %1977, %1978
  br i1 %1979, label %1990, label %1980

1980:                                             ; preds = %1968
  %1981 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %1982 = load ptr, ptr %1981, align 8, !tbaa !30
  %1983 = load i64, ptr %70, align 8, !tbaa !11
  %1984 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1982, i64 %1983
  %1985 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1984, i32 0, i32 5
  %1986 = load ptr, ptr %1985, align 8, !tbaa !45
  %1987 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1986, i32 noundef 1)
  %1988 = load i32, ptr %1987, align 4, !tbaa !9
  %1989 = icmp eq i32 %1988, -1
  br i1 %1989, label %1990, label %2031

1990:                                             ; preds = %1980, %1968
  %1991 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1992 = load i64, ptr %1991, align 8, !tbaa !28
  %1993 = add i64 %1992, 1
  %1994 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %1993, ptr %1994, align 8, !tbaa !28
  %1995 = load i32, ptr %12, align 4, !tbaa !9
  %1996 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %1997 = load ptr, ptr %1996, align 8, !tbaa !56
  %1998 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %1999 = load i64, ptr %1998, align 8, !tbaa !28
  %2000 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1997, i64 %1999
  %2001 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2000, i32 0, i32 0
  store i32 %1995, ptr %2001, align 8, !tbaa !62
  %2002 = load i32, ptr %10, align 4, !tbaa !9
  %2003 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2004 = load ptr, ptr %2003, align 8, !tbaa !56
  %2005 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2006 = load i64, ptr %2005, align 8, !tbaa !28
  %2007 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2004, i64 %2006
  %2008 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2007, i32 0, i32 1
  store i32 %2002, ptr %2008, align 4, !tbaa !63
  %2009 = load i64, ptr %70, align 8, !tbaa !11
  %2010 = trunc i64 %2009 to i32
  %2011 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2012 = load ptr, ptr %2011, align 8, !tbaa !56
  %2013 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2014 = load i64, ptr %2013, align 8, !tbaa !28
  %2015 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2012, i64 %2014
  %2016 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2015, i32 0, i32 2
  store i32 %2010, ptr %2016, align 8, !tbaa !57
  %2017 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2018 = load ptr, ptr %2017, align 8, !tbaa !30
  %2019 = load i64, ptr %70, align 8, !tbaa !11
  %2020 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2018, i64 %2019
  %2021 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2020, i32 0, i32 5
  %2022 = load ptr, ptr %2021, align 8, !tbaa !45
  %2023 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2022, i32 noundef 1)
  %2024 = load i32, ptr %2023, align 4, !tbaa !9
  %2025 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2026 = load ptr, ptr %2025, align 8, !tbaa !56
  %2027 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2028 = load i64, ptr %2027, align 8, !tbaa !28
  %2029 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2026, i64 %2028
  %2030 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2029, i32 0, i32 3
  store i32 %2024, ptr %2030, align 4, !tbaa !60
  br label %2031

2031:                                             ; preds = %1990, %1980
  br label %2302

2032:                                             ; preds = %1810
  %2033 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2034 = load ptr, ptr %2033, align 8, !tbaa !30
  %2035 = load i64, ptr %70, align 8, !tbaa !11
  %2036 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2034, i64 %2035
  %2037 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2036, i32 0, i32 0
  %2038 = load i32, ptr %2037, align 8, !tbaa !36
  %2039 = icmp eq i32 %2038, 4
  br i1 %2039, label %2040, label %2301

2040:                                             ; preds = %2032
  %2041 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2042 = load ptr, ptr %2041, align 8, !tbaa !30
  %2043 = load i64, ptr %70, align 8, !tbaa !11
  %2044 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2042, i64 %2043
  %2045 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2044, i32 0, i32 2
  %2046 = load ptr, ptr %2045, align 8, !tbaa !31
  %2047 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2046, i32 noundef 3)
  %2048 = load i32, ptr %2047, align 4, !tbaa !9
  store i32 %2048, ptr %13, align 4, !tbaa !9
  %2049 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2050 = load ptr, ptr %2049, align 8, !tbaa !30
  %2051 = load i64, ptr %70, align 8, !tbaa !11
  %2052 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2050, i64 %2051
  %2053 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2052, i32 0, i32 5
  %2054 = load ptr, ptr %2053, align 8, !tbaa !45
  %2055 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2054, i32 noundef 2)
  %2056 = load i32, ptr %2055, align 4, !tbaa !9
  %2057 = sext i32 %2056 to i64
  %2058 = load i64, ptr %70, align 8, !tbaa !11
  %2059 = icmp ugt i64 %2057, %2058
  br i1 %2059, label %2070, label %2060

2060:                                             ; preds = %2040
  %2061 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2062 = load ptr, ptr %2061, align 8, !tbaa !30
  %2063 = load i64, ptr %70, align 8, !tbaa !11
  %2064 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2062, i64 %2063
  %2065 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2064, i32 0, i32 5
  %2066 = load ptr, ptr %2065, align 8, !tbaa !45
  %2067 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2066, i32 noundef 2)
  %2068 = load i32, ptr %2067, align 4, !tbaa !9
  %2069 = icmp eq i32 %2068, -1
  br i1 %2069, label %2070, label %2111

2070:                                             ; preds = %2060, %2040
  %2071 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2072 = load i64, ptr %2071, align 8, !tbaa !28
  %2073 = add i64 %2072, 1
  %2074 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %2073, ptr %2074, align 8, !tbaa !28
  %2075 = load i32, ptr %10, align 4, !tbaa !9
  %2076 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2077 = load ptr, ptr %2076, align 8, !tbaa !56
  %2078 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2079 = load i64, ptr %2078, align 8, !tbaa !28
  %2080 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2077, i64 %2079
  %2081 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2080, i32 0, i32 0
  store i32 %2075, ptr %2081, align 8, !tbaa !62
  %2082 = load i32, ptr %11, align 4, !tbaa !9
  %2083 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2084 = load ptr, ptr %2083, align 8, !tbaa !56
  %2085 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2086 = load i64, ptr %2085, align 8, !tbaa !28
  %2087 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2084, i64 %2086
  %2088 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2087, i32 0, i32 1
  store i32 %2082, ptr %2088, align 4, !tbaa !63
  %2089 = load i64, ptr %70, align 8, !tbaa !11
  %2090 = trunc i64 %2089 to i32
  %2091 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2092 = load ptr, ptr %2091, align 8, !tbaa !56
  %2093 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2094 = load i64, ptr %2093, align 8, !tbaa !28
  %2095 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2092, i64 %2094
  %2096 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2095, i32 0, i32 2
  store i32 %2090, ptr %2096, align 8, !tbaa !57
  %2097 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2098 = load ptr, ptr %2097, align 8, !tbaa !30
  %2099 = load i64, ptr %70, align 8, !tbaa !11
  %2100 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2098, i64 %2099
  %2101 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2100, i32 0, i32 5
  %2102 = load ptr, ptr %2101, align 8, !tbaa !45
  %2103 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2102, i32 noundef 2)
  %2104 = load i32, ptr %2103, align 4, !tbaa !9
  %2105 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2106 = load ptr, ptr %2105, align 8, !tbaa !56
  %2107 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2108 = load i64, ptr %2107, align 8, !tbaa !28
  %2109 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2106, i64 %2108
  %2110 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2109, i32 0, i32 3
  store i32 %2104, ptr %2110, align 4, !tbaa !60
  br label %2111

2111:                                             ; preds = %2070, %2060
  %2112 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2113 = load ptr, ptr %2112, align 8, !tbaa !30
  %2114 = load i64, ptr %70, align 8, !tbaa !11
  %2115 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2113, i64 %2114
  %2116 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2115, i32 0, i32 5
  %2117 = load ptr, ptr %2116, align 8, !tbaa !45
  %2118 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2117, i32 noundef 3)
  %2119 = load i32, ptr %2118, align 4, !tbaa !9
  %2120 = sext i32 %2119 to i64
  %2121 = load i64, ptr %70, align 8, !tbaa !11
  %2122 = icmp ugt i64 %2120, %2121
  br i1 %2122, label %2133, label %2123

2123:                                             ; preds = %2111
  %2124 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2125 = load ptr, ptr %2124, align 8, !tbaa !30
  %2126 = load i64, ptr %70, align 8, !tbaa !11
  %2127 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2125, i64 %2126
  %2128 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2127, i32 0, i32 5
  %2129 = load ptr, ptr %2128, align 8, !tbaa !45
  %2130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2129, i32 noundef 3)
  %2131 = load i32, ptr %2130, align 4, !tbaa !9
  %2132 = icmp eq i32 %2131, -1
  br i1 %2132, label %2133, label %2174

2133:                                             ; preds = %2123, %2111
  %2134 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2135 = load i64, ptr %2134, align 8, !tbaa !28
  %2136 = add i64 %2135, 1
  %2137 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %2136, ptr %2137, align 8, !tbaa !28
  %2138 = load i32, ptr %11, align 4, !tbaa !9
  %2139 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2140 = load ptr, ptr %2139, align 8, !tbaa !56
  %2141 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2142 = load i64, ptr %2141, align 8, !tbaa !28
  %2143 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2140, i64 %2142
  %2144 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2143, i32 0, i32 0
  store i32 %2138, ptr %2144, align 8, !tbaa !62
  %2145 = load i32, ptr %12, align 4, !tbaa !9
  %2146 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2147 = load ptr, ptr %2146, align 8, !tbaa !56
  %2148 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2149 = load i64, ptr %2148, align 8, !tbaa !28
  %2150 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2147, i64 %2149
  %2151 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2150, i32 0, i32 1
  store i32 %2145, ptr %2151, align 4, !tbaa !63
  %2152 = load i64, ptr %70, align 8, !tbaa !11
  %2153 = trunc i64 %2152 to i32
  %2154 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2155 = load ptr, ptr %2154, align 8, !tbaa !56
  %2156 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2157 = load i64, ptr %2156, align 8, !tbaa !28
  %2158 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2155, i64 %2157
  %2159 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2158, i32 0, i32 2
  store i32 %2153, ptr %2159, align 8, !tbaa !57
  %2160 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2161 = load ptr, ptr %2160, align 8, !tbaa !30
  %2162 = load i64, ptr %70, align 8, !tbaa !11
  %2163 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2161, i64 %2162
  %2164 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2163, i32 0, i32 5
  %2165 = load ptr, ptr %2164, align 8, !tbaa !45
  %2166 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2165, i32 noundef 3)
  %2167 = load i32, ptr %2166, align 4, !tbaa !9
  %2168 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2169 = load ptr, ptr %2168, align 8, !tbaa !56
  %2170 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2171 = load i64, ptr %2170, align 8, !tbaa !28
  %2172 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2169, i64 %2171
  %2173 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2172, i32 0, i32 3
  store i32 %2167, ptr %2173, align 4, !tbaa !60
  br label %2174

2174:                                             ; preds = %2133, %2123
  %2175 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2176 = load ptr, ptr %2175, align 8, !tbaa !30
  %2177 = load i64, ptr %70, align 8, !tbaa !11
  %2178 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2176, i64 %2177
  %2179 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2178, i32 0, i32 5
  %2180 = load ptr, ptr %2179, align 8, !tbaa !45
  %2181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2180, i32 noundef 0)
  %2182 = load i32, ptr %2181, align 4, !tbaa !9
  %2183 = sext i32 %2182 to i64
  %2184 = load i64, ptr %70, align 8, !tbaa !11
  %2185 = icmp ugt i64 %2183, %2184
  br i1 %2185, label %2196, label %2186

2186:                                             ; preds = %2174
  %2187 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2188 = load ptr, ptr %2187, align 8, !tbaa !30
  %2189 = load i64, ptr %70, align 8, !tbaa !11
  %2190 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2188, i64 %2189
  %2191 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2190, i32 0, i32 5
  %2192 = load ptr, ptr %2191, align 8, !tbaa !45
  %2193 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2192, i32 noundef 0)
  %2194 = load i32, ptr %2193, align 4, !tbaa !9
  %2195 = icmp eq i32 %2194, -1
  br i1 %2195, label %2196, label %2237

2196:                                             ; preds = %2186, %2174
  %2197 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2198 = load i64, ptr %2197, align 8, !tbaa !28
  %2199 = add i64 %2198, 1
  %2200 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %2199, ptr %2200, align 8, !tbaa !28
  %2201 = load i32, ptr %12, align 4, !tbaa !9
  %2202 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2203 = load ptr, ptr %2202, align 8, !tbaa !56
  %2204 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2205 = load i64, ptr %2204, align 8, !tbaa !28
  %2206 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2203, i64 %2205
  %2207 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2206, i32 0, i32 0
  store i32 %2201, ptr %2207, align 8, !tbaa !62
  %2208 = load i32, ptr %13, align 4, !tbaa !9
  %2209 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2210 = load ptr, ptr %2209, align 8, !tbaa !56
  %2211 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2212 = load i64, ptr %2211, align 8, !tbaa !28
  %2213 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2210, i64 %2212
  %2214 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2213, i32 0, i32 1
  store i32 %2208, ptr %2214, align 4, !tbaa !63
  %2215 = load i64, ptr %70, align 8, !tbaa !11
  %2216 = trunc i64 %2215 to i32
  %2217 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2218 = load ptr, ptr %2217, align 8, !tbaa !56
  %2219 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2220 = load i64, ptr %2219, align 8, !tbaa !28
  %2221 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2218, i64 %2220
  %2222 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2221, i32 0, i32 2
  store i32 %2216, ptr %2222, align 8, !tbaa !57
  %2223 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2224 = load ptr, ptr %2223, align 8, !tbaa !30
  %2225 = load i64, ptr %70, align 8, !tbaa !11
  %2226 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2224, i64 %2225
  %2227 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2226, i32 0, i32 5
  %2228 = load ptr, ptr %2227, align 8, !tbaa !45
  %2229 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2228, i32 noundef 0)
  %2230 = load i32, ptr %2229, align 4, !tbaa !9
  %2231 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2232 = load ptr, ptr %2231, align 8, !tbaa !56
  %2233 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2234 = load i64, ptr %2233, align 8, !tbaa !28
  %2235 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2232, i64 %2234
  %2236 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2235, i32 0, i32 3
  store i32 %2230, ptr %2236, align 4, !tbaa !60
  br label %2237

2237:                                             ; preds = %2196, %2186
  %2238 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2239 = load ptr, ptr %2238, align 8, !tbaa !30
  %2240 = load i64, ptr %70, align 8, !tbaa !11
  %2241 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2239, i64 %2240
  %2242 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2241, i32 0, i32 5
  %2243 = load ptr, ptr %2242, align 8, !tbaa !45
  %2244 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2243, i32 noundef 1)
  %2245 = load i32, ptr %2244, align 4, !tbaa !9
  %2246 = sext i32 %2245 to i64
  %2247 = load i64, ptr %70, align 8, !tbaa !11
  %2248 = icmp ugt i64 %2246, %2247
  br i1 %2248, label %2259, label %2249

2249:                                             ; preds = %2237
  %2250 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2251 = load ptr, ptr %2250, align 8, !tbaa !30
  %2252 = load i64, ptr %70, align 8, !tbaa !11
  %2253 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2251, i64 %2252
  %2254 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2253, i32 0, i32 5
  %2255 = load ptr, ptr %2254, align 8, !tbaa !45
  %2256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2255, i32 noundef 1)
  %2257 = load i32, ptr %2256, align 4, !tbaa !9
  %2258 = icmp eq i32 %2257, -1
  br i1 %2258, label %2259, label %2300

2259:                                             ; preds = %2249, %2237
  %2260 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2261 = load i64, ptr %2260, align 8, !tbaa !28
  %2262 = add i64 %2261, 1
  %2263 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  store i64 %2262, ptr %2263, align 8, !tbaa !28
  %2264 = load i32, ptr %13, align 4, !tbaa !9
  %2265 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2266 = load ptr, ptr %2265, align 8, !tbaa !56
  %2267 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2268 = load i64, ptr %2267, align 8, !tbaa !28
  %2269 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2266, i64 %2268
  %2270 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2269, i32 0, i32 0
  store i32 %2264, ptr %2270, align 8, !tbaa !62
  %2271 = load i32, ptr %10, align 4, !tbaa !9
  %2272 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2273 = load ptr, ptr %2272, align 8, !tbaa !56
  %2274 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2275 = load i64, ptr %2274, align 8, !tbaa !28
  %2276 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2273, i64 %2275
  %2277 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2276, i32 0, i32 1
  store i32 %2271, ptr %2277, align 4, !tbaa !63
  %2278 = load i64, ptr %70, align 8, !tbaa !11
  %2279 = trunc i64 %2278 to i32
  %2280 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2281 = load ptr, ptr %2280, align 8, !tbaa !56
  %2282 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2283 = load i64, ptr %2282, align 8, !tbaa !28
  %2284 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2281, i64 %2283
  %2285 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2284, i32 0, i32 2
  store i32 %2279, ptr %2285, align 8, !tbaa !57
  %2286 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2287 = load ptr, ptr %2286, align 8, !tbaa !30
  %2288 = load i64, ptr %70, align 8, !tbaa !11
  %2289 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2287, i64 %2288
  %2290 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2289, i32 0, i32 5
  %2291 = load ptr, ptr %2290, align 8, !tbaa !45
  %2292 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2291, i32 noundef 1)
  %2293 = load i32, ptr %2292, align 4, !tbaa !9
  %2294 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2295 = load ptr, ptr %2294, align 8, !tbaa !56
  %2296 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2297 = load i64, ptr %2296, align 8, !tbaa !28
  %2298 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2295, i64 %2297
  %2299 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2298, i32 0, i32 3
  store i32 %2293, ptr %2299, align 4, !tbaa !60
  br label %2300

2300:                                             ; preds = %2259, %2249
  br label %2301

2301:                                             ; preds = %2300, %2032
  br label %2302

2302:                                             ; preds = %2301, %2031
  br label %2303

2303:                                             ; preds = %2302
  %2304 = load i64, ptr %70, align 8, !tbaa !11
  %2305 = add i64 %2304, 1
  store i64 %2305, ptr %70, align 8, !tbaa !11
  br label %1804, !llvm.loop !64

2306:                                             ; preds = %1809
  %2307 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2308 = load i64, ptr %2307, align 8, !tbaa !28
  %2309 = add i64 %2308, 1
  store i64 %2309, ptr %2307, align 8, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #12
  store i64 0, ptr %71, align 8, !tbaa !11
  br label %2310

2310:                                             ; preds = %2638, %2306
  %2311 = load i64, ptr %71, align 8, !tbaa !11
  %2312 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2313 = load i64, ptr %2312, align 8, !tbaa !28
  %2314 = icmp ult i64 %2311, %2313
  br i1 %2314, label %2316, label %2315

2315:                                             ; preds = %2310
  store i32 39, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #12
  br label %2650

2316:                                             ; preds = %2310
  %2317 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2318 = load ptr, ptr %2317, align 8, !tbaa !56
  %2319 = load i64, ptr %71, align 8, !tbaa !11
  %2320 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2318, i64 %2319
  %2321 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2320, i32 0, i32 0
  %2322 = load i32, ptr %2321, align 8, !tbaa !62
  store i32 %2322, ptr %39, align 4, !tbaa !9
  %2323 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2324 = load ptr, ptr %2323, align 8, !tbaa !56
  %2325 = load i64, ptr %71, align 8, !tbaa !11
  %2326 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2324, i64 %2325
  %2327 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2326, i32 0, i32 1
  %2328 = load i32, ptr %2327, align 4, !tbaa !63
  store i32 %2328, ptr %40, align 4, !tbaa !9
  %2329 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2330 = load ptr, ptr %2329, align 8, !tbaa !56
  %2331 = load i64, ptr %71, align 8, !tbaa !11
  %2332 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2330, i64 %2331
  %2333 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2332, i32 0, i32 2
  %2334 = load i32, ptr %2333, align 8, !tbaa !57
  store i32 %2334, ptr %41, align 4, !tbaa !9
  %2335 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2336 = load ptr, ptr %2335, align 8, !tbaa !56
  %2337 = load i64, ptr %71, align 8, !tbaa !11
  %2338 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2336, i64 %2337
  %2339 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2338, i32 0, i32 3
  %2340 = load i32, ptr %2339, align 4, !tbaa !60
  store i32 %2340, ptr %42, align 4, !tbaa !9
  %2341 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2342 = load ptr, ptr %2341, align 8, !tbaa !18
  %2343 = load i32, ptr %39, align 4, !tbaa !9
  %2344 = sext i32 %2343 to i64
  %2345 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2342, i64 %2344
  %2346 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2345, i32 0, i32 0
  %2347 = load double, ptr %2346, align 8, !tbaa !33
  %2348 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2349 = load ptr, ptr %2348, align 8, !tbaa !18
  %2350 = load i32, ptr %40, align 4, !tbaa !9
  %2351 = sext i32 %2350 to i64
  %2352 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2349, i64 %2351
  %2353 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2352, i32 0, i32 0
  %2354 = load double, ptr %2353, align 8, !tbaa !33
  %2355 = fadd double %2347, %2354
  %2356 = fmul double 5.000000e-01, %2355
  store double %2356, ptr %22, align 8, !tbaa !34
  %2357 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2358 = load ptr, ptr %2357, align 8, !tbaa !18
  %2359 = load i32, ptr %39, align 4, !tbaa !9
  %2360 = sext i32 %2359 to i64
  %2361 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2358, i64 %2360
  %2362 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2361, i32 0, i32 1
  %2363 = load double, ptr %2362, align 8, !tbaa !35
  %2364 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2365 = load ptr, ptr %2364, align 8, !tbaa !18
  %2366 = load i32, ptr %40, align 4, !tbaa !9
  %2367 = sext i32 %2366 to i64
  %2368 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2365, i64 %2367
  %2369 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2368, i32 0, i32 1
  %2370 = load double, ptr %2369, align 8, !tbaa !35
  %2371 = fadd double %2363, %2370
  %2372 = fmul double 5.000000e-01, %2371
  store double %2372, ptr %23, align 8, !tbaa !34
  %2373 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2374 = load ptr, ptr %2373, align 8, !tbaa !56
  %2375 = load i64, ptr %71, align 8, !tbaa !11
  %2376 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2374, i64 %2375
  %2377 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2376, i32 0, i32 4
  call void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %72, ptr noundef nonnull align 8 dereferenceable(40) %2377, double noundef 0.000000e+00)
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %72) #12
  %2378 = load i32, ptr %41, align 4, !tbaa !9
  %2379 = icmp sgt i32 %2378, -1
  br i1 %2379, label %2380, label %2414

2380:                                             ; preds = %2316
  %2381 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2382 = load ptr, ptr %2381, align 8, !tbaa !30
  %2383 = load i32, ptr %41, align 4, !tbaa !9
  %2384 = sext i32 %2383 to i64
  %2385 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2382, i64 %2384
  %2386 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2385, i32 0, i32 6
  %2387 = load double, ptr %2386, align 8, !tbaa !37
  store double %2387, ptr %24, align 8, !tbaa !34
  %2388 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2389 = load ptr, ptr %2388, align 8, !tbaa !30
  %2390 = load i32, ptr %41, align 4, !tbaa !9
  %2391 = sext i32 %2390 to i64
  %2392 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2389, i64 %2391
  %2393 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2392, i32 0, i32 7
  %2394 = load double, ptr %2393, align 8, !tbaa !38
  store double %2394, ptr %25, align 8, !tbaa !34
  %2395 = load double, ptr %23, align 8, !tbaa !34
  %2396 = load double, ptr %25, align 8, !tbaa !34
  %2397 = fsub double %2395, %2396
  %2398 = fneg double %2397
  %2399 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2400 = load ptr, ptr %2399, align 8, !tbaa !56
  %2401 = load i64, ptr %71, align 8, !tbaa !11
  %2402 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2400, i64 %2401
  %2403 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2402, i32 0, i32 4
  %2404 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2403, i32 noundef 0)
  store double %2398, ptr %2404, align 8, !tbaa !34
  %2405 = load double, ptr %22, align 8, !tbaa !34
  %2406 = load double, ptr %24, align 8, !tbaa !34
  %2407 = fsub double %2405, %2406
  %2408 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2409 = load ptr, ptr %2408, align 8, !tbaa !56
  %2410 = load i64, ptr %71, align 8, !tbaa !11
  %2411 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2409, i64 %2410
  %2412 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2411, i32 0, i32 4
  %2413 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2412, i32 noundef 1)
  store double %2407, ptr %2413, align 8, !tbaa !34
  br label %2414

2414:                                             ; preds = %2380, %2316
  %2415 = load i32, ptr %42, align 4, !tbaa !9
  %2416 = icmp sgt i32 %2415, -1
  br i1 %2416, label %2417, label %2466

2417:                                             ; preds = %2414
  %2418 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2419 = load ptr, ptr %2418, align 8, !tbaa !30
  %2420 = load i32, ptr %42, align 4, !tbaa !9
  %2421 = sext i32 %2420 to i64
  %2422 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2419, i64 %2421
  %2423 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2422, i32 0, i32 6
  %2424 = load double, ptr %2423, align 8, !tbaa !37
  store double %2424, ptr %24, align 8, !tbaa !34
  %2425 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %2426 = load ptr, ptr %2425, align 8, !tbaa !30
  %2427 = load i32, ptr %42, align 4, !tbaa !9
  %2428 = sext i32 %2427 to i64
  %2429 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2426, i64 %2428
  %2430 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2429, i32 0, i32 7
  %2431 = load double, ptr %2430, align 8, !tbaa !38
  store double %2431, ptr %25, align 8, !tbaa !34
  %2432 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2433 = load ptr, ptr %2432, align 8, !tbaa !56
  %2434 = load i64, ptr %71, align 8, !tbaa !11
  %2435 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2433, i64 %2434
  %2436 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2435, i32 0, i32 4
  %2437 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2436, i32 noundef 0)
  %2438 = load double, ptr %2437, align 8, !tbaa !34
  %2439 = load double, ptr %25, align 8, !tbaa !34
  %2440 = load double, ptr %23, align 8, !tbaa !34
  %2441 = fsub double %2439, %2440
  %2442 = fsub double %2438, %2441
  %2443 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2444 = load ptr, ptr %2443, align 8, !tbaa !56
  %2445 = load i64, ptr %71, align 8, !tbaa !11
  %2446 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2444, i64 %2445
  %2447 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2446, i32 0, i32 4
  %2448 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2447, i32 noundef 0)
  store double %2442, ptr %2448, align 8, !tbaa !34
  %2449 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2450 = load ptr, ptr %2449, align 8, !tbaa !56
  %2451 = load i64, ptr %71, align 8, !tbaa !11
  %2452 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2450, i64 %2451
  %2453 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2452, i32 0, i32 4
  %2454 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2453, i32 noundef 1)
  %2455 = load double, ptr %2454, align 8, !tbaa !34
  %2456 = load double, ptr %24, align 8, !tbaa !34
  %2457 = fadd double %2455, %2456
  %2458 = load double, ptr %22, align 8, !tbaa !34
  %2459 = fsub double %2457, %2458
  %2460 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2461 = load ptr, ptr %2460, align 8, !tbaa !56
  %2462 = load i64, ptr %71, align 8, !tbaa !11
  %2463 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2461, i64 %2462
  %2464 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2463, i32 0, i32 4
  %2465 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2464, i32 noundef 1)
  store double %2459, ptr %2465, align 8, !tbaa !34
  br label %2466

2466:                                             ; preds = %2417, %2414
  %2467 = load i32, ptr %41, align 4, !tbaa !9
  %2468 = icmp slt i32 %2467, 0
  br i1 %2468, label %2469, label %2491

2469:                                             ; preds = %2466
  %2470 = load i32, ptr %42, align 4, !tbaa !9
  %2471 = icmp slt i32 %2470, 0
  br i1 %2471, label %2472, label %2491

2472:                                             ; preds = %2469
  %2473 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.42)
  %2474 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2473, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2475 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.43)
  %2476 = load i32, ptr %39, align 4, !tbaa !9
  %2477 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2475, i32 noundef %2476)
  %2478 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2477, ptr noundef @.str.14)
  %2479 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.44)
  %2480 = load i32, ptr %40, align 4, !tbaa !9
  %2481 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2479, i32 noundef %2480)
  %2482 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2481, ptr noundef @.str.14)
  %2483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.45)
  %2484 = load i32, ptr %41, align 4, !tbaa !9
  %2485 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2483, i32 noundef %2484)
  %2486 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2485, ptr noundef @.str.14)
  %2487 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.46)
  %2488 = load i32, ptr %42, align 4, !tbaa !9
  %2489 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2487, i32 noundef %2488)
  %2490 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2489, ptr noundef @.str.14)
  br label %2491

2491:                                             ; preds = %2472, %2469, %2466
  %2492 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2493 = load ptr, ptr %2492, align 8, !tbaa !56
  %2494 = load i64, ptr %71, align 8, !tbaa !11
  %2495 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2493, i64 %2494
  %2496 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2495, i32 0, i32 4
  %2497 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2496, i32 noundef 0)
  %2498 = load double, ptr %2497, align 8, !tbaa !34
  %2499 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2500 = load ptr, ptr %2499, align 8, !tbaa !56
  %2501 = load i64, ptr %71, align 8, !tbaa !11
  %2502 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2500, i64 %2501
  %2503 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2502, i32 0, i32 4
  %2504 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2503, i32 noundef 0)
  %2505 = load double, ptr %2504, align 8, !tbaa !34
  %2506 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2507 = load ptr, ptr %2506, align 8, !tbaa !56
  %2508 = load i64, ptr %71, align 8, !tbaa !11
  %2509 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2507, i64 %2508
  %2510 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2509, i32 0, i32 4
  %2511 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2510, i32 noundef 1)
  %2512 = load double, ptr %2511, align 8, !tbaa !34
  %2513 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2514 = load ptr, ptr %2513, align 8, !tbaa !56
  %2515 = load i64, ptr %71, align 8, !tbaa !11
  %2516 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2514, i64 %2515
  %2517 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2516, i32 0, i32 4
  %2518 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2517, i32 noundef 1)
  %2519 = load double, ptr %2518, align 8, !tbaa !34
  %2520 = fmul double %2512, %2519
  %2521 = call double @llvm.fmuladd.f64(double %2498, double %2505, double %2520)
  %2522 = call double @sqrt(double noundef %2521) #12
  %2523 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2524 = load ptr, ptr %2523, align 8, !tbaa !56
  %2525 = load i64, ptr %71, align 8, !tbaa !11
  %2526 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2524, i64 %2525
  %2527 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2526, i32 0, i32 5
  store double %2522, ptr %2527, align 8, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 40, ptr %74) #12
  %2528 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2529 = load ptr, ptr %2528, align 8, !tbaa !56
  %2530 = load i64, ptr %71, align 8, !tbaa !11
  %2531 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2529, i64 %2530
  %2532 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2531, i32 0, i32 4
  %2533 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2534 = load ptr, ptr %2533, align 8, !tbaa !56
  %2535 = load i64, ptr %71, align 8, !tbaa !11
  %2536 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2534, i64 %2535
  %2537 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2536, i32 0, i32 5
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %74, ptr noundef nonnull align 8 dereferenceable(40) %2532, ptr noundef nonnull align 8 dereferenceable(8) %2537)
  %2538 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2539 = load ptr, ptr %2538, align 8, !tbaa !56
  %2540 = load i64, ptr %71, align 8, !tbaa !11
  %2541 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2539, i64 %2540
  %2542 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2541, i32 0, i32 4
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %73, ptr noundef nonnull align 8 dereferenceable(40) %2542, ptr noundef nonnull align 8 dereferenceable(40) %74)
          to label %2543 unwind label %2641

2543:                                             ; preds = %2491
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %73) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %74) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %74) #12
  %2544 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2545 = load ptr, ptr %2544, align 8, !tbaa !18
  %2546 = load i32, ptr %40, align 4, !tbaa !9
  %2547 = sext i32 %2546 to i64
  %2548 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2545, i64 %2547
  %2549 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2548, i32 0, i32 0
  %2550 = load double, ptr %2549, align 8, !tbaa !33
  %2551 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2552 = load ptr, ptr %2551, align 8, !tbaa !18
  %2553 = load i32, ptr %39, align 4, !tbaa !9
  %2554 = sext i32 %2553 to i64
  %2555 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2552, i64 %2554
  %2556 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2555, i32 0, i32 0
  %2557 = load double, ptr %2556, align 8, !tbaa !33
  %2558 = fsub double %2550, %2557
  %2559 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2560 = load ptr, ptr %2559, align 8, !tbaa !56
  %2561 = load i64, ptr %71, align 8, !tbaa !11
  %2562 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2560, i64 %2561
  %2563 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2562, i32 0, i32 6
  %2564 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2563, i32 noundef 0)
  store double %2558, ptr %2564, align 8, !tbaa !34
  %2565 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2566 = load ptr, ptr %2565, align 8, !tbaa !18
  %2567 = load i32, ptr %40, align 4, !tbaa !9
  %2568 = sext i32 %2567 to i64
  %2569 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2566, i64 %2568
  %2570 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2569, i32 0, i32 1
  %2571 = load double, ptr %2570, align 8, !tbaa !35
  %2572 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2573 = load ptr, ptr %2572, align 8, !tbaa !18
  %2574 = load i32, ptr %39, align 4, !tbaa !9
  %2575 = sext i32 %2574 to i64
  %2576 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2573, i64 %2575
  %2577 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2576, i32 0, i32 1
  %2578 = load double, ptr %2577, align 8, !tbaa !35
  %2579 = fsub double %2571, %2578
  %2580 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2581 = load ptr, ptr %2580, align 8, !tbaa !56
  %2582 = load i64, ptr %71, align 8, !tbaa !11
  %2583 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2581, i64 %2582
  %2584 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2583, i32 0, i32 6
  %2585 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2584, i32 noundef 1)
  store double %2579, ptr %2585, align 8, !tbaa !34
  %2586 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2587 = load ptr, ptr %2586, align 8, !tbaa !56
  %2588 = load i64, ptr %71, align 8, !tbaa !11
  %2589 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2587, i64 %2588
  %2590 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2589, i32 0, i32 6
  %2591 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2590, i32 noundef 0)
  %2592 = load double, ptr %2591, align 8, !tbaa !34
  %2593 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2594 = load ptr, ptr %2593, align 8, !tbaa !56
  %2595 = load i64, ptr %71, align 8, !tbaa !11
  %2596 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2594, i64 %2595
  %2597 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2596, i32 0, i32 6
  %2598 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2597, i32 noundef 0)
  %2599 = load double, ptr %2598, align 8, !tbaa !34
  %2600 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2601 = load ptr, ptr %2600, align 8, !tbaa !56
  %2602 = load i64, ptr %71, align 8, !tbaa !11
  %2603 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2601, i64 %2602
  %2604 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2603, i32 0, i32 6
  %2605 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2604, i32 noundef 1)
  %2606 = load double, ptr %2605, align 8, !tbaa !34
  %2607 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2608 = load ptr, ptr %2607, align 8, !tbaa !56
  %2609 = load i64, ptr %71, align 8, !tbaa !11
  %2610 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2608, i64 %2609
  %2611 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2610, i32 0, i32 6
  %2612 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2611, i32 noundef 1)
  %2613 = load double, ptr %2612, align 8, !tbaa !34
  %2614 = fmul double %2606, %2613
  %2615 = call double @llvm.fmuladd.f64(double %2592, double %2599, double %2614)
  %2616 = call double @sqrt(double noundef %2615) #12
  %2617 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2618 = load ptr, ptr %2617, align 8, !tbaa !56
  %2619 = load i64, ptr %71, align 8, !tbaa !11
  %2620 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2618, i64 %2619
  %2621 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2620, i32 0, i32 7
  store double %2616, ptr %2621, align 8, !tbaa !66
  call void @llvm.lifetime.start.p0(i64 40, ptr %76) #12
  %2622 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2623 = load ptr, ptr %2622, align 8, !tbaa !56
  %2624 = load i64, ptr %71, align 8, !tbaa !11
  %2625 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2623, i64 %2624
  %2626 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2625, i32 0, i32 6
  %2627 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2628 = load ptr, ptr %2627, align 8, !tbaa !56
  %2629 = load i64, ptr %71, align 8, !tbaa !11
  %2630 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2628, i64 %2629
  %2631 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2630, i32 0, i32 7
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %76, ptr noundef nonnull align 8 dereferenceable(40) %2626, ptr noundef nonnull align 8 dereferenceable(8) %2631)
  %2632 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2633 = load ptr, ptr %2632, align 8, !tbaa !56
  %2634 = load i64, ptr %71, align 8, !tbaa !11
  %2635 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2633, i64 %2634
  %2636 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2635, i32 0, i32 6
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %75, ptr noundef nonnull align 8 dereferenceable(40) %2636, ptr noundef nonnull align 8 dereferenceable(40) %76)
          to label %2637 unwind label %2645

2637:                                             ; preds = %2543
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %75) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %76) #12
  br label %2638

2638:                                             ; preds = %2637
  %2639 = load i64, ptr %71, align 8, !tbaa !11
  %2640 = add i64 %2639, 1
  store i64 %2640, ptr %71, align 8, !tbaa !11
  br label %2310, !llvm.loop !67

2641:                                             ; preds = %2491
  %2642 = landingpad { ptr, i32 }
          cleanup
  %2643 = extractvalue { ptr, i32 } %2642, 0
  store ptr %2643, ptr %58, align 8
  %2644 = extractvalue { ptr, i32 } %2642, 1
  store i32 %2644, ptr %59, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %74) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %74) #12
  br label %2649

2645:                                             ; preds = %2543
  %2646 = landingpad { ptr, i32 }
          cleanup
  %2647 = extractvalue { ptr, i32 } %2646, 0
  store ptr %2647, ptr %58, align 8
  %2648 = extractvalue { ptr, i32 } %2646, 1
  store i32 %2648, ptr %59, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %76) #12
  br label %2649

2649:                                             ; preds = %2645, %2641
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #12
  br label %5789

2650:                                             ; preds = %2315
  %2651 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.47)
  %2652 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2651, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #12
  store i64 0, ptr %77, align 8, !tbaa !11
  br label %2653

2653:                                             ; preds = %2665, %2650
  %2654 = load i64, ptr %77, align 8, !tbaa !11
  %2655 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %2656 = load i64, ptr %2655, align 8, !tbaa !13
  %2657 = icmp ult i64 %2654, %2656
  br i1 %2657, label %2659, label %2658

2658:                                             ; preds = %2653
  store i32 42, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #12
  br label %2668

2659:                                             ; preds = %2653
  %2660 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2661 = load ptr, ptr %2660, align 8, !tbaa !18
  %2662 = load i64, ptr %77, align 8, !tbaa !11
  %2663 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2661, i64 %2662
  %2664 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2663, i32 0, i32 2
  store i32 0, ptr %2664, align 8, !tbaa !68
  br label %2665

2665:                                             ; preds = %2659
  %2666 = load i64, ptr %77, align 8, !tbaa !11
  %2667 = add i64 %2666, 1
  store i64 %2667, ptr %77, align 8, !tbaa !11
  br label %2653, !llvm.loop !69

2668:                                             ; preds = %2658
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #12
  store i64 0, ptr %78, align 8, !tbaa !11
  br label %2669

2669:                                             ; preds = %2688, %2668
  %2670 = load i64, ptr %78, align 8, !tbaa !11
  %2671 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2672 = load i64, ptr %2671, align 8, !tbaa !28
  %2673 = icmp ult i64 %2670, %2672
  br i1 %2673, label %2675, label %2674

2674:                                             ; preds = %2669
  store i32 45, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #12
  br label %2691

2675:                                             ; preds = %2669
  %2676 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2677 = load ptr, ptr %2676, align 8, !tbaa !56
  %2678 = load i64, ptr %78, align 8, !tbaa !11
  %2679 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2677, i64 %2678
  %2680 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2679, i32 0, i32 0
  %2681 = load i32, ptr %2680, align 8, !tbaa !62
  store i32 %2681, ptr %39, align 4, !tbaa !9
  %2682 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2683 = load ptr, ptr %2682, align 8, !tbaa !56
  %2684 = load i64, ptr %78, align 8, !tbaa !11
  %2685 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2683, i64 %2684
  %2686 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2685, i32 0, i32 1
  %2687 = load i32, ptr %2686, align 4, !tbaa !63
  store i32 %2687, ptr %40, align 4, !tbaa !9
  br label %2688

2688:                                             ; preds = %2675
  %2689 = load i64, ptr %78, align 8, !tbaa !11
  %2690 = add i64 %2689, 1
  store i64 %2690, ptr %78, align 8, !tbaa !11
  br label %2669, !llvm.loop !70

2691:                                             ; preds = %2674
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #12
  store i64 0, ptr %79, align 8, !tbaa !11
  br label %2692

2692:                                             ; preds = %2939, %2691
  %2693 = load i64, ptr %79, align 8, !tbaa !11
  %2694 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %2695 = load i64, ptr %2694, align 8, !tbaa !28
  %2696 = icmp ult i64 %2693, %2695
  br i1 %2696, label %2698, label %2697

2697:                                             ; preds = %2692
  store i32 48, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  br label %2943

2698:                                             ; preds = %2692
  %2699 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2700 = load ptr, ptr %2699, align 8, !tbaa !56
  %2701 = load i64, ptr %79, align 8, !tbaa !11
  %2702 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2700, i64 %2701
  %2703 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2702, i32 0, i32 0
  %2704 = load i32, ptr %2703, align 8, !tbaa !62
  store i32 %2704, ptr %39, align 4, !tbaa !9
  %2705 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %2706 = load ptr, ptr %2705, align 8, !tbaa !56
  %2707 = load i64, ptr %79, align 8, !tbaa !11
  %2708 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2706, i64 %2707
  %2709 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2708, i32 0, i32 1
  %2710 = load i32, ptr %2709, align 4, !tbaa !63
  store i32 %2710, ptr %40, align 4, !tbaa !9
  %2711 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2712 = load ptr, ptr %2711, align 8, !tbaa !18
  %2713 = load i32, ptr %39, align 4, !tbaa !9
  %2714 = sext i32 %2713 to i64
  %2715 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2712, i64 %2714
  %2716 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2715, i32 0, i32 2
  %2717 = load i32, ptr %2716, align 8, !tbaa !68
  %2718 = add nsw i32 %2717, 1
  %2719 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2720 = load ptr, ptr %2719, align 8, !tbaa !18
  %2721 = load i32, ptr %39, align 4, !tbaa !9
  %2722 = sext i32 %2721 to i64
  %2723 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2720, i64 %2722
  %2724 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2723, i32 0, i32 2
  store i32 %2718, ptr %2724, align 8, !tbaa !68
  %2725 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2726 = load ptr, ptr %2725, align 8, !tbaa !18
  %2727 = load i32, ptr %39, align 4, !tbaa !9
  %2728 = sext i32 %2727 to i64
  %2729 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2726, i64 %2728
  %2730 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2729, i32 0, i32 2
  %2731 = load i32, ptr %2730, align 8, !tbaa !68
  %2732 = icmp eq i32 %2731, 1
  br i1 %2732, label %2733, label %2746

2733:                                             ; preds = %2698
  %2734 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2734, i32 noundef 1, i32 noundef 1)
          to label %2735 unwind label %2742

2735:                                             ; preds = %2733
  %2736 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2737 = load ptr, ptr %2736, align 8, !tbaa !18
  %2738 = load i32, ptr %39, align 4, !tbaa !9
  %2739 = sext i32 %2738 to i64
  %2740 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2737, i64 %2739
  %2741 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2740, i32 0, i32 3
  store ptr %2734, ptr %2741, align 8, !tbaa !71
  br label %2807

2742:                                             ; preds = %2733
  %2743 = landingpad { ptr, i32 }
          cleanup
  %2744 = extractvalue { ptr, i32 } %2743, 0
  store ptr %2744, ptr %58, align 8
  %2745 = extractvalue { ptr, i32 } %2743, 1
  store i32 %2745, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2734, i64 noundef 40) #15
  br label %2942

2746:                                             ; preds = %2698
  call void @llvm.lifetime.start.p0(i64 40, ptr %80) #12
  %2747 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2748 = load ptr, ptr %2747, align 8, !tbaa !18
  %2749 = load i32, ptr %39, align 4, !tbaa !9
  %2750 = sext i32 %2749 to i64
  %2751 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2748, i64 %2750
  %2752 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2751, i32 0, i32 3
  %2753 = load ptr, ptr %2752, align 8, !tbaa !71
  call void @_ZN7Array2DIiEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %80, ptr noundef nonnull align 8 dereferenceable(40) %2753)
  %2754 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
          to label %2755 unwind label %2777

2755:                                             ; preds = %2746
  %2756 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2757 = load ptr, ptr %2756, align 8, !tbaa !18
  %2758 = load i32, ptr %39, align 4, !tbaa !9
  %2759 = sext i32 %2758 to i64
  %2760 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2757, i64 %2759
  %2761 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2760, i32 0, i32 2
  %2762 = load i32, ptr %2761, align 8, !tbaa !68
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2754, i32 noundef %2762, i32 noundef 1)
          to label %2763 unwind label %2781

2763:                                             ; preds = %2755
  %2764 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2765 = load ptr, ptr %2764, align 8, !tbaa !18
  %2766 = load i32, ptr %39, align 4, !tbaa !9
  %2767 = sext i32 %2766 to i64
  %2768 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2765, i64 %2767
  %2769 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2768, i32 0, i32 3
  store ptr %2754, ptr %2769, align 8, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #12
  store i64 0, ptr %81, align 8, !tbaa !11
  br label %2770

2770:                                             ; preds = %2802, %2763
  %2771 = load i64, ptr %81, align 8, !tbaa !11
  %2772 = getelementptr inbounds %class.Array2D, ptr %80, i32 0, i32 3
  %2773 = load i32, ptr %2772, align 4, !tbaa !72
  %2774 = sext i32 %2773 to i64
  %2775 = icmp ult i64 %2771, %2774
  br i1 %2775, label %2785, label %2776

2776:                                             ; preds = %2770
  store i32 51, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #12
  br label %2805

2777:                                             ; preds = %2746
  %2778 = landingpad { ptr, i32 }
          cleanup
  %2779 = extractvalue { ptr, i32 } %2778, 0
  store ptr %2779, ptr %58, align 8
  %2780 = extractvalue { ptr, i32 } %2778, 1
  store i32 %2780, ptr %59, align 4
  br label %2806

2781:                                             ; preds = %2755
  %2782 = landingpad { ptr, i32 }
          cleanup
  %2783 = extractvalue { ptr, i32 } %2782, 0
  store ptr %2783, ptr %58, align 8
  %2784 = extractvalue { ptr, i32 } %2782, 1
  store i32 %2784, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2754, i64 noundef 40) #15
  br label %2806

2785:                                             ; preds = %2770
  %2786 = getelementptr inbounds %class.Array2D, ptr %80, i32 0, i32 8
  %2787 = load ptr, ptr %2786, align 8, !tbaa !74
  %2788 = load i64, ptr %81, align 8, !tbaa !11
  %2789 = getelementptr inbounds i32, ptr %2787, i64 %2788
  %2790 = load i32, ptr %2789, align 4, !tbaa !9
  %2791 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2792 = load ptr, ptr %2791, align 8, !tbaa !18
  %2793 = load i32, ptr %39, align 4, !tbaa !9
  %2794 = sext i32 %2793 to i64
  %2795 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2792, i64 %2794
  %2796 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2795, i32 0, i32 3
  %2797 = load ptr, ptr %2796, align 8, !tbaa !71
  %2798 = getelementptr inbounds %class.Array2D, ptr %2797, i32 0, i32 8
  %2799 = load ptr, ptr %2798, align 8, !tbaa !74
  %2800 = load i64, ptr %81, align 8, !tbaa !11
  %2801 = getelementptr inbounds i32, ptr %2799, i64 %2800
  store i32 %2790, ptr %2801, align 4, !tbaa !9
  br label %2802

2802:                                             ; preds = %2785
  %2803 = load i64, ptr %81, align 8, !tbaa !11
  %2804 = add i64 %2803, 1
  store i64 %2804, ptr %81, align 8, !tbaa !11
  br label %2770, !llvm.loop !75

2805:                                             ; preds = %2776
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %80) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %80) #12
  br label %2807

2806:                                             ; preds = %2781, %2777
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %80) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %80) #12
  br label %2942

2807:                                             ; preds = %2805, %2735
  %2808 = load i32, ptr %40, align 4, !tbaa !9
  %2809 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2810 = load ptr, ptr %2809, align 8, !tbaa !18
  %2811 = load i32, ptr %39, align 4, !tbaa !9
  %2812 = sext i32 %2811 to i64
  %2813 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2810, i64 %2812
  %2814 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2813, i32 0, i32 3
  %2815 = load ptr, ptr %2814, align 8, !tbaa !71
  %2816 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2817 = load ptr, ptr %2816, align 8, !tbaa !18
  %2818 = load i32, ptr %39, align 4, !tbaa !9
  %2819 = sext i32 %2818 to i64
  %2820 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2817, i64 %2819
  %2821 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2820, i32 0, i32 2
  %2822 = load i32, ptr %2821, align 8, !tbaa !68
  %2823 = sub nsw i32 %2822, 1
  %2824 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2815, i32 noundef %2823)
  store i32 %2808, ptr %2824, align 4, !tbaa !9
  %2825 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2826 = load ptr, ptr %2825, align 8, !tbaa !18
  %2827 = load i32, ptr %40, align 4, !tbaa !9
  %2828 = sext i32 %2827 to i64
  %2829 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2826, i64 %2828
  %2830 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2829, i32 0, i32 2
  %2831 = load i32, ptr %2830, align 8, !tbaa !68
  %2832 = add nsw i32 %2831, 1
  %2833 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2834 = load ptr, ptr %2833, align 8, !tbaa !18
  %2835 = load i32, ptr %40, align 4, !tbaa !9
  %2836 = sext i32 %2835 to i64
  %2837 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2834, i64 %2836
  %2838 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2837, i32 0, i32 2
  store i32 %2832, ptr %2838, align 8, !tbaa !68
  %2839 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2840 = load ptr, ptr %2839, align 8, !tbaa !18
  %2841 = load i32, ptr %40, align 4, !tbaa !9
  %2842 = sext i32 %2841 to i64
  %2843 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2840, i64 %2842
  %2844 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2843, i32 0, i32 2
  %2845 = load i32, ptr %2844, align 8, !tbaa !68
  %2846 = icmp eq i32 %2845, 1
  br i1 %2846, label %2847, label %2860

2847:                                             ; preds = %2807
  %2848 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2848, i32 noundef 1, i32 noundef 1)
          to label %2849 unwind label %2856

2849:                                             ; preds = %2847
  %2850 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2851 = load ptr, ptr %2850, align 8, !tbaa !18
  %2852 = load i32, ptr %40, align 4, !tbaa !9
  %2853 = sext i32 %2852 to i64
  %2854 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2851, i64 %2853
  %2855 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2854, i32 0, i32 3
  store ptr %2848, ptr %2855, align 8, !tbaa !71
  br label %2921

2856:                                             ; preds = %2847
  %2857 = landingpad { ptr, i32 }
          cleanup
  %2858 = extractvalue { ptr, i32 } %2857, 0
  store ptr %2858, ptr %58, align 8
  %2859 = extractvalue { ptr, i32 } %2857, 1
  store i32 %2859, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2848, i64 noundef 40) #15
  br label %2942

2860:                                             ; preds = %2807
  call void @llvm.lifetime.start.p0(i64 40, ptr %82) #12
  %2861 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2862 = load ptr, ptr %2861, align 8, !tbaa !18
  %2863 = load i32, ptr %40, align 4, !tbaa !9
  %2864 = sext i32 %2863 to i64
  %2865 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2862, i64 %2864
  %2866 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2865, i32 0, i32 3
  %2867 = load ptr, ptr %2866, align 8, !tbaa !71
  call void @_ZN7Array2DIiEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %2867)
  %2868 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
          to label %2869 unwind label %2891

2869:                                             ; preds = %2860
  %2870 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2871 = load ptr, ptr %2870, align 8, !tbaa !18
  %2872 = load i32, ptr %40, align 4, !tbaa !9
  %2873 = sext i32 %2872 to i64
  %2874 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2871, i64 %2873
  %2875 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2874, i32 0, i32 2
  %2876 = load i32, ptr %2875, align 8, !tbaa !68
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2868, i32 noundef %2876, i32 noundef 1)
          to label %2877 unwind label %2895

2877:                                             ; preds = %2869
  %2878 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2879 = load ptr, ptr %2878, align 8, !tbaa !18
  %2880 = load i32, ptr %40, align 4, !tbaa !9
  %2881 = sext i32 %2880 to i64
  %2882 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2879, i64 %2881
  %2883 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2882, i32 0, i32 3
  store ptr %2868, ptr %2883, align 8, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #12
  store i64 0, ptr %83, align 8, !tbaa !11
  br label %2884

2884:                                             ; preds = %2916, %2877
  %2885 = load i64, ptr %83, align 8, !tbaa !11
  %2886 = getelementptr inbounds %class.Array2D, ptr %82, i32 0, i32 3
  %2887 = load i32, ptr %2886, align 4, !tbaa !72
  %2888 = sext i32 %2887 to i64
  %2889 = icmp ult i64 %2885, %2888
  br i1 %2889, label %2899, label %2890

2890:                                             ; preds = %2884
  store i32 54, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #12
  br label %2919

2891:                                             ; preds = %2860
  %2892 = landingpad { ptr, i32 }
          cleanup
  %2893 = extractvalue { ptr, i32 } %2892, 0
  store ptr %2893, ptr %58, align 8
  %2894 = extractvalue { ptr, i32 } %2892, 1
  store i32 %2894, ptr %59, align 4
  br label %2920

2895:                                             ; preds = %2869
  %2896 = landingpad { ptr, i32 }
          cleanup
  %2897 = extractvalue { ptr, i32 } %2896, 0
  store ptr %2897, ptr %58, align 8
  %2898 = extractvalue { ptr, i32 } %2896, 1
  store i32 %2898, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2868, i64 noundef 40) #15
  br label %2920

2899:                                             ; preds = %2884
  %2900 = getelementptr inbounds %class.Array2D, ptr %82, i32 0, i32 8
  %2901 = load ptr, ptr %2900, align 8, !tbaa !74
  %2902 = load i64, ptr %83, align 8, !tbaa !11
  %2903 = getelementptr inbounds i32, ptr %2901, i64 %2902
  %2904 = load i32, ptr %2903, align 4, !tbaa !9
  %2905 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2906 = load ptr, ptr %2905, align 8, !tbaa !18
  %2907 = load i32, ptr %40, align 4, !tbaa !9
  %2908 = sext i32 %2907 to i64
  %2909 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2906, i64 %2908
  %2910 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2909, i32 0, i32 3
  %2911 = load ptr, ptr %2910, align 8, !tbaa !71
  %2912 = getelementptr inbounds %class.Array2D, ptr %2911, i32 0, i32 8
  %2913 = load ptr, ptr %2912, align 8, !tbaa !74
  %2914 = load i64, ptr %83, align 8, !tbaa !11
  %2915 = getelementptr inbounds i32, ptr %2913, i64 %2914
  store i32 %2904, ptr %2915, align 4, !tbaa !9
  br label %2916

2916:                                             ; preds = %2899
  %2917 = load i64, ptr %83, align 8, !tbaa !11
  %2918 = add i64 %2917, 1
  store i64 %2918, ptr %83, align 8, !tbaa !11
  br label %2884, !llvm.loop !76

2919:                                             ; preds = %2890
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %82) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %82) #12
  br label %2921

2920:                                             ; preds = %2895, %2891
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %82) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %82) #12
  br label %2942

2921:                                             ; preds = %2919, %2849
  %2922 = load i32, ptr %39, align 4, !tbaa !9
  %2923 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2924 = load ptr, ptr %2923, align 8, !tbaa !18
  %2925 = load i32, ptr %40, align 4, !tbaa !9
  %2926 = sext i32 %2925 to i64
  %2927 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2924, i64 %2926
  %2928 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2927, i32 0, i32 3
  %2929 = load ptr, ptr %2928, align 8, !tbaa !71
  %2930 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %2931 = load ptr, ptr %2930, align 8, !tbaa !18
  %2932 = load i32, ptr %40, align 4, !tbaa !9
  %2933 = sext i32 %2932 to i64
  %2934 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2931, i64 %2933
  %2935 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2934, i32 0, i32 2
  %2936 = load i32, ptr %2935, align 8, !tbaa !68
  %2937 = sub nsw i32 %2936, 1
  %2938 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2929, i32 noundef %2937)
  store i32 %2922, ptr %2938, align 4, !tbaa !9
  br label %2939

2939:                                             ; preds = %2921
  %2940 = load i64, ptr %79, align 8, !tbaa !11
  %2941 = add i64 %2940, 1
  store i64 %2941, ptr %79, align 8, !tbaa !11
  br label %2692, !llvm.loop !77

2942:                                             ; preds = %2920, %2856, %2806, %2742
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #12
  br label %5789

2943:                                             ; preds = %2697
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #12
  store i64 0, ptr %84, align 8, !tbaa !11
  br label %2944

2944:                                             ; preds = %3047, %2943
  %2945 = load i64, ptr %84, align 8, !tbaa !11
  %2946 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %2947 = load i64, ptr %2946, align 8, !tbaa !78
  %2948 = icmp ult i64 %2945, %2947
  br i1 %2948, label %2950, label %2949

2949:                                             ; preds = %2944
  store i32 57, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #12
  br label %3051

2950:                                             ; preds = %2944
  %2951 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %2952 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2953 = load ptr, ptr %2952, align 8, !tbaa !79
  %2954 = load i64, ptr %84, align 8, !tbaa !11
  %2955 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2953, i64 %2954
  %2956 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2955, i32 0, i32 1
  %2957 = load i64, ptr %2956, align 8, !tbaa !80
  %2958 = trunc i64 %2957 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2951, i32 noundef %2958, i32 noundef 1)
          to label %2959 unwind label %3003

2959:                                             ; preds = %2950
  %2960 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2961 = load ptr, ptr %2960, align 8, !tbaa !79
  %2962 = load i64, ptr %84, align 8, !tbaa !11
  %2963 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2961, i64 %2962
  %2964 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2963, i32 0, i32 7
  store ptr %2951, ptr %2964, align 8, !tbaa !82
  %2965 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %2966 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2967 = load ptr, ptr %2966, align 8, !tbaa !79
  %2968 = load i64, ptr %84, align 8, !tbaa !11
  %2969 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2967, i64 %2968
  %2970 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2969, i32 0, i32 1
  %2971 = load i64, ptr %2970, align 8, !tbaa !80
  %2972 = trunc i64 %2971 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2965, i32 noundef %2972, i32 noundef 1)
          to label %2973 unwind label %3007

2973:                                             ; preds = %2959
  %2974 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2975 = load ptr, ptr %2974, align 8, !tbaa !79
  %2976 = load i64, ptr %84, align 8, !tbaa !11
  %2977 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2975, i64 %2976
  %2978 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2977, i32 0, i32 8
  store ptr %2965, ptr %2978, align 8, !tbaa !83
  %2979 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %2980 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2981 = load ptr, ptr %2980, align 8, !tbaa !79
  %2982 = load i64, ptr %84, align 8, !tbaa !11
  %2983 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2981, i64 %2982
  %2984 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2983, i32 0, i32 1
  %2985 = load i64, ptr %2984, align 8, !tbaa !80
  %2986 = trunc i64 %2985 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2979, i32 noundef %2986, i32 noundef 1)
          to label %2987 unwind label %3011

2987:                                             ; preds = %2973
  %2988 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2989 = load ptr, ptr %2988, align 8, !tbaa !79
  %2990 = load i64, ptr %84, align 8, !tbaa !11
  %2991 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2989, i64 %2990
  %2992 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2991, i32 0, i32 9
  store ptr %2979, ptr %2992, align 8, !tbaa !84
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #12
  store i64 0, ptr %85, align 8, !tbaa !11
  br label %2993

2993:                                             ; preds = %3043, %2987
  %2994 = load i64, ptr %85, align 8, !tbaa !11
  %2995 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %2996 = load ptr, ptr %2995, align 8, !tbaa !79
  %2997 = load i64, ptr %84, align 8, !tbaa !11
  %2998 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2996, i64 %2997
  %2999 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2998, i32 0, i32 1
  %3000 = load i64, ptr %2999, align 8, !tbaa !80
  %3001 = icmp ult i64 %2994, %3000
  br i1 %3001, label %3015, label %3002

3002:                                             ; preds = %2993
  store i32 60, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #12
  br label %3046

3003:                                             ; preds = %2950
  %3004 = landingpad { ptr, i32 }
          cleanup
  %3005 = extractvalue { ptr, i32 } %3004, 0
  store ptr %3005, ptr %58, align 8
  %3006 = extractvalue { ptr, i32 } %3004, 1
  store i32 %3006, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2951, i64 noundef 40) #15
  br label %3050

3007:                                             ; preds = %2959
  %3008 = landingpad { ptr, i32 }
          cleanup
  %3009 = extractvalue { ptr, i32 } %3008, 0
  store ptr %3009, ptr %58, align 8
  %3010 = extractvalue { ptr, i32 } %3008, 1
  store i32 %3010, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2965, i64 noundef 40) #15
  br label %3050

3011:                                             ; preds = %2973
  %3012 = landingpad { ptr, i32 }
          cleanup
  %3013 = extractvalue { ptr, i32 } %3012, 0
  store ptr %3013, ptr %58, align 8
  %3014 = extractvalue { ptr, i32 } %3012, 1
  store i32 %3014, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %2979, i64 noundef 40) #15
  br label %3050

3015:                                             ; preds = %2993
  %3016 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3017 = load ptr, ptr %3016, align 8, !tbaa !79
  %3018 = load i64, ptr %84, align 8, !tbaa !11
  %3019 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3017, i64 %3018
  %3020 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3019, i32 0, i32 7
  %3021 = load ptr, ptr %3020, align 8, !tbaa !82
  %3022 = load i64, ptr %85, align 8, !tbaa !11
  %3023 = trunc i64 %3022 to i32
  %3024 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3021, i32 noundef %3023)
  store double 0.000000e+00, ptr %3024, align 8, !tbaa !34
  %3025 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3026 = load ptr, ptr %3025, align 8, !tbaa !79
  %3027 = load i64, ptr %84, align 8, !tbaa !11
  %3028 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3026, i64 %3027
  %3029 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3028, i32 0, i32 8
  %3030 = load ptr, ptr %3029, align 8, !tbaa !83
  %3031 = load i64, ptr %85, align 8, !tbaa !11
  %3032 = trunc i64 %3031 to i32
  %3033 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3030, i32 noundef %3032)
  store double 0.000000e+00, ptr %3033, align 8, !tbaa !34
  %3034 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3035 = load ptr, ptr %3034, align 8, !tbaa !79
  %3036 = load i64, ptr %84, align 8, !tbaa !11
  %3037 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3035, i64 %3036
  %3038 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3037, i32 0, i32 9
  %3039 = load ptr, ptr %3038, align 8, !tbaa !84
  %3040 = load i64, ptr %85, align 8, !tbaa !11
  %3041 = trunc i64 %3040 to i32
  %3042 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3039, i32 noundef %3041)
  store double 0.000000e+00, ptr %3042, align 8, !tbaa !34
  br label %3043

3043:                                             ; preds = %3015
  %3044 = load i64, ptr %85, align 8, !tbaa !11
  %3045 = add i64 %3044, 1
  store i64 %3045, ptr %85, align 8, !tbaa !11
  br label %2993, !llvm.loop !85

3046:                                             ; preds = %3002
  br label %3047

3047:                                             ; preds = %3046
  %3048 = load i64, ptr %84, align 8, !tbaa !11
  %3049 = add i64 %3048, 1
  store i64 %3049, ptr %84, align 8, !tbaa !11
  br label %2944, !llvm.loop !86

3050:                                             ; preds = %3011, %3007, %3003
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #12
  br label %5789

3051:                                             ; preds = %2949
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #12
  store i64 0, ptr %86, align 8, !tbaa !11
  br label %3052

3052:                                             ; preds = %3239, %3051
  %3053 = load i64, ptr %86, align 8, !tbaa !11
  %3054 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %3055 = load i64, ptr %3054, align 8, !tbaa !78
  %3056 = icmp ult i64 %3053, %3055
  br i1 %3056, label %3058, label %3057

3057:                                             ; preds = %3052
  store i32 63, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #12
  br label %3242

3058:                                             ; preds = %3052
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #12
  store i64 0, ptr %87, align 8, !tbaa !11
  br label %3059

3059:                                             ; preds = %3235, %3058
  %3060 = load i64, ptr %87, align 8, !tbaa !11
  %3061 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3062 = load ptr, ptr %3061, align 8, !tbaa !79
  %3063 = load i64, ptr %86, align 8, !tbaa !11
  %3064 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3062, i64 %3063
  %3065 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3064, i32 0, i32 1
  %3066 = load i64, ptr %3065, align 8, !tbaa !80
  %3067 = sub i64 %3066, 1
  %3068 = icmp ult i64 %3060, %3067
  br i1 %3068, label %3070, label %3069

3069:                                             ; preds = %3059
  store i32 66, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #12
  br label %3238

3070:                                             ; preds = %3059
  %3071 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3072 = load ptr, ptr %3071, align 8, !tbaa !18
  %3073 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3074 = load ptr, ptr %3073, align 8, !tbaa !79
  %3075 = load i64, ptr %86, align 8, !tbaa !11
  %3076 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3074, i64 %3075
  %3077 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3076, i32 0, i32 2
  %3078 = load ptr, ptr %3077, align 8, !tbaa !87
  %3079 = load i64, ptr %87, align 8, !tbaa !11
  %3080 = trunc i64 %3079 to i32
  %3081 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3078, i32 noundef %3080)
  %3082 = load i32, ptr %3081, align 4, !tbaa !9
  %3083 = sext i32 %3082 to i64
  %3084 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3072, i64 %3083
  %3085 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3084, i32 0, i32 0
  %3086 = load double, ptr %3085, align 8, !tbaa !33
  store double %3086, ptr %14, align 8, !tbaa !34
  %3087 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3088 = load ptr, ptr %3087, align 8, !tbaa !18
  %3089 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3090 = load ptr, ptr %3089, align 8, !tbaa !79
  %3091 = load i64, ptr %86, align 8, !tbaa !11
  %3092 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3090, i64 %3091
  %3093 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3092, i32 0, i32 2
  %3094 = load ptr, ptr %3093, align 8, !tbaa !87
  %3095 = load i64, ptr %87, align 8, !tbaa !11
  %3096 = trunc i64 %3095 to i32
  %3097 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3094, i32 noundef %3096)
  %3098 = load i32, ptr %3097, align 4, !tbaa !9
  %3099 = sext i32 %3098 to i64
  %3100 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3088, i64 %3099
  %3101 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3100, i32 0, i32 1
  %3102 = load double, ptr %3101, align 8, !tbaa !35
  store double %3102, ptr %18, align 8, !tbaa !34
  %3103 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3104 = load ptr, ptr %3103, align 8, !tbaa !18
  %3105 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3106 = load ptr, ptr %3105, align 8, !tbaa !79
  %3107 = load i64, ptr %86, align 8, !tbaa !11
  %3108 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3106, i64 %3107
  %3109 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3108, i32 0, i32 2
  %3110 = load ptr, ptr %3109, align 8, !tbaa !87
  %3111 = load i64, ptr %87, align 8, !tbaa !11
  %3112 = add i64 %3111, 1
  %3113 = trunc i64 %3112 to i32
  %3114 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3110, i32 noundef %3113)
  %3115 = load i32, ptr %3114, align 4, !tbaa !9
  %3116 = sext i32 %3115 to i64
  %3117 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3104, i64 %3116
  %3118 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3117, i32 0, i32 0
  %3119 = load double, ptr %3118, align 8, !tbaa !33
  store double %3119, ptr %15, align 8, !tbaa !34
  %3120 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3121 = load ptr, ptr %3120, align 8, !tbaa !18
  %3122 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3123 = load ptr, ptr %3122, align 8, !tbaa !79
  %3124 = load i64, ptr %86, align 8, !tbaa !11
  %3125 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3123, i64 %3124
  %3126 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3125, i32 0, i32 2
  %3127 = load ptr, ptr %3126, align 8, !tbaa !87
  %3128 = load i64, ptr %87, align 8, !tbaa !11
  %3129 = add i64 %3128, 1
  %3130 = trunc i64 %3129 to i32
  %3131 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3127, i32 noundef %3130)
  %3132 = load i32, ptr %3131, align 4, !tbaa !9
  %3133 = sext i32 %3132 to i64
  %3134 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3121, i64 %3133
  %3135 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3134, i32 0, i32 1
  %3136 = load double, ptr %3135, align 8, !tbaa !35
  store double %3136, ptr %19, align 8, !tbaa !34
  %3137 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3138 = load ptr, ptr %3137, align 8, !tbaa !79
  %3139 = load i64, ptr %86, align 8, !tbaa !11
  %3140 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3138, i64 %3139
  %3141 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3140, i32 0, i32 7
  %3142 = load ptr, ptr %3141, align 8, !tbaa !82
  %3143 = load i64, ptr %87, align 8, !tbaa !11
  %3144 = trunc i64 %3143 to i32
  %3145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3142, i32 noundef %3144)
  %3146 = load double, ptr %3145, align 8, !tbaa !34
  %3147 = load double, ptr %19, align 8, !tbaa !34
  %3148 = load double, ptr %18, align 8, !tbaa !34
  %3149 = fsub double %3147, %3148
  %3150 = fneg double %3149
  %3151 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %3150, double %3146)
  %3152 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3153 = load ptr, ptr %3152, align 8, !tbaa !79
  %3154 = load i64, ptr %86, align 8, !tbaa !11
  %3155 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3153, i64 %3154
  %3156 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3155, i32 0, i32 7
  %3157 = load ptr, ptr %3156, align 8, !tbaa !82
  %3158 = load i64, ptr %87, align 8, !tbaa !11
  %3159 = trunc i64 %3158 to i32
  %3160 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3157, i32 noundef %3159)
  store double %3151, ptr %3160, align 8, !tbaa !34
  %3161 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3162 = load ptr, ptr %3161, align 8, !tbaa !79
  %3163 = load i64, ptr %86, align 8, !tbaa !11
  %3164 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3162, i64 %3163
  %3165 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3164, i32 0, i32 8
  %3166 = load ptr, ptr %3165, align 8, !tbaa !83
  %3167 = load i64, ptr %87, align 8, !tbaa !11
  %3168 = trunc i64 %3167 to i32
  %3169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3166, i32 noundef %3168)
  %3170 = load double, ptr %3169, align 8, !tbaa !34
  %3171 = load double, ptr %15, align 8, !tbaa !34
  %3172 = load double, ptr %14, align 8, !tbaa !34
  %3173 = fsub double %3171, %3172
  %3174 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %3173, double %3170)
  %3175 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3176 = load ptr, ptr %3175, align 8, !tbaa !79
  %3177 = load i64, ptr %86, align 8, !tbaa !11
  %3178 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3176, i64 %3177
  %3179 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3178, i32 0, i32 8
  %3180 = load ptr, ptr %3179, align 8, !tbaa !83
  %3181 = load i64, ptr %87, align 8, !tbaa !11
  %3182 = trunc i64 %3181 to i32
  %3183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3180, i32 noundef %3182)
  store double %3174, ptr %3183, align 8, !tbaa !34
  %3184 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3185 = load ptr, ptr %3184, align 8, !tbaa !79
  %3186 = load i64, ptr %86, align 8, !tbaa !11
  %3187 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3185, i64 %3186
  %3188 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3187, i32 0, i32 7
  %3189 = load ptr, ptr %3188, align 8, !tbaa !82
  %3190 = load i64, ptr %87, align 8, !tbaa !11
  %3191 = add i64 %3190, 1
  %3192 = trunc i64 %3191 to i32
  %3193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3189, i32 noundef %3192)
  %3194 = load double, ptr %3193, align 8, !tbaa !34
  %3195 = load double, ptr %19, align 8, !tbaa !34
  %3196 = load double, ptr %18, align 8, !tbaa !34
  %3197 = fsub double %3195, %3196
  %3198 = fneg double %3197
  %3199 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %3198, double %3194)
  %3200 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3201 = load ptr, ptr %3200, align 8, !tbaa !79
  %3202 = load i64, ptr %86, align 8, !tbaa !11
  %3203 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3201, i64 %3202
  %3204 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3203, i32 0, i32 7
  %3205 = load ptr, ptr %3204, align 8, !tbaa !82
  %3206 = load i64, ptr %87, align 8, !tbaa !11
  %3207 = add i64 %3206, 1
  %3208 = trunc i64 %3207 to i32
  %3209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3205, i32 noundef %3208)
  store double %3199, ptr %3209, align 8, !tbaa !34
  %3210 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3211 = load ptr, ptr %3210, align 8, !tbaa !79
  %3212 = load i64, ptr %86, align 8, !tbaa !11
  %3213 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3211, i64 %3212
  %3214 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3213, i32 0, i32 8
  %3215 = load ptr, ptr %3214, align 8, !tbaa !83
  %3216 = load i64, ptr %87, align 8, !tbaa !11
  %3217 = add i64 %3216, 1
  %3218 = trunc i64 %3217 to i32
  %3219 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3215, i32 noundef %3218)
  %3220 = load double, ptr %3219, align 8, !tbaa !34
  %3221 = load double, ptr %15, align 8, !tbaa !34
  %3222 = load double, ptr %14, align 8, !tbaa !34
  %3223 = fsub double %3221, %3222
  %3224 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %3223, double %3220)
  %3225 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3226 = load ptr, ptr %3225, align 8, !tbaa !79
  %3227 = load i64, ptr %86, align 8, !tbaa !11
  %3228 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3226, i64 %3227
  %3229 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3228, i32 0, i32 8
  %3230 = load ptr, ptr %3229, align 8, !tbaa !83
  %3231 = load i64, ptr %87, align 8, !tbaa !11
  %3232 = add i64 %3231, 1
  %3233 = trunc i64 %3232 to i32
  %3234 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3230, i32 noundef %3233)
  store double %3224, ptr %3234, align 8, !tbaa !34
  br label %3235

3235:                                             ; preds = %3070
  %3236 = load i64, ptr %87, align 8, !tbaa !11
  %3237 = add i64 %3236, 1
  store i64 %3237, ptr %87, align 8, !tbaa !11
  br label %3059, !llvm.loop !88

3238:                                             ; preds = %3069
  br label %3239

3239:                                             ; preds = %3238
  %3240 = load i64, ptr %86, align 8, !tbaa !11
  %3241 = add i64 %3240, 1
  store i64 %3241, ptr %86, align 8, !tbaa !11
  br label %3052, !llvm.loop !89

3242:                                             ; preds = %3057
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #12
  store i64 0, ptr %88, align 8, !tbaa !11
  br label %3243

3243:                                             ; preds = %3379, %3242
  %3244 = load i64, ptr %88, align 8, !tbaa !11
  %3245 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %3246 = load i64, ptr %3245, align 8, !tbaa !78
  %3247 = icmp ult i64 %3244, %3246
  br i1 %3247, label %3249, label %3248

3248:                                             ; preds = %3243
  store i32 69, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #12
  br label %3382

3249:                                             ; preds = %3243
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #12
  store i64 0, ptr %89, align 8, !tbaa !11
  br label %3250

3250:                                             ; preds = %3375, %3249
  %3251 = load i64, ptr %89, align 8, !tbaa !11
  %3252 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3253 = load ptr, ptr %3252, align 8, !tbaa !79
  %3254 = load i64, ptr %88, align 8, !tbaa !11
  %3255 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3253, i64 %3254
  %3256 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3255, i32 0, i32 1
  %3257 = load i64, ptr %3256, align 8, !tbaa !80
  %3258 = icmp ult i64 %3251, %3257
  br i1 %3258, label %3260, label %3259

3259:                                             ; preds = %3250
  store i32 72, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #12
  br label %3378

3260:                                             ; preds = %3250
  %3261 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3262 = load ptr, ptr %3261, align 8, !tbaa !79
  %3263 = load i64, ptr %88, align 8, !tbaa !11
  %3264 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3262, i64 %3263
  %3265 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3264, i32 0, i32 7
  %3266 = load ptr, ptr %3265, align 8, !tbaa !82
  %3267 = load i64, ptr %89, align 8, !tbaa !11
  %3268 = trunc i64 %3267 to i32
  %3269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3266, i32 noundef %3268)
  %3270 = load double, ptr %3269, align 8, !tbaa !34
  %3271 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3272 = load ptr, ptr %3271, align 8, !tbaa !79
  %3273 = load i64, ptr %88, align 8, !tbaa !11
  %3274 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3272, i64 %3273
  %3275 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3274, i32 0, i32 7
  %3276 = load ptr, ptr %3275, align 8, !tbaa !82
  %3277 = load i64, ptr %89, align 8, !tbaa !11
  %3278 = trunc i64 %3277 to i32
  %3279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3276, i32 noundef %3278)
  %3280 = load double, ptr %3279, align 8, !tbaa !34
  %3281 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3282 = load ptr, ptr %3281, align 8, !tbaa !79
  %3283 = load i64, ptr %88, align 8, !tbaa !11
  %3284 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3282, i64 %3283
  %3285 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3284, i32 0, i32 8
  %3286 = load ptr, ptr %3285, align 8, !tbaa !83
  %3287 = load i64, ptr %89, align 8, !tbaa !11
  %3288 = trunc i64 %3287 to i32
  %3289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3286, i32 noundef %3288)
  %3290 = load double, ptr %3289, align 8, !tbaa !34
  %3291 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3292 = load ptr, ptr %3291, align 8, !tbaa !79
  %3293 = load i64, ptr %88, align 8, !tbaa !11
  %3294 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3292, i64 %3293
  %3295 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3294, i32 0, i32 8
  %3296 = load ptr, ptr %3295, align 8, !tbaa !83
  %3297 = load i64, ptr %89, align 8, !tbaa !11
  %3298 = trunc i64 %3297 to i32
  %3299 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3296, i32 noundef %3298)
  %3300 = load double, ptr %3299, align 8, !tbaa !34
  %3301 = fmul double %3290, %3300
  %3302 = call double @llvm.fmuladd.f64(double %3270, double %3280, double %3301)
  %3303 = call double @sqrt(double noundef %3302) #12
  %3304 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3305 = load ptr, ptr %3304, align 8, !tbaa !79
  %3306 = load i64, ptr %88, align 8, !tbaa !11
  %3307 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3305, i64 %3306
  %3308 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3307, i32 0, i32 9
  %3309 = load ptr, ptr %3308, align 8, !tbaa !84
  %3310 = load i64, ptr %89, align 8, !tbaa !11
  %3311 = trunc i64 %3310 to i32
  %3312 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3309, i32 noundef %3311)
  store double %3303, ptr %3312, align 8, !tbaa !34
  %3313 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3314 = load ptr, ptr %3313, align 8, !tbaa !79
  %3315 = load i64, ptr %88, align 8, !tbaa !11
  %3316 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3314, i64 %3315
  %3317 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3316, i32 0, i32 7
  %3318 = load ptr, ptr %3317, align 8, !tbaa !82
  %3319 = load i64, ptr %89, align 8, !tbaa !11
  %3320 = trunc i64 %3319 to i32
  %3321 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3318, i32 noundef %3320)
  %3322 = load double, ptr %3321, align 8, !tbaa !34
  %3323 = fneg double %3322
  %3324 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3325 = load ptr, ptr %3324, align 8, !tbaa !79
  %3326 = load i64, ptr %88, align 8, !tbaa !11
  %3327 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3325, i64 %3326
  %3328 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3327, i32 0, i32 9
  %3329 = load ptr, ptr %3328, align 8, !tbaa !84
  %3330 = load i64, ptr %89, align 8, !tbaa !11
  %3331 = trunc i64 %3330 to i32
  %3332 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3329, i32 noundef %3331)
  %3333 = load double, ptr %3332, align 8, !tbaa !34
  %3334 = fdiv double %3323, %3333
  %3335 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3336 = load ptr, ptr %3335, align 8, !tbaa !79
  %3337 = load i64, ptr %88, align 8, !tbaa !11
  %3338 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3336, i64 %3337
  %3339 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3338, i32 0, i32 7
  %3340 = load ptr, ptr %3339, align 8, !tbaa !82
  %3341 = load i64, ptr %89, align 8, !tbaa !11
  %3342 = trunc i64 %3341 to i32
  %3343 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3340, i32 noundef %3342)
  store double %3334, ptr %3343, align 8, !tbaa !34
  %3344 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3345 = load ptr, ptr %3344, align 8, !tbaa !79
  %3346 = load i64, ptr %88, align 8, !tbaa !11
  %3347 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3345, i64 %3346
  %3348 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3347, i32 0, i32 8
  %3349 = load ptr, ptr %3348, align 8, !tbaa !83
  %3350 = load i64, ptr %89, align 8, !tbaa !11
  %3351 = trunc i64 %3350 to i32
  %3352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3349, i32 noundef %3351)
  %3353 = load double, ptr %3352, align 8, !tbaa !34
  %3354 = fneg double %3353
  %3355 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3356 = load ptr, ptr %3355, align 8, !tbaa !79
  %3357 = load i64, ptr %88, align 8, !tbaa !11
  %3358 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3356, i64 %3357
  %3359 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3358, i32 0, i32 9
  %3360 = load ptr, ptr %3359, align 8, !tbaa !84
  %3361 = load i64, ptr %89, align 8, !tbaa !11
  %3362 = trunc i64 %3361 to i32
  %3363 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3360, i32 noundef %3362)
  %3364 = load double, ptr %3363, align 8, !tbaa !34
  %3365 = fdiv double %3354, %3364
  %3366 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3367 = load ptr, ptr %3366, align 8, !tbaa !79
  %3368 = load i64, ptr %88, align 8, !tbaa !11
  %3369 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3367, i64 %3368
  %3370 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3369, i32 0, i32 8
  %3371 = load ptr, ptr %3370, align 8, !tbaa !83
  %3372 = load i64, ptr %89, align 8, !tbaa !11
  %3373 = trunc i64 %3372 to i32
  %3374 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3371, i32 noundef %3373)
  store double %3365, ptr %3374, align 8, !tbaa !34
  br label %3375

3375:                                             ; preds = %3260
  %3376 = load i64, ptr %89, align 8, !tbaa !11
  %3377 = add i64 %3376, 1
  store i64 %3377, ptr %89, align 8, !tbaa !11
  br label %3250, !llvm.loop !90

3378:                                             ; preds = %3259
  br label %3379

3379:                                             ; preds = %3378
  %3380 = load i64, ptr %88, align 8, !tbaa !11
  %3381 = add i64 %3380, 1
  store i64 %3381, ptr %88, align 8, !tbaa !11
  br label %3243, !llvm.loop !91

3382:                                             ; preds = %3248
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #12
  store i64 0, ptr %90, align 8, !tbaa !11
  br label %3383

3383:                                             ; preds = %3775, %3382
  %3384 = load i64, ptr %90, align 8, !tbaa !11
  %3385 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %3386 = load i64, ptr %3385, align 8, !tbaa !78
  %3387 = icmp ult i64 %3384, %3386
  br i1 %3387, label %3389, label %3388

3388:                                             ; preds = %3383
  store i32 75, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #12
  br label %3778

3389:                                             ; preds = %3383
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #12
  store i64 0, ptr %91, align 8, !tbaa !11
  br label %3390

3390:                                             ; preds = %3771, %3389
  %3391 = load i64, ptr %91, align 8, !tbaa !11
  %3392 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3393 = load ptr, ptr %3392, align 8, !tbaa !79
  %3394 = load i64, ptr %90, align 8, !tbaa !11
  %3395 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3393, i64 %3394
  %3396 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3395, i32 0, i32 1
  %3397 = load i64, ptr %3396, align 8, !tbaa !80
  %3398 = icmp ult i64 %3391, %3397
  br i1 %3398, label %3400, label %3399

3399:                                             ; preds = %3390
  store i32 78, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #12
  br label %3774

3400:                                             ; preds = %3390
  %3401 = load i64, ptr %91, align 8, !tbaa !11
  %3402 = icmp eq i64 %3401, 0
  br i1 %3402, label %3403, label %3439

3403:                                             ; preds = %3400
  call void @llvm.lifetime.start.p0(i64 16, ptr %92) #12
  %3404 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3405 = load ptr, ptr %3404, align 8, !tbaa !79
  %3406 = load i64, ptr %90, align 8, !tbaa !11
  %3407 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3405, i64 %3406
  %3408 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3407, i32 0, i32 2
  %3409 = load ptr, ptr %3408, align 8, !tbaa !87
  %3410 = load i64, ptr %91, align 8, !tbaa !11
  %3411 = trunc i64 %3410 to i32
  %3412 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3409, i32 noundef %3411)
  store { ptr, i32 } %3412, ptr %93, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %92, ptr align 8 %93, i64 12, i1 false)
  %3413 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %92, i32 noundef 0)
  %3414 = load i32, ptr %3413, align 4, !tbaa !9
  store i32 %3414, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %92) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %94) #12
  %3415 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3416 = load ptr, ptr %3415, align 8, !tbaa !79
  %3417 = load i64, ptr %90, align 8, !tbaa !11
  %3418 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3416, i64 %3417
  %3419 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3418, i32 0, i32 2
  %3420 = load ptr, ptr %3419, align 8, !tbaa !87
  %3421 = load i64, ptr %91, align 8, !tbaa !11
  %3422 = add i64 %3421, 1
  %3423 = trunc i64 %3422 to i32
  %3424 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3420, i32 noundef %3423)
  store { ptr, i32 } %3424, ptr %95, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %94, ptr align 8 %95, i64 12, i1 false)
  %3425 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %94, i32 noundef 0)
  %3426 = load i32, ptr %3425, align 4, !tbaa !9
  store i32 %3426, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %94) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %96) #12
  %3427 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3428 = load ptr, ptr %3427, align 8, !tbaa !79
  %3429 = load i64, ptr %90, align 8, !tbaa !11
  %3430 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3428, i64 %3429
  %3431 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3430, i32 0, i32 2
  %3432 = load ptr, ptr %3431, align 8, !tbaa !87
  %3433 = load i64, ptr %91, align 8, !tbaa !11
  %3434 = add i64 %3433, 2
  %3435 = trunc i64 %3434 to i32
  %3436 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3432, i32 noundef %3435)
  store { ptr, i32 } %3436, ptr %97, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %96, ptr align 8 %97, i64 12, i1 false)
  %3437 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %96, i32 noundef 0)
  %3438 = load i32, ptr %3437, align 4, !tbaa !9
  store i32 %3438, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %96) #12
  br label %3522

3439:                                             ; preds = %3400
  %3440 = load i64, ptr %91, align 8, !tbaa !11
  %3441 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3442 = load ptr, ptr %3441, align 8, !tbaa !79
  %3443 = load i64, ptr %90, align 8, !tbaa !11
  %3444 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3442, i64 %3443
  %3445 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3444, i32 0, i32 1
  %3446 = load i64, ptr %3445, align 8, !tbaa !80
  %3447 = sub i64 %3446, 1
  %3448 = icmp eq i64 %3440, %3447
  br i1 %3448, label %3449, label %3485

3449:                                             ; preds = %3439
  call void @llvm.lifetime.start.p0(i64 16, ptr %98) #12
  %3450 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3451 = load ptr, ptr %3450, align 8, !tbaa !79
  %3452 = load i64, ptr %90, align 8, !tbaa !11
  %3453 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3451, i64 %3452
  %3454 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3453, i32 0, i32 2
  %3455 = load ptr, ptr %3454, align 8, !tbaa !87
  %3456 = load i64, ptr %91, align 8, !tbaa !11
  %3457 = sub i64 %3456, 2
  %3458 = trunc i64 %3457 to i32
  %3459 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3455, i32 noundef %3458)
  store { ptr, i32 } %3459, ptr %99, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %98, ptr align 8 %99, i64 12, i1 false)
  %3460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %98, i32 noundef 0)
  %3461 = load i32, ptr %3460, align 4, !tbaa !9
  store i32 %3461, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %98) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %100) #12
  %3462 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3463 = load ptr, ptr %3462, align 8, !tbaa !79
  %3464 = load i64, ptr %90, align 8, !tbaa !11
  %3465 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3463, i64 %3464
  %3466 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3465, i32 0, i32 2
  %3467 = load ptr, ptr %3466, align 8, !tbaa !87
  %3468 = load i64, ptr %91, align 8, !tbaa !11
  %3469 = sub i64 %3468, 1
  %3470 = trunc i64 %3469 to i32
  %3471 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3467, i32 noundef %3470)
  store { ptr, i32 } %3471, ptr %101, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %100, ptr align 8 %101, i64 12, i1 false)
  %3472 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %100, i32 noundef 0)
  %3473 = load i32, ptr %3472, align 4, !tbaa !9
  store i32 %3473, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %100) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %102) #12
  %3474 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3475 = load ptr, ptr %3474, align 8, !tbaa !79
  %3476 = load i64, ptr %90, align 8, !tbaa !11
  %3477 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3475, i64 %3476
  %3478 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3477, i32 0, i32 2
  %3479 = load ptr, ptr %3478, align 8, !tbaa !87
  %3480 = load i64, ptr %91, align 8, !tbaa !11
  %3481 = trunc i64 %3480 to i32
  %3482 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3479, i32 noundef %3481)
  store { ptr, i32 } %3482, ptr %103, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %102, ptr align 8 %103, i64 12, i1 false)
  %3483 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %102, i32 noundef 0)
  %3484 = load i32, ptr %3483, align 4, !tbaa !9
  store i32 %3484, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %102) #12
  br label %3521

3485:                                             ; preds = %3439
  call void @llvm.lifetime.start.p0(i64 16, ptr %104) #12
  %3486 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3487 = load ptr, ptr %3486, align 8, !tbaa !79
  %3488 = load i64, ptr %90, align 8, !tbaa !11
  %3489 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3487, i64 %3488
  %3490 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3489, i32 0, i32 2
  %3491 = load ptr, ptr %3490, align 8, !tbaa !87
  %3492 = load i64, ptr %91, align 8, !tbaa !11
  %3493 = sub i64 %3492, 1
  %3494 = trunc i64 %3493 to i32
  %3495 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3491, i32 noundef %3494)
  store { ptr, i32 } %3495, ptr %105, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %104, ptr align 8 %105, i64 12, i1 false)
  %3496 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %104, i32 noundef 0)
  %3497 = load i32, ptr %3496, align 4, !tbaa !9
  store i32 %3497, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %104) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %106) #12
  %3498 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3499 = load ptr, ptr %3498, align 8, !tbaa !79
  %3500 = load i64, ptr %90, align 8, !tbaa !11
  %3501 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3499, i64 %3500
  %3502 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3501, i32 0, i32 2
  %3503 = load ptr, ptr %3502, align 8, !tbaa !87
  %3504 = load i64, ptr %91, align 8, !tbaa !11
  %3505 = trunc i64 %3504 to i32
  %3506 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3503, i32 noundef %3505)
  store { ptr, i32 } %3506, ptr %107, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %106, ptr align 8 %107, i64 12, i1 false)
  %3507 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %106, i32 noundef 0)
  %3508 = load i32, ptr %3507, align 4, !tbaa !9
  store i32 %3508, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %106) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %108) #12
  %3509 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3510 = load ptr, ptr %3509, align 8, !tbaa !79
  %3511 = load i64, ptr %90, align 8, !tbaa !11
  %3512 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3510, i64 %3511
  %3513 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3512, i32 0, i32 2
  %3514 = load ptr, ptr %3513, align 8, !tbaa !87
  %3515 = load i64, ptr %91, align 8, !tbaa !11
  %3516 = add i64 %3515, 1
  %3517 = trunc i64 %3516 to i32
  %3518 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3514, i32 noundef %3517)
  store { ptr, i32 } %3518, ptr %109, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %108, ptr align 8 %109, i64 12, i1 false)
  %3519 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %108, i32 noundef 0)
  %3520 = load i32, ptr %3519, align 4, !tbaa !9
  store i32 %3520, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %108) #12
  br label %3521

3521:                                             ; preds = %3485, %3449
  br label %3522

3522:                                             ; preds = %3521, %3403
  %3523 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3524 = load ptr, ptr %3523, align 8, !tbaa !18
  %3525 = load i32, ptr %10, align 4, !tbaa !9
  %3526 = sext i32 %3525 to i64
  %3527 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3524, i64 %3526
  %3528 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3527, i32 0, i32 0
  %3529 = load double, ptr %3528, align 8, !tbaa !33
  store double %3529, ptr %14, align 8, !tbaa !34
  %3530 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3531 = load ptr, ptr %3530, align 8, !tbaa !18
  %3532 = load i32, ptr %11, align 4, !tbaa !9
  %3533 = sext i32 %3532 to i64
  %3534 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3531, i64 %3533
  %3535 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3534, i32 0, i32 0
  %3536 = load double, ptr %3535, align 8, !tbaa !33
  store double %3536, ptr %15, align 8, !tbaa !34
  %3537 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3538 = load ptr, ptr %3537, align 8, !tbaa !18
  %3539 = load i32, ptr %12, align 4, !tbaa !9
  %3540 = sext i32 %3539 to i64
  %3541 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3538, i64 %3540
  %3542 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3541, i32 0, i32 0
  %3543 = load double, ptr %3542, align 8, !tbaa !33
  store double %3543, ptr %16, align 8, !tbaa !34
  %3544 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3545 = load ptr, ptr %3544, align 8, !tbaa !18
  %3546 = load i32, ptr %10, align 4, !tbaa !9
  %3547 = sext i32 %3546 to i64
  %3548 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3545, i64 %3547
  %3549 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3548, i32 0, i32 1
  %3550 = load double, ptr %3549, align 8, !tbaa !35
  store double %3550, ptr %18, align 8, !tbaa !34
  %3551 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3552 = load ptr, ptr %3551, align 8, !tbaa !18
  %3553 = load i32, ptr %11, align 4, !tbaa !9
  %3554 = sext i32 %3553 to i64
  %3555 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3552, i64 %3554
  %3556 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3555, i32 0, i32 1
  %3557 = load double, ptr %3556, align 8, !tbaa !35
  store double %3557, ptr %19, align 8, !tbaa !34
  %3558 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3559 = load ptr, ptr %3558, align 8, !tbaa !18
  %3560 = load i32, ptr %12, align 4, !tbaa !9
  %3561 = sext i32 %3560 to i64
  %3562 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3559, i64 %3561
  %3563 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3562, i32 0, i32 1
  %3564 = load double, ptr %3563, align 8, !tbaa !35
  store double %3564, ptr %20, align 8, !tbaa !34
  %3565 = load i64, ptr %91, align 8, !tbaa !11
  %3566 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3567 = load ptr, ptr %3566, align 8, !tbaa !79
  %3568 = load i64, ptr %90, align 8, !tbaa !11
  %3569 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3567, i64 %3568
  %3570 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3569, i32 0, i32 1
  %3571 = load i64, ptr %3570, align 8, !tbaa !80
  %3572 = sub i64 %3571, 1
  %3573 = icmp eq i64 %3565, %3572
  call void @llvm.lifetime.start.p0(i64 16, ptr %110) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %112) #12
  br i1 %3573, label %3574, label %3596

3574:                                             ; preds = %3522
  %3575 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3576 = load ptr, ptr %3575, align 8, !tbaa !79
  %3577 = load i64, ptr %90, align 8, !tbaa !11
  %3578 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3576, i64 %3577
  %3579 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3578, i32 0, i32 2
  %3580 = load ptr, ptr %3579, align 8, !tbaa !87
  %3581 = load i64, ptr %91, align 8, !tbaa !11
  %3582 = trunc i64 %3581 to i32
  %3583 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3580, i32 noundef %3582)
  store { ptr, i32 } %3583, ptr %111, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %110, ptr align 8 %111, i64 12, i1 false)
  %3584 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %110, i32 noundef 0)
  %3585 = load i32, ptr %3584, align 4, !tbaa !9
  %3586 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3587 = load ptr, ptr %3586, align 8, !tbaa !79
  %3588 = load i64, ptr %90, align 8, !tbaa !11
  %3589 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3587, i64 %3588
  %3590 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3589, i32 0, i32 2
  %3591 = load ptr, ptr %3590, align 8, !tbaa !87
  %3592 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3591, i32 noundef 0)
  store { ptr, i32 } %3592, ptr %113, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %112, ptr align 8 %113, i64 12, i1 false)
  %3593 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %112, i32 noundef 0)
  %3594 = load i32, ptr %3593, align 4, !tbaa !9
  %3595 = icmp eq i32 %3585, %3594
  br label %3596

3596:                                             ; preds = %3574, %3522
  %3597 = phi i1 [ false, %3522 ], [ %3595, %3574 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr %112) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %110) #12
  br i1 %3597, label %3598, label %3650

3598:                                             ; preds = %3596
  %3599 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3600 = load ptr, ptr %3599, align 8, !tbaa !79
  %3601 = load i64, ptr %90, align 8, !tbaa !11
  %3602 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3600, i64 %3601
  %3603 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3602, i32 0, i32 9
  %3604 = load ptr, ptr %3603, align 8, !tbaa !84
  %3605 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3604, i32 noundef 0)
  %3606 = load double, ptr %3605, align 8, !tbaa !34
  %3607 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3608 = load ptr, ptr %3607, align 8, !tbaa !79
  %3609 = load i64, ptr %90, align 8, !tbaa !11
  %3610 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3608, i64 %3609
  %3611 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3610, i32 0, i32 9
  %3612 = load ptr, ptr %3611, align 8, !tbaa !84
  %3613 = load i64, ptr %91, align 8, !tbaa !11
  %3614 = trunc i64 %3613 to i32
  %3615 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3612, i32 noundef %3614)
  store double %3606, ptr %3615, align 8, !tbaa !34
  %3616 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3617 = load ptr, ptr %3616, align 8, !tbaa !79
  %3618 = load i64, ptr %90, align 8, !tbaa !11
  %3619 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3617, i64 %3618
  %3620 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3619, i32 0, i32 7
  %3621 = load ptr, ptr %3620, align 8, !tbaa !82
  %3622 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3621, i32 noundef 0)
  %3623 = load double, ptr %3622, align 8, !tbaa !34
  %3624 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3625 = load ptr, ptr %3624, align 8, !tbaa !79
  %3626 = load i64, ptr %90, align 8, !tbaa !11
  %3627 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3625, i64 %3626
  %3628 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3627, i32 0, i32 7
  %3629 = load ptr, ptr %3628, align 8, !tbaa !82
  %3630 = load i64, ptr %91, align 8, !tbaa !11
  %3631 = trunc i64 %3630 to i32
  %3632 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3629, i32 noundef %3631)
  store double %3623, ptr %3632, align 8, !tbaa !34
  %3633 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3634 = load ptr, ptr %3633, align 8, !tbaa !79
  %3635 = load i64, ptr %90, align 8, !tbaa !11
  %3636 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3634, i64 %3635
  %3637 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3636, i32 0, i32 8
  %3638 = load ptr, ptr %3637, align 8, !tbaa !83
  %3639 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3638, i32 noundef 0)
  %3640 = load double, ptr %3639, align 8, !tbaa !34
  %3641 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3642 = load ptr, ptr %3641, align 8, !tbaa !79
  %3643 = load i64, ptr %90, align 8, !tbaa !11
  %3644 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3642, i64 %3643
  %3645 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3644, i32 0, i32 8
  %3646 = load ptr, ptr %3645, align 8, !tbaa !83
  %3647 = load i64, ptr %91, align 8, !tbaa !11
  %3648 = trunc i64 %3647 to i32
  %3649 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3646, i32 noundef %3648)
  store double %3640, ptr %3649, align 8, !tbaa !34
  br label %3771

3650:                                             ; preds = %3596
  %3651 = load double, ptr %15, align 8, !tbaa !34
  %3652 = load double, ptr %14, align 8, !tbaa !34
  %3653 = fsub double %3651, %3652
  %3654 = load double, ptr %15, align 8, !tbaa !34
  %3655 = load double, ptr %14, align 8, !tbaa !34
  %3656 = fsub double %3654, %3655
  %3657 = load double, ptr %19, align 8, !tbaa !34
  %3658 = load double, ptr %18, align 8, !tbaa !34
  %3659 = fsub double %3657, %3658
  %3660 = load double, ptr %19, align 8, !tbaa !34
  %3661 = load double, ptr %18, align 8, !tbaa !34
  %3662 = fsub double %3660, %3661
  %3663 = fmul double %3659, %3662
  %3664 = call double @llvm.fmuladd.f64(double %3653, double %3656, double %3663)
  %3665 = call double @sqrt(double noundef %3664) #12
  store double %3665, ptr %32, align 8, !tbaa !34
  %3666 = load double, ptr %16, align 8, !tbaa !34
  %3667 = load double, ptr %15, align 8, !tbaa !34
  %3668 = fsub double %3666, %3667
  %3669 = load double, ptr %16, align 8, !tbaa !34
  %3670 = load double, ptr %15, align 8, !tbaa !34
  %3671 = fsub double %3669, %3670
  %3672 = load double, ptr %20, align 8, !tbaa !34
  %3673 = load double, ptr %19, align 8, !tbaa !34
  %3674 = fsub double %3672, %3673
  %3675 = load double, ptr %20, align 8, !tbaa !34
  %3676 = load double, ptr %19, align 8, !tbaa !34
  %3677 = fsub double %3675, %3676
  %3678 = fmul double %3674, %3677
  %3679 = call double @llvm.fmuladd.f64(double %3668, double %3671, double %3678)
  %3680 = call double @sqrt(double noundef %3679) #12
  store double %3680, ptr %33, align 8, !tbaa !34
  %3681 = load double, ptr %33, align 8, !tbaa !34
  %3682 = load double, ptr %14, align 8, !tbaa !34
  %3683 = fmul double %3681, %3682
  %3684 = load double, ptr %32, align 8, !tbaa !34
  %3685 = load double, ptr %32, align 8, !tbaa !34
  %3686 = fneg double %3685
  %3687 = load double, ptr %33, align 8, !tbaa !34
  %3688 = fsub double %3686, %3687
  %3689 = fmul double %3684, %3688
  %3690 = fdiv double %3683, %3689
  %3691 = load double, ptr %15, align 8, !tbaa !34
  %3692 = load double, ptr %33, align 8, !tbaa !34
  %3693 = fdiv double %3691, %3692
  %3694 = fsub double %3690, %3693
  %3695 = load double, ptr %15, align 8, !tbaa !34
  %3696 = load double, ptr %32, align 8, !tbaa !34
  %3697 = fdiv double %3695, %3696
  %3698 = fadd double %3694, %3697
  %3699 = load double, ptr %32, align 8, !tbaa !34
  %3700 = load double, ptr %16, align 8, !tbaa !34
  %3701 = fmul double %3699, %3700
  %3702 = load double, ptr %33, align 8, !tbaa !34
  %3703 = load double, ptr %32, align 8, !tbaa !34
  %3704 = fadd double %3702, %3703
  %3705 = load double, ptr %33, align 8, !tbaa !34
  %3706 = fmul double %3704, %3705
  %3707 = fdiv double %3701, %3706
  %3708 = fadd double %3698, %3707
  store double %3708, ptr %34, align 8, !tbaa !34
  %3709 = load double, ptr %33, align 8, !tbaa !34
  %3710 = load double, ptr %18, align 8, !tbaa !34
  %3711 = fmul double %3709, %3710
  %3712 = load double, ptr %32, align 8, !tbaa !34
  %3713 = load double, ptr %32, align 8, !tbaa !34
  %3714 = fneg double %3713
  %3715 = load double, ptr %33, align 8, !tbaa !34
  %3716 = fsub double %3714, %3715
  %3717 = fmul double %3712, %3716
  %3718 = fdiv double %3711, %3717
  %3719 = load double, ptr %19, align 8, !tbaa !34
  %3720 = load double, ptr %33, align 8, !tbaa !34
  %3721 = fdiv double %3719, %3720
  %3722 = fsub double %3718, %3721
  %3723 = load double, ptr %19, align 8, !tbaa !34
  %3724 = load double, ptr %32, align 8, !tbaa !34
  %3725 = fdiv double %3723, %3724
  %3726 = fadd double %3722, %3725
  %3727 = load double, ptr %32, align 8, !tbaa !34
  %3728 = load double, ptr %20, align 8, !tbaa !34
  %3729 = fmul double %3727, %3728
  %3730 = load double, ptr %33, align 8, !tbaa !34
  %3731 = load double, ptr %32, align 8, !tbaa !34
  %3732 = fadd double %3730, %3731
  %3733 = load double, ptr %33, align 8, !tbaa !34
  %3734 = fmul double %3732, %3733
  %3735 = fdiv double %3729, %3734
  %3736 = fadd double %3726, %3735
  store double %3736, ptr %35, align 8, !tbaa !34
  %3737 = load double, ptr %34, align 8, !tbaa !34
  %3738 = load double, ptr %34, align 8, !tbaa !34
  %3739 = load double, ptr %35, align 8, !tbaa !34
  %3740 = load double, ptr %35, align 8, !tbaa !34
  %3741 = fmul double %3739, %3740
  %3742 = call double @llvm.fmuladd.f64(double %3737, double %3738, double %3741)
  %3743 = call double @sqrt(double noundef %3742) #12
  store double %3743, ptr %52, align 8, !tbaa !34
  %3744 = load double, ptr %35, align 8, !tbaa !34
  %3745 = fneg double %3744
  %3746 = load double, ptr %52, align 8, !tbaa !34
  %3747 = fdiv double %3745, %3746
  %3748 = fneg double %3747
  %3749 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3750 = load ptr, ptr %3749, align 8, !tbaa !79
  %3751 = load i64, ptr %90, align 8, !tbaa !11
  %3752 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3750, i64 %3751
  %3753 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3752, i32 0, i32 7
  %3754 = load ptr, ptr %3753, align 8, !tbaa !82
  %3755 = load i64, ptr %91, align 8, !tbaa !11
  %3756 = trunc i64 %3755 to i32
  %3757 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3754, i32 noundef %3756)
  store double %3748, ptr %3757, align 8, !tbaa !34
  %3758 = load double, ptr %34, align 8, !tbaa !34
  %3759 = load double, ptr %52, align 8, !tbaa !34
  %3760 = fdiv double %3758, %3759
  %3761 = fneg double %3760
  %3762 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3763 = load ptr, ptr %3762, align 8, !tbaa !79
  %3764 = load i64, ptr %90, align 8, !tbaa !11
  %3765 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3763, i64 %3764
  %3766 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3765, i32 0, i32 8
  %3767 = load ptr, ptr %3766, align 8, !tbaa !83
  %3768 = load i64, ptr %91, align 8, !tbaa !11
  %3769 = trunc i64 %3768 to i32
  %3770 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3767, i32 noundef %3769)
  store double %3761, ptr %3770, align 8, !tbaa !34
  br label %3771

3771:                                             ; preds = %3650, %3598
  %3772 = load i64, ptr %91, align 8, !tbaa !11
  %3773 = add i64 %3772, 1
  store i64 %3773, ptr %91, align 8, !tbaa !11
  br label %3390, !llvm.loop !92

3774:                                             ; preds = %3399
  br label %3775

3775:                                             ; preds = %3774
  %3776 = load i64, ptr %90, align 8, !tbaa !11
  %3777 = add i64 %3776, 1
  store i64 %3777, ptr %90, align 8, !tbaa !11
  br label %3383, !llvm.loop !93

3778:                                             ; preds = %3388
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #12
  store i64 0, ptr %114, align 8, !tbaa !11
  br label %3779

3779:                                             ; preds = %3876, %3778
  %3780 = load i64, ptr %114, align 8, !tbaa !11
  %3781 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %3782 = load i64, ptr %3781, align 8, !tbaa !28
  %3783 = icmp ult i64 %3780, %3782
  br i1 %3783, label %3785, label %3784

3784:                                             ; preds = %3779
  store i32 81, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #12
  br label %3879

3785:                                             ; preds = %3779
  %3786 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %3787 = load ptr, ptr %3786, align 8, !tbaa !56
  %3788 = load i64, ptr %114, align 8, !tbaa !11
  %3789 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3787, i64 %3788
  %3790 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3789, i32 0, i32 0
  %3791 = load i32, ptr %3790, align 8, !tbaa !62
  store i32 %3791, ptr %39, align 4, !tbaa !9
  %3792 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %3793 = load ptr, ptr %3792, align 8, !tbaa !56
  %3794 = load i64, ptr %114, align 8, !tbaa !11
  %3795 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3793, i64 %3794
  %3796 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3795, i32 0, i32 1
  %3797 = load i32, ptr %3796, align 4, !tbaa !63
  store i32 %3797, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #12
  store i64 0, ptr %115, align 8, !tbaa !11
  br label %3798

3798:                                             ; preds = %3833, %3785
  %3799 = load i64, ptr %115, align 8, !tbaa !11
  %3800 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3801 = load ptr, ptr %3800, align 8, !tbaa !18
  %3802 = load i32, ptr %40, align 4, !tbaa !9
  %3803 = sext i32 %3802 to i64
  %3804 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3801, i64 %3803
  %3805 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3804, i32 0, i32 2
  %3806 = load i32, ptr %3805, align 8, !tbaa !68
  %3807 = sext i32 %3806 to i64
  %3808 = icmp ult i64 %3799, %3807
  br i1 %3808, label %3810, label %3809

3809:                                             ; preds = %3798
  store i32 84, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #12
  br label %3836

3810:                                             ; preds = %3798
  %3811 = load i32, ptr %39, align 4, !tbaa !9
  %3812 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3813 = load ptr, ptr %3812, align 8, !tbaa !18
  %3814 = load i32, ptr %40, align 4, !tbaa !9
  %3815 = sext i32 %3814 to i64
  %3816 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3813, i64 %3815
  %3817 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3816, i32 0, i32 3
  %3818 = load ptr, ptr %3817, align 8, !tbaa !71
  %3819 = load i64, ptr %115, align 8, !tbaa !11
  %3820 = trunc i64 %3819 to i32
  %3821 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3818, i32 noundef %3820)
  %3822 = load i32, ptr %3821, align 4, !tbaa !9
  %3823 = icmp eq i32 %3811, %3822
  br i1 %3823, label %3824, label %3832

3824:                                             ; preds = %3810
  %3825 = load i64, ptr %115, align 8, !tbaa !11
  %3826 = trunc i64 %3825 to i32
  %3827 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %3828 = load ptr, ptr %3827, align 8, !tbaa !56
  %3829 = load i64, ptr %114, align 8, !tbaa !11
  %3830 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3828, i64 %3829
  %3831 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3830, i32 0, i32 9
  store i32 %3826, ptr %3831, align 4, !tbaa !94
  br label %3832

3832:                                             ; preds = %3824, %3810
  br label %3833

3833:                                             ; preds = %3832
  %3834 = load i64, ptr %115, align 8, !tbaa !11
  %3835 = add i64 %3834, 1
  store i64 %3835, ptr %115, align 8, !tbaa !11
  br label %3798, !llvm.loop !95

3836:                                             ; preds = %3809
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #12
  store i64 0, ptr %116, align 8, !tbaa !11
  br label %3837

3837:                                             ; preds = %3872, %3836
  %3838 = load i64, ptr %116, align 8, !tbaa !11
  %3839 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3840 = load ptr, ptr %3839, align 8, !tbaa !18
  %3841 = load i32, ptr %39, align 4, !tbaa !9
  %3842 = sext i32 %3841 to i64
  %3843 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3840, i64 %3842
  %3844 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3843, i32 0, i32 2
  %3845 = load i32, ptr %3844, align 8, !tbaa !68
  %3846 = sext i32 %3845 to i64
  %3847 = icmp ult i64 %3838, %3846
  br i1 %3847, label %3849, label %3848

3848:                                             ; preds = %3837
  store i32 87, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #12
  br label %3875

3849:                                             ; preds = %3837
  %3850 = load i32, ptr %40, align 4, !tbaa !9
  %3851 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3852 = load ptr, ptr %3851, align 8, !tbaa !18
  %3853 = load i32, ptr %39, align 4, !tbaa !9
  %3854 = sext i32 %3853 to i64
  %3855 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3852, i64 %3854
  %3856 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3855, i32 0, i32 3
  %3857 = load ptr, ptr %3856, align 8, !tbaa !71
  %3858 = load i64, ptr %116, align 8, !tbaa !11
  %3859 = trunc i64 %3858 to i32
  %3860 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3857, i32 noundef %3859)
  %3861 = load i32, ptr %3860, align 4, !tbaa !9
  %3862 = icmp eq i32 %3850, %3861
  br i1 %3862, label %3863, label %3871

3863:                                             ; preds = %3849
  %3864 = load i64, ptr %116, align 8, !tbaa !11
  %3865 = trunc i64 %3864 to i32
  %3866 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %3867 = load ptr, ptr %3866, align 8, !tbaa !56
  %3868 = load i64, ptr %114, align 8, !tbaa !11
  %3869 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3867, i64 %3868
  %3870 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %3869, i32 0, i32 8
  store i32 %3865, ptr %3870, align 8, !tbaa !96
  br label %3871

3871:                                             ; preds = %3863, %3849
  br label %3872

3872:                                             ; preds = %3871
  %3873 = load i64, ptr %116, align 8, !tbaa !11
  %3874 = add i64 %3873, 1
  store i64 %3874, ptr %116, align 8, !tbaa !11
  br label %3837, !llvm.loop !97

3875:                                             ; preds = %3848
  br label %3876

3876:                                             ; preds = %3875
  %3877 = load i64, ptr %114, align 8, !tbaa !11
  %3878 = add i64 %3877, 1
  store i64 %3878, ptr %114, align 8, !tbaa !11
  br label %3779, !llvm.loop !98

3879:                                             ; preds = %3784
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #12
  store i64 0, ptr %117, align 8, !tbaa !11
  br label %3880

3880:                                             ; preds = %3897, %3879
  %3881 = load i64, ptr %117, align 8, !tbaa !11
  %3882 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %3883 = load i64, ptr %3882, align 8, !tbaa !13
  %3884 = icmp ult i64 %3881, %3883
  br i1 %3884, label %3886, label %3885

3885:                                             ; preds = %3880
  store i32 90, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #12
  br label %3900

3886:                                             ; preds = %3880
  %3887 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3888 = load ptr, ptr %3887, align 8, !tbaa !18
  %3889 = load i64, ptr %117, align 8, !tbaa !11
  %3890 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3888, i64 %3889
  %3891 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3890, i32 0, i32 7
  store i32 -1, ptr %3891, align 8, !tbaa !99
  %3892 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3893 = load ptr, ptr %3892, align 8, !tbaa !18
  %3894 = load i64, ptr %117, align 8, !tbaa !11
  %3895 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3893, i64 %3894
  %3896 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3895, i32 0, i32 8
  store i32 0, ptr %3896, align 4, !tbaa !100
  br label %3897

3897:                                             ; preds = %3886
  %3898 = load i64, ptr %117, align 8, !tbaa !11
  %3899 = add i64 %3898, 1
  store i64 %3899, ptr %117, align 8, !tbaa !11
  br label %3880, !llvm.loop !101

3900:                                             ; preds = %3885
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #12
  store i64 0, ptr %118, align 8, !tbaa !11
  br label %3901

3901:                                             ; preds = %3975, %3900
  %3902 = load i64, ptr %118, align 8, !tbaa !11
  %3903 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %3904 = load i64, ptr %3903, align 8, !tbaa !78
  %3905 = icmp ult i64 %3902, %3904
  br i1 %3905, label %3907, label %3906

3906:                                             ; preds = %3901
  store i32 93, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #12
  br label %3978

3907:                                             ; preds = %3901
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #12
  store i64 0, ptr %119, align 8, !tbaa !11
  br label %3908

3908:                                             ; preds = %3971, %3907
  %3909 = load i64, ptr %119, align 8, !tbaa !11
  %3910 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3911 = load ptr, ptr %3910, align 8, !tbaa !79
  %3912 = load i64, ptr %118, align 8, !tbaa !11
  %3913 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3911, i64 %3912
  %3914 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3913, i32 0, i32 1
  %3915 = load i64, ptr %3914, align 8, !tbaa !80
  %3916 = icmp ult i64 %3909, %3915
  br i1 %3916, label %3918, label %3917

3917:                                             ; preds = %3908
  store i32 96, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #12
  br label %3974

3918:                                             ; preds = %3908
  %3919 = load i64, ptr %118, align 8, !tbaa !11
  %3920 = trunc i64 %3919 to i32
  %3921 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3922 = load ptr, ptr %3921, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %120) #12
  %3923 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3924 = load ptr, ptr %3923, align 8, !tbaa !79
  %3925 = load i64, ptr %118, align 8, !tbaa !11
  %3926 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3924, i64 %3925
  %3927 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3926, i32 0, i32 2
  %3928 = load ptr, ptr %3927, align 8, !tbaa !87
  %3929 = load i64, ptr %119, align 8, !tbaa !11
  %3930 = trunc i64 %3929 to i32
  %3931 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3928, i32 noundef %3930)
  store { ptr, i32 } %3931, ptr %121, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %120, ptr align 8 %121, i64 12, i1 false)
  %3932 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %120, i32 noundef 0)
  %3933 = load i32, ptr %3932, align 4, !tbaa !9
  %3934 = sext i32 %3933 to i64
  %3935 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3922, i64 %3934
  %3936 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3935, i32 0, i32 7
  store i32 %3920, ptr %3936, align 8, !tbaa !99
  call void @llvm.lifetime.end.p0(i64 16, ptr %120) #12
  %3937 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3938 = load ptr, ptr %3937, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %122) #12
  %3939 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3940 = load ptr, ptr %3939, align 8, !tbaa !79
  %3941 = load i64, ptr %118, align 8, !tbaa !11
  %3942 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3940, i64 %3941
  %3943 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3942, i32 0, i32 2
  %3944 = load ptr, ptr %3943, align 8, !tbaa !87
  %3945 = load i64, ptr %119, align 8, !tbaa !11
  %3946 = trunc i64 %3945 to i32
  %3947 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3944, i32 noundef %3946)
  store { ptr, i32 } %3947, ptr %123, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %122, ptr align 8 %123, i64 12, i1 false)
  %3948 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %122, i32 noundef 0)
  %3949 = load i32, ptr %3948, align 4, !tbaa !9
  %3950 = sext i32 %3949 to i64
  %3951 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3938, i64 %3950
  %3952 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3951, i32 0, i32 8
  %3953 = load i32, ptr %3952, align 4, !tbaa !100
  %3954 = add nsw i32 %3953, 1
  %3955 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %3956 = load ptr, ptr %3955, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %124) #12
  %3957 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3958 = load ptr, ptr %3957, align 8, !tbaa !79
  %3959 = load i64, ptr %118, align 8, !tbaa !11
  %3960 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3958, i64 %3959
  %3961 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3960, i32 0, i32 2
  %3962 = load ptr, ptr %3961, align 8, !tbaa !87
  %3963 = load i64, ptr %119, align 8, !tbaa !11
  %3964 = trunc i64 %3963 to i32
  %3965 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %3962, i32 noundef %3964)
  store { ptr, i32 } %3965, ptr %125, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %124, ptr align 8 %125, i64 12, i1 false)
  %3966 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %124, i32 noundef 0)
  %3967 = load i32, ptr %3966, align 4, !tbaa !9
  %3968 = sext i32 %3967 to i64
  %3969 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3956, i64 %3968
  %3970 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %3969, i32 0, i32 8
  store i32 %3954, ptr %3970, align 4, !tbaa !100
  call void @llvm.lifetime.end.p0(i64 16, ptr %124) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr %122) #12
  br label %3971

3971:                                             ; preds = %3918
  %3972 = load i64, ptr %119, align 8, !tbaa !11
  %3973 = add i64 %3972, 1
  store i64 %3973, ptr %119, align 8, !tbaa !11
  br label %3908, !llvm.loop !102

3974:                                             ; preds = %3917
  br label %3975

3975:                                             ; preds = %3974
  %3976 = load i64, ptr %118, align 8, !tbaa !11
  %3977 = add i64 %3976, 1
  store i64 %3977, ptr %118, align 8, !tbaa !11
  br label %3901, !llvm.loop !103

3978:                                             ; preds = %3906
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #12
  store i64 0, ptr %126, align 8, !tbaa !11
  br label %3979

3979:                                             ; preds = %4091, %3978
  %3980 = load i64, ptr %126, align 8, !tbaa !11
  %3981 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %3982 = load i64, ptr %3981, align 8, !tbaa !78
  %3983 = icmp ult i64 %3980, %3982
  br i1 %3983, label %3985, label %3984

3984:                                             ; preds = %3979
  store i32 99, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #12
  br label %4119

3985:                                             ; preds = %3979
  %3986 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3987 = load ptr, ptr %3986, align 8, !tbaa !79
  %3988 = load i64, ptr %126, align 8, !tbaa !11
  %3989 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3987, i64 %3988
  %3990 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3989, i32 0, i32 1
  %3991 = load i64, ptr %3990, align 8, !tbaa !80
  %3992 = sub i64 %3991, 1
  %3993 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %3994 = load ptr, ptr %3993, align 8, !tbaa !79
  %3995 = load i64, ptr %126, align 8, !tbaa !11
  %3996 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3994, i64 %3995
  %3997 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %3996, i32 0, i32 3
  store i64 %3992, ptr %3997, align 8, !tbaa !104
  %3998 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.48)
  %3999 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4000 = load ptr, ptr %3999, align 8, !tbaa !79
  %4001 = load i64, ptr %126, align 8, !tbaa !11
  %4002 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4000, i64 %4001
  %4003 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4002, i32 0, i32 3
  %4004 = load i64, ptr %4003, align 8, !tbaa !104
  %4005 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %3998, i64 noundef %4004)
  %4006 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4005, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4007 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4008 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4009 = load ptr, ptr %4008, align 8, !tbaa !79
  %4010 = load i64, ptr %126, align 8, !tbaa !11
  %4011 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4009, i64 %4010
  %4012 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4011, i32 0, i32 3
  %4013 = load i64, ptr %4012, align 8, !tbaa !104
  %4014 = trunc i64 %4013 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4007, i32 noundef %4014, i32 noundef 1)
          to label %4015 unwind label %4094

4015:                                             ; preds = %3985
  %4016 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4017 = load ptr, ptr %4016, align 8, !tbaa !79
  %4018 = load i64, ptr %126, align 8, !tbaa !11
  %4019 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4017, i64 %4018
  %4020 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4019, i32 0, i32 4
  store ptr %4007, ptr %4020, align 8, !tbaa !105
  %4021 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4022 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4023 = load ptr, ptr %4022, align 8, !tbaa !79
  %4024 = load i64, ptr %126, align 8, !tbaa !11
  %4025 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4023, i64 %4024
  %4026 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4025, i32 0, i32 3
  %4027 = load i64, ptr %4026, align 8, !tbaa !104
  %4028 = trunc i64 %4027 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4021, i32 noundef %4028, i32 noundef 1)
          to label %4029 unwind label %4098

4029:                                             ; preds = %4015
  %4030 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4031 = load ptr, ptr %4030, align 8, !tbaa !79
  %4032 = load i64, ptr %126, align 8, !tbaa !11
  %4033 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4031, i64 %4032
  %4034 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4033, i32 0, i32 5
  store ptr %4021, ptr %4034, align 8, !tbaa !106
  %4035 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4036 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4037 = load ptr, ptr %4036, align 8, !tbaa !79
  %4038 = load i64, ptr %126, align 8, !tbaa !11
  %4039 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4037, i64 %4038
  %4040 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4039, i32 0, i32 3
  %4041 = load i64, ptr %4040, align 8, !tbaa !104
  %4042 = trunc i64 %4041 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4035, i32 noundef %4042, i32 noundef 1)
          to label %4043 unwind label %4102

4043:                                             ; preds = %4029
  %4044 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4045 = load ptr, ptr %4044, align 8, !tbaa !79
  %4046 = load i64, ptr %126, align 8, !tbaa !11
  %4047 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4045, i64 %4046
  %4048 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4047, i32 0, i32 6
  store ptr %4035, ptr %4048, align 8, !tbaa !107
  %4049 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4050 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4051 = load ptr, ptr %4050, align 8, !tbaa !79
  %4052 = load i64, ptr %126, align 8, !tbaa !11
  %4053 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4051, i64 %4052
  %4054 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4053, i32 0, i32 3
  %4055 = load i64, ptr %4054, align 8, !tbaa !104
  %4056 = trunc i64 %4055 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4049, i32 noundef %4056, i32 noundef 1)
          to label %4057 unwind label %4106

4057:                                             ; preds = %4043
  %4058 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4059 = load ptr, ptr %4058, align 8, !tbaa !79
  %4060 = load i64, ptr %126, align 8, !tbaa !11
  %4061 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4059, i64 %4060
  %4062 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4061, i32 0, i32 10
  store ptr %4049, ptr %4062, align 8, !tbaa !108
  %4063 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4064 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4065 = load ptr, ptr %4064, align 8, !tbaa !79
  %4066 = load i64, ptr %126, align 8, !tbaa !11
  %4067 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4065, i64 %4066
  %4068 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4067, i32 0, i32 3
  %4069 = load i64, ptr %4068, align 8, !tbaa !104
  %4070 = trunc i64 %4069 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4063, i32 noundef %4070, i32 noundef 1)
          to label %4071 unwind label %4110

4071:                                             ; preds = %4057
  %4072 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4073 = load ptr, ptr %4072, align 8, !tbaa !79
  %4074 = load i64, ptr %126, align 8, !tbaa !11
  %4075 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4073, i64 %4074
  %4076 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4075, i32 0, i32 11
  store ptr %4063, ptr %4076, align 8, !tbaa !109
  %4077 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4078 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4079 = load ptr, ptr %4078, align 8, !tbaa !79
  %4080 = load i64, ptr %126, align 8, !tbaa !11
  %4081 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4079, i64 %4080
  %4082 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4081, i32 0, i32 3
  %4083 = load i64, ptr %4082, align 8, !tbaa !104
  %4084 = trunc i64 %4083 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4077, i32 noundef %4084, i32 noundef 1)
          to label %4085 unwind label %4114

4085:                                             ; preds = %4071
  %4086 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4087 = load ptr, ptr %4086, align 8, !tbaa !79
  %4088 = load i64, ptr %126, align 8, !tbaa !11
  %4089 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4087, i64 %4088
  %4090 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4089, i32 0, i32 12
  store ptr %4077, ptr %4090, align 8, !tbaa !110
  br label %4091

4091:                                             ; preds = %4085
  %4092 = load i64, ptr %126, align 8, !tbaa !11
  %4093 = add i64 %4092, 1
  store i64 %4093, ptr %126, align 8, !tbaa !11
  br label %3979, !llvm.loop !111

4094:                                             ; preds = %3985
  %4095 = landingpad { ptr, i32 }
          cleanup
  %4096 = extractvalue { ptr, i32 } %4095, 0
  store ptr %4096, ptr %58, align 8
  %4097 = extractvalue { ptr, i32 } %4095, 1
  store i32 %4097, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4007, i64 noundef 40) #15
  br label %4118

4098:                                             ; preds = %4015
  %4099 = landingpad { ptr, i32 }
          cleanup
  %4100 = extractvalue { ptr, i32 } %4099, 0
  store ptr %4100, ptr %58, align 8
  %4101 = extractvalue { ptr, i32 } %4099, 1
  store i32 %4101, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4021, i64 noundef 40) #15
  br label %4118

4102:                                             ; preds = %4029
  %4103 = landingpad { ptr, i32 }
          cleanup
  %4104 = extractvalue { ptr, i32 } %4103, 0
  store ptr %4104, ptr %58, align 8
  %4105 = extractvalue { ptr, i32 } %4103, 1
  store i32 %4105, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4035, i64 noundef 40) #15
  br label %4118

4106:                                             ; preds = %4043
  %4107 = landingpad { ptr, i32 }
          cleanup
  %4108 = extractvalue { ptr, i32 } %4107, 0
  store ptr %4108, ptr %58, align 8
  %4109 = extractvalue { ptr, i32 } %4107, 1
  store i32 %4109, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4049, i64 noundef 40) #15
  br label %4118

4110:                                             ; preds = %4057
  %4111 = landingpad { ptr, i32 }
          cleanup
  %4112 = extractvalue { ptr, i32 } %4111, 0
  store ptr %4112, ptr %58, align 8
  %4113 = extractvalue { ptr, i32 } %4111, 1
  store i32 %4113, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4063, i64 noundef 40) #15
  br label %4118

4114:                                             ; preds = %4071
  %4115 = landingpad { ptr, i32 }
          cleanup
  %4116 = extractvalue { ptr, i32 } %4115, 0
  store ptr %4116, ptr %58, align 8
  %4117 = extractvalue { ptr, i32 } %4115, 1
  store i32 %4117, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4077, i64 noundef 40) #15
  br label %4118

4118:                                             ; preds = %4114, %4110, %4106, %4102, %4098, %4094
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #12
  br label %5789

4119:                                             ; preds = %3984
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #12
  store i64 0, ptr %127, align 8, !tbaa !11
  br label %4120

4120:                                             ; preds = %4294, %4119
  %4121 = load i64, ptr %127, align 8, !tbaa !11
  %4122 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %4123 = load i64, ptr %4122, align 8, !tbaa !78
  %4124 = icmp ult i64 %4121, %4123
  br i1 %4124, label %4126, label %4125

4125:                                             ; preds = %4120
  store i32 102, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #12
  br label %4297

4126:                                             ; preds = %4120
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #12
  store i64 0, ptr %128, align 8, !tbaa !11
  br label %4127

4127:                                             ; preds = %4290, %4126
  %4128 = load i64, ptr %128, align 8, !tbaa !11
  %4129 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4130 = load ptr, ptr %4129, align 8, !tbaa !79
  %4131 = load i64, ptr %127, align 8, !tbaa !11
  %4132 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4130, i64 %4131
  %4133 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4132, i32 0, i32 3
  %4134 = load i64, ptr %4133, align 8, !tbaa !104
  %4135 = icmp ult i64 %4128, %4134
  br i1 %4135, label %4137, label %4136

4136:                                             ; preds = %4127
  store i32 105, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #12
  br label %4293

4137:                                             ; preds = %4127
  %4138 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4139 = load ptr, ptr %4138, align 8, !tbaa !18
  %4140 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4141 = load ptr, ptr %4140, align 8, !tbaa !79
  %4142 = load i64, ptr %127, align 8, !tbaa !11
  %4143 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4141, i64 %4142
  %4144 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4143, i32 0, i32 2
  %4145 = load ptr, ptr %4144, align 8, !tbaa !87
  %4146 = load i64, ptr %128, align 8, !tbaa !11
  %4147 = trunc i64 %4146 to i32
  %4148 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %4145, i32 noundef %4147, i32 noundef 0)
  %4149 = load i32, ptr %4148, align 4, !tbaa !9
  %4150 = sext i32 %4149 to i64
  %4151 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4139, i64 %4150
  %4152 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4151, i32 0, i32 0
  %4153 = load double, ptr %4152, align 8, !tbaa !33
  store double %4153, ptr %14, align 8, !tbaa !34
  %4154 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4155 = load ptr, ptr %4154, align 8, !tbaa !18
  %4156 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4157 = load ptr, ptr %4156, align 8, !tbaa !79
  %4158 = load i64, ptr %127, align 8, !tbaa !11
  %4159 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4157, i64 %4158
  %4160 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4159, i32 0, i32 2
  %4161 = load ptr, ptr %4160, align 8, !tbaa !87
  %4162 = load i64, ptr %128, align 8, !tbaa !11
  %4163 = trunc i64 %4162 to i32
  %4164 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %4161, i32 noundef %4163, i32 noundef 0)
  %4165 = load i32, ptr %4164, align 4, !tbaa !9
  %4166 = sext i32 %4165 to i64
  %4167 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4155, i64 %4166
  %4168 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4167, i32 0, i32 1
  %4169 = load double, ptr %4168, align 8, !tbaa !35
  store double %4169, ptr %18, align 8, !tbaa !34
  %4170 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4171 = load ptr, ptr %4170, align 8, !tbaa !18
  %4172 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4173 = load ptr, ptr %4172, align 8, !tbaa !79
  %4174 = load i64, ptr %127, align 8, !tbaa !11
  %4175 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4173, i64 %4174
  %4176 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4175, i32 0, i32 2
  %4177 = load ptr, ptr %4176, align 8, !tbaa !87
  %4178 = load i64, ptr %128, align 8, !tbaa !11
  %4179 = add i64 %4178, 1
  %4180 = trunc i64 %4179 to i32
  %4181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %4177, i32 noundef %4180, i32 noundef 0)
  %4182 = load i32, ptr %4181, align 4, !tbaa !9
  %4183 = sext i32 %4182 to i64
  %4184 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4171, i64 %4183
  %4185 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4184, i32 0, i32 0
  %4186 = load double, ptr %4185, align 8, !tbaa !33
  store double %4186, ptr %15, align 8, !tbaa !34
  %4187 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4188 = load ptr, ptr %4187, align 8, !tbaa !18
  %4189 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4190 = load ptr, ptr %4189, align 8, !tbaa !79
  %4191 = load i64, ptr %127, align 8, !tbaa !11
  %4192 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4190, i64 %4191
  %4193 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4192, i32 0, i32 2
  %4194 = load ptr, ptr %4193, align 8, !tbaa !87
  %4195 = load i64, ptr %128, align 8, !tbaa !11
  %4196 = add i64 %4195, 1
  %4197 = trunc i64 %4196 to i32
  %4198 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %4194, i32 noundef %4197, i32 noundef 0)
  %4199 = load i32, ptr %4198, align 4, !tbaa !9
  %4200 = sext i32 %4199 to i64
  %4201 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4188, i64 %4200
  %4202 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4201, i32 0, i32 1
  %4203 = load double, ptr %4202, align 8, !tbaa !35
  store double %4203, ptr %19, align 8, !tbaa !34
  %4204 = load i64, ptr %128, align 8, !tbaa !11
  %4205 = icmp eq i64 %4204, 0
  br i1 %4205, label %4206, label %4207

4206:                                             ; preds = %4137
  br label %4207

4207:                                             ; preds = %4206, %4137
  %4208 = load i64, ptr %128, align 8, !tbaa !11
  %4209 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4210 = load ptr, ptr %4209, align 8, !tbaa !79
  %4211 = load i64, ptr %127, align 8, !tbaa !11
  %4212 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4210, i64 %4211
  %4213 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4212, i32 0, i32 3
  %4214 = load i64, ptr %4213, align 8, !tbaa !104
  %4215 = sub i64 %4214, 1
  %4216 = icmp eq i64 %4208, %4215
  br i1 %4216, label %4217, label %4218

4217:                                             ; preds = %4207
  br label %4218

4218:                                             ; preds = %4217, %4207
  %4219 = load double, ptr %14, align 8, !tbaa !34
  %4220 = load double, ptr %15, align 8, !tbaa !34
  %4221 = fsub double %4219, %4220
  %4222 = load double, ptr %14, align 8, !tbaa !34
  %4223 = load double, ptr %15, align 8, !tbaa !34
  %4224 = fsub double %4222, %4223
  %4225 = load double, ptr %18, align 8, !tbaa !34
  %4226 = load double, ptr %19, align 8, !tbaa !34
  %4227 = fsub double %4225, %4226
  %4228 = load double, ptr %18, align 8, !tbaa !34
  %4229 = load double, ptr %19, align 8, !tbaa !34
  %4230 = fsub double %4228, %4229
  %4231 = fmul double %4227, %4230
  %4232 = call double @llvm.fmuladd.f64(double %4221, double %4224, double %4231)
  %4233 = call double @sqrt(double noundef %4232) #12
  %4234 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4235 = load ptr, ptr %4234, align 8, !tbaa !79
  %4236 = load i64, ptr %127, align 8, !tbaa !11
  %4237 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4235, i64 %4236
  %4238 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4237, i32 0, i32 6
  %4239 = load ptr, ptr %4238, align 8, !tbaa !107
  %4240 = load i64, ptr %128, align 8, !tbaa !11
  %4241 = trunc i64 %4240 to i32
  %4242 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4239, i32 noundef %4241)
  store double %4233, ptr %4242, align 8, !tbaa !34
  %4243 = load double, ptr %18, align 8, !tbaa !34
  %4244 = load double, ptr %19, align 8, !tbaa !34
  %4245 = fsub double %4243, %4244
  %4246 = fneg double %4245
  %4247 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4248 = load ptr, ptr %4247, align 8, !tbaa !79
  %4249 = load i64, ptr %127, align 8, !tbaa !11
  %4250 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4248, i64 %4249
  %4251 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4250, i32 0, i32 6
  %4252 = load ptr, ptr %4251, align 8, !tbaa !107
  %4253 = load i64, ptr %128, align 8, !tbaa !11
  %4254 = trunc i64 %4253 to i32
  %4255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4252, i32 noundef %4254)
  %4256 = load double, ptr %4255, align 8, !tbaa !34
  %4257 = fdiv double %4246, %4256
  %4258 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4259 = load ptr, ptr %4258, align 8, !tbaa !79
  %4260 = load i64, ptr %127, align 8, !tbaa !11
  %4261 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4259, i64 %4260
  %4262 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4261, i32 0, i32 4
  %4263 = load ptr, ptr %4262, align 8, !tbaa !105
  %4264 = load i64, ptr %128, align 8, !tbaa !11
  %4265 = trunc i64 %4264 to i32
  %4266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4263, i32 noundef %4265)
  store double %4257, ptr %4266, align 8, !tbaa !34
  %4267 = load double, ptr %14, align 8, !tbaa !34
  %4268 = load double, ptr %15, align 8, !tbaa !34
  %4269 = fsub double %4267, %4268
  %4270 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4271 = load ptr, ptr %4270, align 8, !tbaa !79
  %4272 = load i64, ptr %127, align 8, !tbaa !11
  %4273 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4271, i64 %4272
  %4274 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4273, i32 0, i32 6
  %4275 = load ptr, ptr %4274, align 8, !tbaa !107
  %4276 = load i64, ptr %128, align 8, !tbaa !11
  %4277 = trunc i64 %4276 to i32
  %4278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4275, i32 noundef %4277)
  %4279 = load double, ptr %4278, align 8, !tbaa !34
  %4280 = fdiv double %4269, %4279
  %4281 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4282 = load ptr, ptr %4281, align 8, !tbaa !79
  %4283 = load i64, ptr %127, align 8, !tbaa !11
  %4284 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4282, i64 %4283
  %4285 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4284, i32 0, i32 5
  %4286 = load ptr, ptr %4285, align 8, !tbaa !106
  %4287 = load i64, ptr %128, align 8, !tbaa !11
  %4288 = trunc i64 %4287 to i32
  %4289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4286, i32 noundef %4288)
  store double %4280, ptr %4289, align 8, !tbaa !34
  br label %4290

4290:                                             ; preds = %4218
  %4291 = load i64, ptr %128, align 8, !tbaa !11
  %4292 = add i64 %4291, 1
  store i64 %4292, ptr %128, align 8, !tbaa !11
  br label %4127, !llvm.loop !112

4293:                                             ; preds = %4136
  br label %4294

4294:                                             ; preds = %4293
  %4295 = load i64, ptr %127, align 8, !tbaa !11
  %4296 = add i64 %4295, 1
  store i64 %4296, ptr %127, align 8, !tbaa !11
  br label %4120, !llvm.loop !113

4297:                                             ; preds = %4125
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #12
  store i64 0, ptr %129, align 8, !tbaa !11
  br label %4298

4298:                                             ; preds = %4461, %4297
  %4299 = load i64, ptr %129, align 8, !tbaa !11
  %4300 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %4301 = load i64, ptr %4300, align 8, !tbaa !78
  %4302 = icmp ult i64 %4299, %4301
  br i1 %4302, label %4304, label %4303

4303:                                             ; preds = %4298
  store i32 108, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #12
  br label %4464

4304:                                             ; preds = %4298
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #12
  store i64 0, ptr %130, align 8, !tbaa !11
  br label %4305

4305:                                             ; preds = %4457, %4304
  %4306 = load i64, ptr %130, align 8, !tbaa !11
  %4307 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4308 = load ptr, ptr %4307, align 8, !tbaa !79
  %4309 = load i64, ptr %129, align 8, !tbaa !11
  %4310 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4308, i64 %4309
  %4311 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4310, i32 0, i32 3
  %4312 = load i64, ptr %4311, align 8, !tbaa !104
  %4313 = icmp ult i64 %4306, %4312
  br i1 %4313, label %4315, label %4314

4314:                                             ; preds = %4305
  store i32 111, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #12
  br label %4460

4315:                                             ; preds = %4305
  %4316 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4317 = load ptr, ptr %4316, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %131) #12
  %4318 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4319 = load ptr, ptr %4318, align 8, !tbaa !79
  %4320 = load i64, ptr %129, align 8, !tbaa !11
  %4321 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4319, i64 %4320
  %4322 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4321, i32 0, i32 2
  %4323 = load ptr, ptr %4322, align 8, !tbaa !87
  %4324 = load i64, ptr %130, align 8, !tbaa !11
  %4325 = trunc i64 %4324 to i32
  %4326 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4323, i32 noundef %4325)
  store { ptr, i32 } %4326, ptr %132, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %131, ptr align 8 %132, i64 12, i1 false)
  %4327 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %131, i32 noundef 0)
  %4328 = load i32, ptr %4327, align 4, !tbaa !9
  %4329 = sext i32 %4328 to i64
  %4330 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4317, i64 %4329
  %4331 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4330, i32 0, i32 0
  %4332 = load double, ptr %4331, align 8, !tbaa !33
  store double %4332, ptr %14, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %131) #12
  %4333 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4334 = load ptr, ptr %4333, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %133) #12
  %4335 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4336 = load ptr, ptr %4335, align 8, !tbaa !79
  %4337 = load i64, ptr %129, align 8, !tbaa !11
  %4338 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4336, i64 %4337
  %4339 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4338, i32 0, i32 2
  %4340 = load ptr, ptr %4339, align 8, !tbaa !87
  %4341 = load i64, ptr %130, align 8, !tbaa !11
  %4342 = trunc i64 %4341 to i32
  %4343 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4340, i32 noundef %4342)
  store { ptr, i32 } %4343, ptr %134, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %133, ptr align 8 %134, i64 12, i1 false)
  %4344 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %133, i32 noundef 0)
  %4345 = load i32, ptr %4344, align 4, !tbaa !9
  %4346 = sext i32 %4345 to i64
  %4347 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4334, i64 %4346
  %4348 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4347, i32 0, i32 1
  %4349 = load double, ptr %4348, align 8, !tbaa !35
  store double %4349, ptr %18, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %133) #12
  %4350 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4351 = load ptr, ptr %4350, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %135) #12
  %4352 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4353 = load ptr, ptr %4352, align 8, !tbaa !79
  %4354 = load i64, ptr %129, align 8, !tbaa !11
  %4355 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4353, i64 %4354
  %4356 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4355, i32 0, i32 2
  %4357 = load ptr, ptr %4356, align 8, !tbaa !87
  %4358 = load i64, ptr %130, align 8, !tbaa !11
  %4359 = add i64 %4358, 1
  %4360 = trunc i64 %4359 to i32
  %4361 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4357, i32 noundef %4360)
  store { ptr, i32 } %4361, ptr %136, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %135, ptr align 8 %136, i64 12, i1 false)
  %4362 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %135, i32 noundef 0)
  %4363 = load i32, ptr %4362, align 4, !tbaa !9
  %4364 = sext i32 %4363 to i64
  %4365 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4351, i64 %4364
  %4366 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4365, i32 0, i32 0
  %4367 = load double, ptr %4366, align 8, !tbaa !33
  store double %4367, ptr %15, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %135) #12
  %4368 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4369 = load ptr, ptr %4368, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 16, ptr %137) #12
  %4370 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4371 = load ptr, ptr %4370, align 8, !tbaa !79
  %4372 = load i64, ptr %129, align 8, !tbaa !11
  %4373 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4371, i64 %4372
  %4374 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4373, i32 0, i32 2
  %4375 = load ptr, ptr %4374, align 8, !tbaa !87
  %4376 = load i64, ptr %130, align 8, !tbaa !11
  %4377 = add i64 %4376, 1
  %4378 = trunc i64 %4377 to i32
  %4379 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4375, i32 noundef %4378)
  store { ptr, i32 } %4379, ptr %138, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %137, ptr align 8 %138, i64 12, i1 false)
  %4380 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %137, i32 noundef 0)
  %4381 = load i32, ptr %4380, align 4, !tbaa !9
  %4382 = sext i32 %4381 to i64
  %4383 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4369, i64 %4382
  %4384 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4383, i32 0, i32 1
  %4385 = load double, ptr %4384, align 8, !tbaa !35
  store double %4385, ptr %19, align 8, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 16, ptr %137) #12
  %4386 = load double, ptr %14, align 8, !tbaa !34
  %4387 = load double, ptr %15, align 8, !tbaa !34
  %4388 = fsub double %4386, %4387
  %4389 = load double, ptr %14, align 8, !tbaa !34
  %4390 = load double, ptr %15, align 8, !tbaa !34
  %4391 = fsub double %4389, %4390
  %4392 = load double, ptr %18, align 8, !tbaa !34
  %4393 = load double, ptr %19, align 8, !tbaa !34
  %4394 = fsub double %4392, %4393
  %4395 = load double, ptr %18, align 8, !tbaa !34
  %4396 = load double, ptr %19, align 8, !tbaa !34
  %4397 = fsub double %4395, %4396
  %4398 = fmul double %4394, %4397
  %4399 = call double @llvm.fmuladd.f64(double %4388, double %4391, double %4398)
  %4400 = call double @sqrt(double noundef %4399) #12
  %4401 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4402 = load ptr, ptr %4401, align 8, !tbaa !79
  %4403 = load i64, ptr %129, align 8, !tbaa !11
  %4404 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4402, i64 %4403
  %4405 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4404, i32 0, i32 6
  %4406 = load ptr, ptr %4405, align 8, !tbaa !107
  %4407 = load i64, ptr %130, align 8, !tbaa !11
  %4408 = trunc i64 %4407 to i32
  %4409 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4406, i32 noundef %4408)
  store double %4400, ptr %4409, align 8, !tbaa !34
  %4410 = load double, ptr %18, align 8, !tbaa !34
  %4411 = load double, ptr %19, align 8, !tbaa !34
  %4412 = fsub double %4410, %4411
  %4413 = fneg double %4412
  %4414 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4415 = load ptr, ptr %4414, align 8, !tbaa !79
  %4416 = load i64, ptr %129, align 8, !tbaa !11
  %4417 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4415, i64 %4416
  %4418 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4417, i32 0, i32 6
  %4419 = load ptr, ptr %4418, align 8, !tbaa !107
  %4420 = load i64, ptr %130, align 8, !tbaa !11
  %4421 = trunc i64 %4420 to i32
  %4422 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4419, i32 noundef %4421)
  %4423 = load double, ptr %4422, align 8, !tbaa !34
  %4424 = fdiv double %4413, %4423
  %4425 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4426 = load ptr, ptr %4425, align 8, !tbaa !79
  %4427 = load i64, ptr %129, align 8, !tbaa !11
  %4428 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4426, i64 %4427
  %4429 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4428, i32 0, i32 4
  %4430 = load ptr, ptr %4429, align 8, !tbaa !105
  %4431 = load i64, ptr %130, align 8, !tbaa !11
  %4432 = trunc i64 %4431 to i32
  %4433 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4430, i32 noundef %4432)
  store double %4424, ptr %4433, align 8, !tbaa !34
  %4434 = load double, ptr %14, align 8, !tbaa !34
  %4435 = load double, ptr %15, align 8, !tbaa !34
  %4436 = fsub double %4434, %4435
  %4437 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4438 = load ptr, ptr %4437, align 8, !tbaa !79
  %4439 = load i64, ptr %129, align 8, !tbaa !11
  %4440 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4438, i64 %4439
  %4441 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4440, i32 0, i32 6
  %4442 = load ptr, ptr %4441, align 8, !tbaa !107
  %4443 = load i64, ptr %130, align 8, !tbaa !11
  %4444 = trunc i64 %4443 to i32
  %4445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4442, i32 noundef %4444)
  %4446 = load double, ptr %4445, align 8, !tbaa !34
  %4447 = fdiv double %4436, %4446
  %4448 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4449 = load ptr, ptr %4448, align 8, !tbaa !79
  %4450 = load i64, ptr %129, align 8, !tbaa !11
  %4451 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4449, i64 %4450
  %4452 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4451, i32 0, i32 5
  %4453 = load ptr, ptr %4452, align 8, !tbaa !106
  %4454 = load i64, ptr %130, align 8, !tbaa !11
  %4455 = trunc i64 %4454 to i32
  %4456 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4453, i32 noundef %4455)
  store double %4447, ptr %4456, align 8, !tbaa !34
  br label %4457

4457:                                             ; preds = %4315
  %4458 = load i64, ptr %130, align 8, !tbaa !11
  %4459 = add i64 %4458, 1
  store i64 %4459, ptr %130, align 8, !tbaa !11
  br label %4305, !llvm.loop !114

4460:                                             ; preds = %4314
  br label %4461

4461:                                             ; preds = %4460
  %4462 = load i64, ptr %129, align 8, !tbaa !11
  %4463 = add i64 %4462, 1
  store i64 %4463, ptr %129, align 8, !tbaa !11
  br label %4298, !llvm.loop !115

4464:                                             ; preds = %4303
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #12
  store i64 0, ptr %139, align 8, !tbaa !11
  br label %4465

4465:                                             ; preds = %4596, %4464
  %4466 = load i64, ptr %139, align 8, !tbaa !11
  %4467 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %4468 = load i64, ptr %4467, align 8, !tbaa !78
  %4469 = icmp ult i64 %4466, %4468
  br i1 %4469, label %4471, label %4470

4470:                                             ; preds = %4465
  store i32 114, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #12
  br label %4599

4471:                                             ; preds = %4465
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #12
  store i64 0, ptr %140, align 8, !tbaa !11
  br label %4472

4472:                                             ; preds = %4592, %4471
  %4473 = load i64, ptr %140, align 8, !tbaa !11
  %4474 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4475 = load ptr, ptr %4474, align 8, !tbaa !79
  %4476 = load i64, ptr %139, align 8, !tbaa !11
  %4477 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4475, i64 %4476
  %4478 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4477, i32 0, i32 3
  %4479 = load i64, ptr %4478, align 8, !tbaa !104
  %4480 = icmp ult i64 %4473, %4479
  br i1 %4480, label %4482, label %4481

4481:                                             ; preds = %4472
  store i32 117, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #12
  br label %4595

4482:                                             ; preds = %4472
  call void @llvm.lifetime.start.p0(i64 16, ptr %141) #12
  %4483 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4484 = load ptr, ptr %4483, align 8, !tbaa !79
  %4485 = load i64, ptr %139, align 8, !tbaa !11
  %4486 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4484, i64 %4485
  %4487 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4486, i32 0, i32 2
  %4488 = load ptr, ptr %4487, align 8, !tbaa !87
  %4489 = load i64, ptr %140, align 8, !tbaa !11
  %4490 = trunc i64 %4489 to i32
  %4491 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4488, i32 noundef %4490)
  store { ptr, i32 } %4491, ptr %142, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %141, ptr align 8 %142, i64 12, i1 false)
  %4492 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %141, i32 noundef 0)
  %4493 = load i32, ptr %4492, align 4, !tbaa !9
  store i32 %4493, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %141) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr %143) #12
  %4494 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4495 = load ptr, ptr %4494, align 8, !tbaa !79
  %4496 = load i64, ptr %139, align 8, !tbaa !11
  %4497 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4495, i64 %4496
  %4498 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4497, i32 0, i32 2
  %4499 = load ptr, ptr %4498, align 8, !tbaa !87
  %4500 = load i64, ptr %140, align 8, !tbaa !11
  %4501 = add i64 %4500, 1
  %4502 = trunc i64 %4501 to i32
  %4503 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %4499, i32 noundef %4502)
  store { ptr, i32 } %4503, ptr %144, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %143, ptr align 8 %144, i64 12, i1 false)
  %4504 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %143, i32 noundef 0)
  %4505 = load i32, ptr %4504, align 4, !tbaa !9
  store i32 %4505, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 16, ptr %143) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #12
  store i64 0, ptr %145, align 8, !tbaa !11
  br label %4506

4506:                                             ; preds = %4545, %4482
  %4507 = load i64, ptr %145, align 8, !tbaa !11
  %4508 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4509 = load ptr, ptr %4508, align 8, !tbaa !18
  %4510 = load i32, ptr %40, align 4, !tbaa !9
  %4511 = sext i32 %4510 to i64
  %4512 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4509, i64 %4511
  %4513 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4512, i32 0, i32 2
  %4514 = load i32, ptr %4513, align 8, !tbaa !68
  %4515 = sext i32 %4514 to i64
  %4516 = icmp ult i64 %4507, %4515
  br i1 %4516, label %4518, label %4517

4517:                                             ; preds = %4506
  store i32 120, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #12
  br label %4548

4518:                                             ; preds = %4506
  %4519 = load i32, ptr %39, align 4, !tbaa !9
  %4520 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4521 = load ptr, ptr %4520, align 8, !tbaa !18
  %4522 = load i32, ptr %40, align 4, !tbaa !9
  %4523 = sext i32 %4522 to i64
  %4524 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4521, i64 %4523
  %4525 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4524, i32 0, i32 3
  %4526 = load ptr, ptr %4525, align 8, !tbaa !71
  %4527 = load i64, ptr %145, align 8, !tbaa !11
  %4528 = trunc i64 %4527 to i32
  %4529 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4526, i32 noundef %4528)
  %4530 = load i32, ptr %4529, align 4, !tbaa !9
  %4531 = icmp eq i32 %4519, %4530
  br i1 %4531, label %4532, label %4544

4532:                                             ; preds = %4518
  %4533 = load i64, ptr %145, align 8, !tbaa !11
  %4534 = trunc i64 %4533 to i32
  %4535 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4536 = load ptr, ptr %4535, align 8, !tbaa !79
  %4537 = load i64, ptr %139, align 8, !tbaa !11
  %4538 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4536, i64 %4537
  %4539 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4538, i32 0, i32 12
  %4540 = load ptr, ptr %4539, align 8, !tbaa !110
  %4541 = load i64, ptr %140, align 8, !tbaa !11
  %4542 = trunc i64 %4541 to i32
  %4543 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4540, i32 noundef %4542)
  store i32 %4534, ptr %4543, align 4, !tbaa !9
  br label %4544

4544:                                             ; preds = %4532, %4518
  br label %4545

4545:                                             ; preds = %4544
  %4546 = load i64, ptr %145, align 8, !tbaa !11
  %4547 = add i64 %4546, 1
  store i64 %4547, ptr %145, align 8, !tbaa !11
  br label %4506, !llvm.loop !116

4548:                                             ; preds = %4517
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #12
  store i64 0, ptr %146, align 8, !tbaa !11
  br label %4549

4549:                                             ; preds = %4588, %4548
  %4550 = load i64, ptr %146, align 8, !tbaa !11
  %4551 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4552 = load ptr, ptr %4551, align 8, !tbaa !18
  %4553 = load i32, ptr %39, align 4, !tbaa !9
  %4554 = sext i32 %4553 to i64
  %4555 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4552, i64 %4554
  %4556 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4555, i32 0, i32 2
  %4557 = load i32, ptr %4556, align 8, !tbaa !68
  %4558 = sext i32 %4557 to i64
  %4559 = icmp ult i64 %4550, %4558
  br i1 %4559, label %4561, label %4560

4560:                                             ; preds = %4549
  store i32 123, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #12
  br label %4591

4561:                                             ; preds = %4549
  %4562 = load i32, ptr %40, align 4, !tbaa !9
  %4563 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4564 = load ptr, ptr %4563, align 8, !tbaa !18
  %4565 = load i32, ptr %39, align 4, !tbaa !9
  %4566 = sext i32 %4565 to i64
  %4567 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4564, i64 %4566
  %4568 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4567, i32 0, i32 3
  %4569 = load ptr, ptr %4568, align 8, !tbaa !71
  %4570 = load i64, ptr %146, align 8, !tbaa !11
  %4571 = trunc i64 %4570 to i32
  %4572 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4569, i32 noundef %4571)
  %4573 = load i32, ptr %4572, align 4, !tbaa !9
  %4574 = icmp eq i32 %4562, %4573
  br i1 %4574, label %4575, label %4587

4575:                                             ; preds = %4561
  %4576 = load i64, ptr %146, align 8, !tbaa !11
  %4577 = trunc i64 %4576 to i32
  %4578 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4579 = load ptr, ptr %4578, align 8, !tbaa !79
  %4580 = load i64, ptr %139, align 8, !tbaa !11
  %4581 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4579, i64 %4580
  %4582 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4581, i32 0, i32 11
  %4583 = load ptr, ptr %4582, align 8, !tbaa !109
  %4584 = load i64, ptr %140, align 8, !tbaa !11
  %4585 = trunc i64 %4584 to i32
  %4586 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4583, i32 noundef %4585)
  store i32 %4577, ptr %4586, align 4, !tbaa !9
  br label %4587

4587:                                             ; preds = %4575, %4561
  br label %4588

4588:                                             ; preds = %4587
  %4589 = load i64, ptr %146, align 8, !tbaa !11
  %4590 = add i64 %4589, 1
  store i64 %4590, ptr %146, align 8, !tbaa !11
  br label %4549, !llvm.loop !117

4591:                                             ; preds = %4560
  br label %4592

4592:                                             ; preds = %4591
  %4593 = load i64, ptr %140, align 8, !tbaa !11
  %4594 = add i64 %4593, 1
  store i64 %4594, ptr %140, align 8, !tbaa !11
  br label %4472, !llvm.loop !118

4595:                                             ; preds = %4481
  br label %4596

4596:                                             ; preds = %4595
  %4597 = load i64, ptr %139, align 8, !tbaa !11
  %4598 = add i64 %4597, 1
  store i64 %4598, ptr %139, align 8, !tbaa !11
  br label %4465, !llvm.loop !119

4599:                                             ; preds = %4470
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #12
  store i64 0, ptr %147, align 8, !tbaa !11
  br label %4600

4600:                                             ; preds = %4766, %4599
  %4601 = load i64, ptr %147, align 8, !tbaa !11
  %4602 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %4603 = load i64, ptr %4602, align 8, !tbaa !78
  %4604 = icmp ult i64 %4601, %4603
  br i1 %4604, label %4606, label %4605

4605:                                             ; preds = %4600
  store i32 126, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #12
  br label %4769

4606:                                             ; preds = %4600
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #12
  store i64 0, ptr %148, align 8, !tbaa !11
  br label %4607

4607:                                             ; preds = %4762, %4606
  %4608 = load i64, ptr %148, align 8, !tbaa !11
  %4609 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4610 = load ptr, ptr %4609, align 8, !tbaa !79
  %4611 = load i64, ptr %147, align 8, !tbaa !11
  %4612 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4610, i64 %4611
  %4613 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4612, i32 0, i32 3
  %4614 = load i64, ptr %4613, align 8, !tbaa !104
  %4615 = icmp ult i64 %4608, %4614
  br i1 %4615, label %4617, label %4616

4616:                                             ; preds = %4607
  store i32 129, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #12
  br label %4765

4617:                                             ; preds = %4607
  %4618 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4619 = load ptr, ptr %4618, align 8, !tbaa !79
  %4620 = load i64, ptr %147, align 8, !tbaa !11
  %4621 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4619, i64 %4620
  %4622 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4621, i32 0, i32 2
  %4623 = load ptr, ptr %4622, align 8, !tbaa !87
  %4624 = load i64, ptr %148, align 8, !tbaa !11
  %4625 = trunc i64 %4624 to i32
  %4626 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4623, i32 noundef %4625)
  %4627 = load i32, ptr %4626, align 4, !tbaa !9
  store i32 %4627, ptr %10, align 4, !tbaa !9
  %4628 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4629 = load ptr, ptr %4628, align 8, !tbaa !79
  %4630 = load i64, ptr %147, align 8, !tbaa !11
  %4631 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4629, i64 %4630
  %4632 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4631, i32 0, i32 2
  %4633 = load ptr, ptr %4632, align 8, !tbaa !87
  %4634 = load i64, ptr %148, align 8, !tbaa !11
  %4635 = add i64 %4634, 1
  %4636 = trunc i64 %4635 to i32
  %4637 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4633, i32 noundef %4636)
  %4638 = load i32, ptr %4637, align 4, !tbaa !9
  store i32 %4638, ptr %11, align 4, !tbaa !9
  store i8 0, ptr %36, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #12
  store i64 0, ptr %149, align 8, !tbaa !11
  br label %4639

4639:                                             ; preds = %4740, %4617
  %4640 = load i64, ptr %149, align 8, !tbaa !11
  %4641 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4642 = load ptr, ptr %4641, align 8, !tbaa !18
  %4643 = load i32, ptr %10, align 4, !tbaa !9
  %4644 = sext i32 %4643 to i64
  %4645 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4642, i64 %4644
  %4646 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4645, i32 0, i32 4
  %4647 = load i32, ptr %4646, align 8, !tbaa !19
  %4648 = sext i32 %4647 to i64
  %4649 = icmp ult i64 %4640, %4648
  br i1 %4649, label %4651, label %4650

4650:                                             ; preds = %4639
  store i32 132, ptr %63, align 4
  br label %4743

4651:                                             ; preds = %4639
  %4652 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4653 = load ptr, ptr %4652, align 8, !tbaa !18
  %4654 = load i32, ptr %10, align 4, !tbaa !9
  %4655 = sext i32 %4654 to i64
  %4656 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4653, i64 %4655
  %4657 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4656, i32 0, i32 5
  %4658 = load i64, ptr %149, align 8, !tbaa !11
  %4659 = trunc i64 %4658 to i32
  %4660 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %4657, i32 noundef %4659)
  %4661 = load i32, ptr %4660, align 4, !tbaa !9
  store i32 %4661, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #12
  store i64 0, ptr %150, align 8, !tbaa !11
  br label %4662

4662:                                             ; preds = %4731, %4651
  %4663 = load i64, ptr %150, align 8, !tbaa !11
  %4664 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4665 = load ptr, ptr %4664, align 8, !tbaa !30
  %4666 = load i32, ptr %45, align 4, !tbaa !9
  %4667 = sext i32 %4666 to i64
  %4668 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4665, i64 %4667
  %4669 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4668, i32 0, i32 0
  %4670 = load i32, ptr %4669, align 8, !tbaa !36
  %4671 = sext i32 %4670 to i64
  %4672 = icmp ult i64 %4663, %4671
  br i1 %4672, label %4674, label %4673

4673:                                             ; preds = %4662
  store i32 135, ptr %63, align 4
  br label %4734

4674:                                             ; preds = %4662
  %4675 = load i64, ptr %150, align 8, !tbaa !11
  %4676 = trunc i64 %4675 to i32
  store i32 %4676, ptr %7, align 4, !tbaa !9
  %4677 = load i64, ptr %150, align 8, !tbaa !11
  %4678 = add i64 %4677, 1
  %4679 = trunc i64 %4678 to i32
  store i32 %4679, ptr %8, align 4, !tbaa !9
  %4680 = load i32, ptr %8, align 4, !tbaa !9
  %4681 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4682 = load ptr, ptr %4681, align 8, !tbaa !30
  %4683 = load i32, ptr %45, align 4, !tbaa !9
  %4684 = sext i32 %4683 to i64
  %4685 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4682, i64 %4684
  %4686 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4685, i32 0, i32 0
  %4687 = load i32, ptr %4686, align 8, !tbaa !36
  %4688 = sub nsw i32 %4687, 1
  %4689 = icmp sgt i32 %4680, %4688
  br i1 %4689, label %4690, label %4701

4690:                                             ; preds = %4674
  %4691 = load i32, ptr %8, align 4, !tbaa !9
  %4692 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4693 = load ptr, ptr %4692, align 8, !tbaa !30
  %4694 = load i32, ptr %45, align 4, !tbaa !9
  %4695 = sext i32 %4694 to i64
  %4696 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4693, i64 %4695
  %4697 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4696, i32 0, i32 0
  %4698 = load i32, ptr %4697, align 8, !tbaa !36
  %4699 = sub nsw i32 %4698, 0
  %4700 = sub nsw i32 %4691, %4699
  store i32 %4700, ptr %8, align 4, !tbaa !9
  br label %4701

4701:                                             ; preds = %4690, %4674
  %4702 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4703 = load ptr, ptr %4702, align 8, !tbaa !30
  %4704 = load i32, ptr %45, align 4, !tbaa !9
  %4705 = sext i32 %4704 to i64
  %4706 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4703, i64 %4705
  %4707 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4706, i32 0, i32 2
  %4708 = load ptr, ptr %4707, align 8, !tbaa !31
  %4709 = load i32, ptr %7, align 4, !tbaa !9
  %4710 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4708, i32 noundef %4709)
  %4711 = load i32, ptr %4710, align 4, !tbaa !9
  store i32 %4711, ptr %43, align 4, !tbaa !9
  %4712 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4713 = load ptr, ptr %4712, align 8, !tbaa !30
  %4714 = load i32, ptr %45, align 4, !tbaa !9
  %4715 = sext i32 %4714 to i64
  %4716 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4713, i64 %4715
  %4717 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4716, i32 0, i32 2
  %4718 = load ptr, ptr %4717, align 8, !tbaa !31
  %4719 = load i32, ptr %8, align 4, !tbaa !9
  %4720 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4718, i32 noundef %4719)
  %4721 = load i32, ptr %4720, align 4, !tbaa !9
  store i32 %4721, ptr %44, align 4, !tbaa !9
  %4722 = load i32, ptr %43, align 4, !tbaa !9
  %4723 = load i32, ptr %10, align 4, !tbaa !9
  %4724 = icmp eq i32 %4722, %4723
  br i1 %4724, label %4725, label %4730

4725:                                             ; preds = %4701
  %4726 = load i32, ptr %44, align 4, !tbaa !9
  %4727 = load i32, ptr %11, align 4, !tbaa !9
  %4728 = icmp eq i32 %4726, %4727
  br i1 %4728, label %4729, label %4730

4729:                                             ; preds = %4725
  store i8 1, ptr %36, align 1, !tbaa !47
  store i32 135, ptr %63, align 4
  br label %4734

4730:                                             ; preds = %4725, %4701
  br label %4731

4731:                                             ; preds = %4730
  %4732 = load i64, ptr %150, align 8, !tbaa !11
  %4733 = add i64 %4732, 1
  store i64 %4733, ptr %150, align 8, !tbaa !11
  br label %4662, !llvm.loop !120

4734:                                             ; preds = %4729, %4673
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #12
  br label %4735

4735:                                             ; preds = %4734
  %4736 = load i8, ptr %36, align 1, !tbaa !47, !range !50, !noundef !51
  %4737 = trunc i8 %4736 to i1
  br i1 %4737, label %4738, label %4739

4738:                                             ; preds = %4735
  store i32 132, ptr %63, align 4
  br label %4743

4739:                                             ; preds = %4735
  br label %4740

4740:                                             ; preds = %4739
  %4741 = load i64, ptr %149, align 8, !tbaa !11
  %4742 = add i64 %4741, 1
  store i64 %4742, ptr %149, align 8, !tbaa !11
  br label %4639, !llvm.loop !121

4743:                                             ; preds = %4738, %4650
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #12
  br label %4744

4744:                                             ; preds = %4743
  %4745 = load i8, ptr %36, align 1, !tbaa !47, !range !50, !noundef !51
  %4746 = trunc i8 %4745 to i1
  br i1 %4746, label %4747, label %4758

4747:                                             ; preds = %4744
  %4748 = load i32, ptr %45, align 4, !tbaa !9
  %4749 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %4750 = load ptr, ptr %4749, align 8, !tbaa !79
  %4751 = load i64, ptr %147, align 8, !tbaa !11
  %4752 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4750, i64 %4751
  %4753 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %4752, i32 0, i32 10
  %4754 = load ptr, ptr %4753, align 8, !tbaa !108
  %4755 = load i64, ptr %148, align 8, !tbaa !11
  %4756 = trunc i64 %4755 to i32
  %4757 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4754, i32 noundef %4756)
  store i32 %4748, ptr %4757, align 4, !tbaa !9
  br label %4761

4758:                                             ; preds = %4744
  %4759 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.49)
  %4760 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4759, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

4761:                                             ; preds = %4747
  br label %4762

4762:                                             ; preds = %4761
  %4763 = load i64, ptr %148, align 8, !tbaa !11
  %4764 = add i64 %4763, 1
  store i64 %4764, ptr %148, align 8, !tbaa !11
  br label %4607, !llvm.loop !122

4765:                                             ; preds = %4616
  br label %4766

4766:                                             ; preds = %4765
  %4767 = load i64, ptr %147, align 8, !tbaa !11
  %4768 = add i64 %4767, 1
  store i64 %4768, ptr %147, align 8, !tbaa !11
  br label %4600, !llvm.loop !123

4769:                                             ; preds = %4605
  %4770 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.50)
  %4771 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4770, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4772 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4773 = load ptr, ptr %4772, align 8, !tbaa !18
  %4774 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4773, i64 0
  %4775 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4774, i32 0, i32 2
  %4776 = load i32, ptr %4775, align 8, !tbaa !68
  store i32 %4776, ptr %46, align 4, !tbaa !9
  %4777 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4778 = load ptr, ptr %4777, align 8, !tbaa !18
  %4779 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4778, i64 0
  %4780 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4779, i32 0, i32 2
  %4781 = load i32, ptr %4780, align 8, !tbaa !68
  store i32 %4781, ptr %47, align 4, !tbaa !9
  %4782 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4783 = load ptr, ptr %4782, align 8, !tbaa !18
  %4784 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4783, i64 0
  %4785 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4784, i32 0, i32 2
  %4786 = load i32, ptr %4785, align 8, !tbaa !68
  store i32 %4786, ptr %48, align 4, !tbaa !9
  store i32 0, ptr %49, align 4, !tbaa !9
  store i32 0, ptr %50, align 4, !tbaa !9
  %4787 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4788 = load ptr, ptr %4787, align 8, !tbaa !18
  %4789 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4788, i64 0
  %4790 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4789, i32 0, i32 2
  %4791 = load i32, ptr %4790, align 8, !tbaa !68
  %4792 = icmp eq i32 %4791, 2
  br i1 %4792, label %4793, label %4797

4793:                                             ; preds = %4769
  %4794 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.51)
  %4795 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4794, i32 noundef 0)
  %4796 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4795, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %4797

4797:                                             ; preds = %4793, %4769
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #12
  store i64 1, ptr %151, align 8, !tbaa !11
  br label %4798

4798:                                             ; preds = %4864, %4797
  %4799 = load i64, ptr %151, align 8, !tbaa !11
  %4800 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %4801 = load i64, ptr %4800, align 8, !tbaa !13
  %4802 = icmp ult i64 %4799, %4801
  br i1 %4802, label %4804, label %4803

4803:                                             ; preds = %4798
  store i32 138, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #12
  br label %4867

4804:                                             ; preds = %4798
  %4805 = load i32, ptr %46, align 4, !tbaa !9
  %4806 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4807 = load ptr, ptr %4806, align 8, !tbaa !18
  %4808 = load i64, ptr %151, align 8, !tbaa !11
  %4809 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4807, i64 %4808
  %4810 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4809, i32 0, i32 2
  %4811 = load i32, ptr %4810, align 8, !tbaa !68
  %4812 = add nsw i32 %4805, %4811
  store i32 %4812, ptr %46, align 4, !tbaa !9
  %4813 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4814 = load ptr, ptr %4813, align 8, !tbaa !18
  %4815 = load i64, ptr %151, align 8, !tbaa !11
  %4816 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4814, i64 %4815
  %4817 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4816, i32 0, i32 2
  %4818 = load i32, ptr %4817, align 8, !tbaa !68
  %4819 = load i32, ptr %47, align 4, !tbaa !9
  %4820 = icmp slt i32 %4818, %4819
  br i1 %4820, label %4821, label %4824

4821:                                             ; preds = %4804
  %4822 = load i64, ptr %151, align 8, !tbaa !11
  %4823 = trunc i64 %4822 to i32
  store i32 %4823, ptr %49, align 4, !tbaa !9
  br label %4824

4824:                                             ; preds = %4821, %4804
  %4825 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4826 = load ptr, ptr %4825, align 8, !tbaa !18
  %4827 = load i64, ptr %151, align 8, !tbaa !11
  %4828 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4826, i64 %4827
  %4829 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4828, i32 0, i32 2
  %4830 = load i32, ptr %4829, align 8, !tbaa !68
  %4831 = load i32, ptr %48, align 4, !tbaa !9
  %4832 = icmp sgt i32 %4830, %4831
  br i1 %4832, label %4833, label %4836

4833:                                             ; preds = %4824
  %4834 = load i64, ptr %151, align 8, !tbaa !11
  %4835 = trunc i64 %4834 to i32
  store i32 %4835, ptr %50, align 4, !tbaa !9
  br label %4836

4836:                                             ; preds = %4833, %4824
  %4837 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4838 = load ptr, ptr %4837, align 8, !tbaa !18
  %4839 = load i64, ptr %151, align 8, !tbaa !11
  %4840 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4838, i64 %4839
  %4841 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4840, i32 0, i32 2
  %4842 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %47, ptr noundef nonnull align 4 dereferenceable(4) %4841)
  %4843 = load i32, ptr %4842, align 4, !tbaa !9
  store i32 %4843, ptr %47, align 4, !tbaa !9
  %4844 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4845 = load ptr, ptr %4844, align 8, !tbaa !18
  %4846 = load i64, ptr %151, align 8, !tbaa !11
  %4847 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4845, i64 %4846
  %4848 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4847, i32 0, i32 2
  %4849 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %4848)
  %4850 = load i32, ptr %4849, align 4, !tbaa !9
  store i32 %4850, ptr %48, align 4, !tbaa !9
  %4851 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %4852 = load ptr, ptr %4851, align 8, !tbaa !18
  %4853 = load i64, ptr %151, align 8, !tbaa !11
  %4854 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4852, i64 %4853
  %4855 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %4854, i32 0, i32 2
  %4856 = load i32, ptr %4855, align 8, !tbaa !68
  %4857 = icmp eq i32 %4856, 2
  br i1 %4857, label %4858, label %4863

4858:                                             ; preds = %4836
  %4859 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.51)
  %4860 = load i64, ptr %151, align 8, !tbaa !11
  %4861 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %4859, i64 noundef %4860)
  %4862 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4861, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %4863

4863:                                             ; preds = %4858, %4836
  br label %4864

4864:                                             ; preds = %4863
  %4865 = load i64, ptr %151, align 8, !tbaa !11
  %4866 = add i64 %4865, 1
  store i64 %4866, ptr %151, align 8, !tbaa !11
  br label %4798, !llvm.loop !124

4867:                                             ; preds = %4803
  %4868 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.52)
  %4869 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %4870 = load i64, ptr %4869, align 8, !tbaa !13
  %4871 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %4868, i64 noundef %4870)
  %4872 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4871, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4873 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.53)
  %4874 = load i32, ptr %46, align 4, !tbaa !9
  %4875 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4873, i32 noundef %4874)
  %4876 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4875, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4877 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.53)
  %4878 = load i32, ptr %46, align 4, !tbaa !9
  %4879 = sext i32 %4878 to i64
  %4880 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 21
  %4881 = load i64, ptr %4880, align 8, !tbaa !13
  %4882 = udiv i64 %4879, %4881
  %4883 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %4877, i64 noundef %4882)
  %4884 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4883, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4885 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.54)
  %4886 = load i32, ptr %47, align 4, !tbaa !9
  %4887 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4885, i32 noundef %4886)
  %4888 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %4887, ptr noundef @.str.55)
  %4889 = load i32, ptr %49, align 4, !tbaa !9
  %4890 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4888, i32 noundef %4889)
  %4891 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4890, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4892 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.56)
  %4893 = load i32, ptr %48, align 4, !tbaa !9
  %4894 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4892, i32 noundef %4893)
  %4895 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %4894, ptr noundef @.str.55)
  %4896 = load i32, ptr %50, align 4, !tbaa !9
  %4897 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %4895, i32 noundef %4896)
  %4898 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4897, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4899 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.22)
  %4900 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4899, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %4901 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.57)
  %4902 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4901, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #12
  store i64 0, ptr %152, align 8, !tbaa !11
  br label %4903

4903:                                             ; preds = %4923, %4867
  %4904 = load i64, ptr %152, align 8, !tbaa !11
  %4905 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %4906 = load i64, ptr %4905, align 8, !tbaa !29
  %4907 = icmp ult i64 %4904, %4906
  br i1 %4907, label %4909, label %4908

4908:                                             ; preds = %4903
  store i32 141, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #12
  br label %4930

4909:                                             ; preds = %4903
  %4910 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #14
  %4911 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4912 = load ptr, ptr %4911, align 8, !tbaa !30
  %4913 = load i64, ptr %152, align 8, !tbaa !11
  %4914 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4912, i64 %4913
  %4915 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4914, i32 0, i32 3
  %4916 = load i32, ptr %4915, align 8, !tbaa !44
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4910, i32 noundef %4916, i32 noundef 1)
          to label %4917 unwind label %4926

4917:                                             ; preds = %4909
  %4918 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4919 = load ptr, ptr %4918, align 8, !tbaa !30
  %4920 = load i64, ptr %152, align 8, !tbaa !11
  %4921 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4919, i64 %4920
  %4922 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4921, i32 0, i32 9
  store ptr %4910, ptr %4922, align 8, !tbaa !125
  br label %4923

4923:                                             ; preds = %4917
  %4924 = load i64, ptr %152, align 8, !tbaa !11
  %4925 = add i64 %4924, 1
  store i64 %4925, ptr %152, align 8, !tbaa !11
  br label %4903, !llvm.loop !126

4926:                                             ; preds = %4909
  %4927 = landingpad { ptr, i32 }
          cleanup
  %4928 = extractvalue { ptr, i32 } %4927, 0
  store ptr %4928, ptr %58, align 8
  %4929 = extractvalue { ptr, i32 } %4927, 1
  store i32 %4929, ptr %59, align 4
  call void @_ZdlPvm(ptr noundef %4910, i64 noundef 40) #15
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #12
  br label %5789

4930:                                             ; preds = %4908
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #12
  store i64 0, ptr %153, align 8, !tbaa !11
  br label %4931

4931:                                             ; preds = %5046, %4930
  %4932 = load i64, ptr %153, align 8, !tbaa !11
  %4933 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 27
  %4934 = load i64, ptr %4933, align 8, !tbaa !28
  %4935 = icmp ult i64 %4932, %4934
  br i1 %4935, label %4937, label %4936

4936:                                             ; preds = %4931
  store i32 144, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #12
  br label %5049

4937:                                             ; preds = %4931
  %4938 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %4939 = load ptr, ptr %4938, align 8, !tbaa !56
  %4940 = load i64, ptr %153, align 8, !tbaa !11
  %4941 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %4939, i64 %4940
  %4942 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %4941, i32 0, i32 2
  %4943 = load i32, ptr %4942, align 8, !tbaa !57
  store i32 %4943, ptr %41, align 4, !tbaa !9
  %4944 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %4945 = load ptr, ptr %4944, align 8, !tbaa !56
  %4946 = load i64, ptr %153, align 8, !tbaa !11
  %4947 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %4945, i64 %4946
  %4948 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %4947, i32 0, i32 3
  %4949 = load i32, ptr %4948, align 4, !tbaa !60
  store i32 %4949, ptr %42, align 4, !tbaa !9
  %4950 = load i32, ptr %41, align 4, !tbaa !9
  %4951 = icmp sgt i32 %4950, -1
  br i1 %4951, label %4952, label %4997

4952:                                             ; preds = %4937
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #12
  store i64 0, ptr %154, align 8, !tbaa !11
  br label %4953

4953:                                             ; preds = %4993, %4952
  %4954 = load i64, ptr %154, align 8, !tbaa !11
  %4955 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4956 = load ptr, ptr %4955, align 8, !tbaa !30
  %4957 = load i32, ptr %41, align 4, !tbaa !9
  %4958 = sext i32 %4957 to i64
  %4959 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4956, i64 %4958
  %4960 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4959, i32 0, i32 3
  %4961 = load i32, ptr %4960, align 8, !tbaa !44
  %4962 = sext i32 %4961 to i64
  %4963 = icmp ult i64 %4954, %4962
  br i1 %4963, label %4965, label %4964

4964:                                             ; preds = %4953
  store i32 147, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #12
  br label %4996

4965:                                             ; preds = %4953
  %4966 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4967 = load ptr, ptr %4966, align 8, !tbaa !30
  %4968 = load i32, ptr %41, align 4, !tbaa !9
  %4969 = sext i32 %4968 to i64
  %4970 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4967, i64 %4969
  %4971 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4970, i32 0, i32 5
  %4972 = load ptr, ptr %4971, align 8, !tbaa !45
  %4973 = load i64, ptr %154, align 8, !tbaa !11
  %4974 = trunc i64 %4973 to i32
  %4975 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4972, i32 noundef %4974)
  %4976 = load i32, ptr %4975, align 4, !tbaa !9
  %4977 = load i32, ptr %42, align 4, !tbaa !9
  %4978 = icmp eq i32 %4976, %4977
  br i1 %4978, label %4979, label %4992

4979:                                             ; preds = %4965
  %4980 = load i64, ptr %153, align 8, !tbaa !11
  %4981 = trunc i64 %4980 to i32
  %4982 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %4983 = load ptr, ptr %4982, align 8, !tbaa !30
  %4984 = load i32, ptr %41, align 4, !tbaa !9
  %4985 = sext i32 %4984 to i64
  %4986 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4983, i64 %4985
  %4987 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %4986, i32 0, i32 9
  %4988 = load ptr, ptr %4987, align 8, !tbaa !125
  %4989 = load i64, ptr %154, align 8, !tbaa !11
  %4990 = trunc i64 %4989 to i32
  %4991 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4988, i32 noundef %4990)
  store i32 %4981, ptr %4991, align 4, !tbaa !9
  br label %4992

4992:                                             ; preds = %4979, %4965
  br label %4993

4993:                                             ; preds = %4992
  %4994 = load i64, ptr %154, align 8, !tbaa !11
  %4995 = add i64 %4994, 1
  store i64 %4995, ptr %154, align 8, !tbaa !11
  br label %4953, !llvm.loop !127

4996:                                             ; preds = %4964
  br label %4997

4997:                                             ; preds = %4996, %4937
  %4998 = load i32, ptr %42, align 4, !tbaa !9
  %4999 = icmp sgt i32 %4998, -1
  br i1 %4999, label %5000, label %5045

5000:                                             ; preds = %4997
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #12
  store i64 0, ptr %155, align 8, !tbaa !11
  br label %5001

5001:                                             ; preds = %5041, %5000
  %5002 = load i64, ptr %155, align 8, !tbaa !11
  %5003 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5004 = load ptr, ptr %5003, align 8, !tbaa !30
  %5005 = load i32, ptr %42, align 4, !tbaa !9
  %5006 = sext i32 %5005 to i64
  %5007 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5004, i64 %5006
  %5008 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5007, i32 0, i32 3
  %5009 = load i32, ptr %5008, align 8, !tbaa !44
  %5010 = sext i32 %5009 to i64
  %5011 = icmp ult i64 %5002, %5010
  br i1 %5011, label %5013, label %5012

5012:                                             ; preds = %5001
  store i32 150, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #12
  br label %5044

5013:                                             ; preds = %5001
  %5014 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5015 = load ptr, ptr %5014, align 8, !tbaa !30
  %5016 = load i32, ptr %42, align 4, !tbaa !9
  %5017 = sext i32 %5016 to i64
  %5018 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5015, i64 %5017
  %5019 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5018, i32 0, i32 5
  %5020 = load ptr, ptr %5019, align 8, !tbaa !45
  %5021 = load i64, ptr %155, align 8, !tbaa !11
  %5022 = trunc i64 %5021 to i32
  %5023 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5020, i32 noundef %5022)
  %5024 = load i32, ptr %5023, align 4, !tbaa !9
  %5025 = load i32, ptr %41, align 4, !tbaa !9
  %5026 = icmp eq i32 %5024, %5025
  br i1 %5026, label %5027, label %5040

5027:                                             ; preds = %5013
  %5028 = load i64, ptr %153, align 8, !tbaa !11
  %5029 = trunc i64 %5028 to i32
  %5030 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5031 = load ptr, ptr %5030, align 8, !tbaa !30
  %5032 = load i32, ptr %42, align 4, !tbaa !9
  %5033 = sext i32 %5032 to i64
  %5034 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5031, i64 %5033
  %5035 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5034, i32 0, i32 9
  %5036 = load ptr, ptr %5035, align 8, !tbaa !125
  %5037 = load i64, ptr %155, align 8, !tbaa !11
  %5038 = trunc i64 %5037 to i32
  %5039 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5036, i32 noundef %5038)
  store i32 %5029, ptr %5039, align 4, !tbaa !9
  br label %5040

5040:                                             ; preds = %5027, %5013
  br label %5041

5041:                                             ; preds = %5040
  %5042 = load i64, ptr %155, align 8, !tbaa !11
  %5043 = add i64 %5042, 1
  store i64 %5043, ptr %155, align 8, !tbaa !11
  br label %5001, !llvm.loop !128

5044:                                             ; preds = %5012
  br label %5045

5045:                                             ; preds = %5044, %4997
  br label %5046

5046:                                             ; preds = %5045
  %5047 = load i64, ptr %153, align 8, !tbaa !11
  %5048 = add i64 %5047, 1
  store i64 %5048, ptr %153, align 8, !tbaa !11
  br label %4931, !llvm.loop !129

5049:                                             ; preds = %4936
  %5050 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  store i64 0, ptr %5050, align 8, !tbaa !130
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #12
  store i64 0, ptr %156, align 8, !tbaa !11
  br label %5051

5051:                                             ; preds = %5094, %5049
  %5052 = load i64, ptr %156, align 8, !tbaa !11
  %5053 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5054 = load i64, ptr %5053, align 8, !tbaa !29
  %5055 = icmp ult i64 %5052, %5054
  br i1 %5055, label %5057, label %5056

5056:                                             ; preds = %5051
  store i32 153, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #12
  br label %5097

5057:                                             ; preds = %5051
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #12
  store i64 0, ptr %157, align 8, !tbaa !11
  br label %5058

5058:                                             ; preds = %5090, %5057
  %5059 = load i64, ptr %157, align 8, !tbaa !11
  %5060 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5061 = load ptr, ptr %5060, align 8, !tbaa !30
  %5062 = load i64, ptr %156, align 8, !tbaa !11
  %5063 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5061, i64 %5062
  %5064 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5063, i32 0, i32 3
  %5065 = load i32, ptr %5064, align 8, !tbaa !44
  %5066 = sext i32 %5065 to i64
  %5067 = icmp ult i64 %5059, %5066
  br i1 %5067, label %5069, label %5068

5068:                                             ; preds = %5058
  store i32 156, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #12
  br label %5093

5069:                                             ; preds = %5058
  %5070 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5071 = load ptr, ptr %5070, align 8, !tbaa !30
  %5072 = load i64, ptr %156, align 8, !tbaa !11
  %5073 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5071, i64 %5072
  %5074 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5073, i32 0, i32 5
  %5075 = load ptr, ptr %5074, align 8, !tbaa !45
  %5076 = load i64, ptr %157, align 8, !tbaa !11
  %5077 = trunc i64 %5076 to i32
  %5078 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5075, i32 noundef %5077)
  %5079 = load i32, ptr %5078, align 4, !tbaa !9
  store i32 %5079, ptr %9, align 4, !tbaa !9
  %5080 = load i32, ptr %9, align 4, !tbaa !9
  %5081 = sext i32 %5080 to i64
  %5082 = load i64, ptr %156, align 8, !tbaa !11
  %5083 = icmp ugt i64 %5081, %5082
  br i1 %5083, label %5084, label %5089

5084:                                             ; preds = %5069
  %5085 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5086 = load i64, ptr %5085, align 8, !tbaa !130
  %5087 = add i64 %5086, 1
  %5088 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  store i64 %5087, ptr %5088, align 8, !tbaa !130
  br label %5089

5089:                                             ; preds = %5084, %5069
  br label %5090

5090:                                             ; preds = %5089
  %5091 = load i64, ptr %157, align 8, !tbaa !11
  %5092 = add i64 %5091, 1
  store i64 %5092, ptr %157, align 8, !tbaa !11
  br label %5058, !llvm.loop !131

5093:                                             ; preds = %5068
  br label %5094

5094:                                             ; preds = %5093
  %5095 = load i64, ptr %156, align 8, !tbaa !11
  %5096 = add i64 %5095, 1
  store i64 %5096, ptr %156, align 8, !tbaa !11
  br label %5051, !llvm.loop !132

5097:                                             ; preds = %5056
  %5098 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5099 = load i64, ptr %5098, align 8, !tbaa !130
  %5100 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %5099, i64 64)
  %5101 = extractvalue { i64, i1 } %5100, 1
  %5102 = extractvalue { i64, i1 } %5100, 0
  %5103 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %5102, i64 8)
  %5104 = extractvalue { i64, i1 } %5103, 1
  %5105 = or i1 %5101, %5104
  %5106 = extractvalue { i64, i1 } %5103, 0
  %5107 = select i1 %5105, i64 -1, i64 %5106
  %5108 = call noalias noundef nonnull ptr @_Znam(i64 noundef %5107) #14
  store i64 %5099, ptr %5108, align 16
  %5109 = getelementptr inbounds i8, ptr %5108, i64 8
  %5110 = icmp eq i64 %5099, 0
  br i1 %5110, label %5118, label %5111

5111:                                             ; preds = %5097
  %5112 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5109, i64 %5099
  br label %5113

5113:                                             ; preds = %5115, %5111
  %5114 = phi ptr [ %5109, %5111 ], [ %5116, %5115 ]
  invoke void @_ZN13EulerSolver2D9face_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %5114)
          to label %5115 unwind label %5127

5115:                                             ; preds = %5113
  %5116 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5114, i64 1
  %5117 = icmp eq ptr %5116, %5112
  br i1 %5117, label %5118, label %5113

5118:                                             ; preds = %5115, %5097
  %5119 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  store ptr %5109, ptr %5119, align 8, !tbaa !133
  %5120 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  store i64 0, ptr %5120, align 8, !tbaa !130
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #12
  store i64 0, ptr %158, align 8, !tbaa !11
  br label %5121

5121:                                             ; preds = %5264, %5118
  %5122 = load i64, ptr %158, align 8, !tbaa !11
  %5123 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5124 = load i64, ptr %5123, align 8, !tbaa !29
  %5125 = icmp ult i64 %5122, %5124
  br i1 %5125, label %5137, label %5126

5126:                                             ; preds = %5121
  store i32 159, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #12
  br label %5267

5127:                                             ; preds = %5113
  %5128 = landingpad { ptr, i32 }
          cleanup
  %5129 = extractvalue { ptr, i32 } %5128, 0
  store ptr %5129, ptr %58, align 8
  %5130 = extractvalue { ptr, i32 } %5128, 1
  store i32 %5130, ptr %59, align 4
  %5131 = icmp eq ptr %5109, %5114
  br i1 %5131, label %5136, label %5132

5132:                                             ; preds = %5132, %5127
  %5133 = phi ptr [ %5114, %5127 ], [ %5134, %5132 ]
  %5134 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5133, i64 -1
  call void @_ZN13EulerSolver2D9face_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %5134) #12
  %5135 = icmp eq ptr %5134, %5109
  br i1 %5135, label %5136, label %5132

5136:                                             ; preds = %5132, %5127
  call void @_ZdaPvm(ptr noundef %5108, i64 noundef %5107) #15
  br label %5789

5137:                                             ; preds = %5121
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #12
  store i64 0, ptr %159, align 8, !tbaa !11
  br label %5138

5138:                                             ; preds = %5260, %5137
  %5139 = load i64, ptr %159, align 8, !tbaa !11
  %5140 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5141 = load ptr, ptr %5140, align 8, !tbaa !30
  %5142 = load i64, ptr %158, align 8, !tbaa !11
  %5143 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5141, i64 %5142
  %5144 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5143, i32 0, i32 3
  %5145 = load i32, ptr %5144, align 8, !tbaa !44
  %5146 = sext i32 %5145 to i64
  %5147 = icmp ult i64 %5139, %5146
  br i1 %5147, label %5149, label %5148

5148:                                             ; preds = %5138
  store i32 162, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #12
  br label %5263

5149:                                             ; preds = %5138
  %5150 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5151 = load ptr, ptr %5150, align 8, !tbaa !30
  %5152 = load i64, ptr %158, align 8, !tbaa !11
  %5153 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5151, i64 %5152
  %5154 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5153, i32 0, i32 5
  %5155 = load ptr, ptr %5154, align 8, !tbaa !45
  %5156 = load i64, ptr %159, align 8, !tbaa !11
  %5157 = trunc i64 %5156 to i32
  %5158 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5155, i32 noundef %5157)
  %5159 = load i32, ptr %5158, align 4, !tbaa !9
  store i32 %5159, ptr %9, align 4, !tbaa !9
  %5160 = load i32, ptr %9, align 4, !tbaa !9
  %5161 = sext i32 %5160 to i64
  %5162 = load i64, ptr %158, align 8, !tbaa !11
  %5163 = icmp ugt i64 %5161, %5162
  br i1 %5163, label %5164, label %5254

5164:                                             ; preds = %5149
  %5165 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5166 = load i64, ptr %5165, align 8, !tbaa !130
  %5167 = add i64 %5166, 1
  %5168 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  store i64 %5167, ptr %5168, align 8, !tbaa !130
  %5169 = load i64, ptr %158, align 8, !tbaa !11
  %5170 = trunc i64 %5169 to i32
  %5171 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5172 = load ptr, ptr %5171, align 8, !tbaa !133
  %5173 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5174 = load i64, ptr %5173, align 8, !tbaa !130
  %5175 = sub i64 %5174, 1
  %5176 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5172, i64 %5175
  %5177 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5176, i32 0, i32 2
  store i32 %5170, ptr %5177, align 8, !tbaa !134
  %5178 = load i32, ptr %9, align 4, !tbaa !9
  %5179 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5180 = load ptr, ptr %5179, align 8, !tbaa !133
  %5181 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5182 = load i64, ptr %5181, align 8, !tbaa !130
  %5183 = sub i64 %5182, 1
  %5184 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5180, i64 %5183
  %5185 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5184, i32 0, i32 3
  store i32 %5178, ptr %5185, align 4, !tbaa !136
  %5186 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5187 = load ptr, ptr %5186, align 8, !tbaa !30
  %5188 = load i64, ptr %158, align 8, !tbaa !11
  %5189 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5187, i64 %5188
  %5190 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5189, i32 0, i32 9
  %5191 = load ptr, ptr %5190, align 8, !tbaa !125
  %5192 = load i64, ptr %159, align 8, !tbaa !11
  %5193 = trunc i64 %5192 to i32
  %5194 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5191, i32 noundef %5193)
  %5195 = load i32, ptr %5194, align 4, !tbaa !9
  store i32 %5195, ptr %51, align 4, !tbaa !9
  %5196 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %5197 = load ptr, ptr %5196, align 8, !tbaa !56
  %5198 = load i32, ptr %51, align 4, !tbaa !9
  %5199 = sext i32 %5198 to i64
  %5200 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5197, i64 %5199
  %5201 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5200, i32 0, i32 0
  %5202 = load i32, ptr %5201, align 8, !tbaa !62
  store i32 %5202, ptr %10, align 4, !tbaa !9
  %5203 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %5204 = load ptr, ptr %5203, align 8, !tbaa !56
  %5205 = load i32, ptr %51, align 4, !tbaa !9
  %5206 = sext i32 %5205 to i64
  %5207 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5204, i64 %5206
  %5208 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5207, i32 0, i32 1
  %5209 = load i32, ptr %5208, align 4, !tbaa !63
  store i32 %5209, ptr %11, align 4, !tbaa !9
  %5210 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 28
  %5211 = load ptr, ptr %5210, align 8, !tbaa !56
  %5212 = load i32, ptr %51, align 4, !tbaa !9
  %5213 = sext i32 %5212 to i64
  %5214 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5211, i64 %5213
  %5215 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %5214, i32 0, i32 2
  %5216 = load i32, ptr %5215, align 8, !tbaa !57
  %5217 = load i32, ptr %9, align 4, !tbaa !9
  %5218 = icmp eq i32 %5216, %5217
  br i1 %5218, label %5219, label %5236

5219:                                             ; preds = %5164
  %5220 = load i32, ptr %10, align 4, !tbaa !9
  %5221 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5222 = load ptr, ptr %5221, align 8, !tbaa !133
  %5223 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5224 = load i64, ptr %5223, align 8, !tbaa !130
  %5225 = sub i64 %5224, 1
  %5226 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5222, i64 %5225
  %5227 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5226, i32 0, i32 0
  store i32 %5220, ptr %5227, align 8, !tbaa !137
  %5228 = load i32, ptr %11, align 4, !tbaa !9
  %5229 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5230 = load ptr, ptr %5229, align 8, !tbaa !133
  %5231 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5232 = load i64, ptr %5231, align 8, !tbaa !130
  %5233 = sub i64 %5232, 1
  %5234 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5230, i64 %5233
  %5235 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5234, i32 0, i32 1
  store i32 %5228, ptr %5235, align 4, !tbaa !138
  br label %5253

5236:                                             ; preds = %5164
  %5237 = load i32, ptr %11, align 4, !tbaa !9
  %5238 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5239 = load ptr, ptr %5238, align 8, !tbaa !133
  %5240 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5241 = load i64, ptr %5240, align 8, !tbaa !130
  %5242 = sub i64 %5241, 1
  %5243 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5239, i64 %5242
  %5244 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5243, i32 0, i32 0
  store i32 %5237, ptr %5244, align 8, !tbaa !137
  %5245 = load i32, ptr %10, align 4, !tbaa !9
  %5246 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5247 = load ptr, ptr %5246, align 8, !tbaa !133
  %5248 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5249 = load i64, ptr %5248, align 8, !tbaa !130
  %5250 = sub i64 %5249, 1
  %5251 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5247, i64 %5250
  %5252 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5251, i32 0, i32 1
  store i32 %5245, ptr %5252, align 4, !tbaa !138
  br label %5253

5253:                                             ; preds = %5236, %5219
  br label %5259

5254:                                             ; preds = %5149
  %5255 = load i32, ptr %9, align 4, !tbaa !9
  %5256 = icmp eq i32 %5255, -1
  br i1 %5256, label %5257, label %5258

5257:                                             ; preds = %5254
  br label %5258

5258:                                             ; preds = %5257, %5254
  br label %5259

5259:                                             ; preds = %5258, %5253
  br label %5260

5260:                                             ; preds = %5259
  %5261 = load i64, ptr %159, align 8, !tbaa !11
  %5262 = add i64 %5261, 1
  store i64 %5262, ptr %159, align 8, !tbaa !11
  br label %5138, !llvm.loop !139

5263:                                             ; preds = %5148
  br label %5264

5264:                                             ; preds = %5263
  %5265 = load i64, ptr %158, align 8, !tbaa !11
  %5266 = add i64 %5265, 1
  store i64 %5266, ptr %158, align 8, !tbaa !11
  br label %5121, !llvm.loop !140

5267:                                             ; preds = %5126
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #12
  store i64 0, ptr %160, align 8, !tbaa !11
  br label %5268

5268:                                             ; preds = %5409, %5267
  %5269 = load i64, ptr %160, align 8, !tbaa !11
  %5270 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 31
  %5271 = load i64, ptr %5270, align 8, !tbaa !130
  %5272 = icmp ult i64 %5269, %5271
  br i1 %5272, label %5274, label %5273

5273:                                             ; preds = %5268
  store i32 165, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #12
  br label %5412

5274:                                             ; preds = %5268
  %5275 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5276 = load ptr, ptr %5275, align 8, !tbaa !133
  %5277 = load i64, ptr %160, align 8, !tbaa !11
  %5278 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5276, i64 %5277
  %5279 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5278, i32 0, i32 0
  %5280 = load i32, ptr %5279, align 8, !tbaa !137
  store i32 %5280, ptr %39, align 4, !tbaa !9
  %5281 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5282 = load ptr, ptr %5281, align 8, !tbaa !133
  %5283 = load i64, ptr %160, align 8, !tbaa !11
  %5284 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5282, i64 %5283
  %5285 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5284, i32 0, i32 1
  %5286 = load i32, ptr %5285, align 4, !tbaa !138
  store i32 %5286, ptr %40, align 4, !tbaa !9
  %5287 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5288 = load ptr, ptr %5287, align 8, !tbaa !133
  %5289 = load i64, ptr %160, align 8, !tbaa !11
  %5290 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5288, i64 %5289
  %5291 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5290, i32 0, i32 2
  %5292 = load i32, ptr %5291, align 8, !tbaa !134
  store i32 %5292, ptr %41, align 4, !tbaa !9
  %5293 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5294 = load ptr, ptr %5293, align 8, !tbaa !133
  %5295 = load i64, ptr %160, align 8, !tbaa !11
  %5296 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5294, i64 %5295
  %5297 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5296, i32 0, i32 3
  %5298 = load i32, ptr %5297, align 4, !tbaa !136
  store i32 %5298, ptr %42, align 4, !tbaa !9
  %5299 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5300 = load ptr, ptr %5299, align 8, !tbaa !18
  %5301 = load i32, ptr %40, align 4, !tbaa !9
  %5302 = sext i32 %5301 to i64
  %5303 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5300, i64 %5302
  %5304 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5303, i32 0, i32 1
  %5305 = load double, ptr %5304, align 8, !tbaa !35
  %5306 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5307 = load ptr, ptr %5306, align 8, !tbaa !18
  %5308 = load i32, ptr %39, align 4, !tbaa !9
  %5309 = sext i32 %5308 to i64
  %5310 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5307, i64 %5309
  %5311 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5310, i32 0, i32 1
  %5312 = load double, ptr %5311, align 8, !tbaa !35
  %5313 = fsub double %5305, %5312
  %5314 = fneg double %5313
  %5315 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5316 = load ptr, ptr %5315, align 8, !tbaa !133
  %5317 = load i64, ptr %160, align 8, !tbaa !11
  %5318 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5316, i64 %5317
  %5319 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5318, i32 0, i32 5
  %5320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5319, i32 noundef 0)
  store double %5314, ptr %5320, align 8, !tbaa !34
  %5321 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5322 = load ptr, ptr %5321, align 8, !tbaa !18
  %5323 = load i32, ptr %40, align 4, !tbaa !9
  %5324 = sext i32 %5323 to i64
  %5325 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5322, i64 %5324
  %5326 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5325, i32 0, i32 0
  %5327 = load double, ptr %5326, align 8, !tbaa !33
  %5328 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5329 = load ptr, ptr %5328, align 8, !tbaa !18
  %5330 = load i32, ptr %39, align 4, !tbaa !9
  %5331 = sext i32 %5330 to i64
  %5332 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5329, i64 %5331
  %5333 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5332, i32 0, i32 0
  %5334 = load double, ptr %5333, align 8, !tbaa !33
  %5335 = fsub double %5327, %5334
  %5336 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5337 = load ptr, ptr %5336, align 8, !tbaa !133
  %5338 = load i64, ptr %160, align 8, !tbaa !11
  %5339 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5337, i64 %5338
  %5340 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5339, i32 0, i32 5
  %5341 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5340, i32 noundef 1)
  store double %5335, ptr %5341, align 8, !tbaa !34
  %5342 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5343 = load ptr, ptr %5342, align 8, !tbaa !133
  %5344 = load i64, ptr %160, align 8, !tbaa !11
  %5345 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5343, i64 %5344
  %5346 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5345, i32 0, i32 5
  %5347 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5346, i32 noundef 0)
  %5348 = load double, ptr %5347, align 8, !tbaa !34
  %5349 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5350 = load ptr, ptr %5349, align 8, !tbaa !133
  %5351 = load i64, ptr %160, align 8, !tbaa !11
  %5352 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5350, i64 %5351
  %5353 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5352, i32 0, i32 5
  %5354 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5353, i32 noundef 0)
  %5355 = load double, ptr %5354, align 8, !tbaa !34
  %5356 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5357 = load ptr, ptr %5356, align 8, !tbaa !133
  %5358 = load i64, ptr %160, align 8, !tbaa !11
  %5359 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5357, i64 %5358
  %5360 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5359, i32 0, i32 5
  %5361 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5360, i32 noundef 1)
  %5362 = load double, ptr %5361, align 8, !tbaa !34
  %5363 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5364 = load ptr, ptr %5363, align 8, !tbaa !133
  %5365 = load i64, ptr %160, align 8, !tbaa !11
  %5366 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5364, i64 %5365
  %5367 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5366, i32 0, i32 5
  %5368 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5367, i32 noundef 1)
  %5369 = load double, ptr %5368, align 8, !tbaa !34
  %5370 = fmul double %5362, %5369
  %5371 = call double @llvm.fmuladd.f64(double %5348, double %5355, double %5370)
  %5372 = call double @sqrt(double noundef %5371) #12
  %5373 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5374 = load ptr, ptr %5373, align 8, !tbaa !133
  %5375 = load i64, ptr %160, align 8, !tbaa !11
  %5376 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5374, i64 %5375
  %5377 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5376, i32 0, i32 4
  store double %5372, ptr %5377, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 40, ptr %162) #12
  %5378 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5379 = load ptr, ptr %5378, align 8, !tbaa !133
  %5380 = load i64, ptr %160, align 8, !tbaa !11
  %5381 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5379, i64 %5380
  %5382 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5381, i32 0, i32 5
  %5383 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5384 = load ptr, ptr %5383, align 8, !tbaa !133
  %5385 = load i64, ptr %160, align 8, !tbaa !11
  %5386 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5384, i64 %5385
  %5387 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5386, i32 0, i32 4
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %162, ptr noundef nonnull align 8 dereferenceable(40) %5382, ptr noundef nonnull align 8 dereferenceable(8) %5387)
  %5388 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5389 = load ptr, ptr %5388, align 8, !tbaa !133
  %5390 = load i64, ptr %160, align 8, !tbaa !11
  %5391 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5389, i64 %5390
  %5392 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5391, i32 0, i32 5
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %161, ptr noundef nonnull align 8 dereferenceable(40) %5392, ptr noundef nonnull align 8 dereferenceable(40) %162)
          to label %5393 unwind label %5404

5393:                                             ; preds = %5274
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %161) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %162) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %162) #12
  %5394 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 32
  %5395 = load ptr, ptr %5394, align 8, !tbaa !133
  %5396 = load i64, ptr %160, align 8, !tbaa !11
  %5397 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5395, i64 %5396
  %5398 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %5397, i32 0, i32 4
  %5399 = load double, ptr %5398, align 8, !tbaa !141
  %5400 = fcmp olt double %5399, 1.000000e-10
  br i1 %5400, label %5401, label %5408

5401:                                             ; preds = %5393
  %5402 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.58)
  %5403 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5402, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

5404:                                             ; preds = %5274
  %5405 = landingpad { ptr, i32 }
          cleanup
  %5406 = extractvalue { ptr, i32 } %5405, 0
  store ptr %5406, ptr %58, align 8
  %5407 = extractvalue { ptr, i32 } %5405, 1
  store i32 %5407, ptr %59, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %162) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr %162) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #12
  br label %5789

5408:                                             ; preds = %5393
  br label %5409

5409:                                             ; preds = %5408
  %5410 = load i64, ptr %160, align 8, !tbaa !11
  %5411 = add i64 %5410, 1
  store i64 %5411, ptr %160, align 8, !tbaa !11
  br label %5268, !llvm.loop !142

5412:                                             ; preds = %5273
  %5413 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.59)
  %5414 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5413, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i32 0, ptr %46, align 4, !tbaa !9
  store i32 10000, ptr %47, align 4, !tbaa !9
  store i32 -10000, ptr %48, align 4, !tbaa !9
  store i32 0, ptr %49, align 4, !tbaa !9
  store i32 0, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #12
  store i64 0, ptr %163, align 8, !tbaa !11
  br label %5415

5415:                                             ; preds = %5427, %5412
  %5416 = load i64, ptr %163, align 8, !tbaa !11
  %5417 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5418 = load i64, ptr %5417, align 8, !tbaa !29
  %5419 = icmp ult i64 %5416, %5418
  br i1 %5419, label %5421, label %5420

5420:                                             ; preds = %5415
  store i32 168, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #12
  br label %5430

5421:                                             ; preds = %5415
  %5422 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5423 = load ptr, ptr %5422, align 8, !tbaa !30
  %5424 = load i64, ptr %163, align 8, !tbaa !11
  %5425 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5423, i64 %5424
  %5426 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5425, i32 0, i32 17
  store i32 0, ptr %5426, align 4, !tbaa !143
  br label %5427

5427:                                             ; preds = %5421
  %5428 = load i64, ptr %163, align 8, !tbaa !11
  %5429 = add i64 %5428, 1
  store i64 %5429, ptr %163, align 8, !tbaa !11
  br label %5415, !llvm.loop !144

5430:                                             ; preds = %5420
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #12
  store i64 0, ptr %164, align 8, !tbaa !11
  br label %5431

5431:                                             ; preds = %5672, %5430
  %5432 = load i64, ptr %164, align 8, !tbaa !11
  %5433 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5434 = load i64, ptr %5433, align 8, !tbaa !29
  %5435 = icmp ult i64 %5432, %5434
  br i1 %5435, label %5437, label %5436

5436:                                             ; preds = %5431
  store i32 171, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #12
  br label %5675

5437:                                             ; preds = %5431
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #12
  store i64 0, ptr %165, align 8, !tbaa !11
  br label %5438

5438:                                             ; preds = %5490, %5437
  %5439 = load i64, ptr %165, align 8, !tbaa !11
  %5440 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5441 = load ptr, ptr %5440, align 8, !tbaa !30
  %5442 = load i64, ptr %164, align 8, !tbaa !11
  %5443 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5441, i64 %5442
  %5444 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5443, i32 0, i32 3
  %5445 = load i32, ptr %5444, align 8, !tbaa !44
  %5446 = sext i32 %5445 to i64
  %5447 = icmp ult i64 %5439, %5446
  br i1 %5447, label %5449, label %5448

5448:                                             ; preds = %5438
  store i32 174, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #12
  br label %5493

5449:                                             ; preds = %5438
  %5450 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5451 = load ptr, ptr %5450, align 8, !tbaa !30
  %5452 = load i64, ptr %164, align 8, !tbaa !11
  %5453 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5451, i64 %5452
  %5454 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5453, i32 0, i32 5
  %5455 = load ptr, ptr %5454, align 8, !tbaa !45
  %5456 = load i64, ptr %165, align 8, !tbaa !11
  %5457 = trunc i64 %5456 to i32
  %5458 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5455, i32 noundef %5457)
  %5459 = load i32, ptr %5458, align 4, !tbaa !9
  %5460 = icmp sgt i32 %5459, -1
  br i1 %5460, label %5461, label %5489

5461:                                             ; preds = %5449
  %5462 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5463 = load ptr, ptr %5462, align 8, !tbaa !30
  %5464 = load i64, ptr %164, align 8, !tbaa !11
  %5465 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5463, i64 %5464
  %5466 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5465, i32 0, i32 17
  %5467 = load i32, ptr %5466, align 4, !tbaa !143
  %5468 = add nsw i32 %5467, 1
  %5469 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5470 = load ptr, ptr %5469, align 8, !tbaa !30
  %5471 = load i64, ptr %164, align 8, !tbaa !11
  %5472 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5470, i64 %5471
  %5473 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5472, i32 0, i32 17
  store i32 %5468, ptr %5473, align 4, !tbaa !143
  %5474 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5475 = load ptr, ptr %5474, align 8, !tbaa !30
  %5476 = load i64, ptr %164, align 8, !tbaa !11
  %5477 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5475, i64 %5476
  %5478 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5477, i32 0, i32 18
  %5479 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5480 = load ptr, ptr %5479, align 8, !tbaa !30
  %5481 = load i64, ptr %164, align 8, !tbaa !11
  %5482 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5480, i64 %5481
  %5483 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5482, i32 0, i32 5
  %5484 = load ptr, ptr %5483, align 8, !tbaa !45
  %5485 = load i64, ptr %165, align 8, !tbaa !11
  %5486 = trunc i64 %5485 to i32
  %5487 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5484, i32 noundef %5486)
  %5488 = load i32, ptr %5487, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %5478, i32 noundef %5488)
  br label %5489

5489:                                             ; preds = %5461, %5449
  br label %5490

5490:                                             ; preds = %5489
  %5491 = load i64, ptr %165, align 8, !tbaa !11
  %5492 = add i64 %5491, 1
  store i64 %5492, ptr %165, align 8, !tbaa !11
  br label %5438, !llvm.loop !145

5493:                                             ; preds = %5448
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #12
  store i64 0, ptr %166, align 8, !tbaa !11
  br label %5494

5494:                                             ; preds = %5601, %5493
  %5495 = load i64, ptr %166, align 8, !tbaa !11
  %5496 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5497 = load ptr, ptr %5496, align 8, !tbaa !30
  %5498 = load i64, ptr %164, align 8, !tbaa !11
  %5499 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5497, i64 %5498
  %5500 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5499, i32 0, i32 0
  %5501 = load i32, ptr %5500, align 8, !tbaa !36
  %5502 = sext i32 %5501 to i64
  %5503 = icmp ult i64 %5495, %5502
  br i1 %5503, label %5505, label %5504

5504:                                             ; preds = %5494
  store i32 177, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #12
  br label %5604

5505:                                             ; preds = %5494
  %5506 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5507 = load ptr, ptr %5506, align 8, !tbaa !30
  %5508 = load i64, ptr %164, align 8, !tbaa !11
  %5509 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5507, i64 %5508
  %5510 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5509, i32 0, i32 2
  %5511 = load ptr, ptr %5510, align 8, !tbaa !31
  %5512 = load i64, ptr %166, align 8, !tbaa !11
  %5513 = trunc i64 %5512 to i32
  %5514 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5511, i32 noundef %5513)
  %5515 = load i32, ptr %5514, align 4, !tbaa !9
  store i32 %5515, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #12
  store i64 0, ptr %167, align 8, !tbaa !11
  br label %5516

5516:                                             ; preds = %5597, %5505
  %5517 = load i64, ptr %167, align 8, !tbaa !11
  %5518 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5519 = load ptr, ptr %5518, align 8, !tbaa !18
  %5520 = load i32, ptr %10, align 4, !tbaa !9
  %5521 = sext i32 %5520 to i64
  %5522 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5519, i64 %5521
  %5523 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5522, i32 0, i32 4
  %5524 = load i32, ptr %5523, align 8, !tbaa !19
  %5525 = sext i32 %5524 to i64
  %5526 = icmp ult i64 %5517, %5525
  br i1 %5526, label %5528, label %5527

5527:                                             ; preds = %5516
  store i32 180, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #12
  br label %5600

5528:                                             ; preds = %5516
  %5529 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 22
  %5530 = load ptr, ptr %5529, align 8, !tbaa !18
  %5531 = load i32, ptr %10, align 4, !tbaa !9
  %5532 = sext i32 %5531 to i64
  %5533 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5530, i64 %5532
  %5534 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %5533, i32 0, i32 5
  %5535 = load i64, ptr %167, align 8, !tbaa !11
  %5536 = trunc i64 %5535 to i32
  %5537 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %5534, i32 noundef %5536)
  %5538 = load i32, ptr %5537, align 4, !tbaa !9
  store i32 %5538, ptr %41, align 4, !tbaa !9
  %5539 = load i32, ptr %41, align 4, !tbaa !9
  %5540 = sext i32 %5539 to i64
  %5541 = load i64, ptr %164, align 8, !tbaa !11
  %5542 = icmp eq i64 %5540, %5541
  br i1 %5542, label %5543, label %5544

5543:                                             ; preds = %5528
  br label %5597

5544:                                             ; preds = %5528
  store i8 0, ptr %36, align 1, !tbaa !47
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #12
  store i64 0, ptr %168, align 8, !tbaa !11
  br label %5545

5545:                                             ; preds = %5570, %5544
  %5546 = load i64, ptr %168, align 8, !tbaa !11
  %5547 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5548 = load ptr, ptr %5547, align 8, !tbaa !30
  %5549 = load i64, ptr %164, align 8, !tbaa !11
  %5550 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5548, i64 %5549
  %5551 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5550, i32 0, i32 17
  %5552 = load i32, ptr %5551, align 4, !tbaa !143
  %5553 = sext i32 %5552 to i64
  %5554 = icmp ult i64 %5546, %5553
  br i1 %5554, label %5556, label %5555

5555:                                             ; preds = %5545
  store i32 183, ptr %63, align 4
  br label %5573

5556:                                             ; preds = %5545
  %5557 = load i32, ptr %41, align 4, !tbaa !9
  %5558 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5559 = load ptr, ptr %5558, align 8, !tbaa !30
  %5560 = load i64, ptr %164, align 8, !tbaa !11
  %5561 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5559, i64 %5560
  %5562 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5561, i32 0, i32 18
  %5563 = load i64, ptr %168, align 8, !tbaa !11
  %5564 = trunc i64 %5563 to i32
  %5565 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %5562, i32 noundef %5564)
  %5566 = load i32, ptr %5565, align 4, !tbaa !9
  %5567 = icmp eq i32 %5557, %5566
  br i1 %5567, label %5568, label %5569

5568:                                             ; preds = %5556
  store i8 1, ptr %36, align 1, !tbaa !47
  store i32 183, ptr %63, align 4
  br label %5573

5569:                                             ; preds = %5556
  br label %5570

5570:                                             ; preds = %5569
  %5571 = load i64, ptr %168, align 8, !tbaa !11
  %5572 = add i64 %5571, 1
  store i64 %5572, ptr %168, align 8, !tbaa !11
  br label %5545, !llvm.loop !146

5573:                                             ; preds = %5568, %5555
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #12
  br label %5574

5574:                                             ; preds = %5573
  %5575 = load i8, ptr %36, align 1, !tbaa !47, !range !50, !noundef !51
  %5576 = trunc i8 %5575 to i1
  br i1 %5576, label %5596, label %5577

5577:                                             ; preds = %5574
  %5578 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5579 = load ptr, ptr %5578, align 8, !tbaa !30
  %5580 = load i64, ptr %164, align 8, !tbaa !11
  %5581 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5579, i64 %5580
  %5582 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5581, i32 0, i32 17
  %5583 = load i32, ptr %5582, align 4, !tbaa !143
  %5584 = add nsw i32 %5583, 1
  %5585 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5586 = load ptr, ptr %5585, align 8, !tbaa !30
  %5587 = load i64, ptr %164, align 8, !tbaa !11
  %5588 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5586, i64 %5587
  %5589 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5588, i32 0, i32 17
  store i32 %5584, ptr %5589, align 4, !tbaa !143
  %5590 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5591 = load ptr, ptr %5590, align 8, !tbaa !30
  %5592 = load i64, ptr %164, align 8, !tbaa !11
  %5593 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5591, i64 %5592
  %5594 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5593, i32 0, i32 18
  %5595 = load i32, ptr %41, align 4, !tbaa !9
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %5594, i32 noundef %5595)
  br label %5596

5596:                                             ; preds = %5577, %5574
  br label %5597

5597:                                             ; preds = %5596, %5543
  %5598 = load i64, ptr %167, align 8, !tbaa !11
  %5599 = add i64 %5598, 1
  store i64 %5599, ptr %167, align 8, !tbaa !11
  br label %5516, !llvm.loop !147

5600:                                             ; preds = %5527
  br label %5601

5601:                                             ; preds = %5600
  %5602 = load i64, ptr %166, align 8, !tbaa !11
  %5603 = add i64 %5602, 1
  store i64 %5603, ptr %166, align 8, !tbaa !11
  br label %5494, !llvm.loop !148

5604:                                             ; preds = %5504
  %5605 = load i32, ptr %46, align 4, !tbaa !9
  %5606 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5607 = load ptr, ptr %5606, align 8, !tbaa !30
  %5608 = load i64, ptr %164, align 8, !tbaa !11
  %5609 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5607, i64 %5608
  %5610 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5609, i32 0, i32 17
  %5611 = load i32, ptr %5610, align 4, !tbaa !143
  %5612 = add nsw i32 %5605, %5611
  store i32 %5612, ptr %46, align 4, !tbaa !9
  %5613 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5614 = load ptr, ptr %5613, align 8, !tbaa !30
  %5615 = load i64, ptr %164, align 8, !tbaa !11
  %5616 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5614, i64 %5615
  %5617 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5616, i32 0, i32 17
  %5618 = load i32, ptr %5617, align 4, !tbaa !143
  %5619 = load i32, ptr %47, align 4, !tbaa !9
  %5620 = icmp slt i32 %5618, %5619
  br i1 %5620, label %5621, label %5624

5621:                                             ; preds = %5604
  %5622 = load i64, ptr %164, align 8, !tbaa !11
  %5623 = trunc i64 %5622 to i32
  store i32 %5623, ptr %49, align 4, !tbaa !9
  br label %5624

5624:                                             ; preds = %5621, %5604
  %5625 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5626 = load ptr, ptr %5625, align 8, !tbaa !30
  %5627 = load i64, ptr %164, align 8, !tbaa !11
  %5628 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5626, i64 %5627
  %5629 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5628, i32 0, i32 17
  %5630 = load i32, ptr %5629, align 4, !tbaa !143
  %5631 = load i32, ptr %48, align 4, !tbaa !9
  %5632 = icmp sgt i32 %5630, %5631
  br i1 %5632, label %5633, label %5636

5633:                                             ; preds = %5624
  %5634 = load i64, ptr %164, align 8, !tbaa !11
  %5635 = trunc i64 %5634 to i32
  store i32 %5635, ptr %50, align 4, !tbaa !9
  br label %5636

5636:                                             ; preds = %5633, %5624
  %5637 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5638 = load ptr, ptr %5637, align 8, !tbaa !30
  %5639 = load i64, ptr %164, align 8, !tbaa !11
  %5640 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5638, i64 %5639
  %5641 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5640, i32 0, i32 17
  %5642 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %47, ptr noundef nonnull align 4 dereferenceable(4) %5641)
  %5643 = load i32, ptr %5642, align 4, !tbaa !9
  store i32 %5643, ptr %47, align 4, !tbaa !9
  %5644 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5645 = load ptr, ptr %5644, align 8, !tbaa !30
  %5646 = load i64, ptr %164, align 8, !tbaa !11
  %5647 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5645, i64 %5646
  %5648 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5647, i32 0, i32 17
  %5649 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %48, ptr noundef nonnull align 4 dereferenceable(4) %5648)
  %5650 = load i32, ptr %5649, align 4, !tbaa !9
  store i32 %5650, ptr %48, align 4, !tbaa !9
  %5651 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5652 = load ptr, ptr %5651, align 8, !tbaa !30
  %5653 = load i64, ptr %164, align 8, !tbaa !11
  %5654 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5652, i64 %5653
  %5655 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5654, i32 0, i32 17
  %5656 = load i32, ptr %5655, align 4, !tbaa !143
  %5657 = icmp slt i32 %5656, 3
  br i1 %5657, label %5658, label %5671

5658:                                             ; preds = %5636
  %5659 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.60)
  %5660 = load i64, ptr %164, align 8, !tbaa !11
  %5661 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %5659, i64 noundef %5660)
  %5662 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5661, ptr noundef @.str.61)
  %5663 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5664 = load ptr, ptr %5663, align 8, !tbaa !30
  %5665 = load i64, ptr %164, align 8, !tbaa !11
  %5666 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5664, i64 %5665
  %5667 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5666, i32 0, i32 17
  %5668 = load i32, ptr %5667, align 4, !tbaa !143
  %5669 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5662, i32 noundef %5668)
  %5670 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5669, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %5671

5671:                                             ; preds = %5658, %5636
  br label %5672

5672:                                             ; preds = %5671
  %5673 = load i64, ptr %164, align 8, !tbaa !11
  %5674 = add i64 %5673, 1
  store i64 %5674, ptr %164, align 8, !tbaa !11
  br label %5431, !llvm.loop !149

5675:                                             ; preds = %5436
  %5676 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.62)
  %5677 = load i32, ptr %46, align 4, !tbaa !9
  %5678 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5676, i32 noundef %5677)
  %5679 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5678, ptr noundef @.str.63)
  %5680 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5681 = load i64, ptr %5680, align 8, !tbaa !29
  %5682 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %5679, i64 noundef %5681)
  %5683 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5682, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %5684 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.53)
  %5685 = load i32, ptr %46, align 4, !tbaa !9
  %5686 = sext i32 %5685 to i64
  %5687 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5688 = load i64, ptr %5687, align 8, !tbaa !29
  %5689 = udiv i64 %5686, %5688
  %5690 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %5684, i64 noundef %5689)
  %5691 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5690, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %5692 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.54)
  %5693 = load i32, ptr %47, align 4, !tbaa !9
  %5694 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5692, i32 noundef %5693)
  %5695 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5694, ptr noundef @.str.64)
  %5696 = load i32, ptr %49, align 4, !tbaa !9
  %5697 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5695, i32 noundef %5696)
  %5698 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5697, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %5699 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.56)
  %5700 = load i32, ptr %48, align 4, !tbaa !9
  %5701 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5699, i32 noundef %5700)
  %5702 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5701, ptr noundef @.str.64)
  %5703 = load i32, ptr %50, align 4, !tbaa !9
  %5704 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5702, i32 noundef %5703)
  %5705 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5704, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %5706 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
  %5707 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5706, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #12
  store i32 0, ptr %169, align 4, !tbaa !9
  br label %5708

5708:                                             ; preds = %5722, %5675
  %5709 = load i32, ptr %169, align 4, !tbaa !9
  %5710 = sext i32 %5709 to i64
  %5711 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 25
  %5712 = load i64, ptr %5711, align 8, !tbaa !29
  %5713 = icmp ult i64 %5710, %5712
  br i1 %5713, label %5715, label %5714

5714:                                             ; preds = %5708
  store i32 186, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #12
  br label %5725

5715:                                             ; preds = %5708
  %5716 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5717 = load ptr, ptr %5716, align 8, !tbaa !30
  %5718 = load i32, ptr %169, align 4, !tbaa !9
  %5719 = sext i32 %5718 to i64
  %5720 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5717, i64 %5719
  %5721 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5720, i32 0, i32 16
  store i32 -1, ptr %5721, align 8, !tbaa !150
  br label %5722

5722:                                             ; preds = %5715
  %5723 = load i32, ptr %169, align 4, !tbaa !9
  %5724 = add nsw i32 %5723, 1
  store i32 %5724, ptr %169, align 4, !tbaa !9
  br label %5708, !llvm.loop !151

5725:                                             ; preds = %5714
  call void @llvm.lifetime.start.p0(i64 4, ptr %170) #12
  store i32 0, ptr %170, align 4, !tbaa !9
  br label %5726

5726:                                             ; preds = %5785, %5725
  %5727 = load i32, ptr %170, align 4, !tbaa !9
  %5728 = sext i32 %5727 to i64
  %5729 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 29
  %5730 = load i64, ptr %5729, align 8, !tbaa !78
  %5731 = icmp ult i64 %5728, %5730
  br i1 %5731, label %5733, label %5732

5732:                                             ; preds = %5726
  store i32 189, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #12
  br label %5788

5733:                                             ; preds = %5726
  call void @llvm.lifetime.start.p0(i64 32, ptr %171) #12
  %5734 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %5735 = load ptr, ptr %5734, align 8, !tbaa !79
  %5736 = load i32, ptr %170, align 4, !tbaa !9
  %5737 = sext i32 %5736 to i64
  %5738 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5735, i64 %5737
  %5739 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5738, i32 0, i32 0
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 8 dereferenceable(32) %5739)
  invoke void @_Z4trimNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef %172)
          to label %5740 unwind label %5756

5740:                                             ; preds = %5733
  %5741 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef @.str.65)
          to label %5742 unwind label %5760

5742:                                             ; preds = %5740
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #12
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #12
  br i1 %5741, label %5743, label %5784

5743:                                             ; preds = %5742
  %5744 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.66)
  %5745 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5744, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #12
  store i64 0, ptr %173, align 8, !tbaa !11
  br label %5746

5746:                                             ; preds = %5780, %5743
  %5747 = load i64, ptr %173, align 8, !tbaa !11
  %5748 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %5749 = load ptr, ptr %5748, align 8, !tbaa !79
  %5750 = load i64, ptr %173, align 8, !tbaa !11
  %5751 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5749, i64 %5750
  %5752 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5751, i32 0, i32 3
  %5753 = load i64, ptr %5752, align 8, !tbaa !104
  %5754 = icmp ult i64 %5747, %5753
  br i1 %5754, label %5765, label %5755

5755:                                             ; preds = %5746
  store i32 192, ptr %63, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #12
  br label %5783

5756:                                             ; preds = %5733
  %5757 = landingpad { ptr, i32 }
          cleanup
  %5758 = extractvalue { ptr, i32 } %5757, 0
  store ptr %5758, ptr %58, align 8
  %5759 = extractvalue { ptr, i32 } %5757, 1
  store i32 %5759, ptr %59, align 4
  br label %5764

5760:                                             ; preds = %5740
  %5761 = landingpad { ptr, i32 }
          cleanup
  %5762 = extractvalue { ptr, i32 } %5761, 0
  store ptr %5762, ptr %58, align 8
  %5763 = extractvalue { ptr, i32 } %5761, 1
  store i32 %5763, ptr %59, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #12
  br label %5764

5764:                                             ; preds = %5760, %5756
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr %171) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %170) #12
  br label %5789

5765:                                             ; preds = %5746
  %5766 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 26
  %5767 = load ptr, ptr %5766, align 8, !tbaa !30
  %5768 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %174, i32 0, i32 30
  %5769 = load ptr, ptr %5768, align 8, !tbaa !79
  %5770 = load i64, ptr %173, align 8, !tbaa !11
  %5771 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5769, i64 %5770
  %5772 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %5771, i32 0, i32 10
  %5773 = load ptr, ptr %5772, align 8, !tbaa !108
  %5774 = load i32, ptr %4, align 4, !tbaa !9
  %5775 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %5773, i32 noundef %5774)
  %5776 = load i32, ptr %5775, align 4, !tbaa !9
  %5777 = sext i32 %5776 to i64
  %5778 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5767, i64 %5777
  %5779 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %5778, i32 0, i32 16
  store i32 1, ptr %5779, align 8, !tbaa !150
  br label %5780

5780:                                             ; preds = %5765
  %5781 = load i64, ptr %173, align 8, !tbaa !11
  %5782 = add i64 %5781, 1
  store i64 %5782, ptr %173, align 8, !tbaa !11
  br label %5746, !llvm.loop !152

5783:                                             ; preds = %5755
  br label %5784

5784:                                             ; preds = %5783, %5742
  br label %5785

5785:                                             ; preds = %5784
  %5786 = load i32, ptr %170, align 4, !tbaa !9
  %5787 = add nsw i32 %5786, 1
  store i32 %5787, ptr %170, align 4, !tbaa !9
  br label %5726, !llvm.loop !153

5788:                                             ; preds = %5732
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #12
  ret void

5789:                                             ; preds = %5764, %5404, %5136, %4926, %4118, %3050, %2942, %2649
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #12
  br label %5790

5790:                                             ; preds = %5789, %1787
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #12
  br label %5791

5791:                                             ; preds = %5790, %1225
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #12
  br label %5792

5792:                                             ; preds = %5791
  %5793 = load ptr, ptr %58, align 8
  %5794 = load i32, ptr %59, align 4
  %5795 = insertvalue { ptr, i32 } poison, ptr %5793, 0
  %5796 = insertvalue { ptr, i32 } %5795, i32 %5794, 1
  resume { ptr, i32 } %5796
}

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

declare noundef double @_Z8tri_areadddddd(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) #7

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

; 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: noreturn nounwind
declare void @exit(i32 noundef) #8

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIiEaSEi(ptr dead_on_unwind noalias writable sret(%class.Array2D) align 8, ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13EulerSolver2D9edge_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9edge_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), double noundef) #2 align 2

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

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #2 align 2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #10

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #11

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #11

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13EulerSolver2D9face_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9face_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #11 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z4trimNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) #1

; 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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { nobuiltin allocsize(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 = { nobuiltin 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 = { 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 = { noreturn 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 #9 = { 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 #10 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #11 = { 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 #12 = { nounwind }
attributes #13 = { noreturn nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin 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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !12, i64 408}
!14 = !{!"_ZTSN13EulerSolver2D10MainData2DE", !15, i64 0, !15, i64 32, !15, i64 64, !15, i64 96, !15, i64 128, !15, i64 160, !12, i64 192, !15, i64 200, !15, i64 232, !17, i64 264, !15, i64 272, !15, i64 304, !12, i64 336, !17, i64 344, !17, i64 352, !17, i64 360, !17, i64 368, !17, i64 376, !17, i64 384, !17, i64 392, !17, i64 400, !12, i64 408, !6, i64 416, !12, i64 424, !12, i64 432, !12, i64 440, !6, i64 448, !12, i64 456, !6, i64 464, !12, i64 472, !6, i64 480, !12, i64 488, !6, i64 496, !12, i64 504}
!15 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !16, i64 0, !12, i64 8, !7, i64 16}
!16 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!17 = !{!"double", !7, i64 0}
!18 = !{!14, !6, i64 416}
!19 = !{!20, !10, i64 32}
!20 = !{!"_ZTSN13EulerSolver2D9node_typeE", !17, i64 0, !17, i64 8, !10, i64 16, !6, i64 24, !10, i64 32, !21, i64 40, !17, i64 64, !10, i64 72, !10, i64 76, !6, i64 80, !17, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !17, i64 200, !17, i64 208, !17, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!21 = !{!"_ZTS8Vector1DIiE", !22, i64 0}
!22 = !{!"_ZTSSt6vectorIiSaIiEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!14, !12, i64 456}
!29 = !{!14, !12, i64 440}
!30 = !{!14, !6, i64 448}
!31 = !{!32, !6, i64 8}
!32 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !10, i64 0, !6, i64 8, !10, i64 16, !6, i64 24, !17, i64 32, !17, i64 40, !17, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !17, i64 96, !17, i64 104, !10, i64 112, !10, i64 116, !21, i64 120, !17, i64 144, !6, i64 152, !6, i64 160, !10, i64 168}
!33 = !{!20, !17, i64 0}
!34 = !{!17, !17, i64 0}
!35 = !{!20, !17, i64 8}
!36 = !{!32, !10, i64 0}
!37 = !{!32, !17, i64 32}
!38 = !{!32, !17, i64 40}
!39 = !{!32, !17, i64 48}
!40 = distinct !{!40, !27}
!41 = !{!20, !17, i64 64}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = !{!32, !10, i64 16}
!45 = !{!32, !6, i64 24}
!46 = distinct !{!46, !27}
!47 = !{!48, !48, i64 0}
!48 = !{!"bool", !7, i64 0}
!49 = distinct !{!49, !27}
!50 = !{i8 0, i8 2}
!51 = !{}
!52 = distinct !{!52, !27}
!53 = distinct !{!53, !27}
!54 = distinct !{!54, !27}
!55 = distinct !{!55, !27}
!56 = !{!14, !6, i64 464}
!57 = !{!58, !10, i64 8}
!58 = !{!"_ZTSN13EulerSolver2D9edge_typeE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !59, i64 16, !17, i64 56, !59, i64 64, !17, i64 104, !10, i64 112, !10, i64 116}
!59 = !{!"_ZTS7Array2DIdE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !48, i64 24, !48, i64 25, !6, i64 32}
!60 = !{!58, !10, i64 12}
!61 = distinct !{!61, !27}
!62 = !{!58, !10, i64 0}
!63 = !{!58, !10, i64 4}
!64 = distinct !{!64, !27}
!65 = !{!58, !17, i64 56}
!66 = !{!58, !17, i64 104}
!67 = distinct !{!67, !27}
!68 = !{!20, !10, i64 16}
!69 = distinct !{!69, !27}
!70 = distinct !{!70, !27}
!71 = !{!20, !6, i64 24}
!72 = !{!73, !10, i64 12}
!73 = !{!"_ZTS7Array2DIiE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !48, i64 24, !48, i64 25, !6, i64 32}
!74 = !{!73, !6, i64 32}
!75 = distinct !{!75, !27}
!76 = distinct !{!76, !27}
!77 = distinct !{!77, !27}
!78 = !{!14, !12, i64 472}
!79 = !{!14, !6, i64 480}
!80 = !{!81, !12, i64 32}
!81 = !{!"_ZTSN13EulerSolver2D10bgrid_typeE", !15, i64 0, !12, i64 32, !6, i64 40, !12, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120}
!82 = !{!81, !6, i64 80}
!83 = !{!81, !6, i64 88}
!84 = !{!81, !6, i64 96}
!85 = distinct !{!85, !27}
!86 = distinct !{!86, !27}
!87 = !{!81, !6, i64 40}
!88 = distinct !{!88, !27}
!89 = distinct !{!89, !27}
!90 = distinct !{!90, !27}
!91 = distinct !{!91, !27}
!92 = distinct !{!92, !27}
!93 = distinct !{!93, !27}
!94 = !{!58, !10, i64 116}
!95 = distinct !{!95, !27}
!96 = !{!58, !10, i64 112}
!97 = distinct !{!97, !27}
!98 = distinct !{!98, !27}
!99 = !{!20, !10, i64 72}
!100 = !{!20, !10, i64 76}
!101 = distinct !{!101, !27}
!102 = distinct !{!102, !27}
!103 = distinct !{!103, !27}
!104 = !{!81, !12, i64 48}
!105 = !{!81, !6, i64 56}
!106 = !{!81, !6, i64 64}
!107 = !{!81, !6, i64 72}
!108 = !{!81, !6, i64 104}
!109 = !{!81, !6, i64 112}
!110 = !{!81, !6, i64 120}
!111 = distinct !{!111, !27}
!112 = distinct !{!112, !27}
!113 = distinct !{!113, !27}
!114 = distinct !{!114, !27}
!115 = distinct !{!115, !27}
!116 = distinct !{!116, !27}
!117 = distinct !{!117, !27}
!118 = distinct !{!118, !27}
!119 = distinct !{!119, !27}
!120 = distinct !{!120, !27}
!121 = distinct !{!121, !27}
!122 = distinct !{!122, !27}
!123 = distinct !{!123, !27}
!124 = distinct !{!124, !27}
!125 = !{!32, !6, i64 56}
!126 = distinct !{!126, !27}
!127 = distinct !{!127, !27}
!128 = distinct !{!128, !27}
!129 = distinct !{!129, !27}
!130 = !{!14, !12, i64 488}
!131 = distinct !{!131, !27}
!132 = distinct !{!132, !27}
!133 = !{!14, !6, i64 496}
!134 = !{!135, !10, i64 8}
!135 = !{!"_ZTSN13EulerSolver2D9face_typeE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !17, i64 16, !59, i64 24}
!136 = !{!135, !10, i64 12}
!137 = !{!135, !10, i64 0}
!138 = !{!135, !10, i64 4}
!139 = distinct !{!139, !27}
!140 = distinct !{!140, !27}
!141 = !{!135, !17, i64 16}
!142 = distinct !{!142, !27}
!143 = !{!32, !10, i64 116}
!144 = distinct !{!144, !27}
!145 = distinct !{!145, !27}
!146 = distinct !{!146, !27}
!147 = distinct !{!147, !27}
!148 = distinct !{!148, !27}
!149 = distinct !{!149, !27}
!150 = !{!32, !10, i64 112}
!151 = distinct !{!151, !27}
!152 = distinct !{!152, !27}
!153 = distinct !{!153, !27}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.Array2D = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%class.Array2D.4 = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%class.bracket_proxy = type <{ ptr, i32, [4 x i8] }>
%"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.EulerSolver2D::node_type" = type { double, double, i32, ptr, i32, %class.Vector1D, double, i32, i32, ptr, double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, ptr, ptr, ptr }
%class.Vector1D = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.EulerSolver2D::elm_type" = type <{ i32, [4 x i8], ptr, i32, [4 x i8], ptr, double, double, double, ptr, ptr, ptr, ptr, ptr, double, double, i32, i32, %class.Vector1D, double, ptr, ptr, i32, [4 x i8] }>
%"class.EulerSolver2D::edge_type" = type { i32, i32, i32, i32, %class.Array2D.4, double, %class.Array2D.4, double, i32, i32 }
%"class.EulerSolver2D::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.EulerSolver2D::face_type" = type { i32, i32, i32, i32, double, %class.Array2D.4 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [27 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: 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 #1

; 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)) #1

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #3

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #3

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPvm(ptr noundef, i64 noundef) local_unnamed_addr #5

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #4

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #5

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D19construct_grid_dataEv(ptr noundef nonnull align 8 dereferenceable(512) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca %class.Array2D, align 8
  %5 = alloca %class.Array2D.4, align 8
  %6 = alloca %class.Array2D.4, align 8
  %7 = alloca %class.Array2D.4, align 8
  %8 = alloca %class.Array2D.4, align 8
  %9 = alloca %class.Array2D.4, align 8
  %10 = alloca %class.Array2D, align 8
  %11 = alloca %class.Array2D, align 8
  %12 = alloca %class.bracket_proxy, align 8
  %13 = alloca %class.bracket_proxy, align 8
  %14 = alloca %class.bracket_proxy, align 8
  %15 = alloca %class.bracket_proxy, align 8
  %16 = alloca %class.bracket_proxy, align 8
  %17 = alloca %class.bracket_proxy, align 8
  %18 = alloca %class.bracket_proxy, align 8
  %19 = alloca %class.bracket_proxy, align 8
  %20 = alloca %class.bracket_proxy, align 8
  %21 = alloca %class.bracket_proxy, align 8
  %22 = alloca %class.bracket_proxy, align 8
  %23 = alloca %class.bracket_proxy, align 8
  %24 = alloca %class.bracket_proxy, align 8
  %25 = alloca %class.bracket_proxy, align 8
  %26 = alloca %class.bracket_proxy, align 8
  %27 = alloca %class.bracket_proxy, align 8
  %28 = alloca %class.bracket_proxy, align 8
  %29 = alloca %class.bracket_proxy, align 8
  %30 = alloca %class.bracket_proxy, align 8
  %31 = alloca %class.bracket_proxy, align 8
  %32 = alloca %class.Array2D.4, align 8
  %33 = alloca %class.Array2D.4, align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #12
  %36 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.7)
  %37 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %38 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.27)
  %39 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %38, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %40 = getelementptr inbounds i8, ptr %0, i64 408
  %41 = load i64, ptr %40, align 8, !tbaa !5
  %.not1706 = icmp eq i64 %41, 0
  br i1 %.not1706, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %1
  %42 = getelementptr inbounds i8, ptr %0, i64 416
  %43 = load ptr, ptr %42, align 8, !tbaa !14
  %xtraiter = and i64 %41, 3
  %44 = icmp ult i64 %41, 4
  br i1 %44, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %41, -4
  br label %61

._crit_edge.loopexit.unr-lcssa:                   ; preds = %61, %.lr.ph
  %.012141506.unr = phi i64 [ 0, %.lr.ph ], [ %69, %61 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %.012141506.epil = phi i64 [ %46, %.epil.preheader ], [ %.012141506.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %45 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %43, i64 %.012141506.epil, i32 4
  store i32 0, ptr %45, align 8, !tbaa !15
  %46 = add nuw i64 %.012141506.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !23

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %1
  %47 = getelementptr inbounds i8, ptr %0, i64 456
  store i64 0, ptr %47, align 8, !tbaa !25
  %48 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.28)
  %49 = load i64, ptr %40, align 8, !tbaa !5
  %50 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %48, i64 noundef %49)
  %51 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %52 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.29)
  %53 = getelementptr inbounds i8, ptr %0, i64 440
  %54 = load i64, ptr %53, align 8, !tbaa !26
  %55 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %52, i64 noundef %54)
  %56 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull @.str.14)
  %57 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %58 = load i64, ptr %53, align 8, !tbaa !26
  %.not1707 = icmp eq i64 %58, 0
  br i1 %.not1707, label %.preheader1396, label %.lr.ph1509

.lr.ph1509:                                       ; preds = %._crit_edge
  %59 = getelementptr inbounds i8, ptr %0, i64 448
  %60 = getelementptr inbounds i8, ptr %0, i64 416
  br label %75

61:                                               ; preds = %61, %.lr.ph.new
  %.012141506 = phi i64 [ 0, %.lr.ph.new ], [ %69, %61 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %61 ]
  %62 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %43, i64 %.012141506, i32 4
  store i32 0, ptr %62, align 8, !tbaa !15
  %63 = or disjoint i64 %.012141506, 1
  %64 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %43, i64 %63, i32 4
  store i32 0, ptr %64, align 8, !tbaa !15
  %65 = or disjoint i64 %.012141506, 2
  %66 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %43, i64 %65, i32 4
  store i32 0, ptr %66, align 8, !tbaa !15
  %67 = or disjoint i64 %.012141506, 3
  %68 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %43, i64 %67, i32 4
  store i32 0, ptr %68, align 8, !tbaa !15
  %69 = add nuw i64 %.012141506, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %61, !llvm.loop !27

.preheader1396:                                   ; preds = %283, %._crit_edge
  %70 = phi i64 [ 0, %._crit_edge ], [ %284, %283 ]
  %71 = load i64, ptr %40, align 8, !tbaa !5
  %.not1708 = icmp eq i64 %71, 0
  br i1 %.not1708, label %.preheader1395, label %.lr.ph1511

.lr.ph1511:                                       ; preds = %.preheader1396
  %72 = getelementptr inbounds i8, ptr %0, i64 416
  %73 = load ptr, ptr %72, align 8, !tbaa !14
  %xtraiter2476 = and i64 %71, 3
  %74 = icmp ult i64 %71, 4
  br i1 %74, label %.preheader1395.loopexit.unr-lcssa, label %.lr.ph1511.new

.lr.ph1511.new:                                   ; preds = %.lr.ph1511
  %unroll_iter2479 = and i64 %71, -4
  br label %290

75:                                               ; preds = %.lr.ph1509, %283
  %indvars.iv = phi i64 [ 0, %.lr.ph1509 ], [ %indvars.iv.next, %283 ]
  %76 = load ptr, ptr %59, align 8, !tbaa !29
  %77 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %76, i64 %indvars.iv, i32 2
  %78 = load ptr, ptr %77, align 8, !tbaa !30
  %79 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %78, i32 noundef 0, i32 noundef 0)
  %80 = load i32, ptr %79, align 4, !tbaa !32
  %81 = load ptr, ptr %59, align 8, !tbaa !29
  %82 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %81, i64 %indvars.iv, i32 2
  %83 = load ptr, ptr %82, align 8, !tbaa !30
  %84 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %83, i32 noundef 1, i32 noundef 0)
  %85 = load i32, ptr %84, align 4, !tbaa !32
  %86 = load ptr, ptr %59, align 8, !tbaa !29
  %87 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %86, i64 %indvars.iv, i32 2
  %88 = load ptr, ptr %87, align 8, !tbaa !30
  %89 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %88, i32 noundef 2, i32 noundef 0)
  %90 = load i32, ptr %89, align 4, !tbaa !32
  %91 = load ptr, ptr %60, align 8, !tbaa !14
  %92 = sext i32 %80 to i64
  %93 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %91, i64 %92
  %94 = sext i32 %85 to i64
  %95 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %91, i64 %94
  %96 = sext i32 %90 to i64
  %97 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %91, i64 %96
  %98 = load <2 x double>, ptr %93, align 8, !tbaa !33
  %99 = load <2 x double>, ptr %95, align 8, !tbaa !33
  %100 = load <2 x double>, ptr %97, align 8, !tbaa !33
  %101 = getelementptr inbounds i8, ptr %93, i64 32
  %102 = load i32, ptr %101, align 8, !tbaa !15
  %103 = add nsw i32 %102, 1
  store i32 %103, ptr %101, align 8, !tbaa !15
  %104 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %91, i64 %92, i32 5
  %105 = trunc nuw nsw i64 %indvars.iv to i32
  tail call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %104, i32 noundef %105)
  %106 = load ptr, ptr %60, align 8, !tbaa !14
  %107 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %106, i64 %94, i32 4
  %108 = load i32, ptr %107, align 8, !tbaa !15
  %109 = add nsw i32 %108, 1
  store i32 %109, ptr %107, align 8, !tbaa !15
  %110 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %106, i64 %94, i32 5
  tail call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %110, i32 noundef %105)
  %111 = load ptr, ptr %60, align 8, !tbaa !14
  %112 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %111, i64 %96, i32 4
  %113 = load i32, ptr %112, align 8, !tbaa !15
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %112, align 8, !tbaa !15
  %115 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %111, i64 %96, i32 5
  tail call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %115, i32 noundef %105)
  %116 = load ptr, ptr %59, align 8, !tbaa !29
  %117 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %116, i64 %indvars.iv
  %118 = load i32, ptr %117, align 8, !tbaa !34
  switch i32 %118, label %280 [
    i32 3, label %119
    i32 4, label %133
  ]

119:                                              ; preds = %75
  %120 = fadd <2 x double> %98, %99
  %121 = getelementptr inbounds i8, ptr %117, i64 32
  %122 = fadd <2 x double> %120, %100
  %123 = fmul <2 x double> %122, <double 0x3FD5555555555555, double 0x3FD5555555555555>
  store <2 x double> %123, ptr %121, align 8, !tbaa !33
  %124 = extractelement <2 x double> %98, i64 0
  %125 = extractelement <2 x double> %98, i64 1
  %126 = extractelement <2 x double> %99, i64 0
  %127 = extractelement <2 x double> %99, i64 1
  %128 = extractelement <2 x double> %100, i64 0
  %129 = extractelement <2 x double> %100, i64 1
  %130 = tail call noundef double @_Z8tri_areadddddd(double noundef %124, double noundef %126, double noundef %128, double noundef %125, double noundef %127, double noundef %129)
  %131 = load ptr, ptr %59, align 8, !tbaa !29
  %132 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %131, i64 %indvars.iv, i32 8
  store double %130, ptr %132, align 8, !tbaa !35
  br label %283

133:                                              ; preds = %75
  %134 = getelementptr inbounds i8, ptr %117, i64 8
  %135 = load ptr, ptr %134, align 8, !tbaa !30
  %136 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %135, i32 noundef 3)
  %137 = load i32, ptr %136, align 4, !tbaa !32
  %138 = load ptr, ptr %60, align 8, !tbaa !14
  %139 = sext i32 %137 to i64
  %140 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %138, i64 %139, i32 4
  %141 = load i32, ptr %140, align 8, !tbaa !15
  %142 = add nsw i32 %141, 1
  store i32 %142, ptr %140, align 8, !tbaa !15
  %143 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %138, i64 %139, i32 5
  tail call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %143, i32 noundef %105)
  %144 = load ptr, ptr %60, align 8, !tbaa !14
  %145 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %144, i64 %139
  %146 = load ptr, ptr %59, align 8, !tbaa !29
  %147 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %146, i64 %indvars.iv, i32 6
  %148 = load <2 x double>, ptr %145, align 8, !tbaa !33
  %149 = fadd <2 x double> %98, %99
  %150 = fmul <2 x double> %149, <double 5.000000e-01, double 5.000000e-01>
  %151 = fadd <2 x double> %100, %148
  %152 = fmul <2 x double> %151, <double 5.000000e-01, double 5.000000e-01>
  %153 = fadd <2 x double> %150, %152
  %154 = fmul <2 x double> %153, <double 5.000000e-01, double 5.000000e-01>
  store <2 x double> %154, ptr %147, align 8, !tbaa !33
  %155 = extractelement <2 x double> %98, i64 0
  %156 = extractelement <2 x double> %98, i64 1
  %157 = extractelement <2 x double> %99, i64 0
  %158 = extractelement <2 x double> %99, i64 1
  %159 = extractelement <2 x double> %100, i64 0
  %160 = extractelement <2 x double> %100, i64 1
  %161 = tail call noundef double @_Z8tri_areadddddd(double noundef %155, double noundef %157, double noundef %159, double noundef %156, double noundef %158, double noundef %160)
  %162 = extractelement <2 x double> %148, i64 0
  %163 = extractelement <2 x double> %148, i64 1
  %164 = tail call noundef double @_Z8tri_areadddddd(double noundef %155, double noundef %159, double noundef %162, double noundef %156, double noundef %160, double noundef %163)
  %165 = fadd double %161, %164
  %166 = load ptr, ptr %59, align 8, !tbaa !29
  %167 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %166, i64 %indvars.iv, i32 8
  store double %165, ptr %167, align 8, !tbaa !35
  %168 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %166, i64 %indvars.iv
  %169 = getelementptr inbounds i8, ptr %168, i64 32
  %170 = load double, ptr %169, align 8, !tbaa !36
  %171 = getelementptr inbounds i8, ptr %168, i64 40
  %172 = load double, ptr %171, align 8, !tbaa !37
  %173 = tail call noundef double @_Z8tri_areadddddd(double noundef %155, double noundef %157, double noundef %170, double noundef %156, double noundef %158, double noundef %172)
  %174 = fcmp ugt double %173, 0.000000e+00
  br i1 %174, label %199, label %175

175:                                              ; preds = %133
  %176 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.30)
  %177 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %176, i32 noundef %105)
  %178 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %179 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.31)
  %180 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %179, double noundef %155)
  %181 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %180, double noundef %156)
  %182 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %181, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %183 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.32)
  %184 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %183, double noundef %157)
  %185 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %184, double noundef %158)
  %186 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %185, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %187 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.33)
  %188 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %187, double noundef %159)
  %189 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %188, double noundef %160)
  %190 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %191 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.34)
  %192 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %191, double noundef %162)
  %193 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %192, double noundef %163)
  %194 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %195 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.35)
  %196 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %195, double noundef %170)
  %197 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %196, double noundef %172)
  %198 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %197, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #13
  unreachable

199:                                              ; preds = %133
  %200 = tail call noundef double @_Z8tri_areadddddd(double noundef %157, double noundef %159, double noundef %170, double noundef %158, double noundef %160, double noundef %172)
  %201 = fcmp ugt double %200, 0.000000e+00
  br i1 %201, label %226, label %202

202:                                              ; preds = %199
  %203 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.36)
  %204 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %203, i32 noundef %105)
  %205 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %204, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %206 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.31)
  %207 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %206, double noundef %155)
  %208 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %207, double noundef %156)
  %209 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %210 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.32)
  %211 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %210, double noundef %157)
  %212 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %211, double noundef %158)
  %213 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %214 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.33)
  %215 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %214, double noundef %159)
  %216 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %215, double noundef %160)
  %217 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %216, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %218 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.34)
  %219 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %218, double noundef %162)
  %220 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %219, double noundef %163)
  %221 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %220, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %222 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.35)
  %223 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %222, double noundef %170)
  %224 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %223, double noundef %172)
  %225 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %224, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #13
  unreachable

226:                                              ; preds = %199
  %227 = tail call noundef double @_Z8tri_areadddddd(double noundef %159, double noundef %162, double noundef %170, double noundef %160, double noundef %163, double noundef %172)
  %228 = fcmp ugt double %227, 0.000000e+00
  br i1 %228, label %253, label %229

229:                                              ; preds = %226
  %230 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.37)
  %231 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %230, i32 noundef %105)
  %232 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %231, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %233 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.31)
  %234 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %233, double noundef %155)
  %235 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %234, double noundef %156)
  %236 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %237 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.32)
  %238 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %237, double noundef %157)
  %239 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %238, double noundef %158)
  %240 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %241 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.33)
  %242 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %241, double noundef %159)
  %243 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %242, double noundef %160)
  %244 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %243, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %245 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.34)
  %246 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %245, double noundef %162)
  %247 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %246, double noundef %163)
  %248 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %247, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %249 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.35)
  %250 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %249, double noundef %170)
  %251 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %250, double noundef %172)
  %252 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #13
  unreachable

253:                                              ; preds = %226
  %254 = tail call noundef double @_Z8tri_areadddddd(double noundef %162, double noundef %155, double noundef %170, double noundef %163, double noundef %156, double noundef %172)
  %255 = fcmp ugt double %254, 0.000000e+00
  br i1 %255, label %283, label %256

256:                                              ; preds = %253
  %257 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.38)
  %258 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %257, i32 noundef %105)
  %259 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %258, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %260 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.31)
  %261 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %260, double noundef %155)
  %262 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %261, double noundef %156)
  %263 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %262, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %264 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.32)
  %265 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %264, double noundef %157)
  %266 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %265, double noundef %158)
  %267 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %266, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %268 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.33)
  %269 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %268, double noundef %159)
  %270 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %269, double noundef %160)
  %271 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %270, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %272 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.34)
  %273 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %272, double noundef %162)
  %274 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %273, double noundef %163)
  %275 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %274, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %276 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.35)
  %277 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %276, double noundef %170)
  %278 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %277, double noundef %172)
  %279 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %278, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #13
  unreachable

280:                                              ; preds = %75
  %281 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.39)
  %282 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %281, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  tail call void @exit(i32 noundef 0) #13
  unreachable

283:                                              ; preds = %119, %253
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %284 = load i64, ptr %53, align 8, !tbaa !26
  %285 = icmp ugt i64 %284, %indvars.iv.next
  br i1 %285, label %75, label %.preheader1396, !llvm.loop !38

.preheader1395.loopexit.unr-lcssa:                ; preds = %290, %.lr.ph1511
  %.012161510.unr = phi i64 [ 0, %.lr.ph1511 ], [ %298, %290 ]
  %lcmp.mod2478.not = icmp eq i64 %xtraiter2476, 0
  br i1 %lcmp.mod2478.not, label %.preheader1395, label %.epil.preheader2475

.epil.preheader2475:                              ; preds = %.preheader1395.loopexit.unr-lcssa, %.epil.preheader2475
  %.012161510.epil = phi i64 [ %287, %.epil.preheader2475 ], [ %.012161510.unr, %.preheader1395.loopexit.unr-lcssa ]
  %epil.iter2477 = phi i64 [ %epil.iter2477.next, %.epil.preheader2475 ], [ 0, %.preheader1395.loopexit.unr-lcssa ]
  %286 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %73, i64 %.012161510.epil, i32 6
  store double 0.000000e+00, ptr %286, align 8, !tbaa !39
  %287 = add nuw i64 %.012161510.epil, 1
  %epil.iter2477.next = add i64 %epil.iter2477, 1
  %epil.iter2477.cmp.not = icmp eq i64 %epil.iter2477.next, %xtraiter2476
  br i1 %epil.iter2477.cmp.not, label %.preheader1395, label %.epil.preheader2475, !llvm.loop !40

.preheader1395:                                   ; preds = %.preheader1395.loopexit.unr-lcssa, %.epil.preheader2475, %.preheader1396
  %.not1709 = icmp eq i64 %70, 0
  br i1 %.not1709, label %._crit_edge1517, label %.lr.ph1513

.lr.ph1513:                                       ; preds = %.preheader1395
  %288 = getelementptr inbounds i8, ptr %0, i64 448
  %289 = getelementptr inbounds i8, ptr %0, i64 416
  br label %300

290:                                              ; preds = %290, %.lr.ph1511.new
  %.012161510 = phi i64 [ 0, %.lr.ph1511.new ], [ %298, %290 ]
  %niter2480 = phi i64 [ 0, %.lr.ph1511.new ], [ %niter2480.next.3, %290 ]
  %291 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %73, i64 %.012161510, i32 6
  store double 0.000000e+00, ptr %291, align 8, !tbaa !39
  %292 = or disjoint i64 %.012161510, 1
  %293 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %73, i64 %292, i32 6
  store double 0.000000e+00, ptr %293, align 8, !tbaa !39
  %294 = or disjoint i64 %.012161510, 2
  %295 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %73, i64 %294, i32 6
  store double 0.000000e+00, ptr %295, align 8, !tbaa !39
  %296 = or disjoint i64 %.012161510, 3
  %297 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %73, i64 %296, i32 6
  store double 0.000000e+00, ptr %297, align 8, !tbaa !39
  %298 = add nuw i64 %.012161510, 4
  %niter2480.next.3 = add i64 %niter2480, 4
  %niter2480.ncmp.3 = icmp eq i64 %niter2480.next.3, %unroll_iter2479
  br i1 %niter2480.ncmp.3, label %.preheader1395.loopexit.unr-lcssa, label %290, !llvm.loop !41

.preheader1394:                                   ; preds = %443
  %.not1710 = icmp eq i64 %444, 0
  br i1 %.not1710, label %._crit_edge1517, label %.lr.ph1516

.lr.ph1516:                                       ; preds = %.preheader1394
  %299 = getelementptr inbounds i8, ptr %0, i64 448
  br label %451

300:                                              ; preds = %.lr.ph1513, %443
  %indvars.iv1891 = phi i64 [ 0, %.lr.ph1513 ], [ %indvars.iv.next1892, %443 ]
  %301 = load ptr, ptr %288, align 8, !tbaa !29
  %302 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %301, i64 %indvars.iv1891, i32 2
  %303 = load ptr, ptr %302, align 8, !tbaa !30
  %304 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %303, i32 noundef 0)
  %305 = load i32, ptr %304, align 4, !tbaa !32
  %306 = load ptr, ptr %288, align 8, !tbaa !29
  %307 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %306, i64 %indvars.iv1891, i32 2
  %308 = load ptr, ptr %307, align 8, !tbaa !30
  %309 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %308, i32 noundef 1)
  %310 = load i32, ptr %309, align 4, !tbaa !32
  %311 = load ptr, ptr %288, align 8, !tbaa !29
  %312 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %311, i64 %indvars.iv1891, i32 2
  %313 = load ptr, ptr %312, align 8, !tbaa !30
  %314 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %313, i32 noundef 2)
  %315 = load i32, ptr %314, align 4, !tbaa !32
  %316 = load ptr, ptr %288, align 8, !tbaa !29
  %317 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %316, i64 %indvars.iv1891
  %318 = load i32, ptr %317, align 8, !tbaa !34
  switch i32 %318, label %443 [
    i32 3, label %319
    i32 4, label %335
  ]

319:                                              ; preds = %300
  %320 = load ptr, ptr %289, align 8, !tbaa !14
  %321 = sext i32 %305 to i64
  %322 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %320, i64 %321, i32 6
  %323 = load double, ptr %322, align 8, !tbaa !39
  %324 = getelementptr inbounds i8, ptr %317, i64 48
  %325 = load double, ptr %324, align 8, !tbaa !35
  %326 = tail call double @llvm.fmuladd.f64(double %325, double 0x3FD5555555555555, double %323)
  store double %326, ptr %322, align 8, !tbaa !39
  %327 = sext i32 %310 to i64
  %328 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %320, i64 %327, i32 6
  %329 = load double, ptr %328, align 8, !tbaa !39
  %330 = tail call double @llvm.fmuladd.f64(double %325, double 0x3FD5555555555555, double %329)
  store double %330, ptr %328, align 8, !tbaa !39
  %331 = sext i32 %315 to i64
  %332 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %320, i64 %331, i32 6
  %333 = load double, ptr %332, align 8, !tbaa !39
  %334 = tail call double @llvm.fmuladd.f64(double %325, double 0x3FD5555555555555, double %333)
  store double %334, ptr %332, align 8, !tbaa !39
  br label %443

335:                                              ; preds = %300
  %336 = getelementptr inbounds i8, ptr %317, i64 8
  %337 = load ptr, ptr %336, align 8, !tbaa !30
  %338 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %337, i32 noundef 3)
  %339 = load i32, ptr %338, align 4, !tbaa !32
  %340 = load ptr, ptr %289, align 8, !tbaa !14
  %341 = sext i32 %305 to i64
  %342 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %340, i64 %341
  %343 = load double, ptr %342, align 8, !tbaa !42
  %344 = sext i32 %310 to i64
  %345 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %340, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !42
  %347 = sext i32 %315 to i64
  %348 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %340, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !42
  %350 = sext i32 %339 to i64
  %351 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %340, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !42
  %353 = load ptr, ptr %288, align 8, !tbaa !29
  %354 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %353, i64 %indvars.iv1891
  %355 = getelementptr inbounds i8, ptr %354, i64 32
  %356 = load double, ptr %355, align 8, !tbaa !36
  %357 = getelementptr inbounds i8, ptr %342, i64 8
  %358 = load double, ptr %357, align 8, !tbaa !43
  %359 = getelementptr inbounds i8, ptr %345, i64 8
  %360 = load double, ptr %359, align 8, !tbaa !43
  %361 = getelementptr inbounds i8, ptr %348, i64 8
  %362 = load double, ptr %361, align 8, !tbaa !43
  %363 = getelementptr inbounds i8, ptr %351, i64 8
  %364 = load double, ptr %363, align 8, !tbaa !43
  %365 = getelementptr inbounds i8, ptr %354, i64 40
  %366 = load double, ptr %365, align 8, !tbaa !37
  %367 = fadd double %343, %346
  %368 = fmul double %367, 5.000000e-01
  %369 = fadd double %358, %360
  %370 = fmul double %369, 5.000000e-01
  %371 = fadd double %343, %352
  %372 = fmul double %371, 5.000000e-01
  %373 = fadd double %358, %364
  %374 = fmul double %373, 5.000000e-01
  %375 = getelementptr inbounds i8, ptr %342, i64 64
  %376 = load double, ptr %375, align 8, !tbaa !39
  %377 = tail call noundef double @_Z8tri_areadddddd(double noundef %343, double noundef %368, double noundef %356, double noundef %358, double noundef %370, double noundef %366)
  %378 = fadd double %376, %377
  %379 = tail call noundef double @_Z8tri_areadddddd(double noundef %343, double noundef %356, double noundef %372, double noundef %358, double noundef %366, double noundef %374)
  %380 = fadd double %378, %379
  %381 = load ptr, ptr %289, align 8, !tbaa !14
  %382 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %381, i64 %341, i32 6
  store double %380, ptr %382, align 8, !tbaa !39
  %383 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %381, i64 %344
  %384 = load double, ptr %383, align 8, !tbaa !42
  %385 = getelementptr inbounds i8, ptr %383, i64 8
  %386 = load double, ptr %385, align 8, !tbaa !43
  %387 = fadd double %349, %384
  %388 = fmul double %387, 5.000000e-01
  %389 = fadd double %362, %386
  %390 = fmul double %389, 5.000000e-01
  %391 = fadd double %343, %384
  %392 = fmul double %391, 5.000000e-01
  %393 = fadd double %358, %386
  %394 = fmul double %393, 5.000000e-01
  %395 = getelementptr inbounds i8, ptr %383, i64 64
  %396 = load double, ptr %395, align 8, !tbaa !39
  %397 = tail call noundef double @_Z8tri_areadddddd(double noundef %384, double noundef %388, double noundef %356, double noundef %386, double noundef %390, double noundef %366)
  %398 = fadd double %396, %397
  %399 = tail call noundef double @_Z8tri_areadddddd(double noundef %384, double noundef %356, double noundef %392, double noundef %386, double noundef %366, double noundef %394)
  %400 = fadd double %398, %399
  %401 = load ptr, ptr %289, align 8, !tbaa !14
  %402 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %401, i64 %344, i32 6
  store double %400, ptr %402, align 8, !tbaa !39
  %403 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %401, i64 %347
  %404 = load double, ptr %403, align 8, !tbaa !42
  %405 = getelementptr inbounds i8, ptr %403, i64 8
  %406 = load double, ptr %405, align 8, !tbaa !43
  %407 = fadd double %352, %404
  %408 = fmul double %407, 5.000000e-01
  %409 = fadd double %364, %406
  %410 = fmul double %409, 5.000000e-01
  %411 = fadd double %346, %404
  %412 = fmul double %411, 5.000000e-01
  %413 = fadd double %360, %406
  %414 = fmul double %413, 5.000000e-01
  %415 = getelementptr inbounds i8, ptr %403, i64 64
  %416 = load double, ptr %415, align 8, !tbaa !39
  %417 = tail call noundef double @_Z8tri_areadddddd(double noundef %404, double noundef %408, double noundef %356, double noundef %406, double noundef %410, double noundef %366)
  %418 = fadd double %416, %417
  %419 = tail call noundef double @_Z8tri_areadddddd(double noundef %404, double noundef %356, double noundef %412, double noundef %406, double noundef %366, double noundef %414)
  %420 = fadd double %418, %419
  %421 = load ptr, ptr %289, align 8, !tbaa !14
  %422 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %421, i64 %347, i32 6
  store double %420, ptr %422, align 8, !tbaa !39
  %423 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %421, i64 %350
  %424 = load double, ptr %423, align 8, !tbaa !42
  %425 = getelementptr inbounds i8, ptr %423, i64 8
  %426 = load double, ptr %425, align 8, !tbaa !43
  %427 = fadd double %343, %424
  %428 = fmul double %427, 5.000000e-01
  %429 = fadd double %358, %426
  %430 = fmul double %429, 5.000000e-01
  %431 = fadd double %349, %424
  %432 = fmul double %431, 5.000000e-01
  %433 = fadd double %362, %426
  %434 = fmul double %433, 5.000000e-01
  %435 = getelementptr inbounds i8, ptr %423, i64 64
  %436 = load double, ptr %435, align 8, !tbaa !39
  %437 = tail call noundef double @_Z8tri_areadddddd(double noundef %424, double noundef %428, double noundef %356, double noundef %426, double noundef %430, double noundef %366)
  %438 = fadd double %436, %437
  %439 = tail call noundef double @_Z8tri_areadddddd(double noundef %424, double noundef %356, double noundef %432, double noundef %426, double noundef %366, double noundef %434)
  %440 = fadd double %438, %439
  %441 = load ptr, ptr %289, align 8, !tbaa !14
  %442 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %441, i64 %350, i32 6
  store double %440, ptr %442, align 8, !tbaa !39
  br label %443

443:                                              ; preds = %300, %319, %335
  %indvars.iv.next1892 = add nuw nsw i64 %indvars.iv1891, 1
  %444 = load i64, ptr %53, align 8, !tbaa !26
  %445 = icmp ugt i64 %444, %indvars.iv.next1892
  br i1 %445, label %300, label %.preheader1394, !llvm.loop !44

._crit_edge1517:                                  ; preds = %471, %.preheader1395, %.preheader1394
  %446 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.40)
  %447 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %446, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %448 = load i64, ptr %53, align 8, !tbaa !26
  %.not1711 = icmp eq i64 %448, 0
  br i1 %.not1711, label %._crit_edge1545, label %.preheader1393.lr.ph

.preheader1393.lr.ph:                             ; preds = %._crit_edge1517
  %449 = getelementptr inbounds i8, ptr %0, i64 448
  %450 = getelementptr inbounds i8, ptr %0, i64 416
  %.pre1912 = load ptr, ptr %449, align 8, !tbaa !29
  br label %.preheader1393

451:                                              ; preds = %.lr.ph1516, %471
  %.012181515 = phi i64 [ 0, %.lr.ph1516 ], [ %473, %471 ]
  %452 = load ptr, ptr %299, align 8, !tbaa !29
  %453 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %452, i64 %.012181515
  %454 = load i32, ptr %453, align 8, !tbaa !34
  switch i32 %454, label %._crit_edge1911 [
    i32 3, label %455
    i32 4, label %463
  ]

._crit_edge1911:                                  ; preds = %451
  %.phi.trans.insert = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %452, i64 %.012181515, i32 5
  %.pre = load ptr, ptr %.phi.trans.insert, align 8, !tbaa !45
  br label %471

455:                                              ; preds = %451
  %456 = getelementptr inbounds i8, ptr %453, i64 16
  store i32 3, ptr %456, align 8, !tbaa !46
  %457 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %457, i32 noundef 3, i32 noundef 1)
          to label %458 unwind label %461

458:                                              ; preds = %455
  %459 = load ptr, ptr %299, align 8, !tbaa !29
  %460 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %459, i64 %.012181515, i32 5
  store ptr %457, ptr %460, align 8, !tbaa !45
  br label %471

461:                                              ; preds = %455
  %462 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %457, i64 noundef 40) #15
  br label %2758

463:                                              ; preds = %451
  %464 = getelementptr inbounds i8, ptr %453, i64 16
  store i32 4, ptr %464, align 8, !tbaa !46
  %465 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %465, i32 noundef 4, i32 noundef 1)
          to label %466 unwind label %469

466:                                              ; preds = %463
  %467 = load ptr, ptr %299, align 8, !tbaa !29
  %468 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %467, i64 %.012181515, i32 5
  store ptr %465, ptr %468, align 8, !tbaa !45
  br label %471

469:                                              ; preds = %463
  %470 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %465, i64 noundef 40) #15
  br label %2758

471:                                              ; preds = %._crit_edge1911, %466, %458
  %472 = phi ptr [ %.pre, %._crit_edge1911 ], [ %465, %466 ], [ %457, %458 ]
  call void @_ZN7Array2DIiEaSEi(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %4, ptr noundef nonnull align 8 dereferenceable(40) %472, i32 noundef -1)
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #12
  %473 = add nuw i64 %.012181515, 1
  %474 = load i64, ptr %53, align 8, !tbaa !26
  %475 = icmp ult i64 %473, %474
  br i1 %475, label %451, label %._crit_edge1517, !llvm.loop !47

.preheader1393:                                   ; preds = %.preheader1393.lr.ph, %._crit_edge1535
  %476 = phi i64 [ %448, %.preheader1393.lr.ph ], [ %485, %._crit_edge1535 ]
  %477 = phi ptr [ %.pre1912, %.preheader1393.lr.ph ], [ %486, %._crit_edge1535 ]
  %.011961541 = phi i32 [ -1, %.preheader1393.lr.ph ], [ %.11197.lcssa, %._crit_edge1535 ]
  %.012391540 = phi i64 [ 0, %.preheader1393.lr.ph ], [ %487, %._crit_edge1535 ]
  %478 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %477, i64 %.012391540
  %479 = load i32, ptr %478, align 8, !tbaa !34
  %.not1712 = icmp eq i32 %479, 0
  br i1 %.not1712, label %._crit_edge1535, label %.lr.ph1534

.lr.ph1534:                                       ; preds = %.preheader1393
  %480 = trunc i64 %.012391540 to i32
  br label %489

._crit_edge1545:                                  ; preds = %._crit_edge1535, %._crit_edge1517
  %481 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.41)
  %482 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %481, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %483 = load i64, ptr %53, align 8, !tbaa !26
  %.not1715 = icmp eq i64 %483, 0
  br i1 %.not1715, label %._crit_edge1550, label %.lr.ph1549

.lr.ph1549:                                       ; preds = %._crit_edge1545
  %484 = getelementptr inbounds i8, ptr %0, i64 448
  br label %621

._crit_edge1535.loopexit:                         ; preds = %600
  %.pre1933 = load i64, ptr %53, align 8, !tbaa !26
  br label %._crit_edge1535

._crit_edge1535:                                  ; preds = %._crit_edge1535.loopexit, %.preheader1393
  %485 = phi i64 [ %476, %.preheader1393 ], [ %.pre1933, %._crit_edge1535.loopexit ]
  %486 = phi ptr [ %477, %.preheader1393 ], [ %604, %._crit_edge1535.loopexit ]
  %.11197.lcssa = phi i32 [ %.011961541, %.preheader1393 ], [ %.31199, %._crit_edge1535.loopexit ]
  %487 = add nuw i64 %.012391540, 1
  %488 = icmp ult i64 %487, %485
  br i1 %488, label %.preheader1393, label %._crit_edge1545, !llvm.loop !48

489:                                              ; preds = %.lr.ph1534, %600
  %490 = phi i32 [ %479, %.lr.ph1534 ], [ %606, %600 ]
  %491 = phi ptr [ %477, %.lr.ph1534 ], [ %604, %600 ]
  %.111971530 = phi i32 [ %.011961541, %.lr.ph1534 ], [ %.31199, %600 ]
  %.012551529 = phi i64 [ 0, %.lr.ph1534 ], [ %603, %600 ]
  %492 = add nsw i32 %490, -1
  %493 = sext i32 %492 to i64
  %494 = icmp ult i64 %.012551529, %493
  br i1 %494, label %495, label %502

495:                                              ; preds = %489
  %496 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %491, i64 %.012391540, i32 2
  %497 = load ptr, ptr %496, align 8, !tbaa !30
  %498 = trunc i64 %.012551529 to i32
  %499 = add i32 %498, 1
  %500 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %497, i32 noundef %499)
  %501 = load i32, ptr %500, align 4, !tbaa !32
  %.pre1913 = load ptr, ptr %449, align 8, !tbaa !29
  br label %502

502:                                              ; preds = %495, %489
  %503 = phi ptr [ %.pre1913, %495 ], [ %491, %489 ]
  %.21198 = phi i32 [ %501, %495 ], [ %.111971530, %489 ]
  %504 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %503, i64 %.012391540
  %505 = load i32, ptr %504, align 8, !tbaa !34
  %506 = add nsw i32 %505, -1
  %507 = sext i32 %506 to i64
  %508 = icmp eq i64 %.012551529, %507
  br i1 %508, label %509, label %514

509:                                              ; preds = %502
  %510 = getelementptr inbounds i8, ptr %504, i64 8
  %511 = load ptr, ptr %510, align 8, !tbaa !30
  %512 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %511, i32 noundef 0)
  %513 = load i32, ptr %512, align 4, !tbaa !32
  %.pre1914 = load ptr, ptr %449, align 8, !tbaa !29
  br label %514

514:                                              ; preds = %509, %502
  %515 = phi ptr [ %.pre1914, %509 ], [ %503, %502 ]
  %.31199 = phi i32 [ %513, %509 ], [ %.21198, %502 ]
  %516 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %515, i64 %.012391540, i32 2
  %517 = load ptr, ptr %516, align 8, !tbaa !30
  %518 = trunc i64 %.012551529 to i32
  %519 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %517, i32 noundef %518)
  %520 = load i32, ptr %519, align 4, !tbaa !32
  %521 = sext i32 %520 to i64
  %522 = load ptr, ptr %450, align 8, !tbaa !14
  %523 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %522, i64 %521, i32 4
  %524 = load i32, ptr %523, align 8, !tbaa !15
  %.not1713 = icmp eq i32 %524, 0
  br i1 %.not1713, label %..loopexit1392_crit_edge, label %.lr.ph1526

..loopexit1392_crit_edge:                         ; preds = %514
  %.pre1932 = load ptr, ptr %449, align 8, !tbaa !29
  br label %.loopexit2000

.lr.ph1526:                                       ; preds = %514, %._crit_edge1521
  %525 = phi ptr [ %575, %._crit_edge1521 ], [ %522, %514 ]
  %.012591523 = phi i64 [ %574, %._crit_edge1521 ], [ 0, %514 ]
  %526 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %525, i64 %521, i32 5
  %527 = trunc i64 %.012591523 to i32
  %528 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %526, i32 noundef %527)
  %529 = load i32, ptr %528, align 4, !tbaa !32
  %530 = sext i32 %529 to i64
  %531 = load ptr, ptr %449, align 8, !tbaa !29
  %532 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %531, i64 %530
  %533 = load i32, ptr %532, align 8, !tbaa !34
  %.not1714 = icmp eq i32 %533, 0
  br i1 %.not1714, label %._crit_edge1521, label %534

534:                                              ; preds = %.lr.ph1526
  %535 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %531, i64 %530, i32 2
  %536 = load ptr, ptr %535, align 8, !tbaa !30
  %537 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %536, i32 noundef 0)
  %538 = load i32, ptr %537, align 4, !tbaa !32
  %539 = load ptr, ptr %449, align 8, !tbaa !29
  %540 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %539, i64 %530
  %541 = getelementptr inbounds i8, ptr %540, i64 8
  %542 = load ptr, ptr %541, align 8, !tbaa !30
  %543 = load i32, ptr %540, align 8, !tbaa !34
  %544 = add nsw i32 %543, -1
  %545 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %542, i32 noundef %544)
  %.7.peel.pre = load i32, ptr %545, align 4, !tbaa !32
  %546 = icmp eq i32 %538, %520
  %547 = icmp eq i32 %.7.peel.pre, %.31199
  %or.cond1322.peel = select i1 %546, i1 %547, i1 false
  br i1 %or.cond1322.peel, label %.loopexit1998, label %548

548:                                              ; preds = %534
  %549 = load ptr, ptr %449, align 8, !tbaa !29
  %550 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %549, i64 %530
  %551 = load i32, ptr %550, align 8, !tbaa !34
  %552 = icmp ugt i32 %551, 1
  br i1 %552, label %.lr.ph1520.peel.next, label %._crit_edge1521

553:                                              ; preds = %.lr.ph1520.peel.next
  %554 = add nuw i64 %.012581518, 1
  %555 = load ptr, ptr %449, align 8, !tbaa !29
  %556 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %555, i64 %530
  %557 = load i32, ptr %556, align 8, !tbaa !34
  %558 = sext i32 %557 to i64
  %559 = icmp ult i64 %554, %558
  br i1 %559, label %.lr.ph1520.peel.next, label %._crit_edge1521, !llvm.loop !49

.lr.ph1520.peel.next:                             ; preds = %548, %553
  %560 = phi ptr [ %555, %553 ], [ %549, %548 ]
  %.012581518 = phi i64 [ %554, %553 ], [ 1, %548 ]
  %561 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %560, i64 %530, i32 2
  %562 = load ptr, ptr %561, align 8, !tbaa !30
  %563 = trunc i64 %.012581518 to i32
  %564 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %562, i32 noundef %563)
  %565 = load i32, ptr %564, align 4, !tbaa !32
  %566 = load ptr, ptr %449, align 8, !tbaa !29
  %567 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %566, i64 %530, i32 2
  %568 = load ptr, ptr %567, align 8, !tbaa !30
  %569 = add i32 %563, -1
  %570 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %568, i32 noundef %569)
  %.7.pre = load i32, ptr %570, align 4, !tbaa !32
  %571 = icmp eq i32 %565, %520
  %572 = icmp eq i32 %.7.pre, %.31199
  %or.cond1322 = select i1 %571, i1 %572, i1 false
  br i1 %or.cond1322, label %.loopexit1998, label %553

._crit_edge1521:                                  ; preds = %553, %548, %.lr.ph1526
  %573 = phi ptr [ %531, %.lr.ph1526 ], [ %549, %548 ], [ %555, %553 ]
  %574 = add nuw i64 %.012591523, 1
  %575 = load ptr, ptr %450, align 8, !tbaa !14
  %576 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %575, i64 %521, i32 4
  %577 = load i32, ptr %576, align 8, !tbaa !15
  %578 = sext i32 %577 to i64
  %579 = icmp ult i64 %574, %578
  br i1 %579, label %.lr.ph1526, label %.loopexit2000, !llvm.loop !51

.loopexit1998:                                    ; preds = %534, %.lr.ph1520.peel.next
  %.lcssa1816 = phi i32 [ %563, %.lr.ph1520.peel.next ], [ 0, %534 ]
  %580 = add i32 %.lcssa1816, 1
  %581 = load ptr, ptr %449, align 8, !tbaa !29
  %582 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %581, i64 %530
  %583 = load i32, ptr %582, align 8, !tbaa !34
  %.not1317 = icmp slt i32 %580, %583
  %584 = select i1 %.not1317, i32 0, i32 %583
  %spec.select = sub nsw i32 %580, %584
  %585 = add i32 %518, 2
  %586 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %581, i64 %.012391540
  %587 = load i32, ptr %586, align 8, !tbaa !34
  %.not1318 = icmp slt i32 %585, %587
  %588 = select i1 %.not1318, i32 0, i32 %587
  %spec.select1323 = sub nsw i32 %585, %588
  %589 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %581, i64 %.012391540, i32 5
  %590 = load ptr, ptr %589, align 8, !tbaa !45
  %591 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %590, i32 noundef %spec.select1323)
  store i32 %529, ptr %591, align 4, !tbaa !32
  %592 = load ptr, ptr %449, align 8, !tbaa !29
  %593 = sext i32 %529 to i64
  %594 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %592, i64 %593, i32 5
  br label %600

.loopexit2000:                                    ; preds = %._crit_edge1521, %..loopexit1392_crit_edge
  %.ph = phi ptr [ %.pre1932, %..loopexit1392_crit_edge ], [ %573, %._crit_edge1521 ]
  %595 = add i32 %518, 2
  %596 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %.ph, i64 %.012391540
  %597 = load i32, ptr %596, align 8, !tbaa !34
  %.not13181973 = icmp slt i32 %595, %597
  %598 = select i1 %.not13181973, i32 0, i32 %597
  %spec.select13231974 = sub nsw i32 %595, %598
  %599 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %.ph, i64 %.012391540, i32 5
  br label %600

600:                                              ; preds = %.loopexit1998, %.loopexit2000
  %.sink2151 = phi ptr [ %594, %.loopexit1998 ], [ %599, %.loopexit2000 ]
  %spec.select.sink = phi i32 [ %spec.select, %.loopexit1998 ], [ %spec.select13231974, %.loopexit2000 ]
  %.sink = phi i32 [ %480, %.loopexit1998 ], [ -1, %.loopexit2000 ]
  %601 = load ptr, ptr %.sink2151, align 8, !tbaa !45
  %602 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %601, i32 noundef %spec.select.sink)
  store i32 %.sink, ptr %602, align 4, !tbaa !32
  %603 = add nuw i64 %.012551529, 1
  %604 = load ptr, ptr %449, align 8, !tbaa !29
  %605 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %604, i64 %.012391540
  %606 = load i32, ptr %605, align 8, !tbaa !34
  %607 = sext i32 %606 to i64
  %608 = icmp ult i64 %603, %607
  br i1 %608, label %489, label %._crit_edge1535.loopexit, !llvm.loop !52

._crit_edge1550:                                  ; preds = %761, %._crit_edge1545
  %609 = load i64, ptr %47, align 8, !tbaa !25
  %610 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %609, i64 120)
  %611 = extractvalue { i64, i1 } %610, 1
  %612 = extractvalue { i64, i1 } %610, 0
  %613 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %612, i64 8)
  %614 = extractvalue { i64, i1 } %613, 1
  %615 = or i1 %611, %614
  %616 = extractvalue { i64, i1 } %613, 0
  %617 = select i1 %615, i64 -1, i64 %616
  %618 = call noalias noundef nonnull ptr @_Znam(i64 noundef %617) #14
  store i64 %609, ptr %618, align 16
  %.ptr1289 = getelementptr inbounds i8, ptr %618, i64 8
  %619 = icmp eq i64 %609, 0
  br i1 %619, label %.loopexit1391.thread, label %765

.loopexit1391.thread:                             ; preds = %._crit_edge1550
  %620 = getelementptr inbounds i8, ptr %0, i64 464
  store ptr %.ptr1289, ptr %620, align 8, !tbaa !53
  br label %._crit_edge1554

621:                                              ; preds = %.lr.ph1549, %761
  %.012571546 = phi i64 [ 0, %.lr.ph1549 ], [ %762, %761 ]
  %622 = load ptr, ptr %484, align 8, !tbaa !29
  %623 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %622, i64 %.012571546, i32 2
  %624 = load ptr, ptr %623, align 8, !tbaa !30
  %625 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %624, i32 noundef 0)
  %626 = load ptr, ptr %484, align 8, !tbaa !29
  %627 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %626, i64 %.012571546, i32 2
  %628 = load ptr, ptr %627, align 8, !tbaa !30
  %629 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %628, i32 noundef 1)
  %630 = load ptr, ptr %484, align 8, !tbaa !29
  %631 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %630, i64 %.012571546, i32 2
  %632 = load ptr, ptr %631, align 8, !tbaa !30
  %633 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %632, i32 noundef 2)
  %634 = load ptr, ptr %484, align 8, !tbaa !29
  %635 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %634, i64 %.012571546
  %636 = load i32, ptr %635, align 8, !tbaa !34
  switch i32 %636, label %761 [
    i32 3, label %637
    i32 4, label %687
  ]

637:                                              ; preds = %621
  %638 = getelementptr inbounds i8, ptr %635, i64 24
  %639 = load ptr, ptr %638, align 8, !tbaa !45
  %640 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %639, i32 noundef 2)
  %641 = load i32, ptr %640, align 4, !tbaa !32
  %642 = sext i32 %641 to i64
  %643 = icmp ult i64 %.012571546, %642
  br i1 %643, label %651, label %644

644:                                              ; preds = %637
  %645 = load ptr, ptr %484, align 8, !tbaa !29
  %646 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %645, i64 %.012571546, i32 5
  %647 = load ptr, ptr %646, align 8, !tbaa !45
  %648 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %647, i32 noundef 2)
  %649 = load i32, ptr %648, align 4, !tbaa !32
  %650 = icmp eq i32 %649, -1
  br i1 %650, label %651, label %654

651:                                              ; preds = %644, %637
  %652 = load i64, ptr %47, align 8, !tbaa !25
  %653 = add i64 %652, 1
  store i64 %653, ptr %47, align 8, !tbaa !25
  br label %654

654:                                              ; preds = %651, %644
  %655 = load ptr, ptr %484, align 8, !tbaa !29
  %656 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %655, i64 %.012571546, i32 5
  %657 = load ptr, ptr %656, align 8, !tbaa !45
  %658 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %657, i32 noundef 0)
  %659 = load i32, ptr %658, align 4, !tbaa !32
  %660 = sext i32 %659 to i64
  %661 = icmp ult i64 %.012571546, %660
  br i1 %661, label %669, label %662

662:                                              ; preds = %654
  %663 = load ptr, ptr %484, align 8, !tbaa !29
  %664 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %663, i64 %.012571546, i32 5
  %665 = load ptr, ptr %664, align 8, !tbaa !45
  %666 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %665, i32 noundef 0)
  %667 = load i32, ptr %666, align 4, !tbaa !32
  %668 = icmp eq i32 %667, -1
  br i1 %668, label %669, label %672

669:                                              ; preds = %662, %654
  %670 = load i64, ptr %47, align 8, !tbaa !25
  %671 = add i64 %670, 1
  store i64 %671, ptr %47, align 8, !tbaa !25
  br label %672

672:                                              ; preds = %669, %662
  %673 = load ptr, ptr %484, align 8, !tbaa !29
  %674 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %673, i64 %.012571546, i32 5
  %675 = load ptr, ptr %674, align 8, !tbaa !45
  %676 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %675, i32 noundef 1)
  %677 = load i32, ptr %676, align 4, !tbaa !32
  %678 = sext i32 %677 to i64
  %679 = icmp ult i64 %.012571546, %678
  br i1 %679, label %.sink.split, label %680

680:                                              ; preds = %672
  %681 = load ptr, ptr %484, align 8, !tbaa !29
  %682 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %681, i64 %.012571546, i32 5
  %683 = load ptr, ptr %682, align 8, !tbaa !45
  %684 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %683, i32 noundef 1)
  %685 = load i32, ptr %684, align 4, !tbaa !32
  %686 = icmp eq i32 %685, -1
  br i1 %686, label %.sink.split, label %761

687:                                              ; preds = %621
  %688 = getelementptr inbounds i8, ptr %635, i64 8
  %689 = load ptr, ptr %688, align 8, !tbaa !30
  %690 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %689, i32 noundef 3)
  %691 = load ptr, ptr %484, align 8, !tbaa !29
  %692 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %691, i64 %.012571546, i32 5
  %693 = load ptr, ptr %692, align 8, !tbaa !45
  %694 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %693, i32 noundef 2)
  %695 = load i32, ptr %694, align 4, !tbaa !32
  %696 = sext i32 %695 to i64
  %697 = icmp ult i64 %.012571546, %696
  br i1 %697, label %705, label %698

698:                                              ; preds = %687
  %699 = load ptr, ptr %484, align 8, !tbaa !29
  %700 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %699, i64 %.012571546, i32 5
  %701 = load ptr, ptr %700, align 8, !tbaa !45
  %702 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %701, i32 noundef 2)
  %703 = load i32, ptr %702, align 4, !tbaa !32
  %704 = icmp eq i32 %703, -1
  br i1 %704, label %705, label %708

705:                                              ; preds = %698, %687
  %706 = load i64, ptr %47, align 8, !tbaa !25
  %707 = add i64 %706, 1
  store i64 %707, ptr %47, align 8, !tbaa !25
  br label %708

708:                                              ; preds = %705, %698
  %709 = load ptr, ptr %484, align 8, !tbaa !29
  %710 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %709, i64 %.012571546, i32 5
  %711 = load ptr, ptr %710, align 8, !tbaa !45
  %712 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %711, i32 noundef 3)
  %713 = load i32, ptr %712, align 4, !tbaa !32
  %714 = sext i32 %713 to i64
  %715 = icmp ult i64 %.012571546, %714
  br i1 %715, label %723, label %716

716:                                              ; preds = %708
  %717 = load ptr, ptr %484, align 8, !tbaa !29
  %718 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %717, i64 %.012571546, i32 5
  %719 = load ptr, ptr %718, align 8, !tbaa !45
  %720 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %719, i32 noundef 3)
  %721 = load i32, ptr %720, align 4, !tbaa !32
  %722 = icmp eq i32 %721, -1
  br i1 %722, label %723, label %726

723:                                              ; preds = %716, %708
  %724 = load i64, ptr %47, align 8, !tbaa !25
  %725 = add i64 %724, 1
  store i64 %725, ptr %47, align 8, !tbaa !25
  br label %726

726:                                              ; preds = %723, %716
  %727 = load ptr, ptr %484, align 8, !tbaa !29
  %728 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %727, i64 %.012571546, i32 5
  %729 = load ptr, ptr %728, align 8, !tbaa !45
  %730 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %729, i32 noundef 0)
  %731 = load i32, ptr %730, align 4, !tbaa !32
  %732 = sext i32 %731 to i64
  %733 = icmp ult i64 %.012571546, %732
  br i1 %733, label %741, label %734

734:                                              ; preds = %726
  %735 = load ptr, ptr %484, align 8, !tbaa !29
  %736 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %735, i64 %.012571546, i32 5
  %737 = load ptr, ptr %736, align 8, !tbaa !45
  %738 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %737, i32 noundef 0)
  %739 = load i32, ptr %738, align 4, !tbaa !32
  %740 = icmp eq i32 %739, -1
  br i1 %740, label %741, label %744

741:                                              ; preds = %734, %726
  %742 = load i64, ptr %47, align 8, !tbaa !25
  %743 = add i64 %742, 1
  store i64 %743, ptr %47, align 8, !tbaa !25
  br label %744

744:                                              ; preds = %741, %734
  %745 = load ptr, ptr %484, align 8, !tbaa !29
  %746 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %745, i64 %.012571546, i32 5
  %747 = load ptr, ptr %746, align 8, !tbaa !45
  %748 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %747, i32 noundef 1)
  %749 = load i32, ptr %748, align 4, !tbaa !32
  %750 = sext i32 %749 to i64
  %751 = icmp ult i64 %.012571546, %750
  br i1 %751, label %.sink.split, label %752

752:                                              ; preds = %744
  %753 = load ptr, ptr %484, align 8, !tbaa !29
  %754 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %753, i64 %.012571546, i32 5
  %755 = load ptr, ptr %754, align 8, !tbaa !45
  %756 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %755, i32 noundef 1)
  %757 = load i32, ptr %756, align 4, !tbaa !32
  %758 = icmp eq i32 %757, -1
  br i1 %758, label %.sink.split, label %761

.sink.split:                                      ; preds = %744, %752, %672, %680
  %759 = load i64, ptr %47, align 8, !tbaa !25
  %760 = add i64 %759, 1
  store i64 %760, ptr %47, align 8, !tbaa !25
  br label %761

761:                                              ; preds = %.sink.split, %621, %680, %752
  %762 = add nuw i64 %.012571546, 1
  %763 = load i64, ptr %53, align 8, !tbaa !26
  %764 = icmp ult i64 %762, %763
  br i1 %764, label %621, label %._crit_edge1550, !llvm.loop !54

765:                                              ; preds = %._crit_edge1550
  %766 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %609
  br label %767

767:                                              ; preds = %768, %765
  %.idx = phi i64 [ 8, %765 ], [ %.add, %768 ]
  %.ptr.ptr = getelementptr inbounds i8, ptr %618, i64 %.idx
  invoke void @_ZN13EulerSolver2D9edge_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(120) %.ptr.ptr)
          to label %768 unwind label %777

768:                                              ; preds = %767
  %.add = add nuw nsw i64 %.idx, 120
  %.ptr1288 = getelementptr inbounds i8, ptr %618, i64 %.add
  %769 = icmp eq ptr %.ptr1288, %766
  br i1 %769, label %.loopexit1391, label %767

.loopexit1391:                                    ; preds = %768
  %.pre1934 = load i64, ptr %47, align 8, !tbaa !25
  %770 = getelementptr inbounds i8, ptr %0, i64 464
  store ptr %.ptr1289, ptr %770, align 8, !tbaa !53
  %.not1716 = icmp eq i64 %.pre1934, 0
  br i1 %.not1716, label %._crit_edge1554, label %.lr.ph1553.preheader

.lr.ph1553.preheader:                             ; preds = %.loopexit1391
  %xtraiter2481 = and i64 %.pre1934, 1
  %771 = icmp eq i64 %.pre1934, 1
  br i1 %771, label %._crit_edge1554.loopexit.unr-lcssa, label %.lr.ph1553.preheader.new

.lr.ph1553.preheader.new:                         ; preds = %.lr.ph1553.preheader
  %unroll_iter2484 = and i64 %.pre1934, -2
  br label %.lr.ph1553

._crit_edge1554.loopexit.unr-lcssa:               ; preds = %.lr.ph1553, %.lr.ph1553.preheader
  %.012561551.unr = phi i64 [ 0, %.lr.ph1553.preheader ], [ %786, %.lr.ph1553 ]
  %lcmp.mod2483.not = icmp eq i64 %xtraiter2481, 0
  br i1 %lcmp.mod2483.not, label %._crit_edge1554, label %.lr.ph1553.epil

.lr.ph1553.epil:                                  ; preds = %._crit_edge1554.loopexit.unr-lcssa
  %772 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %.012561551.unr, i32 2
  store i32 -1, ptr %772, align 8, !tbaa !55
  %773 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %.012561551.unr, i32 3
  store i32 -1, ptr %773, align 4, !tbaa !59
  br label %._crit_edge1554

._crit_edge1554:                                  ; preds = %.lr.ph1553.epil, %._crit_edge1554.loopexit.unr-lcssa, %.loopexit1391.thread, %.loopexit1391
  %774 = phi ptr [ %620, %.loopexit1391.thread ], [ %770, %.loopexit1391 ], [ %770, %._crit_edge1554.loopexit.unr-lcssa ], [ %770, %.lr.ph1553.epil ]
  store i64 -1, ptr %47, align 8, !tbaa !25
  %775 = load i64, ptr %53, align 8, !tbaa !26
  %.not1717 = icmp eq i64 %775, 0
  br i1 %.not1717, label %._crit_edge1558.thread, label %.lr.ph1557

._crit_edge1558.thread:                           ; preds = %._crit_edge1554
  store i64 0, ptr %47, align 8, !tbaa !25
  br label %._crit_edge1562

.lr.ph1557:                                       ; preds = %._crit_edge1554
  %776 = getelementptr inbounds i8, ptr %0, i64 448
  br label %790

777:                                              ; preds = %767
  %778 = landingpad { ptr, i32 }
          cleanup
  %779 = icmp eq i64 %.idx, 8
  br i1 %779, label %.loopexit1390, label %.preheader1389

.preheader1389:                                   ; preds = %777, %.preheader1389
  %.idx1290 = phi i64 [ %.add1291, %.preheader1389 ], [ %.idx, %777 ]
  %.add1291 = add nsw i64 %.idx1290, -120
  %.ptr1293 = getelementptr inbounds i8, ptr %618, i64 %.add1291
  call void @_ZN13EulerSolver2D9edge_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(120) %.ptr1293) #12
  %780 = icmp eq i64 %.add1291, 8
  br i1 %780, label %.loopexit1390, label %.preheader1389

.loopexit1390:                                    ; preds = %.preheader1389, %777
  call void @_ZdaPvm(ptr noundef nonnull %618, i64 noundef %617) #15
  br label %2758

.lr.ph1553:                                       ; preds = %.lr.ph1553, %.lr.ph1553.preheader.new
  %.012561551 = phi i64 [ 0, %.lr.ph1553.preheader.new ], [ %786, %.lr.ph1553 ]
  %niter2485 = phi i64 [ 0, %.lr.ph1553.preheader.new ], [ %niter2485.next.1, %.lr.ph1553 ]
  %781 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %.012561551, i32 2
  store i32 -1, ptr %781, align 8, !tbaa !55
  %782 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %.012561551, i32 3
  store i32 -1, ptr %782, align 4, !tbaa !59
  %783 = or disjoint i64 %.012561551, 1
  %784 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %783, i32 2
  store i32 -1, ptr %784, align 8, !tbaa !55
  %785 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %.ptr1289, i64 %783, i32 3
  store i32 -1, ptr %785, align 4, !tbaa !59
  %786 = add nuw i64 %.012561551, 2
  %niter2485.next.1 = add i64 %niter2485, 2
  %niter2485.ncmp.1 = icmp eq i64 %niter2485.next.1, %unroll_iter2484
  br i1 %niter2485.ncmp.1, label %._crit_edge1554.loopexit.unr-lcssa, label %.lr.ph1553, !llvm.loop !60

._crit_edge1558:                                  ; preds = %1012
  %.pre1935 = load i64, ptr %47, align 8, !tbaa !25
  %787 = add i64 %.pre1935, 1
  store i64 %787, ptr %47, align 8, !tbaa !25
  %.not1718 = icmp eq i64 %787, 0
  br i1 %.not1718, label %._crit_edge1562, label %.lr.ph1561

.lr.ph1561:                                       ; preds = %._crit_edge1558
  %788 = getelementptr inbounds i8, ptr %0, i64 416
  %789 = getelementptr inbounds i8, ptr %0, i64 448
  br label %1022

790:                                              ; preds = %.lr.ph1557, %1012
  %.012541555 = phi i64 [ 0, %.lr.ph1557 ], [ %1013, %1012 ]
  %791 = load ptr, ptr %776, align 8, !tbaa !29
  %792 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %791, i64 %.012541555, i32 2
  %793 = load ptr, ptr %792, align 8, !tbaa !30
  %794 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %793, i32 noundef 0)
  %795 = load i32, ptr %794, align 4, !tbaa !32
  %796 = load ptr, ptr %776, align 8, !tbaa !29
  %797 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %796, i64 %.012541555, i32 2
  %798 = load ptr, ptr %797, align 8, !tbaa !30
  %799 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %798, i32 noundef 1)
  %800 = load i32, ptr %799, align 4, !tbaa !32
  %801 = load ptr, ptr %776, align 8, !tbaa !29
  %802 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %801, i64 %.012541555, i32 2
  %803 = load ptr, ptr %802, align 8, !tbaa !30
  %804 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %803, i32 noundef 2)
  %805 = load i32, ptr %804, align 4, !tbaa !32
  %806 = load ptr, ptr %776, align 8, !tbaa !29
  %807 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %806, i64 %.012541555
  %808 = load i32, ptr %807, align 8, !tbaa !34
  switch i32 %808, label %1012 [
    i32 3, label %809
    i32 4, label %885
  ]

809:                                              ; preds = %790
  %810 = getelementptr inbounds i8, ptr %807, i64 24
  %811 = load ptr, ptr %810, align 8, !tbaa !45
  %812 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %811, i32 noundef 2)
  %813 = load i32, ptr %812, align 4, !tbaa !32
  %814 = sext i32 %813 to i64
  %815 = icmp ult i64 %.012541555, %814
  br i1 %815, label %823, label %816

816:                                              ; preds = %809
  %817 = load ptr, ptr %776, align 8, !tbaa !29
  %818 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %817, i64 %.012541555, i32 5
  %819 = load ptr, ptr %818, align 8, !tbaa !45
  %820 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %819, i32 noundef 2)
  %821 = load i32, ptr %820, align 4, !tbaa !32
  %822 = icmp eq i32 %821, -1
  br i1 %822, label %823, label %839

823:                                              ; preds = %816, %809
  %824 = load i64, ptr %47, align 8, !tbaa !25
  %825 = add i64 %824, 1
  store i64 %825, ptr %47, align 8, !tbaa !25
  %826 = load ptr, ptr %774, align 8, !tbaa !53
  %827 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %826, i64 %825
  store i32 %795, ptr %827, align 8, !tbaa !61
  %828 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %826, i64 %825, i32 1
  store i32 %800, ptr %828, align 4, !tbaa !62
  %829 = trunc i64 %.012541555 to i32
  %830 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %826, i64 %825, i32 2
  store i32 %829, ptr %830, align 8, !tbaa !55
  %831 = load ptr, ptr %776, align 8, !tbaa !29
  %832 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %831, i64 %.012541555, i32 5
  %833 = load ptr, ptr %832, align 8, !tbaa !45
  %834 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %833, i32 noundef 2)
  %835 = load i32, ptr %834, align 4, !tbaa !32
  %836 = load ptr, ptr %774, align 8, !tbaa !53
  %837 = load i64, ptr %47, align 8, !tbaa !25
  %838 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %836, i64 %837, i32 3
  store i32 %835, ptr %838, align 4, !tbaa !59
  br label %839

839:                                              ; preds = %823, %816
  %840 = load ptr, ptr %776, align 8, !tbaa !29
  %841 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %840, i64 %.012541555, i32 5
  %842 = load ptr, ptr %841, align 8, !tbaa !45
  %843 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %842, i32 noundef 0)
  %844 = load i32, ptr %843, align 4, !tbaa !32
  %845 = sext i32 %844 to i64
  %846 = icmp ult i64 %.012541555, %845
  br i1 %846, label %854, label %847

847:                                              ; preds = %839
  %848 = load ptr, ptr %776, align 8, !tbaa !29
  %849 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %848, i64 %.012541555, i32 5
  %850 = load ptr, ptr %849, align 8, !tbaa !45
  %851 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %850, i32 noundef 0)
  %852 = load i32, ptr %851, align 4, !tbaa !32
  %853 = icmp eq i32 %852, -1
  br i1 %853, label %854, label %870

854:                                              ; preds = %847, %839
  %855 = load i64, ptr %47, align 8, !tbaa !25
  %856 = add i64 %855, 1
  store i64 %856, ptr %47, align 8, !tbaa !25
  %857 = load ptr, ptr %774, align 8, !tbaa !53
  %858 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %857, i64 %856
  store i32 %800, ptr %858, align 8, !tbaa !61
  %859 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %857, i64 %856, i32 1
  store i32 %805, ptr %859, align 4, !tbaa !62
  %860 = trunc i64 %.012541555 to i32
  %861 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %857, i64 %856, i32 2
  store i32 %860, ptr %861, align 8, !tbaa !55
  %862 = load ptr, ptr %776, align 8, !tbaa !29
  %863 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %862, i64 %.012541555, i32 5
  %864 = load ptr, ptr %863, align 8, !tbaa !45
  %865 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %864, i32 noundef 0)
  %866 = load i32, ptr %865, align 4, !tbaa !32
  %867 = load ptr, ptr %774, align 8, !tbaa !53
  %868 = load i64, ptr %47, align 8, !tbaa !25
  %869 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %867, i64 %868, i32 3
  store i32 %866, ptr %869, align 4, !tbaa !59
  br label %870

870:                                              ; preds = %854, %847
  %871 = load ptr, ptr %776, align 8, !tbaa !29
  %872 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %871, i64 %.012541555, i32 5
  %873 = load ptr, ptr %872, align 8, !tbaa !45
  %874 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %873, i32 noundef 1)
  %875 = load i32, ptr %874, align 4, !tbaa !32
  %876 = sext i32 %875 to i64
  %877 = icmp ult i64 %.012541555, %876
  br i1 %877, label %.sink.split2154, label %878

878:                                              ; preds = %870
  %879 = load ptr, ptr %776, align 8, !tbaa !29
  %880 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %879, i64 %.012541555, i32 5
  %881 = load ptr, ptr %880, align 8, !tbaa !45
  %882 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %881, i32 noundef 1)
  %883 = load i32, ptr %882, align 4, !tbaa !32
  %884 = icmp eq i32 %883, -1
  br i1 %884, label %.sink.split2154, label %1012

885:                                              ; preds = %790
  %886 = getelementptr inbounds i8, ptr %807, i64 8
  %887 = load ptr, ptr %886, align 8, !tbaa !30
  %888 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %887, i32 noundef 3)
  %889 = load i32, ptr %888, align 4, !tbaa !32
  %890 = load ptr, ptr %776, align 8, !tbaa !29
  %891 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %890, i64 %.012541555, i32 5
  %892 = load ptr, ptr %891, align 8, !tbaa !45
  %893 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %892, i32 noundef 2)
  %894 = load i32, ptr %893, align 4, !tbaa !32
  %895 = sext i32 %894 to i64
  %896 = icmp ult i64 %.012541555, %895
  br i1 %896, label %904, label %897

897:                                              ; preds = %885
  %898 = load ptr, ptr %776, align 8, !tbaa !29
  %899 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %898, i64 %.012541555, i32 5
  %900 = load ptr, ptr %899, align 8, !tbaa !45
  %901 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %900, i32 noundef 2)
  %902 = load i32, ptr %901, align 4, !tbaa !32
  %903 = icmp eq i32 %902, -1
  br i1 %903, label %904, label %920

904:                                              ; preds = %897, %885
  %905 = load i64, ptr %47, align 8, !tbaa !25
  %906 = add i64 %905, 1
  store i64 %906, ptr %47, align 8, !tbaa !25
  %907 = load ptr, ptr %774, align 8, !tbaa !53
  %908 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %907, i64 %906
  store i32 %795, ptr %908, align 8, !tbaa !61
  %909 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %907, i64 %906, i32 1
  store i32 %800, ptr %909, align 4, !tbaa !62
  %910 = trunc i64 %.012541555 to i32
  %911 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %907, i64 %906, i32 2
  store i32 %910, ptr %911, align 8, !tbaa !55
  %912 = load ptr, ptr %776, align 8, !tbaa !29
  %913 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %912, i64 %.012541555, i32 5
  %914 = load ptr, ptr %913, align 8, !tbaa !45
  %915 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %914, i32 noundef 2)
  %916 = load i32, ptr %915, align 4, !tbaa !32
  %917 = load ptr, ptr %774, align 8, !tbaa !53
  %918 = load i64, ptr %47, align 8, !tbaa !25
  %919 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %917, i64 %918, i32 3
  store i32 %916, ptr %919, align 4, !tbaa !59
  br label %920

920:                                              ; preds = %904, %897
  %921 = load ptr, ptr %776, align 8, !tbaa !29
  %922 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %921, i64 %.012541555, i32 5
  %923 = load ptr, ptr %922, align 8, !tbaa !45
  %924 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %923, i32 noundef 3)
  %925 = load i32, ptr %924, align 4, !tbaa !32
  %926 = sext i32 %925 to i64
  %927 = icmp ult i64 %.012541555, %926
  br i1 %927, label %935, label %928

928:                                              ; preds = %920
  %929 = load ptr, ptr %776, align 8, !tbaa !29
  %930 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %929, i64 %.012541555, i32 5
  %931 = load ptr, ptr %930, align 8, !tbaa !45
  %932 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %931, i32 noundef 3)
  %933 = load i32, ptr %932, align 4, !tbaa !32
  %934 = icmp eq i32 %933, -1
  br i1 %934, label %935, label %951

935:                                              ; preds = %928, %920
  %936 = load i64, ptr %47, align 8, !tbaa !25
  %937 = add i64 %936, 1
  store i64 %937, ptr %47, align 8, !tbaa !25
  %938 = load ptr, ptr %774, align 8, !tbaa !53
  %939 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %938, i64 %937
  store i32 %800, ptr %939, align 8, !tbaa !61
  %940 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %938, i64 %937, i32 1
  store i32 %805, ptr %940, align 4, !tbaa !62
  %941 = trunc i64 %.012541555 to i32
  %942 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %938, i64 %937, i32 2
  store i32 %941, ptr %942, align 8, !tbaa !55
  %943 = load ptr, ptr %776, align 8, !tbaa !29
  %944 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %943, i64 %.012541555, i32 5
  %945 = load ptr, ptr %944, align 8, !tbaa !45
  %946 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %945, i32 noundef 3)
  %947 = load i32, ptr %946, align 4, !tbaa !32
  %948 = load ptr, ptr %774, align 8, !tbaa !53
  %949 = load i64, ptr %47, align 8, !tbaa !25
  %950 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %948, i64 %949, i32 3
  store i32 %947, ptr %950, align 4, !tbaa !59
  br label %951

951:                                              ; preds = %935, %928
  %952 = load ptr, ptr %776, align 8, !tbaa !29
  %953 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %952, i64 %.012541555, i32 5
  %954 = load ptr, ptr %953, align 8, !tbaa !45
  %955 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %954, i32 noundef 0)
  %956 = load i32, ptr %955, align 4, !tbaa !32
  %957 = sext i32 %956 to i64
  %958 = icmp ult i64 %.012541555, %957
  br i1 %958, label %966, label %959

959:                                              ; preds = %951
  %960 = load ptr, ptr %776, align 8, !tbaa !29
  %961 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %960, i64 %.012541555, i32 5
  %962 = load ptr, ptr %961, align 8, !tbaa !45
  %963 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %962, i32 noundef 0)
  %964 = load i32, ptr %963, align 4, !tbaa !32
  %965 = icmp eq i32 %964, -1
  br i1 %965, label %966, label %982

966:                                              ; preds = %959, %951
  %967 = load i64, ptr %47, align 8, !tbaa !25
  %968 = add i64 %967, 1
  store i64 %968, ptr %47, align 8, !tbaa !25
  %969 = load ptr, ptr %774, align 8, !tbaa !53
  %970 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %969, i64 %968
  store i32 %805, ptr %970, align 8, !tbaa !61
  %971 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %969, i64 %968, i32 1
  store i32 %889, ptr %971, align 4, !tbaa !62
  %972 = trunc i64 %.012541555 to i32
  %973 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %969, i64 %968, i32 2
  store i32 %972, ptr %973, align 8, !tbaa !55
  %974 = load ptr, ptr %776, align 8, !tbaa !29
  %975 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %974, i64 %.012541555, i32 5
  %976 = load ptr, ptr %975, align 8, !tbaa !45
  %977 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %976, i32 noundef 0)
  %978 = load i32, ptr %977, align 4, !tbaa !32
  %979 = load ptr, ptr %774, align 8, !tbaa !53
  %980 = load i64, ptr %47, align 8, !tbaa !25
  %981 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %979, i64 %980, i32 3
  store i32 %978, ptr %981, align 4, !tbaa !59
  br label %982

982:                                              ; preds = %966, %959
  %983 = load ptr, ptr %776, align 8, !tbaa !29
  %984 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %983, i64 %.012541555, i32 5
  %985 = load ptr, ptr %984, align 8, !tbaa !45
  %986 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %985, i32 noundef 1)
  %987 = load i32, ptr %986, align 4, !tbaa !32
  %988 = sext i32 %987 to i64
  %989 = icmp ult i64 %.012541555, %988
  br i1 %989, label %.sink.split2154, label %990

990:                                              ; preds = %982
  %991 = load ptr, ptr %776, align 8, !tbaa !29
  %992 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %991, i64 %.012541555, i32 5
  %993 = load ptr, ptr %992, align 8, !tbaa !45
  %994 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %993, i32 noundef 1)
  %995 = load i32, ptr %994, align 4, !tbaa !32
  %996 = icmp eq i32 %995, -1
  br i1 %996, label %.sink.split2154, label %1012

.sink.split2154:                                  ; preds = %982, %990, %870, %878
  %.sink2170 = phi i32 [ %805, %878 ], [ %805, %870 ], [ %889, %990 ], [ %889, %982 ]
  %997 = load i64, ptr %47, align 8, !tbaa !25
  %998 = add i64 %997, 1
  store i64 %998, ptr %47, align 8, !tbaa !25
  %999 = load ptr, ptr %774, align 8, !tbaa !53
  %1000 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %999, i64 %998
  store i32 %.sink2170, ptr %1000, align 8, !tbaa !61
  %1001 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %999, i64 %998, i32 1
  store i32 %795, ptr %1001, align 4, !tbaa !62
  %1002 = trunc i64 %.012541555 to i32
  %1003 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %999, i64 %998, i32 2
  store i32 %1002, ptr %1003, align 8, !tbaa !55
  %1004 = load ptr, ptr %776, align 8, !tbaa !29
  %1005 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1004, i64 %.012541555, i32 5
  %1006 = load ptr, ptr %1005, align 8, !tbaa !45
  %1007 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1006, i32 noundef 1)
  %1008 = load i32, ptr %1007, align 4, !tbaa !32
  %1009 = load ptr, ptr %774, align 8, !tbaa !53
  %1010 = load i64, ptr %47, align 8, !tbaa !25
  %1011 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1009, i64 %1010, i32 3
  store i32 %1008, ptr %1011, align 4, !tbaa !59
  br label %1012

1012:                                             ; preds = %.sink.split2154, %790, %878, %990
  %1013 = add nuw i64 %.012541555, 1
  %1014 = load i64, ptr %53, align 8, !tbaa !26
  %1015 = icmp ult i64 %1013, %1014
  br i1 %1015, label %790, label %._crit_edge1558, !llvm.loop !63

._crit_edge1562:                                  ; preds = %1182, %._crit_edge1558.thread, %._crit_edge1558
  %1016 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.47)
  %1017 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1016, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %1018 = load i64, ptr %40, align 8, !tbaa !5
  %.not1719 = icmp eq i64 %1018, 0
  br i1 %.not1719, label %.preheader1388, label %.lr.ph1565

.lr.ph1565:                                       ; preds = %._crit_edge1562
  %1019 = getelementptr inbounds i8, ptr %0, i64 416
  %1020 = load ptr, ptr %1019, align 8, !tbaa !14
  %xtraiter2487 = and i64 %1018, 3
  %1021 = icmp ult i64 %1018, 4
  br i1 %1021, label %.preheader1388.loopexit.unr-lcssa, label %.lr.ph1565.new

.lr.ph1565.new:                                   ; preds = %.lr.ph1565
  %unroll_iter2490 = and i64 %1018, -4
  br label %1193

1022:                                             ; preds = %.lr.ph1561, %1182
  %.012531559 = phi i64 [ 0, %.lr.ph1561 ], [ %1183, %1182 ]
  %1023 = load ptr, ptr %774, align 8, !tbaa !53
  %1024 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1023, i64 %.012531559
  %1025 = load i32, ptr %1024, align 8, !tbaa !61
  %1026 = getelementptr inbounds i8, ptr %1024, i64 4
  %1027 = load i32, ptr %1026, align 4, !tbaa !62
  %1028 = getelementptr inbounds i8, ptr %1024, i64 8
  %1029 = load i32, ptr %1028, align 8, !tbaa !55
  %1030 = getelementptr inbounds i8, ptr %1024, i64 12
  %1031 = load i32, ptr %1030, align 4, !tbaa !59
  %1032 = load ptr, ptr %788, align 8, !tbaa !14
  %1033 = sext i32 %1025 to i64
  %1034 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1032, i64 %1033
  %1035 = load double, ptr %1034, align 8, !tbaa !42
  %1036 = sext i32 %1027 to i64
  %1037 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1032, i64 %1036
  %1038 = load double, ptr %1037, align 8, !tbaa !42
  %1039 = fadd double %1035, %1038
  %1040 = fmul double %1039, 5.000000e-01
  %1041 = getelementptr inbounds i8, ptr %1034, i64 8
  %1042 = load double, ptr %1041, align 8, !tbaa !43
  %1043 = getelementptr inbounds i8, ptr %1037, i64 8
  %1044 = load double, ptr %1043, align 8, !tbaa !43
  %1045 = fadd double %1042, %1044
  %1046 = fmul double %1045, 5.000000e-01
  %1047 = getelementptr inbounds i8, ptr %1024, i64 16
  call void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %5, ptr noundef nonnull align 8 dereferenceable(40) %1047, double noundef 0.000000e+00)
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #12
  %1048 = icmp sgt i32 %1029, -1
  br i1 %1048, label %1049, label %1066

1049:                                             ; preds = %1022
  %1050 = load ptr, ptr %789, align 8, !tbaa !29
  %1051 = zext nneg i32 %1029 to i64
  %1052 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1050, i64 %1051
  %1053 = getelementptr inbounds i8, ptr %1052, i64 32
  %1054 = load double, ptr %1053, align 8, !tbaa !36
  %1055 = getelementptr inbounds i8, ptr %1052, i64 40
  %1056 = load double, ptr %1055, align 8, !tbaa !37
  %1057 = fsub double %1046, %1056
  %1058 = fneg double %1057
  %1059 = load ptr, ptr %774, align 8, !tbaa !53
  %1060 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1059, i64 %.012531559, i32 4
  %1061 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1060, i32 noundef 0)
  store double %1058, ptr %1061, align 8, !tbaa !33
  %1062 = fsub double %1040, %1054
  %1063 = load ptr, ptr %774, align 8, !tbaa !53
  %1064 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1063, i64 %.012531559, i32 4
  %1065 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1064, i32 noundef 1)
  store double %1062, ptr %1065, align 8, !tbaa !33
  br label %1066

1066:                                             ; preds = %1049, %1022
  %1067 = icmp sgt i32 %1031, -1
  br i1 %1067, label %.thread1336, label %1093

.thread1336:                                      ; preds = %1066
  %1068 = load ptr, ptr %789, align 8, !tbaa !29
  %1069 = zext nneg i32 %1031 to i64
  %1070 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1068, i64 %1069
  %1071 = getelementptr inbounds i8, ptr %1070, i64 32
  %1072 = load double, ptr %1071, align 8, !tbaa !36
  %1073 = getelementptr inbounds i8, ptr %1070, i64 40
  %1074 = load double, ptr %1073, align 8, !tbaa !37
  %1075 = load ptr, ptr %774, align 8, !tbaa !53
  %1076 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1075, i64 %.012531559, i32 4
  %1077 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1076, i32 noundef 0)
  %1078 = load double, ptr %1077, align 8, !tbaa !33
  %1079 = fsub double %1074, %1046
  %1080 = fsub double %1078, %1079
  %1081 = load ptr, ptr %774, align 8, !tbaa !53
  %1082 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1081, i64 %.012531559, i32 4
  %1083 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1082, i32 noundef 0)
  store double %1080, ptr %1083, align 8, !tbaa !33
  %1084 = load ptr, ptr %774, align 8, !tbaa !53
  %1085 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1084, i64 %.012531559, i32 4
  %1086 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1085, i32 noundef 1)
  %1087 = load double, ptr %1086, align 8, !tbaa !33
  %1088 = fadd double %1072, %1087
  %1089 = fsub double %1088, %1040
  %1090 = load ptr, ptr %774, align 8, !tbaa !53
  %1091 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1090, i64 %.012531559, i32 4
  %1092 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1091, i32 noundef 1)
  store double %1089, ptr %1092, align 8, !tbaa !33
  br label %1110

1093:                                             ; preds = %1066
  %1094 = icmp slt i32 %1029, 0
  br i1 %1094, label %1095, label %1110

1095:                                             ; preds = %1093
  %1096 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.42)
  %1097 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1096, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %1098 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.43)
  %1099 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1098, i32 noundef %1025)
  %1100 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1099, ptr noundef nonnull @.str.14)
  %1101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.44)
  %1102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1101, i32 noundef %1027)
  %1103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1102, ptr noundef nonnull @.str.14)
  %1104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.45)
  %1105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1104, i32 noundef %1029)
  %1106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1105, ptr noundef nonnull @.str.14)
  %1107 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.46)
  %1108 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1107, i32 noundef %1031)
  %1109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1108, ptr noundef nonnull @.str.14)
  br label %1110

1110:                                             ; preds = %.thread1336, %1095, %1093
  %1111 = load ptr, ptr %774, align 8, !tbaa !53
  %1112 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1111, i64 %.012531559, i32 4
  %1113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1112, i32 noundef 0)
  %1114 = load double, ptr %1113, align 8, !tbaa !33
  %1115 = load ptr, ptr %774, align 8, !tbaa !53
  %1116 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1115, i64 %.012531559, i32 4
  %1117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1116, i32 noundef 0)
  %1118 = load double, ptr %1117, align 8, !tbaa !33
  %1119 = load ptr, ptr %774, align 8, !tbaa !53
  %1120 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1119, i64 %.012531559, i32 4
  %1121 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1120, i32 noundef 1)
  %1122 = load double, ptr %1121, align 8, !tbaa !33
  %1123 = load ptr, ptr %774, align 8, !tbaa !53
  %1124 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1123, i64 %.012531559, i32 4
  %1125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1124, i32 noundef 1)
  %1126 = load double, ptr %1125, align 8, !tbaa !33
  %1127 = fmul double %1122, %1126
  %1128 = call double @llvm.fmuladd.f64(double %1114, double %1118, double %1127)
  %1129 = call double @sqrt(double noundef %1128) #12
  %1130 = load ptr, ptr %774, align 8, !tbaa !53
  %1131 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1130, i64 %.012531559, i32 5
  store double %1129, ptr %1131, align 8, !tbaa !64
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #12
  %1132 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1130, i64 %.012531559
  %1133 = getelementptr inbounds i8, ptr %1132, i64 16
  %1134 = getelementptr inbounds i8, ptr %1132, i64 56
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %7, ptr noundef nonnull align 8 dereferenceable(40) %1133, ptr noundef nonnull align 8 dereferenceable(8) %1134)
  %1135 = load ptr, ptr %774, align 8, !tbaa !53
  %1136 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1135, i64 %.012531559, i32 4
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %6, ptr noundef nonnull align 8 dereferenceable(40) %1136, ptr noundef nonnull align 8 dereferenceable(40) %7)
          to label %1137 unwind label %1186

1137:                                             ; preds = %1110
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #12
  %1138 = load ptr, ptr %788, align 8, !tbaa !14
  %1139 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1138, i64 %1036
  %1140 = load double, ptr %1139, align 8, !tbaa !42
  %1141 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1138, i64 %1033
  %1142 = load double, ptr %1141, align 8, !tbaa !42
  %1143 = fsub double %1140, %1142
  %1144 = load ptr, ptr %774, align 8, !tbaa !53
  %1145 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1144, i64 %.012531559, i32 6
  %1146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1145, i32 noundef 0)
  store double %1143, ptr %1146, align 8, !tbaa !33
  %1147 = load ptr, ptr %788, align 8, !tbaa !14
  %1148 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1147, i64 %1036, i32 1
  %1149 = load double, ptr %1148, align 8, !tbaa !43
  %1150 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1147, i64 %1033, i32 1
  %1151 = load double, ptr %1150, align 8, !tbaa !43
  %1152 = fsub double %1149, %1151
  %1153 = load ptr, ptr %774, align 8, !tbaa !53
  %1154 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1153, i64 %.012531559, i32 6
  %1155 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1154, i32 noundef 1)
  store double %1152, ptr %1155, align 8, !tbaa !33
  %1156 = load ptr, ptr %774, align 8, !tbaa !53
  %1157 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1156, i64 %.012531559, i32 6
  %1158 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1157, i32 noundef 0)
  %1159 = load double, ptr %1158, align 8, !tbaa !33
  %1160 = load ptr, ptr %774, align 8, !tbaa !53
  %1161 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1160, i64 %.012531559, i32 6
  %1162 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1161, i32 noundef 0)
  %1163 = load double, ptr %1162, align 8, !tbaa !33
  %1164 = load ptr, ptr %774, align 8, !tbaa !53
  %1165 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1164, i64 %.012531559, i32 6
  %1166 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1165, i32 noundef 1)
  %1167 = load double, ptr %1166, align 8, !tbaa !33
  %1168 = load ptr, ptr %774, align 8, !tbaa !53
  %1169 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1168, i64 %.012531559, i32 6
  %1170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1169, i32 noundef 1)
  %1171 = load double, ptr %1170, align 8, !tbaa !33
  %1172 = fmul double %1167, %1171
  %1173 = call double @llvm.fmuladd.f64(double %1159, double %1163, double %1172)
  %1174 = call double @sqrt(double noundef %1173) #12
  %1175 = load ptr, ptr %774, align 8, !tbaa !53
  %1176 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1175, i64 %.012531559, i32 7
  store double %1174, ptr %1176, align 8, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #12
  %1177 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1175, i64 %.012531559
  %1178 = getelementptr inbounds i8, ptr %1177, i64 64
  %1179 = getelementptr inbounds i8, ptr %1177, i64 104
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %9, ptr noundef nonnull align 8 dereferenceable(40) %1178, ptr noundef nonnull align 8 dereferenceable(8) %1179)
  %1180 = load ptr, ptr %774, align 8, !tbaa !53
  %1181 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1180, i64 %.012531559, i32 6
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %8, ptr noundef nonnull align 8 dereferenceable(40) %1181, ptr noundef nonnull align 8 dereferenceable(40) %9)
          to label %1182 unwind label %1188

1182:                                             ; preds = %1137
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #12
  %1183 = add nuw i64 %.012531559, 1
  %1184 = load i64, ptr %47, align 8, !tbaa !25
  %1185 = icmp ult i64 %1183, %1184
  br i1 %1185, label %1022, label %._crit_edge1562, !llvm.loop !66

1186:                                             ; preds = %1110
  %1187 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #12
  br label %2758

1188:                                             ; preds = %1137
  %1189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #12
  br label %2758

.preheader1388.loopexit.unr-lcssa:                ; preds = %1193, %.lr.ph1565
  %.012521563.unr = phi i64 [ 0, %.lr.ph1565 ], [ %1201, %1193 ]
  %lcmp.mod2489.not = icmp eq i64 %xtraiter2487, 0
  br i1 %lcmp.mod2489.not, label %.preheader1388, label %.epil.preheader2486

.epil.preheader2486:                              ; preds = %.preheader1388.loopexit.unr-lcssa, %.epil.preheader2486
  %.012521563.epil = phi i64 [ %1191, %.epil.preheader2486 ], [ %.012521563.unr, %.preheader1388.loopexit.unr-lcssa ]
  %epil.iter2488 = phi i64 [ %epil.iter2488.next, %.epil.preheader2486 ], [ 0, %.preheader1388.loopexit.unr-lcssa ]
  %1190 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1020, i64 %.012521563.epil, i32 2
  store i32 0, ptr %1190, align 8, !tbaa !67
  %1191 = add nuw i64 %.012521563.epil, 1
  %epil.iter2488.next = add i64 %epil.iter2488, 1
  %epil.iter2488.cmp.not = icmp eq i64 %epil.iter2488.next, %xtraiter2487
  br i1 %epil.iter2488.cmp.not, label %.preheader1388, label %.epil.preheader2486, !llvm.loop !68

.preheader1388:                                   ; preds = %.preheader1388.loopexit.unr-lcssa, %.epil.preheader2486, %._crit_edge1562
  %1192 = load i64, ptr %47, align 8, !tbaa !25
  %.not1720 = icmp eq i64 %1192, 0
  br i1 %.not1720, label %.preheader1386, label %.lr.ph1575

1193:                                             ; preds = %1193, %.lr.ph1565.new
  %.012521563 = phi i64 [ 0, %.lr.ph1565.new ], [ %1201, %1193 ]
  %niter2491 = phi i64 [ 0, %.lr.ph1565.new ], [ %niter2491.next.3, %1193 ]
  %1194 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1020, i64 %.012521563, i32 2
  store i32 0, ptr %1194, align 8, !tbaa !67
  %1195 = or disjoint i64 %.012521563, 1
  %1196 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1020, i64 %1195, i32 2
  store i32 0, ptr %1196, align 8, !tbaa !67
  %1197 = or disjoint i64 %.012521563, 2
  %1198 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1020, i64 %1197, i32 2
  store i32 0, ptr %1198, align 8, !tbaa !67
  %1199 = or disjoint i64 %.012521563, 3
  %1200 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1020, i64 %1199, i32 2
  store i32 0, ptr %1200, align 8, !tbaa !67
  %1201 = add nuw i64 %.012521563, 4
  %niter2491.next.3 = add i64 %niter2491, 4
  %niter2491.ncmp.3 = icmp eq i64 %niter2491.next.3, %unroll_iter2490
  br i1 %niter2491.ncmp.3, label %.preheader1388.loopexit.unr-lcssa, label %1193, !llvm.loop !69

.lr.ph1575:                                       ; preds = %.preheader1388
  %1202 = getelementptr inbounds i8, ptr %0, i64 416
  %1203 = getelementptr inbounds i8, ptr %10, i64 12
  %1204 = getelementptr inbounds i8, ptr %10, i64 32
  %1205 = getelementptr inbounds i8, ptr %11, i64 12
  %1206 = getelementptr inbounds i8, ptr %11, i64 32
  br label %1210

.preheader1386:                                   ; preds = %1307, %.preheader1388
  %1207 = getelementptr inbounds i8, ptr %0, i64 472
  %1208 = load i64, ptr %1207, align 8, !tbaa !70
  %.not1723 = icmp eq i64 %1208, 0
  br i1 %.not1723, label %.preheader1379, label %.lr.ph1581

.lr.ph1581:                                       ; preds = %.preheader1386
  %1209 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre1938 = load ptr, ptr %1209, align 8, !tbaa !71
  br label %1321

1210:                                             ; preds = %.lr.ph1575, %1307
  %.012501574 = phi i64 [ 0, %.lr.ph1575 ], [ %1316, %1307 ]
  %1211 = load ptr, ptr %774, align 8, !tbaa !53
  %1212 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1211, i64 %.012501574
  %1213 = load i32, ptr %1212, align 8, !tbaa !61
  %1214 = getelementptr inbounds i8, ptr %1212, i64 4
  %1215 = load i32, ptr %1214, align 4, !tbaa !62
  %1216 = load ptr, ptr %1202, align 8, !tbaa !14
  %1217 = sext i32 %1213 to i64
  %1218 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1216, i64 %1217, i32 2
  %1219 = load i32, ptr %1218, align 8, !tbaa !67
  %1220 = add nsw i32 %1219, 1
  store i32 %1220, ptr %1218, align 8, !tbaa !67
  %1221 = icmp eq i32 %1219, 0
  br i1 %1221, label %1222, label %1229

1222:                                             ; preds = %1210
  %1223 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1223, i32 noundef 1, i32 noundef 1)
          to label %1224 unwind label %1227

1224:                                             ; preds = %1222
  %1225 = load ptr, ptr %1202, align 8, !tbaa !14
  %1226 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1225, i64 %1217, i32 3
  store ptr %1223, ptr %1226, align 8, !tbaa !72
  br label %1257

1227:                                             ; preds = %1222
  %1228 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1223, i64 noundef 40) #15
  br label %2758

1229:                                             ; preds = %1210
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #12
  %1230 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1216, i64 %1217, i32 3
  %1231 = load ptr, ptr %1230, align 8, !tbaa !72
  call void @_ZN7Array2DIiEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %10, ptr noundef nonnull align 8 dereferenceable(40) %1231)
  %1232 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
          to label %1233 unwind label %1244

1233:                                             ; preds = %1229
  %1234 = load ptr, ptr %1202, align 8, !tbaa !14
  %1235 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1234, i64 %1217, i32 2
  %1236 = load i32, ptr %1235, align 8, !tbaa !67
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1232, i32 noundef %1236, i32 noundef 1)
          to label %1237 unwind label %1246

1237:                                             ; preds = %1233
  %1238 = load ptr, ptr %1202, align 8, !tbaa !14
  %1239 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1238, i64 %1217, i32 3
  store ptr %1232, ptr %1239, align 8, !tbaa !72
  %1240 = load i32, ptr %1203, align 4, !tbaa !73
  %.not1721 = icmp eq i32 %1240, 0
  br i1 %.not1721, label %._crit_edge1569, label %.lr.ph1568

.lr.ph1568:                                       ; preds = %1237
  %1241 = load ptr, ptr %1204, align 8, !tbaa !75
  %1242 = getelementptr inbounds i8, ptr %1232, i64 32
  %1243 = load ptr, ptr %1242, align 8, !tbaa !75
  br label %1248

._crit_edge1569:                                  ; preds = %1248, %1237
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #12
  %.pre1936 = load ptr, ptr %1202, align 8, !tbaa !14
  br label %1257

1244:                                             ; preds = %1229
  %1245 = landingpad { ptr, i32 }
          cleanup
  br label %1256

1246:                                             ; preds = %1233
  %1247 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1232, i64 noundef 40) #15
  br label %1256

1248:                                             ; preds = %.lr.ph1568, %1248
  %.012491566 = phi i64 [ 0, %.lr.ph1568 ], [ %1252, %1248 ]
  %1249 = getelementptr inbounds i32, ptr %1241, i64 %.012491566
  %1250 = load i32, ptr %1249, align 4, !tbaa !32
  %1251 = getelementptr inbounds i32, ptr %1243, i64 %.012491566
  store i32 %1250, ptr %1251, align 4, !tbaa !32
  %1252 = add nuw i64 %.012491566, 1
  %1253 = load i32, ptr %1203, align 4, !tbaa !73
  %1254 = sext i32 %1253 to i64
  %1255 = icmp ult i64 %1252, %1254
  br i1 %1255, label %1248, label %._crit_edge1569, !llvm.loop !76

1256:                                             ; preds = %1246, %1244
  %.pn1306 = phi { ptr, i32 } [ %1247, %1246 ], [ %1245, %1244 ]
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #12
  br label %2758

1257:                                             ; preds = %._crit_edge1569, %1224
  %1258 = phi ptr [ %.pre1936, %._crit_edge1569 ], [ %1225, %1224 ]
  %1259 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1258, i64 %1217
  %1260 = getelementptr inbounds i8, ptr %1259, i64 24
  %1261 = load ptr, ptr %1260, align 8, !tbaa !72
  %1262 = getelementptr inbounds i8, ptr %1259, i64 16
  %1263 = load i32, ptr %1262, align 8, !tbaa !67
  %1264 = add nsw i32 %1263, -1
  %1265 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1261, i32 noundef %1264)
  store i32 %1215, ptr %1265, align 4, !tbaa !32
  %1266 = load ptr, ptr %1202, align 8, !tbaa !14
  %1267 = sext i32 %1215 to i64
  %1268 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1266, i64 %1267, i32 2
  %1269 = load i32, ptr %1268, align 8, !tbaa !67
  %1270 = add nsw i32 %1269, 1
  store i32 %1270, ptr %1268, align 8, !tbaa !67
  %1271 = icmp eq i32 %1269, 0
  br i1 %1271, label %1272, label %1279

1272:                                             ; preds = %1257
  %1273 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1273, i32 noundef 1, i32 noundef 1)
          to label %1274 unwind label %1277

1274:                                             ; preds = %1272
  %1275 = load ptr, ptr %1202, align 8, !tbaa !14
  %1276 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1275, i64 %1267, i32 3
  store ptr %1273, ptr %1276, align 8, !tbaa !72
  br label %1307

1277:                                             ; preds = %1272
  %1278 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1273, i64 noundef 40) #15
  br label %2758

1279:                                             ; preds = %1257
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #12
  %1280 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1266, i64 %1267, i32 3
  %1281 = load ptr, ptr %1280, align 8, !tbaa !72
  call void @_ZN7Array2DIiEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %11, ptr noundef nonnull align 8 dereferenceable(40) %1281)
  %1282 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
          to label %1283 unwind label %1294

1283:                                             ; preds = %1279
  %1284 = load ptr, ptr %1202, align 8, !tbaa !14
  %1285 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1284, i64 %1267, i32 2
  %1286 = load i32, ptr %1285, align 8, !tbaa !67
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1282, i32 noundef %1286, i32 noundef 1)
          to label %1287 unwind label %1296

1287:                                             ; preds = %1283
  %1288 = load ptr, ptr %1202, align 8, !tbaa !14
  %1289 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1288, i64 %1267, i32 3
  store ptr %1282, ptr %1289, align 8, !tbaa !72
  %1290 = load i32, ptr %1205, align 4, !tbaa !73
  %.not1722 = icmp eq i32 %1290, 0
  br i1 %.not1722, label %._crit_edge1573, label %.lr.ph1572

.lr.ph1572:                                       ; preds = %1287
  %1291 = load ptr, ptr %1206, align 8, !tbaa !75
  %1292 = getelementptr inbounds i8, ptr %1282, i64 32
  %1293 = load ptr, ptr %1292, align 8, !tbaa !75
  br label %1298

._crit_edge1573:                                  ; preds = %1298, %1287
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #12
  %.pre1937 = load ptr, ptr %1202, align 8, !tbaa !14
  br label %1307

1294:                                             ; preds = %1279
  %1295 = landingpad { ptr, i32 }
          cleanup
  br label %1306

1296:                                             ; preds = %1283
  %1297 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1282, i64 noundef 40) #15
  br label %1306

1298:                                             ; preds = %.lr.ph1572, %1298
  %.012481570 = phi i64 [ 0, %.lr.ph1572 ], [ %1302, %1298 ]
  %1299 = getelementptr inbounds i32, ptr %1291, i64 %.012481570
  %1300 = load i32, ptr %1299, align 4, !tbaa !32
  %1301 = getelementptr inbounds i32, ptr %1293, i64 %.012481570
  store i32 %1300, ptr %1301, align 4, !tbaa !32
  %1302 = add nuw i64 %.012481570, 1
  %1303 = load i32, ptr %1205, align 4, !tbaa !73
  %1304 = sext i32 %1303 to i64
  %1305 = icmp ult i64 %1302, %1304
  br i1 %1305, label %1298, label %._crit_edge1573, !llvm.loop !77

1306:                                             ; preds = %1296, %1294
  %.pn1308 = phi { ptr, i32 } [ %1297, %1296 ], [ %1295, %1294 ]
  call void @_ZN7Array2DIiED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #12
  br label %2758

1307:                                             ; preds = %._crit_edge1573, %1274
  %1308 = phi ptr [ %.pre1937, %._crit_edge1573 ], [ %1275, %1274 ]
  %1309 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1308, i64 %1267
  %1310 = getelementptr inbounds i8, ptr %1309, i64 24
  %1311 = load ptr, ptr %1310, align 8, !tbaa !72
  %1312 = getelementptr inbounds i8, ptr %1309, i64 16
  %1313 = load i32, ptr %1312, align 8, !tbaa !67
  %1314 = add nsw i32 %1313, -1
  %1315 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1311, i32 noundef %1314)
  store i32 %1213, ptr %1315, align 4, !tbaa !32
  %1316 = add nuw i64 %.012501574, 1
  %1317 = load i64, ptr %47, align 8, !tbaa !25
  %1318 = icmp ult i64 %1316, %1317
  br i1 %1318, label %1210, label %.preheader1386, !llvm.loop !78

.preheader1385:                                   ; preds = %._crit_edge1579
  %.not1725 = icmp eq i64 %1348, 0
  br i1 %.not1725, label %.preheader1379, label %.preheader1384.lr.ph

.preheader1384.lr.ph:                             ; preds = %.preheader1385
  %1319 = getelementptr inbounds i8, ptr %0, i64 480
  %1320 = getelementptr inbounds i8, ptr %0, i64 416
  %.pre1939 = load ptr, ptr %1319, align 8, !tbaa !71
  br label %.preheader1384

1321:                                             ; preds = %.lr.ph1581, %._crit_edge1579
  %1322 = phi ptr [ %.pre1938, %.lr.ph1581 ], [ %1346, %._crit_edge1579 ]
  %.012471580 = phi i64 [ 0, %.lr.ph1581 ], [ %1347, %._crit_edge1579 ]
  %1323 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1324 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1322, i64 %.012471580, i32 1
  %1325 = load i64, ptr %1324, align 8, !tbaa !79
  %1326 = trunc i64 %1325 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1323, i32 noundef %1326, i32 noundef 1)
          to label %1327 unwind label %1350

1327:                                             ; preds = %1321
  %1328 = load ptr, ptr %1209, align 8, !tbaa !71
  %1329 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1328, i64 %.012471580, i32 7
  store ptr %1323, ptr %1329, align 8, !tbaa !81
  %1330 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1331 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1328, i64 %.012471580, i32 1
  %1332 = load i64, ptr %1331, align 8, !tbaa !79
  %1333 = trunc i64 %1332 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1330, i32 noundef %1333, i32 noundef 1)
          to label %1334 unwind label %1352

1334:                                             ; preds = %1327
  %1335 = load ptr, ptr %1209, align 8, !tbaa !71
  %1336 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1335, i64 %.012471580, i32 8
  store ptr %1330, ptr %1336, align 8, !tbaa !82
  %1337 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1338 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1335, i64 %.012471580, i32 1
  %1339 = load i64, ptr %1338, align 8, !tbaa !79
  %1340 = trunc i64 %1339 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1337, i32 noundef %1340, i32 noundef 1)
          to label %1341 unwind label %1354

1341:                                             ; preds = %1334
  %1342 = load ptr, ptr %1209, align 8, !tbaa !71
  %1343 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1342, i64 %.012471580, i32 9
  store ptr %1337, ptr %1343, align 8, !tbaa !83
  %1344 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1342, i64 %.012471580, i32 1
  %1345 = load i64, ptr %1344, align 8, !tbaa !79
  %.not1724 = icmp eq i64 %1345, 0
  br i1 %.not1724, label %._crit_edge1579, label %.lr.ph1578

._crit_edge1579:                                  ; preds = %.lr.ph1578, %1341
  %1346 = phi ptr [ %1342, %1341 ], [ %1370, %.lr.ph1578 ]
  %1347 = add nuw i64 %.012471580, 1
  %1348 = load i64, ptr %1207, align 8, !tbaa !70
  %1349 = icmp ult i64 %1347, %1348
  br i1 %1349, label %1321, label %.preheader1385, !llvm.loop !84

1350:                                             ; preds = %1321
  %1351 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1323, i64 noundef 40) #15
  br label %2758

1352:                                             ; preds = %1327
  %1353 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1330, i64 noundef 40) #15
  br label %2758

1354:                                             ; preds = %1334
  %1355 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1337, i64 noundef 40) #15
  br label %2758

.lr.ph1578:                                       ; preds = %1341, %.lr.ph1578
  %1356 = phi ptr [ %1370, %.lr.ph1578 ], [ %1342, %1341 ]
  %.012461576 = phi i64 [ %1369, %.lr.ph1578 ], [ 0, %1341 ]
  %1357 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1356, i64 %.012471580, i32 7
  %1358 = load ptr, ptr %1357, align 8, !tbaa !81
  %1359 = trunc i64 %.012461576 to i32
  %1360 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1358, i32 noundef %1359)
  store double 0.000000e+00, ptr %1360, align 8, !tbaa !33
  %1361 = load ptr, ptr %1209, align 8, !tbaa !71
  %1362 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1361, i64 %.012471580, i32 8
  %1363 = load ptr, ptr %1362, align 8, !tbaa !82
  %1364 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1363, i32 noundef %1359)
  store double 0.000000e+00, ptr %1364, align 8, !tbaa !33
  %1365 = load ptr, ptr %1209, align 8, !tbaa !71
  %1366 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1365, i64 %.012471580, i32 9
  %1367 = load ptr, ptr %1366, align 8, !tbaa !83
  %1368 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1367, i32 noundef %1359)
  store double 0.000000e+00, ptr %1368, align 8, !tbaa !33
  %1369 = add nuw i64 %.012461576, 1
  %1370 = load ptr, ptr %1209, align 8, !tbaa !71
  %1371 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1370, i64 %.012471580, i32 1
  %1372 = load i64, ptr %1371, align 8, !tbaa !79
  %1373 = icmp ult i64 %1369, %1372
  br i1 %1373, label %.lr.ph1578, label %._crit_edge1579, !llvm.loop !85

.preheader1384:                                   ; preds = %.preheader1384.lr.ph, %._crit_edge1584
  %1374 = phi i64 [ %1348, %.preheader1384.lr.ph ], [ %1379, %._crit_edge1584 ]
  %1375 = phi ptr [ %.pre1939, %.preheader1384.lr.ph ], [ %1380, %._crit_edge1584 ]
  %.012451585 = phi i64 [ 0, %.preheader1384.lr.ph ], [ %1381, %._crit_edge1584 ]
  %1376 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1375, i64 %.012451585, i32 1
  %1377 = load i64, ptr %1376, align 8, !tbaa !79
  %.not1726 = icmp eq i64 %1377, 1
  br i1 %.not1726, label %._crit_edge1584, label %.lr.ph1583

.preheader1383:                                   ; preds = %._crit_edge1584
  %.not1727 = icmp eq i64 %1379, 0
  br i1 %.not1727, label %.preheader1379, label %.preheader1382.lr.ph

.preheader1382.lr.ph:                             ; preds = %.preheader1383
  %1378 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre1941 = load ptr, ptr %1378, align 8, !tbaa !71
  br label %.preheader1382

._crit_edge1584.loopexit:                         ; preds = %.lr.ph1583
  %.pre1940 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1584

._crit_edge1584:                                  ; preds = %._crit_edge1584.loopexit, %.preheader1384
  %1379 = phi i64 [ %.pre1940, %._crit_edge1584.loopexit ], [ %1374, %.preheader1384 ]
  %1380 = phi ptr [ %1465, %._crit_edge1584.loopexit ], [ %1375, %.preheader1384 ]
  %1381 = add nuw i64 %.012451585, 1
  %1382 = icmp ult i64 %1381, %1379
  br i1 %1382, label %.preheader1384, label %.preheader1383, !llvm.loop !86

.lr.ph1583:                                       ; preds = %.preheader1384, %.lr.ph1583
  %1383 = phi ptr [ %1465, %.lr.ph1583 ], [ %1375, %.preheader1384 ]
  %.012441582 = phi i64 [ %1406, %.lr.ph1583 ], [ 0, %.preheader1384 ]
  %1384 = load ptr, ptr %1320, align 8, !tbaa !14
  %1385 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1383, i64 %.012451585, i32 2
  %1386 = load ptr, ptr %1385, align 8, !tbaa !87
  %1387 = trunc i64 %.012441582 to i32
  %1388 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1386, i32 noundef %1387)
  %1389 = load i32, ptr %1388, align 4, !tbaa !32
  %1390 = sext i32 %1389 to i64
  %1391 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1384, i64 %1390
  %1392 = load double, ptr %1391, align 8, !tbaa !42
  %1393 = load ptr, ptr %1320, align 8, !tbaa !14
  %1394 = load ptr, ptr %1319, align 8, !tbaa !71
  %1395 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1394, i64 %.012451585, i32 2
  %1396 = load ptr, ptr %1395, align 8, !tbaa !87
  %1397 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1396, i32 noundef %1387)
  %1398 = load i32, ptr %1397, align 4, !tbaa !32
  %1399 = sext i32 %1398 to i64
  %1400 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1393, i64 %1399, i32 1
  %1401 = load double, ptr %1400, align 8, !tbaa !43
  %1402 = load ptr, ptr %1320, align 8, !tbaa !14
  %1403 = load ptr, ptr %1319, align 8, !tbaa !71
  %1404 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1403, i64 %.012451585, i32 2
  %1405 = load ptr, ptr %1404, align 8, !tbaa !87
  %1406 = add nuw i64 %.012441582, 1
  %1407 = trunc i64 %1406 to i32
  %1408 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1405, i32 noundef %1407)
  %1409 = load i32, ptr %1408, align 4, !tbaa !32
  %1410 = sext i32 %1409 to i64
  %1411 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1402, i64 %1410
  %1412 = load double, ptr %1411, align 8, !tbaa !42
  %1413 = load ptr, ptr %1320, align 8, !tbaa !14
  %1414 = load ptr, ptr %1319, align 8, !tbaa !71
  %1415 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1414, i64 %.012451585, i32 2
  %1416 = load ptr, ptr %1415, align 8, !tbaa !87
  %1417 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1416, i32 noundef %1407)
  %1418 = load i32, ptr %1417, align 4, !tbaa !32
  %1419 = sext i32 %1418 to i64
  %1420 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1413, i64 %1419, i32 1
  %1421 = load double, ptr %1420, align 8, !tbaa !43
  %1422 = load ptr, ptr %1319, align 8, !tbaa !71
  %1423 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1422, i64 %.012451585, i32 7
  %1424 = load ptr, ptr %1423, align 8, !tbaa !81
  %1425 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1424, i32 noundef %1387)
  %1426 = load double, ptr %1425, align 8, !tbaa !33
  %1427 = fsub double %1421, %1401
  %1428 = fneg double %1427
  %1429 = call double @llvm.fmuladd.f64(double %1428, double 5.000000e-01, double %1426)
  %1430 = load ptr, ptr %1319, align 8, !tbaa !71
  %1431 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1430, i64 %.012451585, i32 7
  %1432 = load ptr, ptr %1431, align 8, !tbaa !81
  %1433 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1432, i32 noundef %1387)
  store double %1429, ptr %1433, align 8, !tbaa !33
  %1434 = load ptr, ptr %1319, align 8, !tbaa !71
  %1435 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1434, i64 %.012451585, i32 8
  %1436 = load ptr, ptr %1435, align 8, !tbaa !82
  %1437 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1436, i32 noundef %1387)
  %1438 = load double, ptr %1437, align 8, !tbaa !33
  %1439 = fsub double %1412, %1392
  %1440 = call double @llvm.fmuladd.f64(double %1439, double 5.000000e-01, double %1438)
  %1441 = load ptr, ptr %1319, align 8, !tbaa !71
  %1442 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1441, i64 %.012451585, i32 8
  %1443 = load ptr, ptr %1442, align 8, !tbaa !82
  %1444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1443, i32 noundef %1387)
  store double %1440, ptr %1444, align 8, !tbaa !33
  %1445 = load ptr, ptr %1319, align 8, !tbaa !71
  %1446 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1445, i64 %.012451585, i32 7
  %1447 = load ptr, ptr %1446, align 8, !tbaa !81
  %1448 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1447, i32 noundef %1407)
  %1449 = load double, ptr %1448, align 8, !tbaa !33
  %1450 = call double @llvm.fmuladd.f64(double %1428, double 5.000000e-01, double %1449)
  %1451 = load ptr, ptr %1319, align 8, !tbaa !71
  %1452 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1451, i64 %.012451585, i32 7
  %1453 = load ptr, ptr %1452, align 8, !tbaa !81
  %1454 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1453, i32 noundef %1407)
  store double %1450, ptr %1454, align 8, !tbaa !33
  %1455 = load ptr, ptr %1319, align 8, !tbaa !71
  %1456 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1455, i64 %.012451585, i32 8
  %1457 = load ptr, ptr %1456, align 8, !tbaa !82
  %1458 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1457, i32 noundef %1407)
  %1459 = load double, ptr %1458, align 8, !tbaa !33
  %1460 = call double @llvm.fmuladd.f64(double %1439, double 5.000000e-01, double %1459)
  %1461 = load ptr, ptr %1319, align 8, !tbaa !71
  %1462 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1461, i64 %.012451585, i32 8
  %1463 = load ptr, ptr %1462, align 8, !tbaa !82
  %1464 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1463, i32 noundef %1407)
  store double %1460, ptr %1464, align 8, !tbaa !33
  %1465 = load ptr, ptr %1319, align 8, !tbaa !71
  %1466 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1465, i64 %.012451585, i32 1
  %1467 = load i64, ptr %1466, align 8, !tbaa !79
  %1468 = add i64 %1467, -1
  %1469 = icmp ult i64 %1406, %1468
  br i1 %1469, label %.lr.ph1583, label %._crit_edge1584.loopexit, !llvm.loop !88

.preheader1382:                                   ; preds = %.preheader1382.lr.ph, %._crit_edge1588
  %1470 = phi i64 [ %1379, %.preheader1382.lr.ph ], [ %1476, %._crit_edge1588 ]
  %1471 = phi ptr [ %.pre1941, %.preheader1382.lr.ph ], [ %1477, %._crit_edge1588 ]
  %.012431589 = phi i64 [ 0, %.preheader1382.lr.ph ], [ %1478, %._crit_edge1588 ]
  %1472 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1471, i64 %.012431589, i32 1
  %1473 = load i64, ptr %1472, align 8, !tbaa !79
  %.not1728 = icmp eq i64 %1473, 0
  br i1 %.not1728, label %._crit_edge1588, label %.lr.ph1587

.preheader1381:                                   ; preds = %._crit_edge1588
  %.not1729 = icmp eq i64 %1476, 0
  br i1 %.not1729, label %.preheader1379, label %.preheader1380.lr.ph

.preheader1380.lr.ph:                             ; preds = %.preheader1381
  %1474 = getelementptr inbounds i8, ptr %0, i64 480
  %.sroa.2304.0..sroa_idx = getelementptr inbounds i8, ptr %18, i64 8
  %.sroa.2300.0..sroa_idx = getelementptr inbounds i8, ptr %19, i64 8
  %.sroa.2296.0..sroa_idx = getelementptr inbounds i8, ptr %20, i64 8
  %.sroa.2316.0..sroa_idx = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.2312.0..sroa_idx = getelementptr inbounds i8, ptr %16, i64 8
  %.sroa.2308.0..sroa_idx = getelementptr inbounds i8, ptr %17, i64 8
  %.sroa.2328.0..sroa_idx = getelementptr inbounds i8, ptr %12, i64 8
  %.sroa.2324.0..sroa_idx = getelementptr inbounds i8, ptr %13, i64 8
  %.sroa.2320.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 8
  %1475 = getelementptr inbounds i8, ptr %0, i64 416
  %.sroa.2292.0..sroa_idx = getelementptr inbounds i8, ptr %21, i64 8
  %.sroa.2288.0..sroa_idx = getelementptr inbounds i8, ptr %22, i64 8
  %.pre1943 = load ptr, ptr %1474, align 8, !tbaa !71
  br label %.preheader1380

._crit_edge1588.loopexit:                         ; preds = %.lr.ph1587
  %.pre1942 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1588

._crit_edge1588:                                  ; preds = %._crit_edge1588.loopexit, %.preheader1382
  %1476 = phi i64 [ %.pre1942, %._crit_edge1588.loopexit ], [ %1470, %.preheader1382 ]
  %1477 = phi ptr [ %1541, %._crit_edge1588.loopexit ], [ %1471, %.preheader1382 ]
  %1478 = add nuw i64 %.012431589, 1
  %1479 = icmp ult i64 %1478, %1476
  br i1 %1479, label %.preheader1382, label %.preheader1381, !llvm.loop !89

.lr.ph1587:                                       ; preds = %.preheader1382, %.lr.ph1587
  %1480 = phi ptr [ %1541, %.lr.ph1587 ], [ %1471, %.preheader1382 ]
  %.012421586 = phi i64 [ %1540, %.lr.ph1587 ], [ 0, %.preheader1382 ]
  %1481 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1480, i64 %.012431589, i32 7
  %1482 = load ptr, ptr %1481, align 8, !tbaa !81
  %1483 = trunc i64 %.012421586 to i32
  %1484 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1482, i32 noundef %1483)
  %1485 = load double, ptr %1484, align 8, !tbaa !33
  %1486 = load ptr, ptr %1378, align 8, !tbaa !71
  %1487 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1486, i64 %.012431589, i32 7
  %1488 = load ptr, ptr %1487, align 8, !tbaa !81
  %1489 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1488, i32 noundef %1483)
  %1490 = load double, ptr %1489, align 8, !tbaa !33
  %1491 = load ptr, ptr %1378, align 8, !tbaa !71
  %1492 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1491, i64 %.012431589, i32 8
  %1493 = load ptr, ptr %1492, align 8, !tbaa !82
  %1494 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1493, i32 noundef %1483)
  %1495 = load double, ptr %1494, align 8, !tbaa !33
  %1496 = load ptr, ptr %1378, align 8, !tbaa !71
  %1497 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1496, i64 %.012431589, i32 8
  %1498 = load ptr, ptr %1497, align 8, !tbaa !82
  %1499 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1498, i32 noundef %1483)
  %1500 = load double, ptr %1499, align 8, !tbaa !33
  %1501 = fmul double %1495, %1500
  %1502 = call double @llvm.fmuladd.f64(double %1485, double %1490, double %1501)
  %1503 = call double @sqrt(double noundef %1502) #12
  %1504 = load ptr, ptr %1378, align 8, !tbaa !71
  %1505 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1504, i64 %.012431589, i32 9
  %1506 = load ptr, ptr %1505, align 8, !tbaa !83
  %1507 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1506, i32 noundef %1483)
  store double %1503, ptr %1507, align 8, !tbaa !33
  %1508 = load ptr, ptr %1378, align 8, !tbaa !71
  %1509 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1508, i64 %.012431589, i32 7
  %1510 = load ptr, ptr %1509, align 8, !tbaa !81
  %1511 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1510, i32 noundef %1483)
  %1512 = load double, ptr %1511, align 8, !tbaa !33
  %1513 = fneg double %1512
  %1514 = load ptr, ptr %1378, align 8, !tbaa !71
  %1515 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1514, i64 %.012431589, i32 9
  %1516 = load ptr, ptr %1515, align 8, !tbaa !83
  %1517 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1516, i32 noundef %1483)
  %1518 = load double, ptr %1517, align 8, !tbaa !33
  %1519 = fdiv double %1513, %1518
  %1520 = load ptr, ptr %1378, align 8, !tbaa !71
  %1521 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1520, i64 %.012431589, i32 7
  %1522 = load ptr, ptr %1521, align 8, !tbaa !81
  %1523 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1522, i32 noundef %1483)
  store double %1519, ptr %1523, align 8, !tbaa !33
  %1524 = load ptr, ptr %1378, align 8, !tbaa !71
  %1525 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1524, i64 %.012431589, i32 8
  %1526 = load ptr, ptr %1525, align 8, !tbaa !82
  %1527 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1526, i32 noundef %1483)
  %1528 = load double, ptr %1527, align 8, !tbaa !33
  %1529 = fneg double %1528
  %1530 = load ptr, ptr %1378, align 8, !tbaa !71
  %1531 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1530, i64 %.012431589, i32 9
  %1532 = load ptr, ptr %1531, align 8, !tbaa !83
  %1533 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1532, i32 noundef %1483)
  %1534 = load double, ptr %1533, align 8, !tbaa !33
  %1535 = fdiv double %1529, %1534
  %1536 = load ptr, ptr %1378, align 8, !tbaa !71
  %1537 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1536, i64 %.012431589, i32 8
  %1538 = load ptr, ptr %1537, align 8, !tbaa !82
  %1539 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1538, i32 noundef %1483)
  store double %1535, ptr %1539, align 8, !tbaa !33
  %1540 = add nuw i64 %.012421586, 1
  %1541 = load ptr, ptr %1378, align 8, !tbaa !71
  %1542 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1541, i64 %.012431589, i32 1
  %1543 = load i64, ptr %1542, align 8, !tbaa !79
  %1544 = icmp ult i64 %1540, %1543
  br i1 %1544, label %.lr.ph1587, label %._crit_edge1588.loopexit, !llvm.loop !90

.preheader1380:                                   ; preds = %.preheader1380.lr.ph, %._crit_edge1593
  %1545 = phi i64 [ %1476, %.preheader1380.lr.ph ], [ %1551, %._crit_edge1593 ]
  %1546 = phi ptr [ %.pre1943, %.preheader1380.lr.ph ], [ %1552, %._crit_edge1593 ]
  %.012411594 = phi i64 [ 0, %.preheader1380.lr.ph ], [ %1553, %._crit_edge1593 ]
  %1547 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1546, i64 %.012411594, i32 1
  %1548 = load i64, ptr %1547, align 8, !tbaa !79
  %.not1730 = icmp eq i64 %1548, 0
  br i1 %.not1730, label %._crit_edge1593, label %.lr.ph1592

.preheader1379:                                   ; preds = %._crit_edge1593, %.preheader1386, %.preheader1385, %.preheader1383, %.preheader1381
  %1549 = load i64, ptr %47, align 8, !tbaa !25
  %.not1731 = icmp eq i64 %1549, 0
  br i1 %.not1731, label %.preheader1377, label %.lr.ph1602

.lr.ph1602:                                       ; preds = %.preheader1379
  %1550 = getelementptr inbounds i8, ptr %0, i64 416
  %.pre1946 = load ptr, ptr %1550, align 8, !tbaa !14
  br label %1751

._crit_edge1593.loopexit:                         ; preds = %1737
  %.pre1945 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1593

._crit_edge1593:                                  ; preds = %._crit_edge1593.loopexit, %.preheader1380
  %1551 = phi i64 [ %.pre1945, %._crit_edge1593.loopexit ], [ %1545, %.preheader1380 ]
  %1552 = phi ptr [ %1743, %._crit_edge1593.loopexit ], [ %1546, %.preheader1380 ]
  %1553 = add nuw i64 %.012411594, 1
  %1554 = icmp ult i64 %1553, %1551
  br i1 %1554, label %.preheader1380, label %.preheader1379, !llvm.loop !91

.lr.ph1592:                                       ; preds = %.preheader1380, %1737
  %1555 = phi i64 [ %1745, %1737 ], [ %1548, %.preheader1380 ]
  %1556 = phi ptr [ %1743, %1737 ], [ %1546, %.preheader1380 ]
  %.012401590 = phi i64 [ %1742, %1737 ], [ 0, %.preheader1380 ]
  %1557 = icmp eq i64 %.012401590, 0
  br i1 %1557, label %1558, label %1576

1558:                                             ; preds = %.lr.ph1592
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #12
  %1559 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1556, i64 %.012411594, i32 2
  %1560 = load ptr, ptr %1559, align 8, !tbaa !87
  %1561 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1560, i32 noundef 0)
  %.fca.0.extract325 = extractvalue { ptr, i32 } %1561, 0
  %.fca.1.extract326 = extractvalue { ptr, i32 } %1561, 1
  store ptr %.fca.0.extract325, ptr %12, align 8
  store i32 %.fca.1.extract326, ptr %.sroa.2328.0..sroa_idx, align 8
  %1562 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %12, i32 noundef 0)
  %1563 = load i32, ptr %1562, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #12
  %1564 = load ptr, ptr %1474, align 8, !tbaa !71
  %1565 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1564, i64 %.012411594, i32 2
  %1566 = load ptr, ptr %1565, align 8, !tbaa !87
  %1567 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1566, i32 noundef 1)
  %.fca.0.extract321 = extractvalue { ptr, i32 } %1567, 0
  %.fca.1.extract322 = extractvalue { ptr, i32 } %1567, 1
  store ptr %.fca.0.extract321, ptr %13, align 8
  store i32 %.fca.1.extract322, ptr %.sroa.2324.0..sroa_idx, align 8
  %1568 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %13, i32 noundef 0)
  %1569 = load i32, ptr %1568, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #12
  %1570 = load ptr, ptr %1474, align 8, !tbaa !71
  %1571 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1570, i64 %.012411594, i32 2
  %1572 = load ptr, ptr %1571, align 8, !tbaa !87
  %1573 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1572, i32 noundef 2)
  %.fca.0.extract317 = extractvalue { ptr, i32 } %1573, 0
  %.fca.1.extract318 = extractvalue { ptr, i32 } %1573, 1
  store ptr %.fca.0.extract317, ptr %14, align 8
  store i32 %.fca.1.extract318, ptr %.sroa.2320.0..sroa_idx, align 8
  %1574 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %14, i32 noundef 0)
  %1575 = load i32, ptr %1574, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #12
  br label %1619

1576:                                             ; preds = %.lr.ph1592
  %1577 = add i64 %1555, -1
  %1578 = icmp eq i64 %.012401590, %1577
  %1579 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1556, i64 %.012411594, i32 2
  %1580 = trunc i64 %.012401590 to i32
  br i1 %1578, label %1581, label %1600

1581:                                             ; preds = %1576
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #12
  %1582 = load ptr, ptr %1579, align 8, !tbaa !87
  %1583 = add i32 %1580, -2
  %1584 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1582, i32 noundef %1583)
  %.fca.0.extract313 = extractvalue { ptr, i32 } %1584, 0
  %.fca.1.extract314 = extractvalue { ptr, i32 } %1584, 1
  store ptr %.fca.0.extract313, ptr %15, align 8
  store i32 %.fca.1.extract314, ptr %.sroa.2316.0..sroa_idx, align 8
  %1585 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %15, i32 noundef 0)
  %1586 = load i32, ptr %1585, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #12
  %1587 = load ptr, ptr %1474, align 8, !tbaa !71
  %1588 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1587, i64 %.012411594, i32 2
  %1589 = load ptr, ptr %1588, align 8, !tbaa !87
  %1590 = add i32 %1580, -1
  %1591 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1589, i32 noundef %1590)
  %.fca.0.extract309 = extractvalue { ptr, i32 } %1591, 0
  %.fca.1.extract310 = extractvalue { ptr, i32 } %1591, 1
  store ptr %.fca.0.extract309, ptr %16, align 8
  store i32 %.fca.1.extract310, ptr %.sroa.2312.0..sroa_idx, align 8
  %1592 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %16, i32 noundef 0)
  %1593 = load i32, ptr %1592, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #12
  %1594 = load ptr, ptr %1474, align 8, !tbaa !71
  %1595 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1594, i64 %.012411594, i32 2
  %1596 = load ptr, ptr %1595, align 8, !tbaa !87
  %1597 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1596, i32 noundef %1580)
  %.fca.0.extract305 = extractvalue { ptr, i32 } %1597, 0
  %.fca.1.extract306 = extractvalue { ptr, i32 } %1597, 1
  store ptr %.fca.0.extract305, ptr %17, align 8
  store i32 %.fca.1.extract306, ptr %.sroa.2308.0..sroa_idx, align 8
  %1598 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %17, i32 noundef 0)
  %1599 = load i32, ptr %1598, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #12
  br label %1619

1600:                                             ; preds = %1576
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #12
  %1601 = load ptr, ptr %1579, align 8, !tbaa !87
  %1602 = add i32 %1580, -1
  %1603 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1601, i32 noundef %1602)
  %.fca.0.extract301 = extractvalue { ptr, i32 } %1603, 0
  %.fca.1.extract302 = extractvalue { ptr, i32 } %1603, 1
  store ptr %.fca.0.extract301, ptr %18, align 8
  store i32 %.fca.1.extract302, ptr %.sroa.2304.0..sroa_idx, align 8
  %1604 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %18, i32 noundef 0)
  %1605 = load i32, ptr %1604, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #12
  %1606 = load ptr, ptr %1474, align 8, !tbaa !71
  %1607 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1606, i64 %.012411594, i32 2
  %1608 = load ptr, ptr %1607, align 8, !tbaa !87
  %1609 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1608, i32 noundef %1580)
  %.fca.0.extract297 = extractvalue { ptr, i32 } %1609, 0
  %.fca.1.extract298 = extractvalue { ptr, i32 } %1609, 1
  store ptr %.fca.0.extract297, ptr %19, align 8
  store i32 %.fca.1.extract298, ptr %.sroa.2300.0..sroa_idx, align 8
  %1610 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %19, i32 noundef 0)
  %1611 = load i32, ptr %1610, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #12
  %1612 = load ptr, ptr %1474, align 8, !tbaa !71
  %1613 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1612, i64 %.012411594, i32 2
  %1614 = load ptr, ptr %1613, align 8, !tbaa !87
  %1615 = add i32 %1580, 1
  %1616 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1614, i32 noundef %1615)
  %.fca.0.extract293 = extractvalue { ptr, i32 } %1616, 0
  %.fca.1.extract294 = extractvalue { ptr, i32 } %1616, 1
  store ptr %.fca.0.extract293, ptr %20, align 8
  store i32 %.fca.1.extract294, ptr %.sroa.2296.0..sroa_idx, align 8
  %1617 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %20, i32 noundef 0)
  %1618 = load i32, ptr %1617, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #12
  br label %1619

1619:                                             ; preds = %1581, %1600, %1558
  %.01177 = phi i32 [ %1575, %1558 ], [ %1599, %1581 ], [ %1618, %1600 ]
  %.10 = phi i32 [ %1569, %1558 ], [ %1593, %1581 ], [ %1611, %1600 ]
  %.01167 = phi i32 [ %1563, %1558 ], [ %1586, %1581 ], [ %1605, %1600 ]
  %1620 = load ptr, ptr %1475, align 8, !tbaa !14
  %1621 = sext i32 %.01167 to i64
  %1622 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1620, i64 %1621
  %1623 = load double, ptr %1622, align 8, !tbaa !42
  %1624 = sext i32 %.10 to i64
  %1625 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1620, i64 %1624
  %1626 = load double, ptr %1625, align 8, !tbaa !42
  %1627 = sext i32 %.01177 to i64
  %1628 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1620, i64 %1627
  %1629 = load double, ptr %1628, align 8, !tbaa !42
  %1630 = getelementptr inbounds i8, ptr %1622, i64 8
  %1631 = load double, ptr %1630, align 8, !tbaa !43
  %1632 = getelementptr inbounds i8, ptr %1625, i64 8
  %1633 = load double, ptr %1632, align 8, !tbaa !43
  %1634 = getelementptr inbounds i8, ptr %1628, i64 8
  %1635 = load double, ptr %1634, align 8, !tbaa !43
  %1636 = load ptr, ptr %1474, align 8, !tbaa !71
  %1637 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1636, i64 %.012411594, i32 1
  %1638 = load i64, ptr %1637, align 8, !tbaa !79
  %1639 = add i64 %1638, -1
  %1640 = icmp eq i64 %.012401590, %1639
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #12
  %1641 = trunc i64 %.012401590 to i32
  br i1 %1640, label %1642, label %.critedge

1642:                                             ; preds = %1619
  %1643 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1636, i64 %.012411594, i32 2
  %1644 = load ptr, ptr %1643, align 8, !tbaa !87
  %1645 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1644, i32 noundef %1641)
  %.fca.0.extract289 = extractvalue { ptr, i32 } %1645, 0
  %.fca.1.extract290 = extractvalue { ptr, i32 } %1645, 1
  store ptr %.fca.0.extract289, ptr %21, align 8
  store i32 %.fca.1.extract290, ptr %.sroa.2292.0..sroa_idx, align 8
  %1646 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %21, i32 noundef 0)
  %1647 = load i32, ptr %1646, align 4, !tbaa !32
  %1648 = load ptr, ptr %1474, align 8, !tbaa !71
  %1649 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1648, i64 %.012411594, i32 2
  %1650 = load ptr, ptr %1649, align 8, !tbaa !87
  %1651 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1650, i32 noundef 0)
  %.fca.0.extract285 = extractvalue { ptr, i32 } %1651, 0
  %.fca.1.extract286 = extractvalue { ptr, i32 } %1651, 1
  store ptr %.fca.0.extract285, ptr %22, align 8
  store i32 %.fca.1.extract286, ptr %.sroa.2288.0..sroa_idx, align 8
  %1652 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %22, i32 noundef 0)
  %1653 = load i32, ptr %1652, align 4, !tbaa !32
  %1654 = icmp eq i32 %1647, %1653
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  %.pre1944 = load ptr, ptr %1474, align 8, !tbaa !71
  br i1 %1654, label %1655, label %1678

1655:                                             ; preds = %1642
  %1656 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %.pre1944, i64 %.012411594, i32 9
  %1657 = load ptr, ptr %1656, align 8, !tbaa !83
  %1658 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1657, i32 noundef 0)
  %1659 = load double, ptr %1658, align 8, !tbaa !33
  %1660 = load ptr, ptr %1474, align 8, !tbaa !71
  %1661 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1660, i64 %.012411594, i32 9
  %1662 = load ptr, ptr %1661, align 8, !tbaa !83
  %1663 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1662, i32 noundef %1641)
  store double %1659, ptr %1663, align 8, !tbaa !33
  %1664 = load ptr, ptr %1474, align 8, !tbaa !71
  %1665 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1664, i64 %.012411594, i32 7
  %1666 = load ptr, ptr %1665, align 8, !tbaa !81
  %1667 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1666, i32 noundef 0)
  %1668 = load double, ptr %1667, align 8, !tbaa !33
  %1669 = load ptr, ptr %1474, align 8, !tbaa !71
  %1670 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1669, i64 %.012411594, i32 7
  %1671 = load ptr, ptr %1670, align 8, !tbaa !81
  %1672 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1671, i32 noundef %1641)
  store double %1668, ptr %1672, align 8, !tbaa !33
  %1673 = load ptr, ptr %1474, align 8, !tbaa !71
  %1674 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1673, i64 %.012411594, i32 8
  %1675 = load ptr, ptr %1674, align 8, !tbaa !82
  %1676 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1675, i32 noundef 0)
  %1677 = load double, ptr %1676, align 8, !tbaa !33
  br label %1737

.critedge:                                        ; preds = %1619
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #12
  br label %1678

1678:                                             ; preds = %.critedge, %1642
  %1679 = phi ptr [ %1636, %.critedge ], [ %.pre1944, %1642 ]
  %1680 = insertelement <2 x double> poison, double %1626, i64 0
  %1681 = insertelement <2 x double> %1680, double %1629, i64 1
  %1682 = insertelement <2 x double> poison, double %1623, i64 0
  %1683 = insertelement <2 x double> %1682, double %1626, i64 1
  %1684 = fsub <2 x double> %1681, %1683
  %1685 = insertelement <2 x double> poison, double %1633, i64 0
  %1686 = insertelement <2 x double> %1685, double %1635, i64 1
  %1687 = insertelement <2 x double> poison, double %1631, i64 0
  %1688 = insertelement <2 x double> %1687, double %1633, i64 1
  %1689 = fsub <2 x double> %1686, %1688
  %1690 = fmul <2 x double> %1689, %1689
  %1691 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1684, <2 x double> %1684, <2 x double> %1690)
  %1692 = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %1691)
  %1693 = extractelement <2 x double> %1692, i64 1
  %1694 = fmul double %1623, %1693
  %1695 = extractelement <2 x double> %1692, i64 0
  %1696 = fneg double %1695
  %1697 = fsub double %1696, %1693
  %1698 = fmul double %1695, %1697
  %1699 = fdiv double %1694, %1698
  %1700 = shufflevector <2 x double> %1680, <2 x double> poison, <2 x i32> zeroinitializer
  %1701 = fdiv <2 x double> %1700, %1692
  %1702 = extractelement <2 x double> %1701, i64 1
  %1703 = fsub double %1699, %1702
  %1704 = extractelement <2 x double> %1701, i64 0
  %1705 = fadd double %1704, %1703
  %1706 = fadd double %1695, %1693
  %1707 = insertelement <2 x double> poison, double %1629, i64 0
  %1708 = insertelement <2 x double> %1707, double %1706, i64 1
  %1709 = fmul <2 x double> %1708, %1692
  %1710 = extractelement <2 x double> %1709, i64 0
  %1711 = extractelement <2 x double> %1709, i64 1
  %1712 = fdiv double %1710, %1711
  %1713 = fadd double %1712, %1705
  %1714 = fmul double %1631, %1693
  %1715 = insertelement <2 x double> poison, double %1714, i64 0
  %1716 = insertelement <2 x double> %1715, double %1633, i64 1
  %1717 = insertelement <2 x double> %1692, double %1698, i64 0
  %1718 = fdiv <2 x double> %1716, %1717
  %shift = shufflevector <2 x double> %1718, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1719 = fsub <2 x double> %1718, %shift
  %1720 = fmul double %1635, %1695
  %1721 = insertelement <2 x double> poison, double %1720, i64 0
  %1722 = insertelement <2 x double> %1721, double %1633, i64 1
  %1723 = shufflevector <2 x double> %1709, <2 x double> %1692, <2 x i32> <i32 1, i32 2>
  %1724 = fdiv <2 x double> %1722, %1723
  %shift2336 = shufflevector <2 x double> %1724, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %1725 = fadd <2 x double> %shift2336, %1719
  %1726 = fadd <2 x double> %1724, %1725
  %1727 = extractelement <2 x double> %1726, i64 0
  %1728 = fmul <2 x double> %1726, %1726
  %1729 = extractelement <2 x double> %1728, i64 0
  %1730 = call double @llvm.fmuladd.f64(double %1713, double %1713, double %1729)
  %sqrt = call double @llvm.sqrt.f64(double %1730)
  %1731 = fdiv double %1727, %sqrt
  %1732 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1679, i64 %.012411594, i32 7
  %1733 = load ptr, ptr %1732, align 8, !tbaa !81
  %1734 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1733, i32 noundef %1641)
  store double %1731, ptr %1734, align 8, !tbaa !33
  %1735 = fneg double %1713
  %1736 = fdiv double %1735, %sqrt
  br label %1737

1737:                                             ; preds = %1678, %1655
  %.sink2176 = phi double [ %1736, %1678 ], [ %1677, %1655 ]
  %1738 = load ptr, ptr %1474, align 8, !tbaa !71
  %1739 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1738, i64 %.012411594, i32 8
  %1740 = load ptr, ptr %1739, align 8, !tbaa !82
  %1741 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1740, i32 noundef %1641)
  store double %.sink2176, ptr %1741, align 8, !tbaa !33
  %1742 = add nuw i64 %.012401590, 1
  %1743 = load ptr, ptr %1474, align 8, !tbaa !71
  %1744 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1743, i64 %.012411594, i32 1
  %1745 = load i64, ptr %1744, align 8, !tbaa !79
  %1746 = icmp ult i64 %1742, %1745
  br i1 %1746, label %.lr.ph1592, label %._crit_edge1593.loopexit, !llvm.loop !92

.preheader1377:                                   ; preds = %._crit_edge1600, %.preheader1379
  %1747 = load i64, ptr %40, align 8, !tbaa !5
  %.not1734 = icmp eq i64 %1747, 0
  br i1 %.not1734, label %.preheader1376, label %.lr.ph1604

.lr.ph1604:                                       ; preds = %.preheader1377
  %1748 = getelementptr inbounds i8, ptr %0, i64 416
  %1749 = load ptr, ptr %1748, align 8, !tbaa !14
  %xtraiter2493 = and i64 %1747, 1
  %1750 = icmp eq i64 %1747, 1
  br i1 %1750, label %.preheader1376.loopexit.unr-lcssa, label %.lr.ph1604.new

.lr.ph1604.new:                                   ; preds = %.lr.ph1604
  %unroll_iter2496 = and i64 %1747, -2
  br label %1808

1751:                                             ; preds = %.lr.ph1602, %._crit_edge1600
  %1752 = phi ptr [ %.pre1946, %.lr.ph1602 ], [ %1782, %._crit_edge1600 ]
  %.011881601 = phi i64 [ 0, %.lr.ph1602 ], [ %1783, %._crit_edge1600 ]
  %1753 = load ptr, ptr %774, align 8, !tbaa !53
  %1754 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1753, i64 %.011881601
  %1755 = load i32, ptr %1754, align 8, !tbaa !61
  %1756 = getelementptr inbounds i8, ptr %1754, i64 4
  %1757 = load i32, ptr %1756, align 4, !tbaa !62
  %1758 = sext i32 %1757 to i64
  %1759 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1752, i64 %1758, i32 2
  %1760 = load i32, ptr %1759, align 8, !tbaa !67
  %.not1732 = icmp eq i32 %1760, 0
  br i1 %.not1732, label %.preheader1378, label %.lr.ph1597

.preheader1378:                                   ; preds = %1775, %1751
  %1761 = phi ptr [ %1752, %1751 ], [ %1777, %1775 ]
  %1762 = sext i32 %1755 to i64
  %1763 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1761, i64 %1762, i32 2
  %1764 = load i32, ptr %1763, align 8, !tbaa !67
  %.not1733 = icmp eq i32 %1764, 0
  br i1 %.not1733, label %._crit_edge1600, label %.lr.ph1599

.lr.ph1597:                                       ; preds = %1751, %1775
  %1765 = phi ptr [ %1777, %1775 ], [ %1752, %1751 ]
  %.011871595 = phi i64 [ %1776, %1775 ], [ 0, %1751 ]
  %1766 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1765, i64 %1758, i32 3
  %1767 = load ptr, ptr %1766, align 8, !tbaa !72
  %1768 = trunc i64 %.011871595 to i32
  %1769 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1767, i32 noundef %1768)
  %1770 = load i32, ptr %1769, align 4, !tbaa !32
  %1771 = icmp eq i32 %1755, %1770
  br i1 %1771, label %1772, label %1775

1772:                                             ; preds = %.lr.ph1597
  %1773 = load ptr, ptr %774, align 8, !tbaa !53
  %1774 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1773, i64 %.011881601, i32 9
  store i32 %1768, ptr %1774, align 4, !tbaa !93
  br label %1775

1775:                                             ; preds = %.lr.ph1597, %1772
  %1776 = add nuw i64 %.011871595, 1
  %1777 = load ptr, ptr %1550, align 8, !tbaa !14
  %1778 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1777, i64 %1758, i32 2
  %1779 = load i32, ptr %1778, align 8, !tbaa !67
  %1780 = sext i32 %1779 to i64
  %1781 = icmp ult i64 %1776, %1780
  br i1 %1781, label %.lr.ph1597, label %.preheader1378, !llvm.loop !94

._crit_edge1600:                                  ; preds = %1796, %.preheader1378
  %1782 = phi ptr [ %1761, %.preheader1378 ], [ %1798, %1796 ]
  %1783 = add nuw i64 %.011881601, 1
  %1784 = load i64, ptr %47, align 8, !tbaa !25
  %1785 = icmp ult i64 %1783, %1784
  br i1 %1785, label %1751, label %.preheader1377, !llvm.loop !95

.lr.ph1599:                                       ; preds = %.preheader1378, %1796
  %1786 = phi ptr [ %1798, %1796 ], [ %1761, %.preheader1378 ]
  %.011861598 = phi i64 [ %1797, %1796 ], [ 0, %.preheader1378 ]
  %1787 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1786, i64 %1762, i32 3
  %1788 = load ptr, ptr %1787, align 8, !tbaa !72
  %1789 = trunc i64 %.011861598 to i32
  %1790 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1788, i32 noundef %1789)
  %1791 = load i32, ptr %1790, align 4, !tbaa !32
  %1792 = icmp eq i32 %1757, %1791
  br i1 %1792, label %1793, label %1796

1793:                                             ; preds = %.lr.ph1599
  %1794 = load ptr, ptr %774, align 8, !tbaa !53
  %1795 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %1794, i64 %.011881601, i32 8
  store i32 %1789, ptr %1795, align 8, !tbaa !96
  br label %1796

1796:                                             ; preds = %.lr.ph1599, %1793
  %1797 = add nuw i64 %.011861598, 1
  %1798 = load ptr, ptr %1550, align 8, !tbaa !14
  %1799 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1798, i64 %1762, i32 2
  %1800 = load i32, ptr %1799, align 8, !tbaa !67
  %1801 = sext i32 %1800 to i64
  %1802 = icmp ult i64 %1797, %1801
  br i1 %1802, label %.lr.ph1599, label %._crit_edge1600, !llvm.loop !97

.preheader1376.loopexit.unr-lcssa:                ; preds = %1808, %.lr.ph1604
  %.011851603.unr = phi i64 [ 0, %.lr.ph1604 ], [ %1814, %1808 ]
  %lcmp.mod2495.not = icmp eq i64 %xtraiter2493, 0
  br i1 %lcmp.mod2495.not, label %.preheader1376, label %.preheader1376.loopexit.epilog-lcssa

.preheader1376.loopexit.epilog-lcssa:             ; preds = %.preheader1376.loopexit.unr-lcssa
  %1803 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %.011851603.unr, i32 7
  store i32 -1, ptr %1803, align 8, !tbaa !98
  %1804 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %.011851603.unr, i32 8
  store i32 0, ptr %1804, align 4, !tbaa !99
  br label %.preheader1376

.preheader1376:                                   ; preds = %.preheader1376.loopexit.epilog-lcssa, %.preheader1376.loopexit.unr-lcssa, %.preheader1377
  %1805 = load i64, ptr %1207, align 8, !tbaa !70
  %.not1735 = icmp eq i64 %1805, 0
  br i1 %.not1735, label %._crit_edge1637, label %.preheader1375.lr.ph

.preheader1375.lr.ph:                             ; preds = %.preheader1376
  %1806 = getelementptr inbounds i8, ptr %0, i64 480
  %1807 = getelementptr inbounds i8, ptr %0, i64 416
  %.sroa.2254.0..sroa_idx = getelementptr inbounds i8, ptr %23, i64 8
  %.sroa.2250.0..sroa_idx = getelementptr inbounds i8, ptr %24, i64 8
  %.sroa.2246.0..sroa_idx = getelementptr inbounds i8, ptr %25, i64 8
  %.pre1947 = load ptr, ptr %1806, align 8, !tbaa !71
  br label %.preheader1375

1808:                                             ; preds = %1808, %.lr.ph1604.new
  %.011851603 = phi i64 [ 0, %.lr.ph1604.new ], [ %1814, %1808 ]
  %niter2497 = phi i64 [ 0, %.lr.ph1604.new ], [ %niter2497.next.1, %1808 ]
  %1809 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %.011851603, i32 7
  store i32 -1, ptr %1809, align 8, !tbaa !98
  %1810 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %.011851603, i32 8
  store i32 0, ptr %1810, align 4, !tbaa !99
  %1811 = or disjoint i64 %.011851603, 1
  %1812 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %1811, i32 7
  store i32 -1, ptr %1812, align 8, !tbaa !98
  %1813 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1749, i64 %1811, i32 8
  store i32 0, ptr %1813, align 4, !tbaa !99
  %1814 = add nuw i64 %.011851603, 2
  %niter2497.next.1 = add i64 %niter2497, 2
  %niter2497.ncmp.1 = icmp eq i64 %niter2497.next.1, %unroll_iter2496
  br i1 %niter2497.ncmp.1, label %.preheader1376.loopexit.unr-lcssa, label %1808, !llvm.loop !100

.preheader1375:                                   ; preds = %.preheader1375.lr.ph, %._crit_edge1607
  %1815 = phi i64 [ %1805, %.preheader1375.lr.ph ], [ %1821, %._crit_edge1607 ]
  %1816 = phi ptr [ %.pre1947, %.preheader1375.lr.ph ], [ %1822, %._crit_edge1607 ]
  %.011841608 = phi i64 [ 0, %.preheader1375.lr.ph ], [ %1823, %._crit_edge1607 ]
  %1817 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1816, i64 %.011841608, i32 1
  %1818 = load i64, ptr %1817, align 8, !tbaa !79
  %.not1736 = icmp eq i64 %1818, 0
  br i1 %.not1736, label %._crit_edge1607, label %.lr.ph1606

.lr.ph1606:                                       ; preds = %.preheader1375
  %1819 = trunc i64 %.011841608 to i32
  br label %1825

.preheader1374:                                   ; preds = %._crit_edge1607
  %.not1737 = icmp eq i64 %1821, 0
  br i1 %.not1737, label %._crit_edge1637, label %.lr.ph1610

.lr.ph1610:                                       ; preds = %.preheader1374
  %1820 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre1949 = load ptr, ptr %1820, align 8, !tbaa !71
  br label %1863

._crit_edge1607.loopexit:                         ; preds = %1825
  %.pre1948 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1607

._crit_edge1607:                                  ; preds = %._crit_edge1607.loopexit, %.preheader1375
  %1821 = phi i64 [ %.pre1948, %._crit_edge1607.loopexit ], [ %1815, %.preheader1375 ]
  %1822 = phi ptr [ %1857, %._crit_edge1607.loopexit ], [ %1816, %.preheader1375 ]
  %1823 = add nuw i64 %.011841608, 1
  %1824 = icmp ult i64 %1823, %1821
  br i1 %1824, label %.preheader1375, label %.preheader1374, !llvm.loop !101

1825:                                             ; preds = %.lr.ph1606, %1825
  %1826 = phi ptr [ %1816, %.lr.ph1606 ], [ %1857, %1825 ]
  %.011831605 = phi i64 [ 0, %.lr.ph1606 ], [ %1856, %1825 ]
  %1827 = load ptr, ptr %1807, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #12
  %1828 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1826, i64 %.011841608, i32 2
  %1829 = load ptr, ptr %1828, align 8, !tbaa !87
  %1830 = trunc i64 %.011831605 to i32
  %1831 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1829, i32 noundef %1830)
  %.fca.0.extract251 = extractvalue { ptr, i32 } %1831, 0
  %.fca.1.extract252 = extractvalue { ptr, i32 } %1831, 1
  store ptr %.fca.0.extract251, ptr %23, align 8
  store i32 %.fca.1.extract252, ptr %.sroa.2254.0..sroa_idx, align 8
  %1832 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %23, i32 noundef 0)
  %1833 = load i32, ptr %1832, align 4, !tbaa !32
  %1834 = sext i32 %1833 to i64
  %1835 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1827, i64 %1834, i32 7
  store i32 %1819, ptr %1835, align 8, !tbaa !98
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #12
  %1836 = load ptr, ptr %1807, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #12
  %1837 = load ptr, ptr %1806, align 8, !tbaa !71
  %1838 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1837, i64 %.011841608, i32 2
  %1839 = load ptr, ptr %1838, align 8, !tbaa !87
  %1840 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1839, i32 noundef %1830)
  %.fca.0.extract247 = extractvalue { ptr, i32 } %1840, 0
  %.fca.1.extract248 = extractvalue { ptr, i32 } %1840, 1
  store ptr %.fca.0.extract247, ptr %24, align 8
  store i32 %.fca.1.extract248, ptr %.sroa.2250.0..sroa_idx, align 8
  %1841 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %24, i32 noundef 0)
  %1842 = load i32, ptr %1841, align 4, !tbaa !32
  %1843 = sext i32 %1842 to i64
  %1844 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1836, i64 %1843, i32 8
  %1845 = load i32, ptr %1844, align 4, !tbaa !99
  %1846 = add nsw i32 %1845, 1
  %1847 = load ptr, ptr %1807, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #12
  %1848 = load ptr, ptr %1806, align 8, !tbaa !71
  %1849 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1848, i64 %.011841608, i32 2
  %1850 = load ptr, ptr %1849, align 8, !tbaa !87
  %1851 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %1850, i32 noundef %1830)
  %.fca.0.extract243 = extractvalue { ptr, i32 } %1851, 0
  %.fca.1.extract244 = extractvalue { ptr, i32 } %1851, 1
  store ptr %.fca.0.extract243, ptr %25, align 8
  store i32 %.fca.1.extract244, ptr %.sroa.2246.0..sroa_idx, align 8
  %1852 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %25, i32 noundef 0)
  %1853 = load i32, ptr %1852, align 4, !tbaa !32
  %1854 = sext i32 %1853 to i64
  %1855 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1847, i64 %1854, i32 8
  store i32 %1846, ptr %1855, align 4, !tbaa !99
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #12
  %1856 = add nuw i64 %.011831605, 1
  %1857 = load ptr, ptr %1806, align 8, !tbaa !71
  %1858 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1857, i64 %.011841608, i32 1
  %1859 = load i64, ptr %1858, align 8, !tbaa !79
  %1860 = icmp ult i64 %1856, %1859
  br i1 %1860, label %1825, label %._crit_edge1607.loopexit, !llvm.loop !102

.preheader1373:                                   ; preds = %1916
  %.not1738 = icmp eq i64 %1920, 0
  br i1 %.not1738, label %._crit_edge1637, label %.preheader1372.lr.ph

.preheader1372.lr.ph:                             ; preds = %.preheader1373
  %1861 = getelementptr inbounds i8, ptr %0, i64 480
  %1862 = getelementptr inbounds i8, ptr %0, i64 416
  %.pre1950 = load ptr, ptr %1861, align 8, !tbaa !71
  br label %.preheader1372

1863:                                             ; preds = %.lr.ph1610, %1916
  %1864 = phi ptr [ %.pre1949, %.lr.ph1610 ], [ %1917, %1916 ]
  %.011821609 = phi i64 [ 0, %.lr.ph1610 ], [ %1919, %1916 ]
  %1865 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1864, i64 %.011821609
  %1866 = getelementptr inbounds i8, ptr %1865, i64 32
  %1867 = load i64, ptr %1866, align 8, !tbaa !79
  %1868 = add i64 %1867, -1
  %1869 = getelementptr inbounds i8, ptr %1865, i64 48
  store i64 %1868, ptr %1869, align 8, !tbaa !103
  %1870 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.48)
  %1871 = load ptr, ptr %1820, align 8, !tbaa !71
  %1872 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1871, i64 %.011821609, i32 3
  %1873 = load i64, ptr %1872, align 8, !tbaa !103
  %1874 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1870, i64 noundef %1873)
  %1875 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1874, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %1876 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1877 = load ptr, ptr %1820, align 8, !tbaa !71
  %1878 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1877, i64 %.011821609, i32 3
  %1879 = load i64, ptr %1878, align 8, !tbaa !103
  %1880 = trunc i64 %1879 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1876, i32 noundef %1880, i32 noundef 1)
          to label %1881 unwind label %1922

1881:                                             ; preds = %1863
  %1882 = load ptr, ptr %1820, align 8, !tbaa !71
  %1883 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1882, i64 %.011821609, i32 4
  store ptr %1876, ptr %1883, align 8, !tbaa !104
  %1884 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1885 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1882, i64 %.011821609, i32 3
  %1886 = load i64, ptr %1885, align 8, !tbaa !103
  %1887 = trunc i64 %1886 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1884, i32 noundef %1887, i32 noundef 1)
          to label %1888 unwind label %1924

1888:                                             ; preds = %1881
  %1889 = load ptr, ptr %1820, align 8, !tbaa !71
  %1890 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1889, i64 %.011821609, i32 5
  store ptr %1884, ptr %1890, align 8, !tbaa !105
  %1891 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1892 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1889, i64 %.011821609, i32 3
  %1893 = load i64, ptr %1892, align 8, !tbaa !103
  %1894 = trunc i64 %1893 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1891, i32 noundef %1894, i32 noundef 1)
          to label %1895 unwind label %1926

1895:                                             ; preds = %1888
  %1896 = load ptr, ptr %1820, align 8, !tbaa !71
  %1897 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1896, i64 %.011821609, i32 6
  store ptr %1891, ptr %1897, align 8, !tbaa !106
  %1898 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1899 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1896, i64 %.011821609, i32 3
  %1900 = load i64, ptr %1899, align 8, !tbaa !103
  %1901 = trunc i64 %1900 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1898, i32 noundef %1901, i32 noundef 1)
          to label %1902 unwind label %1928

1902:                                             ; preds = %1895
  %1903 = load ptr, ptr %1820, align 8, !tbaa !71
  %1904 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1903, i64 %.011821609, i32 10
  store ptr %1898, ptr %1904, align 8, !tbaa !107
  %1905 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1906 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1903, i64 %.011821609, i32 3
  %1907 = load i64, ptr %1906, align 8, !tbaa !103
  %1908 = trunc i64 %1907 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1905, i32 noundef %1908, i32 noundef 1)
          to label %1909 unwind label %1930

1909:                                             ; preds = %1902
  %1910 = load ptr, ptr %1820, align 8, !tbaa !71
  %1911 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1910, i64 %.011821609, i32 11
  store ptr %1905, ptr %1911, align 8, !tbaa !108
  %1912 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %1913 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1910, i64 %.011821609, i32 3
  %1914 = load i64, ptr %1913, align 8, !tbaa !103
  %1915 = trunc i64 %1914 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %1912, i32 noundef %1915, i32 noundef 1)
          to label %1916 unwind label %1932

1916:                                             ; preds = %1909
  %1917 = load ptr, ptr %1820, align 8, !tbaa !71
  %1918 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1917, i64 %.011821609, i32 12
  store ptr %1912, ptr %1918, align 8, !tbaa !109
  %1919 = add nuw i64 %.011821609, 1
  %1920 = load i64, ptr %1207, align 8, !tbaa !70
  %1921 = icmp ult i64 %1919, %1920
  br i1 %1921, label %1863, label %.preheader1373, !llvm.loop !110

1922:                                             ; preds = %1863
  %1923 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1876, i64 noundef 40) #15
  br label %2758

1924:                                             ; preds = %1881
  %1925 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1884, i64 noundef 40) #15
  br label %2758

1926:                                             ; preds = %1888
  %1927 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1891, i64 noundef 40) #15
  br label %2758

1928:                                             ; preds = %1895
  %1929 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1898, i64 noundef 40) #15
  br label %2758

1930:                                             ; preds = %1902
  %1931 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1905, i64 noundef 40) #15
  br label %2758

1932:                                             ; preds = %1909
  %1933 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %1912, i64 noundef 40) #15
  br label %2758

.preheader1372:                                   ; preds = %.preheader1372.lr.ph, %._crit_edge1613
  %1934 = phi i64 [ %1920, %.preheader1372.lr.ph ], [ %1940, %._crit_edge1613 ]
  %1935 = phi ptr [ %.pre1950, %.preheader1372.lr.ph ], [ %1941, %._crit_edge1613 ]
  %.011811614 = phi i64 [ 0, %.preheader1372.lr.ph ], [ %1942, %._crit_edge1613 ]
  %1936 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1935, i64 %.011811614, i32 3
  %1937 = load i64, ptr %1936, align 8, !tbaa !103
  %.not1739 = icmp eq i64 %1937, 0
  br i1 %.not1739, label %._crit_edge1613, label %.lr.ph1612

.preheader1371:                                   ; preds = %._crit_edge1613
  %.not1740 = icmp eq i64 %1940, 0
  br i1 %.not1740, label %._crit_edge1637, label %.preheader1370.lr.ph

.preheader1370.lr.ph:                             ; preds = %.preheader1371
  %1938 = getelementptr inbounds i8, ptr %0, i64 480
  %1939 = getelementptr inbounds i8, ptr %0, i64 416
  %.sroa.2176.0..sroa_idx = getelementptr inbounds i8, ptr %26, i64 8
  %.sroa.2172.0..sroa_idx = getelementptr inbounds i8, ptr %27, i64 8
  %.sroa.2168.0..sroa_idx = getelementptr inbounds i8, ptr %28, i64 8
  %.sroa.2164.0..sroa_idx = getelementptr inbounds i8, ptr %29, i64 8
  %.pre1952 = load ptr, ptr %1938, align 8, !tbaa !71
  br label %.preheader1370

._crit_edge1613.loopexit:                         ; preds = %.lr.ph1612
  %.pre1951 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1613

._crit_edge1613:                                  ; preds = %._crit_edge1613.loopexit, %.preheader1372
  %1940 = phi i64 [ %.pre1951, %._crit_edge1613.loopexit ], [ %1934, %.preheader1372 ]
  %1941 = phi ptr [ %2012, %._crit_edge1613.loopexit ], [ %1935, %.preheader1372 ]
  %1942 = add nuw i64 %.011811614, 1
  %1943 = icmp ult i64 %1942, %1940
  br i1 %1943, label %.preheader1372, label %.preheader1371, !llvm.loop !111

.lr.ph1612:                                       ; preds = %.preheader1372, %.lr.ph1612
  %1944 = phi ptr [ %2012, %.lr.ph1612 ], [ %1935, %.preheader1372 ]
  %.011801611 = phi i64 [ %1967, %.lr.ph1612 ], [ 0, %.preheader1372 ]
  %1945 = load ptr, ptr %1862, align 8, !tbaa !14
  %1946 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1944, i64 %.011811614, i32 2
  %1947 = load ptr, ptr %1946, align 8, !tbaa !87
  %1948 = trunc i64 %.011801611 to i32
  %1949 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %1947, i32 noundef %1948, i32 noundef 0)
  %1950 = load i32, ptr %1949, align 4, !tbaa !32
  %1951 = sext i32 %1950 to i64
  %1952 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1945, i64 %1951
  %1953 = load double, ptr %1952, align 8, !tbaa !42
  %1954 = load ptr, ptr %1862, align 8, !tbaa !14
  %1955 = load ptr, ptr %1861, align 8, !tbaa !71
  %1956 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1955, i64 %.011811614, i32 2
  %1957 = load ptr, ptr %1956, align 8, !tbaa !87
  %1958 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %1957, i32 noundef %1948, i32 noundef 0)
  %1959 = load i32, ptr %1958, align 4, !tbaa !32
  %1960 = sext i32 %1959 to i64
  %1961 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1954, i64 %1960, i32 1
  %1962 = load double, ptr %1961, align 8, !tbaa !43
  %1963 = load ptr, ptr %1862, align 8, !tbaa !14
  %1964 = load ptr, ptr %1861, align 8, !tbaa !71
  %1965 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1964, i64 %.011811614, i32 2
  %1966 = load ptr, ptr %1965, align 8, !tbaa !87
  %1967 = add nuw i64 %.011801611, 1
  %1968 = trunc i64 %1967 to i32
  %1969 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %1966, i32 noundef %1968, i32 noundef 0)
  %1970 = load i32, ptr %1969, align 4, !tbaa !32
  %1971 = sext i32 %1970 to i64
  %1972 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1963, i64 %1971
  %1973 = load double, ptr %1972, align 8, !tbaa !42
  %1974 = load ptr, ptr %1862, align 8, !tbaa !14
  %1975 = load ptr, ptr %1861, align 8, !tbaa !71
  %1976 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1975, i64 %.011811614, i32 2
  %1977 = load ptr, ptr %1976, align 8, !tbaa !87
  %1978 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %1977, i32 noundef %1968, i32 noundef 0)
  %1979 = load i32, ptr %1978, align 4, !tbaa !32
  %1980 = sext i32 %1979 to i64
  %1981 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1974, i64 %1980, i32 1
  %1982 = load double, ptr %1981, align 8, !tbaa !43
  %1983 = fsub double %1953, %1973
  %1984 = fsub double %1962, %1982
  %1985 = fmul double %1984, %1984
  %1986 = call double @llvm.fmuladd.f64(double %1983, double %1983, double %1985)
  %sqrt1346 = call double @llvm.sqrt.f64(double %1986)
  %1987 = load ptr, ptr %1861, align 8, !tbaa !71
  %1988 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1987, i64 %.011811614, i32 6
  %1989 = load ptr, ptr %1988, align 8, !tbaa !106
  %1990 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1989, i32 noundef %1948)
  store double %sqrt1346, ptr %1990, align 8, !tbaa !33
  %1991 = fneg double %1984
  %1992 = load ptr, ptr %1861, align 8, !tbaa !71
  %1993 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1992, i64 %.011811614, i32 6
  %1994 = load ptr, ptr %1993, align 8, !tbaa !106
  %1995 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %1994, i32 noundef %1948)
  %1996 = load double, ptr %1995, align 8, !tbaa !33
  %1997 = fdiv double %1991, %1996
  %1998 = load ptr, ptr %1861, align 8, !tbaa !71
  %1999 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %1998, i64 %.011811614, i32 4
  %2000 = load ptr, ptr %1999, align 8, !tbaa !104
  %2001 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2000, i32 noundef %1948)
  store double %1997, ptr %2001, align 8, !tbaa !33
  %2002 = load ptr, ptr %1861, align 8, !tbaa !71
  %2003 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2002, i64 %.011811614, i32 6
  %2004 = load ptr, ptr %2003, align 8, !tbaa !106
  %2005 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2004, i32 noundef %1948)
  %2006 = load double, ptr %2005, align 8, !tbaa !33
  %2007 = fdiv double %1983, %2006
  %2008 = load ptr, ptr %1861, align 8, !tbaa !71
  %2009 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2008, i64 %.011811614, i32 5
  %2010 = load ptr, ptr %2009, align 8, !tbaa !105
  %2011 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2010, i32 noundef %1948)
  store double %2007, ptr %2011, align 8, !tbaa !33
  %2012 = load ptr, ptr %1861, align 8, !tbaa !71
  %2013 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2012, i64 %.011811614, i32 3
  %2014 = load i64, ptr %2013, align 8, !tbaa !103
  %2015 = icmp ult i64 %1967, %2014
  br i1 %2015, label %.lr.ph1612, label %._crit_edge1613.loopexit, !llvm.loop !112

.preheader1370:                                   ; preds = %.preheader1370.lr.ph, %._crit_edge1617
  %2016 = phi i64 [ %1940, %.preheader1370.lr.ph ], [ %2022, %._crit_edge1617 ]
  %2017 = phi ptr [ %.pre1952, %.preheader1370.lr.ph ], [ %2023, %._crit_edge1617 ]
  %.011791618 = phi i64 [ 0, %.preheader1370.lr.ph ], [ %2024, %._crit_edge1617 ]
  %2018 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2017, i64 %.011791618, i32 3
  %2019 = load i64, ptr %2018, align 8, !tbaa !103
  %.not1741 = icmp eq i64 %2019, 0
  br i1 %.not1741, label %._crit_edge1617, label %.lr.ph1616

.preheader1369:                                   ; preds = %._crit_edge1617
  %.not1742 = icmp eq i64 %2022, 0
  br i1 %.not1742, label %._crit_edge1637, label %.preheader1368.lr.ph

.preheader1368.lr.ph:                             ; preds = %.preheader1369
  %2020 = getelementptr inbounds i8, ptr %0, i64 480
  %.sroa.2147.0..sroa_idx = getelementptr inbounds i8, ptr %30, i64 8
  %.sroa.2.0..sroa_idx = getelementptr inbounds i8, ptr %31, i64 8
  %2021 = getelementptr inbounds i8, ptr %0, i64 416
  %.pre1954 = load ptr, ptr %2020, align 8, !tbaa !71
  br label %.preheader1368

._crit_edge1617.loopexit:                         ; preds = %.lr.ph1616
  %.pre1953 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1617

._crit_edge1617:                                  ; preds = %._crit_edge1617.loopexit, %.preheader1370
  %2022 = phi i64 [ %.pre1953, %._crit_edge1617.loopexit ], [ %2016, %.preheader1370 ]
  %2023 = phi ptr [ %2098, %._crit_edge1617.loopexit ], [ %2017, %.preheader1370 ]
  %2024 = add nuw i64 %.011791618, 1
  %2025 = icmp ult i64 %2024, %2022
  br i1 %2025, label %.preheader1370, label %.preheader1369, !llvm.loop !113

.lr.ph1616:                                       ; preds = %.preheader1370, %.lr.ph1616
  %2026 = phi ptr [ %2098, %.lr.ph1616 ], [ %2017, %.preheader1370 ]
  %.011781615 = phi i64 [ %2051, %.lr.ph1616 ], [ 0, %.preheader1370 ]
  %2027 = load ptr, ptr %1939, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %26) #12
  %2028 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2026, i64 %.011791618, i32 2
  %2029 = load ptr, ptr %2028, align 8, !tbaa !87
  %2030 = trunc i64 %.011781615 to i32
  %2031 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2029, i32 noundef %2030)
  %.fca.0.extract173 = extractvalue { ptr, i32 } %2031, 0
  %.fca.1.extract174 = extractvalue { ptr, i32 } %2031, 1
  store ptr %.fca.0.extract173, ptr %26, align 8
  store i32 %.fca.1.extract174, ptr %.sroa.2176.0..sroa_idx, align 8
  %2032 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %26, i32 noundef 0)
  %2033 = load i32, ptr %2032, align 4, !tbaa !32
  %2034 = sext i32 %2033 to i64
  %2035 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2027, i64 %2034
  %2036 = load double, ptr %2035, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %26) #12
  %2037 = load ptr, ptr %1939, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #12
  %2038 = load ptr, ptr %1938, align 8, !tbaa !71
  %2039 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2038, i64 %.011791618, i32 2
  %2040 = load ptr, ptr %2039, align 8, !tbaa !87
  %2041 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2040, i32 noundef %2030)
  %.fca.0.extract169 = extractvalue { ptr, i32 } %2041, 0
  %.fca.1.extract170 = extractvalue { ptr, i32 } %2041, 1
  store ptr %.fca.0.extract169, ptr %27, align 8
  store i32 %.fca.1.extract170, ptr %.sroa.2172.0..sroa_idx, align 8
  %2042 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %27, i32 noundef 0)
  %2043 = load i32, ptr %2042, align 4, !tbaa !32
  %2044 = sext i32 %2043 to i64
  %2045 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2037, i64 %2044, i32 1
  %2046 = load double, ptr %2045, align 8, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #12
  %2047 = load ptr, ptr %1939, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #12
  %2048 = load ptr, ptr %1938, align 8, !tbaa !71
  %2049 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2048, i64 %.011791618, i32 2
  %2050 = load ptr, ptr %2049, align 8, !tbaa !87
  %2051 = add nuw i64 %.011781615, 1
  %2052 = trunc i64 %2051 to i32
  %2053 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2050, i32 noundef %2052)
  %.fca.0.extract165 = extractvalue { ptr, i32 } %2053, 0
  %.fca.1.extract166 = extractvalue { ptr, i32 } %2053, 1
  store ptr %.fca.0.extract165, ptr %28, align 8
  store i32 %.fca.1.extract166, ptr %.sroa.2168.0..sroa_idx, align 8
  %2054 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %28, i32 noundef 0)
  %2055 = load i32, ptr %2054, align 4, !tbaa !32
  %2056 = sext i32 %2055 to i64
  %2057 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2047, i64 %2056
  %2058 = load double, ptr %2057, align 8, !tbaa !42
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #12
  %2059 = load ptr, ptr %1939, align 8, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %29) #12
  %2060 = load ptr, ptr %1938, align 8, !tbaa !71
  %2061 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2060, i64 %.011791618, i32 2
  %2062 = load ptr, ptr %2061, align 8, !tbaa !87
  %2063 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2062, i32 noundef %2052)
  %.fca.0.extract161 = extractvalue { ptr, i32 } %2063, 0
  %.fca.1.extract162 = extractvalue { ptr, i32 } %2063, 1
  store ptr %.fca.0.extract161, ptr %29, align 8
  store i32 %.fca.1.extract162, ptr %.sroa.2164.0..sroa_idx, align 8
  %2064 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %29, i32 noundef 0)
  %2065 = load i32, ptr %2064, align 4, !tbaa !32
  %2066 = sext i32 %2065 to i64
  %2067 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2059, i64 %2066, i32 1
  %2068 = load double, ptr %2067, align 8, !tbaa !43
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %29) #12
  %2069 = fsub double %2036, %2058
  %2070 = fsub double %2046, %2068
  %2071 = fmul double %2070, %2070
  %2072 = call double @llvm.fmuladd.f64(double %2069, double %2069, double %2071)
  %sqrt1347 = call double @llvm.sqrt.f64(double %2072)
  %2073 = load ptr, ptr %1938, align 8, !tbaa !71
  %2074 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2073, i64 %.011791618, i32 6
  %2075 = load ptr, ptr %2074, align 8, !tbaa !106
  %2076 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2075, i32 noundef %2030)
  store double %sqrt1347, ptr %2076, align 8, !tbaa !33
  %2077 = fneg double %2070
  %2078 = load ptr, ptr %1938, align 8, !tbaa !71
  %2079 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2078, i64 %.011791618, i32 6
  %2080 = load ptr, ptr %2079, align 8, !tbaa !106
  %2081 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2080, i32 noundef %2030)
  %2082 = load double, ptr %2081, align 8, !tbaa !33
  %2083 = fdiv double %2077, %2082
  %2084 = load ptr, ptr %1938, align 8, !tbaa !71
  %2085 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2084, i64 %.011791618, i32 4
  %2086 = load ptr, ptr %2085, align 8, !tbaa !104
  %2087 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2086, i32 noundef %2030)
  store double %2083, ptr %2087, align 8, !tbaa !33
  %2088 = load ptr, ptr %1938, align 8, !tbaa !71
  %2089 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2088, i64 %.011791618, i32 6
  %2090 = load ptr, ptr %2089, align 8, !tbaa !106
  %2091 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2090, i32 noundef %2030)
  %2092 = load double, ptr %2091, align 8, !tbaa !33
  %2093 = fdiv double %2069, %2092
  %2094 = load ptr, ptr %1938, align 8, !tbaa !71
  %2095 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2094, i64 %.011791618, i32 5
  %2096 = load ptr, ptr %2095, align 8, !tbaa !105
  %2097 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2096, i32 noundef %2030)
  store double %2093, ptr %2097, align 8, !tbaa !33
  %2098 = load ptr, ptr %1938, align 8, !tbaa !71
  %2099 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2098, i64 %.011791618, i32 3
  %2100 = load i64, ptr %2099, align 8, !tbaa !103
  %2101 = icmp ult i64 %2051, %2100
  br i1 %2101, label %.lr.ph1616, label %._crit_edge1617.loopexit, !llvm.loop !114

.preheader1368:                                   ; preds = %.preheader1368.lr.ph, %._crit_edge1626
  %2102 = phi i64 [ %2022, %.preheader1368.lr.ph ], [ %2113, %._crit_edge1626 ]
  %2103 = phi ptr [ %.pre1954, %.preheader1368.lr.ph ], [ %2114, %._crit_edge1626 ]
  %.011691627 = phi i64 [ 0, %.preheader1368.lr.ph ], [ %2115, %._crit_edge1626 ]
  %2104 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2103, i64 %.011691627, i32 3
  %2105 = load i64, ptr %2104, align 8, !tbaa !103
  %.not1743 = icmp eq i64 %2105, 0
  br i1 %.not1743, label %._crit_edge1626, label %.lr.ph1625

.preheader1365:                                   ; preds = %._crit_edge1626
  %.not1746 = icmp eq i64 %2113, 0
  br i1 %.not1746, label %._crit_edge1637, label %.preheader1364.lr.ph

.preheader1364.lr.ph:                             ; preds = %.preheader1365
  %2106 = getelementptr inbounds i8, ptr %0, i64 480
  %2107 = getelementptr inbounds i8, ptr %0, i64 416
  %2108 = getelementptr inbounds i8, ptr %0, i64 448
  %.pre1956 = load ptr, ptr %2106, align 8, !tbaa !71
  br label %.preheader1364

.loopexit1367:                                    ; preds = %2171, %.preheader1366
  %2109 = load ptr, ptr %2020, align 8, !tbaa !71
  %2110 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2109, i64 %.011691627, i32 3
  %2111 = load i64, ptr %2110, align 8, !tbaa !103
  %2112 = icmp ult i64 %2127, %2111
  br i1 %2112, label %.lr.ph1625, label %._crit_edge1626.loopexit, !llvm.loop !115

._crit_edge1626.loopexit:                         ; preds = %.loopexit1367
  %.pre1955 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1626

._crit_edge1626:                                  ; preds = %._crit_edge1626.loopexit, %.preheader1368
  %2113 = phi i64 [ %.pre1955, %._crit_edge1626.loopexit ], [ %2102, %.preheader1368 ]
  %2114 = phi ptr [ %2109, %._crit_edge1626.loopexit ], [ %2103, %.preheader1368 ]
  %2115 = add nuw i64 %.011691627, 1
  %2116 = icmp ult i64 %2115, %2113
  br i1 %2116, label %.preheader1368, label %.preheader1365, !llvm.loop !116

.lr.ph1625:                                       ; preds = %.preheader1368, %.loopexit1367
  %2117 = phi ptr [ %2109, %.loopexit1367 ], [ %2103, %.preheader1368 ]
  %.011681624 = phi i64 [ %2127, %.loopexit1367 ], [ 0, %.preheader1368 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %30) #12
  %2118 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2117, i64 %.011691627, i32 2
  %2119 = load ptr, ptr %2118, align 8, !tbaa !87
  %2120 = trunc i64 %.011681624 to i32
  %2121 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2119, i32 noundef %2120)
  %.fca.0.extract144 = extractvalue { ptr, i32 } %2121, 0
  %.fca.1.extract145 = extractvalue { ptr, i32 } %2121, 1
  store ptr %.fca.0.extract144, ptr %30, align 8
  store i32 %.fca.1.extract145, ptr %.sroa.2147.0..sroa_idx, align 8
  %2122 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %30, i32 noundef 0)
  %2123 = load i32, ptr %2122, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %30) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #12
  %2124 = load ptr, ptr %2020, align 8, !tbaa !71
  %2125 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2124, i64 %.011691627, i32 2
  %2126 = load ptr, ptr %2125, align 8, !tbaa !87
  %2127 = add nuw i64 %.011681624, 1
  %2128 = trunc i64 %2127 to i32
  %2129 = call { ptr, i32 } @_ZN7Array2DIiEixEi(ptr noundef nonnull align 8 dereferenceable(40) %2126, i32 noundef %2128)
  %.fca.0.extract = extractvalue { ptr, i32 } %2129, 0
  %.fca.1.extract = extractvalue { ptr, i32 } %2129, 1
  store ptr %.fca.0.extract, ptr %31, align 8
  store i32 %.fca.1.extract, ptr %.sroa.2.0..sroa_idx, align 8
  %2130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12) %31, i32 noundef 0)
  %2131 = load i32, ptr %2130, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #12
  %2132 = sext i32 %2131 to i64
  %2133 = load ptr, ptr %2021, align 8, !tbaa !14
  %2134 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2133, i64 %2132, i32 2
  %2135 = load i32, ptr %2134, align 8, !tbaa !67
  %.not1744 = icmp eq i32 %2135, 0
  br i1 %.not1744, label %.preheader1366, label %.lr.ph1621

.preheader1366:                                   ; preds = %2152, %.lr.ph1625
  %2136 = phi ptr [ %2133, %.lr.ph1625 ], [ %2154, %2152 ]
  %2137 = sext i32 %2123 to i64
  %2138 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2136, i64 %2137, i32 2
  %2139 = load i32, ptr %2138, align 8, !tbaa !67
  %.not1745 = icmp eq i32 %2139, 0
  br i1 %.not1745, label %.loopexit1367, label %.lr.ph1623

.lr.ph1621:                                       ; preds = %.lr.ph1625, %2152
  %2140 = phi ptr [ %2154, %2152 ], [ %2133, %.lr.ph1625 ]
  %.011601619 = phi i64 [ %2153, %2152 ], [ 0, %.lr.ph1625 ]
  %2141 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2140, i64 %2132, i32 3
  %2142 = load ptr, ptr %2141, align 8, !tbaa !72
  %2143 = trunc i64 %.011601619 to i32
  %2144 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2142, i32 noundef %2143)
  %2145 = load i32, ptr %2144, align 4, !tbaa !32
  %2146 = icmp eq i32 %2123, %2145
  br i1 %2146, label %2147, label %2152

2147:                                             ; preds = %.lr.ph1621
  %2148 = load ptr, ptr %2020, align 8, !tbaa !71
  %2149 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2148, i64 %.011691627, i32 12
  %2150 = load ptr, ptr %2149, align 8, !tbaa !109
  %2151 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2150, i32 noundef %2120)
  store i32 %2143, ptr %2151, align 4, !tbaa !32
  br label %2152

2152:                                             ; preds = %.lr.ph1621, %2147
  %2153 = add nuw i64 %.011601619, 1
  %2154 = load ptr, ptr %2021, align 8, !tbaa !14
  %2155 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2154, i64 %2132, i32 2
  %2156 = load i32, ptr %2155, align 8, !tbaa !67
  %2157 = sext i32 %2156 to i64
  %2158 = icmp ult i64 %2153, %2157
  br i1 %2158, label %.lr.ph1621, label %.preheader1366, !llvm.loop !117

.lr.ph1623:                                       ; preds = %.preheader1366, %2171
  %2159 = phi ptr [ %2173, %2171 ], [ %2136, %.preheader1366 ]
  %.011591622 = phi i64 [ %2172, %2171 ], [ 0, %.preheader1366 ]
  %2160 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2159, i64 %2137, i32 3
  %2161 = load ptr, ptr %2160, align 8, !tbaa !72
  %2162 = trunc i64 %.011591622 to i32
  %2163 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2161, i32 noundef %2162)
  %2164 = load i32, ptr %2163, align 4, !tbaa !32
  %2165 = icmp eq i32 %2131, %2164
  br i1 %2165, label %2166, label %2171

2166:                                             ; preds = %.lr.ph1623
  %2167 = load ptr, ptr %2020, align 8, !tbaa !71
  %2168 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2167, i64 %.011691627, i32 11
  %2169 = load ptr, ptr %2168, align 8, !tbaa !108
  %2170 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2169, i32 noundef %2120)
  store i32 %2162, ptr %2170, align 4, !tbaa !32
  br label %2171

2171:                                             ; preds = %.lr.ph1623, %2166
  %2172 = add nuw i64 %.011591622, 1
  %2173 = load ptr, ptr %2021, align 8, !tbaa !14
  %2174 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2173, i64 %2137, i32 2
  %2175 = load i32, ptr %2174, align 8, !tbaa !67
  %2176 = sext i32 %2175 to i64
  %2177 = icmp ult i64 %2172, %2176
  br i1 %2177, label %.lr.ph1623, label %.loopexit1367, !llvm.loop !118

.preheader1364:                                   ; preds = %.preheader1364.lr.ph, %._crit_edge1635
  %2178 = phi i64 [ %2113, %.preheader1364.lr.ph ], [ %2189, %._crit_edge1635 ]
  %2179 = phi ptr [ %.pre1956, %.preheader1364.lr.ph ], [ %2190, %._crit_edge1635 ]
  %.011581636 = phi i64 [ 0, %.preheader1364.lr.ph ], [ %2191, %._crit_edge1635 ]
  %2180 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2179, i64 %.011581636, i32 3
  %2181 = load i64, ptr %2180, align 8, !tbaa !103
  %.not1747 = icmp eq i64 %2181, 0
  br i1 %.not1747, label %._crit_edge1635, label %.lr.ph1634

._crit_edge1637:                                  ; preds = %._crit_edge1635, %.preheader1376, %.preheader1374, %.preheader1373, %.preheader1371, %.preheader1369, %.preheader1365
  %2182 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.50)
  %2183 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2182, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2184 = getelementptr inbounds i8, ptr %0, i64 416
  %2185 = load ptr, ptr %2184, align 8, !tbaa !14
  %2186 = getelementptr inbounds i8, ptr %2185, i64 16
  %2187 = load i32, ptr %2186, align 8, !tbaa !67
  store i32 %2187, ptr %2, align 4, !tbaa !32
  store i32 %2187, ptr %3, align 4, !tbaa !32
  %2188 = icmp eq i32 %2187, 2
  br i1 %2188, label %2255, label %2259

._crit_edge1635.loopexit:                         ; preds = %.thread1340
  %.pre1957 = load i64, ptr %1207, align 8, !tbaa !70
  br label %._crit_edge1635

._crit_edge1635:                                  ; preds = %._crit_edge1635.loopexit, %.preheader1364
  %2189 = phi i64 [ %.pre1957, %._crit_edge1635.loopexit ], [ %2178, %.preheader1364 ]
  %2190 = phi ptr [ %2249, %._crit_edge1635.loopexit ], [ %2179, %.preheader1364 ]
  %2191 = add nuw i64 %.011581636, 1
  %2192 = icmp ult i64 %2191, %2189
  br i1 %2192, label %.preheader1364, label %._crit_edge1637, !llvm.loop !119

.lr.ph1634:                                       ; preds = %.preheader1364, %.thread1340
  %2193 = phi ptr [ %2249, %.thread1340 ], [ %2179, %.preheader1364 ]
  %.011571633 = phi i64 [ %2202, %.thread1340 ], [ 0, %.preheader1364 ]
  %2194 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2193, i64 %.011581636, i32 2
  %2195 = load ptr, ptr %2194, align 8, !tbaa !87
  %2196 = trunc i64 %.011571633 to i32
  %2197 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2195, i32 noundef %2196)
  %2198 = load i32, ptr %2197, align 4, !tbaa !32
  %2199 = load ptr, ptr %2106, align 8, !tbaa !71
  %2200 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2199, i64 %.011581636, i32 2
  %2201 = load ptr, ptr %2200, align 8, !tbaa !87
  %2202 = add nuw i64 %.011571633, 1
  %2203 = trunc i64 %2202 to i32
  %2204 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2201, i32 noundef %2203)
  %2205 = load i32, ptr %2204, align 4, !tbaa !32
  %2206 = sext i32 %2198 to i64
  %2207 = load ptr, ptr %2107, align 8, !tbaa !14
  %2208 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2207, i64 %2206, i32 4
  %2209 = load i32, ptr %2208, align 8, !tbaa !15
  %.not1748 = icmp eq i32 %2209, 0
  br i1 %.not1748, label %._crit_edge1631, label %.lr.ph1630

.lr.ph1630:                                       ; preds = %.lr.ph1634, %2238
  %2210 = phi ptr [ %2240, %2238 ], [ %2207, %.lr.ph1634 ]
  %.011561628 = phi i64 [ %2239, %2238 ], [ 0, %.lr.ph1634 ]
  %2211 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2210, i64 %2206, i32 5
  %2212 = trunc i64 %.011561628 to i32
  %2213 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %2211, i32 noundef %2212)
  %2214 = load i32, ptr %2213, align 4, !tbaa !32
  %2215 = sext i32 %2214 to i64
  br label %2216

2216:                                             ; preds = %2222, %.lr.ph1630
  %.01155 = phi i64 [ 0, %.lr.ph1630 ], [ %2224, %2222 ]
  %2217 = load ptr, ptr %2108, align 8, !tbaa !29
  %2218 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2217, i64 %2215
  %2219 = load i32, ptr %2218, align 8, !tbaa !34
  %2220 = sext i32 %2219 to i64
  %2221 = icmp ult i64 %.01155, %2220
  br i1 %2221, label %2222, label %2238

2222:                                             ; preds = %2216
  %2223 = trunc i64 %.01155 to i32
  %2224 = add nuw i64 %.01155, 1
  %2225 = trunc i64 %2224 to i32
  %.not = icmp sgt i32 %2219, %2225
  %2226 = select i1 %.not, i32 0, i32 %2219
  %spec.select1324 = sub nsw i32 %2225, %2226
  %2227 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2217, i64 %2215, i32 2
  %2228 = load ptr, ptr %2227, align 8, !tbaa !30
  %2229 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2228, i32 noundef %2223)
  %2230 = load i32, ptr %2229, align 4, !tbaa !32
  %2231 = load ptr, ptr %2108, align 8, !tbaa !29
  %2232 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2231, i64 %2215, i32 2
  %2233 = load ptr, ptr %2232, align 8, !tbaa !30
  %2234 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2233, i32 noundef %spec.select1324)
  %2235 = icmp eq i32 %2230, %2198
  %2236 = load i32, ptr %2234, align 4
  %2237 = icmp eq i32 %2236, %2205
  %or.cond1326 = select i1 %2235, i1 %2237, i1 false
  br i1 %or.cond1326, label %.thread1340, label %2216, !llvm.loop !120

2238:                                             ; preds = %2216
  %2239 = add nuw i64 %.011561628, 1
  %2240 = load ptr, ptr %2107, align 8, !tbaa !14
  %2241 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2240, i64 %2206, i32 4
  %2242 = load i32, ptr %2241, align 8, !tbaa !15
  %2243 = sext i32 %2242 to i64
  %2244 = icmp ult i64 %2239, %2243
  br i1 %2244, label %.lr.ph1630, label %._crit_edge1631, !llvm.loop !121

.thread1340:                                      ; preds = %2222
  %2245 = load ptr, ptr %2106, align 8, !tbaa !71
  %2246 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2245, i64 %.011581636, i32 10
  %2247 = load ptr, ptr %2246, align 8, !tbaa !107
  %2248 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2247, i32 noundef %2196)
  store i32 %2214, ptr %2248, align 4, !tbaa !32
  %2249 = load ptr, ptr %2106, align 8, !tbaa !71
  %2250 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2249, i64 %.011581636, i32 3
  %2251 = load i64, ptr %2250, align 8, !tbaa !103
  %2252 = icmp ult i64 %2202, %2251
  br i1 %2252, label %.lr.ph1634, label %._crit_edge1635.loopexit, !llvm.loop !122

._crit_edge1631:                                  ; preds = %.lr.ph1634, %2238
  %2253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.49)
  %2254 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2253, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

2255:                                             ; preds = %._crit_edge1637
  %2256 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.51)
  %2257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2256, i32 noundef 0)
  %2258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2257, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %2259

2259:                                             ; preds = %2255, %._crit_edge1637
  %2260 = load i64, ptr %40, align 8, !tbaa !5
  %2261 = icmp ugt i64 %2260, 1
  br i1 %2261, label %.lr.ph1643, label %._crit_edge1644

._crit_edge1644:                                  ; preds = %2316, %2259
  %.01210.lcssa = phi i32 [ 0, %2259 ], [ %.11211, %2316 ]
  %.01206.lcssa = phi i32 [ 0, %2259 ], [ %spec.select1327, %2316 ]
  %.01204.lcssa = phi i32 [ %2187, %2259 ], [ %2296, %2316 ]
  %2262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.52)
  %2263 = load i64, ptr %40, align 8, !tbaa !5
  %2264 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2262, i64 noundef %2263)
  %2265 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2264, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.53)
  %2267 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2266, i32 noundef %.01204.lcssa)
  %2268 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2267, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.53)
  %2270 = sext i32 %.01204.lcssa to i64
  %2271 = load i64, ptr %40, align 8, !tbaa !5
  %2272 = udiv i64 %2270, %2271
  %2273 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2269, i64 noundef %2272)
  %2274 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2273, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2275 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.54)
  %2276 = load i32, ptr %2, align 4, !tbaa !32
  %2277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2275, i32 noundef %2276)
  %2278 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2277, ptr noundef nonnull @.str.55)
  %2279 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2278, i32 noundef %.01206.lcssa)
  %2280 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2279, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2281 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.56)
  %2282 = load i32, ptr %3, align 4, !tbaa !32
  %2283 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2281, i32 noundef %2282)
  %2284 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2283, ptr noundef nonnull @.str.55)
  %2285 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2284, i32 noundef %.01210.lcssa)
  %2286 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2285, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2287 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.22)
  %2288 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2287, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2289 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.57)
  %2290 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2289, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2291 = load i64, ptr %53, align 8, !tbaa !26
  %.not1749 = icmp eq i64 %2291, 0
  br i1 %.not1749, label %.preheader1363, label %.lr.ph1650

.lr.ph1650:                                       ; preds = %._crit_edge1644
  %2292 = getelementptr inbounds i8, ptr %0, i64 448
  %.pre1958 = load ptr, ptr %2292, align 8, !tbaa !29
  br label %2323

.lr.ph1643:                                       ; preds = %2259, %2316
  %.011541641 = phi i64 [ %2317, %2316 ], [ 1, %2259 ]
  %.012041640 = phi i32 [ %2296, %2316 ], [ %2187, %2259 ]
  %.012061639 = phi i32 [ %spec.select1327, %2316 ], [ 0, %2259 ]
  %.012101638 = phi i32 [ %.11211, %2316 ], [ 0, %2259 ]
  %2293 = load ptr, ptr %2184, align 8, !tbaa !14
  %2294 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2293, i64 %.011541641, i32 2
  %2295 = load i32, ptr %2294, align 8, !tbaa !67
  %2296 = add nsw i32 %2295, %.012041640
  %2297 = load i32, ptr %2, align 4, !tbaa !32
  %2298 = icmp slt i32 %2295, %2297
  %2299 = trunc i64 %.011541641 to i32
  %spec.select1327 = select i1 %2298, i32 %2299, i32 %.012061639
  %2300 = load i32, ptr %3, align 4, !tbaa !32
  %2301 = icmp sgt i32 %2295, %2300
  %.11211 = select i1 %2301, i32 %2299, i32 %.012101638
  %2302 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 4 dereferenceable(4) %2294)
  %2303 = load i32, ptr %2302, align 4, !tbaa !32
  store i32 %2303, ptr %2, align 4, !tbaa !32
  %2304 = load ptr, ptr %2184, align 8, !tbaa !14
  %2305 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2304, i64 %.011541641, i32 2
  %2306 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %2305)
  %2307 = load i32, ptr %2306, align 4, !tbaa !32
  store i32 %2307, ptr %3, align 4, !tbaa !32
  %2308 = load ptr, ptr %2184, align 8, !tbaa !14
  %2309 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2308, i64 %.011541641, i32 2
  %2310 = load i32, ptr %2309, align 8, !tbaa !67
  %2311 = icmp eq i32 %2310, 2
  br i1 %2311, label %2312, label %2316

2312:                                             ; preds = %.lr.ph1643
  %2313 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.51)
  %2314 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2313, i64 noundef %.011541641)
  %2315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2314, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %2316

2316:                                             ; preds = %.lr.ph1643, %2312
  %2317 = add nuw i64 %.011541641, 1
  %2318 = load i64, ptr %40, align 8, !tbaa !5
  %2319 = icmp ult i64 %2317, %2318
  br i1 %2319, label %.lr.ph1643, label %._crit_edge1644, !llvm.loop !123

.preheader1363:                                   ; preds = %2328, %._crit_edge1644
  %2320 = phi i64 [ 0, %._crit_edge1644 ], [ %2332, %2328 ]
  %2321 = load i64, ptr %47, align 8, !tbaa !25
  %.not1750 = icmp eq i64 %2321, 0
  br i1 %.not1750, label %._crit_edge1659, label %.lr.ph1658

.lr.ph1658:                                       ; preds = %.preheader1363
  %2322 = getelementptr inbounds i8, ptr %0, i64 448
  br label %2341

2323:                                             ; preds = %.lr.ph1650, %2328
  %2324 = phi ptr [ %.pre1958, %.lr.ph1650 ], [ %2329, %2328 ]
  %.011531648 = phi i64 [ 0, %.lr.ph1650 ], [ %2331, %2328 ]
  %2325 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #14
  %2326 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2324, i64 %.011531648, i32 3
  %2327 = load i32, ptr %2326, align 8, !tbaa !46
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2325, i32 noundef %2327, i32 noundef 1)
          to label %2328 unwind label %2334

2328:                                             ; preds = %2323
  %2329 = load ptr, ptr %2292, align 8, !tbaa !29
  %2330 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2329, i64 %.011531648, i32 9
  store ptr %2325, ptr %2330, align 8, !tbaa !124
  %2331 = add nuw i64 %.011531648, 1
  %2332 = load i64, ptr %53, align 8, !tbaa !26
  %2333 = icmp ult i64 %2331, %2332
  br i1 %2333, label %2323, label %.preheader1363, !llvm.loop !125

2334:                                             ; preds = %2323
  %2335 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %2325, i64 noundef 40) #15
  br label %2758

._crit_edge1659.loopexit:                         ; preds = %.loopexit1360
  %.pre1959 = load i64, ptr %53, align 8, !tbaa !26
  br label %._crit_edge1659

._crit_edge1659:                                  ; preds = %._crit_edge1659.loopexit, %.preheader1363
  %2336 = phi i64 [ %.pre1959, %._crit_edge1659.loopexit ], [ %2320, %.preheader1363 ]
  %2337 = getelementptr inbounds i8, ptr %0, i64 488
  store i64 0, ptr %2337, align 8, !tbaa !126
  %.not1753 = icmp eq i64 %2336, 0
  br i1 %.not1753, label %.loopexit1357.thread, label %.preheader1358.lr.ph

.loopexit1357.thread:                             ; preds = %._crit_edge1659
  %2338 = call noalias noundef nonnull dereferenceable(8) ptr @_Znam(i64 noundef 8) #14
  store i64 0, ptr %2338, align 16
  %.ptr12971991 = getelementptr inbounds i8, ptr %2338, i64 8
  %2339 = getelementptr inbounds i8, ptr %0, i64 496
  store ptr %.ptr12971991, ptr %2339, align 8, !tbaa !127
  store i64 0, ptr %2337, align 8, !tbaa !126
  br label %._crit_edge1671

.preheader1358.lr.ph:                             ; preds = %._crit_edge1659
  %2340 = getelementptr inbounds i8, ptr %0, i64 448
  %.pre1960 = load ptr, ptr %2340, align 8, !tbaa !29
  br label %.preheader1358

2341:                                             ; preds = %.lr.ph1658, %.loopexit1360
  %.011521655 = phi i64 [ 0, %.lr.ph1658 ], [ %2400, %.loopexit1360 ]
  %2342 = load ptr, ptr %774, align 8, !tbaa !53
  %2343 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2342, i64 %.011521655
  %2344 = getelementptr inbounds i8, ptr %2343, i64 8
  %2345 = load i32, ptr %2344, align 8, !tbaa !55
  %2346 = getelementptr inbounds i8, ptr %2343, i64 12
  %2347 = load i32, ptr %2346, align 4, !tbaa !59
  %2348 = icmp sgt i32 %2345, -1
  br i1 %2348, label %.preheader1361, label %.loopexit1362

.preheader1361:                                   ; preds = %2341
  %2349 = zext nneg i32 %2345 to i64
  %2350 = load ptr, ptr %2322, align 8, !tbaa !29
  %2351 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2350, i64 %2349, i32 3
  %2352 = load i32, ptr %2351, align 8, !tbaa !46
  %.not1751 = icmp eq i32 %2352, 0
  br i1 %.not1751, label %.loopexit1362, label %.lr.ph1652

.lr.ph1652:                                       ; preds = %.preheader1361
  %2353 = trunc i64 %.011521655 to i32
  br label %2354

2354:                                             ; preds = %.lr.ph1652, %2367
  %2355 = phi ptr [ %2350, %.lr.ph1652 ], [ %2369, %2367 ]
  %.011511651 = phi i64 [ 0, %.lr.ph1652 ], [ %2368, %2367 ]
  %2356 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2355, i64 %2349, i32 5
  %2357 = load ptr, ptr %2356, align 8, !tbaa !45
  %2358 = trunc i64 %.011511651 to i32
  %2359 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2357, i32 noundef %2358)
  %2360 = load i32, ptr %2359, align 4, !tbaa !32
  %2361 = icmp eq i32 %2360, %2347
  br i1 %2361, label %2362, label %2367

2362:                                             ; preds = %2354
  %2363 = load ptr, ptr %2322, align 8, !tbaa !29
  %2364 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2363, i64 %2349, i32 9
  %2365 = load ptr, ptr %2364, align 8, !tbaa !124
  %2366 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2365, i32 noundef %2358)
  store i32 %2353, ptr %2366, align 4, !tbaa !32
  br label %2367

2367:                                             ; preds = %2354, %2362
  %2368 = add nuw i64 %.011511651, 1
  %2369 = load ptr, ptr %2322, align 8, !tbaa !29
  %2370 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2369, i64 %2349, i32 3
  %2371 = load i32, ptr %2370, align 8, !tbaa !46
  %2372 = sext i32 %2371 to i64
  %2373 = icmp ult i64 %2368, %2372
  br i1 %2373, label %2354, label %.loopexit1362, !llvm.loop !128

.loopexit1362:                                    ; preds = %2367, %.preheader1361, %2341
  %2374 = icmp sgt i32 %2347, -1
  br i1 %2374, label %.preheader1359, label %.loopexit1360

.preheader1359:                                   ; preds = %.loopexit1362
  %2375 = zext nneg i32 %2347 to i64
  %2376 = load ptr, ptr %2322, align 8, !tbaa !29
  %2377 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2376, i64 %2375, i32 3
  %2378 = load i32, ptr %2377, align 8, !tbaa !46
  %.not1752 = icmp eq i32 %2378, 0
  br i1 %.not1752, label %.loopexit1360, label %.lr.ph1654

.lr.ph1654:                                       ; preds = %.preheader1359
  %2379 = trunc i64 %.011521655 to i32
  br label %2380

2380:                                             ; preds = %.lr.ph1654, %2393
  %2381 = phi ptr [ %2376, %.lr.ph1654 ], [ %2395, %2393 ]
  %.011501653 = phi i64 [ 0, %.lr.ph1654 ], [ %2394, %2393 ]
  %2382 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2381, i64 %2375, i32 5
  %2383 = load ptr, ptr %2382, align 8, !tbaa !45
  %2384 = trunc i64 %.011501653 to i32
  %2385 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2383, i32 noundef %2384)
  %2386 = load i32, ptr %2385, align 4, !tbaa !32
  %2387 = icmp eq i32 %2386, %2345
  br i1 %2387, label %2388, label %2393

2388:                                             ; preds = %2380
  %2389 = load ptr, ptr %2322, align 8, !tbaa !29
  %2390 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2389, i64 %2375, i32 9
  %2391 = load ptr, ptr %2390, align 8, !tbaa !124
  %2392 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2391, i32 noundef %2384)
  store i32 %2379, ptr %2392, align 4, !tbaa !32
  br label %2393

2393:                                             ; preds = %2380, %2388
  %2394 = add nuw i64 %.011501653, 1
  %2395 = load ptr, ptr %2322, align 8, !tbaa !29
  %2396 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2395, i64 %2375, i32 3
  %2397 = load i32, ptr %2396, align 8, !tbaa !46
  %2398 = sext i32 %2397 to i64
  %2399 = icmp ult i64 %2394, %2398
  br i1 %2399, label %2380, label %.loopexit1360, !llvm.loop !129

.loopexit1360:                                    ; preds = %2393, %.preheader1359, %.loopexit1362
  %2400 = add nuw i64 %.011521655, 1
  %2401 = load i64, ptr %47, align 8, !tbaa !25
  %2402 = icmp ult i64 %2400, %2401
  br i1 %2402, label %2341, label %._crit_edge1659.loopexit, !llvm.loop !130

.preheader1358:                                   ; preds = %.preheader1358.lr.ph, %._crit_edge1662
  %2403 = phi i64 [ %2336, %.preheader1358.lr.ph ], [ %2412, %._crit_edge1662 ]
  %2404 = phi ptr [ %.pre1960, %.preheader1358.lr.ph ], [ %2413, %._crit_edge1662 ]
  %.011491663 = phi i64 [ 0, %.preheader1358.lr.ph ], [ %2414, %._crit_edge1662 ]
  %2405 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2404, i64 %.011491663, i32 3
  %2406 = load i32, ptr %2405, align 8, !tbaa !46
  %.not1754 = icmp eq i32 %2406, 0
  br i1 %.not1754, label %._crit_edge1662, label %.lr.ph1661

._crit_edge1664:                                  ; preds = %._crit_edge1662
  %.pre1962 = load i64, ptr %2337, align 8, !tbaa !126
  %.pre1962.fr = freeze i64 %.pre1962
  %2407 = icmp ugt i64 %.pre1962.fr, 288230376151711743
  %2408 = shl i64 %.pre1962.fr, 6
  %2409 = or disjoint i64 %2408, 8
  %spec.select2181 = select i1 %2407, i64 -1, i64 %2409
  %2410 = call noalias noundef nonnull ptr @_Znam(i64 noundef %spec.select2181) #14
  store i64 %.pre1962.fr, ptr %2410, align 16
  %.ptr1297 = getelementptr inbounds i8, ptr %2410, i64 8
  %2411 = icmp eq i64 %.pre1962.fr, 0
  br i1 %2411, label %.loopexit1357, label %2434

._crit_edge1662.loopexit:                         ; preds = %2427
  %.pre1961 = load i64, ptr %53, align 8, !tbaa !26
  br label %._crit_edge1662

._crit_edge1662:                                  ; preds = %._crit_edge1662.loopexit, %.preheader1358
  %2412 = phi i64 [ %.pre1961, %._crit_edge1662.loopexit ], [ %2403, %.preheader1358 ]
  %2413 = phi ptr [ %2429, %._crit_edge1662.loopexit ], [ %2404, %.preheader1358 ]
  %2414 = add nuw i64 %.011491663, 1
  %2415 = icmp ult i64 %2414, %2412
  br i1 %2415, label %.preheader1358, label %._crit_edge1664, !llvm.loop !131

.lr.ph1661:                                       ; preds = %.preheader1358, %2427
  %2416 = phi ptr [ %2429, %2427 ], [ %2404, %.preheader1358 ]
  %.011481660 = phi i64 [ %2428, %2427 ], [ 0, %.preheader1358 ]
  %2417 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2416, i64 %.011491663, i32 5
  %2418 = load ptr, ptr %2417, align 8, !tbaa !45
  %2419 = trunc i64 %.011481660 to i32
  %2420 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2418, i32 noundef %2419)
  %2421 = load i32, ptr %2420, align 4, !tbaa !32
  %2422 = sext i32 %2421 to i64
  %2423 = icmp ult i64 %.011491663, %2422
  br i1 %2423, label %2424, label %2427

2424:                                             ; preds = %.lr.ph1661
  %2425 = load i64, ptr %2337, align 8, !tbaa !126
  %2426 = add i64 %2425, 1
  store i64 %2426, ptr %2337, align 8, !tbaa !126
  br label %2427

2427:                                             ; preds = %.lr.ph1661, %2424
  %2428 = add nuw i64 %.011481660, 1
  %2429 = load ptr, ptr %2340, align 8, !tbaa !29
  %2430 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2429, i64 %.011491663, i32 3
  %2431 = load i32, ptr %2430, align 8, !tbaa !46
  %2432 = sext i32 %2431 to i64
  %2433 = icmp ult i64 %2428, %2432
  br i1 %2433, label %.lr.ph1661, label %._crit_edge1662.loopexit, !llvm.loop !132

2434:                                             ; preds = %._crit_edge1664
  %2435 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %.ptr1297, i64 %.pre1962.fr
  br label %2436

2436:                                             ; preds = %2437, %2434
  %.idx1294 = phi i64 [ 8, %2434 ], [ %.add1295, %2437 ]
  %.ptr.ptr1302 = getelementptr inbounds i8, ptr %2410, i64 %.idx1294
  invoke void @_ZN13EulerSolver2D9face_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(64) %.ptr.ptr1302)
          to label %2437 unwind label %2447

2437:                                             ; preds = %2436
  %.add1295 = add nuw nsw i64 %.idx1294, 64
  %.ptr1296 = getelementptr inbounds i8, ptr %2410, i64 %.add1295
  %2438 = icmp eq ptr %.ptr1296, %2435
  br i1 %2438, label %.loopexit1357.loopexit, label %2436

.loopexit1357.loopexit:                           ; preds = %2437
  %.pre1963 = load i64, ptr %53, align 8, !tbaa !26
  br label %.loopexit1357

.loopexit1357:                                    ; preds = %.loopexit1357.loopexit, %._crit_edge1664
  %2439 = phi i64 [ %.pre1963, %.loopexit1357.loopexit ], [ %2412, %._crit_edge1664 ]
  %2440 = getelementptr inbounds i8, ptr %0, i64 496
  store ptr %.ptr1297, ptr %2440, align 8, !tbaa !127
  store i64 0, ptr %2337, align 8, !tbaa !126
  %.not1755 = icmp eq i64 %2439, 0
  br i1 %.not1755, label %._crit_edge1671, label %.preheader1354.lr.ph

.preheader1354.lr.ph:                             ; preds = %.loopexit1357
  %2441 = getelementptr inbounds i8, ptr %0, i64 448
  %.pre1964 = load ptr, ptr %2441, align 8, !tbaa !29
  br label %.preheader1354

.preheader1354:                                   ; preds = %.preheader1354.lr.ph, %._crit_edge1667
  %2442 = phi i64 [ %2439, %.preheader1354.lr.ph ], [ %2451, %._crit_edge1667 ]
  %2443 = phi ptr [ %.pre1964, %.preheader1354.lr.ph ], [ %2452, %._crit_edge1667 ]
  %.011471668 = phi i64 [ 0, %.preheader1354.lr.ph ], [ %2453, %._crit_edge1667 ]
  %2444 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2443, i64 %.011471668, i32 3
  %2445 = load i32, ptr %2444, align 8, !tbaa !46
  %.not1756 = icmp eq i32 %2445, 0
  br i1 %.not1756, label %._crit_edge1667, label %.lr.ph1666

.lr.ph1666:                                       ; preds = %.preheader1354
  %2446 = trunc i64 %.011471668 to i32
  br label %2455

.preheader1353:                                   ; preds = %._crit_edge1667
  %.pre1966 = load i64, ptr %2337, align 8, !tbaa !126
  %.not1757 = icmp eq i64 %.pre1966, 0
  br i1 %.not1757, label %._crit_edge1671, label %.lr.ph1670.preheader

.lr.ph1670.preheader:                             ; preds = %.preheader1353
  %.pre1967 = load ptr, ptr %2440, align 8, !tbaa !127
  br label %.lr.ph1670

2447:                                             ; preds = %2436
  %2448 = landingpad { ptr, i32 }
          cleanup
  %2449 = icmp eq i64 %.idx1294, 8
  br i1 %2449, label %.loopexit1356, label %.preheader1355

.preheader1355:                                   ; preds = %2447, %.preheader1355
  %.idx1298 = phi i64 [ %.add1299, %.preheader1355 ], [ %.idx1294, %2447 ]
  %.add1299 = add nsw i64 %.idx1298, -64
  %.ptr1301 = getelementptr inbounds i8, ptr %2410, i64 %.add1299
  call void @_ZN13EulerSolver2D9face_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %.ptr1301) #12
  %2450 = icmp eq i64 %.add1299, 8
  br i1 %2450, label %.loopexit1356, label %.preheader1355

.loopexit1356:                                    ; preds = %.preheader1355, %2447
  call void @_ZdaPvm(ptr noundef nonnull %2410, i64 noundef %spec.select2181) #15
  br label %2758

._crit_edge1667.loopexit:                         ; preds = %2488
  %.pre1965 = load i64, ptr %53, align 8, !tbaa !26
  br label %._crit_edge1667

._crit_edge1667:                                  ; preds = %._crit_edge1667.loopexit, %.preheader1354
  %2451 = phi i64 [ %.pre1965, %._crit_edge1667.loopexit ], [ %2442, %.preheader1354 ]
  %2452 = phi ptr [ %2490, %._crit_edge1667.loopexit ], [ %2443, %.preheader1354 ]
  %2453 = add nuw i64 %.011471668, 1
  %2454 = icmp ult i64 %2453, %2451
  br i1 %2454, label %.preheader1354, label %.preheader1353, !llvm.loop !133

2455:                                             ; preds = %.lr.ph1666, %2488
  %2456 = phi ptr [ %2443, %.lr.ph1666 ], [ %2490, %2488 ]
  %.011461665 = phi i64 [ 0, %.lr.ph1666 ], [ %2489, %2488 ]
  %2457 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2456, i64 %.011471668, i32 5
  %2458 = load ptr, ptr %2457, align 8, !tbaa !45
  %2459 = trunc i64 %.011461665 to i32
  %2460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2458, i32 noundef %2459)
  %2461 = load i32, ptr %2460, align 4, !tbaa !32
  %2462 = sext i32 %2461 to i64
  %2463 = icmp ult i64 %.011471668, %2462
  br i1 %2463, label %.sink.split2182, label %2488

.sink.split2182:                                  ; preds = %2455
  %2464 = load i64, ptr %2337, align 8, !tbaa !126
  %2465 = add i64 %2464, 1
  store i64 %2465, ptr %2337, align 8, !tbaa !126
  %2466 = load ptr, ptr %2440, align 8, !tbaa !127
  %2467 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2466, i64 %2464, i32 2
  store i32 %2446, ptr %2467, align 8, !tbaa !134
  %2468 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2466, i64 %2464, i32 3
  store i32 %2461, ptr %2468, align 4, !tbaa !136
  %2469 = load ptr, ptr %2441, align 8, !tbaa !29
  %2470 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2469, i64 %.011471668, i32 9
  %2471 = load ptr, ptr %2470, align 8, !tbaa !124
  %2472 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2471, i32 noundef %2459)
  %2473 = load i32, ptr %2472, align 4, !tbaa !32
  %2474 = load ptr, ptr %774, align 8, !tbaa !53
  %2475 = sext i32 %2473 to i64
  %2476 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %2474, i64 %2475
  %2477 = load i32, ptr %2476, align 8, !tbaa !61
  %2478 = getelementptr inbounds i8, ptr %2476, i64 4
  %2479 = load i32, ptr %2478, align 4, !tbaa !62
  %2480 = getelementptr inbounds i8, ptr %2476, i64 8
  %2481 = load i32, ptr %2480, align 8, !tbaa !55
  %2482 = icmp eq i32 %2481, %2461
  %2483 = load ptr, ptr %2440, align 8, !tbaa !127
  %2484 = load i64, ptr %2337, align 8, !tbaa !126
  %2485 = getelementptr %"class.EulerSolver2D::face_type", ptr %2483, i64 %2484
  %2486 = getelementptr i8, ptr %2485, i64 -64
  %2487 = getelementptr i8, ptr %2485, i64 -60
  %. = select i1 %2482, i32 %2477, i32 %2479
  %.2185 = select i1 %2482, i32 %2479, i32 %2477
  store i32 %., ptr %2486, align 8, !tbaa !137
  store i32 %.2185, ptr %2487, align 4, !tbaa !138
  br label %2488

2488:                                             ; preds = %.sink.split2182, %2455
  %2489 = add nuw i64 %.011461665, 1
  %2490 = load ptr, ptr %2441, align 8, !tbaa !29
  %2491 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2490, i64 %.011471668, i32 3
  %2492 = load i32, ptr %2491, align 8, !tbaa !46
  %2493 = sext i32 %2492 to i64
  %2494 = icmp ult i64 %2489, %2493
  br i1 %2494, label %2455, label %._crit_edge1667.loopexit, !llvm.loop !139

2495:                                             ; preds = %2556
  %2496 = add nuw i64 %.011451669, 1
  %2497 = load i64, ptr %2337, align 8, !tbaa !126
  %2498 = icmp ult i64 %2496, %2497
  br i1 %2498, label %.lr.ph1670, label %._crit_edge1671, !llvm.loop !140

._crit_edge1671:                                  ; preds = %2495, %.loopexit1357.thread, %.loopexit1357, %.preheader1353
  %2499 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.59)
  %2500 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2499, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i32 10000, ptr %2, align 4, !tbaa !32
  store i32 -10000, ptr %3, align 4, !tbaa !32
  %2501 = load i64, ptr %53, align 8, !tbaa !26
  %.not1758 = icmp eq i64 %2501, 0
  br i1 %.not1758, label %._crit_edge1693, label %.lr.ph1674

.lr.ph1674:                                       ; preds = %._crit_edge1671
  %2502 = getelementptr inbounds i8, ptr %0, i64 448
  %2503 = load ptr, ptr %2502, align 8, !tbaa !29
  %xtraiter2499 = and i64 %2501, 3
  %2504 = icmp ult i64 %2501, 4
  br i1 %2504, label %.preheader1351.lr.ph.unr-lcssa, label %.lr.ph1674.new

.lr.ph1674.new:                                   ; preds = %.lr.ph1674
  %unroll_iter2502 = and i64 %2501, -4
  br label %2569

.lr.ph1670:                                       ; preds = %.lr.ph1670.preheader, %2495
  %2505 = phi ptr [ %2557, %2495 ], [ %.pre1967, %.lr.ph1670.preheader ]
  %.011451669 = phi i64 [ %2496, %2495 ], [ 0, %.lr.ph1670.preheader ]
  %2506 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2505, i64 %.011451669
  %2507 = load i32, ptr %2506, align 8, !tbaa !137
  %2508 = getelementptr inbounds i8, ptr %2506, i64 4
  %2509 = load i32, ptr %2508, align 4, !tbaa !138
  %2510 = load ptr, ptr %2184, align 8, !tbaa !14
  %2511 = sext i32 %2509 to i64
  %2512 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2510, i64 %2511, i32 1
  %2513 = load double, ptr %2512, align 8, !tbaa !43
  %2514 = sext i32 %2507 to i64
  %2515 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2510, i64 %2514, i32 1
  %2516 = load double, ptr %2515, align 8, !tbaa !43
  %2517 = fsub double %2513, %2516
  %2518 = fneg double %2517
  %2519 = getelementptr inbounds i8, ptr %2506, i64 24
  %2520 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2519, i32 noundef 0)
  store double %2518, ptr %2520, align 8, !tbaa !33
  %2521 = load ptr, ptr %2184, align 8, !tbaa !14
  %2522 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2521, i64 %2511
  %2523 = load double, ptr %2522, align 8, !tbaa !42
  %2524 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2521, i64 %2514
  %2525 = load double, ptr %2524, align 8, !tbaa !42
  %2526 = fsub double %2523, %2525
  %2527 = load ptr, ptr %2440, align 8, !tbaa !127
  %2528 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2527, i64 %.011451669, i32 5
  %2529 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2528, i32 noundef 1)
  store double %2526, ptr %2529, align 8, !tbaa !33
  %2530 = load ptr, ptr %2440, align 8, !tbaa !127
  %2531 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2530, i64 %.011451669, i32 5
  %2532 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2531, i32 noundef 0)
  %2533 = load double, ptr %2532, align 8, !tbaa !33
  %2534 = load ptr, ptr %2440, align 8, !tbaa !127
  %2535 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2534, i64 %.011451669, i32 5
  %2536 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2535, i32 noundef 0)
  %2537 = load double, ptr %2536, align 8, !tbaa !33
  %2538 = load ptr, ptr %2440, align 8, !tbaa !127
  %2539 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2538, i64 %.011451669, i32 5
  %2540 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2539, i32 noundef 1)
  %2541 = load double, ptr %2540, align 8, !tbaa !33
  %2542 = load ptr, ptr %2440, align 8, !tbaa !127
  %2543 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2542, i64 %.011451669, i32 5
  %2544 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2543, i32 noundef 1)
  %2545 = load double, ptr %2544, align 8, !tbaa !33
  %2546 = fmul double %2541, %2545
  %2547 = call double @llvm.fmuladd.f64(double %2533, double %2537, double %2546)
  %2548 = call double @sqrt(double noundef %2547) #12
  %2549 = load ptr, ptr %2440, align 8, !tbaa !127
  %2550 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2549, i64 %.011451669, i32 4
  store double %2548, ptr %2550, align 8, !tbaa !141
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %33) #12
  %2551 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2549, i64 %.011451669
  %2552 = getelementptr inbounds i8, ptr %2551, i64 24
  %2553 = getelementptr inbounds i8, ptr %2551, i64 16
  call void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %33, ptr noundef nonnull align 8 dereferenceable(40) %2552, ptr noundef nonnull align 8 dereferenceable(8) %2553)
  %2554 = load ptr, ptr %2440, align 8, !tbaa !127
  %2555 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2554, i64 %.011451669, i32 5
  invoke void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %32, ptr noundef nonnull align 8 dereferenceable(40) %2555, ptr noundef nonnull align 8 dereferenceable(40) %33)
          to label %2556 unwind label %2564

2556:                                             ; preds = %.lr.ph1670
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #12
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %33) #12
  %2557 = load ptr, ptr %2440, align 8, !tbaa !127
  %2558 = getelementptr inbounds %"class.EulerSolver2D::face_type", ptr %2557, i64 %.011451669, i32 4
  %2559 = load double, ptr %2558, align 8, !tbaa !141
  %2560 = fcmp olt double %2559, 1.000000e-10
  br i1 %2560, label %2561, label %2495

2561:                                             ; preds = %2556
  %2562 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.58)
  %2563 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2562, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @exit(i32 noundef 0) #13
  unreachable

2564:                                             ; preds = %.lr.ph1670
  %2565 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %33) #12
  br label %2758

.preheader1351.lr.ph.unr-lcssa:                   ; preds = %2569, %.lr.ph1674
  %.011441672.unr = phi i64 [ 0, %.lr.ph1674 ], [ %2577, %2569 ]
  %lcmp.mod2501.not = icmp eq i64 %xtraiter2499, 0
  br i1 %lcmp.mod2501.not, label %.preheader1351.lr.ph, label %.epil.preheader2498

.epil.preheader2498:                              ; preds = %.preheader1351.lr.ph.unr-lcssa, %.epil.preheader2498
  %.011441672.epil = phi i64 [ %2567, %.epil.preheader2498 ], [ %.011441672.unr, %.preheader1351.lr.ph.unr-lcssa ]
  %epil.iter2500 = phi i64 [ %epil.iter2500.next, %.epil.preheader2498 ], [ 0, %.preheader1351.lr.ph.unr-lcssa ]
  %2566 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2503, i64 %.011441672.epil, i32 17
  store i32 0, ptr %2566, align 4, !tbaa !142
  %2567 = add nuw i64 %.011441672.epil, 1
  %epil.iter2500.next = add i64 %epil.iter2500, 1
  %epil.iter2500.cmp.not = icmp eq i64 %epil.iter2500.next, %xtraiter2499
  br i1 %epil.iter2500.cmp.not, label %.preheader1351.lr.ph, label %.epil.preheader2498, !llvm.loop !143

.preheader1351.lr.ph:                             ; preds = %.epil.preheader2498, %.preheader1351.lr.ph.unr-lcssa
  %2568 = getelementptr inbounds i8, ptr %0, i64 448
  br label %.preheader1351

2569:                                             ; preds = %2569, %.lr.ph1674.new
  %.011441672 = phi i64 [ 0, %.lr.ph1674.new ], [ %2577, %2569 ]
  %niter2503 = phi i64 [ 0, %.lr.ph1674.new ], [ %niter2503.next.3, %2569 ]
  %2570 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2503, i64 %.011441672, i32 17
  store i32 0, ptr %2570, align 4, !tbaa !142
  %2571 = or disjoint i64 %.011441672, 1
  %2572 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2503, i64 %2571, i32 17
  store i32 0, ptr %2572, align 4, !tbaa !142
  %2573 = or disjoint i64 %.011441672, 2
  %2574 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2503, i64 %2573, i32 17
  store i32 0, ptr %2574, align 4, !tbaa !142
  %2575 = or disjoint i64 %.011441672, 3
  %2576 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2503, i64 %2575, i32 17
  store i32 0, ptr %2576, align 4, !tbaa !142
  %2577 = add nuw i64 %.011441672, 4
  %niter2503.next.3 = add i64 %niter2503, 4
  %niter2503.ncmp.3 = icmp eq i64 %niter2503.next.3, %unroll_iter2502
  br i1 %niter2503.ncmp.3, label %.preheader1351.lr.ph.unr-lcssa, label %2569, !llvm.loop !144

.preheader1351:                                   ; preds = %.preheader1351.lr.ph, %2716
  %.011431692 = phi i64 [ 0, %.preheader1351.lr.ph ], [ %2717, %2716 ]
  %.112051691 = phi i32 [ 0, %.preheader1351.lr.ph ], [ %2641, %2716 ]
  %.212081690 = phi i32 [ 0, %.preheader1351.lr.ph ], [ %spec.select1328, %2716 ]
  %.212121689 = phi i32 [ 0, %.preheader1351.lr.ph ], [ %.31213, %2716 ]
  %2578 = load ptr, ptr %2568, align 8, !tbaa !29
  %2579 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2578, i64 %.011431692, i32 3
  %2580 = load i32, ptr %2579, align 8, !tbaa !46
  %.not1760 = icmp eq i32 %2580, 0
  br i1 %.not1760, label %.preheader1350, label %.lr.ph1676

._crit_edge1693:                                  ; preds = %2716, %._crit_edge1671
  %.21212.lcssa = phi i32 [ 0, %._crit_edge1671 ], [ %.31213, %2716 ]
  %.21208.lcssa = phi i32 [ 0, %._crit_edge1671 ], [ %spec.select1328, %2716 ]
  %.11205.lcssa = phi i32 [ 0, %._crit_edge1671 ], [ %2641, %2716 ]
  %2581 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.62)
  %2582 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2581, i32 noundef %.11205.lcssa)
  %2583 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2582, ptr noundef nonnull @.str.63)
  %2584 = load i64, ptr %53, align 8, !tbaa !26
  %2585 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2583, i64 noundef %2584)
  %2586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2585, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2587 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.53)
  %2588 = sext i32 %.11205.lcssa to i64
  %2589 = load i64, ptr %53, align 8, !tbaa !26
  %2590 = udiv i64 %2588, %2589
  %2591 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2587, i64 noundef %2590)
  %2592 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2591, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2593 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.54)
  %2594 = load i32, ptr %2, align 4, !tbaa !32
  %2595 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2593, i32 noundef %2594)
  %2596 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2595, ptr noundef nonnull @.str.64)
  %2597 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2596, i32 noundef %.21208.lcssa)
  %2598 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2597, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2599 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.56)
  %2600 = load i32, ptr %3, align 4, !tbaa !32
  %2601 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2599, i32 noundef %2600)
  %2602 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2601, ptr noundef nonnull @.str.64)
  %2603 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2602, i32 noundef %.21212.lcssa)
  %2604 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2603, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2605 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.7)
  %2606 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2605, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2607 = load i64, ptr %53, align 8, !tbaa !26
  %.not1764 = icmp eq i64 %2607, 0
  br i1 %.not1764, label %.preheader, label %.lr.ph1699

.lr.ph1699:                                       ; preds = %._crit_edge1693
  %2608 = getelementptr inbounds i8, ptr %0, i64 448
  %2609 = load ptr, ptr %2608, align 8, !tbaa !29
  %xtraiter2505 = and i64 %2607, 3
  %2610 = icmp ult i64 %2607, 4
  br i1 %2610, label %.preheader.loopexit.unr-lcssa, label %.lr.ph1699.new

.lr.ph1699.new:                                   ; preds = %.lr.ph1699
  %unroll_iter2508 = and i64 %2607, -4
  br label %2724

.preheader1350:                                   ; preds = %2632, %.preheader1351
  %2611 = phi ptr [ %2578, %.preheader1351 ], [ %2634, %2632 ]
  %2612 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2611, i64 %.011431692
  %2613 = load i32, ptr %2612, align 8, !tbaa !34
  %.not1761 = icmp eq i32 %2613, 0
  br i1 %.not1761, label %._crit_edge1686, label %.lr.ph1685

.lr.ph1676:                                       ; preds = %.preheader1351, %2632
  %2614 = phi ptr [ %2634, %2632 ], [ %2578, %.preheader1351 ]
  %.011421675 = phi i64 [ %2633, %2632 ], [ 0, %.preheader1351 ]
  %2615 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2614, i64 %.011431692, i32 5
  %2616 = load ptr, ptr %2615, align 8, !tbaa !45
  %2617 = trunc i64 %.011421675 to i32
  %2618 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2616, i32 noundef %2617)
  %2619 = load i32, ptr %2618, align 4, !tbaa !32
  %2620 = icmp sgt i32 %2619, -1
  br i1 %2620, label %2621, label %2632

2621:                                             ; preds = %.lr.ph1676
  %2622 = load ptr, ptr %2568, align 8, !tbaa !29
  %2623 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2622, i64 %.011431692, i32 17
  %2624 = load i32, ptr %2623, align 4, !tbaa !142
  %2625 = add nsw i32 %2624, 1
  store i32 %2625, ptr %2623, align 4, !tbaa !142
  %2626 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2622, i64 %.011431692
  %2627 = getelementptr inbounds i8, ptr %2626, i64 120
  %2628 = getelementptr inbounds i8, ptr %2626, i64 24
  %2629 = load ptr, ptr %2628, align 8, !tbaa !45
  %2630 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2629, i32 noundef %2617)
  %2631 = load i32, ptr %2630, align 4, !tbaa !32
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %2627, i32 noundef %2631)
  br label %2632

2632:                                             ; preds = %.lr.ph1676, %2621
  %2633 = add nuw i64 %.011421675, 1
  %2634 = load ptr, ptr %2568, align 8, !tbaa !29
  %2635 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2634, i64 %.011431692, i32 3
  %2636 = load i32, ptr %2635, align 8, !tbaa !46
  %2637 = sext i32 %2636 to i64
  %2638 = icmp ult i64 %2633, %2637
  br i1 %2638, label %.lr.ph1676, label %.preheader1350, !llvm.loop !145

._crit_edge1686:                                  ; preds = %._crit_edge1683, %.preheader1350
  %.lcssa1398 = phi ptr [ %2611, %.preheader1350 ], [ %2668, %._crit_edge1683 ]
  %2639 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %.lcssa1398, i64 %.011431692, i32 17
  %2640 = load i32, ptr %2639, align 4, !tbaa !142
  %2641 = add nsw i32 %2640, %.112051691
  %2642 = load i32, ptr %2, align 4, !tbaa !32
  %2643 = icmp slt i32 %2640, %2642
  %2644 = trunc i64 %.011431692 to i32
  %spec.select1328 = select i1 %2643, i32 %2644, i32 %.212081690
  %2645 = load i32, ptr %3, align 4, !tbaa !32
  %2646 = icmp sgt i32 %2640, %2645
  %.31213 = select i1 %2646, i32 %2644, i32 %.212121689
  %2647 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 4 dereferenceable(4) %2639)
  %2648 = load i32, ptr %2647, align 4, !tbaa !32
  store i32 %2648, ptr %2, align 4, !tbaa !32
  %2649 = load ptr, ptr %2568, align 8, !tbaa !29
  %2650 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2649, i64 %.011431692, i32 17
  %2651 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %2650)
  %2652 = load i32, ptr %2651, align 4, !tbaa !32
  store i32 %2652, ptr %3, align 4, !tbaa !32
  %2653 = load ptr, ptr %2568, align 8, !tbaa !29
  %2654 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2653, i64 %.011431692, i32 17
  %2655 = load i32, ptr %2654, align 4, !tbaa !142
  %2656 = icmp slt i32 %2655, 3
  br i1 %2656, label %2707, label %2716

.lr.ph1685:                                       ; preds = %.preheader1350, %._crit_edge1683
  %2657 = phi ptr [ %2668, %._crit_edge1683 ], [ %2611, %.preheader1350 ]
  %.011411684 = phi i64 [ %2667, %._crit_edge1683 ], [ 0, %.preheader1350 ]
  %2658 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2657, i64 %.011431692, i32 2
  %2659 = load ptr, ptr %2658, align 8, !tbaa !30
  %2660 = trunc i64 %.011411684 to i32
  %2661 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2659, i32 noundef %2660)
  %2662 = load i32, ptr %2661, align 4, !tbaa !32
  %2663 = sext i32 %2662 to i64
  %2664 = load ptr, ptr %2184, align 8, !tbaa !14
  %2665 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2664, i64 %2663, i32 4
  %2666 = load i32, ptr %2665, align 8, !tbaa !15
  %.not1762 = icmp eq i32 %2666, 0
  br i1 %.not1762, label %._crit_edge1683, label %.lr.ph1682

._crit_edge1683:                                  ; preds = %.loopexit1349, %.lr.ph1685
  %2667 = add nuw i64 %.011411684, 1
  %2668 = load ptr, ptr %2568, align 8, !tbaa !29
  %2669 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2668, i64 %.011431692
  %2670 = load i32, ptr %2669, align 8, !tbaa !34
  %2671 = sext i32 %2670 to i64
  %2672 = icmp ult i64 %2667, %2671
  br i1 %2672, label %.lr.ph1685, label %._crit_edge1686, !llvm.loop !146

.lr.ph1682:                                       ; preds = %.lr.ph1685, %.loopexit1349
  %2673 = phi ptr [ %2702, %.loopexit1349 ], [ %2664, %.lr.ph1685 ]
  %.011401680 = phi i64 [ %2701, %.loopexit1349 ], [ 0, %.lr.ph1685 ]
  %2674 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2673, i64 %2663, i32 5
  %2675 = trunc i64 %.011401680 to i32
  %2676 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %2674, i32 noundef %2675)
  %2677 = load i32, ptr %2676, align 4, !tbaa !32
  %2678 = sext i32 %2677 to i64
  %2679 = icmp eq i64 %.011431692, %2678
  br i1 %2679, label %.loopexit1349, label %.preheader1348

.preheader1348:                                   ; preds = %.lr.ph1682
  %2680 = load ptr, ptr %2568, align 8, !tbaa !29
  %2681 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2680, i64 %.011431692, i32 17
  %2682 = load i32, ptr %2681, align 4, !tbaa !142
  %.not1763 = icmp eq i32 %2682, 0
  br i1 %.not1763, label %.critedge1330, label %.lr.ph1679

2683:                                             ; preds = %.lr.ph1679
  %2684 = add nuw i64 %.011391678, 1
  %2685 = load ptr, ptr %2568, align 8, !tbaa !29
  %2686 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2685, i64 %.011431692, i32 17
  %2687 = load i32, ptr %2686, align 4, !tbaa !142
  %2688 = sext i32 %2687 to i64
  %2689 = icmp ult i64 %2684, %2688
  br i1 %2689, label %.lr.ph1679, label %.critedge1330, !llvm.loop !147

.lr.ph1679:                                       ; preds = %.preheader1348, %2683
  %2690 = phi ptr [ %2685, %2683 ], [ %2680, %.preheader1348 ]
  %.011391678 = phi i64 [ %2684, %2683 ], [ 0, %.preheader1348 ]
  %2691 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2690, i64 %.011431692, i32 18
  %2692 = trunc i64 %.011391678 to i32
  %2693 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24) %2691, i32 noundef %2692)
  %2694 = load i32, ptr %2693, align 4, !tbaa !32
  %2695 = icmp eq i32 %2677, %2694
  br i1 %2695, label %.loopexit1349, label %2683

.critedge1330:                                    ; preds = %2683, %.preheader1348
  %2696 = phi i32 [ 0, %.preheader1348 ], [ %2687, %2683 ]
  %2697 = phi ptr [ %2680, %.preheader1348 ], [ %2685, %2683 ]
  %2698 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2697, i64 %.011431692, i32 17
  %2699 = add nsw i32 %2696, 1
  store i32 %2699, ptr %2698, align 4, !tbaa !142
  %2700 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2697, i64 %.011431692, i32 18
  call void @_ZN8Vector1DIiE6appendEi(ptr noundef nonnull align 8 dereferenceable(24) %2700, i32 noundef %2677)
  br label %.loopexit1349

.loopexit1349:                                    ; preds = %.lr.ph1679, %.critedge1330, %.lr.ph1682
  %2701 = add nuw i64 %.011401680, 1
  %2702 = load ptr, ptr %2184, align 8, !tbaa !14
  %2703 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %2702, i64 %2663, i32 4
  %2704 = load i32, ptr %2703, align 8, !tbaa !15
  %2705 = sext i32 %2704 to i64
  %2706 = icmp ult i64 %2701, %2705
  br i1 %2706, label %.lr.ph1682, label %._crit_edge1683, !llvm.loop !148

2707:                                             ; preds = %._crit_edge1686
  %2708 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.60)
  %2709 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %2708, i64 noundef %.011431692)
  %2710 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2709, ptr noundef nonnull @.str.61)
  %2711 = load ptr, ptr %2568, align 8, !tbaa !29
  %2712 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2711, i64 %.011431692, i32 17
  %2713 = load i32, ptr %2712, align 4, !tbaa !142
  %2714 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %2710, i32 noundef %2713)
  %2715 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2714, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %2716

2716:                                             ; preds = %._crit_edge1686, %2707
  %2717 = add nuw i64 %.011431692, 1
  %2718 = load i64, ptr %53, align 8, !tbaa !26
  %2719 = icmp ult i64 %2717, %2718
  br i1 %2719, label %.preheader1351, label %._crit_edge1693, !llvm.loop !149

.preheader.loopexit.unr-lcssa:                    ; preds = %2724, %.lr.ph1699
  %indvars.iv1904.unr = phi i64 [ 0, %.lr.ph1699 ], [ %indvars.iv.next1905.3, %2724 ]
  %lcmp.mod2507.not = icmp eq i64 %xtraiter2505, 0
  br i1 %lcmp.mod2507.not, label %.preheader, label %.epil.preheader2504

.epil.preheader2504:                              ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader2504
  %indvars.iv1904.epil = phi i64 [ %indvars.iv.next1905.epil, %.epil.preheader2504 ], [ %indvars.iv1904.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter2506 = phi i64 [ %epil.iter2506.next, %.epil.preheader2504 ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %2720 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2609, i64 %indvars.iv1904.epil, i32 16
  store i32 -1, ptr %2720, align 8, !tbaa !150
  %indvars.iv.next1905.epil = add nuw nsw i64 %indvars.iv1904.epil, 1
  %epil.iter2506.next = add i64 %epil.iter2506, 1
  %epil.iter2506.cmp.not = icmp eq i64 %epil.iter2506.next, %xtraiter2505
  br i1 %epil.iter2506.cmp.not, label %.preheader, label %.epil.preheader2504, !llvm.loop !151

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader2504, %._crit_edge1693
  %2721 = load i64, ptr %1207, align 8, !tbaa !70
  %.not1765 = icmp eq i64 %2721, 0
  br i1 %.not1765, label %._crit_edge1705, label %.lr.ph1704

.lr.ph1704:                                       ; preds = %.preheader
  %2722 = getelementptr inbounds i8, ptr %0, i64 480
  %2723 = getelementptr inbounds i8, ptr %0, i64 448
  br label %2729

2724:                                             ; preds = %2724, %.lr.ph1699.new
  %indvars.iv1904 = phi i64 [ 0, %.lr.ph1699.new ], [ %indvars.iv.next1905.3, %2724 ]
  %niter2509 = phi i64 [ 0, %.lr.ph1699.new ], [ %niter2509.next.3, %2724 ]
  %2725 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2609, i64 %indvars.iv1904, i32 16
  store i32 -1, ptr %2725, align 8, !tbaa !150
  %indvars.iv.next1905 = or disjoint i64 %indvars.iv1904, 1
  %2726 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2609, i64 %indvars.iv.next1905, i32 16
  store i32 -1, ptr %2726, align 8, !tbaa !150
  %indvars.iv.next1905.1 = or disjoint i64 %indvars.iv1904, 2
  %2727 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2609, i64 %indvars.iv.next1905.1, i32 16
  store i32 -1, ptr %2727, align 8, !tbaa !150
  %indvars.iv.next1905.2 = or disjoint i64 %indvars.iv1904, 3
  %2728 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2609, i64 %indvars.iv.next1905.2, i32 16
  store i32 -1, ptr %2728, align 8, !tbaa !150
  %indvars.iv.next1905.3 = add nuw nsw i64 %indvars.iv1904, 4
  %niter2509.next.3 = add i64 %niter2509, 4
  %niter2509.ncmp.3 = icmp eq i64 %niter2509.next.3, %unroll_iter2508
  br i1 %niter2509.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %2724, !llvm.loop !152

._crit_edge1705:                                  ; preds = %.loopexit, %.preheader
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #12
  ret void

2729:                                             ; preds = %.lr.ph1704, %.loopexit
  %indvars.iv1908 = phi i64 [ 0, %.lr.ph1704 ], [ %indvars.iv.next1909, %.loopexit ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #12
  %2730 = load ptr, ptr %2722, align 8, !tbaa !71
  %2731 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2730, i64 %indvars.iv1908
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %2731)
  invoke void @_Z4trimNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull %35)
          to label %2732 unwind label %2740

2732:                                             ; preds = %2729
  %2733 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.65)
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #12
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #12
  br i1 %2733, label %2734, label %.loopexit

2734:                                             ; preds = %2732
  %2735 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.66)
  %2736 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2735, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %2737 = load ptr, ptr %2722, align 8, !tbaa !71
  %2738 = getelementptr inbounds i8, ptr %2737, i64 48
  %2739 = load i64, ptr %2738, align 8, !tbaa !103
  %.not1766 = icmp eq i64 %2739, 0
  br i1 %.not1766, label %.loopexit, label %.lr.ph1702

2740:                                             ; preds = %2729
  %2741 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #12
  br label %2758

.lr.ph1702:                                       ; preds = %2734, %.lr.ph1702
  %2742 = phi ptr [ %2752, %.lr.ph1702 ], [ %2737, %2734 ]
  %.01700 = phi i64 [ %2750, %.lr.ph1702 ], [ 0, %2734 ]
  %2743 = load ptr, ptr %2723, align 8, !tbaa !29
  %2744 = getelementptr inbounds i8, ptr %2742, i64 104
  %2745 = load ptr, ptr %2744, align 8, !tbaa !107
  %2746 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2745, i32 noundef undef)
  %2747 = load i32, ptr %2746, align 4, !tbaa !32
  %2748 = sext i32 %2747 to i64
  %2749 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %2743, i64 %2748, i32 16
  store i32 1, ptr %2749, align 8, !tbaa !150
  %2750 = add nuw i64 %.01700, 1
  %2751 = load ptr, ptr %2722, align 8, !tbaa !71
  %2752 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %2751, i64 %2750
  %2753 = getelementptr inbounds i8, ptr %2752, i64 48
  %2754 = load i64, ptr %2753, align 8, !tbaa !103
  %2755 = icmp ult i64 %2750, %2754
  br i1 %2755, label %.lr.ph1702, label %.loopexit, !llvm.loop !153

.loopexit:                                        ; preds = %.lr.ph1702, %2734, %2732
  %indvars.iv.next1909 = add nuw nsw i64 %indvars.iv1908, 1
  %2756 = load i64, ptr %1207, align 8, !tbaa !70
  %2757 = icmp ugt i64 %2756, %indvars.iv.next1909
  br i1 %2757, label %2729, label %._crit_edge1705, !llvm.loop !154

2758:                                             ; preds = %.loopexit1390, %1922, %1924, %1926, %1928, %1930, %1932, %1350, %1352, %1354, %1227, %1256, %1277, %1306, %1186, %1188, %2740, %2564, %.loopexit1356, %2334, %461, %469
  %.pn1319.pn = phi { ptr, i32 } [ %462, %461 ], [ %470, %469 ], [ %778, %.loopexit1390 ], [ %2335, %2334 ], [ %2565, %2564 ], [ %2741, %2740 ], [ %2448, %.loopexit1356 ], [ %1189, %1188 ], [ %1187, %1186 ], [ %1278, %1277 ], [ %.pn1308, %1306 ], [ %1228, %1227 ], [ %.pn1306, %1256 ], [ %1355, %1354 ], [ %1353, %1352 ], [ %1351, %1350 ], [ %1933, %1932 ], [ %1931, %1930 ], [ %1929, %1928 ], [ %1927, %1926 ], [ %1925, %1924 ], [ %1923, %1922 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #12
  resume { ptr, i32 } %.pn1319.pn
}

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

declare noundef double @_Z8tri_areadddddd(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef) local_unnamed_addr #7

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

; 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: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #8

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIiEaSEi(ptr dead_on_unwind noalias writable sret(%class.Array2D) align 8, ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN8Vector1DIiEclEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13EulerSolver2D9edge_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9edge_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(120)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), double noundef) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #9

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZdvIdE7Array2DIT_ERKS2_RKS1_(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Array2DIdEaSERKS0_(ptr dead_on_unwind noalias writable sret(%class.Array2D.4) align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN13bracket_proxyI7Array2DIiEiEixEi(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #10

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #10

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN13EulerSolver2D9face_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9face_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(64)) unnamed_addr #10 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z4trimNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef) local_unnamed_addr #1

; 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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.sqrt.f64(double) #11

; 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>) #11

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { nobuiltin allocsize(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 = { nobuiltin 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 = { 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 = { noreturn 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 #9 = { 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 #10 = { 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 #11 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #12 = { nounwind }
attributes #13 = { noreturn nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin 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, !12, i64 408}
!6 = !{!"_ZTSN13EulerSolver2D10MainData2DE", !7, i64 0, !7, i64 32, !7, i64 64, !7, i64 96, !7, i64 128, !7, i64 160, !12, i64 192, !7, i64 200, !7, i64 232, !13, i64 264, !7, i64 272, !7, i64 304, !12, i64 336, !13, i64 344, !13, i64 352, !13, i64 360, !13, i64 368, !13, i64 376, !13, i64 384, !13, i64 392, !13, i64 400, !12, i64 408, !9, i64 416, !12, i64 424, !12, i64 432, !12, i64 440, !9, i64 448, !12, i64 456, !9, i64 464, !12, i64 472, !9, i64 480, !12, i64 488, !9, i64 496, !12, i64 504}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"double", !10, i64 0}
!14 = !{!6, !9, i64 416}
!15 = !{!16, !17, i64 32}
!16 = !{!"_ZTSN13EulerSolver2D9node_typeE", !13, i64 0, !13, i64 8, !17, i64 16, !9, i64 24, !17, i64 32, !18, i64 40, !13, i64 64, !17, i64 72, !17, i64 76, !9, i64 80, !13, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120, !9, i64 128, !9, i64 136, !9, i64 144, !9, i64 152, !9, i64 160, !9, i64 168, !9, i64 176, !9, i64 184, !9, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !9, i64 224, !9, i64 232, !9, i64 240}
!17 = !{!"int", !10, i64 0}
!18 = !{!"_ZTS8Vector1DIiE", !19, i64 0}
!19 = !{!"_ZTSSt6vectorIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = !{!6, !12, i64 456}
!26 = !{!6, !12, i64 440}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!6, !9, i64 448}
!30 = !{!31, !9, i64 8}
!31 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !17, i64 0, !9, i64 8, !17, i64 16, !9, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !9, i64 88, !13, i64 96, !13, i64 104, !17, i64 112, !17, i64 116, !18, i64 120, !13, i64 144, !9, i64 152, !9, i64 160, !17, i64 168}
!32 = !{!17, !17, i64 0}
!33 = !{!13, !13, i64 0}
!34 = !{!31, !17, i64 0}
!35 = !{!31, !13, i64 48}
!36 = !{!31, !13, i64 32}
!37 = !{!31, !13, i64 40}
!38 = distinct !{!38, !28}
!39 = !{!16, !13, i64 64}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !28}
!42 = !{!16, !13, i64 0}
!43 = !{!16, !13, i64 8}
!44 = distinct !{!44, !28}
!45 = !{!31, !9, i64 24}
!46 = !{!31, !17, i64 16}
!47 = distinct !{!47, !28}
!48 = distinct !{!48, !28}
!49 = distinct !{!49, !28, !50}
!50 = !{!"llvm.loop.peeled.count", i32 1}
!51 = distinct !{!51, !28}
!52 = distinct !{!52, !28}
!53 = !{!6, !9, i64 464}
!54 = distinct !{!54, !28}
!55 = !{!56, !17, i64 8}
!56 = !{!"_ZTSN13EulerSolver2D9edge_typeE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !57, i64 16, !13, i64 56, !57, i64 64, !13, i64 104, !17, i64 112, !17, i64 116}
!57 = !{!"_ZTS7Array2DIdE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !58, i64 24, !58, i64 25, !9, i64 32}
!58 = !{!"bool", !10, i64 0}
!59 = !{!56, !17, i64 12}
!60 = distinct !{!60, !28}
!61 = !{!56, !17, i64 0}
!62 = !{!56, !17, i64 4}
!63 = distinct !{!63, !28}
!64 = !{!56, !13, i64 56}
!65 = !{!56, !13, i64 104}
!66 = distinct !{!66, !28}
!67 = !{!16, !17, i64 16}
!68 = distinct !{!68, !24}
!69 = distinct !{!69, !28}
!70 = !{!6, !12, i64 472}
!71 = !{!6, !9, i64 480}
!72 = !{!16, !9, i64 24}
!73 = !{!74, !17, i64 12}
!74 = !{!"_ZTS7Array2DIiE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20, !58, i64 24, !58, i64 25, !9, i64 32}
!75 = !{!74, !9, i64 32}
!76 = distinct !{!76, !28}
!77 = distinct !{!77, !28}
!78 = distinct !{!78, !28}
!79 = !{!80, !12, i64 32}
!80 = !{!"_ZTSN13EulerSolver2D10bgrid_typeE", !7, i64 0, !12, i64 32, !9, i64 40, !12, i64 48, !9, i64 56, !9, i64 64, !9, i64 72, !9, i64 80, !9, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120}
!81 = !{!80, !9, i64 80}
!82 = !{!80, !9, i64 88}
!83 = !{!80, !9, i64 96}
!84 = distinct !{!84, !28}
!85 = distinct !{!85, !28}
!86 = distinct !{!86, !28}
!87 = !{!80, !9, i64 40}
!88 = distinct !{!88, !28}
!89 = distinct !{!89, !28}
!90 = distinct !{!90, !28}
!91 = distinct !{!91, !28}
!92 = distinct !{!92, !28}
!93 = !{!56, !17, i64 116}
!94 = distinct !{!94, !28}
!95 = distinct !{!95, !28}
!96 = !{!56, !17, i64 112}
!97 = distinct !{!97, !28}
!98 = !{!16, !17, i64 72}
!99 = !{!16, !17, i64 76}
!100 = distinct !{!100, !28}
!101 = distinct !{!101, !28}
!102 = distinct !{!102, !28}
!103 = !{!80, !12, i64 48}
!104 = !{!80, !9, i64 56}
!105 = !{!80, !9, i64 64}
!106 = !{!80, !9, i64 72}
!107 = !{!80, !9, i64 104}
!108 = !{!80, !9, i64 112}
!109 = !{!80, !9, i64 120}
!110 = distinct !{!110, !28}
!111 = distinct !{!111, !28}
!112 = distinct !{!112, !28}
!113 = distinct !{!113, !28}
!114 = distinct !{!114, !28}
!115 = distinct !{!115, !28}
!116 = distinct !{!116, !28}
!117 = distinct !{!117, !28}
!118 = distinct !{!118, !28}
!119 = distinct !{!119, !28}
!120 = distinct !{!120, !28}
!121 = distinct !{!121, !28}
!122 = distinct !{!122, !28}
!123 = distinct !{!123, !28}
!124 = !{!31, !9, i64 56}
!125 = distinct !{!125, !28}
!126 = !{!6, !12, i64 488}
!127 = !{!6, !9, i64 496}
!128 = distinct !{!128, !28}
!129 = distinct !{!129, !28}
!130 = distinct !{!130, !28}
!131 = distinct !{!131, !28}
!132 = distinct !{!132, !28}
!133 = distinct !{!133, !28}
!134 = !{!135, !17, i64 8}
!135 = !{!"_ZTSN13EulerSolver2D9face_typeE", !17, i64 0, !17, i64 4, !17, i64 8, !17, i64 12, !13, i64 16, !57, i64 24}
!136 = !{!135, !17, i64 12}
!137 = !{!135, !17, i64 0}
!138 = !{!135, !17, i64 4}
!139 = distinct !{!139, !28}
!140 = distinct !{!140, !28}
!141 = !{!135, !13, i64 16}
!142 = !{!31, !17, i64 116}
!143 = distinct !{!143, !24}
!144 = distinct !{!144, !28}
!145 = distinct !{!145, !28}
!146 = distinct !{!146, !28}
!147 = distinct !{!147, !28}
!148 = distinct !{!148, !28}
!149 = distinct !{!149, !28}
!150 = !{!31, !17, i64 112}
!151 = distinct !{!151, !24}
!152 = distinct !{!152, !28}
!153 = distinct !{!153, !28}
!154 = distinct !{!154, !28}


; Effective O3 passes: ADCEPass,AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass