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

; 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.std::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.0 }
%union.anon.0 = type { i32 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_istringstream" = type { %"class.std::basic_istream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"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::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D9read_gridENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr noundef nonnull align 8 dereferenceable(512) %0, ptr noundef %1, ptr noundef %2) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %"class.std::basic_ifstream", align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %16 = alloca i64, align 8
  %17 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %18 = alloca i64, align 8
  %19 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %30 = alloca i64, align 8
  %31 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %32 = alloca i64, align 8
  %33 = alloca i32, align 4
  %34 = alloca i64, align 8
  %35 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %36 = alloca i32, align 4
  %37 = alloca i64, align 8
  %38 = alloca %"class.std::basic_ifstream", align 8
  %39 = alloca i64, align 8
  %40 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %41 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %42 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  %43 = 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 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(32) %1)
  %45 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 520, ptr %11) #8
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %11)
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %11, ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef 8)
          to label %46 unwind label %143

46:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  %47 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %48 unwind label %147

48:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 384, ptr %15) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %15, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %49 unwind label %151

49:                                               ; preds = %48
  %50 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 21
  %51 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %15, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %52 unwind label %155

52:                                               ; preds = %49
  %53 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %54 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %51, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %55 unwind label %155

55:                                               ; preds = %52
  %56 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %57 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull align 8 dereferenceable(8) %56)
          to label %58 unwind label %155

58:                                               ; preds = %55
  %59 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.1)
          to label %60 unwind label %155

60:                                               ; preds = %58
  %61 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef @.str.2)
          to label %62 unwind label %155

62:                                               ; preds = %60
  %63 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 21
  %64 = load i64, ptr %63, align 8, !tbaa !9
  %65 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %61, i64 noundef %64)
          to label %66 unwind label %155

66:                                               ; preds = %62
  %67 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef @.str.3)
          to label %68 unwind label %155

68:                                               ; preds = %66
  %69 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %70 = load i64, ptr %69, align 8, !tbaa !15
  %71 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %67, i64 noundef %70)
          to label %72 unwind label %155

72:                                               ; preds = %68
  %73 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef @.str.4)
          to label %74 unwind label %155

74:                                               ; preds = %72
  %75 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %76 = load i64, ptr %75, align 8, !tbaa !16
  %77 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %73, i64 noundef %76)
          to label %78 unwind label %155

78:                                               ; preds = %74
  %79 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %80 unwind label %155

80:                                               ; preds = %78
  %81 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %82 = load i64, ptr %81, align 8, !tbaa !15
  %83 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %84 = load i64, ptr %83, align 8, !tbaa !16
  %85 = add i64 %82, %84
  %86 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 25
  store i64 %85, ptr %86, align 8, !tbaa !17
  %87 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 21
  %88 = load i64, ptr %87, align 8, !tbaa !9
  %89 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %88, i64 248)
  %90 = extractvalue { i64, i1 } %89, 1
  %91 = extractvalue { i64, i1 } %89, 0
  %92 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %91, i64 8)
  %93 = extractvalue { i64, i1 } %92, 1
  %94 = or i1 %90, %93
  %95 = extractvalue { i64, i1 } %92, 0
  %96 = select i1 %94, i64 -1, i64 %95
  %97 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %96) #9
          to label %98 unwind label %155

98:                                               ; preds = %80
  store i64 %88, ptr %97, align 16
  %99 = getelementptr inbounds i8, ptr %97, i64 8
  %100 = icmp eq i64 %88, 0
  br i1 %100, label %108, label %101

101:                                              ; preds = %98
  %102 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %99, i64 %88
  br label %103

103:                                              ; preds = %105, %101
  %104 = phi ptr [ %99, %101 ], [ %106, %105 ]
  invoke void @_ZN13EulerSolver2D9node_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(248) %104)
          to label %105 unwind label %159

105:                                              ; preds = %103
  %106 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %104, i64 1
  %107 = icmp eq ptr %106, %102
  br i1 %107, label %108, label %103

108:                                              ; preds = %105, %98
  %109 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 22
  store ptr %99, ptr %109, align 8, !tbaa !18
  %110 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 25
  %111 = load i64, ptr %110, align 8, !tbaa !17
  %112 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %111, i64 176)
  %113 = extractvalue { i64, i1 } %112, 1
  %114 = extractvalue { i64, i1 } %112, 0
  %115 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %114, i64 8)
  %116 = extractvalue { i64, i1 } %115, 1
  %117 = or i1 %113, %116
  %118 = extractvalue { i64, i1 } %115, 0
  %119 = select i1 %117, i64 -1, i64 %118
  %120 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %119) #9
          to label %121 unwind label %155

121:                                              ; preds = %108
  store i64 %111, ptr %120, align 16
  %122 = getelementptr inbounds i8, ptr %120, i64 8
  %123 = icmp eq i64 %111, 0
  br i1 %123, label %131, label %124

124:                                              ; preds = %121
  %125 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %122, i64 %111
  br label %126

126:                                              ; preds = %128, %124
  %127 = phi ptr [ %122, %124 ], [ %129, %128 ]
  invoke void @_ZN13EulerSolver2D8elm_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %127)
          to label %128 unwind label %169

128:                                              ; preds = %126
  %129 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %127, i64 1
  %130 = icmp eq ptr %129, %125
  br i1 %130, label %131, label %126

131:                                              ; preds = %128, %121
  %132 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  store ptr %122, ptr %132, align 8, !tbaa !19
  %133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
          to label %134 unwind label %155

134:                                              ; preds = %131
  %135 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %133, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %136 unwind label %155

136:                                              ; preds = %134
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  store i64 0, ptr %16, align 8, !tbaa !20
  br label %137

137:                                              ; preds = %197, %136
  %138 = load i64, ptr %16, align 8, !tbaa !20
  %139 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 21
  %140 = load i64, ptr %139, align 8, !tbaa !9
  %141 = icmp ult i64 %138, %140
  br i1 %141, label %179, label %142

142:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %214

143:                                              ; preds = %3
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %12, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %13, align 4
  br label %817

147:                                              ; preds = %46
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %12, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %13, align 4
  br label %816

151:                                              ; preds = %48
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %12, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %13, align 4
  br label %815

155:                                              ; preds = %471, %469, %465, %463, %461, %457, %455, %453, %449, %447, %445, %441, %439, %437, %435, %433, %431, %428, %426, %134, %131, %108, %80, %78, %74, %72, %68, %66, %62, %60, %58, %55, %52, %49
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %12, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %13, align 4
  br label %814

159:                                              ; preds = %103
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %12, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %13, align 4
  %163 = icmp eq ptr %99, %104
  br i1 %163, label %168, label %164

164:                                              ; preds = %164, %159
  %165 = phi ptr [ %104, %159 ], [ %166, %164 ]
  %166 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %165, i64 -1
  call void @_ZN13EulerSolver2D9node_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(248) %166) #8
  %167 = icmp eq ptr %166, %99
  br i1 %167, label %168, label %164

168:                                              ; preds = %164, %159
  call void @_ZdaPvm(ptr noundef %97, i64 noundef %96) #10
  br label %814

169:                                              ; preds = %126
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %12, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %13, align 4
  %173 = icmp eq ptr %122, %127
  br i1 %173, label %178, label %174

174:                                              ; preds = %174, %169
  %175 = phi ptr [ %127, %169 ], [ %176, %174 ]
  %176 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %175, i64 -1
  call void @_ZN13EulerSolver2D8elm_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %176) #8
  %177 = icmp eq ptr %176, %122
  br i1 %177, label %178, label %174

178:                                              ; preds = %174, %169
  call void @_ZdaPvm(ptr noundef %120, i64 noundef %119) #10
  br label %814

179:                                              ; preds = %137
  %180 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %181 unwind label %200

181:                                              ; preds = %179
  call void @llvm.lifetime.start.p0(i64 384, ptr %17) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %17, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %182 unwind label %204

182:                                              ; preds = %181
  %183 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 22
  %184 = load ptr, ptr %183, align 8, !tbaa !18
  %185 = load i64, ptr %16, align 8, !tbaa !20
  %186 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %184, i64 %185
  %187 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %186, i32 0, i32 0
  %188 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERd(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 8 dereferenceable(8) %187)
          to label %189 unwind label %208

189:                                              ; preds = %182
  %190 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 22
  %191 = load ptr, ptr %190, align 8, !tbaa !18
  %192 = load i64, ptr %16, align 8, !tbaa !20
  %193 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %191, i64 %192
  %194 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %193, i32 0, i32 1
  %195 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERd(ptr noundef nonnull align 8 dereferenceable(16) %188, ptr noundef nonnull align 8 dereferenceable(8) %194)
          to label %196 unwind label %208

196:                                              ; preds = %189
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %17) #8
  br label %197

197:                                              ; preds = %196
  %198 = load i64, ptr %16, align 8, !tbaa !20
  %199 = add i64 %198, 1
  store i64 %199, ptr %16, align 8, !tbaa !20
  br label %137, !llvm.loop !21

200:                                              ; preds = %179
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %12, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %13, align 4
  br label %213

204:                                              ; preds = %181
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %12, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %13, align 4
  br label %212

208:                                              ; preds = %189, %182
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %12, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %13, align 4
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %17) #8
  br label %212

212:                                              ; preds = %208, %204
  call void @llvm.lifetime.end.p0(i64 384, ptr %17) #8
  br label %213

213:                                              ; preds = %212, %200
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %814

214:                                              ; preds = %142
  %215 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %216 = load i64, ptr %215, align 8, !tbaa !15
  %217 = icmp ugt i64 %216, 0
  br i1 %217, label %218, label %305

218:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store i64 0, ptr %18, align 8, !tbaa !20
  br label %219

219:                                              ; preds = %278, %218
  %220 = load i64, ptr %18, align 8, !tbaa !20
  %221 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %222 = load i64, ptr %221, align 8, !tbaa !15
  %223 = icmp ult i64 %220, %222
  br i1 %223, label %225, label %224

224:                                              ; preds = %219
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %304

225:                                              ; preds = %219
  %226 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %227 unwind label %281

227:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 384, ptr %19) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %19, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %228 unwind label %285

228:                                              ; preds = %227
  %229 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %230 = load ptr, ptr %229, align 8, !tbaa !19
  %231 = load i64, ptr %18, align 8, !tbaa !20
  %232 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %230, i64 %231
  %233 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %232, i32 0, i32 0
  store i32 3, ptr %233, align 8, !tbaa !23
  %234 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #9
          to label %235 unwind label %289

235:                                              ; preds = %228
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %234, i32 noundef 3, i32 noundef 1)
          to label %236 unwind label %293

236:                                              ; preds = %235
  %237 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %238 = load ptr, ptr %237, align 8, !tbaa !19
  %239 = load i64, ptr %18, align 8, !tbaa !20
  %240 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %238, i64 %239
  %241 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %240, i32 0, i32 2
  store ptr %234, ptr %241, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  %242 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %243 unwind label %297

243:                                              ; preds = %236
  %244 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %242, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %245 unwind label %297

245:                                              ; preds = %243
  %246 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %244, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %247 unwind label %297

247:                                              ; preds = %245
  %248 = load i32, ptr %20, align 4, !tbaa !32
  %249 = sub nsw i32 %248, 1
  %250 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %251 = load ptr, ptr %250, align 8, !tbaa !19
  %252 = load i64, ptr %18, align 8, !tbaa !20
  %253 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %251, i64 %252
  %254 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %253, i32 0, i32 2
  %255 = load ptr, ptr %254, align 8, !tbaa !31
  %256 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %255, i32 noundef 0)
          to label %257 unwind label %297

257:                                              ; preds = %247
  store i32 %249, ptr %256, align 4, !tbaa !32
  %258 = load i32, ptr %21, align 4, !tbaa !32
  %259 = sub nsw i32 %258, 1
  %260 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %261 = load ptr, ptr %260, align 8, !tbaa !19
  %262 = load i64, ptr %18, align 8, !tbaa !20
  %263 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %261, i64 %262
  %264 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %263, i32 0, i32 2
  %265 = load ptr, ptr %264, align 8, !tbaa !31
  %266 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %265, i32 noundef 1)
          to label %267 unwind label %297

267:                                              ; preds = %257
  store i32 %259, ptr %266, align 4, !tbaa !32
  %268 = load i32, ptr %22, align 4, !tbaa !32
  %269 = sub nsw i32 %268, 1
  %270 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %271 = load ptr, ptr %270, align 8, !tbaa !19
  %272 = load i64, ptr %18, align 8, !tbaa !20
  %273 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %271, i64 %272
  %274 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %273, i32 0, i32 2
  %275 = load ptr, ptr %274, align 8, !tbaa !31
  %276 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %275, i32 noundef 2)
          to label %277 unwind label %297

277:                                              ; preds = %267
  store i32 %269, ptr %276, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %19) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %19) #8
  br label %278

278:                                              ; preds = %277
  %279 = load i64, ptr %18, align 8, !tbaa !20
  %280 = add i64 %279, 1
  store i64 %280, ptr %18, align 8, !tbaa !20
  br label %219, !llvm.loop !33

281:                                              ; preds = %225
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %12, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %13, align 4
  br label %303

285:                                              ; preds = %227
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %12, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %13, align 4
  br label %302

289:                                              ; preds = %228
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  store ptr %291, ptr %12, align 8
  %292 = extractvalue { ptr, i32 } %290, 1
  store i32 %292, ptr %13, align 4
  br label %301

293:                                              ; preds = %235
  %294 = landingpad { ptr, i32 }
          cleanup
  %295 = extractvalue { ptr, i32 } %294, 0
  store ptr %295, ptr %12, align 8
  %296 = extractvalue { ptr, i32 } %294, 1
  store i32 %296, ptr %13, align 4
  call void @_ZdlPvm(ptr noundef %234, i64 noundef 40) #10
  br label %301

297:                                              ; preds = %267, %257, %247, %245, %243, %236
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %12, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %301

301:                                              ; preds = %297, %293, %289
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %19) #8
  br label %302

302:                                              ; preds = %301, %285
  call void @llvm.lifetime.end.p0(i64 384, ptr %19) #8
  br label %303

303:                                              ; preds = %302, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %814

304:                                              ; preds = %224
  br label %305

305:                                              ; preds = %304, %214
  %306 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %307 = load i64, ptr %306, align 8, !tbaa !16
  %308 = icmp ugt i64 %307, 0
  br i1 %308, label %309, label %426

309:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store i64 0, ptr %23, align 8, !tbaa !20
  br label %310

310:                                              ; preds = %399, %309
  %311 = load i64, ptr %23, align 8, !tbaa !20
  %312 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %313 = load i64, ptr %312, align 8, !tbaa !16
  %314 = icmp ult i64 %311, %313
  br i1 %314, label %316, label %315

315:                                              ; preds = %310
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %425

316:                                              ; preds = %310
  %317 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %318 unwind label %402

318:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 384, ptr %24) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %24, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %319 unwind label %406

319:                                              ; preds = %318
  %320 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %321 = load ptr, ptr %320, align 8, !tbaa !19
  %322 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %323 = load i64, ptr %322, align 8, !tbaa !15
  %324 = load i64, ptr %23, align 8, !tbaa !20
  %325 = add i64 %323, %324
  %326 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %321, i64 %325
  %327 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %326, i32 0, i32 0
  store i32 4, ptr %327, align 8, !tbaa !23
  %328 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #9
          to label %329 unwind label %410

329:                                              ; preds = %319
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %328, i32 noundef 4, i32 noundef 1)
          to label %330 unwind label %414

330:                                              ; preds = %329
  %331 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %332 = load ptr, ptr %331, align 8, !tbaa !19
  %333 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %334 = load i64, ptr %333, align 8, !tbaa !15
  %335 = load i64, ptr %23, align 8, !tbaa !20
  %336 = add i64 %334, %335
  %337 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %332, i64 %336
  %338 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %337, i32 0, i32 2
  store ptr %328, ptr %338, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %339 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %24, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %340 unwind label %418

340:                                              ; preds = %330
  %341 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %339, ptr noundef nonnull align 4 dereferenceable(4) %26)
          to label %342 unwind label %418

342:                                              ; preds = %340
  %343 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %341, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %344 unwind label %418

344:                                              ; preds = %342
  %345 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %343, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %346 unwind label %418

346:                                              ; preds = %344
  %347 = load i32, ptr %25, align 4, !tbaa !32
  %348 = sub nsw i32 %347, 1
  %349 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %350 = load ptr, ptr %349, align 8, !tbaa !19
  %351 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %352 = load i64, ptr %351, align 8, !tbaa !15
  %353 = load i64, ptr %23, align 8, !tbaa !20
  %354 = add i64 %352, %353
  %355 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %350, i64 %354
  %356 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %355, i32 0, i32 2
  %357 = load ptr, ptr %356, align 8, !tbaa !31
  %358 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %357, i32 noundef 0)
          to label %359 unwind label %418

359:                                              ; preds = %346
  store i32 %348, ptr %358, align 4, !tbaa !32
  %360 = load i32, ptr %26, align 4, !tbaa !32
  %361 = sub nsw i32 %360, 1
  %362 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %363 = load ptr, ptr %362, align 8, !tbaa !19
  %364 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %365 = load i64, ptr %364, align 8, !tbaa !15
  %366 = load i64, ptr %23, align 8, !tbaa !20
  %367 = add i64 %365, %366
  %368 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %363, i64 %367
  %369 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %368, i32 0, i32 2
  %370 = load ptr, ptr %369, align 8, !tbaa !31
  %371 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %370, i32 noundef 1)
          to label %372 unwind label %418

372:                                              ; preds = %359
  store i32 %361, ptr %371, align 4, !tbaa !32
  %373 = load i32, ptr %27, align 4, !tbaa !32
  %374 = sub nsw i32 %373, 1
  %375 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %376 = load ptr, ptr %375, align 8, !tbaa !19
  %377 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %378 = load i64, ptr %377, align 8, !tbaa !15
  %379 = load i64, ptr %23, align 8, !tbaa !20
  %380 = add i64 %378, %379
  %381 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %376, i64 %380
  %382 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %381, i32 0, i32 2
  %383 = load ptr, ptr %382, align 8, !tbaa !31
  %384 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %383, i32 noundef 2)
          to label %385 unwind label %418

385:                                              ; preds = %372
  store i32 %374, ptr %384, align 4, !tbaa !32
  %386 = load i32, ptr %28, align 4, !tbaa !32
  %387 = sub nsw i32 %386, 1
  %388 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 26
  %389 = load ptr, ptr %388, align 8, !tbaa !19
  %390 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %391 = load i64, ptr %390, align 8, !tbaa !15
  %392 = load i64, ptr %23, align 8, !tbaa !20
  %393 = add i64 %391, %392
  %394 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %389, i64 %393
  %395 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %394, i32 0, i32 2
  %396 = load ptr, ptr %395, align 8, !tbaa !31
  %397 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %396, i32 noundef 3)
          to label %398 unwind label %418

398:                                              ; preds = %385
  store i32 %387, ptr %397, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %24) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %24) #8
  br label %399

399:                                              ; preds = %398
  %400 = load i64, ptr %23, align 8, !tbaa !20
  %401 = add i64 %400, 1
  store i64 %401, ptr %23, align 8, !tbaa !20
  br label %310, !llvm.loop !34

402:                                              ; preds = %316
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %12, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %13, align 4
  br label %424

406:                                              ; preds = %318
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %12, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %13, align 4
  br label %423

410:                                              ; preds = %319
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %12, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %13, align 4
  br label %422

414:                                              ; preds = %329
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %12, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %13, align 4
  call void @_ZdlPvm(ptr noundef %328, i64 noundef 40) #10
  br label %422

418:                                              ; preds = %385, %372, %359, %346, %344, %342, %340, %330
  %419 = landingpad { ptr, i32 }
          cleanup
  %420 = extractvalue { ptr, i32 } %419, 0
  store ptr %420, ptr %12, align 8
  %421 = extractvalue { ptr, i32 } %419, 1
  store i32 %421, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %422

422:                                              ; preds = %418, %414, %410
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %24) #8
  br label %423

423:                                              ; preds = %422, %406
  call void @llvm.lifetime.end.p0(i64 384, ptr %24) #8
  br label %424

424:                                              ; preds = %423, %402
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %814

425:                                              ; preds = %315
  br label %431

426:                                              ; preds = %305
  %427 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.6)
          to label %428 unwind label %155

428:                                              ; preds = %426
  %429 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %427, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %430 unwind label %155

430:                                              ; preds = %428
  br label %431

431:                                              ; preds = %430, %425
  %432 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.7)
          to label %433 unwind label %155

433:                                              ; preds = %431
  %434 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %432, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %435 unwind label %155

435:                                              ; preds = %433
  %436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.8)
          to label %437 unwind label %155

437:                                              ; preds = %435
  %438 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %436, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %439 unwind label %155

439:                                              ; preds = %437
  %440 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.9)
          to label %441 unwind label %155

441:                                              ; preds = %439
  %442 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 21
  %443 = load i64, ptr %442, align 8, !tbaa !9
  %444 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %440, i64 noundef %443)
          to label %445 unwind label %155

445:                                              ; preds = %441
  %446 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %444, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %447 unwind label %155

447:                                              ; preds = %445
  %448 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.10)
          to label %449 unwind label %155

449:                                              ; preds = %447
  %450 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 23
  %451 = load i64, ptr %450, align 8, !tbaa !15
  %452 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %448, i64 noundef %451)
          to label %453 unwind label %155

453:                                              ; preds = %449
  %454 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %452, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %455 unwind label %155

455:                                              ; preds = %453
  %456 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.11)
          to label %457 unwind label %155

457:                                              ; preds = %455
  %458 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 24
  %459 = load i64, ptr %458, align 8, !tbaa !16
  %460 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %456, i64 noundef %459)
          to label %461 unwind label %155

461:                                              ; preds = %457
  %462 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %460, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %463 unwind label %155

463:                                              ; preds = %461
  %464 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
          to label %465 unwind label %155

465:                                              ; preds = %463
  %466 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 25
  %467 = load i64, ptr %466, align 8, !tbaa !17
  %468 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %464, i64 noundef %467)
          to label %469 unwind label %155

469:                                              ; preds = %465
  %470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %468, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %471 unwind label %155

471:                                              ; preds = %469
  %472 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %473 unwind label %155

473:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 384, ptr %29) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %29, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %474 unwind label %517

474:                                              ; preds = %473
  %475 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %476 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(8) %475)
          to label %477 unwind label %521

477:                                              ; preds = %474
  %478 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %479 = load i64, ptr %478, align 8, !tbaa !35
  %480 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %479, i64 128)
  %481 = extractvalue { i64, i1 } %480, 1
  %482 = extractvalue { i64, i1 } %480, 0
  %483 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %482, i64 8)
  %484 = extractvalue { i64, i1 } %483, 1
  %485 = or i1 %481, %484
  %486 = extractvalue { i64, i1 } %483, 0
  %487 = select i1 %485, i64 -1, i64 %486
  %488 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %487) #9
          to label %489 unwind label %521

489:                                              ; preds = %477
  store i64 %479, ptr %488, align 16
  %490 = getelementptr inbounds i8, ptr %488, i64 8
  %491 = icmp eq i64 %479, 0
  br i1 %491, label %499, label %492

492:                                              ; preds = %489
  %493 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %490, i64 %479
  br label %494

494:                                              ; preds = %496, %492
  %495 = phi ptr [ %490, %492 ], [ %497, %496 ]
  invoke void @_ZN13EulerSolver2D10bgrid_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(128) %495)
          to label %496 unwind label %525

496:                                              ; preds = %494
  %497 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %495, i64 1
  %498 = icmp eq ptr %497, %493
  br i1 %498, label %499, label %494

499:                                              ; preds = %496, %489
  %500 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  store ptr %490, ptr %500, align 8, !tbaa !36
  %501 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
          to label %502 unwind label %521

502:                                              ; preds = %499
  %503 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %504 = load i64, ptr %503, align 8, !tbaa !35
  %505 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %501, i64 noundef %504)
          to label %506 unwind label %521

506:                                              ; preds = %502
  %507 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %505, ptr noundef @.str.14)
          to label %508 unwind label %521

508:                                              ; preds = %506
  %509 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %507, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %510 unwind label %521

510:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  store i64 0, ptr %30, align 8, !tbaa !20
  br label %511

511:                                              ; preds = %561, %510
  %512 = load i64, ptr %30, align 8, !tbaa !20
  %513 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %514 = load i64, ptr %513, align 8, !tbaa !35
  %515 = icmp ult i64 %512, %514
  br i1 %515, label %535, label %516

516:                                              ; preds = %511
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %583

517:                                              ; preds = %473
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %12, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %13, align 4
  br label %813

521:                                              ; preds = %718, %716, %714, %712, %710, %708, %706, %705, %660, %656, %654, %652, %650, %648, %646, %587, %585, %583, %508, %506, %502, %499, %477, %474
  %522 = landingpad { ptr, i32 }
          cleanup
  %523 = extractvalue { ptr, i32 } %522, 0
  store ptr %523, ptr %12, align 8
  %524 = extractvalue { ptr, i32 } %522, 1
  store i32 %524, ptr %13, align 4
  br label %812

525:                                              ; preds = %494
  %526 = landingpad { ptr, i32 }
          cleanup
  %527 = extractvalue { ptr, i32 } %526, 0
  store ptr %527, ptr %12, align 8
  %528 = extractvalue { ptr, i32 } %526, 1
  store i32 %528, ptr %13, align 4
  %529 = icmp eq ptr %490, %495
  br i1 %529, label %534, label %530

530:                                              ; preds = %530, %525
  %531 = phi ptr [ %495, %525 ], [ %532, %530 ]
  %532 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %531, i64 -1
  call void @_ZN13EulerSolver2D10bgrid_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %532) #8
  %533 = icmp eq ptr %532, %490
  br i1 %533, label %534, label %530

534:                                              ; preds = %530, %525
  call void @_ZdaPvm(ptr noundef %488, i64 noundef %487) #10
  br label %812

535:                                              ; preds = %511
  %536 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %537 unwind label %564

537:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 384, ptr %31) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %31, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %538 unwind label %568

538:                                              ; preds = %537
  %539 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %540 = load ptr, ptr %539, align 8, !tbaa !36
  %541 = load i64, ptr %30, align 8, !tbaa !20
  %542 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %540, i64 %541
  %543 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %542, i32 0, i32 1
  %544 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef nonnull align 8 dereferenceable(8) %543)
          to label %545 unwind label %572

545:                                              ; preds = %538
  %546 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #9
          to label %547 unwind label %572

547:                                              ; preds = %545
  %548 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %549 = load ptr, ptr %548, align 8, !tbaa !36
  %550 = load i64, ptr %30, align 8, !tbaa !20
  %551 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %549, i64 %550
  %552 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %551, i32 0, i32 1
  %553 = load i64, ptr %552, align 8, !tbaa !37
  %554 = trunc i64 %553 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %546, i32 noundef %554, i32 noundef 1)
          to label %555 unwind label %576

555:                                              ; preds = %547
  %556 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %557 = load ptr, ptr %556, align 8, !tbaa !36
  %558 = load i64, ptr %30, align 8, !tbaa !20
  %559 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %557, i64 %558
  %560 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %559, i32 0, i32 2
  store ptr %546, ptr %560, align 8, !tbaa !39
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %31) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %31) #8
  br label %561

561:                                              ; preds = %555
  %562 = load i64, ptr %30, align 8, !tbaa !20
  %563 = add i64 %562, 1
  store i64 %563, ptr %30, align 8, !tbaa !20
  br label %511, !llvm.loop !40

564:                                              ; preds = %535
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %12, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %13, align 4
  br label %582

568:                                              ; preds = %537
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %12, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %13, align 4
  br label %581

572:                                              ; preds = %545, %538
  %573 = landingpad { ptr, i32 }
          cleanup
  %574 = extractvalue { ptr, i32 } %573, 0
  store ptr %574, ptr %12, align 8
  %575 = extractvalue { ptr, i32 } %573, 1
  store i32 %575, ptr %13, align 4
  br label %580

576:                                              ; preds = %547
  %577 = landingpad { ptr, i32 }
          cleanup
  %578 = extractvalue { ptr, i32 } %577, 0
  store ptr %578, ptr %12, align 8
  %579 = extractvalue { ptr, i32 } %577, 1
  store i32 %579, ptr %13, align 4
  call void @_ZdlPvm(ptr noundef %546, i64 noundef 40) #10
  br label %580

580:                                              ; preds = %576, %572
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %31) #8
  br label %581

581:                                              ; preds = %580, %568
  call void @llvm.lifetime.end.p0(i64 384, ptr %31) #8
  br label %582

582:                                              ; preds = %581, %564
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %812

583:                                              ; preds = %516
  %584 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.15)
          to label %585 unwind label %521

585:                                              ; preds = %583
  %586 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %584, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %587 unwind label %521

587:                                              ; preds = %585
  %588 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %589 unwind label %521

589:                                              ; preds = %587
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store i64 0, ptr %32, align 8, !tbaa !20
  br label %590

590:                                              ; preds = %643, %589
  %591 = load i64, ptr %32, align 8, !tbaa !20
  %592 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %593 = load i64, ptr %592, align 8, !tbaa !35
  %594 = icmp ult i64 %591, %593
  br i1 %594, label %596, label %595

595:                                              ; preds = %590
  store i32 14, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %646

596:                                              ; preds = %590
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  store i64 0, ptr %34, align 8, !tbaa !20
  br label %597

597:                                              ; preds = %625, %596
  %598 = load i64, ptr %34, align 8, !tbaa !20
  %599 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %600 = load ptr, ptr %599, align 8, !tbaa !36
  %601 = load i64, ptr %32, align 8, !tbaa !20
  %602 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %600, i64 %601
  %603 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %602, i32 0, i32 1
  %604 = load i64, ptr %603, align 8, !tbaa !37
  %605 = icmp ult i64 %598, %604
  br i1 %605, label %607, label %606

606:                                              ; preds = %597
  store i32 17, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %642

607:                                              ; preds = %597
  %608 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %11, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %609 unwind label %628

609:                                              ; preds = %607
  call void @llvm.lifetime.start.p0(i64 384, ptr %35) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %35, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %610 unwind label %632

610:                                              ; preds = %609
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  %611 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %612 unwind label %636

612:                                              ; preds = %610
  %613 = load i32, ptr %36, align 4, !tbaa !32
  %614 = sub nsw i32 %613, 1
  %615 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %616 = load ptr, ptr %615, align 8, !tbaa !36
  %617 = load i64, ptr %32, align 8, !tbaa !20
  %618 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %616, i64 %617
  %619 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %618, i32 0, i32 2
  %620 = load ptr, ptr %619, align 8, !tbaa !39
  %621 = load i64, ptr %34, align 8, !tbaa !20
  %622 = trunc i64 %621 to i32
  %623 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %620, i32 noundef %622, i32 noundef 0)
          to label %624 unwind label %636

624:                                              ; preds = %612
  store i32 %614, ptr %623, align 4, !tbaa !32
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %35) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %35) #8
  br label %625

625:                                              ; preds = %624
  %626 = load i64, ptr %34, align 8, !tbaa !20
  %627 = add i64 %626, 1
  store i64 %627, ptr %34, align 8, !tbaa !20
  br label %597, !llvm.loop !41

628:                                              ; preds = %607
  %629 = landingpad { ptr, i32 }
          cleanup
  %630 = extractvalue { ptr, i32 } %629, 0
  store ptr %630, ptr %12, align 8
  %631 = extractvalue { ptr, i32 } %629, 1
  store i32 %631, ptr %13, align 4
  br label %641

632:                                              ; preds = %609
  %633 = landingpad { ptr, i32 }
          cleanup
  %634 = extractvalue { ptr, i32 } %633, 0
  store ptr %634, ptr %12, align 8
  %635 = extractvalue { ptr, i32 } %633, 1
  store i32 %635, ptr %13, align 4
  br label %640

636:                                              ; preds = %612, %610
  %637 = landingpad { ptr, i32 }
          cleanup
  %638 = extractvalue { ptr, i32 } %637, 0
  store ptr %638, ptr %12, align 8
  %639 = extractvalue { ptr, i32 } %637, 1
  store i32 %639, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %35) #8
  br label %640

640:                                              ; preds = %636, %632
  call void @llvm.lifetime.end.p0(i64 384, ptr %35) #8
  br label %641

641:                                              ; preds = %640, %628
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  br label %812

642:                                              ; preds = %606
  br label %643

643:                                              ; preds = %642
  %644 = load i64, ptr %32, align 8, !tbaa !20
  %645 = add i64 %644, 1
  store i64 %645, ptr %32, align 8, !tbaa !20
  br label %590, !llvm.loop !42

646:                                              ; preds = %595
  %647 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.16)
          to label %648 unwind label %521

648:                                              ; preds = %646
  %649 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %647, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %650 unwind label %521

650:                                              ; preds = %648
  %651 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.17)
          to label %652 unwind label %521

652:                                              ; preds = %650
  %653 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %651, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %654 unwind label %521

654:                                              ; preds = %652
  %655 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.18)
          to label %656 unwind label %521

656:                                              ; preds = %654
  %657 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %658 = load i64, ptr %657, align 8, !tbaa !35
  %659 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %655, i64 noundef %658)
          to label %660 unwind label %521

660:                                              ; preds = %656
  %661 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %659, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %662 unwind label %521

662:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  store i64 0, ptr %37, align 8, !tbaa !20
  br label %663

663:                                              ; preds = %698, %662
  %664 = load i64, ptr %37, align 8, !tbaa !20
  %665 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %666 = load i64, ptr %665, align 8, !tbaa !35
  %667 = icmp ult i64 %664, %666
  br i1 %667, label %669, label %668

668:                                              ; preds = %663
  store i32 20, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %705

669:                                              ; preds = %663
  %670 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.19)
          to label %671 unwind label %701

671:                                              ; preds = %669
  %672 = load i64, ptr %37, align 8, !tbaa !20
  %673 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %670, i64 noundef %672)
          to label %674 unwind label %701

674:                                              ; preds = %671
  %675 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %673, ptr noundef @.str.20)
          to label %676 unwind label %701

676:                                              ; preds = %674
  %677 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %678 = load ptr, ptr %677, align 8, !tbaa !36
  %679 = load i64, ptr %37, align 8, !tbaa !20
  %680 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %678, i64 %679
  %681 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %680, i32 0, i32 1
  %682 = load i64, ptr %681, align 8, !tbaa !37
  %683 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %675, i64 noundef %682)
          to label %684 unwind label %701

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

686:                                              ; preds = %684
  %687 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %688 = load ptr, ptr %687, align 8, !tbaa !36
  %689 = load i64, ptr %37, align 8, !tbaa !20
  %690 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %688, i64 %689
  %691 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %690, i32 0, i32 1
  %692 = load i64, ptr %691, align 8, !tbaa !37
  %693 = sub i64 %692, 1
  %694 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %685, i64 noundef %693)
          to label %695 unwind label %701

695:                                              ; preds = %686
  %696 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %694, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %697 unwind label %701

697:                                              ; preds = %695
  br label %698

698:                                              ; preds = %697
  %699 = load i64, ptr %37, align 8, !tbaa !20
  %700 = add i64 %699, 1
  store i64 %700, ptr %37, align 8, !tbaa !20
  br label %663, !llvm.loop !43

701:                                              ; preds = %695, %686, %684, %676, %674, %671, %669
  %702 = landingpad { ptr, i32 }
          cleanup
  %703 = extractvalue { ptr, i32 } %702, 0
  store ptr %703, ptr %12, align 8
  %704 = extractvalue { ptr, i32 } %702, 1
  store i32 %704, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %812

705:                                              ; preds = %668
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %11)
          to label %706 unwind label %521

706:                                              ; preds = %705
  %707 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.22)
          to label %708 unwind label %521

708:                                              ; preds = %706
  %709 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %707, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %710 unwind label %521

710:                                              ; preds = %708
  %711 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.23)
          to label %712 unwind label %521

712:                                              ; preds = %710
  %713 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %711, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %714 unwind label %521

714:                                              ; preds = %712
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %713, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %716 unwind label %521

716:                                              ; preds = %714
  %717 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.22)
          to label %718 unwind label %521

718:                                              ; preds = %716
  %719 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %717, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %720 unwind label %521

720:                                              ; preds = %718
  call void @llvm.lifetime.start.p0(i64 520, ptr %38) #8
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %38)
          to label %721 unwind label %731

721:                                              ; preds = %720
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %38, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef 8)
          to label %722 unwind label %735

722:                                              ; preds = %721
  %723 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %724 unwind label %735

724:                                              ; preds = %722
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  store i64 0, ptr %39, align 8, !tbaa !20
  br label %725

725:                                              ; preds = %752, %724
  %726 = load i64, ptr %39, align 8, !tbaa !20
  %727 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %728 = load i64, ptr %727, align 8, !tbaa !35
  %729 = icmp ult i64 %726, %728
  br i1 %729, label %739, label %730

730:                                              ; preds = %725
  store i32 23, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %769

731:                                              ; preds = %720
  %732 = landingpad { ptr, i32 }
          cleanup
  %733 = extractvalue { ptr, i32 } %732, 0
  store ptr %733, ptr %12, align 8
  %734 = extractvalue { ptr, i32 } %732, 1
  store i32 %734, ptr %13, align 4
  br label %811

735:                                              ; preds = %808, %806, %804, %771, %769, %722, %721
  %736 = landingpad { ptr, i32 }
          cleanup
  %737 = extractvalue { ptr, i32 } %736, 0
  store ptr %737, ptr %12, align 8
  %738 = extractvalue { ptr, i32 } %736, 1
  store i32 %738, ptr %13, align 4
  br label %810

739:                                              ; preds = %725
  %740 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %38, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %741 unwind label %755

741:                                              ; preds = %739
  call void @llvm.lifetime.start.p0(i64 384, ptr %40) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %40, ptr noundef nonnull align 8 dereferenceable(32) %14, i32 noundef 8)
          to label %742 unwind label %759

742:                                              ; preds = %741
  %743 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %40, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %744 unwind label %763

744:                                              ; preds = %742
  %745 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %746 = load ptr, ptr %745, align 8, !tbaa !36
  %747 = load i64, ptr %39, align 8, !tbaa !20
  %748 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %746, i64 %747
  %749 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %748, i32 0, i32 0
  %750 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %743, ptr noundef nonnull align 8 dereferenceable(32) %749)
          to label %751 unwind label %763

751:                                              ; preds = %744
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %40) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %40) #8
  br label %752

752:                                              ; preds = %751
  %753 = load i64, ptr %39, align 8, !tbaa !20
  %754 = add i64 %753, 1
  store i64 %754, ptr %39, align 8, !tbaa !20
  br label %725, !llvm.loop !44

755:                                              ; preds = %739
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %12, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %13, align 4
  br label %768

759:                                              ; preds = %741
  %760 = landingpad { ptr, i32 }
          cleanup
  %761 = extractvalue { ptr, i32 } %760, 0
  store ptr %761, ptr %12, align 8
  %762 = extractvalue { ptr, i32 } %760, 1
  store i32 %762, ptr %13, align 4
  br label %767

763:                                              ; preds = %744, %742
  %764 = landingpad { ptr, i32 }
          cleanup
  %765 = extractvalue { ptr, i32 } %764, 0
  store ptr %765, ptr %12, align 8
  %766 = extractvalue { ptr, i32 } %764, 1
  store i32 %766, ptr %13, align 4
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %40) #8
  br label %767

767:                                              ; preds = %763, %759
  call void @llvm.lifetime.end.p0(i64 384, ptr %40) #8
  br label %768

768:                                              ; preds = %767, %755
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %810

769:                                              ; preds = %730
  %770 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.24)
          to label %771 unwind label %735

771:                                              ; preds = %769
  %772 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %770, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %773 unwind label %735

773:                                              ; preds = %771
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  store i64 0, ptr %41, align 8, !tbaa !20
  br label %774

774:                                              ; preds = %797, %773
  %775 = load i64, ptr %41, align 8, !tbaa !20
  %776 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 29
  %777 = load i64, ptr %776, align 8, !tbaa !35
  %778 = icmp ult i64 %775, %777
  br i1 %778, label %780, label %779

779:                                              ; preds = %774
  store i32 26, ptr %33, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %804

780:                                              ; preds = %774
  %781 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.25)
          to label %782 unwind label %800

782:                                              ; preds = %780
  %783 = load i64, ptr %41, align 8, !tbaa !20
  %784 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %781, i64 noundef %783)
          to label %785 unwind label %800

785:                                              ; preds = %782
  %786 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %784, ptr noundef @.str.26)
          to label %787 unwind label %800

787:                                              ; preds = %785
  %788 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %42, i32 0, i32 30
  %789 = load ptr, ptr %788, align 8, !tbaa !36
  %790 = load i64, ptr %41, align 8, !tbaa !20
  %791 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %789, i64 %790
  %792 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %791, i32 0, i32 0
  %793 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %786, ptr noundef nonnull align 8 dereferenceable(32) %792)
          to label %794 unwind label %800

794:                                              ; preds = %787
  %795 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %793, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %796 unwind label %800

796:                                              ; preds = %794
  br label %797

797:                                              ; preds = %796
  %798 = load i64, ptr %41, align 8, !tbaa !20
  %799 = add i64 %798, 1
  store i64 %799, ptr %41, align 8, !tbaa !20
  br label %774, !llvm.loop !45

800:                                              ; preds = %794, %787, %785, %782, %780
  %801 = landingpad { ptr, i32 }
          cleanup
  %802 = extractvalue { ptr, i32 } %801, 0
  store ptr %802, ptr %12, align 8
  %803 = extractvalue { ptr, i32 } %801, 1
  store i32 %803, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %810

804:                                              ; preds = %779
  %805 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.22)
          to label %806 unwind label %735

806:                                              ; preds = %804
  %807 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %805, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %808 unwind label %735

808:                                              ; preds = %806
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %38)
          to label %809 unwind label %735

809:                                              ; preds = %808
  store i32 1, ptr %33, align 4
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %38) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr %38) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %29) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %29) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %15) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #8
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %11) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  ret void

810:                                              ; preds = %800, %768, %735
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %38) #8
  br label %811

811:                                              ; preds = %810, %731
  call void @llvm.lifetime.end.p0(i64 520, ptr %38) #8
  br label %812

812:                                              ; preds = %811, %701, %641, %582, %534, %521
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %29) #8
  br label %813

813:                                              ; preds = %812, %517
  call void @llvm.lifetime.end.p0(i64 384, ptr %29) #8
  br label %814

814:                                              ; preds = %813, %424, %303, %213, %178, %168, %155
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %15) #8
  br label %815

815:                                              ; preds = %814, %151
  call void @llvm.lifetime.end.p0(i64 384, ptr %15) #8
  br label %816

816:                                              ; preds = %815, %147
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #8
  br label %817

817:                                              ; preds = %816, %143
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %11) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  br label %818

818:                                              ; preds = %817
  %819 = load ptr, ptr %12, align 8
  %820 = load i32, ptr %13, align 4
  %821 = insertvalue { ptr, i32 } poison, ptr %819, 0
  %822 = insertvalue { ptr, i32 } %821, i32 %820, 1
  resume { ptr, i32 } %822
}

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 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)) #2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #0 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9node_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(248)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D8elm_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #3 align 2

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #7

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D10bgrid_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D10bgrid_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #3 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) #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256)) #0 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) #7

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #3 align 2

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { 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 #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { 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, !13, i64 408}
!10 = !{!"_ZTSN13EulerSolver2D10MainData2DE", !11, i64 0, !11, i64 32, !11, i64 64, !11, i64 96, !11, i64 128, !11, i64 160, !13, i64 192, !11, i64 200, !11, i64 232, !14, i64 264, !11, i64 272, !11, i64 304, !13, i64 336, !14, i64 344, !14, i64 352, !14, i64 360, !14, i64 368, !14, i64 376, !14, i64 384, !14, i64 392, !14, i64 400, !13, i64 408, !6, i64 416, !13, i64 424, !13, i64 432, !13, i64 440, !6, i64 448, !13, i64 456, !6, i64 464, !13, i64 472, !6, i64 480, !13, i64 488, !6, i64 496, !13, i64 504}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !13, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!10, !13, i64 424}
!16 = !{!10, !13, i64 432}
!17 = !{!10, !13, i64 440}
!18 = !{!10, !6, i64 416}
!19 = !{!10, !6, i64 448}
!20 = !{!13, !13, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !25, i64 0}
!24 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !25, i64 0, !6, i64 8, !25, i64 16, !6, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !14, i64 96, !14, i64 104, !25, i64 112, !25, i64 116, !26, i64 120, !14, i64 144, !6, i64 152, !6, i64 160, !25, i64 168}
!25 = !{!"int", !7, i64 0}
!26 = !{!"_ZTS8Vector1DIiE", !27, i64 0}
!27 = !{!"_ZTSSt6vectorIiSaIiEE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!24, !6, i64 8}
!32 = !{!25, !25, i64 0}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = !{!10, !13, i64 472}
!36 = !{!10, !6, i64 480}
!37 = !{!38, !13, i64 32}
!38 = !{!"_ZTSN13EulerSolver2D10bgrid_typeE", !11, i64 0, !13, i64 32, !6, i64 40, !13, 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}
!39 = !{!38, !6, i64 40}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}
!43 = distinct !{!43, !22}
!44 = distinct !{!44, !22}
!45 = distinct !{!45, !22}


; 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.std::basic_ifstream" = type { %"class.std::basic_istream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::basic_filebuf" = type { %"class.std::basic_streambuf", %union.pthread_mutex_t, %"class.std::__basic_file", i32, %struct.__mbstate_t, %struct.__mbstate_t, %struct.__mbstate_t, ptr, i64, i8, i8, i8, i8, ptr, ptr, i8, ptr, ptr, i64, ptr, ptr }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }
%"class.std::__basic_file" = type <{ ptr, i8, [7 x i8] }>
%struct.__mbstate_t = type { i32, %union.anon.0 }
%union.anon.0 = type { i32 }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_istringstream" = type { %"class.std::basic_istream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"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::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D9read_gridENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_(ptr noundef nonnull align 8 dereferenceable(512) %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca %"class.std::basic_ifstream", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %8 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %9 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %19 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %20 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  %21 = alloca i32, align 4
  %22 = alloca %"class.std::basic_ifstream", align 8
  %23 = alloca %"class.std::__cxx11::basic_istringstream", align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  %24 = 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)
  %25 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(32) %1)
  %26 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  call void @llvm.lifetime.start.p0(i64 520, ptr nonnull %5) #8
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %5)
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %5, ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef 8)
          to label %27 unwind label %101

27:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  %28 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %29 unwind label %103

29:                                               ; preds = %27
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %7) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %7, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %30 unwind label %105

30:                                               ; preds = %29
  %31 = getelementptr inbounds i8, ptr %0, i64 408
  %32 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %7, ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %33 unwind label %107

33:                                               ; preds = %30
  %34 = getelementptr inbounds i8, ptr %0, i64 424
  %35 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %32, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %36 unwind label %107

36:                                               ; preds = %33
  %37 = getelementptr inbounds i8, ptr %0, i64 432
  %38 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %35, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %39 unwind label %107

39:                                               ; preds = %36
  %40 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.1)
          to label %41 unwind label %107

41:                                               ; preds = %39
  %42 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull @.str.2)
          to label %43 unwind label %107

43:                                               ; preds = %41
  %44 = load i64, ptr %31, align 8, !tbaa !5
  %45 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %42, i64 noundef %44)
          to label %46 unwind label %107

46:                                               ; preds = %43
  %47 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull @.str.3)
          to label %48 unwind label %107

48:                                               ; preds = %46
  %49 = load i64, ptr %34, align 8, !tbaa !14
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %47, i64 noundef %49)
          to label %51 unwind label %107

51:                                               ; preds = %48
  %52 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull @.str.4)
          to label %53 unwind label %107

53:                                               ; preds = %51
  %54 = load i64, ptr %37, align 8, !tbaa !15
  %55 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %52, i64 noundef %54)
          to label %56 unwind label %107

56:                                               ; preds = %53
  %57 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %58 unwind label %107

58:                                               ; preds = %56
  %59 = load i64, ptr %34, align 8, !tbaa !14
  %60 = load i64, ptr %37, align 8, !tbaa !15
  %61 = add i64 %60, %59
  %62 = getelementptr inbounds i8, ptr %0, i64 440
  store i64 %61, ptr %62, align 8, !tbaa !16
  %63 = load i64, ptr %31, align 8, !tbaa !5
  %64 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %63, i64 248)
  %65 = extractvalue { i64, i1 } %64, 1
  %66 = extractvalue { i64, i1 } %64, 0
  %67 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %66, i64 8)
  %68 = extractvalue { i64, i1 } %67, 1
  %69 = or i1 %65, %68
  %70 = extractvalue { i64, i1 } %67, 0
  %71 = select i1 %69, i64 -1, i64 %70
  %72 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %71) #9
          to label %73 unwind label %107

73:                                               ; preds = %58
  store i64 %63, ptr %72, align 16
  %.ptr85 = getelementptr inbounds i8, ptr %72, i64 8
  %74 = icmp eq i64 %63, 0
  br i1 %74, label %.loopexit143, label %75

75:                                               ; preds = %73
  %76 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %.ptr85, i64 %63
  br label %77

77:                                               ; preds = %78, %75
  %.idx = phi i64 [ 8, %75 ], [ %.add, %78 ]
  %.ptr.ptr = getelementptr inbounds i8, ptr %72, i64 %.idx
  invoke void @_ZN13EulerSolver2D9node_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(248) %.ptr.ptr)
          to label %78 unwind label %109

78:                                               ; preds = %77
  %.add = add nuw nsw i64 %.idx, 248
  %.ptr84 = getelementptr inbounds i8, ptr %72, i64 %.add
  %79 = icmp eq ptr %.ptr84, %76
  br i1 %79, label %.loopexit143.loopexit, label %77

.loopexit143.loopexit:                            ; preds = %78
  %.pre = load i64, ptr %62, align 8, !tbaa !16
  br label %.loopexit143

.loopexit143:                                     ; preds = %.loopexit143.loopexit, %73
  %80 = phi i64 [ %.pre, %.loopexit143.loopexit ], [ %61, %73 ]
  %81 = getelementptr inbounds i8, ptr %0, i64 416
  store ptr %.ptr85, ptr %81, align 8, !tbaa !17
  %82 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %80, i64 176)
  %83 = extractvalue { i64, i1 } %82, 1
  %84 = extractvalue { i64, i1 } %82, 0
  %85 = or disjoint i64 %84, 8
  %86 = select i1 %83, i64 -1, i64 %85
  %87 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %86) #9
          to label %88 unwind label %107

88:                                               ; preds = %.loopexit143
  store i64 %80, ptr %87, align 16
  %.ptr93 = getelementptr inbounds i8, ptr %87, i64 8
  %89 = icmp eq i64 %80, 0
  br i1 %89, label %.loopexit140, label %90

90:                                               ; preds = %88
  %91 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %.ptr93, i64 %80
  br label %92

92:                                               ; preds = %93, %90
  %.idx90 = phi i64 [ 8, %90 ], [ %.add91, %93 ]
  %.ptr.ptr98 = getelementptr inbounds i8, ptr %87, i64 %.idx90
  invoke void @_ZN13EulerSolver2D8elm_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %.ptr.ptr98)
          to label %93 unwind label %113

93:                                               ; preds = %92
  %.add91 = add nuw nsw i64 %.idx90, 176
  %.ptr92 = getelementptr inbounds i8, ptr %87, i64 %.add91
  %94 = icmp eq ptr %.ptr92, %91
  br i1 %94, label %.loopexit140, label %92

.loopexit140:                                     ; preds = %93, %88
  %95 = getelementptr inbounds i8, ptr %0, i64 448
  store ptr %.ptr93, ptr %95, align 8, !tbaa !18
  %96 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.5)
          to label %97 unwind label %107

97:                                               ; preds = %.loopexit140
  %98 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader137 unwind label %107

.preheader137:                                    ; preds = %97
  %99 = load i64, ptr %31, align 8, !tbaa !5
  %.not173 = icmp eq i64 %99, 0
  br i1 %.not173, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %127, %.preheader137
  %100 = load i64, ptr %34, align 8
  %.not = icmp eq i64 %100, 0
  br i1 %.not, label %.loopexit136, label %.lr.ph152

101:                                              ; preds = %3
  %102 = landingpad { ptr, i32 }
          cleanup
  br label %523

103:                                              ; preds = %27
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %522

105:                                              ; preds = %29
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %521

107:                                              ; preds = %303, %301, %298, %296, %294, %291, %289, %287, %284, %282, %280, %277, %275, %273, %271, %269, %.loopexit134, %266, %264, %97, %.loopexit140, %.loopexit143, %58, %56, %53, %51, %48, %46, %43, %41, %39, %36, %33, %30
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %520

109:                                              ; preds = %77
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = icmp eq i64 %.idx, 8
  br i1 %111, label %.loopexit142, label %.preheader141

.preheader141:                                    ; preds = %109, %.preheader141
  %.idx86 = phi i64 [ %.add87, %.preheader141 ], [ %.idx, %109 ]
  %.add87 = add nsw i64 %.idx86, -248
  %.ptr89 = getelementptr inbounds i8, ptr %72, i64 %.add87
  call void @_ZN13EulerSolver2D9node_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(248) %.ptr89) #8
  %112 = icmp eq i64 %.add87, 8
  br i1 %112, label %.loopexit142, label %.preheader141

.loopexit142:                                     ; preds = %.preheader141, %109
  call void @_ZdaPvm(ptr noundef nonnull %72, i64 noundef %71) #10
  br label %520

113:                                              ; preds = %92
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = icmp eq i64 %.idx90, 8
  br i1 %115, label %.loopexit139, label %.preheader138

.preheader138:                                    ; preds = %113, %.preheader138
  %.idx94 = phi i64 [ %.add95, %.preheader138 ], [ %.idx90, %113 ]
  %.add95 = add nsw i64 %.idx94, -176
  %.ptr97 = getelementptr inbounds i8, ptr %87, i64 %.add95
  call void @_ZN13EulerSolver2D8elm_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(172) %.ptr97) #8
  %116 = icmp eq i64 %.add95, 8
  br i1 %116, label %.loopexit139, label %.preheader138

.loopexit139:                                     ; preds = %.preheader138, %113
  call void @_ZdaPvm(ptr noundef nonnull %87, i64 noundef %86) #10
  br label %520

.lr.ph:                                           ; preds = %.preheader137, %127
  %.052150 = phi i64 [ %128, %127 ], [ 0, %.preheader137 ]
  %117 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %118 unwind label %131

118:                                              ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %8) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %8, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %119 unwind label %133

119:                                              ; preds = %118
  %120 = load ptr, ptr %81, align 8, !tbaa !17
  %121 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %120, i64 %.052150
  %122 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERd(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(8) %121)
          to label %123 unwind label %135

123:                                              ; preds = %119
  %124 = load ptr, ptr %81, align 8, !tbaa !17
  %125 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %124, i64 %.052150, i32 1
  %126 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERd(ptr noundef nonnull align 8 dereferenceable(16) %122, ptr noundef nonnull align 8 dereferenceable(8) %125)
          to label %127 unwind label %135

127:                                              ; preds = %123
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %8) #8
  %128 = add nuw i64 %.052150, 1
  %129 = load i64, ptr %31, align 8, !tbaa !5
  %130 = icmp ult i64 %128, %129
  br i1 %130, label %.lr.ph, label %._crit_edge, !llvm.loop !19

131:                                              ; preds = %.lr.ph
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %520

133:                                              ; preds = %118
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %137

135:                                              ; preds = %123, %119
  %136 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %8) #8
  br label %137

137:                                              ; preds = %135, %133
  %.pn121 = phi { ptr, i32 } [ %136, %135 ], [ %134, %133 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %8) #8
  br label %520

.lr.ph152:                                        ; preds = %._crit_edge, %173
  %.051151 = phi i64 [ %175, %173 ], [ 0, %._crit_edge ]
  %138 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %139 unwind label %178

139:                                              ; preds = %.lr.ph152
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %9) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %9, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %140 unwind label %180

140:                                              ; preds = %139
  %141 = load ptr, ptr %95, align 8, !tbaa !18
  %142 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %141, i64 %.051151
  store i32 3, ptr %142, align 8, !tbaa !21
  %143 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #9
          to label %144 unwind label %182

144:                                              ; preds = %140
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %143, i32 noundef 3, i32 noundef 1)
          to label %145 unwind label %184

145:                                              ; preds = %144
  %146 = load ptr, ptr %95, align 8, !tbaa !18
  %147 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %146, i64 %.051151, i32 2
  store ptr %143, ptr %147, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  %148 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 4 dereferenceable(4) %10)
          to label %149 unwind label %186

149:                                              ; preds = %145
  %150 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %148, ptr noundef nonnull align 4 dereferenceable(4) %11)
          to label %151 unwind label %186

151:                                              ; preds = %149
  %152 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %150, ptr noundef nonnull align 4 dereferenceable(4) %12)
          to label %153 unwind label %186

153:                                              ; preds = %151
  %154 = load i32, ptr %10, align 4, !tbaa !30
  %155 = load ptr, ptr %95, align 8, !tbaa !18
  %156 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %155, i64 %.051151, i32 2
  %157 = load ptr, ptr %156, align 8, !tbaa !29
  %158 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %157, i32 noundef 0)
          to label %159 unwind label %186

159:                                              ; preds = %153
  %160 = add nsw i32 %154, -1
  store i32 %160, ptr %158, align 4, !tbaa !30
  %161 = load i32, ptr %11, align 4, !tbaa !30
  %162 = load ptr, ptr %95, align 8, !tbaa !18
  %163 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %162, i64 %.051151, i32 2
  %164 = load ptr, ptr %163, align 8, !tbaa !29
  %165 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %164, i32 noundef 1)
          to label %166 unwind label %186

166:                                              ; preds = %159
  %167 = add nsw i32 %161, -1
  store i32 %167, ptr %165, align 4, !tbaa !30
  %168 = load i32, ptr %12, align 4, !tbaa !30
  %169 = load ptr, ptr %95, align 8, !tbaa !18
  %170 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %169, i64 %.051151, i32 2
  %171 = load ptr, ptr %170, align 8, !tbaa !29
  %172 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %171, i32 noundef 2)
          to label %173 unwind label %186

173:                                              ; preds = %166
  %174 = add nsw i32 %168, -1
  store i32 %174, ptr %172, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %9) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %9) #8
  %175 = add nuw i64 %.051151, 1
  %176 = load i64, ptr %34, align 8, !tbaa !14
  %177 = icmp ult i64 %175, %176
  br i1 %177, label %.lr.ph152, label %.loopexit136, !llvm.loop !31

178:                                              ; preds = %.lr.ph152
  %179 = landingpad { ptr, i32 }
          cleanup
  br label %520

180:                                              ; preds = %139
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %189

182:                                              ; preds = %140
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %188

184:                                              ; preds = %144
  %185 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %143, i64 noundef 40) #10
  br label %188

186:                                              ; preds = %166, %159, %153, %151, %149, %145
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #8
  br label %188

188:                                              ; preds = %186, %184, %182
  %.pn117 = phi { ptr, i32 } [ %187, %186 ], [ %185, %184 ], [ %183, %182 ]
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %9) #8
  br label %189

189:                                              ; preds = %188, %180
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %188 ], [ %181, %180 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %9) #8
  br label %520

.loopexit136:                                     ; preds = %173, %._crit_edge
  %190 = load i64, ptr %37, align 8, !tbaa !15
  %.not99 = icmp eq i64 %190, 0
  br i1 %.not99, label %264, label %.lr.ph154

.lr.ph154:                                        ; preds = %.loopexit136, %247
  %.050153 = phi i64 [ %249, %247 ], [ 0, %.loopexit136 ]
  %191 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %192 unwind label %252

192:                                              ; preds = %.lr.ph154
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %13) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %13, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %193 unwind label %254

193:                                              ; preds = %192
  %194 = load ptr, ptr %95, align 8, !tbaa !18
  %195 = load i64, ptr %34, align 8, !tbaa !14
  %196 = getelementptr %"class.EulerSolver2D::elm_type", ptr %194, i64 %195
  %197 = getelementptr %"class.EulerSolver2D::elm_type", ptr %196, i64 %.050153
  store i32 4, ptr %197, align 8, !tbaa !21
  %198 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #9
          to label %199 unwind label %256

199:                                              ; preds = %193
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %198, i32 noundef 4, i32 noundef 1)
          to label %200 unwind label %258

200:                                              ; preds = %199
  %201 = load ptr, ptr %95, align 8, !tbaa !18
  %202 = load i64, ptr %34, align 8, !tbaa !14
  %203 = getelementptr %"class.EulerSolver2D::elm_type", ptr %201, i64 %202
  %204 = getelementptr %"class.EulerSolver2D::elm_type", ptr %203, i64 %.050153, i32 2
  store ptr %198, ptr %204, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  %205 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 4 dereferenceable(4) %14)
          to label %206 unwind label %260

206:                                              ; preds = %200
  %207 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %205, ptr noundef nonnull align 4 dereferenceable(4) %15)
          to label %208 unwind label %260

208:                                              ; preds = %206
  %209 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %207, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %210 unwind label %260

210:                                              ; preds = %208
  %211 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %209, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %212 unwind label %260

212:                                              ; preds = %210
  %213 = load i32, ptr %14, align 4, !tbaa !30
  %214 = load ptr, ptr %95, align 8, !tbaa !18
  %215 = load i64, ptr %34, align 8, !tbaa !14
  %216 = getelementptr %"class.EulerSolver2D::elm_type", ptr %214, i64 %215
  %217 = getelementptr %"class.EulerSolver2D::elm_type", ptr %216, i64 %.050153, i32 2
  %218 = load ptr, ptr %217, align 8, !tbaa !29
  %219 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %218, i32 noundef 0)
          to label %220 unwind label %260

220:                                              ; preds = %212
  %221 = add nsw i32 %213, -1
  store i32 %221, ptr %219, align 4, !tbaa !30
  %222 = load i32, ptr %15, align 4, !tbaa !30
  %223 = load ptr, ptr %95, align 8, !tbaa !18
  %224 = load i64, ptr %34, align 8, !tbaa !14
  %225 = getelementptr %"class.EulerSolver2D::elm_type", ptr %223, i64 %224
  %226 = getelementptr %"class.EulerSolver2D::elm_type", ptr %225, i64 %.050153, i32 2
  %227 = load ptr, ptr %226, align 8, !tbaa !29
  %228 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %227, i32 noundef 1)
          to label %229 unwind label %260

229:                                              ; preds = %220
  %230 = add nsw i32 %222, -1
  store i32 %230, ptr %228, align 4, !tbaa !30
  %231 = load i32, ptr %16, align 4, !tbaa !30
  %232 = load ptr, ptr %95, align 8, !tbaa !18
  %233 = load i64, ptr %34, align 8, !tbaa !14
  %234 = getelementptr %"class.EulerSolver2D::elm_type", ptr %232, i64 %233
  %235 = getelementptr %"class.EulerSolver2D::elm_type", ptr %234, i64 %.050153, i32 2
  %236 = load ptr, ptr %235, align 8, !tbaa !29
  %237 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %236, i32 noundef 2)
          to label %238 unwind label %260

238:                                              ; preds = %229
  %239 = add nsw i32 %231, -1
  store i32 %239, ptr %237, align 4, !tbaa !30
  %240 = load i32, ptr %17, align 4, !tbaa !30
  %241 = load ptr, ptr %95, align 8, !tbaa !18
  %242 = load i64, ptr %34, align 8, !tbaa !14
  %243 = getelementptr %"class.EulerSolver2D::elm_type", ptr %241, i64 %242
  %244 = getelementptr %"class.EulerSolver2D::elm_type", ptr %243, i64 %.050153, i32 2
  %245 = load ptr, ptr %244, align 8, !tbaa !29
  %246 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %245, i32 noundef 3)
          to label %247 unwind label %260

247:                                              ; preds = %238
  %248 = add nsw i32 %240, -1
  store i32 %248, ptr %246, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %13) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %13) #8
  %249 = add nuw i64 %.050153, 1
  %250 = load i64, ptr %37, align 8, !tbaa !15
  %251 = icmp ult i64 %249, %250
  br i1 %251, label %.lr.ph154, label %.loopexit134, !llvm.loop !32

252:                                              ; preds = %.lr.ph154
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %520

254:                                              ; preds = %192
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %263

256:                                              ; preds = %193
  %257 = landingpad { ptr, i32 }
          cleanup
  br label %262

258:                                              ; preds = %199
  %259 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %198, i64 noundef 40) #10
  br label %262

260:                                              ; preds = %238, %229, %220, %212, %210, %208, %206, %200
  %261 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #8
  br label %262

262:                                              ; preds = %260, %258, %256
  %.pn113 = phi { ptr, i32 } [ %261, %260 ], [ %259, %258 ], [ %257, %256 ]
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %13) #8
  br label %263

263:                                              ; preds = %262, %254
  %.pn113.pn = phi { ptr, i32 } [ %.pn113, %262 ], [ %255, %254 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %13) #8
  br label %520

264:                                              ; preds = %.loopexit136
  %265 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.6)
          to label %266 unwind label %107

266:                                              ; preds = %264
  %267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %265, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit134 unwind label %107

.loopexit134:                                     ; preds = %247, %266
  %268 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.7)
          to label %269 unwind label %107

269:                                              ; preds = %.loopexit134
  %270 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %268, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %271 unwind label %107

271:                                              ; preds = %269
  %272 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.8)
          to label %273 unwind label %107

273:                                              ; preds = %271
  %274 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %272, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %275 unwind label %107

275:                                              ; preds = %273
  %276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.9)
          to label %277 unwind label %107

277:                                              ; preds = %275
  %278 = load i64, ptr %31, align 8, !tbaa !5
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %276, i64 noundef %278)
          to label %280 unwind label %107

280:                                              ; preds = %277
  %281 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %279, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %282 unwind label %107

282:                                              ; preds = %280
  %283 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.10)
          to label %284 unwind label %107

284:                                              ; preds = %282
  %285 = load i64, ptr %34, align 8, !tbaa !14
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %283, i64 noundef %285)
          to label %287 unwind label %107

287:                                              ; preds = %284
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %289 unwind label %107

289:                                              ; preds = %287
  %290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.11)
          to label %291 unwind label %107

291:                                              ; preds = %289
  %292 = load i64, ptr %37, align 8, !tbaa !15
  %293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %290, i64 noundef %292)
          to label %294 unwind label %107

294:                                              ; preds = %291
  %295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %293, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %296 unwind label %107

296:                                              ; preds = %294
  %297 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.12)
          to label %298 unwind label %107

298:                                              ; preds = %296
  %299 = load i64, ptr %62, align 8, !tbaa !16
  %300 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %297, i64 noundef %299)
          to label %301 unwind label %107

301:                                              ; preds = %298
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %300, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %303 unwind label %107

303:                                              ; preds = %301
  %304 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %305 unwind label %107

305:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %18) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %18, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %306 unwind label %336

306:                                              ; preds = %305
  %307 = getelementptr inbounds i8, ptr %0, i64 472
  %308 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(8) %307)
          to label %309 unwind label %338

309:                                              ; preds = %306
  %310 = load i64, ptr %307, align 8, !tbaa !33
  %311 = icmp ugt i64 %310, 144115188075855871
  %312 = shl i64 %310, 7
  %313 = or disjoint i64 %312, 8
  %314 = select i1 %311, i64 -1, i64 %313
  %315 = invoke noalias noundef nonnull ptr @_Znam(i64 noundef %314) #9
          to label %316 unwind label %338

316:                                              ; preds = %309
  store i64 %310, ptr %315, align 16
  %317 = getelementptr inbounds i8, ptr %315, i64 8
  %318 = icmp eq i64 %310, 0
  br i1 %318, label %.loopexit, label %319

319:                                              ; preds = %316
  %320 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %317, i64 %310
  br label %321

321:                                              ; preds = %321, %319
  %322 = phi ptr [ %317, %319 ], [ %323, %321 ]
  call void @_ZN13EulerSolver2D10bgrid_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(128) %322)
  %323 = getelementptr inbounds i8, ptr %322, i64 128
  %324 = icmp eq ptr %323, %320
  br i1 %324, label %.loopexit, label %321

.loopexit:                                        ; preds = %321, %316
  %325 = getelementptr inbounds i8, ptr %0, i64 480
  store ptr %317, ptr %325, align 8, !tbaa !34
  %326 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.13)
          to label %327 unwind label %338

327:                                              ; preds = %.loopexit
  %328 = load i64, ptr %307, align 8, !tbaa !33
  %329 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %326, i64 noundef %328)
          to label %330 unwind label %338

330:                                              ; preds = %327
  %331 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %329, ptr noundef nonnull @.str.14)
          to label %332 unwind label %338

332:                                              ; preds = %330
  %333 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %331, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader132 unwind label %338

.preheader132:                                    ; preds = %332
  %334 = load i64, ptr %307, align 8, !tbaa !33
  %.not175 = icmp eq i64 %334, 0
  br i1 %.not175, label %._crit_edge157, label %.lr.ph156

._crit_edge157:                                   ; preds = %353, %.preheader132
  %335 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.15)
          to label %369 unwind label %338

336:                                              ; preds = %305
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %519

338:                                              ; preds = %460, %458, %456, %454, %452, %450, %448, %._crit_edge165, %419, %416, %414, %412, %410, %408, %._crit_edge162, %371, %369, %._crit_edge157, %332, %330, %327, %.loopexit, %309, %306
  %339 = landingpad { ptr, i32 }
          cleanup
  br label %518

.lr.ph156:                                        ; preds = %.preheader132, %353
  %.049155 = phi i64 [ %356, %353 ], [ 0, %.preheader132 ]
  %340 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %341 unwind label %359

341:                                              ; preds = %.lr.ph156
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %19) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %19, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %342 unwind label %361

342:                                              ; preds = %341
  %343 = load ptr, ptr %325, align 8, !tbaa !34
  %344 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %343, i64 %.049155, i32 1
  %345 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERm(ptr noundef nonnull align 8 dereferenceable(16) %19, ptr noundef nonnull align 8 dereferenceable(8) %344)
          to label %346 unwind label %363

346:                                              ; preds = %342
  %347 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #9
          to label %348 unwind label %363

348:                                              ; preds = %346
  %349 = load ptr, ptr %325, align 8, !tbaa !34
  %350 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %349, i64 %.049155, i32 1
  %351 = load i64, ptr %350, align 8, !tbaa !35
  %352 = trunc i64 %351 to i32
  invoke void @_ZN7Array2DIiEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %347, i32 noundef %352, i32 noundef 1)
          to label %353 unwind label %365

353:                                              ; preds = %348
  %354 = load ptr, ptr %325, align 8, !tbaa !34
  %355 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %354, i64 %.049155, i32 2
  store ptr %347, ptr %355, align 8, !tbaa !37
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %19) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %19) #8
  %356 = add nuw i64 %.049155, 1
  %357 = load i64, ptr %307, align 8, !tbaa !33
  %358 = icmp ult i64 %356, %357
  br i1 %358, label %.lr.ph156, label %._crit_edge157, !llvm.loop !38

359:                                              ; preds = %.lr.ph156
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %518

361:                                              ; preds = %341
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %368

363:                                              ; preds = %346, %342
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %367

365:                                              ; preds = %348
  %366 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %347, i64 noundef 40) #10
  br label %367

367:                                              ; preds = %365, %363
  %.pn107 = phi { ptr, i32 } [ %366, %365 ], [ %364, %363 ]
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %19) #8
  br label %368

368:                                              ; preds = %367, %361
  %.pn107.pn = phi { ptr, i32 } [ %.pn107, %367 ], [ %362, %361 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %19) #8
  br label %518

369:                                              ; preds = %._crit_edge157
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %335, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %371 unwind label %338

371:                                              ; preds = %369
  %372 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %.preheader131 unwind label %338

.preheader131:                                    ; preds = %371
  %373 = load i64, ptr %307, align 8, !tbaa !33
  %.not176 = icmp eq i64 %373, 0
  br i1 %.not176, label %._crit_edge162, label %.preheader130.preheader

.preheader130.preheader:                          ; preds = %.preheader131
  %.pre190 = load ptr, ptr %325, align 8, !tbaa !34
  br label %.preheader130

.preheader130:                                    ; preds = %.preheader130.preheader, %._crit_edge160
  %374 = phi i64 [ %379, %._crit_edge160 ], [ %373, %.preheader130.preheader ]
  %375 = phi ptr [ %380, %._crit_edge160 ], [ %.pre190, %.preheader130.preheader ]
  %.048161 = phi i64 [ %381, %._crit_edge160 ], [ 0, %.preheader130.preheader ]
  %376 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %375, i64 %.048161, i32 1
  %377 = load i64, ptr %376, align 8, !tbaa !35
  %.not177 = icmp eq i64 %377, 0
  br i1 %.not177, label %._crit_edge160, label %.lr.ph159

._crit_edge162:                                   ; preds = %._crit_edge160, %.preheader131
  %378 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.16)
          to label %408 unwind label %338

._crit_edge160.loopexit:                          ; preds = %394
  %.pre191 = load i64, ptr %307, align 8, !tbaa !33
  br label %._crit_edge160

._crit_edge160:                                   ; preds = %._crit_edge160.loopexit, %.preheader130
  %379 = phi i64 [ %.pre191, %._crit_edge160.loopexit ], [ %374, %.preheader130 ]
  %380 = phi ptr [ %397, %._crit_edge160.loopexit ], [ %375, %.preheader130 ]
  %381 = add nuw i64 %.048161, 1
  %382 = icmp ult i64 %381, %379
  br i1 %382, label %.preheader130, label %._crit_edge162, !llvm.loop !39

.lr.ph159:                                        ; preds = %.preheader130, %394
  %.047158 = phi i64 [ %396, %394 ], [ 0, %.preheader130 ]
  %383 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %384 unwind label %401

384:                                              ; preds = %.lr.ph159
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %20) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %20, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %385 unwind label %403

385:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  %386 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %20, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %387 unwind label %405

387:                                              ; preds = %385
  %388 = load i32, ptr %21, align 4, !tbaa !30
  %389 = load ptr, ptr %325, align 8, !tbaa !34
  %390 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %389, i64 %.048161, i32 2
  %391 = load ptr, ptr %390, align 8, !tbaa !37
  %392 = trunc i64 %.047158 to i32
  %393 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEii(ptr noundef nonnull align 8 dereferenceable(40) %391, i32 noundef %392, i32 noundef 0)
          to label %394 unwind label %405

394:                                              ; preds = %387
  %395 = add nsw i32 %388, -1
  store i32 %395, ptr %393, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %20) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %20) #8
  %396 = add nuw i64 %.047158, 1
  %397 = load ptr, ptr %325, align 8, !tbaa !34
  %398 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %397, i64 %.048161, i32 1
  %399 = load i64, ptr %398, align 8, !tbaa !35
  %400 = icmp ult i64 %396, %399
  br i1 %400, label %.lr.ph159, label %._crit_edge160.loopexit, !llvm.loop !40

401:                                              ; preds = %.lr.ph159
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %518

403:                                              ; preds = %384
  %404 = landingpad { ptr, i32 }
          cleanup
  br label %407

405:                                              ; preds = %387, %385
  %406 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %20) #8
  br label %407

407:                                              ; preds = %405, %403
  %.pn104 = phi { ptr, i32 } [ %406, %405 ], [ %404, %403 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %20) #8
  br label %518

408:                                              ; preds = %._crit_edge162
  %409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %378, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %410 unwind label %338

410:                                              ; preds = %408
  %411 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.17)
          to label %412 unwind label %338

412:                                              ; preds = %410
  %413 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %411, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %414 unwind label %338

414:                                              ; preds = %412
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.18)
          to label %416 unwind label %338

416:                                              ; preds = %414
  %417 = load i64, ptr %307, align 8, !tbaa !33
  %418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %415, i64 noundef %417)
          to label %419 unwind label %338

419:                                              ; preds = %416
  %420 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %418, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader129 unwind label %338

.preheader129:                                    ; preds = %419
  %421 = load i64, ptr %307, align 8, !tbaa !33
  %.not178 = icmp eq i64 %421, 0
  br i1 %.not178, label %._crit_edge165, label %.lr.ph164

._crit_edge165:                                   ; preds = %442, %.preheader129
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %5)
          to label %448 unwind label %338

.lr.ph164:                                        ; preds = %.preheader129, %442
  %.046163 = phi i64 [ %443, %442 ], [ 0, %.preheader129 ]
  %422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.19)
          to label %423 unwind label %446

423:                                              ; preds = %.lr.ph164
  %424 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %422, i64 noundef %.046163)
          to label %425 unwind label %446

425:                                              ; preds = %423
  %426 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %424, ptr noundef nonnull @.str.20)
          to label %427 unwind label %446

427:                                              ; preds = %425
  %428 = load ptr, ptr %325, align 8, !tbaa !34
  %429 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %428, i64 %.046163, i32 1
  %430 = load i64, ptr %429, align 8, !tbaa !35
  %431 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %426, i64 noundef %430)
          to label %432 unwind label %446

432:                                              ; preds = %427
  %433 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %431, ptr noundef nonnull @.str.21)
          to label %434 unwind label %446

434:                                              ; preds = %432
  %435 = load ptr, ptr %325, align 8, !tbaa !34
  %436 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %435, i64 %.046163, i32 1
  %437 = load i64, ptr %436, align 8, !tbaa !35
  %438 = add i64 %437, -1
  %439 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %433, i64 noundef %438)
          to label %440 unwind label %446

440:                                              ; preds = %434
  %441 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %439, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %442 unwind label %446

442:                                              ; preds = %440
  %443 = add nuw i64 %.046163, 1
  %444 = load i64, ptr %307, align 8, !tbaa !33
  %445 = icmp ult i64 %443, %444
  br i1 %445, label %.lr.ph164, label %._crit_edge165, !llvm.loop !41

446:                                              ; preds = %440, %434, %432, %427, %425, %423, %.lr.ph164
  %447 = landingpad { ptr, i32 }
          cleanup
  br label %518

448:                                              ; preds = %._crit_edge165
  %449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.22)
          to label %450 unwind label %338

450:                                              ; preds = %448
  %451 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %449, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %452 unwind label %338

452:                                              ; preds = %450
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.23)
          to label %454 unwind label %338

454:                                              ; preds = %452
  %455 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %453, ptr noundef nonnull align 8 dereferenceable(32) %2)
          to label %456 unwind label %338

456:                                              ; preds = %454
  %457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %455, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %458 unwind label %338

458:                                              ; preds = %456
  %459 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.22)
          to label %460 unwind label %338

460:                                              ; preds = %458
  %461 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %459, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %462 unwind label %338

462:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 520, ptr nonnull %22) #8
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256) %22)
          to label %463 unwind label %468

463:                                              ; preds = %462
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256) %22, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef 8)
          to label %464 unwind label %470

464:                                              ; preds = %463
  %465 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %.preheader128 unwind label %470

.preheader128:                                    ; preds = %464
  %466 = load i64, ptr %307, align 8, !tbaa !33
  %.not179 = icmp eq i64 %466, 0
  br i1 %.not179, label %._crit_edge168, label %.lr.ph167

._crit_edge168:                                   ; preds = %480, %.preheader128
  %467 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.24)
          to label %491 unwind label %470

468:                                              ; preds = %462
  %469 = landingpad { ptr, i32 }
          cleanup
  br label %517

470:                                              ; preds = %514, %512, %._crit_edge171, %491, %._crit_edge168, %464, %463
  %471 = landingpad { ptr, i32 }
          cleanup
  br label %516

.lr.ph167:                                        ; preds = %.preheader128, %480
  %.045166 = phi i64 [ %481, %480 ], [ 0, %.preheader128 ]
  %472 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZSt7getlineIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %473 unwind label %484

473:                                              ; preds = %.lr.ph167
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %23) #8
  invoke void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(120) %23, ptr noundef nonnull align 8 dereferenceable(32) %6, i32 noundef 8)
          to label %474 unwind label %486

474:                                              ; preds = %473
  %475 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %476 unwind label %488

476:                                              ; preds = %474
  %477 = load ptr, ptr %325, align 8, !tbaa !34
  %478 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %477, i64 %.045166
  %479 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16) %475, ptr noundef nonnull align 8 dereferenceable(32) %478)
          to label %480 unwind label %488

480:                                              ; preds = %476
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %23) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %23) #8
  %481 = add nuw i64 %.045166, 1
  %482 = load i64, ptr %307, align 8, !tbaa !33
  %483 = icmp ult i64 %481, %482
  br i1 %483, label %.lr.ph167, label %._crit_edge168, !llvm.loop !42

484:                                              ; preds = %.lr.ph167
  %485 = landingpad { ptr, i32 }
          cleanup
  br label %516

486:                                              ; preds = %473
  %487 = landingpad { ptr, i32 }
          cleanup
  br label %490

488:                                              ; preds = %476, %474
  %489 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %23) #8
  br label %490

490:                                              ; preds = %488, %486
  %.pn = phi { ptr, i32 } [ %489, %488 ], [ %487, %486 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %23) #8
  br label %516

491:                                              ; preds = %._crit_edge168
  %492 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %467, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader unwind label %470

.preheader:                                       ; preds = %491
  %493 = load i64, ptr %307, align 8, !tbaa !33
  %.not180 = icmp eq i64 %493, 0
  br i1 %.not180, label %._crit_edge171, label %.lr.ph170

._crit_edge171:                                   ; preds = %506, %.preheader
  %494 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.22)
          to label %512 unwind label %470

.lr.ph170:                                        ; preds = %.preheader, %506
  %.0169 = phi i64 [ %507, %506 ], [ 0, %.preheader ]
  %495 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.25)
          to label %496 unwind label %510

496:                                              ; preds = %.lr.ph170
  %497 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %495, i64 noundef %.0169)
          to label %498 unwind label %510

498:                                              ; preds = %496
  %499 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %497, ptr noundef nonnull @.str.26)
          to label %500 unwind label %510

500:                                              ; preds = %498
  %501 = load ptr, ptr %325, align 8, !tbaa !34
  %502 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %501, i64 %.0169
  %503 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %499, ptr noundef nonnull align 8 dereferenceable(32) %502)
          to label %504 unwind label %510

504:                                              ; preds = %500
  %505 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %503, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %506 unwind label %510

506:                                              ; preds = %504
  %507 = add nuw i64 %.0169, 1
  %508 = load i64, ptr %307, align 8, !tbaa !33
  %509 = icmp ult i64 %507, %508
  br i1 %509, label %.lr.ph170, label %._crit_edge171, !llvm.loop !43

510:                                              ; preds = %504, %500, %498, %496, %.lr.ph170
  %511 = landingpad { ptr, i32 }
          cleanup
  br label %516

512:                                              ; preds = %._crit_edge171
  %513 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %494, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %514 unwind label %470

514:                                              ; preds = %512
  invoke void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256) %22)
          to label %515 unwind label %470

515:                                              ; preds = %514
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %22) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %22) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %18) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %18) #8
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %5) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  ret void

516:                                              ; preds = %484, %490, %510, %470
  %.pn.pn.pn = phi { ptr, i32 } [ %511, %510 ], [ %471, %470 ], [ %.pn, %490 ], [ %485, %484 ]
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %22) #8
  br label %517

517:                                              ; preds = %516, %468
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn, %516 ], [ %469, %468 ]
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %22) #8
  br label %518

518:                                              ; preds = %401, %407, %359, %368, %517, %446, %338
  %.pn107.pn.pn.pn = phi { ptr, i32 } [ %447, %446 ], [ %.pn.pn.pn.pn, %517 ], [ %339, %338 ], [ %.pn107.pn, %368 ], [ %360, %359 ], [ %.pn104, %407 ], [ %402, %401 ]
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %18) #8
  br label %519

519:                                              ; preds = %518, %336
  %.pn107.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn107.pn.pn.pn, %518 ], [ %337, %336 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %18) #8
  br label %520

520:                                              ; preds = %252, %263, %178, %189, %131, %137, %519, %.loopexit139, %.loopexit142, %107
  %.pn121.pn.pn = phi { ptr, i32 } [ %.pn107.pn.pn.pn.pn, %519 ], [ %108, %107 ], [ %114, %.loopexit139 ], [ %110, %.loopexit142 ], [ %.pn121, %137 ], [ %132, %131 ], [ %.pn117.pn, %189 ], [ %179, %178 ], [ %.pn113.pn, %263 ], [ %253, %252 ]
  call void @_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(120) %7) #8
  br label %521

521:                                              ; preds = %520, %105
  %.pn121.pn.pn.pn = phi { ptr, i32 } [ %.pn121.pn.pn, %520 ], [ %106, %105 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %7) #8
  br label %522

522:                                              ; preds = %521, %103
  %.pn121.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn121.pn.pn.pn, %521 ], [ %104, %103 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #8
  br label %523

523:                                              ; preds = %522, %101
  %.pn121.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn121.pn.pn.pn.pn, %522 ], [ %102, %101 ]
  call void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256) %5) #8
  call void @llvm.lifetime.end.p0(i64 520, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn121.pn.pn.pn.pn.pn
}

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

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

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0 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)) #2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(256), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; 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 #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D9node_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(248)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D8elm_typeD2Ev(ptr noundef nonnull align 8 dereferenceable(172)) unnamed_addr #3 align 2

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

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

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

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

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

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

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #7

; 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 #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13EulerSolver2D10bgrid_typeC2Ev(ptr noundef nonnull align 8 dereferenceable(128)) unnamed_addr #3 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 #0 align 2

; Function Attrs: mustprogress uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(256)) local_unnamed_addr #0 align 2

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(256)) unnamed_addr #3 align 2

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { 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 #4 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 #6 = { 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 #7 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { 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, !12, i64 424}
!15 = !{!6, !12, i64 432}
!16 = !{!6, !12, i64 440}
!17 = !{!6, !9, i64 416}
!18 = !{!6, !9, i64 448}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !23, i64 0}
!22 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !23, i64 0, !9, i64 8, !23, 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, !23, i64 112, !23, i64 116, !24, i64 120, !13, i64 144, !9, i64 152, !9, i64 160, !23, i64 168}
!23 = !{!"int", !10, i64 0}
!24 = !{!"_ZTS8Vector1DIiE", !25, i64 0}
!25 = !{!"_ZTSSt6vectorIiSaIiEE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!29 = !{!22, !9, i64 8}
!30 = !{!23, !23, i64 0}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = !{!6, !12, i64 472}
!34 = !{!6, !9, i64 480}
!35 = !{!36, !12, i64 32}
!36 = !{!"_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}
!37 = !{!36, !9, i64 40}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass