; 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_ofstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"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" }
%"class.std::locale" = type { ptr }
%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::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.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.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.EulerSolver2D::node_type" = type { double, double, i32, ptr, i32, %class.Vector1D, double, i32, i32, ptr, double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, ptr, ptr, ptr }
%class.Vector1D = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.EulerSolver2D::elm_type" = type <{ i32, [4 x i8], ptr, i32, [4 x i8], ptr, double, double, double, ptr, ptr, ptr, ptr, ptr, double, double, i32, i32, %class.Vector1D, double, ptr, ptr, i32, [4 x i8] }>

@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D18write_tecplot_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(512) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.std::basic_ofstream", align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca double, align 8
  %10 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %11 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 512, ptr %5) #7
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(248) %5)
  %12 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(248) %5, ptr noundef nonnull align 8 dereferenceable(32) %12, i32 noundef 16)
          to label %13 unwind label %42

13:                                               ; preds = %2
  %14 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef @.str.135)
          to label %15 unwind label %42

15:                                               ; preds = %13
  %16 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef @.str.136)
          to label %17 unwind label %42

17:                                               ; preds = %15
  %18 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef @.str.137)
          to label %19 unwind label %42

19:                                               ; preds = %17
  %20 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 21
  %21 = load i64, ptr %20, align 8, !tbaa !9
  %22 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %18, i64 noundef %21)
          to label %23 unwind label %42

23:                                               ; preds = %19
  %24 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef @.str.138)
          to label %25 unwind label %42

25:                                               ; preds = %23
  %26 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 23
  %27 = load i64, ptr %26, align 8, !tbaa !15
  %28 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 24
  %29 = load i64, ptr %28, align 8, !tbaa !16
  %30 = add i64 %27, %29
  %31 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %24, i64 noundef %30)
          to label %32 unwind label %42

32:                                               ; preds = %25
  %33 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef @.str.139)
          to label %34 unwind label %42

34:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 0, ptr %8, align 4, !tbaa !17
  br label %35

35:                                               ; preds = %198, %34
  %36 = load i32, ptr %8, align 4, !tbaa !17
  %37 = sext i32 %36 to i64
  %38 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 21
  %39 = load i64, ptr %38, align 8, !tbaa !9
  %40 = icmp ult i64 %37, %39
  br i1 %40, label %46, label %41

41:                                               ; preds = %35
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %205

42:                                               ; preds = %362, %32, %25, %23, %19, %17, %15, %13, %2
  %43 = landingpad { ptr, i32 }
          cleanup
  %44 = extractvalue { ptr, i32 } %43, 0
  store ptr %44, ptr %6, align 8
  %45 = extractvalue { ptr, i32 } %43, 1
  store i32 %45, ptr %7, align 4
  br label %364

46:                                               ; preds = %35
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %47 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %48 = load ptr, ptr %47, align 8, !tbaa !19
  %49 = load i32, ptr %8, align 4, !tbaa !17
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %48, i64 %50
  %52 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %51, i32 0, i32 21
  %53 = load ptr, ptr %52, align 8, !tbaa !20
  %54 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %53, i32 noundef 1)
          to label %55 unwind label %201

55:                                               ; preds = %46
  %56 = load double, ptr %54, align 8, !tbaa !27
  %57 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %58 = load ptr, ptr %57, align 8, !tbaa !19
  %59 = load i32, ptr %8, align 4, !tbaa !17
  %60 = sext i32 %59 to i64
  %61 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %58, i64 %60
  %62 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %61, i32 0, i32 21
  %63 = load ptr, ptr %62, align 8, !tbaa !20
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %63, i32 noundef 1)
          to label %65 unwind label %201

65:                                               ; preds = %55
  %66 = load double, ptr %64, align 8, !tbaa !27
  %67 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %68 = load ptr, ptr %67, align 8, !tbaa !19
  %69 = load i32, ptr %8, align 4, !tbaa !17
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %68, i64 %70
  %72 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %71, i32 0, i32 21
  %73 = load ptr, ptr %72, align 8, !tbaa !20
  %74 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %73, i32 noundef 2)
          to label %75 unwind label %201

75:                                               ; preds = %65
  %76 = load double, ptr %74, align 8, !tbaa !27
  %77 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %78 = load ptr, ptr %77, align 8, !tbaa !19
  %79 = load i32, ptr %8, align 4, !tbaa !17
  %80 = sext i32 %79 to i64
  %81 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %78, i64 %80
  %82 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %81, i32 0, i32 21
  %83 = load ptr, ptr %82, align 8, !tbaa !20
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %83, i32 noundef 2)
          to label %85 unwind label %201

85:                                               ; preds = %75
  %86 = load double, ptr %84, align 8, !tbaa !27
  %87 = fmul double %76, %86
  %88 = call double @llvm.fmuladd.f64(double %56, double %66, double %87)
  %89 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 20
  %90 = load double, ptr %89, align 8, !tbaa !28
  %91 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %92 = load ptr, ptr %91, align 8, !tbaa !19
  %93 = load i32, ptr %8, align 4, !tbaa !17
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %92, i64 %94
  %96 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %95, i32 0, i32 21
  %97 = load ptr, ptr %96, align 8, !tbaa !20
  %98 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %97, i32 noundef 3)
          to label %99 unwind label %201

99:                                               ; preds = %85
  %100 = load double, ptr %98, align 8, !tbaa !27
  %101 = fmul double %90, %100
  %102 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %103 = load ptr, ptr %102, align 8, !tbaa !19
  %104 = load i32, ptr %8, align 4, !tbaa !17
  %105 = sext i32 %104 to i64
  %106 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %103, i64 %105
  %107 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %106, i32 0, i32 21
  %108 = load ptr, ptr %107, align 8, !tbaa !20
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %108, i32 noundef 0)
          to label %110 unwind label %201

110:                                              ; preds = %99
  %111 = load double, ptr %109, align 8, !tbaa !27
  %112 = fdiv double %101, %111
  %113 = fdiv double %88, %112
  %114 = call double @sqrt(double noundef %113) #7
  store double %114, ptr %9, align 8, !tbaa !27
  %115 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %116 = load ptr, ptr %115, align 8, !tbaa !19
  %117 = load i32, ptr %8, align 4, !tbaa !17
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %116, i64 %118
  %120 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %119, i32 0, i32 0
  %121 = load double, ptr %120, align 8, !tbaa !29
  %122 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %5, double noundef %121)
          to label %123 unwind label %201

123:                                              ; preds = %110
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %122, i8 noundef signext 9)
          to label %125 unwind label %201

125:                                              ; preds = %123
  %126 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %127 = load ptr, ptr %126, align 8, !tbaa !19
  %128 = load i32, ptr %8, align 4, !tbaa !17
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %127, i64 %129
  %131 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %130, i32 0, i32 1
  %132 = load double, ptr %131, align 8, !tbaa !30
  %133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %124, double noundef %132)
          to label %134 unwind label %201

134:                                              ; preds = %125
  %135 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %133, ptr noundef @.str.140)
          to label %136 unwind label %201

136:                                              ; preds = %134
  %137 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %138 = load ptr, ptr %137, align 8, !tbaa !19
  %139 = load i32, ptr %8, align 4, !tbaa !17
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %138, i64 %140
  %142 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %141, i32 0, i32 21
  %143 = load ptr, ptr %142, align 8, !tbaa !20
  %144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %143, i32 noundef 0)
          to label %145 unwind label %201

145:                                              ; preds = %136
  %146 = load double, ptr %144, align 8, !tbaa !27
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %135, double noundef %146)
          to label %148 unwind label %201

148:                                              ; preds = %145
  %149 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %147, ptr noundef @.str.140)
          to label %150 unwind label %201

150:                                              ; preds = %148
  %151 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %152 = load ptr, ptr %151, align 8, !tbaa !19
  %153 = load i32, ptr %8, align 4, !tbaa !17
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %152, i64 %154
  %156 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %155, i32 0, i32 21
  %157 = load ptr, ptr %156, align 8, !tbaa !20
  %158 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %157, i32 noundef 1)
          to label %159 unwind label %201

159:                                              ; preds = %150
  %160 = load double, ptr %158, align 8, !tbaa !27
  %161 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %149, double noundef %160)
          to label %162 unwind label %201

162:                                              ; preds = %159
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %161, ptr noundef @.str.140)
          to label %164 unwind label %201

164:                                              ; preds = %162
  %165 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %166 = load ptr, ptr %165, align 8, !tbaa !19
  %167 = load i32, ptr %8, align 4, !tbaa !17
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %166, i64 %168
  %170 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %169, i32 0, i32 21
  %171 = load ptr, ptr %170, align 8, !tbaa !20
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %171, i32 noundef 2)
          to label %173 unwind label %201

173:                                              ; preds = %164
  %174 = load double, ptr %172, align 8, !tbaa !27
  %175 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %163, double noundef %174)
          to label %176 unwind label %201

176:                                              ; preds = %173
  %177 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %175, ptr noundef @.str.140)
          to label %178 unwind label %201

178:                                              ; preds = %176
  %179 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 22
  %180 = load ptr, ptr %179, align 8, !tbaa !19
  %181 = load i32, ptr %8, align 4, !tbaa !17
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %180, i64 %182
  %184 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %183, i32 0, i32 21
  %185 = load ptr, ptr %184, align 8, !tbaa !20
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %185, i32 noundef 3)
          to label %187 unwind label %201

187:                                              ; preds = %178
  %188 = load double, ptr %186, align 8, !tbaa !27
  %189 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %177, double noundef %188)
          to label %190 unwind label %201

190:                                              ; preds = %187
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef @.str.140)
          to label %192 unwind label %201

192:                                              ; preds = %190
  %193 = load double, ptr %9, align 8, !tbaa !27
  %194 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %191, double noundef %193)
          to label %195 unwind label %201

195:                                              ; preds = %192
  %196 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %194, ptr noundef @.str.14)
          to label %197 unwind label %201

197:                                              ; preds = %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %198

198:                                              ; preds = %197
  %199 = load i32, ptr %8, align 4, !tbaa !17
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %8, align 4, !tbaa !17
  br label %35, !llvm.loop !31

201:                                              ; preds = %195, %192, %190, %187, %178, %176, %173, %164, %162, %159, %150, %148, %145, %136, %134, %125, %123, %110, %99, %85, %75, %65, %55, %46
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %6, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %364

205:                                              ; preds = %41
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !17
  br label %206

206:                                              ; preds = %359, %205
  %207 = load i32, ptr %10, align 4, !tbaa !17
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 25
  %210 = load i64, ptr %209, align 8, !tbaa !33
  %211 = icmp ult i64 %208, %210
  br i1 %211, label %213, label %212

212:                                              ; preds = %206
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %362

213:                                              ; preds = %206
  %214 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %215 = load ptr, ptr %214, align 8, !tbaa !34
  %216 = load i32, ptr %10, align 4, !tbaa !17
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %215, i64 %217
  %219 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %218, i32 0, i32 0
  %220 = load i32, ptr %219, align 8, !tbaa !35
  %221 = icmp eq i32 %220, 3
  br i1 %221, label %222, label %287

222:                                              ; preds = %213
  %223 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %224 = load ptr, ptr %223, align 8, !tbaa !34
  %225 = load i32, ptr %10, align 4, !tbaa !17
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %224, i64 %226
  %228 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %227, i32 0, i32 2
  %229 = load ptr, ptr %228, align 8, !tbaa !37
  %230 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %229, i32 noundef 0)
          to label %231 unwind label %283

231:                                              ; preds = %222
  %232 = load i32, ptr %230, align 4, !tbaa !17
  %233 = add nsw i32 %232, 1
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef %233)
          to label %235 unwind label %283

235:                                              ; preds = %231
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %234, i8 noundef signext 9)
          to label %237 unwind label %283

237:                                              ; preds = %235
  %238 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %239 = load ptr, ptr %238, align 8, !tbaa !34
  %240 = load i32, ptr %10, align 4, !tbaa !17
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %239, i64 %241
  %243 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %242, i32 0, i32 2
  %244 = load ptr, ptr %243, align 8, !tbaa !37
  %245 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %244, i32 noundef 1)
          to label %246 unwind label %283

246:                                              ; preds = %237
  %247 = load i32, ptr %245, align 4, !tbaa !17
  %248 = add nsw i32 %247, 1
  %249 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %236, i32 noundef %248)
          to label %250 unwind label %283

250:                                              ; preds = %246
  %251 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %249, i8 noundef signext 9)
          to label %252 unwind label %283

252:                                              ; preds = %250
  %253 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %254 = load ptr, ptr %253, align 8, !tbaa !34
  %255 = load i32, ptr %10, align 4, !tbaa !17
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %254, i64 %256
  %258 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %257, i32 0, i32 2
  %259 = load ptr, ptr %258, align 8, !tbaa !37
  %260 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %259, i32 noundef 2)
          to label %261 unwind label %283

261:                                              ; preds = %252
  %262 = load i32, ptr %260, align 4, !tbaa !17
  %263 = add nsw i32 %262, 1
  %264 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %251, i32 noundef %263)
          to label %265 unwind label %283

265:                                              ; preds = %261
  %266 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %264, i8 noundef signext 9)
          to label %267 unwind label %283

267:                                              ; preds = %265
  %268 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %269 = load ptr, ptr %268, align 8, !tbaa !34
  %270 = load i32, ptr %10, align 4, !tbaa !17
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %269, i64 %271
  %273 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %272, i32 0, i32 2
  %274 = load ptr, ptr %273, align 8, !tbaa !37
  %275 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %274, i32 noundef 2)
          to label %276 unwind label %283

276:                                              ; preds = %267
  %277 = load i32, ptr %275, align 4, !tbaa !17
  %278 = add nsw i32 %277, 1
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %266, i32 noundef %278)
          to label %280 unwind label %283

280:                                              ; preds = %276
  %281 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %279, ptr noundef @.str.14)
          to label %282 unwind label %283

282:                                              ; preds = %280
  br label %358

283:                                              ; preds = %354, %350, %341, %339, %335, %326, %324, %320, %311, %309, %305, %296, %280, %276, %267, %265, %261, %252, %250, %246, %237, %235, %231, %222
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %6, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  br label %364

287:                                              ; preds = %213
  %288 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %289 = load ptr, ptr %288, align 8, !tbaa !34
  %290 = load i32, ptr %10, align 4, !tbaa !17
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %289, i64 %291
  %293 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %292, i32 0, i32 0
  %294 = load i32, ptr %293, align 8, !tbaa !35
  %295 = icmp eq i32 %294, 4
  br i1 %295, label %296, label %357

296:                                              ; preds = %287
  %297 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %298 = load ptr, ptr %297, align 8, !tbaa !34
  %299 = load i32, ptr %10, align 4, !tbaa !17
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %298, i64 %300
  %302 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %301, i32 0, i32 2
  %303 = load ptr, ptr %302, align 8, !tbaa !37
  %304 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %303, i32 noundef 0)
          to label %305 unwind label %283

305:                                              ; preds = %296
  %306 = load i32, ptr %304, align 4, !tbaa !17
  %307 = add nsw i32 %306, 1
  %308 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef %307)
          to label %309 unwind label %283

309:                                              ; preds = %305
  %310 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %308, i8 noundef signext 9)
          to label %311 unwind label %283

311:                                              ; preds = %309
  %312 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %313 = load ptr, ptr %312, align 8, !tbaa !34
  %314 = load i32, ptr %10, align 4, !tbaa !17
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %313, i64 %315
  %317 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %316, i32 0, i32 2
  %318 = load ptr, ptr %317, align 8, !tbaa !37
  %319 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %318, i32 noundef 1)
          to label %320 unwind label %283

320:                                              ; preds = %311
  %321 = load i32, ptr %319, align 4, !tbaa !17
  %322 = add nsw i32 %321, 1
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %310, i32 noundef %322)
          to label %324 unwind label %283

324:                                              ; preds = %320
  %325 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %323, i8 noundef signext 9)
          to label %326 unwind label %283

326:                                              ; preds = %324
  %327 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %328 = load ptr, ptr %327, align 8, !tbaa !34
  %329 = load i32, ptr %10, align 4, !tbaa !17
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %328, i64 %330
  %332 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %331, i32 0, i32 2
  %333 = load ptr, ptr %332, align 8, !tbaa !37
  %334 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %333, i32 noundef 2)
          to label %335 unwind label %283

335:                                              ; preds = %326
  %336 = load i32, ptr %334, align 4, !tbaa !17
  %337 = add nsw i32 %336, 1
  %338 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %325, i32 noundef %337)
          to label %339 unwind label %283

339:                                              ; preds = %335
  %340 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %338, i8 noundef signext 9)
          to label %341 unwind label %283

341:                                              ; preds = %339
  %342 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %11, i32 0, i32 26
  %343 = load ptr, ptr %342, align 8, !tbaa !34
  %344 = load i32, ptr %10, align 4, !tbaa !17
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %343, i64 %345
  %347 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %346, i32 0, i32 2
  %348 = load ptr, ptr %347, align 8, !tbaa !37
  %349 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %348, i32 noundef 3)
          to label %350 unwind label %283

350:                                              ; preds = %341
  %351 = load i32, ptr %349, align 4, !tbaa !17
  %352 = add nsw i32 %351, 1
  %353 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %340, i32 noundef %352)
          to label %354 unwind label %283

354:                                              ; preds = %350
  %355 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %353, ptr noundef @.str.14)
          to label %356 unwind label %283

356:                                              ; preds = %354
  br label %357

357:                                              ; preds = %356, %287
  br label %358

358:                                              ; preds = %357, %282
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %10, align 4, !tbaa !17
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %10, align 4, !tbaa !17
  br label %206, !llvm.loop !38

362:                                              ; preds = %212
  invoke void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(248) %5)
          to label %363 unwind label %42

363:                                              ; preds = %362
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(248) %5) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr %5) #7
  ret void

364:                                              ; preds = %283, %201, %42
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(248) %5) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr %5) #7
  br label %365

365:                                              ; preds = %364
  %366 = load ptr, ptr %6, align 8
  %367 = load i32, ptr %7, align 4
  %368 = insertvalue { ptr, i32 } poison, ptr %366, 0
  %369 = insertvalue { ptr, i32 } %368, i32 %367, 1
  resume { ptr, i32 } %369
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8), i8 noundef signext) #1

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!18, !18, i64 0}
!18 = !{!"int", !7, i64 0}
!19 = !{!10, !6, i64 416}
!20 = !{!21, !6, i64 176}
!21 = !{!"_ZTSN13EulerSolver2D9node_typeE", !14, i64 0, !14, i64 8, !18, i64 16, !6, i64 24, !18, i64 32, !22, i64 40, !14, i64 64, !18, i64 72, !18, i64 76, !6, i64 80, !14, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!22 = !{!"_ZTS8Vector1DIiE", !23, i64 0}
!23 = !{!"_ZTSSt6vectorIiSaIiEE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!27 = !{!14, !14, i64 0}
!28 = !{!10, !14, i64 400}
!29 = !{!21, !14, i64 0}
!30 = !{!21, !14, i64 8}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!10, !13, i64 440}
!34 = !{!10, !6, i64 448}
!35 = !{!36, !18, i64 0}
!36 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !18, i64 0, !6, i64 8, !18, 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, !18, i64 112, !18, i64 116, !22, i64 120, !14, i64 144, !6, i64 152, !6, i64 160, !18, i64 168}
!37 = !{!36, !6, i64 8}
!38 = distinct !{!38, !32}


; 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_ofstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_filebuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"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" }
%"class.std::locale" = type { ptr }
%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::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.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] }>

@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D18write_tecplot_fileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr nocapture noundef nonnull readonly align 8 dereferenceable(512) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::basic_ofstream", align 8
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %3) #7
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(248) %3)
  invoke void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode(ptr noundef nonnull align 8 dereferenceable(248) %3, ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef 16)
          to label %4 unwind label %31

4:                                                ; preds = %2
  %5 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull @.str.135)
          to label %6 unwind label %31

6:                                                ; preds = %4
  %7 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull @.str.136)
          to label %8 unwind label %31

8:                                                ; preds = %6
  %9 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull @.str.137)
          to label %10 unwind label %31

10:                                               ; preds = %8
  %11 = getelementptr inbounds i8, ptr %0, i64 408
  %12 = load i64, ptr %11, align 8, !tbaa !5
  %13 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %9, i64 noundef %12)
          to label %14 unwind label %31

14:                                               ; preds = %10
  %15 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull @.str.138)
          to label %16 unwind label %31

16:                                               ; preds = %14
  %17 = getelementptr inbounds i8, ptr %0, i64 424
  %18 = load i64, ptr %17, align 8, !tbaa !14
  %19 = getelementptr inbounds i8, ptr %0, i64 432
  %20 = load i64, ptr %19, align 8, !tbaa !15
  %21 = add i64 %20, %18
  %22 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %15, i64 noundef %21)
          to label %23 unwind label %31

23:                                               ; preds = %16
  %24 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull @.str.139)
          to label %.preheader37 unwind label %31

.preheader37:                                     ; preds = %23
  %25 = load i64, ptr %11, align 8, !tbaa !5
  %.not = icmp eq i64 %25, 0
  br i1 %.not, label %.preheader, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader37
  %26 = getelementptr inbounds i8, ptr %0, i64 416
  %27 = getelementptr inbounds i8, ptr %0, i64 400
  br label %33

.preheader:                                       ; preds = %134, %.preheader37
  %28 = getelementptr inbounds i8, ptr %0, i64 440
  %29 = load i64, ptr %28, align 8, !tbaa !16
  %.not41 = icmp eq i64 %29, 0
  br i1 %.not41, label %._crit_edge, label %.lr.ph40

.lr.ph40:                                         ; preds = %.preheader
  %30 = getelementptr inbounds i8, ptr %0, i64 448
  br label %139

31:                                               ; preds = %._crit_edge, %23, %16, %14, %10, %8, %6, %4, %2
  %32 = landingpad { ptr, i32 }
          cleanup
  br label %228

33:                                               ; preds = %.lr.ph, %134
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %134 ]
  %34 = load ptr, ptr %26, align 8, !tbaa !17
  %35 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %34, i64 %indvars.iv, i32 21
  %36 = load ptr, ptr %35, align 8, !tbaa !18
  %37 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %36, i32 noundef 1)
          to label %38 unwind label %137

38:                                               ; preds = %33
  %39 = load double, ptr %37, align 8, !tbaa !26
  %40 = load ptr, ptr %26, align 8, !tbaa !17
  %41 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %40, i64 %indvars.iv, i32 21
  %42 = load ptr, ptr %41, align 8, !tbaa !18
  %43 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %42, i32 noundef 1)
          to label %44 unwind label %137

44:                                               ; preds = %38
  %45 = load double, ptr %43, align 8, !tbaa !26
  %46 = load ptr, ptr %26, align 8, !tbaa !17
  %47 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %46, i64 %indvars.iv, i32 21
  %48 = load ptr, ptr %47, align 8, !tbaa !18
  %49 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %48, i32 noundef 2)
          to label %50 unwind label %137

50:                                               ; preds = %44
  %51 = load double, ptr %49, align 8, !tbaa !26
  %52 = load ptr, ptr %26, align 8, !tbaa !17
  %53 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %52, i64 %indvars.iv, i32 21
  %54 = load ptr, ptr %53, align 8, !tbaa !18
  %55 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %54, i32 noundef 2)
          to label %56 unwind label %137

56:                                               ; preds = %50
  %57 = load double, ptr %55, align 8, !tbaa !26
  %58 = fmul double %51, %57
  %59 = call double @llvm.fmuladd.f64(double %39, double %45, double %58)
  %60 = load double, ptr %27, align 8, !tbaa !27
  %61 = load ptr, ptr %26, align 8, !tbaa !17
  %62 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %61, i64 %indvars.iv, i32 21
  %63 = load ptr, ptr %62, align 8, !tbaa !18
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %63, i32 noundef 3)
          to label %65 unwind label %137

65:                                               ; preds = %56
  %66 = load double, ptr %64, align 8, !tbaa !26
  %67 = load ptr, ptr %26, align 8, !tbaa !17
  %68 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %67, i64 %indvars.iv, i32 21
  %69 = load ptr, ptr %68, align 8, !tbaa !18
  %70 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %69, i32 noundef 0)
          to label %71 unwind label %137

71:                                               ; preds = %65
  %72 = fmul double %60, %66
  %73 = load double, ptr %70, align 8, !tbaa !26
  %74 = fdiv double %72, %73
  %75 = fdiv double %59, %74
  %76 = call double @sqrt(double noundef %75) #7
  %77 = load ptr, ptr %26, align 8, !tbaa !17
  %78 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %77, i64 %indvars.iv
  %79 = load double, ptr %78, align 8, !tbaa !28
  %80 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %3, double noundef %79)
          to label %81 unwind label %137

81:                                               ; preds = %71
  %82 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %80, i8 noundef signext 9)
          to label %83 unwind label %137

83:                                               ; preds = %81
  %84 = load ptr, ptr %26, align 8, !tbaa !17
  %85 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %84, i64 %indvars.iv, i32 1
  %86 = load double, ptr %85, align 8, !tbaa !29
  %87 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %82, double noundef %86)
          to label %88 unwind label %137

88:                                               ; preds = %83
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull @.str.140)
          to label %90 unwind label %137

90:                                               ; preds = %88
  %91 = load ptr, ptr %26, align 8, !tbaa !17
  %92 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %91, i64 %indvars.iv, i32 21
  %93 = load ptr, ptr %92, align 8, !tbaa !18
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %93, i32 noundef 0)
          to label %95 unwind label %137

95:                                               ; preds = %90
  %96 = load double, ptr %94, align 8, !tbaa !26
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %89, double noundef %96)
          to label %98 unwind label %137

98:                                               ; preds = %95
  %99 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull @.str.140)
          to label %100 unwind label %137

100:                                              ; preds = %98
  %101 = load ptr, ptr %26, align 8, !tbaa !17
  %102 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %101, i64 %indvars.iv, i32 21
  %103 = load ptr, ptr %102, align 8, !tbaa !18
  %104 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %103, i32 noundef 1)
          to label %105 unwind label %137

105:                                              ; preds = %100
  %106 = load double, ptr %104, align 8, !tbaa !26
  %107 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %99, double noundef %106)
          to label %108 unwind label %137

108:                                              ; preds = %105
  %109 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %107, ptr noundef nonnull @.str.140)
          to label %110 unwind label %137

110:                                              ; preds = %108
  %111 = load ptr, ptr %26, align 8, !tbaa !17
  %112 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %111, i64 %indvars.iv, i32 21
  %113 = load ptr, ptr %112, align 8, !tbaa !18
  %114 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %113, i32 noundef 2)
          to label %115 unwind label %137

115:                                              ; preds = %110
  %116 = load double, ptr %114, align 8, !tbaa !26
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %109, double noundef %116)
          to label %118 unwind label %137

118:                                              ; preds = %115
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull @.str.140)
          to label %120 unwind label %137

120:                                              ; preds = %118
  %121 = load ptr, ptr %26, align 8, !tbaa !17
  %122 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %121, i64 %indvars.iv, i32 21
  %123 = load ptr, ptr %122, align 8, !tbaa !18
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %123, i32 noundef 3)
          to label %125 unwind label %137

125:                                              ; preds = %120
  %126 = load double, ptr %124, align 8, !tbaa !26
  %127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %119, double noundef %126)
          to label %128 unwind label %137

128:                                              ; preds = %125
  %129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %127, ptr noundef nonnull @.str.140)
          to label %130 unwind label %137

130:                                              ; preds = %128
  %131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %129, double noundef %76)
          to label %132 unwind label %137

132:                                              ; preds = %130
  %133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %131, ptr noundef nonnull @.str.14)
          to label %134 unwind label %137

134:                                              ; preds = %132
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %135 = load i64, ptr %11, align 8, !tbaa !5
  %136 = icmp ugt i64 %135, %indvars.iv.next
  br i1 %136, label %33, label %.preheader, !llvm.loop !30

137:                                              ; preds = %132, %130, %128, %125, %120, %118, %115, %110, %108, %105, %100, %98, %95, %90, %88, %83, %81, %71, %65, %56, %50, %44, %38, %33
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %228

._crit_edge:                                      ; preds = %224, %.preheader
  invoke void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEE5closeEv(ptr noundef nonnull align 8 dereferenceable(248) %3)
          to label %227 unwind label %31

139:                                              ; preds = %.lr.ph40, %224
  %indvars.iv43 = phi i64 [ 0, %.lr.ph40 ], [ %indvars.iv.next44, %224 ]
  %140 = load ptr, ptr %30, align 8, !tbaa !32
  %141 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %140, i64 %indvars.iv43
  %142 = load i32, ptr %141, align 8, !tbaa !33
  switch i32 %142, label %224 [
    i32 3, label %143
    i32 4, label %182
  ]

143:                                              ; preds = %139
  %144 = getelementptr inbounds i8, ptr %141, i64 8
  %145 = load ptr, ptr %144, align 8, !tbaa !35
  %146 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %145, i32 noundef 0)
          to label %147 unwind label %180

147:                                              ; preds = %143
  %148 = load i32, ptr %146, align 4, !tbaa !36
  %149 = add nsw i32 %148, 1
  %150 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %149)
          to label %151 unwind label %180

151:                                              ; preds = %147
  %152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %150, i8 noundef signext 9)
          to label %153 unwind label %180

153:                                              ; preds = %151
  %154 = load ptr, ptr %30, align 8, !tbaa !32
  %155 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %154, i64 %indvars.iv43, i32 2
  %156 = load ptr, ptr %155, align 8, !tbaa !35
  %157 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %156, i32 noundef 1)
          to label %158 unwind label %180

158:                                              ; preds = %153
  %159 = load i32, ptr %157, align 4, !tbaa !36
  %160 = add nsw i32 %159, 1
  %161 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %152, i32 noundef %160)
          to label %162 unwind label %180

162:                                              ; preds = %158
  %163 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %161, i8 noundef signext 9)
          to label %164 unwind label %180

164:                                              ; preds = %162
  %165 = load ptr, ptr %30, align 8, !tbaa !32
  %166 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %165, i64 %indvars.iv43, i32 2
  %167 = load ptr, ptr %166, align 8, !tbaa !35
  %168 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %167, i32 noundef 2)
          to label %169 unwind label %180

169:                                              ; preds = %164
  %170 = load i32, ptr %168, align 4, !tbaa !36
  %171 = add nsw i32 %170, 1
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %163, i32 noundef %171)
          to label %173 unwind label %180

173:                                              ; preds = %169
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %172, i8 noundef signext 9)
          to label %175 unwind label %180

175:                                              ; preds = %173
  %176 = load ptr, ptr %30, align 8, !tbaa !32
  %177 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %176, i64 %indvars.iv43, i32 2
  %178 = load ptr, ptr %177, align 8, !tbaa !35
  %179 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %178, i32 noundef 2)
          to label %.invoke46 unwind label %180

180:                                              ; preds = %.invoke46, %.invoke, %214, %212, %208, %203, %201, %197, %192, %190, %186, %182, %175, %173, %169, %164, %162, %158, %153, %151, %147, %143
  %181 = landingpad { ptr, i32 }
          cleanup
  br label %228

182:                                              ; preds = %139
  %183 = getelementptr inbounds i8, ptr %141, i64 8
  %184 = load ptr, ptr %183, align 8, !tbaa !35
  %185 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %184, i32 noundef 0)
          to label %186 unwind label %180

186:                                              ; preds = %182
  %187 = load i32, ptr %185, align 4, !tbaa !36
  %188 = add nsw i32 %187, 1
  %189 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %3, i32 noundef %188)
          to label %190 unwind label %180

190:                                              ; preds = %186
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %189, i8 noundef signext 9)
          to label %192 unwind label %180

192:                                              ; preds = %190
  %193 = load ptr, ptr %30, align 8, !tbaa !32
  %194 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %193, i64 %indvars.iv43, i32 2
  %195 = load ptr, ptr %194, align 8, !tbaa !35
  %196 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %195, i32 noundef 1)
          to label %197 unwind label %180

197:                                              ; preds = %192
  %198 = load i32, ptr %196, align 4, !tbaa !36
  %199 = add nsw i32 %198, 1
  %200 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %191, i32 noundef %199)
          to label %201 unwind label %180

201:                                              ; preds = %197
  %202 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %200, i8 noundef signext 9)
          to label %203 unwind label %180

203:                                              ; preds = %201
  %204 = load ptr, ptr %30, align 8, !tbaa !32
  %205 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %204, i64 %indvars.iv43, i32 2
  %206 = load ptr, ptr %205, align 8, !tbaa !35
  %207 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %206, i32 noundef 2)
          to label %208 unwind label %180

208:                                              ; preds = %203
  %209 = load i32, ptr %207, align 4, !tbaa !36
  %210 = add nsw i32 %209, 1
  %211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %202, i32 noundef %210)
          to label %212 unwind label %180

212:                                              ; preds = %208
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8) %211, i8 noundef signext 9)
          to label %214 unwind label %180

214:                                              ; preds = %212
  %215 = load ptr, ptr %30, align 8, !tbaa !32
  %216 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %215, i64 %indvars.iv43, i32 2
  %217 = load ptr, ptr %216, align 8, !tbaa !35
  %218 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %217, i32 noundef 3)
          to label %.invoke46 unwind label %180

.invoke46:                                        ; preds = %214, %175
  %.sink47 = phi ptr [ %179, %175 ], [ %218, %214 ]
  %219 = phi ptr [ %174, %175 ], [ %213, %214 ]
  %220 = load i32, ptr %.sink47, align 4, !tbaa !36
  %221 = add nsw i32 %220, 1
  %222 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %219, i32 noundef %221)
          to label %.invoke unwind label %180

.invoke:                                          ; preds = %.invoke46
  %223 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %222, ptr noundef nonnull @.str.14)
          to label %224 unwind label %180

224:                                              ; preds = %.invoke, %139
  %indvars.iv.next44 = add nuw nsw i64 %indvars.iv43, 1
  %225 = load i64, ptr %28, align 8, !tbaa !16
  %226 = icmp ugt i64 %225, %indvars.iv.next44
  br i1 %226, label %139, label %._crit_edge, !llvm.loop !37

227:                                              ; preds = %._crit_edge
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(248) %3) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %3) #7
  ret void

228:                                              ; preds = %180, %137, %31
  %.pn = phi { ptr, i32 } [ %138, %137 ], [ %181, %180 ], [ %32, %31 ]
  call void @_ZNSt14basic_ofstreamIcSt11char_traitsIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(248) %3) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c(ptr noundef nonnull align 8 dereferenceable(8), i8 noundef signext) local_unnamed_addr #1

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 = !{!19, !9, i64 176}
!19 = !{!"_ZTSN13EulerSolver2D9node_typeE", !13, i64 0, !13, i64 8, !20, i64 16, !9, i64 24, !20, i64 32, !21, i64 40, !13, i64 64, !20, i64 72, !20, i64 76, !9, i64 80, !13, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120, !9, i64 128, !9, i64 136, !9, i64 144, !9, i64 152, !9, i64 160, !9, i64 168, !9, i64 176, !9, i64 184, !9, i64 192, !13, i64 200, !13, i64 208, !13, i64 216, !9, i64 224, !9, i64 232, !9, i64 240}
!20 = !{!"int", !10, i64 0}
!21 = !{!"_ZTS8Vector1DIiE", !22, i64 0}
!22 = !{!"_ZTSSt6vectorIiSaIiEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!26 = !{!13, !13, i64 0}
!27 = !{!6, !13, i64 400}
!28 = !{!19, !13, i64 0}
!29 = !{!19, !13, i64 8}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!6, !9, i64 448}
!33 = !{!34, !20, i64 0}
!34 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !20, i64 0, !9, i64 8, !20, 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, !20, i64 112, !20, i64 116, !21, i64 120, !13, i64 144, !9, i64 152, !9, i64 160, !20, i64 168}
!35 = !{!34, !9, i64 8}
!36 = !{!20, !20, i64 0}
!37 = distinct !{!37, !31}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass