EnzymeAD / Enzyme

High-performance automatic differentiation of LLVM and MLIR.
https://enzyme.mit.edu
Other
1.25k stars 104 forks source link

void TypeTree::CanonicalizeInPlace(size_t, const llvm::DataLayout &): Assertion `(size_t )pair.first[0] < len' failed. #782

Closed ZuseZ4 closed 2 years ago

ZuseZ4 commented 2 years ago

While trying to re(pro)duce another cannot deal with ptr that isn't arg issue for OpenLB I ran into this assertion (using undef-fn-inactive, strict-aliasing=0, release-ta). How interesting is this to minimize, compared to the other bugs? I only ran into it after trying to reproduce the ptr issue on a smaller example based on the ir generated by --print-before=enzyme

wsmoses commented 2 years ago

This would definitely be good to minimize.

ZuseZ4 commented 2 years ago

wip

    1 double Callable5() {                                                                                                                                                                             
    1   utilities::TypeIndexedTuple<Params_TfOptiAd<double>> params;                                                                                                 
    2   auto result = std::make_shared<TestFlowSolverOptiAD<double>>(params);                           
    4   return 42.0;                                                                                                                                                     
    5 }
enzyme-strict-aliasing=0 -enzyme-loose-types=1  -enzyme-emptyfn-inactive=X

X=1 results in the len failure, X=0 in the cannot deal with ptr issue.

ZuseZ4 commented 2 years ago

wip

%"class.std::_Sp_counted_base" = type { i32 (...)**, i32, i32 }

; Function Attrs: uwtable
define internal noundef double @_Z9Callable5v() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
bb:
  %i4 = call i8* @_Znwm(i64 noundef 1032) #46
  %i6 = bitcast i8* %i4 to i32 (...)***
  %i7 = getelementptr inbounds i8, i8* %i4, i64 8
  %i8 = bitcast i8* %i7 to i32*
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8, !tbaa !924, !noalias !1037
  %i11 = getelementptr inbounds i8, i8* %i4, i64 16
  %i16 = bitcast i8* %i4 to %"class.std::_Sp_counted_base"*
  %i28 = bitcast i8* %i4 to void (%"class.std::_Sp_counted_base"*)***
  %i29 = load void (%"class.std::_Sp_counted_base"*)**, void (%"class.std::_Sp_counted_base"*)*** %i28, align 8, !tbaa !924
  %i30 = getelementptr inbounds void (%"class.std::_Sp_counted_base"*)*, void (%"class.std::_Sp_counted_base"*)** %i29, i64 2
  %i31 = load void (%"class.std::_Sp_counted_base"*)*, void (%"class.std::_Sp_counted_base"*)** %i30, align 8
  call void %i31(%"class.std::_Sp_counted_base"* noundef nonnull align 8 dereferenceable(16) %i16) #41
  ret double 4.200000e+01
}

 declare dso_local noundef double @_Z17__enzyme_autodiffPv(i8* noundef)

; Function Attrs: uwtable
 define internal void @_Z19testSensitivitiesADv() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
   %i1 = call noundef double @_Z17__enzyme_autodiffPv(i8* noundef bitcast (double ()* @_Z9Callable5v to i8*))
   ret void
}
ZuseZ4 commented 2 years ago

llvm-extract failed to extract _ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, at least it wouldn't fail anymore, so I had to go for llvm-reduce. Unfortunately it only fails locally with opt-14.0.4 and works on the compiler explorer

target triple = "x86_64-unknown-linux-gnu"

%"class.std::_Sp_counted_base" = type { i32 (...)**, i32, i32 }
%"class.olb::LBSolver" = type { %"class.olb::BaseSolver.base", %"class.olb::OstreamManager", %"class.std::shared_ptr.260", %"class.std::shared_ptr.263", %"class.std::shared_ptr.266", %"class.std::tuple.269", %"class.std::unique_ptr.275", %"struct.std::_Rb_tree_key_compare", i8, double }
%"class.olb::BaseSolver.base" = type <{ i32 (...)**, %"class.olb::OstreamManager", %"struct.olb::utilities::TypeIndexedTuple", i8, [7 x i8], i64, i8 }>
%"struct.olb::utilities::TypeIndexedTuple" = type { %"class.std::tuple.179" }
%"class.std::tuple.179" = type { %"struct.std::_Tuple_impl.180" }
%"struct.std::_Tuple_impl.180" = type { %"struct.std::_Tuple_impl.181", %"struct.std::_Head_base.196" }
%"struct.std::_Tuple_impl.181" = type { %"struct.std::_Tuple_impl.182", %"struct.std::_Head_base.192" }
%"struct.std::_Tuple_impl.182" = type { %"struct.std::_Tuple_impl.183", %"struct.std::_Head_base.188" }
%"struct.std::_Tuple_impl.183" = type { %"struct.std::_Head_base.184" }
%"struct.std::_Head_base.184" = type { %"class.std::shared_ptr.185" }
%"class.std::shared_ptr.185" = type { %"class.std::__shared_ptr.186" }
%"class.std::__shared_ptr.186" = type { %"struct.olb::parameters::XmlSimulation"*, %"class.std::__shared_count" }
%"struct.olb::parameters::XmlSimulation" = type { %"struct.olb::parameters::SimulationBase.base", %"class.olb::XMLreader"*, %"class.std::shared_ptr.364" }
%"struct.olb::parameters::SimulationBase.base" = type <{ %"class.std::basic_ostream.base", double, double, double, i8, [3 x i8], i32, i32 }>
%"class.std::basic_ostream.base" = type { i32 (...)** }
%"class.olb::XMLreader" = type { i8, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.olb::OstreamManager", %"class.std::map", %"class.std::vector" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { i8* }
%union.anon = type { i64, [8 x i8] }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl_data" = type { %"class.olb::XMLreader"**, %"class.olb::XMLreader"**, %"class.olb::XMLreader"** }
%"class.std::shared_ptr.364" = type { %"class.std::__shared_ptr.365" }
%"class.std::__shared_ptr.365" = type { %"class.olb::UnitConverter"*, %"class.std::__shared_count" }
%"class.olb::UnitConverter" = type { %"class.std::basic_ostream.base", double, double, double, double, double, double, double, double, double, double, double, double, double, i64, double, double, %"class.olb::OstreamManager" }
%"class.std::__shared_count" = type { %"class.std::_Sp_counted_base"* }
%"struct.std::_Head_base.188" = type { %"class.std::shared_ptr.189" }
%"class.std::shared_ptr.189" = type { %"class.std::__shared_ptr.190" }
%"class.std::__shared_ptr.190" = type { %"struct.olb::parameters::DirectOptiResults"*, %"class.std::__shared_count" }
%"struct.olb::parameters::DirectOptiResults" = type { %"struct.olb::parameters::OptiResultsBase", double }
%"struct.olb::parameters::OptiResultsBase" = type { %"class.std::basic_ostream.base" }
%"struct.std::_Head_base.192" = type { %"class.std::shared_ptr.193" }
%"class.std::shared_ptr.193" = type { %"class.std::__shared_ptr.194" }
%"class.std::__shared_ptr.194" = type { %"struct.olb::parameters::OutputBase"*, %"class.std::__shared_count" }
%"struct.olb::parameters::OutputBase" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, double, i32, i8, %"class.std::__cxx11::basic_string", double, i8, %"class.std::__cxx11::basic_string", double, i8, %"class.std::__cxx11::basic_string", double }
%"struct.std::_Head_base.196" = type { %"class.std::shared_ptr.197" }
%"class.std::shared_ptr.197" = type { %"class.std::__shared_ptr.198" }
%"class.std::__shared_ptr.198" = type { %struct.TestFlowDirectOpti*, %"class.std::__shared_count" }
%struct.TestFlowDirectOpti = type { %"struct.olb::parameters::DirectOptiSimulation", %"class.olb::Vector.87", i32, i32 }
%"struct.olb::parameters::DirectOptiSimulation" = type { %"struct.olb::parameters::OptiResultsBase" }
%"class.olb::Vector.87" = type { %"struct.std::array.91" }
%"struct.std::array.91" = type { [3 x double] }
%"class.olb::OstreamManager" = type { %"class.std::basic_ostream.base", %"class.olb::OMBuf", %"class.std::basic_ios" }
%"class.olb::OMBuf" = type { %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ostream"*, %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type <{ i32 (...)**, i32, [4 x i8] }>
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_put"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::ctype" = type <{ %"class.std::locale::facet.base", [4 x i8], %struct.__locale_struct*, i8, [7 x i8], i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
%"class.std::locale::facet.base" = type <{ i32 (...)**, i32 }>
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { %"class.std::locale::facet.base", [4 x i8] }
%"class.std::shared_ptr.260" = type { %"class.std::__shared_ptr.261" }
%"class.std::__shared_ptr.261" = type { %"class.olb::SuperGeometry"*, %"class.std::__shared_count" }
%"class.olb::SuperGeometry" = type { %"class.olb::SuperStructure", %"class.std::vector.60", %"class.std::unique_ptr.66", i8, %"class.olb::SuperGeometryStatistics3D", %"class.olb::OstreamManager" }
%"class.olb::SuperStructure" = type { i32 (...)**, %"class.olb::CuboidGeometry3D"*, %"class.olb::LoadBalancer"*, i32, %"class.olb::OstreamManager" }
%"class.olb::CuboidGeometry3D" = type { %"class.olb::BufferSerializable", %"class.std::vector.55", %"class.olb::Cuboid3D", %"class.olb::Vector", %"class.olb::OstreamManager" }
%"class.olb::BufferSerializable" = type { %"class.std::basic_ostream.base", %"class.std::vector.45", %"class.std::vector.50" }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = type { %"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl" }
%"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl" = type { %"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl_data" = type { i8**, i8**, i8** }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { i64*, i64*, i64* }
%"class.std::vector.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = type { %"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl_data" = type { %"class.olb::Cuboid3D"*, %"class.olb::Cuboid3D"*, %"class.olb::Cuboid3D"* }
%"class.olb::Cuboid3D" = type { %"class.std::basic_ostream.base", double, double, double, double, i32, i32, i32, i64, i32, %"class.olb::OstreamManager" }
%"class.olb::Vector" = type { %"struct.std::array" }
%"struct.std::array" = type { [3 x i8] }
%"class.olb::LoadBalancer" = type { %"class.olb::BufferSerializable", i32, %"class.std::map", %"class.std::vector.141", %"class.std::map" }
%"class.std::vector.141" = type { %"struct.std::_Vector_base.142" }
%"struct.std::_Vector_base.142" = 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 { i32*, i32*, i32* }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"* }
%"class.std::unique_ptr.65" = type { %"struct.std::__uniq_ptr_data.203" }
%"struct.std::__uniq_ptr_data.203" = type { %"class.std::__uniq_ptr_impl.204" }
%"class.std::__uniq_ptr_impl.204" = type { %"class.std::tuple.205" }
%"class.std::tuple.205" = type { %"struct.std::_Tuple_impl.206" }
%"struct.std::_Tuple_impl.206" = type { %"struct.std::_Head_base.209" }
%"struct.std::_Head_base.209" = type { %"class.olb::BlockGeometry"* }
%"class.olb::BlockGeometry" = type { %"class.std::basic_ostream.base", %"class.olb::BlockStructureD", %"class.olb::MultiFieldArrayD", %"class.olb::Cuboid3D", i32, %"class.olb::BlockGeometryStatistics3D", %"class.olb::OstreamManager", %"class.std::__cxx11::list.255" }
%"class.olb::BlockStructureD" = type { %"class.olb::Vector.210", %"class.olb::Vector.210", %"class.olb::Vector.210", i32 }
%"class.olb::Vector.210" = type { %"struct.std::array.214" }
%"struct.std::array.214" = type { [3 x i32] }
%"class.olb::MultiFieldArrayD" = type { %"class.std::basic_ostream.base", i64, %"class.std::tuple.215", %"class.std::map", %"class.olb::utilities::TypeIndexedMap", %"class.std::map", %"class.std::map" }
%"class.std::tuple.215" = type { %"struct.std::_Tuple_impl.216" }
%"struct.std::_Tuple_impl.216" = type { %"struct.std::_Head_base.217" }
%"struct.std::_Head_base.217" = type { %"class.olb::FieldArrayD" }
%"class.olb::FieldArrayD" = type { %"class.olb::ColumnVector", %"class.std::basic_ostream.base" }
%"class.olb::ColumnVector" = type { %"struct.olb::ColumnVectorBase", i64, %"struct.std::array.218" }
%"struct.olb::ColumnVectorBase" = type { %"class.std::basic_ostream.base", %"class.std::basic_ostream.base" }
%"struct.std::array.218" = type { [1 x %"class.olb::cpu::sisd::Column"] }
%"class.olb::cpu::sisd::Column" = type { %"class.std::basic_ostream.base", %"class.std::basic_ostream.base", %"class.std::basic_ostream.base", i64, %"class.std::unique_ptr.219" }
%"class.std::unique_ptr.219" = type { %"struct.std::__uniq_ptr_data.220" }
%"struct.std::__uniq_ptr_data.220" = type { %"class.std::__uniq_ptr_impl.221" }
%"class.std::__uniq_ptr_impl.221" = type { %"class.std::tuple.222" }
%"class.std::tuple.222" = type { %"struct.std::_Tuple_impl.223" }
%"struct.std::_Tuple_impl.223" = type { %"struct.std::_Head_base.226" }
%"struct.std::_Head_base.226" = type { i32* }
%"class.olb::utilities::TypeIndexedMap" = type { %"class.std::vector.235" }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl_data" = type { %"class.std::optional"*, %"class.std::optional"*, %"class.std::optional"* }
%"class.std::optional" = type opaque
%"class.olb::BlockGeometryStatistics3D" = type { %"class.olb::BlockGeometry"*, i8, i32, i32, i32, double, i32, %"class.std::map", %"class.std::map", %"class.std::map", %"class.olb::OstreamManager", %"class.olb::BlockGeometryStatistics3D"* }
%"class.std::__cxx11::list.255" = type { %"class.std::__cxx11::_List_base.256" }
%"class.std::__cxx11::_List_base.256" = type { %"struct.std::__cxx11::_List_base<bool *, std::allocator<bool *>>::_List_impl" }
%"struct.std::__cxx11::_List_base<bool *, std::allocator<bool *>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { %"struct.std::__detail::_List_node_base"*, %"struct.std::__detail::_List_node_base"* }
%"class.std::unique_ptr.66" = type { %"struct.std::__uniq_ptr_data.67" }
%"struct.std::__uniq_ptr_data.67" = type { %"class.std::__uniq_ptr_impl.68" }
%"class.std::__uniq_ptr_impl.68" = type { %"class.std::tuple.69" }
%"class.std::tuple.69" = type { %"struct.std::_Tuple_impl.70" }
%"struct.std::_Tuple_impl.70" = type { %"struct.std::_Head_base.73" }
%"struct.std::_Head_base.73" = type { %"class.olb::SuperCommunicator"* }
%"class.olb::SuperCommunicator" = type <{ %"class.olb::SuperGeometry"*, %"class.std::vector.284", %"class.std::vector.289", %"class.std::vector.18", %"class.std::map", i8, i8, [6 x i8] }>
%"class.std::vector.284" = type { %"struct.std::_Vector_base.285" }
%"struct.std::_Vector_base.285" = type { %"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicationNeighborhood"*, %"class.olb::BlockCommunicationNeighborhood"*, %"class.olb::BlockCommunicationNeighborhood"* }
%"class.olb::BlockCommunicationNeighborhood" = type { %"class.olb::CuboidGeometry3D"*, %"class.olb::LoadBalancer"*, i32, i32, %"class.std::vector.18", %"class.std::unique_ptr.321", %"class.std::map", %"class.std::map", %"class.std::map", %"class.std::map" }
%"class.std::unique_ptr.321" = type { %"struct.std::__uniq_ptr_data.322" }
%"struct.std::__uniq_ptr_data.322" = type { %"class.std::__uniq_ptr_impl.323" }
%"class.std::__uniq_ptr_impl.323" = type { %"class.std::tuple.324" }
%"class.std::tuple.324" = type { %"struct.std::_Tuple_impl.325" }
%"struct.std::_Tuple_impl.325" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider" }
%"class.std::vector.289" = type { %"struct.std::_Vector_base.290" }
%"struct.std::_Vector_base.290" = type { %"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicator"*, %"class.olb::BlockCommunicator"*, %"class.olb::BlockCommunicator"* }
%"class.olb::BlockCommunicator" = type { i32, %"class.std::vector.13" }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicator::CopyTask"*, %"class.olb::BlockCommunicator::CopyTask"*, %"class.olb::BlockCommunicator::CopyTask"* }
%"class.olb::BlockCommunicator::CopyTask" = type { %"class.std::vector.18"*, %"class.std::vector.141"*, %"class.std::vector.141"*, %"class.std::basic_ostream.base"*, %"class.std::basic_ostream.base"*, %"class.std::unique_ptr.321" }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl" }
%"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl_data" = type { %"struct.std::type_index"*, %"struct.std::type_index"*, %"struct.std::type_index"* }
%"struct.std::type_index" = type { %"class.std::type_info"* }
%"class.std::type_info" = type { i32 (...)**, i8* }
%"class.olb::SuperGeometryStatistics3D" = type { %"class.olb::SuperGeometry"*, i8, i32, %"class.std::map", %"class.std::map", %"class.std::map", %"class.olb::Vector.87", %"class.olb::Vector.87", %"class.olb::OstreamManager", %"class.olb::SuperGeometryStatistics3D"* }
%"class.std::shared_ptr.263" = type { %"class.std::__shared_ptr.264" }
%"class.std::__shared_ptr.264" = type { %"class.olb::CuboidGeometry3D"*, %"class.std::__shared_count" }
%"class.std::shared_ptr.266" = type { %"class.std::__shared_ptr.267" }
%"class.std::__shared_ptr.267" = type { %"class.olb::LoadBalancer"*, %"class.std::__shared_count" }
%"class.std::tuple.269" = type { %"struct.std::_Tuple_impl.270" }
%"struct.std::_Tuple_impl.270" = type { %"struct.std::_Head_base.271" }
%"struct.std::_Head_base.271" = type { %"class.std::shared_ptr.272" }
%"class.std::shared_ptr.272" = type { %"class.std::__shared_ptr.273" }
%"class.std::__shared_ptr.273" = type { %"class.olb::SuperLattice"*, %"class.std::__shared_count" }
%"class.olb::SuperLattice" = type <{ %"class.olb::SuperStructure", %"class.olb::BufferSerializable", %"class.std::vector.294", %"struct.std::array.300", %"class.std::map", i8, [7 x i8], %"class.std::__cxx11::list.255", %"class.olb::LatticeStatistics", i8, [7 x i8] }>
%"class.std::vector.294" = type { %"struct.std::_Vector_base.295" }
%"struct.std::_Vector_base.295" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.299"*, %"class.std::unique_ptr.299"*, %"class.std::unique_ptr.299"* }
%"class.std::unique_ptr.299" = type { %"struct.std::__uniq_ptr_data.339" }
%"struct.std::__uniq_ptr_data.339" = type { %"class.std::__uniq_ptr_impl.340" }
%"class.std::__uniq_ptr_impl.340" = type { %"class.std::tuple.341" }
%"class.std::tuple.341" = type { %"struct.std::_Tuple_impl.342" }
%"struct.std::_Tuple_impl.342" = type { %"struct.std::_Head_base.345" }
%"struct.std::_Head_base.345" = type { %"class.olb::BlockLattice"* }
%"class.olb::BlockLattice" = type { %"class.std::basic_ostream.base", %"class.olb::BlockStructureD", %"class.std::basic_ostream.base", i32, %"class.std::map", %"class.std::vector.351", %"class.olb::LatticeStatistics"* }
%"class.std::vector.351" = type { %"struct.std::_Vector_base.352" }
%"struct.std::_Vector_base.352" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.356"*, %"class.std::unique_ptr.356"*, %"class.std::unique_ptr.356"* }
%"class.std::unique_ptr.356" = type { %"struct.std::__uniq_ptr_data.357" }
%"struct.std::__uniq_ptr_data.357" = type { %"class.std::__uniq_ptr_impl.358" }
%"class.std::__uniq_ptr_impl.358" = type { %"class.std::tuple.359" }
%"class.std::tuple.359" = type { %"struct.std::_Tuple_impl.360" }
%"struct.std::_Tuple_impl.360" = type { %"struct.std::_Head_base.363" }
%"struct.std::_Head_base.363" = type { %"class.olb::PostProcessor3D"* }
%"class.olb::PostProcessor3D" = type { i32 (...)**, i32, %"class.std::__cxx11::basic_string" }
%"struct.std::array.300" = type { [7 x %"class.std::unique_ptr.301"] }
%"class.std::unique_ptr.301" = type { %"struct.std::__uniq_ptr_data.302" }
%"struct.std::__uniq_ptr_data.302" = type { %"class.std::__uniq_ptr_impl.303" }
%"class.std::__uniq_ptr_impl.303" = type { %"class.std::tuple.304" }
%"class.std::tuple.304" = type { %"struct.std::_Tuple_impl.305" }
%"struct.std::_Tuple_impl.305" = type { %"struct.std::_Head_base.308" }
%"struct.std::_Head_base.308" = type { %"class.olb::SuperCommunicator.309"* }
%"class.olb::SuperCommunicator.309" = type <{ %"class.olb::SuperLattice"*, %"class.std::vector.284", %"class.std::vector.289", %"class.std::vector.18", %"class.std::map", i8, i8, [6 x i8] }>
%"class.olb::LatticeStatistics" = type <{ i32, i32, %"class.olb::OstreamManager", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", i64, %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", i64, i64, i8, [7 x i8] }>
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { double*, double*, double* }
%"class.std::unique_ptr.275" = type { %"struct.std::__uniq_ptr_data.276" }
%"struct.std::__uniq_ptr_data.276" = type { %"class.std::__uniq_ptr_impl.277" }
%"class.std::__uniq_ptr_impl.277" = type { %"class.std::tuple.278" }
%"class.std::tuple.278" = type { %"struct.std::_Tuple_impl.279" }
%"struct.std::_Tuple_impl.279" = type { %"struct.std::_Head_base.282" }
%"struct.std::_Head_base.282" = type { %"class.olb::util::Timer"* }
%"class.olb::util::Timer" = type { %"class.olb::OstreamManager", double, double, double, i64, i64, i64, i64*, %struct.timeval, %struct.timeval, %struct.timeval, %struct.timeval, double, i32, i32, i64, i32, i32, i32, double, double, double, double, double, double, double, double, double }
%struct.timeval = type { i64, i64 }
%"struct.std::_Rb_tree_key_compare" = type { %"class.std::ios_base::Init" }
%"class.std::ios_base::Init" = type { i8 }
%class.anon.450 = type { %"class.olb::BlockGeometry"*, i32*, i32* }
%"class.std::_Sp_counted_ptr_inplace" = type { %"class.std::_Sp_counted_base", %"class.std::_Sp_counted_ptr_inplace<TestFlowSolverOptiAD<double>, std::allocator<TestFlowSolverOptiAD<double>>, __gnu_cxx::_S_atomic>::_Impl" }
%"class.std::_Sp_counted_ptr_inplace<TestFlowSolverOptiAD<double>, std::allocator<TestFlowSolverOptiAD<double>>, __gnu_cxx::_S_atomic>::_Impl" = type { %"struct.__gnu_cxx::__aligned_buffer" }
%"struct.__gnu_cxx::__aligned_buffer" = type { %"union.std::aligned_storage<1016, 8>::type" }
%"union.std::aligned_storage<1016, 8>::type" = type { [1016 x i8] }

$_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv = comdat any

$_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv = comdat any

$_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_ED2Ev = comdat any

$_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = comdat any

$_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = comdat any

@_ZTVN3olb5OMBufE = external dso_local constant { [16 x i8*] }
@_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat
@_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat

declare void @_ZNSt6localeD1Ev()

declare void @_ZNSt8ios_baseD2Ev()

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #0

; Function Attrs: argmemonly nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #1

declare void @_ZN3olb14OstreamManagerC1ERSoNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE()

; Function Attrs: argmemonly nofree nounwind willreturn writeonly
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #2

declare i8* @_Znwm(i64)

declare double @_Z17__enzyme_autodiffPv(i8*)

define internal void @_Z19testSensitivitiesADv() personality i8* undef {
  %i1 = call double @_Z17__enzyme_autodiffPv(i8* bitcast (double ()* @_Z9Callable5v to i8*))
  ret void
}

define internal double @_Z9Callable5v() personality i8* undef {
bb:
  %i4 = call i8* @_Znwm(i64 0)
  %i6 = bitcast i8* %i4 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8
  %i16 = bitcast i8* %i4 to %"class.std::_Sp_counted_base"*
  %i28 = bitcast i8* %i4 to void (%"class.std::_Sp_counted_base"*)***
  %i29 = load void (%"class.std::_Sp_counted_base"*)**, void (%"class.std::_Sp_counted_base"*)*** %i28, align 8
  %i30 = getelementptr inbounds void (%"class.std::_Sp_counted_base"*)*, void (%"class.std::_Sp_counted_base"*)** %i29, i64 2
  %i31 = load void (%"class.std::_Sp_counted_base"*)*, void (%"class.std::_Sp_counted_base"*)** %i30, align 8
  call void %i31(%"class.std::_Sp_counted_base"* %i16)
  ret double 0.000000e+00
}

define internal void @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv(%"class.olb::LBSolver"* %arg) comdat personality i8* undef {
bb:
  br label %bb39

bb39:                                             ; preds = %bb
  %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0
  br label %bb59

bb59:                                             ; preds = %bb39
  br label %bb65

bb65:                                             ; preds = %bb59
  %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8
  %i71 = call i32 @_ZN3olb13SuperGeometryIdLj3EE10innerCleanEb(%"class.olb::SuperGeometry"* %i66)
  ret void
}

declare i32 @_ZN3olb13SuperGeometryIdLj3EE5cleanEbSt6vectorIiSaIiEE()

define internal i32 @_ZN3olb13SuperGeometryIdLj3EE10innerCleanEb(%"class.olb::SuperGeometry"* %arg) personality i32 (...)* undef {
bb:
  %i9 = getelementptr inbounds %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i32 1
  %i10 = getelementptr inbounds %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0
  %i11 = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** null, align 8
  %i12 = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** %i10, align 8
  %i13 = icmp eq %"class.std::unique_ptr.65"* null, %i12
  br i1 %i13, label %bb25, label %bb14

bb14:                                             ; preds = %bb
  br label %bb27

bb25:                                             ; preds = %bb
  ret i32 0

bb27:                                             ; preds = %bb14
  br label %bb37

bb37:                                             ; preds = %bb27
  br label %bb42

bb42:                                             ; preds = %bb37
  br label %bb44

bb44:                                             ; preds = %bb42
  br label %bb53

bb53:                                             ; preds = %bb44
  br label %bb76

bb76:                                             ; preds = %bb76, %bb53
  call void @_ZZN3olb13BlockGeometryIdLj3EE10innerCleanEbENKUlNS_6VectorIiLj3EEEE_clES3_(%class.anon.450* null, %"class.olb::Vector.210"* undef, i32* undef, %"class.olb::Vector.210"* undef, i64 undef)
  br label %bb76
}

declare i1 @_ZN3olb13SuperGeometryIdLj3EE14checkForErrorsEb()

define internal void @_ZZN3olb13BlockGeometryIdLj3EE10innerCleanEbENKUlNS_6VectorIiLj3EEEE_clES3_(%class.anon.450* %arg, %"class.olb::Vector.210"* %i6, i32* %i147, %"class.olb::Vector.210"* %i8, i64 %i151) personality i32 (...)* undef {
bb:
  %i61 = alloca %"class.olb::Vector.210", align 4
  %i82 = alloca %"class.olb::Vector.210", i32 0, align 4
  %i47 = add nuw nsw i64 1, 1
  %i48 = icmp eq i64 1, 1
  %i59 = add nuw nsw i64 0, 0
  %i60 = icmp eq i64 0, 0
  br label %bb61

bb61:                                             ; preds = %bb50
  br label %bb68

bb68:                                             ; preds = %bb61
  br label %bb78

bb78:                                             ; preds = %bb68
  br label %bb81

bb81:                                             ; preds = %bb81, %bb78
  %i823 = phi i64 [ 0, %bb81 ], [ 0, %bb78 ]
  %i86 = add nuw nsw i64 0, 0
  %i87 = icmp eq i64 0, 0
  br i1 true, label %bb88, label %bb81

bb88:                                             ; preds = %bb81
  br label %bb89

bb89:                                             ; preds = %bb89, %bb88
  %i90 = phi i64 [ 0, %bb88 ], [ 1, %bb89 ]
  %i98 = add nuw nsw i64 1, 1
  %i99 = icmp eq i64 1, 1
  br i1 true, label %bb100, label %bb89

bb100:                                            ; preds = %bb89
  br label %bb105

bb105:                                            ; preds = %bb100
  %i116 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i6, i64 0, i32 0, i32 0, i64 0
  %i117 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i6, i64 0, i32 0, i32 0, i64 3
  br label %bb130

bb130:                                            ; preds = %bb105
  br label %bb134

bb134:                                            ; preds = %bb134, %bb130
  %i135 = phi i64 [ 0, %bb130 ], [ 0, %bb134 ]
  %i141 = add nuw nsw i64 0, 0
  %i142 = icmp eq i64 0, 0
  br i1 true, label %bb143, label %bb134

bb143:                                            ; preds = %bb134
  br label %bb146

bb146:                                            ; preds = %bb146, %bb143
  %i1474 = phi i32* [ null, %bb146 ], [ null, %bb143 ]
  %i148 = getelementptr inbounds i32, i32* %i147, i64 1
  %i149 = icmp eq i32* null, null
  br i1 true, label %bb150, label %bb146, !llvm.loop !0

bb150:                                            ; preds = %bb150, %bb146
  %i1515 = phi i64 [ %i159, %bb150 ], [ 0, %bb146 ]
  %i152 = phi i1 [ %i157, %bb150 ], [ true, %bb146 ]
  %i153 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61, i64 0, i32 0, i32 0, i64 %i1515
  %i154 = load i32, i32* %i153, align 4
  %i155 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i8, i64 0, i32 0, i32 0, i64 %i151
  %i156 = load i32, i32* null, align 4
  %i157 = icmp sle i32 %i154, 0
  %i158 = and i1 %i152, %i157
  %i159 = add nuw nsw i64 %i1515, 1
  %i160 = icmp eq i64 %i1515, 3
  br i1 %i160, label %bb161, label %bb150, !llvm.loop !3

bb161:                                            ; preds = %bb150
  br i1 %i158, label %bb164, label %bb162

bb162:                                            ; preds = %bb161
  ret void

bb164:                                            ; preds = %bb164, %bb163
  br label %bb164
}

declare void @_ZN3olb10BaseSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEEED2Ev()

define internal void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %arg) comdat personality i32 (...)* undef {
bb:
  %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0
  %i1 = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to %"class.olb::LBSolver"*
  tail call void @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_ED2Ev(%"class.olb::LBSolver"* %i1)
  ret void
}

define internal void @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_ED2Ev(%"class.olb::LBSolver"* %arg) comdat personality i32 (...)* undef {
bb:
  %i = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 0, i32 0
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i, align 8
  %i1 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0
  %i2 = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %i1, align 8
  %i7 = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0
  store i32 (...)** null, i32 (...)*** %i7, align 8
  ret void
}

define i32 @main() personality i8* undef {
  call void @_Z19testSensitivitiesADv()
  ret i32 0
}

declare void @_ZN3olb7olbInitEPiPPPcbb()

attributes #0 = { argmemonly nofree nosync nounwind willreturn }
attributes #1 = { argmemonly nofree nounwind willreturn }
attributes #2 = { argmemonly nofree nounwind willreturn writeonly }

!0 = distinct !{!0, !1, !2}
!1 = !{!"llvm.loop.mustprogress"}
!2 = !{!"llvm.loop.unroll.disable"}
!3 = distinct !{!3, !1, !2}
ZuseZ4 commented 2 years ago

@wsmoses Updated the .ll above to match the code which I used to generate this:

analyzing function _Z9Callable5v
 + retdata: {}
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=1 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val: @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Anything, [-1,17]:Anything, [-1,18]:Anything, [-1,19]:Anything, [-1,20]:Anything, [-1,21]:Anything, [-1,22]:Anything, [-1,23]:Anything, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Pointer, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val: @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Anything, [-1,17]:Anything, [-1,18]:Anything, [-1,19]:Anything, [-1,20]:Anything, [-1,21]:Anything, [-1,22]:Anything, [-1,23]:Anything, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Pointer, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=1 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {} new {[-1]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val: i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=0 legal=1
 starting IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0)
analyzing function _ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv
 + knowndata: %"class.std::_Sp_counted_ptr_inplace"* %arg : {[-1]:Pointer, [-1,0]:Pointer} - {}
 + retdata: {}
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {} new {[-1]:Pointer, [-1,0]:Pointer} from %"class.std::_Sp_counted_ptr_inplace"* %arg Changed=1 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from %"class.std::_Sp_counted_ptr_inplace"* %arg Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=1 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** current: {} new {[-1]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val: @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Pointer, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Anything, [-1,33]:Anything, [-1,34]:Anything, [-1,35]:Anything, [-1,36]:Anything, [-1,37]:Anything, [-1,38]:Anything, [-1,39]:Anything, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything, [-1,56]:Anything, [-1,57]:Anything, [-1,58]:Anything, [-1,59]:Anything, [-1,60]:Anything, [-1,61]:Anything, [-1,62]:Anything, [-1,63]:Anything, [-1,64]:Anything, [-1,65]:Anything, [-1,66]:Anything, [-1,67]:Anything, [-1,68]:Anything, [-1,69]:Anything, [-1,70]:Anything, [-1,71]:Anything, [-1,72]:Anything, [-1,73]:Anything, [-1,74]:Anything, [-1,75]:Anything, [-1,76]:Anything, [-1,77]:Anything, [-1,78]:Anything, [-1,79]:Anything, [-1,80]:Anything, [-1,81]:Anything, [-1,82]:Anything, [-1,83]:Anything, [-1,84]:Anything, [-1,85]:Anything, [-1,86]:Anything, [-1,87]:Anything, [-1,88]:Anything, [-1,89]:Anything, [-1,90]:Anything, [-1,91]:Anything, [-1,92]:Anything, [-1,93]:Anything, [-1,94]:Anything, [-1,95]:Anything, [-1,96]:Anything, [-1,97]:Anything, [-1,98]:Anything, [-1,99]:Anything, [-1,100]:Anything, [-1,101]:Anything, [-1,102]:Anything, [-1,103]:Anything, [-1,104]:Anything, [-1,105]:Anything, [-1,106]:Anything, [-1,107]:Anything, [-1,108]:Anything, [-1,109]:Anything, [-1,110]:Anything, [-1,111]:Anything, [-1,112]:Anything, [-1,113]:Anything, [-1,114]:Anything, [-1,115]:Anything, [-1,116]:Anything, [-1,117]:Anything, [-1,118]:Anything, [-1,119]:Anything, [-1,120]:Anything, [-1,121]:Anything, [-1,122]:Anything, [-1,123]:Anything, [-1,124]:Anything, [-1,125]:Anything, [-1,126]:Anything, [-1,127]:Anything, [-1,128]:Anything, [-1,129]:Anything, [-1,130]:Anything, [-1,131]:Anything, [-1,132]:Anything, [-1,133]:Anything, [-1,134]:Anything, [-1,135]:Anything, [-1,136]:Anything, [-1,137]:Anything, [-1,138]:Anything, [-1,139]:Anything, [-1,140]:Anything, [-1,141]:Anything, [-1,142]:Anything, [-1,143]:Anything, [-1,144]:Anything, [-1,145]:Anything, [-1,146]:Anything, [-1,147]:Anything, [-1,148]:Anything, [-1,149]:Anything, [-1,150]:Anything, [-1,151]:Anything, [-1,152]:Anything, [-1,153]:Anything, [-1,154]:Anything, [-1,155]:Anything, [-1,156]:Anything, [-1,157]:Anything, [-1,158]:Anything, [-1,159]:Anything, [-1,160]:Anything, [-1,161]:Anything, [-1,162]:Anything, [-1,163]:Anything, [-1,164]:Anything, [-1,165]:Anything, [-1,166]:Anything, [-1,167]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val: @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Pointer, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Anything, [-1,33]:Anything, [-1,34]:Anything, [-1,35]:Anything, [-1,36]:Anything, [-1,37]:Anything, [-1,38]:Anything, [-1,39]:Anything, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything, [-1,56]:Anything, [-1,57]:Anything, [-1,58]:Anything, [-1,59]:Anything, [-1,60]:Anything, [-1,61]:Anything, [-1,62]:Anything, [-1,63]:Anything, [-1,64]:Anything, [-1,65]:Anything, [-1,66]:Anything, [-1,67]:Anything, [-1,68]:Anything, [-1,69]:Anything, [-1,70]:Anything, [-1,71]:Anything, [-1,72]:Anything, [-1,73]:Anything, [-1,74]:Anything, [-1,75]:Anything, [-1,76]:Anything, [-1,77]:Anything, [-1,78]:Anything, [-1,79]:Anything, [-1,80]:Anything, [-1,81]:Anything, [-1,82]:Anything, [-1,83]:Anything, [-1,84]:Anything, [-1,85]:Anything, [-1,86]:Anything, [-1,87]:Anything, [-1,88]:Anything, [-1,89]:Anything, [-1,90]:Anything, [-1,91]:Anything, [-1,92]:Anything, [-1,93]:Anything, [-1,94]:Anything, [-1,95]:Anything, [-1,96]:Anything, [-1,97]:Anything, [-1,98]:Anything, [-1,99]:Anything, [-1,100]:Anything, [-1,101]:Anything, [-1,102]:Anything, [-1,103]:Anything, [-1,104]:Anything, [-1,105]:Anything, [-1,106]:Anything, [-1,107]:Anything, [-1,108]:Anything, [-1,109]:Anything, [-1,110]:Anything, [-1,111]:Anything, [-1,112]:Anything, [-1,113]:Anything, [-1,114]:Anything, [-1,115]:Anything, [-1,116]:Anything, [-1,117]:Anything, [-1,118]:Anything, [-1,119]:Anything, [-1,120]:Anything, [-1,121]:Anything, [-1,122]:Anything, [-1,123]:Anything, [-1,124]:Anything, [-1,125]:Anything, [-1,126]:Anything, [-1,127]:Anything, [-1,128]:Anything, [-1,129]:Anything, [-1,130]:Anything, [-1,131]:Anything, [-1,132]:Anything, [-1,133]:Anything, [-1,134]:Anything, [-1,135]:Anything, [-1,136]:Anything, [-1,137]:Anything, [-1,138]:Anything, [-1,139]:Anything, [-1,140]:Anything, [-1,141]:Anything, [-1,142]:Anything, [-1,143]:Anything, [-1,144]:Anything, [-1,145]:Anything, [-1,146]:Anything, [-1,147]:Anything, [-1,148]:Anything, [-1,149]:Anything, [-1,150]:Anything, [-1,151]:Anything, [-1,152]:Anything, [-1,153]:Anything, [-1,154]:Anything, [-1,155]:Anything, [-1,156]:Anything, [-1,157]:Anything, [-1,158]:Anything, [-1,159]:Anything, [-1,160]:Anything, [-1,161]:Anything, [-1,162]:Anything, [-1,163]:Anything, [-1,164]:Anything, [-1,165]:Anything, [-1,166]:Anything, [-1,167]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i.i, align 8 Changed=1 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i.i, align 8 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer} new {[-1]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** null, i32 (...)*** %i7.i, align 8 Changed=1 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val: i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {[-1]:Pointer} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,8]:Pointer} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=1 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {[-1]:Pointer, [-1,8]:Pointer} new {[-1]:Pointer, [-1,8]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=1 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,1008]:Pointer, [-1,1008,8]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
 ending IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0)
 updating   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* = {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer}  via IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) arg %"class.std::_Sp_counted_ptr_inplace"* %arg
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) Changed=1 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) Changed=0 legal=1
 starting IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0)
 ending IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0)
 updating   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* = {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer}  via IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) arg %"class.std::_Sp_counted_ptr_inplace"* %arg
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) Changed=0 legal=1
analyzing function preprocess__Z9Callable5v
 + retdata: {[-1]:Anything}
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=1 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val: @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Anything, [-1,17]:Anything, [-1,18]:Anything, [-1,19]:Anything, [-1,20]:Anything, [-1,21]:Anything, [-1,22]:Anything, [-1,23]:Anything, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Pointer, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val: @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Anything, [-1,17]:Anything, [-1,18]:Anything, [-1,19]:Anything, [-1,20]:Anything, [-1,21]:Anything, [-1,22]:Anything, [-1,23]:Anything, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Pointer, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=1 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {} new {[-1]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val: i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=0 legal=1
 starting IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5
 ending IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5
 updating   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* = {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer}  via IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5 arg %"class.std::_Sp_counted_ptr_inplace"* %arg
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5 Changed=1 legal=1
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i6 = bitcast i8* %i4 to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %i6 = bitcast i8* %i4 to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Anything, [-1,1]:Anything, [-1,2]:Anything, [-1,3]:Anything, [-1,4]:Anything, [-1,5]:Anything, [-1,6]:Anything, [-1,7]:Anything} new {[-1]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8 Changed=0 legal=1
updating analysis of val:   %i4 = tail call i8* @_Znwm(i64 0) #5 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i4 = tail call i8* @_Znwm(i64 0) #5 Changed=0 legal=1
 starting IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5
 ending IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5
 updating   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* = {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer}  via IPO of   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5 arg %"class.std::_Sp_counted_ptr_inplace"* %arg
updating analysis of val:   %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"* current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0) #5 Changed=0 legal=1
analyzing function preprocess__ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv
 + knowndata: %"class.std::_Sp_counted_ptr_inplace"* %arg : {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} - {}
 + retdata: {}
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from %"class.std::_Sp_counted_ptr_inplace"* %arg Changed=1 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from %"class.std::_Sp_counted_ptr_inplace"* %arg Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=1 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=1 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** current: {} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=1 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val: @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Pointer, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Anything, [-1,33]:Anything, [-1,34]:Anything, [-1,35]:Anything, [-1,36]:Anything, [-1,37]:Anything, [-1,38]:Anything, [-1,39]:Anything, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything, [-1,56]:Anything, [-1,57]:Anything, [-1,58]:Anything, [-1,59]:Anything, [-1,60]:Anything, [-1,61]:Anything, [-1,62]:Anything, [-1,63]:Anything, [-1,64]:Anything, [-1,65]:Anything, [-1,66]:Anything, [-1,67]:Anything, [-1,68]:Anything, [-1,69]:Anything, [-1,70]:Anything, [-1,71]:Anything, [-1,72]:Anything, [-1,73]:Anything, [-1,74]:Anything, [-1,75]:Anything, [-1,76]:Anything, [-1,77]:Anything, [-1,78]:Anything, [-1,79]:Anything, [-1,80]:Anything, [-1,81]:Anything, [-1,82]:Anything, [-1,83]:Anything, [-1,84]:Anything, [-1,85]:Anything, [-1,86]:Anything, [-1,87]:Anything, [-1,88]:Anything, [-1,89]:Anything, [-1,90]:Anything, [-1,91]:Anything, [-1,92]:Anything, [-1,93]:Anything, [-1,94]:Anything, [-1,95]:Anything, [-1,96]:Anything, [-1,97]:Anything, [-1,98]:Anything, [-1,99]:Anything, [-1,100]:Anything, [-1,101]:Anything, [-1,102]:Anything, [-1,103]:Anything, [-1,104]:Anything, [-1,105]:Anything, [-1,106]:Anything, [-1,107]:Anything, [-1,108]:Anything, [-1,109]:Anything, [-1,110]:Anything, [-1,111]:Anything, [-1,112]:Anything, [-1,113]:Anything, [-1,114]:Anything, [-1,115]:Anything, [-1,116]:Anything, [-1,117]:Anything, [-1,118]:Anything, [-1,119]:Anything, [-1,120]:Anything, [-1,121]:Anything, [-1,122]:Anything, [-1,123]:Anything, [-1,124]:Anything, [-1,125]:Anything, [-1,126]:Anything, [-1,127]:Anything, [-1,128]:Anything, [-1,129]:Anything, [-1,130]:Anything, [-1,131]:Anything, [-1,132]:Anything, [-1,133]:Anything, [-1,134]:Anything, [-1,135]:Anything, [-1,136]:Anything, [-1,137]:Anything, [-1,138]:Anything, [-1,139]:Anything, [-1,140]:Anything, [-1,141]:Anything, [-1,142]:Anything, [-1,143]:Anything, [-1,144]:Anything, [-1,145]:Anything, [-1,146]:Anything, [-1,147]:Anything, [-1,148]:Anything, [-1,149]:Anything, [-1,150]:Anything, [-1,151]:Anything, [-1,152]:Anything, [-1,153]:Anything, [-1,154]:Anything, [-1,155]:Anything, [-1,156]:Anything, [-1,157]:Anything, [-1,158]:Anything, [-1,159]:Anything, [-1,160]:Anything, [-1,161]:Anything, [-1,162]:Anything, [-1,163]:Anything, [-1,164]:Anything, [-1,165]:Anything, [-1,166]:Anything, [-1,167]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=1 legal=1
updating analysis of val: @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Anything, [-1,8]:Anything, [-1,9]:Anything, [-1,10]:Anything, [-1,11]:Anything, [-1,12]:Anything, [-1,13]:Anything, [-1,14]:Anything, [-1,15]:Anything, [-1,16]:Pointer, [-1,24]:Anything, [-1,25]:Anything, [-1,26]:Anything, [-1,27]:Anything, [-1,28]:Anything, [-1,29]:Anything, [-1,30]:Anything, [-1,31]:Anything, [-1,32]:Anything, [-1,33]:Anything, [-1,34]:Anything, [-1,35]:Anything, [-1,36]:Anything, [-1,37]:Anything, [-1,38]:Anything, [-1,39]:Anything, [-1,40]:Anything, [-1,41]:Anything, [-1,42]:Anything, [-1,43]:Anything, [-1,44]:Anything, [-1,45]:Anything, [-1,46]:Anything, [-1,47]:Anything, [-1,48]:Anything, [-1,49]:Anything, [-1,50]:Anything, [-1,51]:Anything, [-1,52]:Anything, [-1,53]:Anything, [-1,54]:Anything, [-1,55]:Anything, [-1,56]:Anything, [-1,57]:Anything, [-1,58]:Anything, [-1,59]:Anything, [-1,60]:Anything, [-1,61]:Anything, [-1,62]:Anything, [-1,63]:Anything, [-1,64]:Anything, [-1,65]:Anything, [-1,66]:Anything, [-1,67]:Anything, [-1,68]:Anything, [-1,69]:Anything, [-1,70]:Anything, [-1,71]:Anything, [-1,72]:Anything, [-1,73]:Anything, [-1,74]:Anything, [-1,75]:Anything, [-1,76]:Anything, [-1,77]:Anything, [-1,78]:Anything, [-1,79]:Anything, [-1,80]:Anything, [-1,81]:Anything, [-1,82]:Anything, [-1,83]:Anything, [-1,84]:Anything, [-1,85]:Anything, [-1,86]:Anything, [-1,87]:Anything, [-1,88]:Anything, [-1,89]:Anything, [-1,90]:Anything, [-1,91]:Anything, [-1,92]:Anything, [-1,93]:Anything, [-1,94]:Anything, [-1,95]:Anything, [-1,96]:Anything, [-1,97]:Anything, [-1,98]:Anything, [-1,99]:Anything, [-1,100]:Anything, [-1,101]:Anything, [-1,102]:Anything, [-1,103]:Anything, [-1,104]:Anything, [-1,105]:Anything, [-1,106]:Anything, [-1,107]:Anything, [-1,108]:Anything, [-1,109]:Anything, [-1,110]:Anything, [-1,111]:Anything, [-1,112]:Anything, [-1,113]:Anything, [-1,114]:Anything, [-1,115]:Anything, [-1,116]:Anything, [-1,117]:Anything, [-1,118]:Anything, [-1,119]:Anything, [-1,120]:Anything, [-1,121]:Anything, [-1,122]:Anything, [-1,123]:Anything, [-1,124]:Anything, [-1,125]:Anything, [-1,126]:Anything, [-1,127]:Anything, [-1,128]:Anything, [-1,129]:Anything, [-1,130]:Anything, [-1,131]:Anything, [-1,132]:Anything, [-1,133]:Anything, [-1,134]:Anything, [-1,135]:Anything, [-1,136]:Anything, [-1,137]:Anything, [-1,138]:Anything, [-1,139]:Anything, [-1,140]:Anything, [-1,141]:Anything, [-1,142]:Anything, [-1,143]:Anything, [-1,144]:Anything, [-1,145]:Anything, [-1,146]:Anything, [-1,147]:Anything, [-1,148]:Anything, [-1,149]:Anything, [-1,150]:Anything, [-1,151]:Anything, [-1,152]:Anything, [-1,153]:Anything, [-1,154]:Anything, [-1,155]:Anything, [-1,156]:Anything, [-1,157]:Anything, [-1,158]:Anything, [-1,159]:Anything, [-1,160]:Anything, [-1,161]:Anything, [-1,162]:Anything, [-1,163]:Anything, [-1,164]:Anything, [-1,165]:Anything, [-1,166]:Anything, [-1,167]:Anything} new {[-1]:Pointer} from   %1 = getelementptr inbounds { [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, i32 0, i64 2 Changed=0 legal=1
updating analysis of val:   %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)*** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i.i, align 8 Changed=0 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i.i, align 8 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer} new {[-1]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {} new {[-1]:Pointer, [-1,0]:Pointer} from   store i32 (...)** null, i32 (...)*** %i7.i, align 8 Changed=1 legal=1
updating analysis of val: i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val: i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**) Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} from   %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {} new {[-1]:Pointer} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,8]:Pointer} from   %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=1 legal=1
updating analysis of val:   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 current: {[-1]:Pointer, [-1,8]:Pointer} new {[-1]:Pointer, [-1,8]:Pointer} from   %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8 Changed=0 legal=1
updating analysis of val:   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} from   %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"** Changed=1 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val:   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 current: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,8]:Pointer} new {[-1]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
updating analysis of val: %"class.std::_Sp_counted_ptr_inplace"* %arg current: {[-1]:Pointer, [-1,0]:Pointer, [-1,16]:Pointer, [-1,16,0]:Pointer} new {[-1]:Pointer, [-1,1008]:Pointer, [-1,1008,8]:Pointer} from   %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992 Changed=0 legal=1
analyzing function preprocess__ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv
 + knowndata: %"class.olb::LBSolver"* %arg : {} - {}
 + retdata: {}
updating analysis of val: %"class.olb::LBSolver"* %arg current: {} new {} from %"class.olb::LBSolver"* %arg Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {} new {} from %"class.olb::LBSolver"* %arg Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {} new {[-1]:Pointer} from   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 Changed=1 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {} new {} from   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {} new {[-1]:Pointer} from   %i66.idx.val = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** %i66.idx, align 8 Changed=1 legal=1
updating analysis of val:   %i66.idx.val = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** %i66.idx, align 8 current: {} new {} from   %i66.idx.val = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** %i66.idx, align 8 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {[-1]:Pointer} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {} new {[-1]:Pointer} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=1 legal=1
updating analysis of val:   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 current: {[-1]:Pointer} new {} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer} new {[-1]:Pointer, [-1,0]:Pointer} from   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 Changed=1 legal=1
updating analysis of val:   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 current: {[-1]:Pointer} new {[-1]:Pointer} from   %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {[-1]:Pointer} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val:   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 current: {[-1]:Pointer, [-1,0]:Pointer} new {[-1]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=0 legal=1
updating analysis of val: %"class.olb::LBSolver"* %arg current: {[-1]:Pointer} new {[-1]:Pointer, [-1,928]:Pointer} from   %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0 Changed=1 legal=1
 starting IPO of   tail call fastcc void @_ZN3olb13SuperGeometryIdLj3EE10innerCleanEb(%"class.std::unique_ptr.65"* %i66.idx.val) #7
analyzing function _ZN3olb13SuperGeometryIdLj3EE10innerCleanEb
 + knowndata: %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val : {} - {}
 + retdata: {}
updating analysis of val: %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val current: {} new {} from %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val Changed=0 legal=1
updating analysis of val: %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val current: {} new {} from %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val Changed=0 legal=1
updating analysis of val:   %i61.i = alloca %"class.olb::Vector.210", align 4 current: {} new {[-1]:Pointer} from   %i61.i = alloca %"class.olb::Vector.210", align 4 Changed=1 legal=1
updating analysis of val:   %i13 = icmp eq %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val, null current: {} new {[-1]:Integer} from   %i13 = icmp eq %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val, null Changed=1 legal=1
updating analysis of val: %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val current: {} new {[-1]:Pointer} from   %i13 = icmp eq %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val, null Changed=1 legal=1
updating analysis of val:   %0 = bitcast %"class.olb::Vector.210"* %i61.i to i8* current: {} new {[-1]:Pointer} from   %0 = bitcast %"class.olb::Vector.210"* %i61.i to i8* Changed=1 legal=1
updating analysis of val:   %i61.i = alloca %"class.olb::Vector.210", align 4 current: {[-1]:Pointer} new {[-1]:Pointer} from   %0 = bitcast %"class.olb::Vector.210"* %i61.i to i8* Changed=0 legal=1
updating analysis of val:   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] current: {} new {[-1]:Integer} from   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] Changed=1 legal=1
updating analysis of val:   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] current: {[-1]:Integer} new {[-1]:Integer} from   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] Changed=0 legal=1
updating analysis of val:   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] current: {[-1]:Integer} new {[-1]:Integer} from   %index.next = add nuw i64 %index, 4 Changed=0 legal=1
updating analysis of val:   %index.next = add nuw i64 %index, 4 current: {} new {[-1]:Integer} from   %index.next = add nuw i64 %index, 4 Changed=1 legal=1
updating analysis of val:   %1 = icmp eq i64 %index, 0 current: {} new {[-1]:Integer} from   %1 = icmp eq i64 %index, 0 Changed=1 legal=1
updating analysis of val:   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] current: {[-1]:Integer} new {} from   %1 = icmp eq i64 %index, 0 Changed=0 legal=1
updating analysis of val:   %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ] current: {[-1]:Integer} new {[-1]:Integer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=0 legal=1
updating analysis of val:   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index current: {} new {[-1]:Pointer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=1 legal=1
updating analysis of val:   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index current: {[-1]:Pointer} new {[-1]:Pointer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=0 legal=1
updating analysis of val:   %i61.i = alloca %"class.olb::Vector.210", align 4 current: {[-1]:Pointer} new {[-1]:Pointer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=0 legal=1
updating analysis of val:   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index current: {[-1]:Pointer} new {[-1]:Pointer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=0 legal=1
updating analysis of val:   %i61.i = alloca %"class.olb::Vector.210", align 4 current: {[-1]:Pointer} new {[-1]:Pointer} from   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index Changed=0 legal=1
updating analysis of val:   %3 = bitcast i32* %2 to <4 x i32>* current: {} new {[-1]:Pointer} from   %3 = bitcast i32* %2 to <4 x i32>* Changed=1 legal=1
updating analysis of val:   %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index current: {[-1]:Pointer} new {[-1]:Pointer} from   %3 = bitcast i32* %2 to <4 x i32>* Changed=0 legal=1
updating analysis of val:   %3 = bitcast i32* %2 to <4 x i32>* current: {[-1]:Pointer} new {[-1]:Pointer} from   %wide.load.le = load <4 x i32>, <4 x i32>* %3, align 4 Changed=0 legal=1
updating analysis of val:   %wide.load.le = load <4 x i32>, <4 x i32>* %3, align 4 current: {} new {} from   %wide.load.le = load <4 x i32>, <4 x i32>* %3, align 4 Changed=0 legal=1
updating analysis of val:   %4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1> current: {} new {[-1]:Integer} from   %4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1> Changed=1 legal=1
updating analysis of val:   %wide.load.le = load <4 x i32>, <4 x i32>* %3, align 4 current: {} new {} from   %4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1> Changed=0 legal=1
updating analysis of val:   %4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1> current: {[-1]:Integer} new {} from   %shift = shufflevector <4 x i1> %4, <4 x i1> poison, <4 x i32> <i32 undef, i32 undef, i32 3, i32 undef> Changed=0 legal=1
{[0]:Anything, [1]:Anything, [3]:Anything}
 canonicalizing 1
opt: /home/drehwald/prog/Enzyme/enzyme/Enzyme/TypeAnalysis/TypeTree.h:591: void TypeTree::CanonicalizeInPlace(size_t, const llvm::DataLayout &): Assertion `(size_t)pair.first[0] < len' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.  Program arguments: opt 3.ll -O3 --enable-new-pm=0 -load=/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so -enzyme -enzyme-print-type
1.  Running pass 'Enzyme Pass' on module '3.ll'.
 #0 0x000000000297f753 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/drehwald/prog/llvm-14/build/bin/opt+0x297f753)
 #1 0x000000000297d52e llvm::sys::RunSignalHandlers() (/home/drehwald/prog/llvm-14/build/bin/opt+0x297d52e)
 #2 0x000000000297fc1a SignalHandler(int) Signals.cpp:0:0
 #3 0x00007f9c0fa48520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f9c0fa9ca7c __pthread_kill_implementation ./nptl/./nptl/pthread_kill.c:44:76
 #5 0x00007f9c0fa9ca7c __pthread_kill_internal ./nptl/./nptl/pthread_kill.c:78:10
 #6 0x00007f9c0fa9ca7c pthread_kill ./nptl/./nptl/pthread_kill.c:89:10
 #7 0x00007f9c0fa48476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007f9c0fa2e7f3 abort ./stdlib/./stdlib/abort.c:81:7
 #9 0x00007f9c0fa2e71b _nl_load_domain ./intl/./intl/loadmsgcat.c:1177:9
#10 0x00007f9c0fa3fe96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007f9c0f9aa607 TypeTree::CanonicalizeInPlace(unsigned long, llvm::DataLayout const&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x391607)
#12 0x00007f9c0f9762ce TypeAnalyzer::updateAnalysis(llvm::Value*, TypeTree, llvm::Value*) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x35d2ce)
#13 0x00007f9c0f995b40 TypeAnalyzer::visitShuffleVectorInst(llvm::ShuffleVectorInst&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x37cb40)
#14 0x00007f9c0f9869fc TypeAnalyzer::run() (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x36d9fc)
#15 0x00007f9c0f9a3b43 TypeAnalysis::analyzeFunction(FnTypeInfo const&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x38ab43)
#16 0x00007f9c0f9a4a49 TypeAnalyzer::visitIPOCall(llvm::CallInst&, llvm::Function&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x38ba49)
#17 0x00007f9c0f9810d8 TypeAnalyzer::visitCallInst(llvm::CallInst&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x3680d8)
#18 0x00007f9c0f986721 TypeAnalyzer::run() (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x36d721)
#19 0x00007f9c0f9a3b43 TypeAnalysis::analyzeFunction(FnTypeInfo const&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x38ab43)
#20 0x00007f9c0f923e91 GradientUtils::CreateFromClone(EnzymeLogic&, unsigned int, llvm::Function*, llvm::TargetLibraryInfo&, TypeAnalysis&, FnTypeInfo&, DIFFE_TYPE, llvm::ArrayRef<DIFFE_TYPE>, bool, bool, std::map<AugmentedStruct, int, std::less<AugmentedStruct>, std::allocator<std::pair<AugmentedStruct const, int> > >&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x30ae91)
#21 0x00007f9c0f7bcfba EnzymeLogic::CreateAugmentedPrimal(llvm::Function*, DIFFE_TYPE, llvm::ArrayRef<DIFFE_TYPE>, TypeAnalysis&, bool, bool, FnTypeInfo const&, std::map<llvm::Argument*, bool, std::less<llvm::Argument*>, std::allocator<std::pair<llvm::Argument* const, bool> > >, bool, unsigned int, bool, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x1a3fba)
#22 0x00007f9c0f926744 GradientUtils::GetOrCreateShadowFunction(EnzymeLogic&, llvm::TargetLibraryInfo&, TypeAnalysis&, llvm::Function*, DerivativeMode, unsigned int, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x30d744)
#23 0x00007f9c0f90fd13 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f6d13)
#24 0x00007f9c0f910078 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f7078)
#25 0x00007f9c0f90ea22 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f5a22)
#26 0x00007f9c0f90ee1e GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f5e1e)
#27 0x00007f9c0f910238 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f7238)
#28 0x00007f9c0f910078 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f7078)
#29 0x00007f9c0f910078 GradientUtils::invertPointerM(llvm::Value*, llvm::IRBuilder<llvm::ConstantFolder, llvm::IRBuilderDefaultInserter>&, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x2f7078)
#30 0x00007f9c0f881d7d AdjointGenerator<AugmentedReturn const*>::visitCommonStore(llvm::Instruction&, llvm::Value*, llvm::Value*, llvm::MaybeAlign, bool, llvm::AtomicOrdering, unsigned char, llvm::Value*) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x268d7d)
#31 0x00007f9c0f88101a AdjointGenerator<AugmentedReturn const*>::visitStoreInst(llvm::StoreInst&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x26801a)
#32 0x00007f9c0f7d0df3 EnzymeLogic::CreatePrimalAndGradient(ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x1b7df3)
#33 0x00007f9c0f899d3b AdjointGenerator<AugmentedReturn const*>::visitCallInst(llvm::CallInst&) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x280d3b)
#34 0x00007f9c0f7d0df3 EnzymeLogic::CreatePrimalAndGradient(ReverseCacheKey const&&, TypeAnalysis&, AugmentedReturn const*, bool) (/home/drehwald/prog/Enzyme/enzyme/buildRel/Enzyme/LLVMEnzyme-14.so+0x1b7df3)
#35 0x00007f9c0f7a6549 (anonymous namespace)::Enzyme::HandleAutoDiff(llvm::CallInst*, llvm::TargetLibraryInfo&, DerivativeMode, bool) Enzyme.cpp:0:0
#36 0x00007f9c0f7a0ef5 (anonymous namespace)::Enzyme::lowerEnzymeCalls(llvm::Function&, bool&, std::set<llvm::Function*, std::less<llvm::Function*>, std::allocator<llvm::Function*> >&) Enzyme.cpp:0:0
#37 0x00007f9c0f79cb24 (anonymous namespace)::Enzyme::runOnModule(llvm::Module&) Enzyme.cpp:0:0
#38 0x00000000020aa87c llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/drehwald/prog/llvm-14/build/bin/opt+0x20aa87c)
#39 0x00000000013a9b53 main (/home/drehwald/prog/llvm-14/build/bin/opt+0x13a9b53)
#40 0x00007f9c0fa2fd90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#41 0x00007f9c0fa2fe40 call_init ./csu/../csu/libc-start.c:128:20
#42 0x00007f9c0fa2fe40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#43 0x000000000138d1b5 _start (/home/drehwald/prog/llvm-14/build/bin/opt+0x138d1b5)
wsmoses commented 2 years ago
; ModuleID = 'err.ll'
source_filename = "err.ll"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::_Sp_counted_ptr_inplace" = type { %"class.std::_Sp_counted_base", %"class.std::_Sp_counted_ptr_inplace<TestFlowSolverOptiAD<double>, std::allocator<TestFlowSolverOptiAD<double>>, __gnu_cxx::_S_atomic>::_Impl" }
%"class.std::_Sp_counted_base" = type { i32 (...)**, i32, i32 }
%"class.std::_Sp_counted_ptr_inplace<TestFlowSolverOptiAD<double>, std::allocator<TestFlowSolverOptiAD<double>>, __gnu_cxx::_S_atomic>::_Impl" = type { %"struct.__gnu_cxx::__aligned_buffer" }
%"struct.__gnu_cxx::__aligned_buffer" = type { %"union.std::aligned_storage<1016, 8>::type" }
%"union.std::aligned_storage<1016, 8>::type" = type { [1016 x i8] }
%"class.olb::LBSolver" = type { %"class.olb::BaseSolver.base", %"class.olb::OstreamManager", %"class.std::shared_ptr.260", %"class.std::shared_ptr.263", %"class.std::shared_ptr.266", %"class.std::tuple.269", %"class.std::unique_ptr.275", %"struct.std::_Rb_tree_key_compare", i8, double }
%"class.olb::BaseSolver.base" = type <{ i32 (...)**, %"class.olb::OstreamManager", %"struct.olb::utilities::TypeIndexedTuple", i8, [7 x i8], i64, i8 }>
%"struct.olb::utilities::TypeIndexedTuple" = type { %"class.std::tuple.179" }
%"class.std::tuple.179" = type { %"struct.std::_Tuple_impl.180" }
%"struct.std::_Tuple_impl.180" = type { %"struct.std::_Tuple_impl.181", %"struct.std::_Head_base.196" }
%"struct.std::_Tuple_impl.181" = type { %"struct.std::_Tuple_impl.182", %"struct.std::_Head_base.192" }
%"struct.std::_Tuple_impl.182" = type { %"struct.std::_Tuple_impl.183", %"struct.std::_Head_base.188" }
%"struct.std::_Tuple_impl.183" = type { %"struct.std::_Head_base.184" }
%"struct.std::_Head_base.184" = type { %"class.std::shared_ptr.185" }
%"class.std::shared_ptr.185" = type { %"class.std::__shared_ptr.186" }
%"class.std::__shared_ptr.186" = type { %"struct.olb::parameters::XmlSimulation"*, %"class.std::__shared_count" }
%"struct.olb::parameters::XmlSimulation" = type { %"struct.olb::parameters::SimulationBase.base", %"class.olb::XMLreader"*, %"class.std::shared_ptr.364" }
%"struct.olb::parameters::SimulationBase.base" = type <{ %"class.std::basic_ostream.base", double, double, double, i8, [3 x i8], i32, i32 }>
%"class.std::basic_ostream.base" = type { i32 (...)** }
%"class.olb::XMLreader" = type { i8, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.olb::OstreamManager", %"class.std::map", %"class.std::vector" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { i8* }
%union.anon = type { i64, [8 x i8] }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::XMLreader *, std::allocator<olb::XMLreader *>>::_Vector_impl_data" = type { %"class.olb::XMLreader"**, %"class.olb::XMLreader"**, %"class.olb::XMLreader"** }
%"class.std::shared_ptr.364" = type { %"class.std::__shared_ptr.365" }
%"class.std::__shared_ptr.365" = type { %"class.olb::UnitConverter"*, %"class.std::__shared_count" }
%"class.olb::UnitConverter" = type { %"class.std::basic_ostream.base", double, double, double, double, double, double, double, double, double, double, double, double, double, i64, double, double, %"class.olb::OstreamManager" }
%"class.std::__shared_count" = type { %"class.std::_Sp_counted_base"* }
%"struct.std::_Head_base.188" = type { %"class.std::shared_ptr.189" }
%"class.std::shared_ptr.189" = type { %"class.std::__shared_ptr.190" }
%"class.std::__shared_ptr.190" = type { %"struct.olb::parameters::DirectOptiResults"*, %"class.std::__shared_count" }
%"struct.olb::parameters::DirectOptiResults" = type { %"struct.olb::parameters::OptiResultsBase", double }
%"struct.olb::parameters::OptiResultsBase" = type { %"class.std::basic_ostream.base" }
%"struct.std::_Head_base.192" = type { %"class.std::shared_ptr.193" }
%"class.std::shared_ptr.193" = type { %"class.std::__shared_ptr.194" }
%"class.std::__shared_ptr.194" = type { %"struct.olb::parameters::OutputBase"*, %"class.std::__shared_count" }
%"struct.olb::parameters::OutputBase" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, double, i32, i8, %"class.std::__cxx11::basic_string", double, i8, %"class.std::__cxx11::basic_string", double, i8, %"class.std::__cxx11::basic_string", double }
%"struct.std::_Head_base.196" = type { %"class.std::shared_ptr.197" }
%"class.std::shared_ptr.197" = type { %"class.std::__shared_ptr.198" }
%"class.std::__shared_ptr.198" = type { %struct.TestFlowDirectOpti*, %"class.std::__shared_count" }
%struct.TestFlowDirectOpti = type { %"struct.olb::parameters::DirectOptiSimulation", %"class.olb::Vector.87", i32, i32 }
%"struct.olb::parameters::DirectOptiSimulation" = type { %"struct.olb::parameters::OptiResultsBase" }
%"class.olb::Vector.87" = type { %"struct.std::array.91" }
%"struct.std::array.91" = type { [3 x double] }
%"class.olb::OstreamManager" = type { %"class.std::basic_ostream.base", %"class.olb::OMBuf", %"class.std::basic_ios" }
%"class.olb::OMBuf" = type { %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ostream"*, %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type <{ i32 (...)**, i32, [4 x i8] }>
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_put"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::ctype" = type <{ %"class.std::locale::facet.base", [4 x i8], %struct.__locale_struct*, i8, [7 x i8], i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
%"class.std::locale::facet.base" = type <{ i32 (...)**, i32 }>
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { %"class.std::locale::facet.base", [4 x i8] }
%"class.std::shared_ptr.260" = type { %"class.std::__shared_ptr.261" }
%"class.std::__shared_ptr.261" = type { %"class.olb::SuperGeometry"*, %"class.std::__shared_count" }
%"class.olb::SuperGeometry" = type { %"class.olb::SuperStructure", %"class.std::vector.60", %"class.std::unique_ptr.66", i8, %"class.olb::SuperGeometryStatistics3D", %"class.olb::OstreamManager" }
%"class.olb::SuperStructure" = type { i32 (...)**, %"class.olb::CuboidGeometry3D"*, %"class.olb::LoadBalancer"*, i32, %"class.olb::OstreamManager" }
%"class.olb::CuboidGeometry3D" = type { %"class.olb::BufferSerializable", %"class.std::vector.55", %"class.olb::Cuboid3D", %"class.olb::Vector", %"class.olb::OstreamManager" }
%"class.olb::BufferSerializable" = type { %"class.std::basic_ostream.base", %"class.std::vector.45", %"class.std::vector.50" }
%"class.std::vector.45" = type { %"struct.std::_Vector_base.46" }
%"struct.std::_Vector_base.46" = type { %"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl" }
%"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl" = type { %"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<bool *, std::allocator<bool *>>::_Vector_impl_data" = type { i8**, i8**, i8** }
%"class.std::vector.50" = type { %"struct.std::_Vector_base.51" }
%"struct.std::_Vector_base.51" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { i64*, i64*, i64* }
%"class.std::vector.55" = type { %"struct.std::_Vector_base.56" }
%"struct.std::_Vector_base.56" = type { %"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::Cuboid3D<double>, std::allocator<olb::Cuboid3D<double>>>::_Vector_impl_data" = type { %"class.olb::Cuboid3D"*, %"class.olb::Cuboid3D"*, %"class.olb::Cuboid3D"* }
%"class.olb::Cuboid3D" = type { %"class.std::basic_ostream.base", double, double, double, double, i32, i32, i32, i64, i32, %"class.olb::OstreamManager" }
%"class.olb::Vector" = type { %"struct.std::array" }
%"struct.std::array" = type { [3 x i8] }
%"class.olb::LoadBalancer" = type { %"class.olb::BufferSerializable", i32, %"class.std::map", %"class.std::vector.141", %"class.std::map" }
%"class.std::vector.141" = type { %"struct.std::_Vector_base.142" }
%"struct.std::_Vector_base.142" = 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 { i32*, i32*, i32* }
%"class.std::vector.60" = type { %"struct.std::_Vector_base.61" }
%"struct.std::_Vector_base.61" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockGeometry<double, 3>>, std::allocator<std::unique_ptr<olb::BlockGeometry<double, 3>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"* }
%"class.std::unique_ptr.65" = type { %"struct.std::__uniq_ptr_data.203" }
%"struct.std::__uniq_ptr_data.203" = type { %"class.std::__uniq_ptr_impl.204" }
%"class.std::__uniq_ptr_impl.204" = type { %"class.std::tuple.205" }
%"class.std::tuple.205" = type { %"struct.std::_Tuple_impl.206" }
%"struct.std::_Tuple_impl.206" = type { %"struct.std::_Head_base.209" }
%"struct.std::_Head_base.209" = type { %"class.olb::BlockGeometry"* }
%"class.olb::BlockGeometry" = type { %"class.std::basic_ostream.base", %"class.olb::BlockStructureD", %"class.olb::MultiFieldArrayD", %"class.olb::Cuboid3D", i32, %"class.olb::BlockGeometryStatistics3D", %"class.olb::OstreamManager", %"class.std::__cxx11::list.255" }
%"class.olb::BlockStructureD" = type { %"class.olb::Vector.210", %"class.olb::Vector.210", %"class.olb::Vector.210", i32 }
%"class.olb::Vector.210" = type { %"struct.std::array.214" }
%"struct.std::array.214" = type { [3 x i32] }
%"class.olb::MultiFieldArrayD" = type { %"class.std::basic_ostream.base", i64, %"class.std::tuple.215", %"class.std::map", %"class.olb::utilities::TypeIndexedMap", %"class.std::map", %"class.std::map" }
%"class.std::tuple.215" = type { %"struct.std::_Tuple_impl.216" }
%"struct.std::_Tuple_impl.216" = type { %"struct.std::_Head_base.217" }
%"struct.std::_Head_base.217" = type { %"class.olb::FieldArrayD" }
%"class.olb::FieldArrayD" = type { %"class.olb::ColumnVector", %"class.std::basic_ostream.base" }
%"class.olb::ColumnVector" = type { %"struct.olb::ColumnVectorBase", i64, %"struct.std::array.218" }
%"struct.olb::ColumnVectorBase" = type { %"class.std::basic_ostream.base", %"class.std::basic_ostream.base" }
%"struct.std::array.218" = type { [1 x %"class.olb::cpu::sisd::Column"] }
%"class.olb::cpu::sisd::Column" = type { %"class.std::basic_ostream.base", %"class.std::basic_ostream.base", %"class.std::basic_ostream.base", i64, %"class.std::unique_ptr.219" }
%"class.std::unique_ptr.219" = type { %"struct.std::__uniq_ptr_data.220" }
%"struct.std::__uniq_ptr_data.220" = type { %"class.std::__uniq_ptr_impl.221" }
%"class.std::__uniq_ptr_impl.221" = type { %"class.std::tuple.222" }
%"class.std::tuple.222" = type { %"struct.std::_Tuple_impl.223" }
%"struct.std::_Tuple_impl.223" = type { %"struct.std::_Head_base.226" }
%"struct.std::_Head_base.226" = type { i32* }
%"class.olb::utilities::TypeIndexedMap" = type { %"class.std::vector.235" }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>, std::allocator<std::optional<olb::AnyFieldArrayD<double, olb::descriptors::SPATIAL_DESCRIPTOR<2>, olb::Platform::CPU_SISD> *>>>::_Vector_impl_data" = type { %"class.std::optional"*, %"class.std::optional"*, %"class.std::optional"* }
%"class.std::optional" = type opaque
%"class.olb::BlockGeometryStatistics3D" = type { %"class.olb::BlockGeometry"*, i8, i32, i32, i32, double, i32, %"class.std::map", %"class.std::map", %"class.std::map", %"class.olb::OstreamManager", %"class.olb::BlockGeometryStatistics3D"* }
%"class.std::__cxx11::list.255" = type { %"class.std::__cxx11::_List_base.256" }
%"class.std::__cxx11::_List_base.256" = type { %"struct.std::__cxx11::_List_base<bool *, std::allocator<bool *>>::_List_impl" }
%"struct.std::__cxx11::_List_base<bool *, std::allocator<bool *>>::_List_impl" = type { %"struct.std::__detail::_List_node_header" }
%"struct.std::__detail::_List_node_header" = type { %"struct.std::__detail::_List_node_base", i64 }
%"struct.std::__detail::_List_node_base" = type { %"struct.std::__detail::_List_node_base"*, %"struct.std::__detail::_List_node_base"* }
%"class.std::unique_ptr.66" = type { %"struct.std::__uniq_ptr_data.67" }
%"struct.std::__uniq_ptr_data.67" = type { %"class.std::__uniq_ptr_impl.68" }
%"class.std::__uniq_ptr_impl.68" = type { %"class.std::tuple.69" }
%"class.std::tuple.69" = type { %"struct.std::_Tuple_impl.70" }
%"struct.std::_Tuple_impl.70" = type { %"struct.std::_Head_base.73" }
%"struct.std::_Head_base.73" = type { %"class.olb::SuperCommunicator"* }
%"class.olb::SuperCommunicator" = type <{ %"class.olb::SuperGeometry"*, %"class.std::vector.284", %"class.std::vector.289", %"class.std::vector.18", %"class.std::map", i8, i8, [6 x i8] }>
%"class.std::vector.284" = type { %"struct.std::_Vector_base.285" }
%"struct.std::_Vector_base.285" = type { %"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicationNeighborhood<double, 3>, std::allocator<olb::BlockCommunicationNeighborhood<double, 3>>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicationNeighborhood"*, %"class.olb::BlockCommunicationNeighborhood"*, %"class.olb::BlockCommunicationNeighborhood"* }
%"class.olb::BlockCommunicationNeighborhood" = type { %"class.olb::CuboidGeometry3D"*, %"class.olb::LoadBalancer"*, i32, i32, %"class.std::vector.18", %"class.std::unique_ptr.321", %"class.std::map", %"class.std::map", %"class.std::map", %"class.std::map" }
%"class.std::unique_ptr.321" = type { %"struct.std::__uniq_ptr_data.322" }
%"struct.std::__uniq_ptr_data.322" = type { %"class.std::__uniq_ptr_impl.323" }
%"class.std::__uniq_ptr_impl.323" = type { %"class.std::tuple.324" }
%"class.std::tuple.324" = type { %"struct.std::_Tuple_impl.325" }
%"struct.std::_Tuple_impl.325" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider" }
%"class.std::vector.289" = type { %"struct.std::_Vector_base.290" }
%"struct.std::_Vector_base.290" = type { %"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicator, std::allocator<olb::BlockCommunicator>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicator"*, %"class.olb::BlockCommunicator"*, %"class.olb::BlockCommunicator"* }
%"class.olb::BlockCommunicator" = type { i32, %"class.std::vector.13" }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl" }
%"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl" = type { %"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl_data" }
%"struct.std::_Vector_base<olb::BlockCommunicator::CopyTask, std::allocator<olb::BlockCommunicator::CopyTask>>::_Vector_impl_data" = type { %"class.olb::BlockCommunicator::CopyTask"*, %"class.olb::BlockCommunicator::CopyTask"*, %"class.olb::BlockCommunicator::CopyTask"* }
%"class.olb::BlockCommunicator::CopyTask" = type { %"class.std::vector.18"*, %"class.std::vector.141"*, %"class.std::vector.141"*, %"class.std::basic_ostream.base"*, %"class.std::basic_ostream.base"*, %"class.std::unique_ptr.321" }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl" }
%"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::type_index, std::allocator<std::type_index>>::_Vector_impl_data" = type { %"struct.std::type_index"*, %"struct.std::type_index"*, %"struct.std::type_index"* }
%"struct.std::type_index" = type { %"class.std::type_info"* }
%"class.std::type_info" = type { i32 (...)**, i8* }
%"class.olb::SuperGeometryStatistics3D" = type { %"class.olb::SuperGeometry"*, i8, i32, %"class.std::map", %"class.std::map", %"class.std::map", %"class.olb::Vector.87", %"class.olb::Vector.87", %"class.olb::OstreamManager", %"class.olb::SuperGeometryStatistics3D"* }
%"class.std::shared_ptr.263" = type { %"class.std::__shared_ptr.264" }
%"class.std::__shared_ptr.264" = type { %"class.olb::CuboidGeometry3D"*, %"class.std::__shared_count" }
%"class.std::shared_ptr.266" = type { %"class.std::__shared_ptr.267" }
%"class.std::__shared_ptr.267" = type { %"class.olb::LoadBalancer"*, %"class.std::__shared_count" }
%"class.std::tuple.269" = type { %"struct.std::_Tuple_impl.270" }
%"struct.std::_Tuple_impl.270" = type { %"struct.std::_Head_base.271" }
%"struct.std::_Head_base.271" = type { %"class.std::shared_ptr.272" }
%"class.std::shared_ptr.272" = type { %"class.std::__shared_ptr.273" }
%"class.std::__shared_ptr.273" = type { %"class.olb::SuperLattice"*, %"class.std::__shared_count" }
%"class.olb::SuperLattice" = type <{ %"class.olb::SuperStructure", %"class.olb::BufferSerializable", %"class.std::vector.294", %"struct.std::array.300", %"class.std::map", i8, [7 x i8], %"class.std::__cxx11::list.255", %"class.olb::LatticeStatistics", i8, [7 x i8] }>
%"class.std::vector.294" = type { %"struct.std::_Vector_base.295" }
%"struct.std::_Vector_base.295" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::BlockLattice<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.299"*, %"class.std::unique_ptr.299"*, %"class.std::unique_ptr.299"* }
%"class.std::unique_ptr.299" = type { %"struct.std::__uniq_ptr_data.339" }
%"struct.std::__uniq_ptr_data.339" = type { %"class.std::__uniq_ptr_impl.340" }
%"class.std::__uniq_ptr_impl.340" = type { %"class.std::tuple.341" }
%"class.std::tuple.341" = type { %"struct.std::_Tuple_impl.342" }
%"struct.std::_Tuple_impl.342" = type { %"struct.std::_Head_base.345" }
%"struct.std::_Head_base.345" = type { %"class.olb::BlockLattice"* }
%"class.olb::BlockLattice" = type { %"class.std::basic_ostream.base", %"class.olb::BlockStructureD", %"class.std::basic_ostream.base", i32, %"class.std::map", %"class.std::vector.351", %"class.olb::LatticeStatistics"* }
%"class.std::vector.351" = type { %"struct.std::_Vector_base.352" }
%"struct.std::_Vector_base.352" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>, std::allocator<std::unique_ptr<olb::PostProcessor3D<double, olb::descriptors::D3Q19<olb::descriptors::FORCE>>>>>::_Vector_impl_data" = type { %"class.std::unique_ptr.356"*, %"class.std::unique_ptr.356"*, %"class.std::unique_ptr.356"* }
%"class.std::unique_ptr.356" = type { %"struct.std::__uniq_ptr_data.357" }
%"struct.std::__uniq_ptr_data.357" = type { %"class.std::__uniq_ptr_impl.358" }
%"class.std::__uniq_ptr_impl.358" = type { %"class.std::tuple.359" }
%"class.std::tuple.359" = type { %"struct.std::_Tuple_impl.360" }
%"struct.std::_Tuple_impl.360" = type { %"struct.std::_Head_base.363" }
%"struct.std::_Head_base.363" = type { %"class.olb::PostProcessor3D"* }
%"class.olb::PostProcessor3D" = type { i32 (...)**, i32, %"class.std::__cxx11::basic_string" }
%"struct.std::array.300" = type { [7 x %"class.std::unique_ptr.301"] }
%"class.std::unique_ptr.301" = type { %"struct.std::__uniq_ptr_data.302" }
%"struct.std::__uniq_ptr_data.302" = type { %"class.std::__uniq_ptr_impl.303" }
%"class.std::__uniq_ptr_impl.303" = type { %"class.std::tuple.304" }
%"class.std::tuple.304" = type { %"struct.std::_Tuple_impl.305" }
%"struct.std::_Tuple_impl.305" = type { %"struct.std::_Head_base.308" }
%"struct.std::_Head_base.308" = type { %"class.olb::SuperCommunicator.309"* }
%"class.olb::SuperCommunicator.309" = type <{ %"class.olb::SuperLattice"*, %"class.std::vector.284", %"class.std::vector.289", %"class.std::vector.18", %"class.std::map", i8, i8, [6 x i8] }>
%"class.olb::LatticeStatistics" = type <{ i32, i32, %"class.olb::OstreamManager", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", i64, %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", %"class.std::vector.8", i64, i64, i8, [7 x i8] }>
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { double*, double*, double* }
%"class.std::unique_ptr.275" = type { %"struct.std::__uniq_ptr_data.276" }
%"struct.std::__uniq_ptr_data.276" = type { %"class.std::__uniq_ptr_impl.277" }
%"class.std::__uniq_ptr_impl.277" = type { %"class.std::tuple.278" }
%"class.std::tuple.278" = type { %"struct.std::_Tuple_impl.279" }
%"struct.std::_Tuple_impl.279" = type { %"struct.std::_Head_base.282" }
%"struct.std::_Head_base.282" = type { %"class.olb::util::Timer"* }
%"class.olb::util::Timer" = type { %"class.olb::OstreamManager", double, double, double, i64, i64, i64, i64*, %struct.timeval, %struct.timeval, %struct.timeval, %struct.timeval, double, i32, i32, i64, i32, i32, i32, double, double, double, double, double, double, double, double, double }
%struct.timeval = type { i64, i64 }
%"struct.std::_Rb_tree_key_compare" = type { %"class.std::ios_base::Init" }
%"class.std::ios_base::Init" = type { i8 }

$_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv = comdat any

$_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv = comdat any

$_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = comdat any

$_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = comdat any

@_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE = internal constant { [7 x i8*] } { [7 x i8*] [i8* null, i8* undef, i8* undef, i8* undef, i8* bitcast (void (%"class.std::_Sp_counted_ptr_inplace"*)* @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv to i8*), i8* undef, i8* undef] }, comdat
@_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE = internal constant { [21 x i8*] } { [21 x i8*] [i8* null, i8* undef, i8* bitcast (void (%"class.olb::LBSolver"*)* @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv to i8*), i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef, i8* undef] }, comdat

; Function Attrs: nofree
declare i8* @_Znwm(i64) local_unnamed_addr #0

declare double @_Z17__enzyme_autodiffPv(i8*) local_unnamed_addr

; Function Attrs: nofree
define internal double @_Z9Callable5v() #0 personality i8* undef {
bb:
  %i4 = tail call i8* @_Znwm(i64 0)
  %i6 = bitcast i8* %i4 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [7 x i8*] }, { [7 x i8*] }* @_ZTVSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i6, align 8
  %0 = bitcast i8* %i4 to %"class.std::_Sp_counted_ptr_inplace"*
  tail call void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* %0)
  ret double 0.000000e+00
}

; Function Attrs: nofree nosync nounwind readonly
define internal void @_ZN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_E10initializeEv(%"class.olb::LBSolver"* nocapture %arg) #1 comdat personality i8* undef {
bb:
  %i44 = getelementptr inbounds %"class.olb::LBSolver", %"class.olb::LBSolver"* %arg, i64 0, i32 2, i32 0, i32 0
  %i66 = load %"class.olb::SuperGeometry"*, %"class.olb::SuperGeometry"** %i44, align 8
  %i66.idx = getelementptr %"class.olb::SuperGeometry", %"class.olb::SuperGeometry"* %i66, i64 0, i32 1, i32 0, i32 0, i32 0, i32 0
  %i66.idx.val = load %"class.std::unique_ptr.65"*, %"class.std::unique_ptr.65"** %i66.idx, align 8
  tail call fastcc void @_ZN3olb13SuperGeometryIdLj3EE10innerCleanEb(%"class.std::unique_ptr.65"* %i66.idx.val)
  ret void
}

; Function Attrs: nofree nosync nounwind readonly
define internal fastcc void @_ZN3olb13SuperGeometryIdLj3EE10innerCleanEb(%"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val) unnamed_addr #1 personality i32 (...)* undef {
bb:
  %i61.i = alloca %"class.olb::Vector.210", align 4
  %i13 = icmp eq %"class.std::unique_ptr.65"* %arg.0.1.0.0.0.0.val, null
  br i1 %i13, label %bb25, label %bb76.preheader

bb76.preheader:                                   ; preds = %bb
  %0 = bitcast %"class.olb::Vector.210"* %i61.i to i8*
  br label %bb76

bb25:                                             ; preds = %bb
  ret void

bb76:                                             ; preds = %bb76.preheader, %_ZZN3olb13BlockGeometryIdLj3EE10innerCleanEbENKUlNS_6VectorIiLj3EEEE_clES3_.exit
  call void @llvm.lifetime.start.p0i8(i64 12, i8* nonnull %0)
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %bb76
  %index = phi i64 [ 0, %bb76 ], [ %index.next, %vector.body ]
  %index.next = add nuw i64 %index, 4
  %1 = icmp eq i64 %index, 0
  br i1 %1, label %middle.block, label %vector.body, !llvm.loop !0

middle.block:                                     ; preds = %vector.body
  %2 = getelementptr inbounds %"class.olb::Vector.210", %"class.olb::Vector.210"* %i61.i, i64 0, i32 0, i32 0, i64 %index
  %3 = bitcast i32* %2 to <4 x i32>*
  %wide.load.le = load <4 x i32>, <4 x i32>* %3, align 4
  %4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1>
  %shift = shufflevector <4 x i1> %4, <4 x i1> poison, <4 x i32> <i32 undef, i32 undef, i32 3, i32 undef>
  %5 = and <4 x i1> %4, %shift
  %i158.i = extractelement <4 x i1> %5, i64 2
  br i1 %i158.i, label %bb164.i, label %_ZZN3olb13BlockGeometryIdLj3EE10innerCleanEbENKUlNS_6VectorIiLj3EEEE_clES3_.exit

bb164.i:                                          ; preds = %middle.block, %bb164.i
  br label %bb164.i

_ZZN3olb13BlockGeometryIdLj3EE10innerCleanEbENKUlNS_6VectorIiLj3EEEE_clES3_.exit: ; preds = %middle.block
  call void @llvm.lifetime.end.p0i8(i64 12, i8* nonnull %0)
  br label %bb76
}

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
define internal void @_ZNSt23_Sp_counted_ptr_inplaceI20TestFlowSolverOptiADIdESaIS1_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv(%"class.std::_Sp_counted_ptr_inplace"* nocapture %arg) #2 comdat personality i32 (...)* undef {
bb:
  %i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0
  %i.i = bitcast %"struct.__gnu_cxx::__aligned_buffer"* %i to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ({ [21 x i8*] }, { [21 x i8*] }* @_ZTVN3olb8LBSolverIdNS_4meta3mapIJNS_5names4OptiE18TestFlowDirectOptiIdENS3_6OutputENS_10parameters10OutputBaseIdEENS3_7ResultsENS8_17DirectOptiResultsIdEENS3_10SimulationENS8_13XmlSimulationIdNS2_IJNS3_12NavierStokesENS_11descriptors5D3Q19IJNSH_5FORCEEEEEEEEEEEEESL_EE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %i.i, align 8
  %i1.i = getelementptr inbounds %"class.std::_Sp_counted_ptr_inplace", %"class.std::_Sp_counted_ptr_inplace"* %arg, i64 0, i32 1, i32 0, i32 0, i32 0, i64 992
  %0 = bitcast i8* %i1.i to %"class.olb::util::Timer"**
  %i2.i = load %"class.olb::util::Timer"*, %"class.olb::util::Timer"** %0, align 8
  %i7.i = getelementptr inbounds %"class.olb::util::Timer", %"class.olb::util::Timer"* %i2.i, i64 0, i32 0, i32 1, i32 0, i32 0, i32 0
  store i32 (...)** null, i32 (...)*** %i7.i, align 8
  ret void
}

define i32 @main() local_unnamed_addr personality i8* undef {
  %i1.i = tail call double @_Z17__enzyme_autodiffPv(i8* bitcast (double ()* @_Z9Callable5v to i8*))
  ret i32 0
}

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #3

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #3

attributes #0 = { nofree }
attributes #1 = { nofree nosync nounwind readonly }
attributes #2 = { mustprogress nofree norecurse nosync nounwind willreturn }
attributes #3 = { argmemonly nofree nosync nounwind willreturn }

!0 = distinct !{!0, !1, !2, !3}
!1 = !{!"llvm.loop.mustprogress"}
!2 = !{!"llvm.loop.unroll.disable"}
!3 = !{!"llvm.loop.isvectorized", i32 1}
wsmoses commented 2 years ago
define internal void @err() {
bb:
  %a3 = alloca <4 x i32>, align 4
  %wide.load.le = load <4 x i32>, <4 x i32>* %a3, align 4
  %a4 = icmp slt <4 x i32> %wide.load.le, <i32 1, i32 1, i32 1, i32 1>
  %shift = shufflevector <4 x i1> %a4, <4 x i1> poison, <4 x i32> <i32 undef, i32 undef, i32 3, i32 undef>
  ret void
}

declare i8* @_Z17__enzyme_virtualreversePv(...)
define i32 @main() {
  %i1.i = tail call i8* (...) @_Z17__enzyme_virtualreversePv(void ()* @err)
  ret i32 0
}