; LLVM IR from LukeMcCulloch/cfd_solvers_cpp :: src/EulerShockTube1D.ll (ZN13EulerSolver1D6Solver8roe_fluxER7Array2DIfES3_)

; 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.Array2D = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }
%"class.EulerSolver1D::Solver" = type { float, float, float, float, float, float, float, float, float, float, float, i32, i32, i32, i32, i32, i32, %class.Array2D, %class.Array2D, %class.Array2D, %class.Array2D, %class.Array2D, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver1D6Solver8roe_fluxER7Array2DIfES3_(ptr dead_on_unwind noalias writable sret(%class.Array2D) align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %2, ptr noundef nonnull align 8 dereferenceable(40) %3) #0 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i1, align 1
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca %class.Array2D, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %class.Array2D, align 8
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca %class.Array2D, align 8
  %39 = alloca %class.Array2D, align 8
  %40 = alloca %class.Array2D, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %class.Array2D, align 8
  %44 = alloca %class.Array2D, align 8
  %45 = alloca %class.Array2D, align 8
  %46 = alloca %class.Array2D, align 8
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca %class.Array2D, align 8
  %50 = alloca %class.Array2D, align 8
  %51 = alloca %class.Array2D, align 8
  %52 = alloca %class.Array2D, align 8
  %53 = alloca %class.Array2D, align 8
  store ptr %0, ptr %5, align 8
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %54 = load ptr, ptr %6, align 8
  store i1 false, ptr %9, align 1
  call void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 3, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store float 0.000000e+00, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store float 1.000000e+00, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store float 4.000000e+00, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store float 5.000000e-01, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store float 2.500000e-01, ptr %14, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %15) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %15, i32 noundef 3, i32 noundef 1)
          to label %55 unwind label %283

55:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 40, ptr %18) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %18, i32 noundef 3, i32 noundef 1)
          to label %56 unwind label %287

56:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr %38) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 3, i32 noundef 1)
          to label %57 unwind label %291

57:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 40, ptr %39) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 3, i32 noundef 3)
          to label %58 unwind label %295

58:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 40, ptr %40) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %40, i32 noundef 3, i32 noundef 1)
          to label %59 unwind label %299

59:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  br label %60

60:                                               ; preds = %59
  br label %61

61:                                               ; preds = %60
  br label %62

62:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 40, ptr %44) #5
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN13EulerSolver1D6Solver3w2uER7Array2DIfE(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %44, ptr noundef nonnull align 8 dereferenceable(280) %54, ptr noundef nonnull align 8 dereferenceable(40) %63)
          to label %64 unwind label %303

64:                                               ; preds = %62
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %43, ptr noundef nonnull align 8 dereferenceable(40) %15, ptr noundef nonnull align 8 dereferenceable(40) %44)
          to label %65 unwind label %307

65:                                               ; preds = %64
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %43) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %44) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr %46) #5
  %66 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN13EulerSolver1D6Solver3w2uER7Array2DIfE(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %46, ptr noundef nonnull align 8 dereferenceable(280) %54, ptr noundef nonnull align 8 dereferenceable(40) %66)
          to label %67 unwind label %312

67:                                               ; preds = %65
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %45, ptr noundef nonnull align 8 dereferenceable(40) %18, ptr noundef nonnull align 8 dereferenceable(40) %46)
          to label %68 unwind label %316

68:                                               ; preds = %67
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %45) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %46) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %46) #5
  br label %69

69:                                               ; preds = %68
  br label %70

70:                                               ; preds = %69
  br label %71

71:                                               ; preds = %70
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %72, i32 noundef 0)
          to label %74 unwind label %321

74:                                               ; preds = %71
  %75 = load float, ptr %73, align 4, !tbaa !9
  store float %75, ptr %19, align 4, !tbaa !9
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %76, i32 noundef 1)
          to label %78 unwind label %321

78:                                               ; preds = %74
  %79 = load float, ptr %77, align 4, !tbaa !9
  store float %79, ptr %21, align 4, !tbaa !9
  %80 = load ptr, ptr %7, align 8, !tbaa !5
  %81 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %80, i32 noundef 2)
          to label %82 unwind label %321

82:                                               ; preds = %78
  %83 = load float, ptr %81, align 4, !tbaa !9
  store float %83, ptr %23, align 4, !tbaa !9
  %84 = getelementptr inbounds %"class.EulerSolver1D::Solver", ptr %54, i32 0, i32 3
  %85 = load float, ptr %84, align 4, !tbaa !11
  %86 = load float, ptr %23, align 4, !tbaa !9
  %87 = fmul float %85, %86
  %88 = load float, ptr %19, align 4, !tbaa !9
  %89 = fdiv float %87, %88
  %90 = invoke noundef float @_ZSt4sqrtf(float noundef %89)
          to label %91 unwind label %321

91:                                               ; preds = %82
  store float %90, ptr %25, align 4, !tbaa !9
  %92 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %15, i32 noundef 2)
          to label %93 unwind label %321

93:                                               ; preds = %91
  %94 = load float, ptr %92, align 4, !tbaa !9
  %95 = load float, ptr %23, align 4, !tbaa !9
  %96 = fadd float %94, %95
  %97 = load float, ptr %19, align 4, !tbaa !9
  %98 = fdiv float %96, %97
  store float %98, ptr %27, align 4, !tbaa !9
  br label %99

99:                                               ; preds = %93
  br label %100

100:                                              ; preds = %99
  br label %101

101:                                              ; preds = %100
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  %103 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %102, i32 noundef 0)
          to label %104 unwind label %321

104:                                              ; preds = %101
  %105 = load float, ptr %103, align 4, !tbaa !9
  store float %105, ptr %20, align 4, !tbaa !9
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  %107 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %106, i32 noundef 1)
          to label %108 unwind label %321

108:                                              ; preds = %104
  %109 = load float, ptr %107, align 4, !tbaa !9
  store float %109, ptr %22, align 4, !tbaa !9
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %110, i32 noundef 2)
          to label %112 unwind label %321

112:                                              ; preds = %108
  %113 = load float, ptr %111, align 4, !tbaa !9
  store float %113, ptr %24, align 4, !tbaa !9
  %114 = getelementptr inbounds %"class.EulerSolver1D::Solver", ptr %54, i32 0, i32 3
  %115 = load float, ptr %114, align 4, !tbaa !11
  %116 = load float, ptr %24, align 4, !tbaa !9
  %117 = fmul float %115, %116
  %118 = load float, ptr %20, align 4, !tbaa !9
  %119 = fdiv float %117, %118
  %120 = invoke noundef float @_ZSt4sqrtf(float noundef %119)
          to label %121 unwind label %321

121:                                              ; preds = %112
  store float %120, ptr %26, align 4, !tbaa !9
  %122 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %18, i32 noundef 2)
          to label %123 unwind label %321

123:                                              ; preds = %121
  %124 = load float, ptr %122, align 4, !tbaa !9
  %125 = load float, ptr %24, align 4, !tbaa !9
  %126 = fadd float %124, %125
  %127 = load float, ptr %20, align 4, !tbaa !9
  %128 = fdiv float %126, %127
  store float %128, ptr %28, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %123
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130
  %132 = load float, ptr %20, align 4, !tbaa !9
  %133 = load float, ptr %19, align 4, !tbaa !9
  %134 = fdiv float %132, %133
  %135 = invoke noundef float @_ZSt4sqrtf(float noundef %134)
          to label %136 unwind label %321

136:                                              ; preds = %131
  store float %135, ptr %29, align 4, !tbaa !9
  %137 = load float, ptr %29, align 4, !tbaa !9
  %138 = load float, ptr %19, align 4, !tbaa !9
  %139 = fmul float %137, %138
  store float %139, ptr %30, align 4, !tbaa !9
  %140 = load float, ptr %21, align 4, !tbaa !9
  %141 = load float, ptr %29, align 4, !tbaa !9
  %142 = load float, ptr %22, align 4, !tbaa !9
  %143 = call float @llvm.fmuladd.f32(float %141, float %142, float %140)
  %144 = load float, ptr %11, align 4, !tbaa !9
  %145 = load float, ptr %29, align 4, !tbaa !9
  %146 = fadd float %144, %145
  %147 = fdiv float %143, %146
  store float %147, ptr %31, align 4, !tbaa !9
  %148 = load float, ptr %27, align 4, !tbaa !9
  %149 = load float, ptr %29, align 4, !tbaa !9
  %150 = load float, ptr %28, align 4, !tbaa !9
  %151 = call float @llvm.fmuladd.f32(float %149, float %150, float %148)
  %152 = load float, ptr %11, align 4, !tbaa !9
  %153 = load float, ptr %29, align 4, !tbaa !9
  %154 = fadd float %152, %153
  %155 = fdiv float %151, %154
  store float %155, ptr %32, align 4, !tbaa !9
  %156 = getelementptr inbounds %"class.EulerSolver1D::Solver", ptr %54, i32 0, i32 3
  %157 = load float, ptr %156, align 4, !tbaa !11
  %158 = load float, ptr %11, align 4, !tbaa !9
  %159 = fsub float %157, %158
  %160 = load float, ptr %32, align 4, !tbaa !9
  %161 = load float, ptr %13, align 4, !tbaa !9
  %162 = load float, ptr %31, align 4, !tbaa !9
  %163 = fmul float %161, %162
  %164 = load float, ptr %31, align 4, !tbaa !9
  %165 = fneg float %163
  %166 = call float @llvm.fmuladd.f32(float %165, float %164, float %160)
  %167 = fmul float %159, %166
  %168 = invoke noundef float @_ZSt4sqrtf(float noundef %167)
          to label %169 unwind label %321

169:                                              ; preds = %136
  store float %168, ptr %33, align 4, !tbaa !9
  br label %170

170:                                              ; preds = %169
  br label %171

171:                                              ; preds = %170
  br label %172

172:                                              ; preds = %171
  %173 = load float, ptr %20, align 4, !tbaa !9
  %174 = load float, ptr %19, align 4, !tbaa !9
  %175 = fsub float %173, %174
  store float %175, ptr %34, align 4, !tbaa !9
  %176 = load float, ptr %22, align 4, !tbaa !9
  %177 = load float, ptr %21, align 4, !tbaa !9
  %178 = fsub float %176, %177
  store float %178, ptr %35, align 4, !tbaa !9
  %179 = load float, ptr %24, align 4, !tbaa !9
  %180 = load float, ptr %23, align 4, !tbaa !9
  %181 = fsub float %179, %180
  store float %181, ptr %36, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %172
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  %185 = load float, ptr %13, align 4, !tbaa !9
  %186 = load float, ptr %36, align 4, !tbaa !9
  %187 = load float, ptr %30, align 4, !tbaa !9
  %188 = load float, ptr %33, align 4, !tbaa !9
  %189 = fmul float %187, %188
  %190 = load float, ptr %35, align 4, !tbaa !9
  %191 = fneg float %189
  %192 = call float @llvm.fmuladd.f32(float %191, float %190, float %186)
  %193 = fmul float %185, %192
  %194 = load float, ptr %33, align 4, !tbaa !9
  %195 = load float, ptr %33, align 4, !tbaa !9
  %196 = fmul float %194, %195
  %197 = fdiv float %193, %196
  %198 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %40, i32 noundef 0)
          to label %199 unwind label %321

199:                                              ; preds = %184
  store float %197, ptr %198, align 4, !tbaa !9
  %200 = load float, ptr %36, align 4, !tbaa !9
  %201 = load float, ptr %33, align 4, !tbaa !9
  %202 = load float, ptr %33, align 4, !tbaa !9
  %203 = fmul float %201, %202
  %204 = fdiv float %200, %203
  %205 = load float, ptr %34, align 4, !tbaa !9
  %206 = fsub float %204, %205
  %207 = fneg float %206
  %208 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %40, i32 noundef 1)
          to label %209 unwind label %321

209:                                              ; preds = %199
  store float %207, ptr %208, align 4, !tbaa !9
  %210 = load float, ptr %13, align 4, !tbaa !9
  %211 = load float, ptr %36, align 4, !tbaa !9
  %212 = load float, ptr %30, align 4, !tbaa !9
  %213 = load float, ptr %33, align 4, !tbaa !9
  %214 = fmul float %212, %213
  %215 = load float, ptr %35, align 4, !tbaa !9
  %216 = call float @llvm.fmuladd.f32(float %214, float %215, float %211)
  %217 = fmul float %210, %216
  %218 = load float, ptr %33, align 4, !tbaa !9
  %219 = load float, ptr %33, align 4, !tbaa !9
  %220 = fmul float %218, %219
  %221 = fdiv float %217, %220
  %222 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %40, i32 noundef 2)
          to label %223 unwind label %321

223:                                              ; preds = %209
  store float %221, ptr %222, align 4, !tbaa !9
  br label %224

224:                                              ; preds = %223
  br label %225

225:                                              ; preds = %224
  br label %226

226:                                              ; preds = %225
  %227 = load float, ptr %31, align 4, !tbaa !9
  %228 = load float, ptr %33, align 4, !tbaa !9
  %229 = fsub float %227, %228
  %230 = invoke noundef float @_ZSt3absf(float noundef %229)
          to label %231 unwind label %321

231:                                              ; preds = %226
  %232 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 0)
          to label %233 unwind label %321

233:                                              ; preds = %231
  store float %230, ptr %232, align 4, !tbaa !9
  %234 = load float, ptr %31, align 4, !tbaa !9
  %235 = invoke noundef float @_ZSt3absf(float noundef %234)
          to label %236 unwind label %321

236:                                              ; preds = %233
  %237 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 1)
          to label %238 unwind label %321

238:                                              ; preds = %236
  store float %235, ptr %237, align 4, !tbaa !9
  %239 = load float, ptr %31, align 4, !tbaa !9
  %240 = load float, ptr %33, align 4, !tbaa !9
  %241 = fadd float %239, %240
  %242 = invoke noundef float @_ZSt3absf(float noundef %241)
          to label %243 unwind label %321

243:                                              ; preds = %238
  %244 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 2)
          to label %245 unwind label %321

245:                                              ; preds = %243
  store float %242, ptr %244, align 4, !tbaa !9
  br label %246

246:                                              ; preds = %245
  br label %247

247:                                              ; preds = %246
  br label %248

248:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %249 = load float, ptr %12, align 4, !tbaa !9
  %250 = load float, ptr %22, align 4, !tbaa !9
  %251 = load float, ptr %26, align 4, !tbaa !9
  %252 = fsub float %250, %251
  %253 = load float, ptr %21, align 4, !tbaa !9
  %254 = load float, ptr %25, align 4, !tbaa !9
  %255 = fsub float %253, %254
  %256 = fsub float %252, %255
  %257 = fmul float %249, %256
  store float %257, ptr %47, align 4, !tbaa !9
  %258 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %259 unwind label %325

259:                                              ; preds = %248
  %260 = load float, ptr %258, align 4, !tbaa !9
  store float %260, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  %261 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 0)
          to label %262 unwind label %321

262:                                              ; preds = %259
  %263 = load float, ptr %261, align 4, !tbaa !9
  %264 = load float, ptr %13, align 4, !tbaa !9
  %265 = load float, ptr %37, align 4, !tbaa !9
  %266 = fmul float %264, %265
  %267 = fcmp olt float %263, %266
  br i1 %267, label %268, label %329

268:                                              ; preds = %262
  %269 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 0)
          to label %270 unwind label %321

270:                                              ; preds = %268
  %271 = load float, ptr %269, align 4, !tbaa !9
  %272 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 0)
          to label %273 unwind label %321

273:                                              ; preds = %270
  %274 = load float, ptr %272, align 4, !tbaa !9
  %275 = fmul float %271, %274
  %276 = load float, ptr %37, align 4, !tbaa !9
  %277 = fdiv float %275, %276
  %278 = load float, ptr %14, align 4, !tbaa !9
  %279 = load float, ptr %37, align 4, !tbaa !9
  %280 = call float @llvm.fmuladd.f32(float %278, float %279, float %277)
  %281 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 0)
          to label %282 unwind label %321

282:                                              ; preds = %273
  store float %280, ptr %281, align 4, !tbaa !9
  br label %329

283:                                              ; preds = %4
  %284 = landingpad { ptr, i32 }
          cleanup
  %285 = extractvalue { ptr, i32 } %284, 0
  store ptr %285, ptr %16, align 8
  %286 = extractvalue { ptr, i32 } %284, 1
  store i32 %286, ptr %17, align 4
  br label %498

287:                                              ; preds = %55
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %16, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %17, align 4
  br label %497

291:                                              ; preds = %56
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %16, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %17, align 4
  br label %496

295:                                              ; preds = %57
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %16, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %17, align 4
  br label %495

299:                                              ; preds = %58
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %16, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %17, align 4
  br label %494

303:                                              ; preds = %62
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %16, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %17, align 4
  br label %311

307:                                              ; preds = %64
  %308 = landingpad { ptr, i32 }
          cleanup
  %309 = extractvalue { ptr, i32 } %308, 0
  store ptr %309, ptr %16, align 8
  %310 = extractvalue { ptr, i32 } %308, 1
  store i32 %310, ptr %17, align 4
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %44) #5
  br label %311

311:                                              ; preds = %307, %303
  call void @llvm.lifetime.end.p0(i64 40, ptr %44) #5
  br label %493

312:                                              ; preds = %65
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %16, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %17, align 4
  br label %320

316:                                              ; preds = %67
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %16, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %17, align 4
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %46) #5
  br label %320

320:                                              ; preds = %316, %312
  call void @llvm.lifetime.end.p0(i64 40, ptr %46) #5
  br label %493

321:                                              ; preds = %453, %447, %442, %437, %434, %407, %402, %399, %392, %389, %386, %379, %374, %371, %354, %351, %349, %340, %273, %270, %268, %259, %243, %238, %236, %233, %231, %226, %209, %199, %184, %136, %131, %121, %112, %108, %104, %101, %91, %82, %78, %74, %71
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %16, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %17, align 4
  br label %493

325:                                              ; preds = %248
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %16, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  br label %493

329:                                              ; preds = %282, %262
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %330 = load float, ptr %12, align 4, !tbaa !9
  %331 = load float, ptr %22, align 4, !tbaa !9
  %332 = load float, ptr %26, align 4, !tbaa !9
  %333 = fadd float %331, %332
  %334 = load float, ptr %21, align 4, !tbaa !9
  %335 = load float, ptr %25, align 4, !tbaa !9
  %336 = fadd float %334, %335
  %337 = fsub float %333, %336
  %338 = fmul float %330, %337
  store float %338, ptr %48, align 4, !tbaa !9
  %339 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %48)
          to label %340 unwind label %364

340:                                              ; preds = %329
  %341 = load float, ptr %339, align 4, !tbaa !9
  store float %341, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  %342 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 2)
          to label %343 unwind label %321

343:                                              ; preds = %340
  %344 = load float, ptr %342, align 4, !tbaa !9
  %345 = load float, ptr %13, align 4, !tbaa !9
  %346 = load float, ptr %37, align 4, !tbaa !9
  %347 = fmul float %345, %346
  %348 = fcmp olt float %344, %347
  br i1 %348, label %349, label %368

349:                                              ; preds = %343
  %350 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 2)
          to label %351 unwind label %321

351:                                              ; preds = %349
  %352 = load float, ptr %350, align 4, !tbaa !9
  %353 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 2)
          to label %354 unwind label %321

354:                                              ; preds = %351
  %355 = load float, ptr %353, align 4, !tbaa !9
  %356 = fmul float %352, %355
  %357 = load float, ptr %37, align 4, !tbaa !9
  %358 = fdiv float %356, %357
  %359 = load float, ptr %14, align 4, !tbaa !9
  %360 = load float, ptr %37, align 4, !tbaa !9
  %361 = call float @llvm.fmuladd.f32(float %359, float %360, float %358)
  %362 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef 2)
          to label %363 unwind label %321

363:                                              ; preds = %354
  store float %361, ptr %362, align 4, !tbaa !9
  br label %368

364:                                              ; preds = %329
  %365 = landingpad { ptr, i32 }
          cleanup
  %366 = extractvalue { ptr, i32 } %365, 0
  store ptr %366, ptr %16, align 8
  %367 = extractvalue { ptr, i32 } %365, 1
  store i32 %367, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  br label %493

368:                                              ; preds = %363, %343
  br label %369

369:                                              ; preds = %368
  br label %370

370:                                              ; preds = %369
  br label %371

371:                                              ; preds = %370
  %372 = load float, ptr %11, align 4, !tbaa !9
  %373 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 0, i32 noundef 0)
          to label %374 unwind label %321

374:                                              ; preds = %371
  store float %372, ptr %373, align 4, !tbaa !9
  %375 = load float, ptr %31, align 4, !tbaa !9
  %376 = load float, ptr %33, align 4, !tbaa !9
  %377 = fsub float %375, %376
  %378 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 1, i32 noundef 0)
          to label %379 unwind label %321

379:                                              ; preds = %374
  store float %377, ptr %378, align 4, !tbaa !9
  %380 = load float, ptr %32, align 4, !tbaa !9
  %381 = load float, ptr %31, align 4, !tbaa !9
  %382 = load float, ptr %33, align 4, !tbaa !9
  %383 = fneg float %381
  %384 = call float @llvm.fmuladd.f32(float %383, float %382, float %380)
  %385 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 2, i32 noundef 0)
          to label %386 unwind label %321

386:                                              ; preds = %379
  store float %384, ptr %385, align 4, !tbaa !9
  %387 = load float, ptr %11, align 4, !tbaa !9
  %388 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 0, i32 noundef 1)
          to label %389 unwind label %321

389:                                              ; preds = %386
  store float %387, ptr %388, align 4, !tbaa !9
  %390 = load float, ptr %31, align 4, !tbaa !9
  %391 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 1, i32 noundef 1)
          to label %392 unwind label %321

392:                                              ; preds = %389
  store float %390, ptr %391, align 4, !tbaa !9
  %393 = load float, ptr %13, align 4, !tbaa !9
  %394 = load float, ptr %31, align 4, !tbaa !9
  %395 = fmul float %393, %394
  %396 = load float, ptr %31, align 4, !tbaa !9
  %397 = fmul float %395, %396
  %398 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 2, i32 noundef 1)
          to label %399 unwind label %321

399:                                              ; preds = %392
  store float %397, ptr %398, align 4, !tbaa !9
  %400 = load float, ptr %11, align 4, !tbaa !9
  %401 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 0, i32 noundef 2)
          to label %402 unwind label %321

402:                                              ; preds = %399
  store float %400, ptr %401, align 4, !tbaa !9
  %403 = load float, ptr %31, align 4, !tbaa !9
  %404 = load float, ptr %33, align 4, !tbaa !9
  %405 = fadd float %403, %404
  %406 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 1, i32 noundef 2)
          to label %407 unwind label %321

407:                                              ; preds = %402
  store float %405, ptr %406, align 4, !tbaa !9
  %408 = load float, ptr %32, align 4, !tbaa !9
  %409 = load float, ptr %31, align 4, !tbaa !9
  %410 = load float, ptr %33, align 4, !tbaa !9
  %411 = call float @llvm.fmuladd.f32(float %409, float %410, float %408)
  %412 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef 2, i32 noundef 2)
          to label %413 unwind label %321

413:                                              ; preds = %407
  store float %411, ptr %412, align 4, !tbaa !9
  br label %414

414:                                              ; preds = %413
  br label %415

415:                                              ; preds = %414
  br label %416

416:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 40, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr %51) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr %52) #5
  %417 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN13EulerSolver1D6Solver19euler_physical_fluxER7Array2DIfE(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %52, ptr noundef nonnull align 8 dereferenceable(280) %54, ptr noundef nonnull align 8 dereferenceable(40) %417)
          to label %418 unwind label %463

418:                                              ; preds = %416
  call void @llvm.lifetime.start.p0(i64 40, ptr %53) #5
  %419 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN13EulerSolver1D6Solver19euler_physical_fluxER7Array2DIfE(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %53, ptr noundef nonnull align 8 dereferenceable(280) %54, ptr noundef nonnull align 8 dereferenceable(40) %419)
          to label %420 unwind label %467

420:                                              ; preds = %418
  invoke void @_ZplIfE7Array2DIT_ERKS2_S4_(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %51, ptr noundef nonnull align 8 dereferenceable(40) %52, ptr noundef nonnull align 8 dereferenceable(40) %53)
          to label %421 unwind label %471

421:                                              ; preds = %420
  invoke void @_ZmlIfE7Array2DIT_ERKS1_RKS2_(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %50, ptr noundef nonnull align 4 dereferenceable(4) %13, ptr noundef nonnull align 8 dereferenceable(40) %51)
          to label %422 unwind label %475

422:                                              ; preds = %421
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind writable sret(%class.Array2D) align 8 %49, ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %50)
          to label %423 unwind label %479

423:                                              ; preds = %422
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %49) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %50) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %53) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %53) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %52) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #5
  br label %424

424:                                              ; preds = %423
  br label %425

425:                                              ; preds = %424
  br label %426

426:                                              ; preds = %425
  store i32 0, ptr %41, align 4, !tbaa !16
  br label %427

427:                                              ; preds = %488, %426
  %428 = load i32, ptr %41, align 4, !tbaa !16
  %429 = icmp slt i32 %428, 3
  br i1 %429, label %430, label %491

430:                                              ; preds = %427
  store i32 0, ptr %42, align 4, !tbaa !16
  br label %431

431:                                              ; preds = %460, %430
  %432 = load i32, ptr %42, align 4, !tbaa !16
  %433 = icmp slt i32 %432, 3
  br i1 %433, label %434, label %487

434:                                              ; preds = %431
  %435 = load i32, ptr %41, align 4, !tbaa !16
  %436 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef %435)
          to label %437 unwind label %321

437:                                              ; preds = %434
  %438 = load float, ptr %436, align 4, !tbaa !9
  %439 = load float, ptr %13, align 4, !tbaa !9
  %440 = load i32, ptr %42, align 4, !tbaa !16
  %441 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %38, i32 noundef %440)
          to label %442 unwind label %321

442:                                              ; preds = %437
  %443 = load float, ptr %441, align 4, !tbaa !9
  %444 = fmul float %439, %443
  %445 = load i32, ptr %42, align 4, !tbaa !16
  %446 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %40, i32 noundef %445)
          to label %447 unwind label %321

447:                                              ; preds = %442
  %448 = load float, ptr %446, align 4, !tbaa !9
  %449 = fmul float %444, %448
  %450 = load i32, ptr %41, align 4, !tbaa !16
  %451 = load i32, ptr %42, align 4, !tbaa !16
  %452 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %39, i32 noundef %450, i32 noundef %451)
          to label %453 unwind label %321

453:                                              ; preds = %447
  %454 = load float, ptr %452, align 4, !tbaa !9
  %455 = fneg float %449
  %456 = call float @llvm.fmuladd.f32(float %455, float %454, float %438)
  %457 = load i32, ptr %41, align 4, !tbaa !16
  %458 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef %457)
          to label %459 unwind label %321

459:                                              ; preds = %453
  store float %456, ptr %458, align 4, !tbaa !9
  br label %460

460:                                              ; preds = %459
  %461 = load i32, ptr %42, align 4, !tbaa !16
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %42, align 4, !tbaa !16
  br label %431, !llvm.loop !17

463:                                              ; preds = %416
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %16, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %17, align 4
  br label %486

467:                                              ; preds = %418
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %16, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %17, align 4
  br label %485

471:                                              ; preds = %420
  %472 = landingpad { ptr, i32 }
          cleanup
  %473 = extractvalue { ptr, i32 } %472, 0
  store ptr %473, ptr %16, align 8
  %474 = extractvalue { ptr, i32 } %472, 1
  store i32 %474, ptr %17, align 4
  br label %484

475:                                              ; preds = %421
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %16, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %17, align 4
  br label %483

479:                                              ; preds = %422
  %480 = landingpad { ptr, i32 }
          cleanup
  %481 = extractvalue { ptr, i32 } %480, 0
  store ptr %481, ptr %16, align 8
  %482 = extractvalue { ptr, i32 } %480, 1
  store i32 %482, ptr %17, align 4
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %50) #5
  br label %483

483:                                              ; preds = %479, %475
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #5
  br label %484

484:                                              ; preds = %483, %471
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %53) #5
  br label %485

485:                                              ; preds = %484, %467
  call void @llvm.lifetime.end.p0(i64 40, ptr %53) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %52) #5
  br label %486

486:                                              ; preds = %485, %463
  call void @llvm.lifetime.end.p0(i64 40, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #5
  br label %493

487:                                              ; preds = %431
  br label %488

488:                                              ; preds = %487
  %489 = load i32, ptr %41, align 4, !tbaa !16
  %490 = add nsw i32 %489, 1
  store i32 %490, ptr %41, align 4, !tbaa !16
  br label %427, !llvm.loop !19

491:                                              ; preds = %427
  store i1 true, ptr %9, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %40) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %40) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %39) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %39) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %18) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %18) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  %492 = load i1, ptr %9, align 1
  br i1 %492, label %500, label %499

493:                                              ; preds = %486, %364, %325, %321, %320, %311
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %40) #5
  br label %494

494:                                              ; preds = %493, %299
  call void @llvm.lifetime.end.p0(i64 40, ptr %40) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %39) #5
  br label %495

495:                                              ; preds = %494, %295
  call void @llvm.lifetime.end.p0(i64 40, ptr %39) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #5
  br label %496

496:                                              ; preds = %495, %291
  call void @llvm.lifetime.end.p0(i64 40, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %18) #5
  br label %497

497:                                              ; preds = %496, %287
  call void @llvm.lifetime.end.p0(i64 40, ptr %18) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #5
  br label %498

498:                                              ; preds = %497, %283
  call void @llvm.lifetime.end.p0(i64 40, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #5
  br label %501

499:                                              ; preds = %491
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #5
  br label %500

500:                                              ; preds = %499, %491
  ret void

501:                                              ; preds = %498
  %502 = load ptr, ptr %16, align 8
  %503 = load i32, ptr %17, align 4
  %504 = insertvalue { ptr, i32 } poison, ptr %502, 0
  %505 = insertvalue { ptr, i32 } %504, i32 %503, 1
  resume { ptr, i32 } %505
}

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #4

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { 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 = !{!"float", !7, i64 0}
!11 = !{!12, !10, i64 12}
!12 = !{!"_ZTSN13EulerSolver1D6SolverE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !13, i64 44, !13, i64 48, !13, i64 52, !13, i64 56, !13, i64 60, !13, i64 64, !14, i64 72, !14, i64 112, !14, i64 152, !14, i64 192, !14, i64 232, !6, i64 272}
!13 = !{!"int", !7, i64 0}
!14 = !{!"_ZTS7Array2DIfE", !13, i64 0, !13, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20, !15, i64 24, !15, i64 25, !6, i64 32}
!15 = !{!"bool", !7, i64 0}
!16 = !{!13, !13, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}


; 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.Array2D = type { i32, i32, i32, i32, i32, i32, i8, i8, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN13EulerSolver1D6Solver8roe_fluxER7Array2DIfES3_(ptr dead_on_unwind noalias nonnull writable sret(%class.Array2D) align 8 %0, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %2, ptr noundef nonnull align 8 dereferenceable(40) %3) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca %class.Array2D, align 8
  %8 = alloca %class.Array2D, align 8
  %9 = alloca %class.Array2D, align 8
  %10 = alloca %class.Array2D, align 8
  %11 = alloca %class.Array2D, align 8
  %12 = alloca %class.Array2D, align 8
  %13 = alloca %class.Array2D, align 8
  %14 = alloca %class.Array2D, align 8
  %15 = alloca %class.Array2D, align 8
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca %class.Array2D, align 8
  %19 = alloca %class.Array2D, align 8
  %20 = alloca %class.Array2D, align 8
  %21 = alloca %class.Array2D, align 8
  %22 = alloca %class.Array2D, align 8
  tail call void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 3, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  store float 0.000000e+00, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  store float 5.000000e-01, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %7, i32 noundef 3, i32 noundef 1)
          to label %23 unwind label %143

23:                                               ; preds = %4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %8) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %8, i32 noundef 3, i32 noundef 1)
          to label %24 unwind label %145

24:                                               ; preds = %23
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %9) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 3, i32 noundef 1)
          to label %25 unwind label %147

25:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 3, i32 noundef 3)
          to label %26 unwind label %149

26:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %11) #5
  invoke void @_ZN7Array2DIfEC2Eii(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 3, i32 noundef 1)
          to label %27 unwind label %151

27:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %13) #5
  invoke void @_ZN13EulerSolver1D6Solver3w2uER7Array2DIfE(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %13, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %2)
          to label %28 unwind label %153

28:                                               ; preds = %27
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %12, ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(40) %13)
          to label %29 unwind label %155

29:                                               ; preds = %28
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #5
  invoke void @_ZN13EulerSolver1D6Solver3w2uER7Array2DIfE(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %15, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %3)
          to label %30 unwind label %158

30:                                               ; preds = %29
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %14, ptr noundef nonnull align 8 dereferenceable(40) %8, ptr noundef nonnull align 8 dereferenceable(40) %15)
          to label %31 unwind label %160

31:                                               ; preds = %30
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %14) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #5
  %32 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 0)
          to label %33 unwind label %.loopexit.split-lp

33:                                               ; preds = %31
  %34 = load float, ptr %32, align 4, !tbaa !5
  %35 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 1)
          to label %36 unwind label %.loopexit.split-lp

36:                                               ; preds = %33
  %37 = load float, ptr %35, align 4, !tbaa !5
  %38 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %2, i32 noundef 2)
          to label %39 unwind label %.loopexit.split-lp

39:                                               ; preds = %36
  %40 = load float, ptr %38, align 4, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %1, i64 12
  %42 = load float, ptr %41, align 4, !tbaa !9
  %43 = fmul float %40, %42
  %44 = fdiv float %43, %34
  %45 = call noundef float @_ZSt4sqrtf(float noundef %44)
  %46 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %7, i32 noundef 2)
          to label %47 unwind label %.loopexit.split-lp

47:                                               ; preds = %39
  %48 = load float, ptr %46, align 4, !tbaa !5
  %49 = fadd float %40, %48
  %50 = fdiv float %49, %34
  %51 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 0)
          to label %52 unwind label %.loopexit.split-lp

52:                                               ; preds = %47
  %53 = load float, ptr %51, align 4, !tbaa !5
  %54 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 1)
          to label %55 unwind label %.loopexit.split-lp

55:                                               ; preds = %52
  %56 = load float, ptr %54, align 4, !tbaa !5
  %57 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %3, i32 noundef 2)
          to label %58 unwind label %.loopexit.split-lp

58:                                               ; preds = %55
  %59 = load float, ptr %57, align 4, !tbaa !5
  %60 = load float, ptr %41, align 4, !tbaa !9
  %61 = fmul float %59, %60
  %62 = fdiv float %61, %53
  %63 = call noundef float @_ZSt4sqrtf(float noundef %62)
  %64 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %8, i32 noundef 2)
          to label %65 unwind label %.loopexit.split-lp

65:                                               ; preds = %58
  %66 = load float, ptr %64, align 4, !tbaa !5
  %67 = fadd float %59, %66
  %68 = fdiv float %67, %53
  %69 = fdiv float %53, %34
  %70 = call noundef float @_ZSt4sqrtf(float noundef %69)
  %71 = fmul float %34, %70
  %72 = call float @llvm.fmuladd.f32(float %70, float %56, float %37)
  %73 = fadd float %70, 1.000000e+00
  %74 = fdiv float %72, %73
  %75 = call float @llvm.fmuladd.f32(float %70, float %68, float %50)
  %76 = fdiv float %75, %73
  %77 = load float, ptr %41, align 4, !tbaa !9
  %78 = fadd float %77, -1.000000e+00
  %79 = load float, ptr %6, align 4, !tbaa !5
  %80 = fneg float %79
  %81 = fmul float %74, %80
  %82 = call float @llvm.fmuladd.f32(float %81, float %74, float %76)
  %83 = fmul float %78, %82
  %84 = call noundef float @_ZSt4sqrtf(float noundef %83)
  %85 = fsub float %56, %37
  %86 = fsub float %59, %40
  %87 = load float, ptr %6, align 4, !tbaa !5
  %88 = fmul float %71, %84
  %89 = fmul float %84, %84
  %90 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %91 unwind label %.loopexit.split-lp

91:                                               ; preds = %65
  %92 = fneg float %88
  %93 = call float @llvm.fmuladd.f32(float %92, float %85, float %86)
  %94 = fmul float %87, %93
  %95 = fdiv float %94, %89
  store float %95, ptr %90, align 4, !tbaa !5
  %96 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %97 unwind label %.loopexit.split-lp

97:                                               ; preds = %91
  %98 = fdiv float %86, %89
  %99 = fsub float %53, %34
  %100 = fsub float %98, %99
  %101 = fneg float %100
  store float %101, ptr %96, align 4, !tbaa !5
  %102 = load float, ptr %6, align 4, !tbaa !5
  %103 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 2)
          to label %104 unwind label %.loopexit.split-lp

104:                                              ; preds = %97
  %105 = call float @llvm.fmuladd.f32(float %88, float %85, float %86)
  %106 = fmul float %105, %102
  %107 = fdiv float %106, %89
  store float %107, ptr %103, align 4, !tbaa !5
  %108 = fsub float %74, %84
  %109 = call noundef float @_ZSt3absf(float noundef %108)
  %110 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %111 unwind label %.loopexit.split-lp

111:                                              ; preds = %104
  store float %109, ptr %110, align 4, !tbaa !5
  %112 = call noundef float @_ZSt3absf(float noundef %74)
  %113 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 1)
          to label %114 unwind label %.loopexit.split-lp

114:                                              ; preds = %111
  store float %112, ptr %113, align 4, !tbaa !5
  %115 = fadd float %74, %84
  %116 = call noundef float @_ZSt3absf(float noundef %115)
  %117 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %118 unwind label %.loopexit.split-lp

118:                                              ; preds = %114
  store float %116, ptr %117, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  %119 = fsub float %56, %63
  %120 = fsub float %37, %45
  %121 = fsub float %119, %120
  %122 = fmul float %121, 4.000000e+00
  store float %122, ptr %16, align 4, !tbaa !5
  %123 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %124 = load float, ptr %123, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  %125 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %126 unwind label %.loopexit.split-lp

126:                                              ; preds = %118
  %127 = load float, ptr %125, align 4, !tbaa !5
  %128 = load float, ptr %6, align 4, !tbaa !5
  %129 = fmul float %124, %128
  %130 = fcmp olt float %127, %129
  br i1 %130, label %131, label %163

131:                                              ; preds = %126
  %132 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %133 unwind label %.loopexit.split-lp

133:                                              ; preds = %131
  %134 = load float, ptr %132, align 4, !tbaa !5
  %135 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %136 unwind label %.loopexit.split-lp

136:                                              ; preds = %133
  %137 = load float, ptr %135, align 4, !tbaa !5
  %138 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %139 unwind label %.loopexit.split-lp

139:                                              ; preds = %136
  %140 = fmul float %134, %137
  %141 = fdiv float %140, %124
  %142 = call float @llvm.fmuladd.f32(float %124, float 2.500000e-01, float %141)
  store float %142, ptr %138, align 4, !tbaa !5
  br label %163

143:                                              ; preds = %4
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %405

145:                                              ; preds = %23
  %146 = landingpad { ptr, i32 }
          cleanup
  br label %404

147:                                              ; preds = %24
  %148 = landingpad { ptr, i32 }
          cleanup
  br label %403

149:                                              ; preds = %25
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %402

151:                                              ; preds = %26
  %152 = landingpad { ptr, i32 }
          cleanup
  br label %401

153:                                              ; preds = %27
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %157

155:                                              ; preds = %28
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #5
  br label %157

157:                                              ; preds = %155, %153
  %.pn = phi { ptr, i32 } [ %156, %155 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %13) #5
  br label %400

158:                                              ; preds = %29
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %162

160:                                              ; preds = %30
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #5
  br label %162

162:                                              ; preds = %160, %158
  %.pn125 = phi { ptr, i32 } [ %161, %160 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #5
  br label %400

.loopexit:                                        ; preds = %378, %375, %372, %368, %362, %359, %356, %353, %349, %343, %340, %337, %334, %330, %.preheader.2, %322, %319, %316, %312, %306, %303, %300, %297, %293, %287, %284, %281, %278, %274, %.preheader.1, %266, %263, %260, %256, %250, %247, %244, %241, %237, %231, %.preheader, %218, %222, %225, %228
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %400

.loopexit.split-lp:                               ; preds = %31, %33, %36, %39, %47, %52, %55, %58, %65, %91, %97, %104, %111, %114, %118, %131, %133, %136, %163, %176, %178, %181, %188, %190, %192, %194, %198, %200, %203, %207, %209
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %400

163:                                              ; preds = %139, %126
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #5
  %164 = fadd float %56, %63
  %165 = fadd float %37, %45
  %166 = fsub float %164, %165
  %167 = fmul float %166, 4.000000e+00
  store float %167, ptr %17, align 4, !tbaa !5
  %168 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %17)
  %169 = load float, ptr %168, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #5
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %171 unwind label %.loopexit.split-lp

171:                                              ; preds = %163
  %172 = load float, ptr %170, align 4, !tbaa !5
  %173 = load float, ptr %6, align 4, !tbaa !5
  %174 = fmul float %169, %173
  %175 = fcmp olt float %172, %174
  br i1 %175, label %176, label %188

176:                                              ; preds = %171
  %177 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %178 unwind label %.loopexit.split-lp

178:                                              ; preds = %176
  %179 = load float, ptr %177, align 4, !tbaa !5
  %180 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %181 unwind label %.loopexit.split-lp

181:                                              ; preds = %178
  %182 = load float, ptr %180, align 4, !tbaa !5
  %183 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %184 unwind label %.loopexit.split-lp

184:                                              ; preds = %181
  %185 = fmul float %179, %182
  %186 = fdiv float %185, %169
  %187 = call float @llvm.fmuladd.f32(float %169, float 2.500000e-01, float %186)
  store float %187, ptr %183, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %171, %184
  %189 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 0)
          to label %190 unwind label %.loopexit.split-lp

190:                                              ; preds = %188
  store float 1.000000e+00, ptr %189, align 4, !tbaa !5
  %191 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 0)
          to label %192 unwind label %.loopexit.split-lp

192:                                              ; preds = %190
  store float %108, ptr %191, align 4, !tbaa !5
  %193 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 0)
          to label %194 unwind label %.loopexit.split-lp

194:                                              ; preds = %192
  %195 = fneg float %74
  %196 = call float @llvm.fmuladd.f32(float %195, float %84, float %76)
  store float %196, ptr %193, align 4, !tbaa !5
  %197 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 1)
          to label %198 unwind label %.loopexit.split-lp

198:                                              ; preds = %194
  store float 1.000000e+00, ptr %197, align 4, !tbaa !5
  %199 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 1)
          to label %200 unwind label %.loopexit.split-lp

200:                                              ; preds = %198
  store float %74, ptr %199, align 4, !tbaa !5
  %201 = load float, ptr %6, align 4, !tbaa !5
  %202 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 1)
          to label %203 unwind label %.loopexit.split-lp

203:                                              ; preds = %200
  %204 = fmul float %74, %201
  %205 = fmul float %74, %204
  store float %205, ptr %202, align 4, !tbaa !5
  %206 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 2)
          to label %207 unwind label %.loopexit.split-lp

207:                                              ; preds = %203
  store float 1.000000e+00, ptr %206, align 4, !tbaa !5
  %208 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 2)
          to label %209 unwind label %.loopexit.split-lp

209:                                              ; preds = %207
  store float %115, ptr %208, align 4, !tbaa !5
  %210 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 2)
          to label %211 unwind label %.loopexit.split-lp

211:                                              ; preds = %209
  %212 = call float @llvm.fmuladd.f32(float %74, float %84, float %76)
  store float %212, ptr %210, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %21) #5
  invoke void @_ZN13EulerSolver1D6Solver19euler_physical_fluxER7Array2DIfE(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %21, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %2)
          to label %213 unwind label %386

213:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %22) #5
  invoke void @_ZN13EulerSolver1D6Solver19euler_physical_fluxER7Array2DIfE(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %22, ptr noundef nonnull align 8 dereferenceable(280) %1, ptr noundef nonnull align 8 dereferenceable(40) %3)
          to label %214 unwind label %388

214:                                              ; preds = %213
  invoke void @_ZplIfE7Array2DIT_ERKS2_S4_(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %20, ptr noundef nonnull align 8 dereferenceable(40) %21, ptr noundef nonnull align 8 dereferenceable(40) %22)
          to label %215 unwind label %390

215:                                              ; preds = %214
  invoke void @_ZmlIfE7Array2DIT_ERKS1_RKS2_(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %19, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 8 dereferenceable(40) %20)
          to label %216 unwind label %392

216:                                              ; preds = %215
  invoke void @_ZN7Array2DIfEaSERKS0_(ptr dead_on_unwind nonnull writable sret(%class.Array2D) align 8 %18, ptr noundef nonnull align 8 dereferenceable(40) %0, ptr noundef nonnull align 8 dereferenceable(40) %19)
          to label %.preheader unwind label %394

.preheader:                                       ; preds = %216
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %18) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %22) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %21) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #5
  %217 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %218 unwind label %.loopexit

218:                                              ; preds = %.preheader
  %219 = load float, ptr %217, align 4, !tbaa !5
  %220 = load float, ptr %6, align 4, !tbaa !5
  %221 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %222 unwind label %.loopexit

222:                                              ; preds = %218
  %223 = load float, ptr %221, align 4, !tbaa !5
  %224 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %225 unwind label %.loopexit

225:                                              ; preds = %222
  %226 = load float, ptr %224, align 4, !tbaa !5
  %227 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 0)
          to label %228 unwind label %.loopexit

228:                                              ; preds = %225
  %229 = load float, ptr %227, align 4, !tbaa !5
  %230 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %231 unwind label %.loopexit

231:                                              ; preds = %228
  %232 = fneg float %220
  %233 = fmul float %223, %232
  %234 = fmul float %233, %226
  %235 = call float @llvm.fmuladd.f32(float %234, float %229, float %219)
  store float %235, ptr %230, align 4, !tbaa !5
  %236 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %237 unwind label %.loopexit

237:                                              ; preds = %231
  %238 = load float, ptr %236, align 4, !tbaa !5
  %239 = load float, ptr %6, align 4, !tbaa !5
  %240 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 1)
          to label %241 unwind label %.loopexit

241:                                              ; preds = %237
  %242 = load float, ptr %240, align 4, !tbaa !5
  %243 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %244 unwind label %.loopexit

244:                                              ; preds = %241
  %245 = load float, ptr %243, align 4, !tbaa !5
  %246 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 1)
          to label %247 unwind label %.loopexit

247:                                              ; preds = %244
  %248 = load float, ptr %246, align 4, !tbaa !5
  %249 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %250 unwind label %.loopexit

250:                                              ; preds = %247
  %251 = fneg float %239
  %252 = fmul float %242, %251
  %253 = fmul float %252, %245
  %254 = call float @llvm.fmuladd.f32(float %253, float %248, float %238)
  store float %254, ptr %249, align 4, !tbaa !5
  %255 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %256 unwind label %.loopexit

256:                                              ; preds = %250
  %257 = load float, ptr %255, align 4, !tbaa !5
  %258 = load float, ptr %6, align 4, !tbaa !5
  %259 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %260 unwind label %.loopexit

260:                                              ; preds = %256
  %261 = load float, ptr %259, align 4, !tbaa !5
  %262 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 2)
          to label %263 unwind label %.loopexit

263:                                              ; preds = %260
  %264 = load float, ptr %262, align 4, !tbaa !5
  %265 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 0, i32 noundef 2)
          to label %266 unwind label %.loopexit

266:                                              ; preds = %263
  %267 = load float, ptr %265, align 4, !tbaa !5
  %268 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 0)
          to label %.preheader.1 unwind label %.loopexit

.preheader.1:                                     ; preds = %266
  %269 = fneg float %258
  %270 = fmul float %261, %269
  %271 = fmul float %270, %264
  %272 = call float @llvm.fmuladd.f32(float %271, float %267, float %257)
  store float %272, ptr %268, align 4, !tbaa !5
  %273 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %274 unwind label %.loopexit

274:                                              ; preds = %.preheader.1
  %275 = load float, ptr %273, align 4, !tbaa !5
  %276 = load float, ptr %6, align 4, !tbaa !5
  %277 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %278 unwind label %.loopexit

278:                                              ; preds = %274
  %279 = load float, ptr %277, align 4, !tbaa !5
  %280 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %281 unwind label %.loopexit

281:                                              ; preds = %278
  %282 = load float, ptr %280, align 4, !tbaa !5
  %283 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 0)
          to label %284 unwind label %.loopexit

284:                                              ; preds = %281
  %285 = load float, ptr %283, align 4, !tbaa !5
  %286 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %287 unwind label %.loopexit

287:                                              ; preds = %284
  %288 = fneg float %276
  %289 = fmul float %279, %288
  %290 = fmul float %289, %282
  %291 = call float @llvm.fmuladd.f32(float %290, float %285, float %275)
  store float %291, ptr %286, align 4, !tbaa !5
  %292 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %293 unwind label %.loopexit

293:                                              ; preds = %287
  %294 = load float, ptr %292, align 4, !tbaa !5
  %295 = load float, ptr %6, align 4, !tbaa !5
  %296 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 1)
          to label %297 unwind label %.loopexit

297:                                              ; preds = %293
  %298 = load float, ptr %296, align 4, !tbaa !5
  %299 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %300 unwind label %.loopexit

300:                                              ; preds = %297
  %301 = load float, ptr %299, align 4, !tbaa !5
  %302 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 1)
          to label %303 unwind label %.loopexit

303:                                              ; preds = %300
  %304 = load float, ptr %302, align 4, !tbaa !5
  %305 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %306 unwind label %.loopexit

306:                                              ; preds = %303
  %307 = fneg float %295
  %308 = fmul float %298, %307
  %309 = fmul float %308, %301
  %310 = call float @llvm.fmuladd.f32(float %309, float %304, float %294)
  store float %310, ptr %305, align 4, !tbaa !5
  %311 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %312 unwind label %.loopexit

312:                                              ; preds = %306
  %313 = load float, ptr %311, align 4, !tbaa !5
  %314 = load float, ptr %6, align 4, !tbaa !5
  %315 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %316 unwind label %.loopexit

316:                                              ; preds = %312
  %317 = load float, ptr %315, align 4, !tbaa !5
  %318 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 2)
          to label %319 unwind label %.loopexit

319:                                              ; preds = %316
  %320 = load float, ptr %318, align 4, !tbaa !5
  %321 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 1, i32 noundef 2)
          to label %322 unwind label %.loopexit

322:                                              ; preds = %319
  %323 = load float, ptr %321, align 4, !tbaa !5
  %324 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 1)
          to label %.preheader.2 unwind label %.loopexit

.preheader.2:                                     ; preds = %322
  %325 = fneg float %314
  %326 = fmul float %317, %325
  %327 = fmul float %326, %320
  %328 = call float @llvm.fmuladd.f32(float %327, float %323, float %313)
  store float %328, ptr %324, align 4, !tbaa !5
  %329 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %330 unwind label %.loopexit

330:                                              ; preds = %.preheader.2
  %331 = load float, ptr %329, align 4, !tbaa !5
  %332 = load float, ptr %6, align 4, !tbaa !5
  %333 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 0)
          to label %334 unwind label %.loopexit

334:                                              ; preds = %330
  %335 = load float, ptr %333, align 4, !tbaa !5
  %336 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 0)
          to label %337 unwind label %.loopexit

337:                                              ; preds = %334
  %338 = load float, ptr %336, align 4, !tbaa !5
  %339 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 0)
          to label %340 unwind label %.loopexit

340:                                              ; preds = %337
  %341 = load float, ptr %339, align 4, !tbaa !5
  %342 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %343 unwind label %.loopexit

343:                                              ; preds = %340
  %344 = fneg float %332
  %345 = fmul float %335, %344
  %346 = fmul float %345, %338
  %347 = call float @llvm.fmuladd.f32(float %346, float %341, float %331)
  store float %347, ptr %342, align 4, !tbaa !5
  %348 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %349 unwind label %.loopexit

349:                                              ; preds = %343
  %350 = load float, ptr %348, align 4, !tbaa !5
  %351 = load float, ptr %6, align 4, !tbaa !5
  %352 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 1)
          to label %353 unwind label %.loopexit

353:                                              ; preds = %349
  %354 = load float, ptr %352, align 4, !tbaa !5
  %355 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 1)
          to label %356 unwind label %.loopexit

356:                                              ; preds = %353
  %357 = load float, ptr %355, align 4, !tbaa !5
  %358 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 1)
          to label %359 unwind label %.loopexit

359:                                              ; preds = %356
  %360 = load float, ptr %358, align 4, !tbaa !5
  %361 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %362 unwind label %.loopexit

362:                                              ; preds = %359
  %363 = fneg float %351
  %364 = fmul float %354, %363
  %365 = fmul float %364, %357
  %366 = call float @llvm.fmuladd.f32(float %365, float %360, float %350)
  store float %366, ptr %361, align 4, !tbaa !5
  %367 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %368 unwind label %.loopexit

368:                                              ; preds = %362
  %369 = load float, ptr %367, align 4, !tbaa !5
  %370 = load float, ptr %6, align 4, !tbaa !5
  %371 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %9, i32 noundef 2)
          to label %372 unwind label %.loopexit

372:                                              ; preds = %368
  %373 = load float, ptr %371, align 4, !tbaa !5
  %374 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %11, i32 noundef 2)
          to label %375 unwind label %.loopexit

375:                                              ; preds = %372
  %376 = load float, ptr %374, align 4, !tbaa !5
  %377 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEii(ptr noundef nonnull align 8 dereferenceable(40) %10, i32 noundef 2, i32 noundef 2)
          to label %378 unwind label %.loopexit

378:                                              ; preds = %375
  %379 = load float, ptr %377, align 4, !tbaa !5
  %380 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN7Array2DIfEclEi(ptr noundef nonnull align 8 dereferenceable(40) %0, i32 noundef 2)
          to label %381 unwind label %.loopexit

381:                                              ; preds = %378
  %382 = fneg float %370
  %383 = fmul float %373, %382
  %384 = fmul float %383, %376
  %385 = call float @llvm.fmuladd.f32(float %384, float %379, float %369)
  store float %385, ptr %380, align 4, !tbaa !5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  ret void

386:                                              ; preds = %211
  %387 = landingpad { ptr, i32 }
          cleanup
  br label %399

388:                                              ; preds = %213
  %389 = landingpad { ptr, i32 }
          cleanup
  br label %398

390:                                              ; preds = %214
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %397

392:                                              ; preds = %215
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %396

394:                                              ; preds = %216
  %395 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #5
  br label %396

396:                                              ; preds = %394, %392
  %.pn127 = phi { ptr, i32 } [ %395, %394 ], [ %393, %392 ]
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %20) #5
  br label %397

397:                                              ; preds = %396, %390
  %.pn127.pn = phi { ptr, i32 } [ %.pn127, %396 ], [ %391, %390 ]
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %22) #5
  br label %398

398:                                              ; preds = %397, %388
  %.pn127.pn.pn = phi { ptr, i32 } [ %.pn127.pn, %397 ], [ %389, %388 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %22) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %21) #5
  br label %399

399:                                              ; preds = %398, %386
  %.pn127.pn.pn.pn = phi { ptr, i32 } [ %.pn127.pn.pn, %398 ], [ %387, %386 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %19) #5
  br label %400

400:                                              ; preds = %.loopexit, %.loopexit.split-lp, %399, %162, %157
  %.pn132 = phi { ptr, i32 } [ %.pn127.pn.pn.pn, %399 ], [ %.pn125, %162 ], [ %.pn, %157 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #5
  br label %401

401:                                              ; preds = %400, %151
  %.pn132.pn = phi { ptr, i32 } [ %.pn132, %400 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %11) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #5
  br label %402

402:                                              ; preds = %401, %149
  %.pn132.pn.pn = phi { ptr, i32 } [ %.pn132.pn, %401 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #5
  br label %403

403:                                              ; preds = %402, %147
  %.pn132.pn.pn.pn = phi { ptr, i32 } [ %.pn132.pn.pn, %402 ], [ %148, %147 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %9) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %8) #5
  br label %404

404:                                              ; preds = %403, %145
  %.pn132.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn132.pn.pn.pn, %403 ], [ %146, %145 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %8) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #5
  br label %405

405:                                              ; preds = %404, %143
  %.pn132.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn132.pn.pn.pn.pn, %404 ], [ %144, %143 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  call void @_ZN7Array2DIfED2Ev(ptr noundef nonnull align 8 dereferenceable(40) %0) #5
  resume { ptr, i32 } %.pn132.pn.pn.pn.pn.pn
}

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt4sqrtf(float noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #4

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 12}
!10 = !{!"_ZTSN13EulerSolver1D6SolverE", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !6, i64 32, !6, i64 36, !6, i64 40, !11, i64 44, !11, i64 48, !11, i64 52, !11, i64 56, !11, i64 60, !11, i64 64, !12, i64 72, !12, i64 112, !12, i64 152, !12, i64 192, !12, i64 232, !14, i64 272}
!11 = !{!"int", !7, i64 0}
!12 = !{!"_ZTS7Array2DIfE", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !13, i64 24, !13, i64 25, !14, i64 32}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"any pointer", !7, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass