; LLVM IR from Eydcao/Yan-CG-SnowSim :: src (Grid)

; 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.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x float] }
%"class.Eigen::CwiseBinaryOp" = type <{ ptr, %"class.Eigen::CwiseUnaryOp", [8 x i8] }>
%"class.Eigen::CwiseUnaryOp" = type <{ ptr, [8 x i8] }>
%"class.Eigen::Matrix.9" = type { %"class.Eigen::PlainObjectBase.10" }
%"class.Eigen::PlainObjectBase.10" = type { %"class.Eigen::DenseStorage.17" }
%"class.Eigen::DenseStorage.17" = type { %"struct.Eigen::internal::plain_array.18" }
%"struct.Eigen::internal::plain_array.18" = type { [3 x i32] }
%"class.Eigen::CwiseBinaryOp.32" = type <{ [4 x i8], %"class.Eigen::CwiseNullaryOp", [4 x i8], %"class.Eigen::CwiseBinaryOp.42", [8 x i8] }>
%"class.Eigen::CwiseNullaryOp" = type { [4 x i8], %"struct.Eigen::internal::scalar_constant_op" }
%"struct.Eigen::internal::scalar_constant_op" = type { float }
%"class.Eigen::CwiseBinaryOp.42" = type <{ ptr, ptr, [8 x i8] }>
%"class.Eigen::CwiseBinaryOp.50" = type <{ ptr, ptr, [8 x i8] }>
%class.Bounds3 = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix" }
%"class.std::initializer_list.57" = type { ptr, i64 }
%class.GridMesh = type { %class.Bounds3, %class.Bounds3, %"class.Eigen::Matrix.9", %"class.Eigen::Matrix", ptr, float, i32, %"class.std::vector.19", i32, %"class.std::vector.19" }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<GridCell *, std::allocator<GridCell *>>::_Vector_impl" }
%"struct.std::_Vector_base<GridCell *, std::allocator<GridCell *>>::_Vector_impl" = type { %"struct.std::_Vector_base<GridCell *, std::allocator<GridCell *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<GridCell *, std::allocator<GridCell *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.GridCell = type { i8, i32, i32, i32, float, %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.std::vector", %"class.std::vector.3", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", %"class.Eigen::Matrix", float }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<SnowParticle *, std::allocator<SnowParticle *>>::_Vector_impl" }
%"struct.std::_Vector_base<SnowParticle *, std::allocator<SnowParticle *>>::_Vector_impl" = type { %"struct.std::_Vector_base<SnowParticle *, std::allocator<SnowParticle *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<SnowParticle *, std::allocator<SnowParticle *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.3" = type { %"struct.std::_Vector_base.4" }
%"struct.std::_Vector_base.4" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8GridMeshC2ERK7Bounds3RKN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEEP15SnowParticleSet(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef nonnull align 4 dereferenceable(24) %1, ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef %3) unnamed_addr #1 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 ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.Eigen::Matrix", align 4
  %15 = alloca %"class.Eigen::Matrix", align 4
  %16 = alloca %"class.Eigen::CwiseBinaryOp", align 8
  %17 = alloca %"class.Eigen::CwiseUnaryOp", align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"class.Eigen::Matrix.9", align 4
  %25 = alloca %"class.Eigen::Matrix", align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca %"class.Eigen::Matrix", align 4
  %30 = alloca %"class.Eigen::CwiseBinaryOp.32", align 8
  %31 = alloca double, align 8
  %32 = alloca %"class.Eigen::CwiseBinaryOp.42", align 8
  %33 = alloca %"class.Eigen::Matrix", align 4
  %34 = alloca %"class.Eigen::CwiseBinaryOp.42", align 8
  %35 = alloca %"class.Eigen::Matrix", align 4
  %36 = alloca %"class.Eigen::CwiseBinaryOp.50", align 8
  %37 = alloca %class.Bounds3, align 4
  %38 = alloca %"class.Eigen::Matrix", align 4
  %39 = alloca %"class.Eigen::Matrix", align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca ptr, align 8
  %45 = alloca %"class.std::initializer_list.57", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  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
  %46 = load ptr, ptr %5, align 8
  %47 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 0
  call void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24) %47)
  %48 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 1
  call void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24) %48)
  %49 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 2
  call void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %49)
  %50 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 3
  call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %50)
  %51 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 7
  call void @_ZNSt6vectorIP8GridCellSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #7
  %52 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 9
  call void @_ZNSt6vectorIP8GridCellSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #7
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 4
  store ptr %53, ptr %54, align 8, !tbaa !9
  %55 = load ptr, ptr %7, align 8, !tbaa !5
  %56 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 3
  %57 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEaSERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %56, ptr noundef nonnull align 4 dereferenceable(12) %55)
          to label %58 unwind label %161

58:                                               ; preds = %4
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %59)
          to label %61 unwind label %161

61:                                               ; preds = %58
  %62 = load float, ptr %60, align 4, !tbaa !26
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  %64 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %63)
          to label %65 unwind label %161

65:                                               ; preds = %61
  %66 = load float, ptr %64, align 4, !tbaa !26
  %67 = fmul float %62, %66
  %68 = load ptr, ptr %7, align 8, !tbaa !5
  %69 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %68)
          to label %70 unwind label %161

70:                                               ; preds = %65
  %71 = load float, ptr %69, align 4, !tbaa !26
  %72 = fmul float %67, %71
  %73 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 5
  store float %72, ptr %73, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %14) #7
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZNK7Bounds38DiagonalEv(ptr dead_on_unwind writable sret(%"class.Eigen::Matrix") align 4 %14, ptr noundef nonnull align 4 dereferenceable(24) %74)
          to label %75 unwind label %165

75:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 12, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %17) #7
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseInverseEv(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseUnaryOp") align 8 %17, ptr noundef nonnull align 1 dereferenceable(1) %76)
          to label %77 unwind label %169

77:                                               ; preds = %75
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseProductINS_12CwiseUnaryOpINS_8internal17scalar_inverse_opIfEEKS2_EEEEKNS_13CwiseBinaryOpINS6_17scalar_product_opIfNS6_6traitsIT_E6ScalarEEES9_KSE_EERKNS0_ISE_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp") align 8 %16, ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %78 unwind label %169

78:                                               ; preds = %77
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKS1_KNS_12CwiseUnaryOpINS4_17scalar_inverse_opIfEES7_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %15, ptr noundef nonnull align 1 dereferenceable(1) %16)
          to label %79 unwind label %169

79:                                               ; preds = %78
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  %80 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %81 unwind label %173

81:                                               ; preds = %79
  %82 = load float, ptr %80, align 4, !tbaa !26
  %83 = fptosi float %82 to i32
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %18, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 3, ptr %19, align 4, !tbaa !28
  %85 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %86 unwind label %177

86:                                               ; preds = %81
  %87 = load i32, ptr %85, align 4, !tbaa !28
  store i32 %87, ptr %11, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  %88 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %89 unwind label %182

89:                                               ; preds = %86
  %90 = load float, ptr %88, align 4, !tbaa !26
  %91 = fptosi float %90 to i32
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %20, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  store i32 3, ptr %21, align 4, !tbaa !28
  %93 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %21)
          to label %94 unwind label %186

94:                                               ; preds = %89
  %95 = load i32, ptr %93, align 4, !tbaa !28
  store i32 %95, ptr %12, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #7
  %96 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %97 unwind label %191

97:                                               ; preds = %94
  %98 = load float, ptr %96, align 4, !tbaa !26
  %99 = fptosi float %98 to i32
  %100 = add nsw i32 %99, 1
  store i32 %100, ptr %22, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #7
  store i32 3, ptr %23, align 4, !tbaa !28
  %101 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %22, ptr noundef nonnull align 4 dereferenceable(4) %23)
          to label %102 unwind label %195

102:                                              ; preds = %97
  %103 = load i32, ptr %101, align 4, !tbaa !28
  store i32 %103, ptr %13, align 4, !tbaa !28
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %24) #7
  invoke void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2ERKiS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %24, ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %104 unwind label %200

104:                                              ; preds = %102
  %105 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 2
  %106 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEaSEOS1_(ptr noundef nonnull align 4 dereferenceable(12) %105, ptr noundef nonnull align 4 dereferenceable(12) %24) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #7
  %107 = load i32, ptr %11, align 4, !tbaa !28
  %108 = load i32, ptr %12, align 4, !tbaa !28
  %109 = mul nsw i32 %107, %108
  %110 = load i32, ptr %13, align 4, !tbaa !28
  %111 = mul nsw i32 %109, %110
  %112 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 6
  store i32 %111, ptr %112, align 4, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 12, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  %113 = load i32, ptr %11, align 4, !tbaa !28
  %114 = sitofp i32 %113 to float
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %115)
          to label %117 unwind label %204

117:                                              ; preds = %104
  %118 = load float, ptr %116, align 4, !tbaa !26
  %119 = fmul float %114, %118
  store float %119, ptr %26, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #7
  %120 = load i32, ptr %12, align 4, !tbaa !28
  %121 = sitofp i32 %120 to float
  %122 = load ptr, ptr %7, align 8, !tbaa !5
  %123 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %122)
          to label %124 unwind label %208

124:                                              ; preds = %117
  %125 = load float, ptr %123, align 4, !tbaa !26
  %126 = fmul float %121, %125
  store float %126, ptr %27, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #7
  %127 = load i32, ptr %13, align 4, !tbaa !28
  %128 = sitofp i32 %127 to float
  %129 = load ptr, ptr %7, align 8, !tbaa !5
  %130 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %129)
          to label %131 unwind label %212

131:                                              ; preds = %124
  %132 = load float, ptr %130, align 4, !tbaa !26
  %133 = fmul float %128, %132
  store float %133, ptr %28, align 4, !tbaa !26
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %25, ptr noundef nonnull align 4 dereferenceable(4) %26, ptr noundef nonnull align 4 dereferenceable(4) %27, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %134 unwind label %212

134:                                              ; preds = %131
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  store double 5.000000e-01, ptr %31, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr %32) #7
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8 %32, ptr noundef nonnull align 1 dereferenceable(1) %25, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %135 unwind label %218

135:                                              ; preds = %134
  invoke void @_ZN5EigenmlIdEEKNS_13CwiseBinaryOpINS_8internal17scalar_product_opINS2_18promote_scalar_argIfT_Xsr5Eigen8internal14has_ReturnTypeINS_20ScalarBinaryOpTraitsIS5_fNS3_IS5_fEEEEEE5valueEE4typeEfEEKNS2_19plain_constant_typeINS1_INS2_20scalar_difference_opIffEEKNS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEESH_EESA_E4typeEKSI_EERKS5_RKNS_10MatrixBaseISI_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.32") align 8 %30, ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %136 unwind label %218

136:                                              ; preds = %135
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKNS_14CwiseNullaryOpINS4_18scalar_constant_opIfEEKS1_EEKNS3_INS4_20scalar_difference_opIffEESA_SA_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %29, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %137 unwind label %218

137:                                              ; preds = %136
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #7
  %138 = load ptr, ptr %6, align 8, !tbaa !5
  %139 = getelementptr inbounds %class.Bounds3, ptr %138, i32 0, i32 0
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8 %34, ptr noundef nonnull align 1 dereferenceable(1) %139, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %140 unwind label %222

140:                                              ; preds = %137
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %33, ptr noundef nonnull align 1 dereferenceable(1) %34)
          to label %141 unwind label %222

141:                                              ; preds = %140
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %36) #7
  %142 = load ptr, ptr %6, align 8, !tbaa !5
  %143 = getelementptr inbounds %class.Bounds3, ptr %142, i32 0, i32 1
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEplIS2_EEKNS_13CwiseBinaryOpINS_8internal13scalar_sum_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind writable sret(%"class.Eigen::CwiseBinaryOp.50") align 8 %36, ptr noundef nonnull align 1 dereferenceable(1) %143, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %144 unwind label %226

144:                                              ; preds = %141
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal13scalar_sum_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %35, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %145 unwind label %226

145:                                              ; preds = %144
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %37) #7
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %38, ptr noundef nonnull align 4 dereferenceable(12) %33)
          to label %146 unwind label %230

146:                                              ; preds = %145
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %39, ptr noundef nonnull align 4 dereferenceable(12) %35)
          to label %147 unwind label %230

147:                                              ; preds = %146
  invoke void @_ZN7Bounds3C2EN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEES2_(ptr noundef nonnull align 4 dereferenceable(24) %37, ptr noundef %38, ptr noundef %39)
          to label %148 unwind label %230

148:                                              ; preds = %147
  %149 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 0
  %150 = call noundef nonnull align 4 dereferenceable(24) ptr @_ZN7Bounds3aSEOS_(ptr noundef nonnull align 4 dereferenceable(24) %149, ptr noundef nonnull align 4 dereferenceable(24) %37) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #7
  %151 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 7
  %152 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 6
  %153 = load i32, ptr %152, align 4, !tbaa !29
  %154 = sext i32 %153 to i64
  invoke void @_ZNSt6vectorIP8GridCellSaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %151, i64 noundef %154)
          to label %155 unwind label %234

155:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  store i32 0, ptr %40, align 4, !tbaa !28
  br label %156

156:                                              ; preds = %295, %155
  %157 = load i32, ptr %40, align 4, !tbaa !28
  %158 = load i32, ptr %11, align 4, !tbaa !28
  %159 = icmp slt i32 %157, %158
  br i1 %159, label %238, label %160

160:                                              ; preds = %156
  store i32 2, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  br label %298

161:                                              ; preds = %65, %61, %58, %4
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %9, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %10, align 4
  br label %313

165:                                              ; preds = %70
  %166 = landingpad { ptr, i32 }
          cleanup
  %167 = extractvalue { ptr, i32 } %166, 0
  store ptr %167, ptr %9, align 8
  %168 = extractvalue { ptr, i32 } %166, 1
  store i32 %168, ptr %10, align 4
  br label %312

169:                                              ; preds = %78, %77, %75
  %170 = landingpad { ptr, i32 }
          cleanup
  %171 = extractvalue { ptr, i32 } %170, 0
  store ptr %171, ptr %9, align 8
  %172 = extractvalue { ptr, i32 } %170, 1
  store i32 %172, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #7
  br label %311

173:                                              ; preds = %79
  %174 = landingpad { ptr, i32 }
          cleanup
  %175 = extractvalue { ptr, i32 } %174, 0
  store ptr %175, ptr %9, align 8
  %176 = extractvalue { ptr, i32 } %174, 1
  store i32 %176, ptr %10, align 4
  br label %181

177:                                              ; preds = %81
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %9, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  br label %181

181:                                              ; preds = %177, %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  br label %311

182:                                              ; preds = %86
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %9, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %10, align 4
  br label %190

186:                                              ; preds = %89
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %9, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  br label %190

190:                                              ; preds = %186, %182
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  br label %311

191:                                              ; preds = %94
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %9, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %10, align 4
  br label %199

195:                                              ; preds = %97
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %9, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #7
  br label %199

199:                                              ; preds = %195, %191
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #7
  br label %311

200:                                              ; preds = %102
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %9, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 12, ptr %24) #7
  br label %311

204:                                              ; preds = %104
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %9, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %10, align 4
  br label %217

208:                                              ; preds = %117
  %209 = landingpad { ptr, i32 }
          cleanup
  %210 = extractvalue { ptr, i32 } %209, 0
  store ptr %210, ptr %9, align 8
  %211 = extractvalue { ptr, i32 } %209, 1
  store i32 %211, ptr %10, align 4
  br label %216

212:                                              ; preds = %131, %124
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %9, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #7
  br label %216

216:                                              ; preds = %212, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #7
  br label %217

217:                                              ; preds = %216, %204
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  br label %310

218:                                              ; preds = %136, %135, %134
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %9, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %30) #7
  br label %309

222:                                              ; preds = %140, %137
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %9, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #7
  br label %308

226:                                              ; preds = %144, %141
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %9, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %36) #7
  br label %307

230:                                              ; preds = %147, %146, %145
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %9, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %37) #7
  br label %307

234:                                              ; preds = %298, %148
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %9, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %10, align 4
  br label %307

238:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  store i32 0, ptr %42, align 4, !tbaa !28
  br label %239

239:                                              ; preds = %291, %238
  %240 = load i32, ptr %42, align 4, !tbaa !28
  %241 = load i32, ptr %12, align 4, !tbaa !28
  %242 = icmp slt i32 %240, %241
  br i1 %242, label %244, label %243

243:                                              ; preds = %239
  store i32 5, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  br label %294

244:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  store i32 0, ptr %43, align 4, !tbaa !28
  br label %245

245:                                              ; preds = %278, %244
  %246 = load i32, ptr %43, align 4, !tbaa !28
  %247 = load i32, ptr %13, align 4, !tbaa !28
  %248 = icmp slt i32 %246, %247
  br i1 %248, label %250, label %249

249:                                              ; preds = %245
  store i32 8, ptr %41, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  br label %290

250:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #7
  %251 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 168) #8
          to label %252 unwind label %281

252:                                              ; preds = %250
  invoke void @_ZN8GridCellC1Ev(ptr noundef nonnull align 8 dereferenceable(168) %251)
          to label %253 unwind label %285

253:                                              ; preds = %252
  store ptr %251, ptr %44, align 8, !tbaa !5
  %254 = load i32, ptr %40, align 4, !tbaa !28
  %255 = load ptr, ptr %44, align 8, !tbaa !5
  %256 = getelementptr inbounds %class.GridCell, ptr %255, i32 0, i32 1
  store i32 %254, ptr %256, align 4, !tbaa !32
  %257 = load i32, ptr %42, align 4, !tbaa !28
  %258 = load ptr, ptr %44, align 8, !tbaa !5
  %259 = getelementptr inbounds %class.GridCell, ptr %258, i32 0, i32 2
  store i32 %257, ptr %259, align 8, !tbaa !43
  %260 = load i32, ptr %43, align 4, !tbaa !28
  %261 = load ptr, ptr %44, align 8, !tbaa !5
  %262 = getelementptr inbounds %class.GridCell, ptr %261, i32 0, i32 3
  store i32 %260, ptr %262, align 4, !tbaa !44
  %263 = load ptr, ptr %44, align 8, !tbaa !5
  %264 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 7
  %265 = load i32, ptr %40, align 4, !tbaa !28
  %266 = load i32, ptr %12, align 4, !tbaa !28
  %267 = mul nsw i32 %265, %266
  %268 = load i32, ptr %13, align 4, !tbaa !28
  %269 = mul nsw i32 %267, %268
  %270 = load i32, ptr %42, align 4, !tbaa !28
  %271 = load i32, ptr %13, align 4, !tbaa !28
  %272 = mul nsw i32 %270, %271
  %273 = add nsw i32 %269, %272
  %274 = load i32, ptr %43, align 4, !tbaa !28
  %275 = add nsw i32 %273, %274
  %276 = sext i32 %275 to i64
  %277 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP8GridCellSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %264, i64 noundef %276) #7
  store ptr %263, ptr %277, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  br label %278

278:                                              ; preds = %253
  %279 = load i32, ptr %43, align 4, !tbaa !28
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %43, align 4, !tbaa !28
  br label %245, !llvm.loop !45

281:                                              ; preds = %250
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %9, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %10, align 4
  br label %289

285:                                              ; preds = %252
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %9, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %10, align 4
  call void @_ZdlPvm(ptr noundef %251, i64 noundef 168) #9
  br label %289

289:                                              ; preds = %285, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  br label %307

290:                                              ; preds = %249
  br label %291

291:                                              ; preds = %290
  %292 = load i32, ptr %42, align 4, !tbaa !28
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr %42, align 4, !tbaa !28
  br label %239, !llvm.loop !47

294:                                              ; preds = %243
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %40, align 4, !tbaa !28
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %40, align 4, !tbaa !28
  br label %156, !llvm.loop !48

298:                                              ; preds = %160
  %299 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 8
  store i32 0, ptr %299, align 8, !tbaa !49
  call void @_ZNSt16initializer_listIP8GridCellEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %45) #7
  %300 = getelementptr inbounds %class.GridMesh, ptr %46, i32 0, i32 9
  %301 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 0
  %302 = load ptr, ptr %301, align 8
  %303 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 1
  %304 = load i64, ptr %303, align 8
  %305 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP8GridCellSaIS1_EEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %300, ptr %302, i64 %304)
          to label %306 unwind label %234

306:                                              ; preds = %298
  call void @llvm.lifetime.end.p0(i64 12, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  ret void

307:                                              ; preds = %289, %234, %230, %226
  call void @llvm.lifetime.end.p0(i64 12, ptr %35) #7
  br label %308

308:                                              ; preds = %307, %222
  call void @llvm.lifetime.end.p0(i64 12, ptr %33) #7
  br label %309

309:                                              ; preds = %308, %218
  call void @llvm.lifetime.end.p0(i64 12, ptr %29) #7
  br label %310

310:                                              ; preds = %309, %217
  call void @llvm.lifetime.end.p0(i64 12, ptr %25) #7
  br label %311

311:                                              ; preds = %310, %200, %199, %190, %181, %169
  call void @llvm.lifetime.end.p0(i64 12, ptr %15) #7
  br label %312

312:                                              ; preds = %311, %165
  call void @llvm.lifetime.end.p0(i64 12, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  br label %313

313:                                              ; preds = %312, %161
  call void @_ZNSt6vectorIP8GridCellSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #7
  call void @_ZNSt6vectorIP8GridCellSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #7
  br label %314

314:                                              ; preds = %313
  %315 = load ptr, ptr %9, align 8
  %316 = load i32, ptr %10, align 4
  %317 = insertvalue { ptr, i32 } poison, ptr %315, 0
  %318 = insertvalue { ptr, i32 } %317, i32 %316, 1
  resume { ptr, i32 } %318
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEaSERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7Bounds38DiagonalEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix") align 4, ptr noundef nonnull align 4 dereferenceable(24)) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseProductINS_12CwiseUnaryOpINS_8internal17scalar_inverse_opIfEEKS2_EEEEKNS_13CwiseBinaryOpINS6_17scalar_product_opIfNS6_6traitsIT_E6ScalarEEES9_KSE_EERKNS0_ISE_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseInverseEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseUnaryOp") align 8, ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKS1_KNS_12CwiseUnaryOpINS4_17scalar_inverse_opIfEES7_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2ERKiS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5EigenmlIdEEKNS_13CwiseBinaryOpINS_8internal17scalar_product_opINS2_18promote_scalar_argIfT_Xsr5Eigen8internal14has_ReturnTypeINS_20ScalarBinaryOpTraitsIS5_fNS3_IS5_fEEEEEE5valueEE4typeEfEEKNS2_19plain_constant_typeINS1_INS2_20scalar_difference_opIffEEKNS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEESH_EESA_E4typeEKSI_EERKS5_RKNS_10MatrixBaseISI_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.32") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKNS_14CwiseNullaryOpINS4_18scalar_constant_opIfEEKS1_EEKNS3_INS4_20scalar_difference_opIffEESA_SA_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEplIS2_EEKNS_13CwiseBinaryOpINS_8internal13scalar_sum_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.50") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal13scalar_sum_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Bounds3C2EN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEES2_(ptr noundef nonnull align 4 dereferenceable(24), ptr noundef, ptr noundef) unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

declare void @_ZN8GridCellC1Ev(ptr)

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 72}
!10 = !{!"_ZTS8GridMesh", !11, i64 0, !11, i64 24, !16, i64 48, !12, i64 60, !6, i64 72, !20, i64 80, !21, i64 84, !22, i64 88, !21, i64 112, !22, i64 120}
!11 = !{!"_ZTS7Bounds3", !12, i64 0, !12, i64 12}
!12 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEE", !13, i64 0}
!13 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEE", !14, i64 0}
!14 = !{!"_ZTSN5Eigen12DenseStorageIfLi3ELi3ELi1ELi0EEE", !15, i64 0}
!15 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi3ELi0ELi0EEE", !7, i64 0}
!16 = !{!"_ZTSN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEE", !17, i64 0}
!17 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIiLi3ELi1ELi0ELi3ELi1EEEEE", !18, i64 0}
!18 = !{!"_ZTSN5Eigen12DenseStorageIiLi3ELi3ELi1ELi0EEE", !19, i64 0}
!19 = !{!"_ZTSN5Eigen8internal11plain_arrayIiLi3ELi0ELi0EEE", !7, i64 0}
!20 = !{!"float", !7, i64 0}
!21 = !{!"int", !7, i64 0}
!22 = !{!"_ZTSSt6vectorIP8GridCellSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIP8GridCellSaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP8GridCellSaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIP8GridCellSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!20, !20, i64 0}
!27 = !{!10, !20, i64 80}
!28 = !{!21, !21, i64 0}
!29 = !{!10, !21, i64 84}
!30 = !{!31, !31, i64 0}
!31 = !{!"double", !7, i64 0}
!32 = !{!33, !21, i64 4}
!33 = !{!"_ZTS8GridCell", !34, i64 0, !21, i64 4, !21, i64 8, !21, i64 12, !20, i64 16, !12, i64 20, !12, i64 32, !12, i64 44, !35, i64 56, !39, i64 80, !12, i64 104, !12, i64 116, !12, i64 128, !12, i64 140, !12, i64 152, !20, i64 164}
!34 = !{!"bool", !7, i64 0}
!35 = !{!"_ZTSSt6vectorIP12SnowParticleSaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIP12SnowParticleSaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIP12SnowParticleSaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIP12SnowParticleSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSSt6vectorIiSaIiEE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!33, !21, i64 8}
!44 = !{!33, !21, i64 12}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.mustprogress"}
!47 = distinct !{!47, !46}
!48 = distinct !{!48, !46}
!49 = !{!10, !21, i64 112}


; 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.Eigen::Matrix" = type { %"class.Eigen::PlainObjectBase" }
%"class.Eigen::PlainObjectBase" = type { %"class.Eigen::DenseStorage" }
%"class.Eigen::DenseStorage" = type { %"struct.Eigen::internal::plain_array" }
%"struct.Eigen::internal::plain_array" = type { [3 x float] }
%"class.Eigen::CwiseBinaryOp" = type <{ ptr, %"class.Eigen::CwiseUnaryOp", [8 x i8] }>
%"class.Eigen::CwiseUnaryOp" = type <{ ptr, [8 x i8] }>
%"class.Eigen::Matrix.9" = type { %"class.Eigen::PlainObjectBase.10" }
%"class.Eigen::PlainObjectBase.10" = type { %"class.Eigen::DenseStorage.17" }
%"class.Eigen::DenseStorage.17" = type { %"struct.Eigen::internal::plain_array.18" }
%"struct.Eigen::internal::plain_array.18" = type { [3 x i32] }
%"class.Eigen::CwiseBinaryOp.32" = type <{ [4 x i8], %"class.Eigen::CwiseNullaryOp", [4 x i8], %"class.Eigen::CwiseBinaryOp.42", [8 x i8] }>
%"class.Eigen::CwiseNullaryOp" = type { [4 x i8], %"struct.Eigen::internal::scalar_constant_op" }
%"struct.Eigen::internal::scalar_constant_op" = type { float }
%"class.Eigen::CwiseBinaryOp.42" = type <{ ptr, ptr, [8 x i8] }>
%"class.Eigen::CwiseBinaryOp.50" = type <{ ptr, ptr, [8 x i8] }>
%class.Bounds3 = type { %"class.Eigen::Matrix", %"class.Eigen::Matrix" }
%"class.std::initializer_list.57" = type { ptr, i64 }

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN8GridMeshC2ERK7Bounds3RKN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEEP15SnowParticleSet(ptr noundef nonnull align 8 dereferenceable(144) %0, ptr noundef nonnull align 4 dereferenceable(24) %1, ptr noundef nonnull align 4 dereferenceable(12) %2, ptr noundef %3) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.Eigen::Matrix", align 4
  %9 = alloca %"class.Eigen::Matrix", align 4
  %10 = alloca %"class.Eigen::CwiseBinaryOp", align 8
  %11 = alloca %"class.Eigen::CwiseUnaryOp", align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca %"class.Eigen::Matrix.9", align 4
  %19 = alloca %"class.Eigen::Matrix", align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca %"class.Eigen::Matrix", align 4
  %24 = alloca %"class.Eigen::CwiseBinaryOp.32", align 8
  %25 = alloca double, align 8
  %26 = alloca %"class.Eigen::CwiseBinaryOp.42", align 8
  %27 = alloca %"class.Eigen::Matrix", align 4
  %28 = alloca %"class.Eigen::CwiseBinaryOp.42", align 8
  %29 = alloca %"class.Eigen::Matrix", align 4
  %30 = alloca %"class.Eigen::CwiseBinaryOp.50", align 8
  %31 = alloca %class.Bounds3, align 4
  %32 = alloca %"class.Eigen::Matrix", align 4
  %33 = alloca %"class.Eigen::Matrix", align 4
  %34 = alloca %"class.std::initializer_list.57", align 8
  tail call void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24) %0)
  %35 = getelementptr inbounds i8, ptr %0, i64 24
  tail call void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24) %35)
  %36 = getelementptr inbounds i8, ptr %0, i64 48
  tail call void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %36)
  %37 = getelementptr inbounds i8, ptr %0, i64 60
  tail call void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12) %37)
  %38 = getelementptr inbounds i8, ptr %0, i64 88
  tail call void @_ZNSt6vectorIP8GridCellSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #7
  %39 = getelementptr inbounds i8, ptr %0, i64 120
  tail call void @_ZNSt6vectorIP8GridCellSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #7
  %40 = getelementptr inbounds i8, ptr %0, i64 72
  store ptr %3, ptr %40, align 8, !tbaa !5
  %41 = invoke noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEaSERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %37, ptr noundef nonnull align 4 dereferenceable(12) %2)
          to label %42 unwind label %135

42:                                               ; preds = %4
  %43 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %44 unwind label %135

44:                                               ; preds = %42
  %45 = load float, ptr %43, align 4, !tbaa !25
  %46 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %47 unwind label %135

47:                                               ; preds = %44
  %48 = load float, ptr %46, align 4, !tbaa !25
  %49 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %50 unwind label %135

50:                                               ; preds = %47
  %51 = fmul float %45, %48
  %52 = load float, ptr %49, align 4, !tbaa !25
  %53 = fmul float %51, %52
  %54 = getelementptr inbounds i8, ptr %0, i64 80
  store float %53, ptr %54, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #7
  invoke void @_ZNK7Bounds38DiagonalEv(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::Matrix") align 4 %8, ptr noundef nonnull align 4 dereferenceable(24) %1)
          to label %55 unwind label %137

55:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #7
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseInverseEv(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseUnaryOp") align 8 %11, ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %56 unwind label %139

56:                                               ; preds = %55
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseProductINS_12CwiseUnaryOpINS_8internal17scalar_inverse_opIfEEKS2_EEEEKNS_13CwiseBinaryOpINS6_17scalar_product_opIfNS6_6traitsIT_E6ScalarEEES9_KSE_EERKNS0_ISE_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp") align 8 %10, ptr noundef nonnull align 1 dereferenceable(1) %8, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %57 unwind label %139

57:                                               ; preds = %56
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKS1_KNS_12CwiseUnaryOpINS4_17scalar_inverse_opIfEES7_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %9, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %58 unwind label %139

58:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #7
  %59 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %60 unwind label %141

60:                                               ; preds = %58
  %61 = load float, ptr %59, align 4, !tbaa !25
  %62 = fptosi float %61 to i32
  %63 = add nsw i32 %62, 1
  store i32 %63, ptr %12, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  store i32 3, ptr %13, align 4, !tbaa !27
  %64 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %65 = load i32, ptr %64, align 4, !tbaa !27
  store i32 %65, ptr %5, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #7
  %66 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %67 unwind label %143

67:                                               ; preds = %60
  %68 = load float, ptr %66, align 4, !tbaa !25
  %69 = fptosi float %68 to i32
  %70 = add nsw i32 %69, 1
  store i32 %70, ptr %14, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  store i32 3, ptr %15, align 4, !tbaa !27
  %71 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %14, ptr noundef nonnull align 4 dereferenceable(4) %15)
  %72 = load i32, ptr %71, align 4, !tbaa !27
  store i32 %72, ptr %6, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #7
  %73 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %74 unwind label %145

74:                                               ; preds = %67
  %75 = load float, ptr %73, align 4, !tbaa !25
  %76 = fptosi float %75 to i32
  %77 = add nsw i32 %76, 1
  store i32 %77, ptr %16, align 4, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #7
  store i32 3, ptr %17, align 4, !tbaa !27
  %78 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %16, ptr noundef nonnull align 4 dereferenceable(4) %17)
  %79 = load i32, ptr %78, align 4, !tbaa !27
  store i32 %79, ptr %7, align 4, !tbaa !27
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %18) #7
  invoke void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2ERKiS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %18, ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %80 unwind label %147

80:                                               ; preds = %74
  %81 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEaSEOS1_(ptr noundef nonnull align 4 dereferenceable(12) %36, ptr noundef nonnull align 4 dereferenceable(12) %18) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %18) #7
  %82 = load i32, ptr %5, align 4, !tbaa !27
  %83 = load i32, ptr %6, align 4, !tbaa !27
  %84 = mul nsw i32 %83, %82
  %85 = load i32, ptr %7, align 4, !tbaa !27
  %86 = mul nsw i32 %84, %85
  %87 = getelementptr inbounds i8, ptr %0, i64 84
  store i32 %86, ptr %87, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  %88 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %89 unwind label %149

89:                                               ; preds = %80
  %90 = sitofp i32 %82 to float
  %91 = load float, ptr %88, align 4, !tbaa !25
  %92 = fmul float %91, %90
  store float %92, ptr %20, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  %93 = load i32, ptr %6, align 4, !tbaa !27
  %94 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %95 unwind label %151

95:                                               ; preds = %89
  %96 = sitofp i32 %93 to float
  %97 = load float, ptr %94, align 4, !tbaa !25
  %98 = fmul float %97, %96
  store float %98, ptr %21, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  %99 = load i32, ptr %7, align 4, !tbaa !27
  %100 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1) %2)
          to label %101 unwind label %153

101:                                              ; preds = %95
  %102 = sitofp i32 %99 to float
  %103 = load float, ptr %100, align 4, !tbaa !25
  %104 = fmul float %103, %102
  store float %104, ptr %22, align 4, !tbaa !25
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12) %19, ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %22)
          to label %105 unwind label %153

105:                                              ; preds = %101
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #7
  store double 5.000000e-01, ptr %25, align 8, !tbaa !29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #7
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8 %26, ptr noundef nonnull align 1 dereferenceable(1) %19, ptr noundef nonnull align 1 dereferenceable(1) %8)
          to label %106 unwind label %157

106:                                              ; preds = %105
  invoke void @_ZN5EigenmlIdEEKNS_13CwiseBinaryOpINS_8internal17scalar_product_opINS2_18promote_scalar_argIfT_Xsr5Eigen8internal14has_ReturnTypeINS_20ScalarBinaryOpTraitsIS5_fNS3_IS5_fEEEEEE5valueEE4typeEfEEKNS2_19plain_constant_typeINS1_INS2_20scalar_difference_opIffEEKNS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEESH_EESA_E4typeEKSI_EERKS5_RKNS_10MatrixBaseISI_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.32") align 8 %24, ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %107 unwind label %157

107:                                              ; preds = %106
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKNS_14CwiseNullaryOpINS4_18scalar_constant_opIfEEKS1_EEKNS3_INS4_20scalar_difference_opIffEESA_SA_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %23, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %108 unwind label %157

108:                                              ; preds = %107
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %28) #7
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8 %28, ptr noundef nonnull align 1 dereferenceable(1) %1, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %109 unwind label %159

109:                                              ; preds = %108
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %27, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %110 unwind label %159

110:                                              ; preds = %109
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %30) #7
  %111 = getelementptr inbounds i8, ptr %1, i64 12
  invoke void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEplIS2_EEKNS_13CwiseBinaryOpINS_8internal13scalar_sum_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind nonnull writable sret(%"class.Eigen::CwiseBinaryOp.50") align 8 %30, ptr noundef nonnull align 1 dereferenceable(1) %111, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %112 unwind label %161

112:                                              ; preds = %110
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal13scalar_sum_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12) %29, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %113 unwind label %161

113:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %31) #7
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %32, ptr noundef nonnull align 4 dereferenceable(12) %27)
          to label %114 unwind label %163

114:                                              ; preds = %113
  invoke void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12) %33, ptr noundef nonnull align 4 dereferenceable(12) %29)
          to label %115 unwind label %163

115:                                              ; preds = %114
  invoke void @_ZN7Bounds3C2EN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEES2_(ptr noundef nonnull align 4 dereferenceable(24) %31, ptr noundef nonnull %32, ptr noundef nonnull %33)
          to label %116 unwind label %163

116:                                              ; preds = %115
  %117 = call noundef nonnull align 4 dereferenceable(24) ptr @_ZN7Bounds3aSEOS_(ptr noundef nonnull align 4 dereferenceable(24) %0, ptr noundef nonnull align 4 dereferenceable(24) %31) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #7
  %118 = load i32, ptr %87, align 4, !tbaa !28
  %119 = sext i32 %118 to i64
  invoke void @_ZNSt6vectorIP8GridCellSaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %119)
          to label %.preheader55 unwind label %165

.preheader55:                                     ; preds = %116
  %120 = load i32, ptr %5, align 4, !tbaa !27
  %121 = icmp sgt i32 %120, 0
  %122 = load i32, ptr %6, align 4
  %123 = icmp sgt i32 %122, 0
  %or.cond = select i1 %121, i1 %123, i1 false
  br i1 %or.cond, label %.preheader54, label %._crit_edge61

.preheader54:                                     ; preds = %.preheader55, %._crit_edge58
  %124 = phi i32 [ %170, %._crit_edge58 ], [ %120, %.preheader55 ]
  %125 = phi i32 [ %171, %._crit_edge58 ], [ %122, %.preheader55 ]
  %126 = phi i32 [ %172, %._crit_edge58 ], [ %122, %.preheader55 ]
  %.03259 = phi i32 [ %173, %._crit_edge58 ], [ 0, %.preheader55 ]
  %127 = icmp sgt i32 %126, 0
  %128 = load i32, ptr %7, align 4
  %129 = icmp sgt i32 %128, 0
  %or.cond71 = select i1 %127, i1 %129, i1 false
  br i1 %or.cond71, label %.preheader, label %._crit_edge58

._crit_edge61:                                    ; preds = %._crit_edge58, %.preheader55
  %130 = getelementptr inbounds i8, ptr %0, i64 112
  store i32 0, ptr %130, align 8, !tbaa !31
  call void @_ZNSt16initializer_listIP8GridCellEC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #7
  %131 = load ptr, ptr %34, align 8
  %132 = getelementptr inbounds i8, ptr %34, i64 8
  %133 = load i64, ptr %132, align 8
  %134 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorIP8GridCellSaIS1_EEaSESt16initializer_listIS1_E(ptr noundef nonnull align 8 dereferenceable(24) %39, ptr %131, i64 %133)
          to label %200 unwind label %165

135:                                              ; preds = %47, %44, %42, %4
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %207

137:                                              ; preds = %50
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %206

139:                                              ; preds = %57, %56, %55
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  br label %205

141:                                              ; preds = %58
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #7
  br label %205

143:                                              ; preds = %60
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #7
  br label %205

145:                                              ; preds = %67
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #7
  br label %205

147:                                              ; preds = %74
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %18) #7
  br label %205

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

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

153:                                              ; preds = %101, %95
  %154 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  br label %155

155:                                              ; preds = %153, %151
  %.pn = phi { ptr, i32 } [ %154, %153 ], [ %152, %151 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  br label %156

156:                                              ; preds = %155, %149
  %.pn.pn = phi { ptr, i32 } [ %.pn, %155 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  br label %204

157:                                              ; preds = %107, %106, %105
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %24) #7
  br label %203

159:                                              ; preds = %109, %108
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %28) #7
  br label %202

161:                                              ; preds = %112, %110
  %162 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %30) #7
  br label %201

163:                                              ; preds = %115, %114, %113
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %31) #7
  br label %201

165:                                              ; preds = %._crit_edge61, %116
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %201

.preheader:                                       ; preds = %.preheader54, %._crit_edge
  %167 = phi i32 [ %175, %._crit_edge ], [ %125, %.preheader54 ]
  %168 = phi i32 [ %176, %._crit_edge ], [ %128, %.preheader54 ]
  %.03157 = phi i32 [ %177, %._crit_edge ], [ 0, %.preheader54 ]
  %169 = icmp sgt i32 %168, 0
  br i1 %169, label %.lr.ph, label %._crit_edge

._crit_edge58.loopexit:                           ; preds = %._crit_edge
  %.pre65 = load i32, ptr %5, align 4, !tbaa !27
  br label %._crit_edge58

._crit_edge58:                                    ; preds = %._crit_edge58.loopexit, %.preheader54
  %170 = phi i32 [ %.pre65, %._crit_edge58.loopexit ], [ %124, %.preheader54 ]
  %171 = phi i32 [ %175, %._crit_edge58.loopexit ], [ %125, %.preheader54 ]
  %172 = phi i32 [ %175, %._crit_edge58.loopexit ], [ %126, %.preheader54 ]
  %173 = add nuw nsw i32 %.03259, 1
  %174 = icmp slt i32 %173, %170
  br i1 %174, label %.preheader54, label %._crit_edge61, !llvm.loop !32

._crit_edge.loopexit:                             ; preds = %181
  %.pre = load i32, ptr %6, align 4, !tbaa !27
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %175 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %167, %.preheader ]
  %176 = phi i32 [ %194, %._crit_edge.loopexit ], [ %168, %.preheader ]
  %177 = add nuw nsw i32 %.03157, 1
  %178 = icmp slt i32 %177, %175
  br i1 %178, label %.preheader, label %._crit_edge58.loopexit, !llvm.loop !35

.lr.ph:                                           ; preds = %.preheader, %181
  %.03056 = phi i32 [ %193, %181 ], [ 0, %.preheader ]
  %179 = invoke noalias noundef nonnull dereferenceable(168) ptr @_Znwm(i64 noundef 168) #8
          to label %180 unwind label %196

180:                                              ; preds = %.lr.ph
  invoke void @_ZN8GridCellC1Ev(ptr noundef nonnull align 8 dereferenceable(168) %179)
          to label %181 unwind label %198

181:                                              ; preds = %180
  %182 = getelementptr inbounds i8, ptr %179, i64 4
  store i32 %.03259, ptr %182, align 4, !tbaa !36
  %183 = getelementptr inbounds i8, ptr %179, i64 8
  store i32 %.03157, ptr %183, align 8, !tbaa !47
  %184 = getelementptr inbounds i8, ptr %179, i64 12
  store i32 %.03056, ptr %184, align 4, !tbaa !48
  %185 = load i32, ptr %6, align 4, !tbaa !27
  %186 = mul nsw i32 %185, %.03259
  %187 = load i32, ptr %7, align 4, !tbaa !27
  %188 = add i32 %186, %.03157
  %189 = mul i32 %188, %187
  %190 = add nsw i32 %189, %.03056
  %191 = sext i32 %190 to i64
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP8GridCellSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %38, i64 noundef %191) #7
  store ptr %179, ptr %192, align 8, !tbaa !49
  %193 = add nuw nsw i32 %.03056, 1
  %194 = load i32, ptr %7, align 4, !tbaa !27
  %195 = icmp slt i32 %193, %194
  br i1 %195, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !50

196:                                              ; preds = %.lr.ph
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %201

198:                                              ; preds = %180
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %179, i64 noundef 168) #9
  br label %201

200:                                              ; preds = %._crit_edge61
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  ret void

201:                                              ; preds = %196, %198, %165, %163, %161
  %.pn45.pn = phi { ptr, i32 } [ %166, %165 ], [ %164, %163 ], [ %162, %161 ], [ %199, %198 ], [ %197, %196 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %29) #7
  br label %202

202:                                              ; preds = %201, %159
  %.pn45.pn.pn = phi { ptr, i32 } [ %.pn45.pn, %201 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %27) #7
  br label %203

203:                                              ; preds = %202, %157
  %.pn45.pn.pn.pn = phi { ptr, i32 } [ %.pn45.pn.pn, %202 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %23) #7
  br label %204

204:                                              ; preds = %203, %156
  %.pn45.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn45.pn.pn.pn, %203 ], [ %.pn.pn, %156 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %19) #7
  br label %205

205:                                              ; preds = %204, %147, %145, %143, %141, %139
  %.pn45.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn45.pn.pn.pn.pn, %204 ], [ %148, %147 ], [ %146, %145 ], [ %144, %143 ], [ %142, %141 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %9) #7
  br label %206

206:                                              ; preds = %205, %137
  %.pn45.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn45.pn.pn.pn.pn.pn, %205 ], [ %138, %137 ]
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  br label %207

207:                                              ; preds = %206, %135
  %.pn45.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn45.pn.pn.pn.pn.pn.pn, %206 ], [ %136, %135 ]
  call void @_ZNSt6vectorIP8GridCellSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #7
  call void @_ZNSt6vectorIP8GridCellSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #7
  resume { ptr, i32 } %.pn45.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Bounds3C2Ev(ptr noundef nonnull align 4 dereferenceable(24)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2Ev(ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEaSERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi0EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK7Bounds38DiagonalEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::Matrix") align 4, ptr noundef nonnull align 4 dereferenceable(24)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseProductINS_12CwiseUnaryOpINS_8internal17scalar_inverse_opIfEEKS2_EEEEKNS_13CwiseBinaryOpINS6_17scalar_product_opIfNS6_6traitsIT_E6ScalarEEES9_KSE_EERKNS0_ISE_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEE12cwiseInverseEv(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseUnaryOp") align 8, ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKS1_KNS_12CwiseUnaryOpINS4_17scalar_inverse_opIfEES7_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) 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) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1xEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1yEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN5Eigen15DenseCoeffsBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEELi1EE1zEv(ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEC2ERKiS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKfS3_S3_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5EigenmlIdEEKNS_13CwiseBinaryOpINS_8internal17scalar_product_opINS2_18promote_scalar_argIfT_Xsr5Eigen8internal14has_ReturnTypeINS_20ScalarBinaryOpTraitsIS5_fNS3_IS5_fEEEEEE5valueEE4typeEfEEKNS2_19plain_constant_typeINS1_INS2_20scalar_difference_opIffEEKNS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEESH_EESA_E4typeEKSI_EERKS5_RKNS_10MatrixBaseISI_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.32") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEmiIS2_EEKNS_13CwiseBinaryOpINS_8internal20scalar_difference_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.42") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal17scalar_product_opIffEEKNS_14CwiseNullaryOpINS4_18scalar_constant_opIfEEKS1_EEKNS3_INS4_20scalar_difference_opIffEESA_SA_EEEEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal20scalar_difference_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK5Eigen10MatrixBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEplIS2_EEKNS_13CwiseBinaryOpINS_8internal13scalar_sum_opIfNS6_6traitsIT_E6ScalarEEEKS2_KS9_EERKNS0_IS9_EE(ptr dead_on_unwind noalias writable sret(%"class.Eigen::CwiseBinaryOp.50") align 8, ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2INS_13CwiseBinaryOpINS_8internal13scalar_sum_opIffEEKS1_S7_EEEERKNS_9EigenBaseIT_EE(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEC2ERKS1_(ptr noundef nonnull align 4 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(12)) unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Bounds3C2EN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEES2_(ptr noundef nonnull align 4 dereferenceable(24), ptr noundef, ptr noundef) unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIP8GridCellSaIS1_EE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

declare void @_ZN8GridCellC1Ev(ptr) local_unnamed_addr

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !18, i64 72}
!6 = !{!"_ZTS8GridMesh", !7, i64 0, !7, i64 24, !14, i64 48, !8, i64 60, !18, i64 72, !19, i64 80, !20, i64 84, !21, i64 88, !20, i64 112, !21, i64 120}
!7 = !{!"_ZTS7Bounds3", !8, i64 0, !8, i64 12}
!8 = !{!"_ZTSN5Eigen6MatrixIfLi3ELi1ELi0ELi3ELi1EEE", !9, i64 0}
!9 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIfLi3ELi1ELi0ELi3ELi1EEEEE", !10, i64 0}
!10 = !{!"_ZTSN5Eigen12DenseStorageIfLi3ELi3ELi1ELi0EEE", !11, i64 0}
!11 = !{!"_ZTSN5Eigen8internal11plain_arrayIfLi3ELi0ELi0EEE", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSN5Eigen6MatrixIiLi3ELi1ELi0ELi3ELi1EEE", !15, i64 0}
!15 = !{!"_ZTSN5Eigen15PlainObjectBaseINS_6MatrixIiLi3ELi1ELi0ELi3ELi1EEEEE", !16, i64 0}
!16 = !{!"_ZTSN5Eigen12DenseStorageIiLi3ELi3ELi1ELi0EEE", !17, i64 0}
!17 = !{!"_ZTSN5Eigen8internal11plain_arrayIiLi3ELi0ELi0EEE", !12, i64 0}
!18 = !{!"any pointer", !12, i64 0}
!19 = !{!"float", !12, i64 0}
!20 = !{!"int", !12, i64 0}
!21 = !{!"_ZTSSt6vectorIP8GridCellSaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIP8GridCellSaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIP8GridCellSaIS1_EE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIP8GridCellSaIS1_EE17_Vector_impl_dataE", !18, i64 0, !18, i64 8, !18, i64 16}
!25 = !{!19, !19, i64 0}
!26 = !{!6, !19, i64 80}
!27 = !{!20, !20, i64 0}
!28 = !{!6, !20, i64 84}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !12, i64 0}
!31 = !{!6, !20, i64 112}
!32 = distinct !{!32, !33, !34}
!33 = !{!"llvm.loop.mustprogress"}
!34 = !{!"llvm.loop.unswitch.partial.disable"}
!35 = distinct !{!35, !33, !34}
!36 = !{!37, !20, i64 4}
!37 = !{!"_ZTS8GridCell", !38, i64 0, !20, i64 4, !20, i64 8, !20, i64 12, !19, i64 16, !8, i64 20, !8, i64 32, !8, i64 44, !39, i64 56, !43, i64 80, !8, i64 104, !8, i64 116, !8, i64 128, !8, i64 140, !8, i64 152, !19, i64 164}
!38 = !{!"bool", !12, i64 0}
!39 = !{!"_ZTSSt6vectorIP12SnowParticleSaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIP12SnowParticleSaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIP12SnowParticleSaIS1_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIP12SnowParticleSaIS1_EE17_Vector_impl_dataE", !18, i64 0, !18, i64 8, !18, i64 16}
!43 = !{!"_ZTSSt6vectorIiSaIiEE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !18, i64 0, !18, i64 8, !18, i64 16}
!47 = !{!37, !20, i64 8}
!48 = !{!37, !20, i64 12}
!49 = !{!18, !18, i64 0}
!50 = distinct !{!50, !33}


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