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

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.Array2D.4 = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%"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::edge_type" = type { i32, i32, i32, i32, %class.Array2D.4, double, %class.Array2D.4, double, i32, i32 }
%"class.EulerSolver2D::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.EulerSolver2D::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] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #6

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D15check_grid_dataEv(ptr noundef nonnull align 8 dereferenceable(512) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca %class.Array2D.4, align 8
  %11 = alloca %class.Array2D.4, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %class.Array2D.4, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca %class.Array2D.4, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i32, align 4
  %26 = alloca i64, align 8
  %27 = alloca %class.Array2D.4, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca %class.Array2D.4, align 8
  %32 = alloca %class.Array2D.4, align 8
  %33 = alloca %class.Array2D.4, align 8
  %34 = alloca %class.Array2D.4, align 8
  %35 = alloca i1, align 1
  %36 = alloca %class.Array2D.4, align 8
  %37 = alloca %class.Array2D.4, align 8
  %38 = alloca %class.Array2D.4, align 8
  %39 = alloca i64, align 8
  %40 = alloca %class.Array2D.4, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i32, align 4
  %44 = alloca i64, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %45 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #10
  call void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #10
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 2, i32 noundef 1)
          to label %46 unwind label %66

46:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 40, ptr %14) #10
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 2, i32 noundef 1)
          to label %47 unwind label %70

47:                                               ; preds = %46
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %48 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.67)
          to label %49 unwind label %74

49:                                               ; preds = %47
  %50 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %51 unwind label %74

51:                                               ; preds = %49
  store double 0.000000e+00, ptr %17, align 8, !tbaa !9
  store double 0.000000e+00, ptr %18, align 8, !tbaa !9
  %52 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #11
          to label %53 unwind label %74

53:                                               ; preds = %51
  %54 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 21
  %55 = load i64, ptr %54, align 8, !tbaa !11
  %56 = trunc i64 %55 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %52, i32 noundef %56, i32 noundef 2)
          to label %57 unwind label %78

57:                                               ; preds = %53
  store ptr %52, ptr %9, align 8, !tbaa !5
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %22, ptr noundef nonnull align 8 dereferenceable(40) %58, double noundef 0.000000e+00)
          to label %59 unwind label %74

59:                                               ; preds = %57
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %22) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  store i64 0, ptr %23, align 8, !tbaa !16
  br label %60

60:                                               ; preds = %201, %59
  %61 = load i64, ptr %23, align 8, !tbaa !16
  %62 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 27
  %63 = load i64, ptr %62, align 8, !tbaa !17
  %64 = icmp ult i64 %61, %63
  br i1 %64, label %82, label %65

65:                                               ; preds = %60
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %208

66:                                               ; preds = %1
  %67 = landingpad { ptr, i32 }
          cleanup
  %68 = extractvalue { ptr, i32 } %67, 0
  store ptr %68, ptr %12, align 8
  %69 = extractvalue { ptr, i32 } %67, 1
  store i32 %69, ptr %13, align 4
  br label %1484

70:                                               ; preds = %46
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %12, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %13, align 4
  br label %1483

74:                                               ; preds = %1479, %1477, %1475, %1471, %1469, %1467, %1463, %1461, %1459, %1455, %1453, %1451, %1447, %1445, %1443, %1441, %1439, %1437, %1435, %1433, %1432, %1431, %1428, %1426, %1424, %1419, %1417, %1415, %1412, %1410, %1408, %1405, %1403, %1401, %1399, %1390, %1384, %1382, %1380, %1377, %1375, %1373, %1370, %1368, %1366, %1363, %1361, %1359, %1352, %1243, %1241, %1239, %1236, %1234, %1232, %1229, %1227, %1225, %1222, %1220, %1218, %1211, %1058, %1055, %1053, %1051, %1049, %1046, %1044, %1042, %1040, %1038, %1036, %1034, %1027, %1020, %1018, %1015, %1013, %1011, %1009, %1006, %1004, %1002, %1000, %998, %911, %908, %905, %903, %901, %899, %896, %894, %892, %890, %888, %886, %884, %877, %870, %868, %865, %863, %861, %859, %856, %854, %852, %850, %848, %807, %804, %802, %800, %798, %795, %793, %791, %790, %759, %757, %749, %747, %739, %737, %735, %733, %712, %704, %702, %694, %692, %690, %688, %588, %586, %584, %581, %579, %577, %575, %572, %570, %568, %566, %564, %557, %550, %412, %225, %222, %215, %213, %210, %208, %57, %51, %49, %47
  %75 = landingpad { ptr, i32 }
          cleanup
  %76 = extractvalue { ptr, i32 } %75, 0
  store ptr %76, ptr %12, align 8
  %77 = extractvalue { ptr, i32 } %75, 1
  store i32 %77, ptr %13, align 4
  br label %1482

78:                                               ; preds = %53
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %12, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %13, align 4
  call void @_ZdlPvm(ptr noundef %52, i64 noundef 40) #12
  br label %1482

82:                                               ; preds = %60
  %83 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %84 = load ptr, ptr %83, align 8, !tbaa !18
  %85 = load i64, ptr %23, align 8, !tbaa !16
  %86 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %84, i64 %85
  %87 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !19
  store i32 %88, ptr %5, align 4, !tbaa !24
  %89 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %90 = load ptr, ptr %89, align 8, !tbaa !18
  %91 = load i64, ptr %23, align 8, !tbaa !16
  %92 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %90, i64 %91
  %93 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %92, i32 0, i32 1
  %94 = load i32, ptr %93, align 4, !tbaa !25
  store i32 %94, ptr %6, align 4, !tbaa !24
  %95 = load ptr, ptr %9, align 8, !tbaa !5
  %96 = load i32, ptr %5, align 4, !tbaa !24
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %95, i32 noundef %96, i32 noundef 0)
          to label %98 unwind label %204

98:                                               ; preds = %82
  %99 = load double, ptr %97, align 8, !tbaa !9
  %100 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %101 = load ptr, ptr %100, align 8, !tbaa !18
  %102 = load i64, ptr %23, align 8, !tbaa !16
  %103 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %101, i64 %102
  %104 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %103, i32 0, i32 4
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %104, i32 noundef 0)
          to label %106 unwind label %204

106:                                              ; preds = %98
  %107 = load double, ptr %105, align 8, !tbaa !9
  %108 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %109 = load ptr, ptr %108, align 8, !tbaa !18
  %110 = load i64, ptr %23, align 8, !tbaa !16
  %111 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %109, i64 %110
  %112 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %111, i32 0, i32 5
  %113 = load double, ptr %112, align 8, !tbaa !26
  %114 = call double @llvm.fmuladd.f64(double %107, double %113, double %99)
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = load i32, ptr %5, align 4, !tbaa !24
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %115, i32 noundef %116, i32 noundef 0)
          to label %118 unwind label %204

118:                                              ; preds = %106
  store double %114, ptr %117, align 8, !tbaa !9
  %119 = load ptr, ptr %9, align 8, !tbaa !5
  %120 = load i32, ptr %5, align 4, !tbaa !24
  %121 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %119, i32 noundef %120, i32 noundef 1)
          to label %122 unwind label %204

122:                                              ; preds = %118
  %123 = load double, ptr %121, align 8, !tbaa !9
  %124 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %125 = load ptr, ptr %124, align 8, !tbaa !18
  %126 = load i64, ptr %23, align 8, !tbaa !16
  %127 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %125, i64 %126
  %128 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %127, i32 0, i32 4
  %129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %128, i32 noundef 1)
          to label %130 unwind label %204

130:                                              ; preds = %122
  %131 = load double, ptr %129, align 8, !tbaa !9
  %132 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %133 = load ptr, ptr %132, align 8, !tbaa !18
  %134 = load i64, ptr %23, align 8, !tbaa !16
  %135 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %133, i64 %134
  %136 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %135, i32 0, i32 5
  %137 = load double, ptr %136, align 8, !tbaa !26
  %138 = call double @llvm.fmuladd.f64(double %131, double %137, double %123)
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load i32, ptr %5, align 4, !tbaa !24
  %141 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %139, i32 noundef %140, i32 noundef 1)
          to label %142 unwind label %204

142:                                              ; preds = %130
  store double %138, ptr %141, align 8, !tbaa !9
  %143 = load ptr, ptr %9, align 8, !tbaa !5
  %144 = load i32, ptr %6, align 4, !tbaa !24
  %145 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %143, i32 noundef %144, i32 noundef 0)
          to label %146 unwind label %204

146:                                              ; preds = %142
  %147 = load double, ptr %145, align 8, !tbaa !9
  %148 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %149 = load ptr, ptr %148, align 8, !tbaa !18
  %150 = load i64, ptr %23, align 8, !tbaa !16
  %151 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %149, i64 %150
  %152 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %151, i32 0, i32 4
  %153 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %152, i32 noundef 0)
          to label %154 unwind label %204

154:                                              ; preds = %146
  %155 = load double, ptr %153, align 8, !tbaa !9
  %156 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %157 = load ptr, ptr %156, align 8, !tbaa !18
  %158 = load i64, ptr %23, align 8, !tbaa !16
  %159 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %157, i64 %158
  %160 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %159, i32 0, i32 5
  %161 = load double, ptr %160, align 8, !tbaa !26
  %162 = fneg double %155
  %163 = call double @llvm.fmuladd.f64(double %162, double %161, double %147)
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = load i32, ptr %6, align 4, !tbaa !24
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %164, i32 noundef %165, i32 noundef 0)
          to label %167 unwind label %204

167:                                              ; preds = %154
  store double %163, ptr %166, align 8, !tbaa !9
  %168 = load ptr, ptr %9, align 8, !tbaa !5
  %169 = load i32, ptr %6, align 4, !tbaa !24
  %170 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %168, i32 noundef %169, i32 noundef 1)
          to label %171 unwind label %204

171:                                              ; preds = %167
  %172 = load double, ptr %170, align 8, !tbaa !9
  %173 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %174 = load ptr, ptr %173, align 8, !tbaa !18
  %175 = load i64, ptr %23, align 8, !tbaa !16
  %176 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %174, i64 %175
  %177 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %176, i32 0, i32 4
  %178 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %177, i32 noundef 1)
          to label %179 unwind label %204

179:                                              ; preds = %171
  %180 = load double, ptr %178, align 8, !tbaa !9
  %181 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %182 = load ptr, ptr %181, align 8, !tbaa !18
  %183 = load i64, ptr %23, align 8, !tbaa !16
  %184 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %182, i64 %183
  %185 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %184, i32 0, i32 5
  %186 = load double, ptr %185, align 8, !tbaa !26
  %187 = fneg double %180
  %188 = call double @llvm.fmuladd.f64(double %187, double %186, double %172)
  %189 = load ptr, ptr %9, align 8, !tbaa !5
  %190 = load i32, ptr %6, align 4, !tbaa !24
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %189, i32 noundef %190, i32 noundef 1)
          to label %192 unwind label %204

192:                                              ; preds = %179
  store double %188, ptr %191, align 8, !tbaa !9
  %193 = load double, ptr %17, align 8, !tbaa !9
  %194 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 28
  %195 = load ptr, ptr %194, align 8, !tbaa !18
  %196 = load i64, ptr %23, align 8, !tbaa !16
  %197 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %195, i64 %196
  %198 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %197, i32 0, i32 5
  %199 = load double, ptr %198, align 8, !tbaa !26
  %200 = fadd double %193, %199
  store double %200, ptr %17, align 8, !tbaa !9
  br label %201

201:                                              ; preds = %192
  %202 = load i64, ptr %23, align 8, !tbaa !16
  %203 = add i64 %202, 1
  store i64 %203, ptr %23, align 8, !tbaa !16
  br label %60, !llvm.loop !27

204:                                              ; preds = %179, %171, %167, %154, %146, %142, %130, %122, %118, %106, %98, %82
  %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
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %1482

208:                                              ; preds = %65
  %209 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.68)
          to label %210 unwind label %74

210:                                              ; preds = %208
  %211 = load double, ptr %17, align 8, !tbaa !9
  %212 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %209, double noundef %211)
          to label %213 unwind label %74

213:                                              ; preds = %210
  %214 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %215 unwind label %74

215:                                              ; preds = %213
  %216 = load double, ptr %17, align 8, !tbaa !9
  %217 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 27
  %218 = load i64, ptr %217, align 8, !tbaa !17
  %219 = uitofp i64 %218 to double
  %220 = fdiv double %216, %219
  store double %220, ptr %17, align 8, !tbaa !9
  %221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.69)
          to label %222 unwind label %74

222:                                              ; preds = %215
  %223 = load double, ptr %17, align 8, !tbaa !9
  %224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %221, double noundef %223)
          to label %225 unwind label %74

225:                                              ; preds = %222
  %226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %224, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %227 unwind label %74

227:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #10
  store i64 0, ptr %24, align 8, !tbaa !16
  br label %228

228:                                              ; preds = %409, %227
  %229 = load i64, ptr %24, align 8, !tbaa !16
  %230 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 29
  %231 = load i64, ptr %230, align 8, !tbaa !29
  %232 = icmp ult i64 %229, %231
  br i1 %232, label %234, label %233

233:                                              ; preds = %228
  store i32 5, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  br label %412

234:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  store i64 0, ptr %26, align 8, !tbaa !16
  br label %235

235:                                              ; preds = %401, %234
  %236 = load i64, ptr %26, align 8, !tbaa !16
  %237 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %238 = load ptr, ptr %237, align 8, !tbaa !30
  %239 = load i64, ptr %24, align 8, !tbaa !16
  %240 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %238, i64 %239
  %241 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %240, i32 0, i32 3
  %242 = load i64, ptr %241, align 8, !tbaa !31
  %243 = icmp ult i64 %236, %242
  br i1 %243, label %245, label %244

244:                                              ; preds = %235
  store i32 8, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %408

245:                                              ; preds = %235
  %246 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %247 = load ptr, ptr %246, align 8, !tbaa !30
  %248 = load i64, ptr %24, align 8, !tbaa !16
  %249 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %247, i64 %248
  %250 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %249, i32 0, i32 2
  %251 = load ptr, ptr %250, align 8, !tbaa !33
  %252 = load i64, ptr %26, align 8, !tbaa !16
  %253 = trunc i64 %252 to i32
  %254 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %251, i32 noundef %253)
          to label %255 unwind label %404

255:                                              ; preds = %245
  %256 = load i32, ptr %254, align 4, !tbaa !24
  store i32 %256, ptr %5, align 4, !tbaa !24
  %257 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %258 = load ptr, ptr %257, align 8, !tbaa !30
  %259 = load i64, ptr %24, align 8, !tbaa !16
  %260 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %258, i64 %259
  %261 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %260, i32 0, i32 2
  %262 = load ptr, ptr %261, align 8, !tbaa !33
  %263 = load i64, ptr %26, align 8, !tbaa !16
  %264 = add i64 %263, 1
  %265 = trunc i64 %264 to i32
  %266 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %262, i32 noundef %265)
          to label %267 unwind label %404

267:                                              ; preds = %255
  %268 = load i32, ptr %266, align 4, !tbaa !24
  store i32 %268, ptr %6, align 4, !tbaa !24
  %269 = load ptr, ptr %9, align 8, !tbaa !5
  %270 = load i32, ptr %5, align 4, !tbaa !24
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %269, i32 noundef %270, i32 noundef 0)
          to label %272 unwind label %404

272:                                              ; preds = %267
  %273 = load double, ptr %271, align 8, !tbaa !9
  %274 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %275 = load ptr, ptr %274, align 8, !tbaa !30
  %276 = load i64, ptr %24, align 8, !tbaa !16
  %277 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %275, i64 %276
  %278 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %277, i32 0, i32 4
  %279 = load ptr, ptr %278, align 8, !tbaa !34
  %280 = load i64, ptr %26, align 8, !tbaa !16
  %281 = trunc i64 %280 to i32
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %279, i32 noundef %281)
          to label %283 unwind label %404

283:                                              ; preds = %272
  %284 = load double, ptr %282, align 8, !tbaa !9
  %285 = fmul double 5.000000e-01, %284
  %286 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %287 = load ptr, ptr %286, align 8, !tbaa !30
  %288 = load i64, ptr %24, align 8, !tbaa !16
  %289 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %287, i64 %288
  %290 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %289, i32 0, i32 6
  %291 = load ptr, ptr %290, align 8, !tbaa !35
  %292 = load i64, ptr %26, align 8, !tbaa !16
  %293 = trunc i64 %292 to i32
  %294 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %291, i32 noundef %293)
          to label %295 unwind label %404

295:                                              ; preds = %283
  %296 = load double, ptr %294, align 8, !tbaa !9
  %297 = call double @llvm.fmuladd.f64(double %285, double %296, double %273)
  %298 = load ptr, ptr %9, align 8, !tbaa !5
  %299 = load i32, ptr %5, align 4, !tbaa !24
  %300 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %298, i32 noundef %299, i32 noundef 0)
          to label %301 unwind label %404

301:                                              ; preds = %295
  store double %297, ptr %300, align 8, !tbaa !9
  %302 = load ptr, ptr %9, align 8, !tbaa !5
  %303 = load i32, ptr %5, align 4, !tbaa !24
  %304 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %302, i32 noundef %303, i32 noundef 1)
          to label %305 unwind label %404

305:                                              ; preds = %301
  %306 = load double, ptr %304, align 8, !tbaa !9
  %307 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %308 = load ptr, ptr %307, align 8, !tbaa !30
  %309 = load i64, ptr %24, align 8, !tbaa !16
  %310 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %308, i64 %309
  %311 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %310, i32 0, i32 5
  %312 = load ptr, ptr %311, align 8, !tbaa !36
  %313 = load i64, ptr %26, align 8, !tbaa !16
  %314 = trunc i64 %313 to i32
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %312, i32 noundef %314)
          to label %316 unwind label %404

316:                                              ; preds = %305
  %317 = load double, ptr %315, align 8, !tbaa !9
  %318 = fmul double 5.000000e-01, %317
  %319 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %320 = load ptr, ptr %319, align 8, !tbaa !30
  %321 = load i64, ptr %24, align 8, !tbaa !16
  %322 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %320, i64 %321
  %323 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %322, i32 0, i32 6
  %324 = load ptr, ptr %323, align 8, !tbaa !35
  %325 = load i64, ptr %26, align 8, !tbaa !16
  %326 = trunc i64 %325 to i32
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %324, i32 noundef %326)
          to label %328 unwind label %404

328:                                              ; preds = %316
  %329 = load double, ptr %327, align 8, !tbaa !9
  %330 = call double @llvm.fmuladd.f64(double %318, double %329, double %306)
  %331 = load ptr, ptr %9, align 8, !tbaa !5
  %332 = load i32, ptr %5, align 4, !tbaa !24
  %333 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %331, i32 noundef %332, i32 noundef 1)
          to label %334 unwind label %404

334:                                              ; preds = %328
  store double %330, ptr %333, align 8, !tbaa !9
  %335 = load ptr, ptr %9, align 8, !tbaa !5
  %336 = load i32, ptr %6, align 4, !tbaa !24
  %337 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %335, i32 noundef %336, i32 noundef 0)
          to label %338 unwind label %404

338:                                              ; preds = %334
  %339 = load double, ptr %337, align 8, !tbaa !9
  %340 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %341 = load ptr, ptr %340, align 8, !tbaa !30
  %342 = load i64, ptr %24, align 8, !tbaa !16
  %343 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %341, i64 %342
  %344 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %343, i32 0, i32 4
  %345 = load ptr, ptr %344, align 8, !tbaa !34
  %346 = load i64, ptr %26, align 8, !tbaa !16
  %347 = trunc i64 %346 to i32
  %348 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %345, i32 noundef %347)
          to label %349 unwind label %404

349:                                              ; preds = %338
  %350 = load double, ptr %348, align 8, !tbaa !9
  %351 = fmul double 5.000000e-01, %350
  %352 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %353 = load ptr, ptr %352, align 8, !tbaa !30
  %354 = load i64, ptr %24, align 8, !tbaa !16
  %355 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %353, i64 %354
  %356 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %355, i32 0, i32 6
  %357 = load ptr, ptr %356, align 8, !tbaa !35
  %358 = load i64, ptr %26, align 8, !tbaa !16
  %359 = trunc i64 %358 to i32
  %360 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %357, i32 noundef %359)
          to label %361 unwind label %404

361:                                              ; preds = %349
  %362 = load double, ptr %360, align 8, !tbaa !9
  %363 = call double @llvm.fmuladd.f64(double %351, double %362, double %339)
  %364 = load ptr, ptr %9, align 8, !tbaa !5
  %365 = load i32, ptr %6, align 4, !tbaa !24
  %366 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %364, i32 noundef %365, i32 noundef 0)
          to label %367 unwind label %404

367:                                              ; preds = %361
  store double %363, ptr %366, align 8, !tbaa !9
  %368 = load ptr, ptr %9, align 8, !tbaa !5
  %369 = load i32, ptr %6, align 4, !tbaa !24
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %368, i32 noundef %369, i32 noundef 1)
          to label %371 unwind label %404

371:                                              ; preds = %367
  %372 = load double, ptr %370, align 8, !tbaa !9
  %373 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %374 = load ptr, ptr %373, align 8, !tbaa !30
  %375 = load i64, ptr %24, align 8, !tbaa !16
  %376 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %374, i64 %375
  %377 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %376, i32 0, i32 5
  %378 = load ptr, ptr %377, align 8, !tbaa !36
  %379 = load i64, ptr %26, align 8, !tbaa !16
  %380 = trunc i64 %379 to i32
  %381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %378, i32 noundef %380)
          to label %382 unwind label %404

382:                                              ; preds = %371
  %383 = load double, ptr %381, align 8, !tbaa !9
  %384 = fmul double 5.000000e-01, %383
  %385 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %386 = load ptr, ptr %385, align 8, !tbaa !30
  %387 = load i64, ptr %24, align 8, !tbaa !16
  %388 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %386, i64 %387
  %389 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %388, i32 0, i32 6
  %390 = load ptr, ptr %389, align 8, !tbaa !35
  %391 = load i64, ptr %26, align 8, !tbaa !16
  %392 = trunc i64 %391 to i32
  %393 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %390, i32 noundef %392)
          to label %394 unwind label %404

394:                                              ; preds = %382
  %395 = load double, ptr %393, align 8, !tbaa !9
  %396 = call double @llvm.fmuladd.f64(double %384, double %395, double %372)
  %397 = load ptr, ptr %9, align 8, !tbaa !5
  %398 = load i32, ptr %6, align 4, !tbaa !24
  %399 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %397, i32 noundef %398, i32 noundef 1)
          to label %400 unwind label %404

400:                                              ; preds = %394
  store double %396, ptr %399, align 8, !tbaa !9
  br label %401

401:                                              ; preds = %400
  %402 = load i64, ptr %26, align 8, !tbaa !16
  %403 = add i64 %402, 1
  store i64 %403, ptr %26, align 8, !tbaa !16
  br label %235, !llvm.loop !37

404:                                              ; preds = %394, %382, %371, %367, %361, %349, %338, %334, %328, %316, %305, %301, %295, %283, %272, %267, %255, %245
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %12, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #10
  br label %1482

408:                                              ; preds = %244
  br label %409

409:                                              ; preds = %408
  %410 = load i64, ptr %24, align 8, !tbaa !16
  %411 = add i64 %410, 1
  store i64 %411, ptr %24, align 8, !tbaa !16
  br label %228, !llvm.loop !38

412:                                              ; preds = %233
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %27, ptr noundef nonnull align 8 dereferenceable(40) %11, double noundef 0.000000e+00)
          to label %413 unwind label %74

413:                                              ; preds = %412
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %27) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  store i64 0, ptr %28, align 8, !tbaa !16
  br label %414

414:                                              ; preds = %547, %413
  %415 = load i64, ptr %28, align 8, !tbaa !16
  %416 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 29
  %417 = load i64, ptr %416, align 8, !tbaa !29
  %418 = icmp ult i64 %415, %417
  br i1 %418, label %420, label %419

419:                                              ; preds = %414
  store i32 11, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %550

420:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  store i64 0, ptr %29, align 8, !tbaa !16
  br label %421

421:                                              ; preds = %534, %420
  %422 = load i64, ptr %29, align 8, !tbaa !16
  %423 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %424 = load ptr, ptr %423, align 8, !tbaa !30
  %425 = load i64, ptr %28, align 8, !tbaa !16
  %426 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %424, i64 %425
  %427 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %426, i32 0, i32 1
  %428 = load i64, ptr %427, align 8, !tbaa !39
  %429 = icmp ult i64 %422, %428
  br i1 %429, label %431, label %430

430:                                              ; preds = %421
  store i32 14, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %537

431:                                              ; preds = %421
  %432 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %433 = load ptr, ptr %432, align 8, !tbaa !30
  %434 = load i64, ptr %28, align 8, !tbaa !16
  %435 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %433, i64 %434
  %436 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %435, i32 0, i32 2
  %437 = load ptr, ptr %436, align 8, !tbaa !33
  %438 = load i64, ptr %29, align 8, !tbaa !16
  %439 = trunc i64 %438 to i32
  %440 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %437, i32 noundef %439)
          to label %441 unwind label %458

441:                                              ; preds = %431
  %442 = load i32, ptr %440, align 4, !tbaa !24
  store i32 %442, ptr %8, align 4, !tbaa !24
  %443 = load i64, ptr %29, align 8, !tbaa !16
  %444 = icmp ugt i64 %443, 0
  br i1 %444, label %445, label %462

445:                                              ; preds = %441
  %446 = load i32, ptr %8, align 4, !tbaa !24
  %447 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %448 = load ptr, ptr %447, align 8, !tbaa !30
  %449 = load i64, ptr %28, align 8, !tbaa !16
  %450 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %448, i64 %449
  %451 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %450, i32 0, i32 2
  %452 = load ptr, ptr %451, align 8, !tbaa !33
  %453 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %452, i32 noundef 0)
          to label %454 unwind label %458

454:                                              ; preds = %445
  %455 = load i32, ptr %453, align 4, !tbaa !24
  %456 = icmp eq i32 %446, %455
  br i1 %456, label %457, label %462

457:                                              ; preds = %454
  br label %534

458:                                              ; preds = %529, %518, %514, %503, %492, %490, %486, %475, %464, %462, %445, %431
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %12, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  br label %1482

462:                                              ; preds = %454, %441
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %464 unwind label %458

464:                                              ; preds = %462
  %465 = load double, ptr %463, align 8, !tbaa !9
  %466 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %467 = load ptr, ptr %466, align 8, !tbaa !30
  %468 = load i64, ptr %28, align 8, !tbaa !16
  %469 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %467, i64 %468
  %470 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %469, i32 0, i32 7
  %471 = load ptr, ptr %470, align 8, !tbaa !40
  %472 = load i64, ptr %29, align 8, !tbaa !16
  %473 = trunc i64 %472 to i32
  %474 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %471, i32 noundef %473)
          to label %475 unwind label %458

475:                                              ; preds = %464
  %476 = load double, ptr %474, align 8, !tbaa !9
  %477 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %478 = load ptr, ptr %477, align 8, !tbaa !30
  %479 = load i64, ptr %28, align 8, !tbaa !16
  %480 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %478, i64 %479
  %481 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %480, i32 0, i32 9
  %482 = load ptr, ptr %481, align 8, !tbaa !41
  %483 = load i64, ptr %29, align 8, !tbaa !16
  %484 = trunc i64 %483 to i32
  %485 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %482, i32 noundef %484)
          to label %486 unwind label %458

486:                                              ; preds = %475
  %487 = load double, ptr %485, align 8, !tbaa !9
  %488 = call double @llvm.fmuladd.f64(double %476, double %487, double %465)
  %489 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %490 unwind label %458

490:                                              ; preds = %486
  store double %488, ptr %489, align 8, !tbaa !9
  %491 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %492 unwind label %458

492:                                              ; preds = %490
  %493 = load double, ptr %491, align 8, !tbaa !9
  %494 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %495 = load ptr, ptr %494, align 8, !tbaa !30
  %496 = load i64, ptr %28, align 8, !tbaa !16
  %497 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %495, i64 %496
  %498 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %497, i32 0, i32 8
  %499 = load ptr, ptr %498, align 8, !tbaa !42
  %500 = load i64, ptr %29, align 8, !tbaa !16
  %501 = trunc i64 %500 to i32
  %502 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %499, i32 noundef %501)
          to label %503 unwind label %458

503:                                              ; preds = %492
  %504 = load double, ptr %502, align 8, !tbaa !9
  %505 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %506 = load ptr, ptr %505, align 8, !tbaa !30
  %507 = load i64, ptr %28, align 8, !tbaa !16
  %508 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %506, i64 %507
  %509 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %508, i32 0, i32 9
  %510 = load ptr, ptr %509, align 8, !tbaa !41
  %511 = load i64, ptr %29, align 8, !tbaa !16
  %512 = trunc i64 %511 to i32
  %513 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %510, i32 noundef %512)
          to label %514 unwind label %458

514:                                              ; preds = %503
  %515 = load double, ptr %513, align 8, !tbaa !9
  %516 = call double @llvm.fmuladd.f64(double %504, double %515, double %493)
  %517 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %518 unwind label %458

518:                                              ; preds = %514
  store double %516, ptr %517, align 8, !tbaa !9
  %519 = load double, ptr %18, align 8, !tbaa !9
  %520 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %521 = load ptr, ptr %520, align 8, !tbaa !30
  %522 = load i64, ptr %28, align 8, !tbaa !16
  %523 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %521, i64 %522
  %524 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %523, i32 0, i32 9
  %525 = load ptr, ptr %524, align 8, !tbaa !41
  %526 = load i64, ptr %29, align 8, !tbaa !16
  %527 = trunc i64 %526 to i32
  %528 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %525, i32 noundef %527)
          to label %529 unwind label %458

529:                                              ; preds = %518
  %530 = load double, ptr %528, align 8, !tbaa !9
  %531 = invoke noundef double @_ZSt3absd(double noundef %530)
          to label %532 unwind label %458

532:                                              ; preds = %529
  %533 = fadd double %519, %531
  store double %533, ptr %18, align 8, !tbaa !9
  br label %534

534:                                              ; preds = %532, %457
  %535 = load i64, ptr %29, align 8, !tbaa !16
  %536 = add i64 %535, 1
  store i64 %536, ptr %29, align 8, !tbaa !16
  br label %421, !llvm.loop !43

537:                                              ; preds = %430
  %538 = load double, ptr %18, align 8, !tbaa !9
  %539 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %540 = load ptr, ptr %539, align 8, !tbaa !30
  %541 = load i64, ptr %28, align 8, !tbaa !16
  %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 = load i64, ptr %543, align 8, !tbaa !39
  %545 = uitofp i64 %544 to double
  %546 = fdiv double %538, %545
  store double %546, ptr %18, align 8, !tbaa !9
  br label %547

547:                                              ; preds = %537
  %548 = load i64, ptr %28, align 8, !tbaa !16
  %549 = add i64 %548, 1
  store i64 %549, ptr %28, align 8, !tbaa !16
  br label %414, !llvm.loop !44

550:                                              ; preds = %419
  %551 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %552 unwind label %74

552:                                              ; preds = %550
  %553 = load double, ptr %551, align 8, !tbaa !9
  %554 = load double, ptr %18, align 8, !tbaa !9
  %555 = fmul double 0x3D719799812DEA11, %554
  %556 = fcmp ogt double %553, %555
  br i1 %556, label %557, label %591

557:                                              ; preds = %552
  %558 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %559 unwind label %74

559:                                              ; preds = %557
  %560 = load double, ptr %558, align 8, !tbaa !9
  %561 = load double, ptr %18, align 8, !tbaa !9
  %562 = fmul double 0x3D719799812DEA11, %561
  %563 = fcmp ogt double %560, %562
  br i1 %563, label %564, label %591

564:                                              ; preds = %559
  %565 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.70)
          to label %566 unwind label %74

566:                                              ; preds = %564
  %567 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %565, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %568 unwind label %74

568:                                              ; preds = %566
  %569 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.71)
          to label %570 unwind label %74

570:                                              ; preds = %568
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %572 unwind label %74

572:                                              ; preds = %570
  %573 = load double, ptr %571, align 8, !tbaa !9
  %574 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %569, double noundef %573)
          to label %575 unwind label %74

575:                                              ; preds = %572
  %576 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %574, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %577 unwind label %74

577:                                              ; preds = %575
  %578 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.72)
          to label %579 unwind label %74

579:                                              ; preds = %577
  %580 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %581 unwind label %74

581:                                              ; preds = %579
  %582 = load double, ptr %580, align 8, !tbaa !9
  %583 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %578, double noundef %582)
          to label %584 unwind label %74

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

586:                                              ; preds = %584
  %587 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.73)
          to label %588 unwind label %74

588:                                              ; preds = %586
  %589 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %587, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %590 unwind label %74

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

591:                                              ; preds = %559, %552
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  store i64 0, ptr %30, align 8, !tbaa !16
  br label %592

592:                                              ; preds = %685, %591
  %593 = load i64, ptr %30, align 8, !tbaa !16
  %594 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 21
  %595 = load i64, ptr %594, align 8, !tbaa !11
  %596 = icmp ult i64 %593, %595
  br i1 %596, label %598, label %597

597:                                              ; preds = %592
  store i32 17, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %688

598:                                              ; preds = %592
  %599 = load ptr, ptr %9, align 8, !tbaa !5
  %600 = load i64, ptr %30, align 8, !tbaa !16
  %601 = trunc i64 %600 to i32
  %602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %599, i32 noundef %601, i32 noundef 0)
          to label %603 unwind label %680

603:                                              ; preds = %598
  %604 = load double, ptr %602, align 8, !tbaa !9
  %605 = invoke noundef double @_ZSt3absd(double noundef %604)
          to label %606 unwind label %680

606:                                              ; preds = %603
  %607 = load double, ptr %17, align 8, !tbaa !9
  %608 = fmul double 1.000000e-04, %607
  %609 = fcmp ogt double %605, %608
  br i1 %609, label %622, label %610

610:                                              ; preds = %606
  %611 = load ptr, ptr %9, align 8, !tbaa !5
  %612 = load i64, ptr %30, align 8, !tbaa !16
  %613 = trunc i64 %612 to i32
  %614 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %611, i32 noundef %613, i32 noundef 1)
          to label %615 unwind label %680

615:                                              ; preds = %610
  %616 = load double, ptr %614, align 8, !tbaa !9
  %617 = invoke noundef double @_ZSt3absd(double noundef %616)
          to label %618 unwind label %680

618:                                              ; preds = %615
  %619 = load double, ptr %17, align 8, !tbaa !9
  %620 = fmul double 1.000000e-04, %619
  %621 = fcmp ogt double %617, %620
  br i1 %621, label %622, label %684

622:                                              ; preds = %618, %606
  %623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.74)
          to label %624 unwind label %680

624:                                              ; preds = %622
  %625 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.75)
          to label %626 unwind label %680

626:                                              ; preds = %624
  %627 = load i64, ptr %30, align 8, !tbaa !16
  %628 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %625, i64 noundef %627)
          to label %629 unwind label %680

629:                                              ; preds = %626
  %630 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %628, ptr noundef @.str.14)
          to label %631 unwind label %680

631:                                              ; preds = %629
  %632 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %630, ptr noundef @.str.76)
          to label %633 unwind label %680

633:                                              ; preds = %631
  %634 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %635 = load ptr, ptr %634, align 8, !tbaa !45
  %636 = load i64, ptr %30, align 8, !tbaa !16
  %637 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %635, i64 %636
  %638 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %637, i32 0, i32 0
  %639 = load double, ptr %638, align 8, !tbaa !46
  %640 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %632, double noundef %639)
          to label %641 unwind label %680

641:                                              ; preds = %633
  %642 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %640, ptr noundef @.str.77)
          to label %643 unwind label %680

643:                                              ; preds = %641
  %644 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %645 = load ptr, ptr %644, align 8, !tbaa !45
  %646 = load i64, ptr %30, align 8, !tbaa !16
  %647 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %645, i64 %646
  %648 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %647, i32 0, i32 1
  %649 = load double, ptr %648, align 8, !tbaa !53
  %650 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %642, double noundef %649)
          to label %651 unwind label %680

651:                                              ; preds = %643
  %652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %650, ptr noundef @.str.14)
          to label %653 unwind label %680

653:                                              ; preds = %651
  %654 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %652, ptr noundef @.str.78)
          to label %655 unwind label %680

655:                                              ; preds = %653
  %656 = load ptr, ptr %9, align 8, !tbaa !5
  %657 = load i64, ptr %30, align 8, !tbaa !16
  %658 = trunc i64 %657 to i32
  %659 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %656, i32 noundef %658, i32 noundef 0)
          to label %660 unwind label %680

660:                                              ; preds = %655
  %661 = load double, ptr %659, align 8, !tbaa !9
  %662 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %654, double noundef %661)
          to label %663 unwind label %680

663:                                              ; preds = %660
  %664 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %662, ptr noundef @.str.77)
          to label %665 unwind label %680

665:                                              ; preds = %663
  %666 = load ptr, ptr %9, align 8, !tbaa !5
  %667 = load i64, ptr %30, align 8, !tbaa !16
  %668 = trunc i64 %667 to i32
  %669 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %666, i32 noundef %668, i32 noundef 1)
          to label %670 unwind label %680

670:                                              ; preds = %665
  %671 = load double, ptr %669, align 8, !tbaa !9
  %672 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %664, double noundef %671)
          to label %673 unwind label %680

673:                                              ; preds = %670
  %674 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %672, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %675 unwind label %680

675:                                              ; preds = %673
  %676 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.79)
          to label %677 unwind label %680

677:                                              ; preds = %675
  %678 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %676, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %679 unwind label %680

679:                                              ; preds = %677
  br label %684

680:                                              ; preds = %677, %675, %673, %670, %665, %663, %660, %655, %653, %651, %643, %641, %633, %631, %629, %626, %624, %622, %615, %610, %603, %598
  %681 = landingpad { ptr, i32 }
          cleanup
  %682 = extractvalue { ptr, i32 } %681, 0
  store ptr %682, ptr %12, align 8
  %683 = extractvalue { ptr, i32 } %681, 1
  store i32 %683, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %1482

684:                                              ; preds = %679, %618
  br label %685

685:                                              ; preds = %684
  %686 = load i64, ptr %30, align 8, !tbaa !16
  %687 = add i64 %686, 1
  store i64 %687, ptr %30, align 8, !tbaa !16
  br label %592, !llvm.loop !54

688:                                              ; preds = %597
  %689 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.80)
          to label %690 unwind label %74

690:                                              ; preds = %688
  %691 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %689, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %692 unwind label %74

692:                                              ; preds = %690
  %693 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.81)
          to label %694 unwind label %74

694:                                              ; preds = %692
  %695 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %31, ptr noundef nonnull align 8 dereferenceable(40) %695)
          to label %696 unwind label %74

696:                                              ; preds = %694
  %697 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %31, i32 noundef 0)
          to label %698 unwind label %762

698:                                              ; preds = %696
  %699 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %693, double noundef %697)
          to label %700 unwind label %762

700:                                              ; preds = %698
  %701 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %699, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %702 unwind label %762

702:                                              ; preds = %700
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %31) #10
  %703 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.82)
          to label %704 unwind label %74

704:                                              ; preds = %702
  %705 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(40) %705)
          to label %706 unwind label %74

706:                                              ; preds = %704
  %707 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %32, i32 noundef 1)
          to label %708 unwind label %766

708:                                              ; preds = %706
  %709 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %703, double noundef %707)
          to label %710 unwind label %766

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

712:                                              ; preds = %710
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #10
  %713 = load ptr, ptr %9, align 8, !tbaa !5
  store i1 false, ptr %35, align 1
  invoke void @_Z3absIdE7Array2DIT_ERS2_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %33, ptr noundef nonnull align 8 dereferenceable(40) %713)
          to label %714 unwind label %74

714:                                              ; preds = %712
  %715 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %33, i32 noundef 0)
          to label %716 unwind label %770

716:                                              ; preds = %714
  %717 = load double, ptr %17, align 8, !tbaa !9
  %718 = fmul double 0x3D719799812DEA11, %717
  %719 = fcmp ogt double %715, %718
  br i1 %719, label %728, label %720

720:                                              ; preds = %716
  %721 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_Z3absIdE7Array2DIT_ERS2_(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %34, ptr noundef nonnull align 8 dereferenceable(40) %721)
          to label %722 unwind label %770

722:                                              ; preds = %720
  store i1 true, ptr %35, align 1
  %723 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %34, i32 noundef 1)
          to label %724 unwind label %774

724:                                              ; preds = %722
  %725 = load double, ptr %17, align 8, !tbaa !9
  %726 = fmul double 0x3D719799812DEA11, %725
  %727 = fcmp ogt double %723, %726
  br label %728

728:                                              ; preds = %724, %716
  %729 = phi i1 [ true, %716 ], [ %727, %724 ]
  %730 = load i1, ptr %35, align 1
  br i1 %730, label %731, label %732

731:                                              ; preds = %728
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #10
  br label %732

732:                                              ; preds = %731, %728
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #10
  br i1 %729, label %733, label %790

733:                                              ; preds = %732
  %734 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.80)
          to label %735 unwind label %74

735:                                              ; preds = %733
  %736 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %734, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %737 unwind label %74

737:                                              ; preds = %735
  %738 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.81)
          to label %739 unwind label %74

739:                                              ; preds = %737
  %740 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %36, ptr noundef nonnull align 8 dereferenceable(40) %740)
          to label %741 unwind label %74

741:                                              ; preds = %739
  %742 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %36, i32 noundef 0)
          to label %743 unwind label %782

743:                                              ; preds = %741
  %744 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %738, double noundef %742)
          to label %745 unwind label %782

745:                                              ; preds = %743
  %746 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %744, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %747 unwind label %782

747:                                              ; preds = %745
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %36) #10
  %748 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.82)
          to label %749 unwind label %74

749:                                              ; preds = %747
  %750 = load ptr, ptr %9, align 8, !tbaa !5
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %37, ptr noundef nonnull align 8 dereferenceable(40) %750)
          to label %751 unwind label %74

751:                                              ; preds = %749
  %752 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef %37, i32 noundef 1)
          to label %753 unwind label %786

753:                                              ; preds = %751
  %754 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %748, double noundef %752)
          to label %755 unwind label %786

755:                                              ; preds = %753
  %756 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %754, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %757 unwind label %786

757:                                              ; preds = %755
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  %758 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.83)
          to label %759 unwind label %74

759:                                              ; preds = %757
  %760 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %758, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %761 unwind label %74

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

762:                                              ; preds = %700, %698, %696
  %763 = landingpad { ptr, i32 }
          cleanup
  %764 = extractvalue { ptr, i32 } %763, 0
  store ptr %764, ptr %12, align 8
  %765 = extractvalue { ptr, i32 } %763, 1
  store i32 %765, ptr %13, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %31) #10
  br label %1482

766:                                              ; preds = %710, %708, %706
  %767 = landingpad { ptr, i32 }
          cleanup
  %768 = extractvalue { ptr, i32 } %767, 0
  store ptr %768, ptr %12, align 8
  %769 = extractvalue { ptr, i32 } %767, 1
  store i32 %769, ptr %13, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #10
  br label %1482

770:                                              ; preds = %720, %714
  %771 = landingpad { ptr, i32 }
          cleanup
  %772 = extractvalue { ptr, i32 } %771, 0
  store ptr %772, ptr %12, align 8
  %773 = extractvalue { ptr, i32 } %771, 1
  store i32 %773, ptr %13, align 4
  br label %781

774:                                              ; preds = %722
  %775 = landingpad { ptr, i32 }
          cleanup
  %776 = extractvalue { ptr, i32 } %775, 0
  store ptr %776, ptr %12, align 8
  %777 = extractvalue { ptr, i32 } %775, 1
  store i32 %777, ptr %13, align 4
  %778 = load i1, ptr %35, align 1
  br i1 %778, label %779, label %780

779:                                              ; preds = %774
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #10
  br label %780

780:                                              ; preds = %779, %774
  br label %781

781:                                              ; preds = %780, %770
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #10
  br label %1482

782:                                              ; preds = %745, %743, %741
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %12, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %13, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %36) #10
  br label %1482

786:                                              ; preds = %755, %753, %751
  %787 = landingpad { ptr, i32 }
          cleanup
  %788 = extractvalue { ptr, i32 } %787, 0
  store ptr %788, ptr %12, align 8
  %789 = extractvalue { ptr, i32 } %787, 1
  store i32 %789, ptr %13, align 4
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  br label %1482

790:                                              ; preds = %732
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %38, ptr noundef nonnull align 8 dereferenceable(40) %10, double noundef 0.000000e+00)
          to label %791 unwind label %74

791:                                              ; preds = %790
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  %792 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.84)
          to label %793 unwind label %74

793:                                              ; preds = %791
  %794 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0)
          to label %795 unwind label %74

795:                                              ; preds = %793
  %796 = load double, ptr %794, align 8, !tbaa !9
  %797 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %792, double noundef %796)
          to label %798 unwind label %74

798:                                              ; preds = %795
  %799 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %797, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %800 unwind label %74

800:                                              ; preds = %798
  %801 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.85)
          to label %802 unwind label %74

802:                                              ; preds = %800
  %803 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %804 unwind label %74

804:                                              ; preds = %802
  %805 = load double, ptr %803, align 8, !tbaa !9
  %806 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %801, double noundef %805)
          to label %807 unwind label %74

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

809:                                              ; preds = %807
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  store i64 0, ptr %39, align 8, !tbaa !16
  br label %810

810:                                              ; preds = %841, %809
  %811 = load i64, ptr %39, align 8, !tbaa !16
  %812 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 21
  %813 = load i64, ptr %812, align 8, !tbaa !11
  %814 = icmp ult i64 %811, %813
  br i1 %814, label %816, label %815

815:                                              ; preds = %810
  store i32 20, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %848

816:                                              ; preds = %810
  %817 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0)
          to label %818 unwind label %844

818:                                              ; preds = %816
  %819 = load double, ptr %817, align 8, !tbaa !9
  %820 = load ptr, ptr %9, align 8, !tbaa !5
  %821 = load i64, ptr %39, align 8, !tbaa !16
  %822 = trunc i64 %821 to i32
  %823 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %820, i32 noundef %822, i32 noundef 0)
          to label %824 unwind label %844

824:                                              ; preds = %818
  %825 = load double, ptr %823, align 8, !tbaa !9
  %826 = fadd double %819, %825
  %827 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0)
          to label %828 unwind label %844

828:                                              ; preds = %824
  store double %826, ptr %827, align 8, !tbaa !9
  %829 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %830 unwind label %844

830:                                              ; preds = %828
  %831 = load double, ptr %829, align 8, !tbaa !9
  %832 = load ptr, ptr %9, align 8, !tbaa !5
  %833 = load i64, ptr %39, align 8, !tbaa !16
  %834 = trunc i64 %833 to i32
  %835 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %832, i32 noundef %834, i32 noundef 1)
          to label %836 unwind label %844

836:                                              ; preds = %830
  %837 = load double, ptr %835, align 8, !tbaa !9
  %838 = fadd double %831, %837
  %839 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %840 unwind label %844

840:                                              ; preds = %836
  store double %838, ptr %839, align 8, !tbaa !9
  br label %841

841:                                              ; preds = %840
  %842 = load i64, ptr %39, align 8, !tbaa !16
  %843 = add i64 %842, 1
  store i64 %843, ptr %39, align 8, !tbaa !16
  br label %810, !llvm.loop !55

844:                                              ; preds = %836, %830, %828, %824, %818, %816
  %845 = landingpad { ptr, i32 }
          cleanup
  %846 = extractvalue { ptr, i32 } %845, 0
  store ptr %846, ptr %12, align 8
  %847 = extractvalue { ptr, i32 } %845, 1
  store i32 %847, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %1482

848:                                              ; preds = %815
  %849 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.86)
          to label %850 unwind label %74

850:                                              ; preds = %848
  %851 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %849, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %852 unwind label %74

852:                                              ; preds = %850
  %853 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.87)
          to label %854 unwind label %74

854:                                              ; preds = %852
  %855 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0)
          to label %856 unwind label %74

856:                                              ; preds = %854
  %857 = load double, ptr %855, align 8, !tbaa !9
  %858 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %853, double noundef %857)
          to label %859 unwind label %74

859:                                              ; preds = %856
  %860 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %858, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %861 unwind label %74

861:                                              ; preds = %859
  %862 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.88)
          to label %863 unwind label %74

863:                                              ; preds = %861
  %864 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %865 unwind label %74

865:                                              ; preds = %863
  %866 = load double, ptr %864, align 8, !tbaa !9
  %867 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %862, double noundef %866)
          to label %868 unwind label %74

868:                                              ; preds = %865
  %869 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %867, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %870 unwind label %74

870:                                              ; preds = %868
  %871 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %872 unwind label %74

872:                                              ; preds = %870
  %873 = load double, ptr %871, align 8, !tbaa !9
  %874 = load double, ptr %17, align 8, !tbaa !9
  %875 = fmul double 0x3D719799812DEA11, %874
  %876 = fcmp ogt double %873, %875
  br i1 %876, label %877, label %911

877:                                              ; preds = %872
  %878 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2)
          to label %879 unwind label %74

879:                                              ; preds = %877
  %880 = load double, ptr %878, align 8, !tbaa !9
  %881 = load double, ptr %17, align 8, !tbaa !9
  %882 = fmul double 0x3D719799812DEA11, %881
  %883 = fcmp ogt double %880, %882
  br i1 %883, label %884, label %911

884:                                              ; preds = %879
  %885 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.89)
          to label %886 unwind label %74

886:                                              ; preds = %884
  %887 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %885, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %888 unwind label %74

888:                                              ; preds = %886
  %889 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.86)
          to label %890 unwind label %74

890:                                              ; preds = %888
  %891 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %889, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %892 unwind label %74

892:                                              ; preds = %890
  %893 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.87)
          to label %894 unwind label %74

894:                                              ; preds = %892
  %895 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0)
          to label %896 unwind label %74

896:                                              ; preds = %894
  %897 = load double, ptr %895, align 8, !tbaa !9
  %898 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %893, double noundef %897)
          to label %899 unwind label %74

899:                                              ; preds = %896
  %900 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %898, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %901 unwind label %74

901:                                              ; preds = %899
  %902 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.88)
          to label %903 unwind label %74

903:                                              ; preds = %901
  %904 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1)
          to label %905 unwind label %74

905:                                              ; preds = %903
  %906 = load double, ptr %904, align 8, !tbaa !9
  %907 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %902, double noundef %906)
          to label %908 unwind label %74

908:                                              ; preds = %905
  %909 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %907, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %910 unwind label %74

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

911:                                              ; preds = %879, %872
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind writable sret(%class.Array2D.4) align 8 %40, ptr noundef nonnull align 8 dereferenceable(40) %14, double noundef 0.000000e+00)
          to label %912 unwind label %74

912:                                              ; preds = %911
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %40) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #10
  store i64 0, ptr %41, align 8, !tbaa !16
  br label %913

913:                                              ; preds = %995, %912
  %914 = load i64, ptr %41, align 8, !tbaa !16
  %915 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 29
  %916 = load i64, ptr %915, align 8, !tbaa !29
  %917 = icmp ult i64 %914, %916
  br i1 %917, label %919, label %918

918:                                              ; preds = %913
  store i32 23, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %998

919:                                              ; preds = %913
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  store i64 0, ptr %42, align 8, !tbaa !16
  br label %920

920:                                              ; preds = %987, %919
  %921 = load i64, ptr %42, align 8, !tbaa !16
  %922 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %923 = load ptr, ptr %922, align 8, !tbaa !30
  %924 = load i64, ptr %41, align 8, !tbaa !16
  %925 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %923, i64 %924
  %926 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %925, i32 0, i32 3
  %927 = load i64, ptr %926, align 8, !tbaa !31
  %928 = icmp ult i64 %921, %927
  br i1 %928, label %930, label %929

929:                                              ; preds = %920
  store i32 26, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %994

930:                                              ; preds = %920
  %931 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 0)
          to label %932 unwind label %990

932:                                              ; preds = %930
  %933 = load double, ptr %931, align 8, !tbaa !9
  %934 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %935 = load ptr, ptr %934, align 8, !tbaa !30
  %936 = load i64, ptr %41, align 8, !tbaa !16
  %937 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %935, i64 %936
  %938 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %937, i32 0, i32 4
  %939 = load ptr, ptr %938, align 8, !tbaa !34
  %940 = load i64, ptr %42, align 8, !tbaa !16
  %941 = trunc i64 %940 to i32
  %942 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %939, i32 noundef %941)
          to label %943 unwind label %990

943:                                              ; preds = %932
  %944 = load double, ptr %942, align 8, !tbaa !9
  %945 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %946 = load ptr, ptr %945, align 8, !tbaa !30
  %947 = load i64, ptr %41, align 8, !tbaa !16
  %948 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %946, i64 %947
  %949 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %948, i32 0, i32 6
  %950 = load ptr, ptr %949, align 8, !tbaa !35
  %951 = load i64, ptr %42, align 8, !tbaa !16
  %952 = trunc i64 %951 to i32
  %953 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %950, i32 noundef %952)
          to label %954 unwind label %990

954:                                              ; preds = %943
  %955 = load double, ptr %953, align 8, !tbaa !9
  %956 = call double @llvm.fmuladd.f64(double %944, double %955, double %933)
  %957 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 0)
          to label %958 unwind label %990

958:                                              ; preds = %954
  store double %956, ptr %957, align 8, !tbaa !9
  %959 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 1)
          to label %960 unwind label %990

960:                                              ; preds = %958
  %961 = load double, ptr %959, align 8, !tbaa !9
  %962 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %963 = load ptr, ptr %962, align 8, !tbaa !30
  %964 = load i64, ptr %41, align 8, !tbaa !16
  %965 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %963, i64 %964
  %966 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %965, i32 0, i32 5
  %967 = load ptr, ptr %966, align 8, !tbaa !36
  %968 = load i64, ptr %42, align 8, !tbaa !16
  %969 = trunc i64 %968 to i32
  %970 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %967, i32 noundef %969)
          to label %971 unwind label %990

971:                                              ; preds = %960
  %972 = load double, ptr %970, align 8, !tbaa !9
  %973 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 30
  %974 = load ptr, ptr %973, align 8, !tbaa !30
  %975 = load i64, ptr %41, align 8, !tbaa !16
  %976 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %974, i64 %975
  %977 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %976, i32 0, i32 6
  %978 = load ptr, ptr %977, align 8, !tbaa !35
  %979 = load i64, ptr %42, align 8, !tbaa !16
  %980 = trunc i64 %979 to i32
  %981 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %978, i32 noundef %980)
          to label %982 unwind label %990

982:                                              ; preds = %971
  %983 = load double, ptr %981, align 8, !tbaa !9
  %984 = call double @llvm.fmuladd.f64(double %972, double %983, double %961)
  %985 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 1)
          to label %986 unwind label %990

986:                                              ; preds = %982
  store double %984, ptr %985, align 8, !tbaa !9
  br label %987

987:                                              ; preds = %986
  %988 = load i64, ptr %42, align 8, !tbaa !16
  %989 = add i64 %988, 1
  store i64 %989, ptr %42, align 8, !tbaa !16
  br label %920, !llvm.loop !56

990:                                              ; preds = %982, %971, %960, %958, %954, %943, %932, %930
  %991 = landingpad { ptr, i32 }
          cleanup
  %992 = extractvalue { ptr, i32 } %991, 0
  store ptr %992, ptr %12, align 8
  %993 = extractvalue { ptr, i32 } %991, 1
  store i32 %993, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #10
  br label %1482

994:                                              ; preds = %929
  br label %995

995:                                              ; preds = %994
  %996 = load i64, ptr %41, align 8, !tbaa !16
  %997 = add i64 %996, 1
  store i64 %997, ptr %41, align 8, !tbaa !16
  br label %913, !llvm.loop !57

998:                                              ; preds = %918
  %999 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.90)
          to label %1000 unwind label %74

1000:                                             ; preds = %998
  %1001 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %999, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1002 unwind label %74

1002:                                             ; preds = %1000
  %1003 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.91)
          to label %1004 unwind label %74

1004:                                             ; preds = %1002
  %1005 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 0)
          to label %1006 unwind label %74

1006:                                             ; preds = %1004
  %1007 = load double, ptr %1005, align 8, !tbaa !9
  %1008 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1003, double noundef %1007)
          to label %1009 unwind label %74

1009:                                             ; preds = %1006
  %1010 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1008, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1011 unwind label %74

1011:                                             ; preds = %1009
  %1012 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.92)
          to label %1013 unwind label %74

1013:                                             ; preds = %1011
  %1014 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 1)
          to label %1015 unwind label %74

1015:                                             ; preds = %1013
  %1016 = load double, ptr %1014, align 8, !tbaa !9
  %1017 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1012, double noundef %1016)
          to label %1018 unwind label %74

1018:                                             ; preds = %1015
  %1019 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1017, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1020 unwind label %74

1020:                                             ; preds = %1018
  %1021 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 1)
          to label %1022 unwind label %74

1022:                                             ; preds = %1020
  %1023 = load double, ptr %1021, align 8, !tbaa !9
  %1024 = load double, ptr %18, align 8, !tbaa !9
  %1025 = fmul double 0x3D719799812DEA11, %1024
  %1026 = fcmp ogt double %1023, %1025
  br i1 %1026, label %1027, label %1061

1027:                                             ; preds = %1022
  %1028 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 2)
          to label %1029 unwind label %74

1029:                                             ; preds = %1027
  %1030 = load double, ptr %1028, align 8, !tbaa !9
  %1031 = load double, ptr %18, align 8, !tbaa !9
  %1032 = fmul double 0x3D719799812DEA11, %1031
  %1033 = fcmp ogt double %1030, %1032
  br i1 %1033, label %1034, label %1061

1034:                                             ; preds = %1029
  %1035 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.93)
          to label %1036 unwind label %74

1036:                                             ; preds = %1034
  %1037 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1035, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1038 unwind label %74

1038:                                             ; preds = %1036
  %1039 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.94)
          to label %1040 unwind label %74

1040:                                             ; preds = %1038
  %1041 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1039, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1042 unwind label %74

1042:                                             ; preds = %1040
  %1043 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.91)
          to label %1044 unwind label %74

1044:                                             ; preds = %1042
  %1045 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 0)
          to label %1046 unwind label %74

1046:                                             ; preds = %1044
  %1047 = load double, ptr %1045, align 8, !tbaa !9
  %1048 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1043, double noundef %1047)
          to label %1049 unwind label %74

1049:                                             ; preds = %1046
  %1050 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1048, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1051 unwind label %74

1051:                                             ; preds = %1049
  %1052 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.92)
          to label %1053 unwind label %74

1053:                                             ; preds = %1051
  %1054 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %14, i32 noundef 1)
          to label %1055 unwind label %74

1055:                                             ; preds = %1053
  %1056 = load double, ptr %1054, align 8, !tbaa !9
  %1057 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1052, double noundef %1056)
          to label %1058 unwind label %74

1058:                                             ; preds = %1055
  %1059 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1057, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1060 unwind label %74

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

1061:                                             ; preds = %1029, %1022
  store double 1.000000e+15, ptr %19, align 8, !tbaa !9
  store double -1.000000e+00, ptr %20, align 8, !tbaa !9
  store double 0.000000e+00, ptr %21, align 8, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !24
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #10
  store i32 0, ptr %43, align 4, !tbaa !24
  br label %1062

1062:                                             ; preds = %1208, %1061
  %1063 = load i32, ptr %43, align 4, !tbaa !24
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 25
  %1066 = load i64, ptr %1065, align 8, !tbaa !58
  %1067 = icmp ult i64 %1064, %1066
  br i1 %1067, label %1069, label %1068

1068:                                             ; preds = %1062
  store i32 29, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %1211

1069:                                             ; preds = %1062
  %1070 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1071 = load ptr, ptr %1070, align 8, !tbaa !59
  %1072 = load i32, ptr %43, align 4, !tbaa !24
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1071, i64 %1073
  %1075 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1074, i32 0, i32 8
  %1076 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %1075)
          to label %1077 unwind label %1137

1077:                                             ; preds = %1069
  %1078 = load double, ptr %1076, align 8, !tbaa !9
  store double %1078, ptr %19, align 8, !tbaa !9
  %1079 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1080 = load ptr, ptr %1079, align 8, !tbaa !59
  %1081 = load i32, ptr %43, align 4, !tbaa !24
  %1082 = sext i32 %1081 to i64
  %1083 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1080, i64 %1082
  %1084 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1083, i32 0, i32 8
  %1085 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %1084)
          to label %1086 unwind label %1137

1086:                                             ; preds = %1077
  %1087 = load double, ptr %1085, align 8, !tbaa !9
  store double %1087, ptr %20, align 8, !tbaa !9
  %1088 = load double, ptr %21, align 8, !tbaa !9
  %1089 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1090 = load ptr, ptr %1089, align 8, !tbaa !59
  %1091 = load i32, ptr %43, align 4, !tbaa !24
  %1092 = sext i32 %1091 to i64
  %1093 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1090, i64 %1092
  %1094 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1093, i32 0, i32 8
  %1095 = load double, ptr %1094, align 8, !tbaa !60
  %1096 = fadd double %1088, %1095
  store double %1096, ptr %21, align 8, !tbaa !9
  %1097 = load double, ptr %15, align 8, !tbaa !9
  %1098 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1099 = load ptr, ptr %1098, align 8, !tbaa !59
  %1100 = load i32, ptr %43, align 4, !tbaa !24
  %1101 = sext i32 %1100 to i64
  %1102 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1099, i64 %1101
  %1103 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1102, i32 0, i32 8
  %1104 = load double, ptr %1103, align 8, !tbaa !60
  %1105 = fadd double %1097, %1104
  store double %1105, ptr %15, align 8, !tbaa !9
  %1106 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1107 = load ptr, ptr %1106, align 8, !tbaa !59
  %1108 = load i32, ptr %43, align 4, !tbaa !24
  %1109 = sext i32 %1108 to i64
  %1110 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1107, i64 %1109
  %1111 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1110, i32 0, i32 8
  %1112 = load double, ptr %1111, align 8, !tbaa !60
  %1113 = fcmp olt double %1112, 0.000000e+00
  br i1 %1113, label %1114, label %1141

1114:                                             ; preds = %1086
  %1115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.95)
          to label %1116 unwind label %1137

1116:                                             ; preds = %1114
  %1117 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1118 = load ptr, ptr %1117, align 8, !tbaa !59
  %1119 = load i32, ptr %43, align 4, !tbaa !24
  %1120 = sext i32 %1119 to i64
  %1121 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1118, i64 %1120
  %1122 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1121, i32 0, i32 8
  %1123 = load double, ptr %1122, align 8, !tbaa !60
  %1124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1115, double noundef %1123)
          to label %1125 unwind label %1137

1125:                                             ; preds = %1116
  %1126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1124, ptr noundef @.str.96)
          to label %1127 unwind label %1137

1127:                                             ; preds = %1125
  %1128 = load i32, ptr %43, align 4, !tbaa !24
  %1129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1126, i32 noundef %1128)
          to label %1130 unwind label %1137

1130:                                             ; preds = %1127
  %1131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1129, ptr noundef @.str.97)
          to label %1132 unwind label %1137

1132:                                             ; preds = %1130
  %1133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1131, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1134 unwind label %1137

1134:                                             ; preds = %1132
  %1135 = load i32, ptr %7, align 4, !tbaa !24
  %1136 = add nsw i32 %1135, 1
  store i32 %1136, ptr %7, align 4, !tbaa !24
  br label %1141

1137:                                             ; preds = %1202, %1200, %1198, %1196, %1187, %1185, %1183, %1181, %1178, %1176, %1174, %1165, %1163, %1154, %1152, %1141, %1132, %1130, %1127, %1125, %1116, %1114, %1077, %1069
  %1138 = landingpad { ptr, i32 }
          cleanup
  %1139 = extractvalue { ptr, i32 } %1138, 0
  store ptr %1139, ptr %12, align 8
  %1140 = extractvalue { ptr, i32 } %1138, 1
  store i32 %1140, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #10
  br label %1482

1141:                                             ; preds = %1134, %1086
  %1142 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1143 = load ptr, ptr %1142, align 8, !tbaa !59
  %1144 = load i32, ptr %43, align 4, !tbaa !24
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1143, i64 %1145
  %1147 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1146, i32 0, i32 8
  %1148 = load double, ptr %1147, align 8, !tbaa !60
  %1149 = invoke noundef double @_ZSt3absd(double noundef %1148)
          to label %1150 unwind label %1137

1150:                                             ; preds = %1141
  %1151 = fcmp olt double %1149, 0x3D06849B86A12B9B
  br i1 %1151, label %1152, label %1207

1152:                                             ; preds = %1150
  %1153 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.98)
          to label %1154 unwind label %1137

1154:                                             ; preds = %1152
  %1155 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1156 = load ptr, ptr %1155, align 8, !tbaa !59
  %1157 = load i32, ptr %43, align 4, !tbaa !24
  %1158 = sext i32 %1157 to i64
  %1159 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1156, i64 %1158
  %1160 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1159, i32 0, i32 8
  %1161 = load double, ptr %1160, align 8, !tbaa !60
  %1162 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1153, double noundef %1161)
          to label %1163 unwind label %1137

1163:                                             ; preds = %1154
  %1164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1162, ptr noundef @.str.7)
          to label %1165 unwind label %1137

1165:                                             ; preds = %1163
  %1166 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1167 = load ptr, ptr %1166, align 8, !tbaa !59
  %1168 = load i32, ptr %43, align 4, !tbaa !24
  %1169 = sext i32 %1168 to i64
  %1170 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1167, i64 %1169
  %1171 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1170, i32 0, i32 8
  %1172 = load double, ptr %1171, align 8, !tbaa !60
  %1173 = invoke noundef double @_ZSt3absd(double noundef %1172)
          to label %1174 unwind label %1137

1174:                                             ; preds = %1165
  %1175 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1164, double noundef %1173)
          to label %1176 unwind label %1137

1176:                                             ; preds = %1174
  %1177 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1175, ptr noundef @.str.99)
          to label %1178 unwind label %1137

1178:                                             ; preds = %1176
  %1179 = load i32, ptr %43, align 4, !tbaa !24
  %1180 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %1177, i32 noundef %1179)
          to label %1181 unwind label %1137

1181:                                             ; preds = %1178
  %1182 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1180, ptr noundef @.str.97)
          to label %1183 unwind label %1137

1183:                                             ; preds = %1181
  %1184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1182, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1185 unwind label %1137

1185:                                             ; preds = %1183
  %1186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.100)
          to label %1187 unwind label %1137

1187:                                             ; preds = %1185
  %1188 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 26
  %1189 = load ptr, ptr %1188, align 8, !tbaa !59
  %1190 = load i32, ptr %43, align 4, !tbaa !24
  %1191 = sext i32 %1190 to i64
  %1192 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1189, i64 %1191
  %1193 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %1192, i32 0, i32 8
  %1194 = load double, ptr %1193, align 8, !tbaa !60
  %1195 = invoke noundef double @_ZSt3absd(double noundef %1194)
          to label %1196 unwind label %1137

1196:                                             ; preds = %1187
  %1197 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1186, double noundef %1195)
          to label %1198 unwind label %1137

1198:                                             ; preds = %1196
  %1199 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1197, ptr noundef @.str.101)
          to label %1200 unwind label %1137

1200:                                             ; preds = %1198
  %1201 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1199, double noundef 0x3D06849B86A12B9B)
          to label %1202 unwind label %1137

1202:                                             ; preds = %1200
  %1203 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1201, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1204 unwind label %1137

1204:                                             ; preds = %1202
  %1205 = load i32, ptr %7, align 4, !tbaa !24
  %1206 = add nsw i32 %1205, 1
  store i32 %1206, ptr %7, align 4, !tbaa !24
  br label %1207

1207:                                             ; preds = %1204, %1150
  br label %1208

1208:                                             ; preds = %1207
  %1209 = load i32, ptr %43, align 4, !tbaa !24
  %1210 = add nsw i32 %1209, 1
  store i32 %1210, ptr %43, align 4, !tbaa !24
  br label %1062, !llvm.loop !62

1211:                                             ; preds = %1068
  %1212 = load double, ptr %21, align 8, !tbaa !9
  %1213 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 25
  %1214 = load i64, ptr %1213, align 8, !tbaa !58
  %1215 = uitofp i64 %1214 to double
  %1216 = fdiv double %1212, %1215
  store double %1216, ptr %21, align 8, !tbaa !9
  %1217 = 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 %1218 unwind label %74

1218:                                             ; preds = %1211
  %1219 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1217, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1220 unwind label %74

1220:                                             ; preds = %1218
  %1221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.102)
          to label %1222 unwind label %74

1222:                                             ; preds = %1220
  %1223 = load double, ptr %19, align 8, !tbaa !9
  %1224 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1221, double noundef %1223)
          to label %1225 unwind label %74

1225:                                             ; preds = %1222
  %1226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1224, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1227 unwind label %74

1227:                                             ; preds = %1225
  %1228 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.103)
          to label %1229 unwind label %74

1229:                                             ; preds = %1227
  %1230 = load double, ptr %20, align 8, !tbaa !9
  %1231 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1228, double noundef %1230)
          to label %1232 unwind label %74

1232:                                             ; preds = %1229
  %1233 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1231, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1234 unwind label %74

1234:                                             ; preds = %1232
  %1235 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.104)
          to label %1236 unwind label %74

1236:                                             ; preds = %1234
  %1237 = load double, ptr %21, align 8, !tbaa !9
  %1238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1235, double noundef %1237)
          to label %1239 unwind label %74

1239:                                             ; preds = %1236
  %1240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1238, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1241 unwind label %74

1241:                                             ; preds = %1239
  %1242 = 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 %1243 unwind label %74

1243:                                             ; preds = %1241
  %1244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1242, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1245 unwind label %74

1245:                                             ; preds = %1243
  store double 1.000000e+15, ptr %19, align 8, !tbaa !9
  store double -1.000000e+00, ptr %20, align 8, !tbaa !9
  store double 0.000000e+00, ptr %21, align 8, !tbaa !9
  store i32 0, ptr %7, align 4, !tbaa !24
  store double 0.000000e+00, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  store i64 0, ptr %44, align 8, !tbaa !16
  br label %1246

1246:                                             ; preds = %1349, %1245
  %1247 = load i64, ptr %44, align 8, !tbaa !16
  %1248 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 21
  %1249 = load i64, ptr %1248, align 8, !tbaa !11
  %1250 = icmp ult i64 %1247, %1249
  br i1 %1250, label %1252, label %1251

1251:                                             ; preds = %1246
  store i32 32, ptr %25, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %1352

1252:                                             ; preds = %1246
  %1253 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1254 = load ptr, ptr %1253, align 8, !tbaa !45
  %1255 = load i64, ptr %44, align 8, !tbaa !16
  %1256 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1254, i64 %1255
  %1257 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1256, i32 0, i32 6
  %1258 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %1257)
          to label %1259 unwind label %1313

1259:                                             ; preds = %1252
  %1260 = load double, ptr %1258, align 8, !tbaa !9
  store double %1260, ptr %19, align 8, !tbaa !9
  %1261 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1262 = load ptr, ptr %1261, align 8, !tbaa !45
  %1263 = load i64, ptr %44, align 8, !tbaa !16
  %1264 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1262, i64 %1263
  %1265 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1264, i32 0, i32 6
  %1266 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %1265)
          to label %1267 unwind label %1313

1267:                                             ; preds = %1259
  %1268 = load double, ptr %1266, align 8, !tbaa !9
  store double %1268, ptr %20, align 8, !tbaa !9
  %1269 = load double, ptr %21, align 8, !tbaa !9
  %1270 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1271 = load ptr, ptr %1270, align 8, !tbaa !45
  %1272 = load i64, ptr %44, align 8, !tbaa !16
  %1273 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1271, i64 %1272
  %1274 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1273, i32 0, i32 6
  %1275 = load double, ptr %1274, align 8, !tbaa !63
  %1276 = fadd double %1269, %1275
  store double %1276, ptr %21, align 8, !tbaa !9
  %1277 = load double, ptr %16, align 8, !tbaa !9
  %1278 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1279 = load ptr, ptr %1278, align 8, !tbaa !45
  %1280 = load i64, ptr %44, align 8, !tbaa !16
  %1281 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1279, i64 %1280
  %1282 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1281, i32 0, i32 6
  %1283 = load double, ptr %1282, align 8, !tbaa !63
  %1284 = fadd double %1277, %1283
  store double %1284, ptr %16, align 8, !tbaa !9
  %1285 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1286 = load ptr, ptr %1285, align 8, !tbaa !45
  %1287 = load i64, ptr %44, align 8, !tbaa !16
  %1288 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1286, i64 %1287
  %1289 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1288, i32 0, i32 6
  %1290 = load double, ptr %1289, align 8, !tbaa !63
  %1291 = fcmp olt double %1290, 0.000000e+00
  br i1 %1291, label %1292, label %1317

1292:                                             ; preds = %1267
  %1293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.105)
          to label %1294 unwind label %1313

1294:                                             ; preds = %1292
  %1295 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1296 = load ptr, ptr %1295, align 8, !tbaa !45
  %1297 = load i64, ptr %44, align 8, !tbaa !16
  %1298 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1296, i64 %1297
  %1299 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1298, i32 0, i32 6
  %1300 = load double, ptr %1299, align 8, !tbaa !63
  %1301 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1293, double noundef %1300)
          to label %1302 unwind label %1313

1302:                                             ; preds = %1294
  %1303 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1304 = load ptr, ptr %1303, align 8, !tbaa !45
  %1305 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %1301, ptr noundef %1304)
          to label %1306 unwind label %1313

1306:                                             ; preds = %1302
  %1307 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1305, ptr noundef @.str.106)
          to label %1308 unwind label %1313

1308:                                             ; preds = %1306
  %1309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1307, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1310 unwind label %1313

1310:                                             ; preds = %1308
  %1311 = load i32, ptr %7, align 4, !tbaa !24
  %1312 = add nsw i32 %1311, 1
  store i32 %1312, ptr %7, align 4, !tbaa !24
  br label %1317

1313:                                             ; preds = %1343, %1341, %1337, %1329, %1327, %1317, %1308, %1306, %1302, %1294, %1292, %1259, %1252
  %1314 = landingpad { ptr, i32 }
          cleanup
  %1315 = extractvalue { ptr, i32 } %1314, 0
  store ptr %1315, ptr %12, align 8
  %1316 = extractvalue { ptr, i32 } %1314, 1
  store i32 %1316, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %1482

1317:                                             ; preds = %1310, %1267
  %1318 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1319 = load ptr, ptr %1318, align 8, !tbaa !45
  %1320 = load i64, ptr %44, align 8, !tbaa !16
  %1321 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1319, i64 %1320
  %1322 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1321, i32 0, i32 6
  %1323 = load double, ptr %1322, align 8, !tbaa !63
  %1324 = invoke noundef double @_ZSt3absd(double noundef %1323)
          to label %1325 unwind label %1313

1325:                                             ; preds = %1317
  %1326 = fcmp olt double %1324, 0x3D06849B86A12B9B
  br i1 %1326, label %1327, label %1348

1327:                                             ; preds = %1325
  %1328 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.107)
          to label %1329 unwind label %1313

1329:                                             ; preds = %1327
  %1330 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1331 = load ptr, ptr %1330, align 8, !tbaa !45
  %1332 = load i64, ptr %44, align 8, !tbaa !16
  %1333 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1331, i64 %1332
  %1334 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %1333, i32 0, i32 6
  %1335 = load double, ptr %1334, align 8, !tbaa !63
  %1336 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1328, double noundef %1335)
          to label %1337 unwind label %1313

1337:                                             ; preds = %1329
  %1338 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 22
  %1339 = load ptr, ptr %1338, align 8, !tbaa !45
  %1340 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %1336, ptr noundef %1339)
          to label %1341 unwind label %1313

1341:                                             ; preds = %1337
  %1342 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1340, ptr noundef @.str.106)
          to label %1343 unwind label %1313

1343:                                             ; preds = %1341
  %1344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1342, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1345 unwind label %1313

1345:                                             ; preds = %1343
  %1346 = load i32, ptr %7, align 4, !tbaa !24
  %1347 = add nsw i32 %1346, 1
  store i32 %1347, ptr %7, align 4, !tbaa !24
  br label %1348

1348:                                             ; preds = %1345, %1325
  br label %1349

1349:                                             ; preds = %1348
  %1350 = load i64, ptr %44, align 8, !tbaa !16
  %1351 = add i64 %1350, 1
  store i64 %1351, ptr %44, align 8, !tbaa !16
  br label %1246, !llvm.loop !64

1352:                                             ; preds = %1251
  %1353 = load double, ptr %21, align 8, !tbaa !9
  %1354 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 21
  %1355 = load i64, ptr %1354, align 8, !tbaa !11
  %1356 = uitofp i64 %1355 to double
  %1357 = fdiv double %1353, %1356
  store double %1357, ptr %21, align 8, !tbaa !9
  %1358 = 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 %1359 unwind label %74

1359:                                             ; preds = %1352
  %1360 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1358, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1361 unwind label %74

1361:                                             ; preds = %1359
  %1362 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.108)
          to label %1363 unwind label %74

1363:                                             ; preds = %1361
  %1364 = load double, ptr %19, align 8, !tbaa !9
  %1365 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1362, double noundef %1364)
          to label %1366 unwind label %74

1366:                                             ; preds = %1363
  %1367 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1365, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1368 unwind label %74

1368:                                             ; preds = %1366
  %1369 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.109)
          to label %1370 unwind label %74

1370:                                             ; preds = %1368
  %1371 = load double, ptr %20, align 8, !tbaa !9
  %1372 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1369, double noundef %1371)
          to label %1373 unwind label %74

1373:                                             ; preds = %1370
  %1374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1372, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1375 unwind label %74

1375:                                             ; preds = %1373
  %1376 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.110)
          to label %1377 unwind label %74

1377:                                             ; preds = %1375
  %1378 = load double, ptr %21, align 8, !tbaa !9
  %1379 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1376, double noundef %1378)
          to label %1380 unwind label %74

1380:                                             ; preds = %1377
  %1381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1379, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1382 unwind label %74

1382:                                             ; preds = %1380
  %1383 = 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 %1384 unwind label %74

1384:                                             ; preds = %1382
  %1385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1383, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1386 unwind label %74

1386:                                             ; preds = %1384
  %1387 = load i32, ptr %7, align 4, !tbaa !24
  %1388 = icmp sgt i32 %1387, 0
  br i1 %1388, label %1389, label %1390

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

1390:                                             ; preds = %1386
  %1391 = load double, ptr %16, align 8, !tbaa !9
  %1392 = load double, ptr %15, align 8, !tbaa !9
  %1393 = fsub double %1391, %1392
  %1394 = invoke noundef double @_ZSt3absd(double noundef %1393)
          to label %1395 unwind label %74

1395:                                             ; preds = %1390
  %1396 = load double, ptr %16, align 8, !tbaa !9
  %1397 = fmul double 1.000000e-08, %1396
  %1398 = fcmp ogt double %1394, %1397
  br i1 %1398, label %1399, label %1431

1399:                                             ; preds = %1395
  %1400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.111)
          to label %1401 unwind label %74

1401:                                             ; preds = %1399
  %1402 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1400, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1403 unwind label %74

1403:                                             ; preds = %1401
  %1404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.112)
          to label %1405 unwind label %74

1405:                                             ; preds = %1403
  %1406 = load double, ptr %15, align 8, !tbaa !9
  %1407 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1404, double noundef %1406)
          to label %1408 unwind label %74

1408:                                             ; preds = %1405
  %1409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1407, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1410 unwind label %74

1410:                                             ; preds = %1408
  %1411 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.113)
          to label %1412 unwind label %74

1412:                                             ; preds = %1410
  %1413 = load double, ptr %16, align 8, !tbaa !9
  %1414 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1411, double noundef %1413)
          to label %1415 unwind label %74

1415:                                             ; preds = %1412
  %1416 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1414, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1417 unwind label %74

1417:                                             ; preds = %1415
  %1418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.114)
          to label %1419 unwind label %74

1419:                                             ; preds = %1417
  %1420 = load double, ptr %16, align 8, !tbaa !9
  %1421 = load double, ptr %15, align 8, !tbaa !9
  %1422 = fsub double %1420, %1421
  %1423 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %1418, double noundef %1422)
          to label %1424 unwind label %74

1424:                                             ; preds = %1419
  %1425 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1423, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1426 unwind label %74

1426:                                             ; preds = %1424
  %1427 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.115)
          to label %1428 unwind label %74

1428:                                             ; preds = %1426
  %1429 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1427, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1430 unwind label %74

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

1431:                                             ; preds = %1395
  invoke void @_ZN13EulerSolver2D10MainData2D17check_skewness_ncEv(ptr noundef nonnull align 8 dereferenceable(512) %45)
          to label %1432 unwind label %74

1432:                                             ; preds = %1431
  invoke void @_ZN13EulerSolver2D10MainData2D10compute_arEv(ptr noundef nonnull align 8 dereferenceable(512) %45)
          to label %1433 unwind label %74

1433:                                             ; preds = %1432
  %1434 = 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 %1435 unwind label %74

1435:                                             ; preds = %1433
  %1436 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1434, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1437 unwind label %74

1437:                                             ; preds = %1435
  %1438 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.116)
          to label %1439 unwind label %74

1439:                                             ; preds = %1437
  %1440 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1438, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1441 unwind label %74

1441:                                             ; preds = %1439
  %1442 = 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 %1443 unwind label %74

1443:                                             ; preds = %1441
  %1444 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1442, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1445 unwind label %74

1445:                                             ; preds = %1443
  %1446 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.117)
          to label %1447 unwind label %74

1447:                                             ; preds = %1445
  %1448 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 31
  %1449 = load i64, ptr %1448, align 8, !tbaa !65
  %1450 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1446, i64 noundef %1449)
          to label %1451 unwind label %74

1451:                                             ; preds = %1447
  %1452 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1450, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1453 unwind label %74

1453:                                             ; preds = %1451
  %1454 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.118)
          to label %1455 unwind label %74

1455:                                             ; preds = %1453
  %1456 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 27
  %1457 = load i64, ptr %1456, align 8, !tbaa !17
  %1458 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1454, i64 noundef %1457)
          to label %1459 unwind label %74

1459:                                             ; preds = %1455
  %1460 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1458, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1461 unwind label %74

1461:                                             ; preds = %1459
  %1462 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.119)
          to label %1463 unwind label %74

1463:                                             ; preds = %1461
  %1464 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 29
  %1465 = load i64, ptr %1464, align 8, !tbaa !29
  %1466 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1462, i64 noundef %1465)
          to label %1467 unwind label %74

1467:                                             ; preds = %1463
  %1468 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1466, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1469 unwind label %74

1469:                                             ; preds = %1467
  %1470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.120)
          to label %1471 unwind label %74

1471:                                             ; preds = %1469
  %1472 = getelementptr inbounds %"class.EulerSolver2D::MainData2D", ptr %45, i32 0, i32 25
  %1473 = load i64, ptr %1472, align 8, !tbaa !58
  %1474 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1470, i64 noundef %1473)
          to label %1475 unwind label %74

1475:                                             ; preds = %1471
  %1476 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1474, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1477 unwind label %74

1477:                                             ; preds = %1475
  %1478 = 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 %1479 unwind label %74

1479:                                             ; preds = %1477
  %1480 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1478, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1481 unwind label %74

1481:                                             ; preds = %1479
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  ret void

1482:                                             ; preds = %1313, %1137, %990, %844, %786, %782, %781, %766, %762, %680, %458, %404, %204, %78, %74
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #10
  br label %1483

1483:                                             ; preds = %1482, %70
  call void @llvm.lifetime.end.p0(i64 40, ptr %14) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  br label %1484

1484:                                             ; preds = %1483, %66
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #10
  br label %1485

1485:                                             ; preds = %1484
  %1486 = load ptr, ptr %12, align 8
  %1487 = load i32, ptr %13, align 4
  %1488 = insertvalue { ptr, i32 } poison, ptr %1486, 0
  %1489 = insertvalue { ptr, i32 } %1488, i32 %1487, 1
  resume { ptr, i32 } %1489
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #9

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef, i32 noundef) #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #9

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 #5 = { "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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin nounwind }
attributes #13 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !15, i64 408}
!12 = !{!"_ZTSN13EulerSolver2D10MainData2DE", !13, i64 0, !13, i64 32, !13, i64 64, !13, i64 96, !13, i64 128, !13, i64 160, !15, i64 192, !13, i64 200, !13, i64 232, !10, i64 264, !13, i64 272, !13, i64 304, !15, i64 336, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !10, i64 376, !10, i64 384, !10, i64 392, !10, i64 400, !15, i64 408, !6, i64 416, !15, i64 424, !15, i64 432, !15, i64 440, !6, i64 448, !15, i64 456, !6, i64 464, !15, i64 472, !6, i64 480, !15, i64 488, !6, i64 496, !15, i64 504}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!15, !15, i64 0}
!17 = !{!12, !15, i64 456}
!18 = !{!12, !6, i64 464}
!19 = !{!20, !21, i64 0}
!20 = !{!"_ZTSN13EulerSolver2D9edge_typeE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !22, i64 16, !10, i64 56, !22, i64 64, !10, i64 104, !21, i64 112, !21, i64 116}
!21 = !{!"int", !7, i64 0}
!22 = !{!"_ZTS7Array2DIdE", !21, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !21, i64 16, !21, i64 20, !23, i64 24, !23, i64 25, !6, i64 32}
!23 = !{!"bool", !7, i64 0}
!24 = !{!21, !21, i64 0}
!25 = !{!20, !21, i64 4}
!26 = !{!20, !10, i64 56}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!12, !15, i64 472}
!30 = !{!12, !6, i64 480}
!31 = !{!32, !15, i64 48}
!32 = !{!"_ZTSN13EulerSolver2D10bgrid_typeE", !13, i64 0, !15, i64 32, !6, i64 40, !15, 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}
!33 = !{!32, !6, i64 40}
!34 = !{!32, !6, i64 56}
!35 = !{!32, !6, i64 72}
!36 = !{!32, !6, i64 64}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = !{!32, !15, i64 32}
!40 = !{!32, !6, i64 80}
!41 = !{!32, !6, i64 96}
!42 = !{!32, !6, i64 88}
!43 = distinct !{!43, !28}
!44 = distinct !{!44, !28}
!45 = !{!12, !6, i64 416}
!46 = !{!47, !10, i64 0}
!47 = !{!"_ZTSN13EulerSolver2D9node_typeE", !10, i64 0, !10, i64 8, !21, i64 16, !6, i64 24, !21, i64 32, !48, i64 40, !10, i64 64, !21, i64 72, !21, i64 76, !6, i64 80, !10, 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, !10, i64 200, !10, i64 208, !10, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!48 = !{!"_ZTS8Vector1DIiE", !49, i64 0}
!49 = !{!"_ZTSSt6vectorIiSaIiEE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{!47, !10, i64 8}
!54 = distinct !{!54, !28}
!55 = distinct !{!55, !28}
!56 = distinct !{!56, !28}
!57 = distinct !{!57, !28}
!58 = !{!12, !15, i64 440}
!59 = !{!12, !6, i64 448}
!60 = !{!61, !10, i64 48}
!61 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !21, i64 0, !6, i64 8, !21, i64 16, !6, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !10, i64 96, !10, i64 104, !21, i64 112, !21, i64 116, !48, i64 120, !10, i64 144, !6, i64 152, !6, i64 160, !21, i64 168}
!62 = distinct !{!62, !28}
!63 = !{!47, !10, i64 64}
!64 = distinct !{!64, !28}
!65 = !{!12, !15, i64 488}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.Array2D.4 = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%"class.EulerSolver2D::edge_type" = type { i32, i32, i32, i32, %class.Array2D.4, double, %class.Array2D.4, double, i32, i32 }
%"class.EulerSolver2D::bgrid_type" = type { %"class.std::__cxx11::basic_string", i64, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.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] }>

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

; 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 #5

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #6

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver2D10MainData2D15check_grid_dataEv(ptr noundef nonnull align 8 dereferenceable(512) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %class.Array2D.4, align 8
  %3 = alloca %class.Array2D.4, align 8
  %4 = alloca %class.Array2D.4, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca %class.Array2D.4, align 8
  %8 = alloca %class.Array2D.4, align 8
  %9 = alloca %class.Array2D.4, align 8
  %10 = alloca %class.Array2D.4, align 8
  %11 = alloca %class.Array2D.4, align 8
  %12 = alloca %class.Array2D.4, align 8
  %13 = alloca %class.Array2D.4, align 8
  %14 = alloca %class.Array2D.4, align 8
  %15 = alloca %class.Array2D.4, align 8
  %16 = alloca %class.Array2D.4, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %2) #10
  call void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 2, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #10
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 2, i32 noundef 1)
          to label %17 unwind label %34

17:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #10
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 2, i32 noundef 1)
          to label %18 unwind label %36

18:                                               ; preds = %17
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  %19 = 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.67)
          to label %20 unwind label %38

20:                                               ; preds = %18
  %21 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %22 unwind label %38

22:                                               ; preds = %20
  %23 = invoke noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #11
          to label %24 unwind label %38

24:                                               ; preds = %22
  %25 = getelementptr inbounds i8, ptr %0, i64 408
  %26 = load i64, ptr %25, align 8, !tbaa !5
  %27 = trunc i64 %26 to i32
  invoke void @_ZN7Array2DIdEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %27, i32 noundef 2)
          to label %28 unwind label %40

28:                                               ; preds = %24
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %7, ptr noundef nonnull align 8 dereferenceable(40) %23, double noundef 0.000000e+00)
          to label %29 unwind label %38

29:                                               ; preds = %28
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #10
  %30 = getelementptr inbounds i8, ptr %0, i64 456
  %31 = load i64, ptr %30, align 8, !tbaa !14
  %.not310 = icmp eq i64 %31, 0
  br i1 %.not310, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %29
  %32 = getelementptr inbounds i8, ptr %0, i64 464
  %.pre = load ptr, ptr %32, align 8, !tbaa !15
  br label %42

._crit_edge:                                      ; preds = %103, %29
  %.0208.lcssa = phi double [ 0.000000e+00, %29 ], [ %109, %103 ]
  %33 = 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.68)
          to label %115 unwind label %38

34:                                               ; preds = %1
  %35 = landingpad { ptr, i32 }
          cleanup
  br label %1042

36:                                               ; preds = %17
  %37 = landingpad { ptr, i32 }
          cleanup
  br label %1041

38:                                               ; preds = %1037, %1035, %1033, %1030, %1028, %1026, %1023, %1021, %1019, %1016, %1014, %1012, %1008, %1006, %1004, %1002, %1000, %998, %996, %994, %993, %992, %989, %987, %985, %983, %981, %979, %977, %975, %973, %971, %969, %967, %965, %955, %953, %951, %949, %947, %945, %942, %940, %938, %935, %933, %931, %._crit_edge305, %866, %864, %862, %860, %858, %856, %853, %851, %849, %846, %844, %842, %._crit_edge295, %753, %750, %748, %746, %744, %741, %739, %737, %735, %733, %731, %729, %724, %719, %717, %714, %712, %710, %708, %705, %703, %701, %699, %._crit_edge288, %642, %639, %636, %634, %632, %630, %627, %625, %623, %621, %619, %617, %615, %610, %605, %603, %600, %598, %596, %594, %591, %589, %587, %585, %._crit_edge283, %557, %554, %552, %550, %548, %545, %543, %541, %540, %524, %522, %515, %513, %506, %504, %502, %500, %489, %482, %480, %473, %471, %469, %._crit_edge280, %398, %396, %394, %391, %389, %387, %385, %382, %380, %378, %376, %374, %369, %._crit_edge275, %._crit_edge266, %126, %124, %119, %117, %115, %._crit_edge, %28, %22, %20, %18
  %39 = landingpad { ptr, i32 }
          cleanup
  br label %1040

40:                                               ; preds = %24
  %41 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %23, i64 noundef 40) #12
  br label %1040

42:                                               ; preds = %.lr.ph, %103
  %43 = phi ptr [ %.pre, %.lr.ph ], [ %106, %103 ]
  %.0204261 = phi i64 [ 0, %.lr.ph ], [ %110, %103 ]
  %.0208260 = phi double [ 0.000000e+00, %.lr.ph ], [ %109, %103 ]
  %44 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %43, i64 %.0204261
  %45 = load i32, ptr %44, align 8, !tbaa !16
  %46 = getelementptr inbounds i8, ptr %44, i64 4
  %47 = load i32, ptr %46, align 4, !tbaa !21
  %48 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %45, i32 noundef 0)
          to label %49 unwind label %113

49:                                               ; preds = %42
  %50 = load double, ptr %48, align 8, !tbaa !22
  %51 = load ptr, ptr %32, align 8, !tbaa !15
  %52 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %51, i64 %.0204261, i32 4
  %53 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %52, i32 noundef 0)
          to label %54 unwind label %113

54:                                               ; preds = %49
  %55 = load double, ptr %53, align 8, !tbaa !22
  %56 = load ptr, ptr %32, align 8, !tbaa !15
  %57 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %56, i64 %.0204261, i32 5
  %58 = load double, ptr %57, align 8, !tbaa !23
  %59 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %45, i32 noundef 0)
          to label %60 unwind label %113

60:                                               ; preds = %54
  %61 = call double @llvm.fmuladd.f64(double %55, double %58, double %50)
  store double %61, ptr %59, align 8, !tbaa !22
  %62 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %45, i32 noundef 1)
          to label %63 unwind label %113

63:                                               ; preds = %60
  %64 = load double, ptr %62, align 8, !tbaa !22
  %65 = load ptr, ptr %32, align 8, !tbaa !15
  %66 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %65, i64 %.0204261, i32 4
  %67 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %66, i32 noundef 1)
          to label %68 unwind label %113

68:                                               ; preds = %63
  %69 = load double, ptr %67, align 8, !tbaa !22
  %70 = load ptr, ptr %32, align 8, !tbaa !15
  %71 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %70, i64 %.0204261, i32 5
  %72 = load double, ptr %71, align 8, !tbaa !23
  %73 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %45, i32 noundef 1)
          to label %74 unwind label %113

74:                                               ; preds = %68
  %75 = call double @llvm.fmuladd.f64(double %69, double %72, double %64)
  store double %75, ptr %73, align 8, !tbaa !22
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %47, i32 noundef 0)
          to label %77 unwind label %113

77:                                               ; preds = %74
  %78 = load double, ptr %76, align 8, !tbaa !22
  %79 = load ptr, ptr %32, align 8, !tbaa !15
  %80 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %79, i64 %.0204261, i32 4
  %81 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %80, i32 noundef 0)
          to label %82 unwind label %113

82:                                               ; preds = %77
  %83 = load double, ptr %81, align 8, !tbaa !22
  %84 = load ptr, ptr %32, align 8, !tbaa !15
  %85 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %84, i64 %.0204261, i32 5
  %86 = load double, ptr %85, align 8, !tbaa !23
  %87 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %47, i32 noundef 0)
          to label %88 unwind label %113

88:                                               ; preds = %82
  %89 = fneg double %83
  %90 = call double @llvm.fmuladd.f64(double %89, double %86, double %78)
  store double %90, ptr %87, align 8, !tbaa !22
  %91 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %47, i32 noundef 1)
          to label %92 unwind label %113

92:                                               ; preds = %88
  %93 = load double, ptr %91, align 8, !tbaa !22
  %94 = load ptr, ptr %32, align 8, !tbaa !15
  %95 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %94, i64 %.0204261, i32 4
  %96 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %95, i32 noundef 1)
          to label %97 unwind label %113

97:                                               ; preds = %92
  %98 = load double, ptr %96, align 8, !tbaa !22
  %99 = load ptr, ptr %32, align 8, !tbaa !15
  %100 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %99, i64 %.0204261, i32 5
  %101 = load double, ptr %100, align 8, !tbaa !23
  %102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %47, i32 noundef 1)
          to label %103 unwind label %113

103:                                              ; preds = %97
  %104 = fneg double %98
  %105 = call double @llvm.fmuladd.f64(double %104, double %101, double %93)
  store double %105, ptr %102, align 8, !tbaa !22
  %106 = load ptr, ptr %32, align 8, !tbaa !15
  %107 = getelementptr inbounds %"class.EulerSolver2D::edge_type", ptr %106, i64 %.0204261, i32 5
  %108 = load double, ptr %107, align 8, !tbaa !23
  %109 = fadd double %.0208260, %108
  %110 = add nuw i64 %.0204261, 1
  %111 = load i64, ptr %30, align 8, !tbaa !14
  %112 = icmp ult i64 %110, %111
  br i1 %112, label %42, label %._crit_edge, !llvm.loop !24

113:                                              ; preds = %97, %92, %88, %82, %77, %74, %68, %63, %60, %54, %49, %42
  %114 = landingpad { ptr, i32 }
          cleanup
  br label %1040

115:                                              ; preds = %._crit_edge
  %116 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %33, double noundef %.0208.lcssa)
          to label %117 unwind label %38

117:                                              ; preds = %115
  %118 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %119 unwind label %38

119:                                              ; preds = %117
  %120 = load i64, ptr %30, align 8, !tbaa !14
  %121 = uitofp i64 %120 to double
  %122 = fdiv double %.0208.lcssa, %121
  %123 = 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.69)
          to label %124 unwind label %38

124:                                              ; preds = %119
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %123, double noundef %122)
          to label %126 unwind label %38

126:                                              ; preds = %124
  %127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %125, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader240 unwind label %38

.preheader240:                                    ; preds = %126
  %128 = getelementptr inbounds i8, ptr %0, i64 472
  %129 = load i64, ptr %128, align 8, !tbaa !26
  %.not311 = icmp eq i64 %129, 0
  br i1 %.not311, label %._crit_edge266, label %.preheader239.lr.ph

.preheader239.lr.ph:                              ; preds = %.preheader240
  %130 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre336 = load ptr, ptr %130, align 8, !tbaa !27
  br label %.preheader239

.preheader239:                                    ; preds = %.preheader239.lr.ph, %._crit_edge264
  %131 = phi i64 [ %129, %.preheader239.lr.ph ], [ %135, %._crit_edge264 ]
  %132 = phi ptr [ %.pre336, %.preheader239.lr.ph ], [ %136, %._crit_edge264 ]
  %.0203265 = phi i64 [ 0, %.preheader239.lr.ph ], [ %137, %._crit_edge264 ]
  %133 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %132, i64 %.0203265, i32 3
  %134 = load i64, ptr %133, align 8, !tbaa !28
  %.not312 = icmp eq i64 %134, 0
  br i1 %.not312, label %._crit_edge264, label %.lr.ph263

._crit_edge266:                                   ; preds = %._crit_edge264, %.preheader240
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %8, ptr noundef nonnull align 8 dereferenceable(40) %3, double noundef 0.000000e+00)
          to label %236 unwind label %38

._crit_edge264.loopexit:                          ; preds = %227
  %.pre337 = load i64, ptr %128, align 8, !tbaa !26
  br label %._crit_edge264

._crit_edge264:                                   ; preds = %._crit_edge264.loopexit, %.preheader239
  %135 = phi i64 [ %.pre337, %._crit_edge264.loopexit ], [ %131, %.preheader239 ]
  %136 = phi ptr [ %230, %._crit_edge264.loopexit ], [ %132, %.preheader239 ]
  %137 = add nuw i64 %.0203265, 1
  %138 = icmp ult i64 %137, %135
  br i1 %138, label %.preheader239, label %._crit_edge266, !llvm.loop !30

.lr.ph263:                                        ; preds = %.preheader239, %227
  %139 = phi ptr [ %230, %227 ], [ %132, %.preheader239 ]
  %.0202262 = phi i64 [ %149, %227 ], [ 0, %.preheader239 ]
  %140 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %139, i64 %.0203265, i32 2
  %141 = load ptr, ptr %140, align 8, !tbaa !31
  %142 = trunc i64 %.0202262 to i32
  %143 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %141, i32 noundef %142)
          to label %144 unwind label %234

144:                                              ; preds = %.lr.ph263
  %145 = load i32, ptr %143, align 4, !tbaa !32
  %146 = load ptr, ptr %130, align 8, !tbaa !27
  %147 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %146, i64 %.0203265, i32 2
  %148 = load ptr, ptr %147, align 8, !tbaa !31
  %149 = add nuw i64 %.0202262, 1
  %150 = trunc i64 %149 to i32
  %151 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %148, i32 noundef %150)
          to label %152 unwind label %234

152:                                              ; preds = %144
  %153 = load i32, ptr %151, align 4, !tbaa !32
  %154 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %145, i32 noundef 0)
          to label %155 unwind label %234

155:                                              ; preds = %152
  %156 = load double, ptr %154, align 8, !tbaa !22
  %157 = load ptr, ptr %130, align 8, !tbaa !27
  %158 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %157, i64 %.0203265, i32 4
  %159 = load ptr, ptr %158, align 8, !tbaa !33
  %160 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %159, i32 noundef %142)
          to label %161 unwind label %234

161:                                              ; preds = %155
  %162 = load double, ptr %160, align 8, !tbaa !22
  %163 = load ptr, ptr %130, align 8, !tbaa !27
  %164 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %163, i64 %.0203265, i32 6
  %165 = load ptr, ptr %164, align 8, !tbaa !34
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %165, i32 noundef %142)
          to label %167 unwind label %234

167:                                              ; preds = %161
  %168 = load double, ptr %166, align 8, !tbaa !22
  %169 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %145, i32 noundef 0)
          to label %170 unwind label %234

170:                                              ; preds = %167
  %171 = fmul double %162, 5.000000e-01
  %172 = call double @llvm.fmuladd.f64(double %171, double %168, double %156)
  store double %172, ptr %169, align 8, !tbaa !22
  %173 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %145, i32 noundef 1)
          to label %174 unwind label %234

174:                                              ; preds = %170
  %175 = load double, ptr %173, align 8, !tbaa !22
  %176 = load ptr, ptr %130, align 8, !tbaa !27
  %177 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %176, i64 %.0203265, i32 5
  %178 = load ptr, ptr %177, align 8, !tbaa !35
  %179 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %178, i32 noundef %142)
          to label %180 unwind label %234

180:                                              ; preds = %174
  %181 = load double, ptr %179, align 8, !tbaa !22
  %182 = load ptr, ptr %130, align 8, !tbaa !27
  %183 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %182, i64 %.0203265, i32 6
  %184 = load ptr, ptr %183, align 8, !tbaa !34
  %185 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %184, i32 noundef %142)
          to label %186 unwind label %234

186:                                              ; preds = %180
  %187 = load double, ptr %185, align 8, !tbaa !22
  %188 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %145, i32 noundef 1)
          to label %189 unwind label %234

189:                                              ; preds = %186
  %190 = fmul double %181, 5.000000e-01
  %191 = call double @llvm.fmuladd.f64(double %190, double %187, double %175)
  store double %191, ptr %188, align 8, !tbaa !22
  %192 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %153, i32 noundef 0)
          to label %193 unwind label %234

193:                                              ; preds = %189
  %194 = load double, ptr %192, align 8, !tbaa !22
  %195 = load ptr, ptr %130, align 8, !tbaa !27
  %196 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %195, i64 %.0203265, i32 4
  %197 = load ptr, ptr %196, align 8, !tbaa !33
  %198 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %197, i32 noundef %142)
          to label %199 unwind label %234

199:                                              ; preds = %193
  %200 = load double, ptr %198, align 8, !tbaa !22
  %201 = load ptr, ptr %130, align 8, !tbaa !27
  %202 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %201, i64 %.0203265, i32 6
  %203 = load ptr, ptr %202, align 8, !tbaa !34
  %204 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %203, i32 noundef %142)
          to label %205 unwind label %234

205:                                              ; preds = %199
  %206 = load double, ptr %204, align 8, !tbaa !22
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %153, i32 noundef 0)
          to label %208 unwind label %234

208:                                              ; preds = %205
  %209 = fmul double %200, 5.000000e-01
  %210 = call double @llvm.fmuladd.f64(double %209, double %206, double %194)
  store double %210, ptr %207, align 8, !tbaa !22
  %211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %153, i32 noundef 1)
          to label %212 unwind label %234

212:                                              ; preds = %208
  %213 = load double, ptr %211, align 8, !tbaa !22
  %214 = load ptr, ptr %130, align 8, !tbaa !27
  %215 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %214, i64 %.0203265, i32 5
  %216 = load ptr, ptr %215, align 8, !tbaa !35
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %216, i32 noundef %142)
          to label %218 unwind label %234

218:                                              ; preds = %212
  %219 = load double, ptr %217, align 8, !tbaa !22
  %220 = load ptr, ptr %130, align 8, !tbaa !27
  %221 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %220, i64 %.0203265, i32 6
  %222 = load ptr, ptr %221, align 8, !tbaa !34
  %223 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %222, i32 noundef %142)
          to label %224 unwind label %234

224:                                              ; preds = %218
  %225 = load double, ptr %223, align 8, !tbaa !22
  %226 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %153, i32 noundef 1)
          to label %227 unwind label %234

227:                                              ; preds = %224
  %228 = fmul double %219, 5.000000e-01
  %229 = call double @llvm.fmuladd.f64(double %228, double %225, double %213)
  store double %229, ptr %226, align 8, !tbaa !22
  %230 = load ptr, ptr %130, align 8, !tbaa !27
  %231 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %230, i64 %.0203265, i32 3
  %232 = load i64, ptr %231, align 8, !tbaa !28
  %233 = icmp ult i64 %149, %232
  br i1 %233, label %.lr.ph263, label %._crit_edge264.loopexit, !llvm.loop !36

234:                                              ; preds = %224, %218, %212, %208, %205, %199, %193, %189, %186, %180, %174, %170, %167, %161, %155, %152, %144, %.lr.ph263
  %235 = landingpad { ptr, i32 }
          cleanup
  br label %1040

236:                                              ; preds = %._crit_edge266
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #10
  %237 = load i64, ptr %128, align 8, !tbaa !26
  %.not313 = icmp eq i64 %237, 0
  br i1 %.not313, label %._crit_edge275, label %.preheader238.lr.ph

.preheader238.lr.ph:                              ; preds = %236
  %238 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre338 = load ptr, ptr %238, align 8, !tbaa !27
  br label %.preheader238

.preheader238:                                    ; preds = %.preheader238.lr.ph, %._crit_edge270
  %239 = phi i64 [ %237, %.preheader238.lr.ph ], [ %294, %._crit_edge270 ]
  %240 = phi ptr [ %.pre338, %.preheader238.lr.ph ], [ %295, %._crit_edge270 ]
  %.0201274 = phi i64 [ 0, %.preheader238.lr.ph ], [ %298, %._crit_edge270 ]
  %.0206273 = phi double [ 0.000000e+00, %.preheader238.lr.ph ], [ %297, %._crit_edge270 ]
  %241 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %240, i64 %.0201274, i32 1
  %242 = load i64, ptr %241, align 8, !tbaa !37
  %.not314 = icmp eq i64 %242, 0
  br i1 %.not314, label %._crit_edge270, label %.lr.ph269.preheader

.lr.ph269.preheader:                              ; preds = %.preheader238
  %243 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %240, i64 %.0201274, i32 2
  %244 = load ptr, ptr %243, align 8, !tbaa !31
  %245 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %244, i32 noundef 0)
          to label %246 unwind label %.loopexit.split-lp

246:                                              ; preds = %.lr.ph269.preheader
  %247 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %248 unwind label %.loopexit.split-lp

248:                                              ; preds = %246
  %249 = load double, ptr %247, align 8, !tbaa !22
  %250 = load ptr, ptr %238, align 8, !tbaa !27
  %251 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %250, i64 %.0201274, i32 7
  %252 = load ptr, ptr %251, align 8, !tbaa !38
  %253 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %252, i32 noundef 0)
          to label %254 unwind label %.loopexit.split-lp

254:                                              ; preds = %248
  %255 = load double, ptr %253, align 8, !tbaa !22
  %256 = load ptr, ptr %238, align 8, !tbaa !27
  %257 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %256, i64 %.0201274, i32 9
  %258 = load ptr, ptr %257, align 8, !tbaa !39
  %259 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %258, i32 noundef 0)
          to label %260 unwind label %.loopexit.split-lp

260:                                              ; preds = %254
  %261 = load double, ptr %259, align 8, !tbaa !22
  %262 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %263 unwind label %.loopexit.split-lp

263:                                              ; preds = %260
  %264 = call double @llvm.fmuladd.f64(double %255, double %261, double %249)
  store double %264, ptr %262, align 8, !tbaa !22
  %265 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %266 unwind label %.loopexit.split-lp

266:                                              ; preds = %263
  %267 = load double, ptr %265, align 8, !tbaa !22
  %268 = load ptr, ptr %238, align 8, !tbaa !27
  %269 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %268, i64 %.0201274, i32 8
  %270 = load ptr, ptr %269, align 8, !tbaa !40
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %270, i32 noundef 0)
          to label %272 unwind label %.loopexit.split-lp

272:                                              ; preds = %266
  %273 = load double, ptr %271, align 8, !tbaa !22
  %274 = load ptr, ptr %238, align 8, !tbaa !27
  %275 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %274, i64 %.0201274, i32 9
  %276 = load ptr, ptr %275, align 8, !tbaa !39
  %277 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %276, i32 noundef 0)
          to label %278 unwind label %.loopexit.split-lp

278:                                              ; preds = %272
  %279 = load double, ptr %277, align 8, !tbaa !22
  %280 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %281 unwind label %.loopexit.split-lp

281:                                              ; preds = %278
  %282 = call double @llvm.fmuladd.f64(double %273, double %279, double %267)
  store double %282, ptr %280, align 8, !tbaa !22
  %283 = load ptr, ptr %238, align 8, !tbaa !27
  %284 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %283, i64 %.0201274, i32 9
  %285 = load ptr, ptr %284, align 8, !tbaa !39
  %286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %285, i32 noundef 0)
          to label %287 unwind label %.loopexit.split-lp

287:                                              ; preds = %281
  %288 = load double, ptr %286, align 8, !tbaa !22
  %289 = call noundef double @_ZSt3absd(double noundef %288)
  %290 = fadd double %.0206273, %289
  %.pre341 = load ptr, ptr %238, align 8, !tbaa !27
  %.phi.trans.insert = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %.pre341, i64 %.0201274, i32 1
  %.pre342 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !37
  %291 = icmp ugt i64 %.pre342, 1
  br i1 %291, label %.lr.ph269, label %._crit_edge270.loopexit

._crit_edge275:                                   ; preds = %._crit_edge270, %236
  %.0206.lcssa = phi double [ 0.000000e+00, %236 ], [ %297, %._crit_edge270 ]
  %292 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %365 unwind label %38

._crit_edge270.loopexit:                          ; preds = %359, %287
  %293 = phi ptr [ %.pre341, %287 ], [ %361, %359 ]
  %.2.lcssa = phi double [ %290, %287 ], [ %.2, %359 ]
  %.lcssa331 = phi i64 [ %.pre342, %287 ], [ %363, %359 ]
  %.pre344 = load i64, ptr %128, align 8, !tbaa !26
  br label %._crit_edge270

._crit_edge270:                                   ; preds = %._crit_edge270.loopexit, %.preheader238
  %294 = phi i64 [ %239, %.preheader238 ], [ %.pre344, %._crit_edge270.loopexit ]
  %295 = phi ptr [ %240, %.preheader238 ], [ %293, %._crit_edge270.loopexit ]
  %.1207.lcssa = phi double [ %.0206273, %.preheader238 ], [ %.2.lcssa, %._crit_edge270.loopexit ]
  %.lcssa251 = phi i64 [ 0, %.preheader238 ], [ %.lcssa331, %._crit_edge270.loopexit ]
  %296 = uitofp i64 %.lcssa251 to double
  %297 = fdiv double %.1207.lcssa, %296
  %298 = add nuw i64 %.0201274, 1
  %299 = icmp ult i64 %298, %294
  br i1 %299, label %.preheader238, label %._crit_edge275, !llvm.loop !41

.lr.ph269:                                        ; preds = %287, %359
  %300 = phi ptr [ %361, %359 ], [ %.pre341, %287 ]
  %.0200268 = phi i64 [ %360, %359 ], [ 1, %287 ]
  %.1207267 = phi double [ %.2, %359 ], [ %290, %287 ]
  %301 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %300, i64 %.0201274, i32 2
  %302 = load ptr, ptr %301, align 8, !tbaa !31
  %303 = trunc i64 %.0200268 to i32
  %304 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %302, i32 noundef %303)
          to label %305 unwind label %.loopexit

305:                                              ; preds = %.lr.ph269
  %306 = load i32, ptr %304, align 4, !tbaa !32
  %307 = load ptr, ptr %238, align 8, !tbaa !27
  %308 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %307, i64 %.0201274, i32 2
  %309 = load ptr, ptr %308, align 8, !tbaa !31
  %310 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIiEclEi(ptr noundef nonnull align 8 dereferenceable(40) %309, i32 noundef 0)
          to label %311 unwind label %.loopexit

311:                                              ; preds = %305
  %312 = load i32, ptr %310, align 4, !tbaa !32
  %313 = icmp eq i32 %306, %312
  br i1 %313, label %359, label %314

.loopexit:                                        ; preds = %.lr.ph269, %305, %314, %316, %322, %328, %331, %334, %340, %346, %349
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %1040

.loopexit.split-lp:                               ; preds = %.lr.ph269.preheader, %246, %248, %254, %260, %263, %266, %272, %278, %281
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %1040

314:                                              ; preds = %311
  %315 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %316 unwind label %.loopexit

316:                                              ; preds = %314
  %317 = load double, ptr %315, align 8, !tbaa !22
  %318 = load ptr, ptr %238, align 8, !tbaa !27
  %319 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %318, i64 %.0201274, i32 7
  %320 = load ptr, ptr %319, align 8, !tbaa !38
  %321 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %320, i32 noundef %303)
          to label %322 unwind label %.loopexit

322:                                              ; preds = %316
  %323 = load double, ptr %321, align 8, !tbaa !22
  %324 = load ptr, ptr %238, align 8, !tbaa !27
  %325 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %324, i64 %.0201274, i32 9
  %326 = load ptr, ptr %325, align 8, !tbaa !39
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %326, i32 noundef %303)
          to label %328 unwind label %.loopexit

328:                                              ; preds = %322
  %329 = load double, ptr %327, align 8, !tbaa !22
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %331 unwind label %.loopexit

331:                                              ; preds = %328
  %332 = call double @llvm.fmuladd.f64(double %323, double %329, double %317)
  store double %332, ptr %330, align 8, !tbaa !22
  %333 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %334 unwind label %.loopexit

334:                                              ; preds = %331
  %335 = load double, ptr %333, align 8, !tbaa !22
  %336 = load ptr, ptr %238, align 8, !tbaa !27
  %337 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %336, i64 %.0201274, i32 8
  %338 = load ptr, ptr %337, align 8, !tbaa !40
  %339 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %338, i32 noundef %303)
          to label %340 unwind label %.loopexit

340:                                              ; preds = %334
  %341 = load double, ptr %339, align 8, !tbaa !22
  %342 = load ptr, ptr %238, align 8, !tbaa !27
  %343 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %342, i64 %.0201274, i32 9
  %344 = load ptr, ptr %343, align 8, !tbaa !39
  %345 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %344, i32 noundef %303)
          to label %346 unwind label %.loopexit

346:                                              ; preds = %340
  %347 = load double, ptr %345, align 8, !tbaa !22
  %348 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %349 unwind label %.loopexit

349:                                              ; preds = %346
  %350 = call double @llvm.fmuladd.f64(double %341, double %347, double %335)
  store double %350, ptr %348, align 8, !tbaa !22
  %351 = load ptr, ptr %238, align 8, !tbaa !27
  %352 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %351, i64 %.0201274, i32 9
  %353 = load ptr, ptr %352, align 8, !tbaa !39
  %354 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %353, i32 noundef %303)
          to label %355 unwind label %.loopexit

355:                                              ; preds = %349
  %356 = load double, ptr %354, align 8, !tbaa !22
  %357 = call noundef double @_ZSt3absd(double noundef %356)
  %358 = fadd double %.1207267, %357
  br label %359

359:                                              ; preds = %311, %355
  %.2 = phi double [ %.1207267, %311 ], [ %358, %355 ]
  %360 = add nuw i64 %.0200268, 1
  %361 = load ptr, ptr %238, align 8, !tbaa !27
  %362 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %361, i64 %.0201274, i32 1
  %363 = load i64, ptr %362, align 8, !tbaa !37
  %364 = icmp ult i64 %360, %363
  br i1 %364, label %.lr.ph269, label %._crit_edge270.loopexit, !llvm.loop !42

365:                                              ; preds = %._crit_edge275
  %366 = load double, ptr %292, align 8, !tbaa !22
  %367 = fmul double %.0206.lcssa, 0x3D719799812DEA11
  %368 = fcmp ogt double %366, %367
  br i1 %368, label %369, label %401

369:                                              ; preds = %365
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %371 unwind label %38

371:                                              ; preds = %369
  %372 = load double, ptr %370, align 8, !tbaa !22
  %373 = fcmp ogt double %372, %367
  br i1 %373, label %374, label %401

374:                                              ; preds = %371
  %375 = 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.70)
          to label %376 unwind label %38

376:                                              ; preds = %374
  %377 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %375, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %378 unwind label %38

378:                                              ; preds = %376
  %379 = 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.71)
          to label %380 unwind label %38

380:                                              ; preds = %378
  %381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %382 unwind label %38

382:                                              ; preds = %380
  %383 = load double, ptr %381, align 8, !tbaa !22
  %384 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %379, double noundef %383)
          to label %385 unwind label %38

385:                                              ; preds = %382
  %386 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %384, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %387 unwind label %38

387:                                              ; preds = %385
  %388 = 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.72)
          to label %389 unwind label %38

389:                                              ; preds = %387
  %390 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %391 unwind label %38

391:                                              ; preds = %389
  %392 = load double, ptr %390, align 8, !tbaa !22
  %393 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %388, double noundef %392)
          to label %394 unwind label %38

394:                                              ; preds = %391
  %395 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %393, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %396 unwind label %38

396:                                              ; preds = %394
  %397 = 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.73)
          to label %398 unwind label %38

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

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

401:                                              ; preds = %371, %365
  %402 = load i64, ptr %25, align 8, !tbaa !5
  %.not315 = icmp eq i64 %402, 0
  br i1 %.not315, label %._crit_edge280, label %.lr.ph279

.lr.ph279:                                        ; preds = %401
  %403 = fmul double %122, 1.000000e-04
  %404 = getelementptr inbounds i8, ptr %0, i64 416
  br label %406

._crit_edge280:                                   ; preds = %465, %401
  %405 = 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.80)
          to label %469 unwind label %38

406:                                              ; preds = %.lr.ph279, %465
  %.0199277 = phi i64 [ 0, %.lr.ph279 ], [ %466, %465 ]
  %407 = trunc i64 %.0199277 to i32
  %408 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %407, i32 noundef 0)
          to label %409 unwind label %463

409:                                              ; preds = %406
  %410 = load double, ptr %408, align 8, !tbaa !22
  %411 = call noundef double @_ZSt3absd(double noundef %410)
  %412 = fcmp ogt double %411, %403
  br i1 %412, label %419, label %413

413:                                              ; preds = %409
  %414 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %407, i32 noundef 1)
          to label %415 unwind label %463

415:                                              ; preds = %413
  %416 = load double, ptr %414, align 8, !tbaa !22
  %417 = call noundef double @_ZSt3absd(double noundef %416)
  %418 = fcmp ogt double %417, %403
  br i1 %418, label %419, label %465

419:                                              ; preds = %415, %409
  %420 = 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.74)
          to label %421 unwind label %463

421:                                              ; preds = %419
  %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.75)
          to label %423 unwind label %463

423:                                              ; preds = %421
  %424 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %422, i64 noundef %.0199277)
          to label %425 unwind label %463

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.14)
          to label %427 unwind label %463

427:                                              ; preds = %425
  %428 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %426, ptr noundef nonnull @.str.76)
          to label %429 unwind label %463

429:                                              ; preds = %427
  %430 = load ptr, ptr %404, align 8, !tbaa !44
  %431 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %430, i64 %.0199277
  %432 = load double, ptr %431, align 8, !tbaa !45
  %433 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %428, double noundef %432)
          to label %434 unwind label %463

434:                                              ; preds = %429
  %435 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %433, ptr noundef nonnull @.str.77)
          to label %436 unwind label %463

436:                                              ; preds = %434
  %437 = load ptr, ptr %404, align 8, !tbaa !44
  %438 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %437, i64 %.0199277, i32 1
  %439 = load double, ptr %438, align 8, !tbaa !52
  %440 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %435, double noundef %439)
          to label %441 unwind label %463

441:                                              ; preds = %436
  %442 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %440, ptr noundef nonnull @.str.14)
          to label %443 unwind label %463

443:                                              ; preds = %441
  %444 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %442, ptr noundef nonnull @.str.78)
          to label %445 unwind label %463

445:                                              ; preds = %443
  %446 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %407, i32 noundef 0)
          to label %447 unwind label %463

447:                                              ; preds = %445
  %448 = load double, ptr %446, align 8, !tbaa !22
  %449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %444, double noundef %448)
          to label %450 unwind label %463

450:                                              ; preds = %447
  %451 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %449, ptr noundef nonnull @.str.77)
          to label %452 unwind label %463

452:                                              ; preds = %450
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %407, i32 noundef 1)
          to label %454 unwind label %463

454:                                              ; preds = %452
  %455 = load double, ptr %453, align 8, !tbaa !22
  %456 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %451, double noundef %455)
          to label %457 unwind label %463

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

459:                                              ; preds = %457
  %460 = 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.79)
          to label %461 unwind label %463

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

463:                                              ; preds = %461, %459, %457, %454, %452, %450, %447, %445, %443, %441, %436, %434, %429, %427, %425, %423, %421, %419, %413, %406
  %464 = landingpad { ptr, i32 }
          cleanup
  br label %1040

465:                                              ; preds = %415, %461
  %466 = add nuw i64 %.0199277, 1
  %467 = load i64, ptr %25, align 8, !tbaa !5
  %468 = icmp ult i64 %466, %467
  br i1 %468, label %406, label %._crit_edge280, !llvm.loop !53

469:                                              ; preds = %._crit_edge280
  %470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %405, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %471 unwind label %38

471:                                              ; preds = %469
  %472 = 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.81)
          to label %473 unwind label %38

473:                                              ; preds = %471
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %474 unwind label %38

474:                                              ; preds = %473
  %475 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %9, i32 noundef 0)
          to label %476 unwind label %527

476:                                              ; preds = %474
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %472, double noundef %475)
          to label %478 unwind label %527

478:                                              ; preds = %476
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %477, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %480 unwind label %527

480:                                              ; preds = %478
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #10
  %481 = 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.82)
          to label %482 unwind label %38

482:                                              ; preds = %480
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %10, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %483 unwind label %38

483:                                              ; preds = %482
  %484 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %10, i32 noundef 1)
          to label %485 unwind label %529

485:                                              ; preds = %483
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %481, double noundef %484)
          to label %487 unwind label %529

487:                                              ; preds = %485
  %488 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %486, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %489 unwind label %529

489:                                              ; preds = %487
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #10
  invoke void @_Z3absIdE7Array2DIT_ERS2_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %11, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %490 unwind label %38

490:                                              ; preds = %489
  %491 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %11, i32 noundef 0)
          to label %492 unwind label %531

492:                                              ; preds = %490
  %493 = fmul double %122, 0x3D719799812DEA11
  %494 = fcmp ule double %491, %493
  br i1 %494, label %495, label %.thread236

.thread236:                                       ; preds = %492
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  br label %500

495:                                              ; preds = %492
  invoke void @_Z3absIdE7Array2DIT_ERS2_(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %12, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %496 unwind label %531

496:                                              ; preds = %495
  %497 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %12, i32 noundef 1)
          to label %498 unwind label %533

498:                                              ; preds = %496
  %499 = fcmp ogt double %497, %493
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  br i1 %499, label %500, label %540

500:                                              ; preds = %.thread236, %498
  %501 = 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.80)
          to label %502 unwind label %38

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

504:                                              ; preds = %502
  %505 = 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.81)
          to label %506 unwind label %38

506:                                              ; preds = %504
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %507 unwind label %38

507:                                              ; preds = %506
  %508 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %13, i32 noundef 0)
          to label %509 unwind label %536

509:                                              ; preds = %507
  %510 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %505, double noundef %508)
          to label %511 unwind label %536

511:                                              ; preds = %509
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %510, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %513 unwind label %536

513:                                              ; preds = %511
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #10
  %514 = 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.82)
          to label %515 unwind label %38

515:                                              ; preds = %513
  invoke void @_ZN7Array2DIdEC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %14, ptr noundef nonnull align 8 dereferenceable(40) %23)
          to label %516 unwind label %38

516:                                              ; preds = %515
  %517 = invoke noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef nonnull %14, i32 noundef 1)
          to label %518 unwind label %538

518:                                              ; preds = %516
  %519 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %514, double noundef %517)
          to label %520 unwind label %538

520:                                              ; preds = %518
  %521 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %519, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %522 unwind label %538

522:                                              ; preds = %520
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #10
  %523 = 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.83)
          to label %524 unwind label %38

524:                                              ; preds = %522
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %523, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %526 unwind label %38

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

527:                                              ; preds = %478, %476, %474
  %528 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #10
  br label %1040

529:                                              ; preds = %487, %485, %483
  %530 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #10
  br label %1040

531:                                              ; preds = %495, %490
  %532 = landingpad { ptr, i32 }
          cleanup
  br label %535

533:                                              ; preds = %496
  %534 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #10
  br label %535

535:                                              ; preds = %533, %531
  %.pn = phi { ptr, i32 } [ %534, %533 ], [ %532, %531 ]
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #10
  br label %1040

536:                                              ; preds = %511, %509, %507
  %537 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #10
  br label %1040

538:                                              ; preds = %520, %518, %516
  %539 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #10
  br label %1040

540:                                              ; preds = %498
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %15, ptr noundef nonnull align 8 dereferenceable(40) %2, double noundef 0.000000e+00)
          to label %541 unwind label %38

541:                                              ; preds = %540
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #10
  %542 = 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.84)
          to label %543 unwind label %38

543:                                              ; preds = %541
  %544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %545 unwind label %38

545:                                              ; preds = %543
  %546 = load double, ptr %544, align 8, !tbaa !22
  %547 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %542, double noundef %546)
          to label %548 unwind label %38

548:                                              ; preds = %545
  %549 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %547, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %550 unwind label %38

550:                                              ; preds = %548
  %551 = 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.85)
          to label %552 unwind label %38

552:                                              ; preds = %550
  %553 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %554 unwind label %38

554:                                              ; preds = %552
  %555 = load double, ptr %553, align 8, !tbaa !22
  %556 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %551, double noundef %555)
          to label %557 unwind label %38

557:                                              ; preds = %554
  %558 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %556, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader237 unwind label %38

.preheader237:                                    ; preds = %557
  %559 = load i64, ptr %25, align 8, !tbaa !5
  %.not316 = icmp eq i64 %559, 0
  br i1 %.not316, label %._crit_edge283, label %.lr.ph282

._crit_edge283:                                   ; preds = %578, %.preheader237
  %560 = 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.86)
          to label %585 unwind label %38

.lr.ph282:                                        ; preds = %.preheader237, %578
  %.0197281 = phi i64 [ %580, %578 ], [ 0, %.preheader237 ]
  %561 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %562 unwind label %583

562:                                              ; preds = %.lr.ph282
  %563 = load double, ptr %561, align 8, !tbaa !22
  %564 = trunc i64 %.0197281 to i32
  %565 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %564, i32 noundef 0)
          to label %566 unwind label %583

566:                                              ; preds = %562
  %567 = load double, ptr %565, align 8, !tbaa !22
  %568 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %569 unwind label %583

569:                                              ; preds = %566
  %570 = fadd double %563, %567
  store double %570, ptr %568, align 8, !tbaa !22
  %571 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %572 unwind label %583

572:                                              ; preds = %569
  %573 = load double, ptr %571, align 8, !tbaa !22
  %574 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEii(ptr noundef nonnull align 8 dereferenceable(40) %23, i32 noundef %564, i32 noundef 1)
          to label %575 unwind label %583

575:                                              ; preds = %572
  %576 = load double, ptr %574, align 8, !tbaa !22
  %577 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %578 unwind label %583

578:                                              ; preds = %575
  %579 = fadd double %573, %576
  store double %579, ptr %577, align 8, !tbaa !22
  %580 = add nuw i64 %.0197281, 1
  %581 = load i64, ptr %25, align 8, !tbaa !5
  %582 = icmp ult i64 %580, %581
  br i1 %582, label %.lr.ph282, label %._crit_edge283, !llvm.loop !54

583:                                              ; preds = %575, %572, %569, %566, %562, %.lr.ph282
  %584 = landingpad { ptr, i32 }
          cleanup
  br label %1040

585:                                              ; preds = %._crit_edge283
  %586 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %560, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %587 unwind label %38

587:                                              ; preds = %585
  %588 = 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.87)
          to label %589 unwind label %38

589:                                              ; preds = %587
  %590 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %591 unwind label %38

591:                                              ; preds = %589
  %592 = load double, ptr %590, align 8, !tbaa !22
  %593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %588, double noundef %592)
          to label %594 unwind label %38

594:                                              ; preds = %591
  %595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %593, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %596 unwind label %38

596:                                              ; preds = %594
  %597 = 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.88)
          to label %598 unwind label %38

598:                                              ; preds = %596
  %599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %600 unwind label %38

600:                                              ; preds = %598
  %601 = load double, ptr %599, align 8, !tbaa !22
  %602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %597, double noundef %601)
          to label %603 unwind label %38

603:                                              ; preds = %600
  %604 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %602, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %605 unwind label %38

605:                                              ; preds = %603
  %606 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %607 unwind label %38

607:                                              ; preds = %605
  %608 = load double, ptr %606, align 8, !tbaa !22
  %609 = fcmp ogt double %608, %493
  br i1 %609, label %610, label %642

610:                                              ; preds = %607
  %611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 2)
          to label %612 unwind label %38

612:                                              ; preds = %610
  %613 = load double, ptr %611, align 8, !tbaa !22
  %614 = fcmp ogt double %613, %493
  br i1 %614, label %615, label %642

615:                                              ; preds = %612
  %616 = 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.89)
          to label %617 unwind label %38

617:                                              ; preds = %615
  %618 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %616, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %619 unwind label %38

619:                                              ; preds = %617
  %620 = 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.86)
          to label %621 unwind label %38

621:                                              ; preds = %619
  %622 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %620, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %623 unwind label %38

623:                                              ; preds = %621
  %624 = 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.87)
          to label %625 unwind label %38

625:                                              ; preds = %623
  %626 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %627 unwind label %38

627:                                              ; preds = %625
  %628 = load double, ptr %626, align 8, !tbaa !22
  %629 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %624, double noundef %628)
          to label %630 unwind label %38

630:                                              ; preds = %627
  %631 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %629, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %632 unwind label %38

632:                                              ; preds = %630
  %633 = 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.88)
          to label %634 unwind label %38

634:                                              ; preds = %632
  %635 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %636 unwind label %38

636:                                              ; preds = %634
  %637 = load double, ptr %635, align 8, !tbaa !22
  %638 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %633, double noundef %637)
          to label %639 unwind label %38

639:                                              ; preds = %636
  %640 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %638, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %641 unwind label %38

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

642:                                              ; preds = %612, %607
  invoke void @_ZN7Array2DIdEaSEd(ptr dead_on_unwind nonnull writable sret(%class.Array2D.4) align 8 %16, ptr noundef nonnull align 8 dereferenceable(40) %4, double noundef 0.000000e+00)
          to label %643 unwind label %38

643:                                              ; preds = %642
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %16) #10
  %644 = load i64, ptr %128, align 8, !tbaa !26
  %.not317 = icmp eq i64 %644, 0
  br i1 %.not317, label %._crit_edge288, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %643
  %645 = getelementptr inbounds i8, ptr %0, i64 480
  %.pre345 = load ptr, ptr %645, align 8, !tbaa !27
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %._crit_edge286
  %646 = phi i64 [ %644, %.preheader.lr.ph ], [ %651, %._crit_edge286 ]
  %647 = phi ptr [ %.pre345, %.preheader.lr.ph ], [ %652, %._crit_edge286 ]
  %.0196287 = phi i64 [ 0, %.preheader.lr.ph ], [ %653, %._crit_edge286 ]
  %648 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %647, i64 %.0196287, i32 3
  %649 = load i64, ptr %648, align 8, !tbaa !28
  %.not318 = icmp eq i64 %649, 0
  br i1 %.not318, label %._crit_edge286, label %.lr.ph285

._crit_edge288:                                   ; preds = %._crit_edge286, %643
  %650 = 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.90)
          to label %699 unwind label %38

._crit_edge286.loopexit:                          ; preds = %690
  %.pre346 = load i64, ptr %128, align 8, !tbaa !26
  br label %._crit_edge286

._crit_edge286:                                   ; preds = %._crit_edge286.loopexit, %.preheader
  %651 = phi i64 [ %.pre346, %._crit_edge286.loopexit ], [ %646, %.preheader ]
  %652 = phi ptr [ %693, %._crit_edge286.loopexit ], [ %647, %.preheader ]
  %653 = add nuw i64 %.0196287, 1
  %654 = icmp ult i64 %653, %651
  br i1 %654, label %.preheader, label %._crit_edge288, !llvm.loop !55

.lr.ph285:                                        ; preds = %.preheader, %690
  %.0195284 = phi i64 [ %692, %690 ], [ 0, %.preheader ]
  %655 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 0)
          to label %656 unwind label %697

656:                                              ; preds = %.lr.ph285
  %657 = load double, ptr %655, align 8, !tbaa !22
  %658 = load ptr, ptr %645, align 8, !tbaa !27
  %659 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %658, i64 %.0196287, i32 4
  %660 = load ptr, ptr %659, align 8, !tbaa !33
  %661 = trunc i64 %.0195284 to i32
  %662 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %660, i32 noundef %661)
          to label %663 unwind label %697

663:                                              ; preds = %656
  %664 = load double, ptr %662, align 8, !tbaa !22
  %665 = load ptr, ptr %645, align 8, !tbaa !27
  %666 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %665, i64 %.0196287, i32 6
  %667 = load ptr, ptr %666, align 8, !tbaa !34
  %668 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %667, i32 noundef %661)
          to label %669 unwind label %697

669:                                              ; preds = %663
  %670 = load double, ptr %668, align 8, !tbaa !22
  %671 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 0)
          to label %672 unwind label %697

672:                                              ; preds = %669
  %673 = call double @llvm.fmuladd.f64(double %664, double %670, double %657)
  store double %673, ptr %671, align 8, !tbaa !22
  %674 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 1)
          to label %675 unwind label %697

675:                                              ; preds = %672
  %676 = load double, ptr %674, align 8, !tbaa !22
  %677 = load ptr, ptr %645, align 8, !tbaa !27
  %678 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %677, i64 %.0196287, i32 5
  %679 = load ptr, ptr %678, align 8, !tbaa !35
  %680 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %679, i32 noundef %661)
          to label %681 unwind label %697

681:                                              ; preds = %675
  %682 = load double, ptr %680, align 8, !tbaa !22
  %683 = load ptr, ptr %645, align 8, !tbaa !27
  %684 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %683, i64 %.0196287, i32 6
  %685 = load ptr, ptr %684, align 8, !tbaa !34
  %686 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %685, i32 noundef %661)
          to label %687 unwind label %697

687:                                              ; preds = %681
  %688 = load double, ptr %686, align 8, !tbaa !22
  %689 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 1)
          to label %690 unwind label %697

690:                                              ; preds = %687
  %691 = call double @llvm.fmuladd.f64(double %682, double %688, double %676)
  store double %691, ptr %689, align 8, !tbaa !22
  %692 = add nuw i64 %.0195284, 1
  %693 = load ptr, ptr %645, align 8, !tbaa !27
  %694 = getelementptr inbounds %"class.EulerSolver2D::bgrid_type", ptr %693, i64 %.0196287, i32 3
  %695 = load i64, ptr %694, align 8, !tbaa !28
  %696 = icmp ult i64 %692, %695
  br i1 %696, label %.lr.ph285, label %._crit_edge286.loopexit, !llvm.loop !56

697:                                              ; preds = %687, %681, %675, %672, %669, %663, %656, %.lr.ph285
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %1040

699:                                              ; preds = %._crit_edge288
  %700 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %650, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %701 unwind label %38

701:                                              ; preds = %699
  %702 = 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.91)
          to label %703 unwind label %38

703:                                              ; preds = %701
  %704 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 0)
          to label %705 unwind label %38

705:                                              ; preds = %703
  %706 = load double, ptr %704, align 8, !tbaa !22
  %707 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %702, double noundef %706)
          to label %708 unwind label %38

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

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 nonnull @.str.92)
          to label %712 unwind label %38

712:                                              ; preds = %710
  %713 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 1)
          to label %714 unwind label %38

714:                                              ; preds = %712
  %715 = load double, ptr %713, align 8, !tbaa !22
  %716 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %711, double noundef %715)
          to label %717 unwind label %38

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

719:                                              ; preds = %717
  %720 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 1)
          to label %721 unwind label %38

721:                                              ; preds = %719
  %722 = load double, ptr %720, align 8, !tbaa !22
  %723 = fcmp ogt double %722, %367
  br i1 %723, label %724, label %756

724:                                              ; preds = %721
  %725 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 2)
          to label %726 unwind label %38

726:                                              ; preds = %724
  %727 = load double, ptr %725, align 8, !tbaa !22
  %728 = fcmp ogt double %727, %367
  br i1 %728, label %729, label %756

729:                                              ; preds = %726
  %730 = 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.93)
          to label %731 unwind label %38

731:                                              ; preds = %729
  %732 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %730, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %733 unwind label %38

733:                                              ; preds = %731
  %734 = 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.94)
          to label %735 unwind label %38

735:                                              ; preds = %733
  %736 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %734, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %737 unwind label %38

737:                                              ; preds = %735
  %738 = 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.91)
          to label %739 unwind label %38

739:                                              ; preds = %737
  %740 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 0)
          to label %741 unwind label %38

741:                                              ; preds = %739
  %742 = load double, ptr %740, align 8, !tbaa !22
  %743 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %738, double noundef %742)
          to label %744 unwind label %38

744:                                              ; preds = %741
  %745 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %743, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %746 unwind label %38

746:                                              ; preds = %744
  %747 = 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.92)
          to label %748 unwind label %38

748:                                              ; preds = %746
  %749 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7Array2DIdEclEi(ptr noundef nonnull align 8 dereferenceable(40) %4, i32 noundef 1)
          to label %750 unwind label %38

750:                                              ; preds = %748
  %751 = load double, ptr %749, align 8, !tbaa !22
  %752 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %747, double noundef %751)
          to label %753 unwind label %38

753:                                              ; preds = %750
  %754 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %752, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %755 unwind label %38

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

756:                                              ; preds = %726, %721
  store double 1.000000e+15, ptr %5, align 8, !tbaa !22
  store double -1.000000e+00, ptr %6, align 8, !tbaa !22
  %757 = getelementptr inbounds i8, ptr %0, i64 440
  %758 = load i64, ptr %757, align 8, !tbaa !57
  %.not319 = icmp eq i64 %758, 0
  br i1 %.not319, label %._crit_edge295, label %.lr.ph294

.lr.ph294:                                        ; preds = %756
  %759 = getelementptr inbounds i8, ptr %0, i64 448
  br label %763

._crit_edge295:                                   ; preds = %839, %756
  %.0210.lcssa = phi double [ 0.000000e+00, %756 ], [ %776, %839 ]
  %.0205.lcssa = phi double [ 0.000000e+00, %756 ], [ %775, %839 ]
  %.lcssa245 = phi i64 [ 0, %756 ], [ %840, %839 ]
  %760 = uitofp nneg i64 %.lcssa245 to double
  %761 = fdiv double %.0205.lcssa, %760
  %762 = 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 %842 unwind label %38

763:                                              ; preds = %.lr.ph294, %839
  %indvars.iv = phi i64 [ 0, %.lr.ph294 ], [ %indvars.iv.next, %839 ]
  %.0205291 = phi double [ 0.000000e+00, %.lr.ph294 ], [ %775, %839 ]
  %.0210290 = phi double [ 0.000000e+00, %.lr.ph294 ], [ %776, %839 ]
  %764 = load ptr, ptr %759, align 8, !tbaa !58
  %765 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %764, i64 %indvars.iv, i32 8
  %766 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %765)
  %767 = load double, ptr %766, align 8, !tbaa !22
  store double %767, ptr %5, align 8, !tbaa !22
  %768 = load ptr, ptr %759, align 8, !tbaa !58
  %769 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %768, i64 %indvars.iv, i32 8
  %770 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %769)
  %771 = load double, ptr %770, align 8, !tbaa !22
  store double %771, ptr %6, align 8, !tbaa !22
  %772 = load ptr, ptr %759, align 8, !tbaa !58
  %773 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %772, i64 %indvars.iv, i32 8
  %774 = load double, ptr %773, align 8, !tbaa !59
  %775 = fadd double %.0205291, %774
  %776 = fadd double %.0210290, %774
  %777 = fcmp olt double %774, 0.000000e+00
  br i1 %777, label %778, label %797

778:                                              ; preds = %763
  %779 = 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.95)
          to label %780 unwind label %795

780:                                              ; preds = %778
  %781 = load ptr, ptr %759, align 8, !tbaa !58
  %782 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %781, i64 %indvars.iv, i32 8
  %783 = load double, ptr %782, align 8, !tbaa !59
  %784 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %779, double noundef %783)
          to label %785 unwind label %795

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

787:                                              ; preds = %785
  %788 = trunc nuw nsw i64 %indvars.iv to i32
  %789 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %786, i32 noundef %788)
          to label %790 unwind label %795

790:                                              ; preds = %787
  %791 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %789, ptr noundef nonnull @.str.97)
          to label %792 unwind label %795

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

794:                                              ; preds = %792
  %.pre347 = load ptr, ptr %759, align 8, !tbaa !58
  %.phi.trans.insert348 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %.pre347, i64 %indvars.iv, i32 8
  %.pre349 = load double, ptr %.phi.trans.insert348, align 8, !tbaa !59
  br label %797

795:                                              ; preds = %837, %835, %833, %827, %825, %823, %821, %818, %816, %810, %808, %803, %801, %792, %790, %787, %785, %780, %778
  %796 = landingpad { ptr, i32 }
          cleanup
  br label %1040

797:                                              ; preds = %794, %763
  %798 = phi double [ %.pre349, %794 ], [ %774, %763 ]
  %799 = call noundef double @_ZSt3absd(double noundef %798)
  %800 = fcmp olt double %799, 0x3D06849B86A12B9B
  br i1 %800, label %801, label %839

801:                                              ; preds = %797
  %802 = 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.98)
          to label %803 unwind label %795

803:                                              ; preds = %801
  %804 = load ptr, ptr %759, align 8, !tbaa !58
  %805 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %804, i64 %indvars.iv, i32 8
  %806 = load double, ptr %805, align 8, !tbaa !59
  %807 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %802, double noundef %806)
          to label %808 unwind label %795

808:                                              ; preds = %803
  %809 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %807, ptr noundef nonnull @.str.7)
          to label %810 unwind label %795

810:                                              ; preds = %808
  %811 = load ptr, ptr %759, align 8, !tbaa !58
  %812 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %811, i64 %indvars.iv, i32 8
  %813 = load double, ptr %812, align 8, !tbaa !59
  %814 = call noundef double @_ZSt3absd(double noundef %813)
  %815 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %809, double noundef %814)
          to label %816 unwind label %795

816:                                              ; preds = %810
  %817 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %815, ptr noundef nonnull @.str.99)
          to label %818 unwind label %795

818:                                              ; preds = %816
  %819 = trunc nuw nsw i64 %indvars.iv to i32
  %820 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %817, i32 noundef %819)
          to label %821 unwind label %795

821:                                              ; preds = %818
  %822 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %820, ptr noundef nonnull @.str.97)
          to label %823 unwind label %795

823:                                              ; preds = %821
  %824 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %822, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %825 unwind label %795

825:                                              ; preds = %823
  %826 = 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.100)
          to label %827 unwind label %795

827:                                              ; preds = %825
  %828 = load ptr, ptr %759, align 8, !tbaa !58
  %829 = getelementptr inbounds %"class.EulerSolver2D::elm_type", ptr %828, i64 %indvars.iv, i32 8
  %830 = load double, ptr %829, align 8, !tbaa !59
  %831 = call noundef double @_ZSt3absd(double noundef %830)
  %832 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %826, double noundef %831)
          to label %833 unwind label %795

833:                                              ; preds = %827
  %834 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %832, ptr noundef nonnull @.str.101)
          to label %835 unwind label %795

835:                                              ; preds = %833
  %836 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %834, double noundef 0x3D06849B86A12B9B)
          to label %837 unwind label %795

837:                                              ; preds = %835
  %838 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %836, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %839 unwind label %795

839:                                              ; preds = %837, %797
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %840 = load i64, ptr %757, align 8, !tbaa !57
  %841 = icmp ugt i64 %840, %indvars.iv.next
  br i1 %841, label %763, label %._crit_edge295, !llvm.loop !61

842:                                              ; preds = %._crit_edge295
  %843 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %762, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %844 unwind label %38

844:                                              ; preds = %842
  %845 = 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.102)
          to label %846 unwind label %38

846:                                              ; preds = %844
  %847 = load double, ptr %5, align 8, !tbaa !22
  %848 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %845, double noundef %847)
          to label %849 unwind label %38

849:                                              ; preds = %846
  %850 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %848, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %851 unwind label %38

851:                                              ; preds = %849
  %852 = 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.103)
          to label %853 unwind label %38

853:                                              ; preds = %851
  %854 = load double, ptr %6, align 8, !tbaa !22
  %855 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %852, double noundef %854)
          to label %856 unwind label %38

856:                                              ; preds = %853
  %857 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %855, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %858 unwind label %38

858:                                              ; preds = %856
  %859 = 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.104)
          to label %860 unwind label %38

860:                                              ; preds = %858
  %861 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %859, double noundef %761)
          to label %862 unwind label %38

862:                                              ; preds = %860
  %863 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %861, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %864 unwind label %38

864:                                              ; preds = %862
  %865 = 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 %866 unwind label %38

866:                                              ; preds = %864
  %867 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %865, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %868 unwind label %38

868:                                              ; preds = %866
  store double 1.000000e+15, ptr %5, align 8, !tbaa !22
  store double -1.000000e+00, ptr %6, align 8, !tbaa !22
  %869 = load i64, ptr %25, align 8, !tbaa !5
  %.not320 = icmp eq i64 %869, 0
  br i1 %.not320, label %._crit_edge305, label %.lr.ph304

.lr.ph304:                                        ; preds = %868
  %870 = getelementptr inbounds i8, ptr %0, i64 416
  br label %874

._crit_edge305:                                   ; preds = %927, %868
  %.3221.lcssa = phi i32 [ 0, %868 ], [ %.5, %927 ]
  %.0209.lcssa = phi double [ 0.000000e+00, %868 ], [ %887, %927 ]
  %.1.lcssa = phi double [ 0.000000e+00, %868 ], [ %886, %927 ]
  %.lcssa = phi i64 [ 0, %868 ], [ %929, %927 ]
  %871 = uitofp i64 %.lcssa to double
  %872 = fdiv double %.1.lcssa, %871
  %873 = 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 %931 unwind label %38

874:                                              ; preds = %.lr.ph304, %927
  %.0302 = phi i64 [ 0, %.lr.ph304 ], [ %928, %927 ]
  %.1301 = phi double [ 0.000000e+00, %.lr.ph304 ], [ %886, %927 ]
  %.0209300 = phi double [ 0.000000e+00, %.lr.ph304 ], [ %887, %927 ]
  %.3221299 = phi i32 [ 0, %.lr.ph304 ], [ %.5, %927 ]
  %875 = load ptr, ptr %870, align 8, !tbaa !44
  %876 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %875, i64 %.0302, i32 6
  %877 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %876)
  %878 = load double, ptr %877, align 8, !tbaa !22
  store double %878, ptr %5, align 8, !tbaa !22
  %879 = load ptr, ptr %870, align 8, !tbaa !44
  %880 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %879, i64 %.0302, i32 6
  %881 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %880)
  %882 = load double, ptr %881, align 8, !tbaa !22
  store double %882, ptr %6, align 8, !tbaa !22
  %883 = load ptr, ptr %870, align 8, !tbaa !44
  %884 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %883, i64 %.0302, i32 6
  %885 = load double, ptr %884, align 8, !tbaa !62
  %886 = fadd double %.1301, %885
  %887 = fadd double %.0209300, %885
  %888 = fcmp olt double %885, 0.000000e+00
  br i1 %888, label %889, label %907

889:                                              ; preds = %874
  %890 = 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.105)
          to label %891 unwind label %905

891:                                              ; preds = %889
  %892 = load ptr, ptr %870, align 8, !tbaa !44
  %893 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %892, i64 %.0302, i32 6
  %894 = load double, ptr %893, align 8, !tbaa !62
  %895 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %890, double noundef %894)
          to label %896 unwind label %905

896:                                              ; preds = %891
  %897 = load ptr, ptr %870, align 8, !tbaa !44
  %898 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %895, ptr noundef %897)
          to label %899 unwind label %905

899:                                              ; preds = %896
  %900 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %898, ptr noundef nonnull @.str.106)
          to label %901 unwind label %905

901:                                              ; preds = %899
  %902 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %900, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %903 unwind label %905

903:                                              ; preds = %901
  %904 = add nsw i32 %.3221299, 1
  %.pre350 = load ptr, ptr %870, align 8, !tbaa !44
  %.phi.trans.insert351 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %.pre350, i64 %.0302, i32 6
  %.pre352 = load double, ptr %.phi.trans.insert351, align 8, !tbaa !62
  br label %907

905:                                              ; preds = %923, %921, %918, %913, %911, %901, %899, %896, %891, %889
  %906 = landingpad { ptr, i32 }
          cleanup
  br label %1040

907:                                              ; preds = %903, %874
  %908 = phi double [ %.pre352, %903 ], [ %885, %874 ]
  %.4 = phi i32 [ %904, %903 ], [ %.3221299, %874 ]
  %909 = call noundef double @_ZSt3absd(double noundef %908)
  %910 = fcmp olt double %909, 0x3D06849B86A12B9B
  br i1 %910, label %911, label %927

911:                                              ; preds = %907
  %912 = 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.107)
          to label %913 unwind label %905

913:                                              ; preds = %911
  %914 = load ptr, ptr %870, align 8, !tbaa !44
  %915 = getelementptr inbounds %"class.EulerSolver2D::node_type", ptr %914, i64 %.0302, i32 6
  %916 = load double, ptr %915, align 8, !tbaa !62
  %917 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %912, double noundef %916)
          to label %918 unwind label %905

918:                                              ; preds = %913
  %919 = load ptr, ptr %870, align 8, !tbaa !44
  %920 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPKv(ptr noundef nonnull align 8 dereferenceable(8) %917, ptr noundef %919)
          to label %921 unwind label %905

921:                                              ; preds = %918
  %922 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %920, ptr noundef nonnull @.str.106)
          to label %923 unwind label %905

923:                                              ; preds = %921
  %924 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %922, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %925 unwind label %905

925:                                              ; preds = %923
  %926 = add nsw i32 %.4, 1
  br label %927

927:                                              ; preds = %907, %925
  %.5 = phi i32 [ %926, %925 ], [ %.4, %907 ]
  %928 = add nuw i64 %.0302, 1
  %929 = load i64, ptr %25, align 8, !tbaa !5
  %930 = icmp ult i64 %928, %929
  br i1 %930, label %874, label %._crit_edge305, !llvm.loop !63

931:                                              ; preds = %._crit_edge305
  %932 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %873, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %933 unwind label %38

933:                                              ; preds = %931
  %934 = 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.108)
          to label %935 unwind label %38

935:                                              ; preds = %933
  %936 = load double, ptr %5, align 8, !tbaa !22
  %937 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %934, double noundef %936)
          to label %938 unwind label %38

938:                                              ; preds = %935
  %939 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %937, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %940 unwind label %38

940:                                              ; preds = %938
  %941 = 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.109)
          to label %942 unwind label %38

942:                                              ; preds = %940
  %943 = load double, ptr %6, align 8, !tbaa !22
  %944 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %941, double noundef %943)
          to label %945 unwind label %38

945:                                              ; preds = %942
  %946 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %944, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %947 unwind label %38

947:                                              ; preds = %945
  %948 = 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.110)
          to label %949 unwind label %38

949:                                              ; preds = %947
  %950 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %948, double noundef %872)
          to label %951 unwind label %38

951:                                              ; preds = %949
  %952 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %950, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %953 unwind label %38

953:                                              ; preds = %951
  %954 = 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 %955 unwind label %38

955:                                              ; preds = %953
  %956 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %954, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %957 unwind label %38

957:                                              ; preds = %955
  %958 = icmp sgt i32 %.3221.lcssa, 0
  br i1 %958, label %959, label %960

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

960:                                              ; preds = %957
  %961 = fsub double %.0209.lcssa, %.0210.lcssa
  %962 = call noundef double @_ZSt3absd(double noundef %961)
  %963 = fmul double %.0209.lcssa, 1.000000e-08
  %964 = fcmp ogt double %962, %963
  br i1 %964, label %965, label %992

965:                                              ; preds = %960
  %966 = 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.111)
          to label %967 unwind label %38

967:                                              ; preds = %965
  %968 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %966, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %969 unwind label %38

969:                                              ; preds = %967
  %970 = 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.112)
          to label %971 unwind label %38

971:                                              ; preds = %969
  %972 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %970, double noundef %.0210.lcssa)
          to label %973 unwind label %38

973:                                              ; preds = %971
  %974 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %972, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %975 unwind label %38

975:                                              ; preds = %973
  %976 = 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.113)
          to label %977 unwind label %38

977:                                              ; preds = %975
  %978 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %976, double noundef %.0209.lcssa)
          to label %979 unwind label %38

979:                                              ; preds = %977
  %980 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %978, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %981 unwind label %38

981:                                              ; preds = %979
  %982 = 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.114)
          to label %983 unwind label %38

983:                                              ; preds = %981
  %984 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %982, double noundef %961)
          to label %985 unwind label %38

985:                                              ; preds = %983
  %986 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %984, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %987 unwind label %38

987:                                              ; preds = %985
  %988 = 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.115)
          to label %989 unwind label %38

989:                                              ; preds = %987
  %990 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %988, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %991 unwind label %38

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

992:                                              ; preds = %960
  invoke void @_ZN13EulerSolver2D10MainData2D17check_skewness_ncEv(ptr noundef nonnull align 8 dereferenceable(512) %0)
          to label %993 unwind label %38

993:                                              ; preds = %992
  invoke void @_ZN13EulerSolver2D10MainData2D10compute_arEv(ptr noundef nonnull align 8 dereferenceable(512) %0)
          to label %994 unwind label %38

994:                                              ; preds = %993
  %995 = 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 %996 unwind label %38

996:                                              ; preds = %994
  %997 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %995, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %998 unwind label %38

998:                                              ; preds = %996
  %999 = 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.116)
          to label %1000 unwind label %38

1000:                                             ; preds = %998
  %1001 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %999, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1002 unwind label %38

1002:                                             ; preds = %1000
  %1003 = 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 %1004 unwind label %38

1004:                                             ; preds = %1002
  %1005 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1003, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1006 unwind label %38

1006:                                             ; preds = %1004
  %1007 = 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.117)
          to label %1008 unwind label %38

1008:                                             ; preds = %1006
  %1009 = getelementptr inbounds i8, ptr %0, i64 488
  %1010 = load i64, ptr %1009, align 8, !tbaa !64
  %1011 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1007, i64 noundef %1010)
          to label %1012 unwind label %38

1012:                                             ; preds = %1008
  %1013 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1011, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1014 unwind label %38

1014:                                             ; preds = %1012
  %1015 = 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.118)
          to label %1016 unwind label %38

1016:                                             ; preds = %1014
  %1017 = load i64, ptr %30, align 8, !tbaa !14
  %1018 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1015, i64 noundef %1017)
          to label %1019 unwind label %38

1019:                                             ; preds = %1016
  %1020 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1018, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1021 unwind label %38

1021:                                             ; preds = %1019
  %1022 = 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.119)
          to label %1023 unwind label %38

1023:                                             ; preds = %1021
  %1024 = load i64, ptr %128, align 8, !tbaa !26
  %1025 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1022, i64 noundef %1024)
          to label %1026 unwind label %38

1026:                                             ; preds = %1023
  %1027 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1025, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1028 unwind label %38

1028:                                             ; preds = %1026
  %1029 = 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.120)
          to label %1030 unwind label %38

1030:                                             ; preds = %1028
  %1031 = load i64, ptr %757, align 8, !tbaa !57
  %1032 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1029, i64 noundef %1031)
          to label %1033 unwind label %38

1033:                                             ; preds = %1030
  %1034 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1032, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1035 unwind label %38

1035:                                             ; preds = %1033
  %1036 = 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 %1037 unwind label %38

1037:                                             ; preds = %1035
  %1038 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1036, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1039 unwind label %38

1039:                                             ; preds = %1037
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %2) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %2) #10
  ret void

1040:                                             ; preds = %.loopexit, %.loopexit.split-lp, %905, %795, %697, %583, %538, %536, %535, %529, %527, %463, %234, %113, %40, %38
  %.pn232 = phi { ptr, i32 } [ %114, %113 ], [ %235, %234 ], [ %39, %38 ], [ %464, %463 ], [ %539, %538 ], [ %537, %536 ], [ %584, %583 ], [ %698, %697 ], [ %796, %795 ], [ %906, %905 ], [ %.pn, %535 ], [ %530, %529 ], [ %528, %527 ], [ %41, %40 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #10
  br label %1041

1041:                                             ; preds = %1040, %36
  %.pn232.pn = phi { ptr, i32 } [ %.pn232, %1040 ], [ %37, %36 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #10
  br label %1042

1042:                                             ; preds = %1041, %34
  %.pn232.pn.pn = phi { ptr, i32 } [ %.pn232.pn, %1041 ], [ %35, %34 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #10
  call void @_ZN7Array2DIdED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %2) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %2) #10
  resume { ptr, i32 } %.pn232.pn.pn
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #9

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_Z9MaxColValIdET_7Array2DIS0_Ei(ptr noundef, i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIdERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #9

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN13EulerSolver2D10MainData2D10compute_arEv(ptr noundef nonnull align 8 dereferenceable(512)) local_unnamed_addr #2 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 = { 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 #4 = { 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 #5 = { "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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 #9 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { builtin allocsize(0) }
attributes #12 = { builtin nounwind }
attributes #13 = { noreturn 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 456}
!15 = !{!6, !9, i64 464}
!16 = !{!17, !18, i64 0}
!17 = !{!"_ZTSN13EulerSolver2D9edge_typeE", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12, !19, i64 16, !13, i64 56, !19, i64 64, !13, i64 104, !18, i64 112, !18, i64 116}
!18 = !{!"int", !10, i64 0}
!19 = !{!"_ZTS7Array2DIdE", !18, i64 0, !18, i64 4, !18, i64 8, !18, i64 12, !18, i64 16, !18, i64 20, !20, i64 24, !20, i64 25, !9, i64 32}
!20 = !{!"bool", !10, i64 0}
!21 = !{!17, !18, i64 4}
!22 = !{!13, !13, i64 0}
!23 = !{!17, !13, i64 56}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!6, !12, i64 472}
!27 = !{!6, !9, i64 480}
!28 = !{!29, !12, i64 48}
!29 = !{!"_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}
!30 = distinct !{!30, !25}
!31 = !{!29, !9, i64 40}
!32 = !{!18, !18, i64 0}
!33 = !{!29, !9, i64 56}
!34 = !{!29, !9, i64 72}
!35 = !{!29, !9, i64 64}
!36 = distinct !{!36, !25}
!37 = !{!29, !12, i64 32}
!38 = !{!29, !9, i64 80}
!39 = !{!29, !9, i64 96}
!40 = !{!29, !9, i64 88}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25, !43}
!43 = !{!"llvm.loop.peeled.count", i32 1}
!44 = !{!6, !9, i64 416}
!45 = !{!46, !13, i64 0}
!46 = !{!"_ZTSN13EulerSolver2D9node_typeE", !13, i64 0, !13, i64 8, !18, i64 16, !9, i64 24, !18, i64 32, !47, i64 40, !13, i64 64, !18, i64 72, !18, 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}
!47 = !{!"_ZTS8Vector1DIiE", !48, i64 0}
!48 = !{!"_ZTSSt6vectorIiSaIiEE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!52 = !{!46, !13, i64 8}
!53 = distinct !{!53, !25}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !25}
!56 = distinct !{!56, !25}
!57 = !{!6, !12, i64 440}
!58 = !{!6, !9, i64 448}
!59 = !{!60, !13, i64 48}
!60 = !{!"_ZTSN13EulerSolver2D8elm_typeE", !18, i64 0, !9, i64 8, !18, 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, !18, i64 112, !18, i64 116, !47, i64 120, !13, i64 144, !9, i64 152, !9, i64 160, !18, i64 168}
!61 = distinct !{!61, !25}
!62 = !{!46, !13, i64 64}
!63 = distinct !{!63, !25}
!64 = !{!6, !12, i64 488}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass