; LLVM IR from pantor/ruckig :: examples (06_stop)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.ruckig::Ruckig" = type { %"class.ruckig::InputParameter", i8, %"class.ruckig::Calculator", i64, i64, double }
%"class.ruckig::InputParameter" = type { i64, i32, i32, i32, %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"class.std::optional", %"class.std::optional", %"class.std::vector", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional", %"class.std::optional", %"struct.std::array.10", i8, %"class.std::optional.11", %"class.std::optional.20", [4 x i8], %"class.std::optional.29", %"class.std::optional.37", %"class.std::optional.29" }
%"struct.std::array" = type { [3 x double] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::optional.0" = type { %"struct.std::_Optional_base.1" }
%"struct.std::_Optional_base.1" = type { %"struct.std::_Optional_payload.3" }
%"struct.std::_Optional_payload.3" = type { %"struct.std::_Optional_payload.base.7", [7 x i8] }
%"struct.std::_Optional_payload.base.7" = type { %"struct.std::_Optional_payload_base.base.6" }
%"struct.std::_Optional_payload_base.base.6" = type <{ %"union.std::_Optional_payload_base<std::vector<std::array<double, 3>>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::vector<std::array<double, 3>>>::_Storage" = type { %"class.std::vector" }
%"class.std::optional" = type { %"struct.std::_Optional_base" }
%"struct.std::_Optional_base" = type { %"struct.std::_Optional_payload" }
%"struct.std::_Optional_payload" = type { %"struct.std::_Optional_payload_base.base", [7 x i8] }
%"struct.std::_Optional_payload_base.base" = type <{ %"union.std::_Optional_payload_base<std::array<double, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<double, 3>>::_Storage" = type { %"struct.std::array" }
%"struct.std::array.10" = type { [3 x i8] }
%"class.std::optional.11" = type { %"struct.std::_Optional_base.12" }
%"struct.std::_Optional_base.12" = type { %"struct.std::_Optional_payload.14" }
%"struct.std::_Optional_payload.14" = type { %"struct.std::_Optional_payload_base.base.17", [3 x i8] }
%"struct.std::_Optional_payload_base.base.17" = type <{ %"union.std::_Optional_payload_base<std::array<ruckig::ControlInterface, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<ruckig::ControlInterface, 3>>::_Storage" = type { %"struct.std::array.16" }
%"struct.std::array.16" = type { [3 x i32] }
%"class.std::optional.20" = type { %"struct.std::_Optional_base.21" }
%"struct.std::_Optional_base.21" = type { %"struct.std::_Optional_payload.23" }
%"struct.std::_Optional_payload.23" = type { %"struct.std::_Optional_payload_base.base.26", [3 x i8] }
%"struct.std::_Optional_payload_base.base.26" = type <{ %"union.std::_Optional_payload_base<std::array<ruckig::Synchronization, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<ruckig::Synchronization, 3>>::_Storage" = type { %"struct.std::array.25" }
%"struct.std::array.25" = type { [3 x i32] }
%"class.std::optional.37" = type { %"struct.std::_Optional_base.38" }
%"struct.std::_Optional_base.38" = type { %"struct.std::_Optional_payload.40" }
%"struct.std::_Optional_payload.40" = type { %"struct.std::_Optional_payload.base.49", [7 x i8] }
%"struct.std::_Optional_payload.base.49" = type { %"struct.std::_Optional_payload_base.base.48" }
%"struct.std::_Optional_payload_base.base.48" = type <{ %"union.std::_Optional_payload_base<std::vector<double>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::vector<double>>::_Storage" = type { %"class.std::vector.43" }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = 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 { ptr, ptr, ptr }
%"class.std::optional.29" = type { %"struct.std::_Optional_base.30" }
%"struct.std::_Optional_base.30" = type { %"struct.std::_Optional_payload.32" }
%"struct.std::_Optional_payload.32" = type { %"struct.std::_Optional_payload_base.base.34", [7 x i8] }
%"struct.std::_Optional_payload_base.base.34" = type <{ %"union.std::_Optional_payload_base<double>::_Storage", i8 }>
%"union.std::_Optional_payload_base<double>::_Storage" = type { double }
%"class.ruckig::Calculator" = type { %"class.ruckig::TargetCalculator" }
%"class.ruckig::TargetCalculator" = type { %"struct.std::array", %"struct.std::array", %"struct.std::array.52", %"struct.std::array.53", %"struct.std::array.54", %"struct.std::array", %"struct.std::array", %"struct.std::array.16", %"struct.std::array.25", i64 }
%"struct.std::array.52" = type { [10 x double] }
%"struct.std::array.53" = type { [10 x i64] }
%"struct.std::array.54" = type { [3 x %"class.ruckig::Block"] }
%"class.ruckig::Block" = type { %"class.ruckig::Profile", double, %"class.std::optional.58", %"class.std::optional.58" }
%"class.ruckig::Profile" = type <{ %"struct.std::array.55", %"struct.std::array.55", %"struct.std::array.55", %"struct.std::array.56", %"struct.std::array.56", %"struct.std::array.56", %"class.ruckig::BrakeProfile", %"class.ruckig::BrakeProfile", double, double, double, i32, i32, i32, [4 x i8] }>
%"struct.std::array.55" = type { [7 x double] }
%"struct.std::array.56" = type { [8 x double] }
%"class.ruckig::BrakeProfile" = type { double, %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57" }
%"struct.std::array.57" = type { [2 x double] }
%"class.std::optional.58" = type { %"struct.std::_Optional_base.59" }
%"struct.std::_Optional_base.59" = type { %"struct.std::_Optional_payload.61" }
%"struct.std::_Optional_payload.61" = type { %"struct.std::_Optional_payload_base.base.63", [7 x i8] }
%"struct.std::_Optional_payload_base.base.63" = type <{ %"union.std::_Optional_payload_base<ruckig::Block::Interval>::_Storage", i8 }>
%"union.std::_Optional_payload_base<ruckig::Block::Interval>::_Storage" = type { %"struct.ruckig::Block::Interval" }
%"struct.ruckig::Block::Interval" = type { double, double, %"class.ruckig::Profile" }
%"class.ruckig::OutputParameter" = type { i64, %"class.ruckig::Trajectory", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", double, i64, i8, i8, i8, double }
%"class.ruckig::Trajectory" = type { %"struct.std::array.66", double, %"struct.std::array.68", %"struct.std::array", %"struct.std::array.69", i64, i64 }
%"struct.std::array.66" = type { [1 x %"struct.std::array.67"] }
%"struct.std::array.67" = type { [3 x %"class.ruckig::Profile"] }
%"struct.std::array.68" = type { [1 x double] }
%"struct.std::array.69" = type { [3 x %"struct.ruckig::Bound"] }
%"struct.ruckig::Bound" = type { double, double, double, double }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@constinit = external hidden constant [3 x double], align 8
@constinit.1 = external hidden constant [3 x double], align 8
@constinit.2 = external hidden constant [3 x double], align 8
@constinit.3 = external hidden constant [3 x double], align 8
@constinit.4 = external hidden constant [3 x double], align 8
@constinit.5 = external hidden constant [3 x double], align 8
@constinit.6 = external hidden constant [3 x double], align 8
@constinit.7 = external hidden constant [3 x double], align 8
@constinit.8 = external hidden constant [3 x double], align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@constinit.11 = external hidden constant [3 x double], align 8
@constinit.12 = external hidden constant [3 x double], align 8
@constinit.13 = external hidden constant [3 x double], align 8
@.str.14 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca i32, align 4
  %2 = alloca %"class.ruckig::Ruckig", align 8
  %3 = alloca %"class.ruckig::InputParameter", align 8
  %4 = alloca ptr, align 8
  %5 = alloca i32, align 4
  %6 = alloca %"class.ruckig::OutputParameter", align 8
  %7 = alloca %"struct.std::array", align 8
  %8 = alloca %"struct.std::array", align 8
  %9 = alloca %"struct.std::array", align 8
  %10 = alloca %"struct.std::array", align 8
  %11 = alloca %"struct.std::array", align 8
  %12 = alloca %"struct.std::array", align 8
  %13 = alloca %"struct.std::array", align 8
  %14 = alloca %"struct.std::array", align 8
  %15 = alloca %"struct.std::array", align 8
  %16 = alloca i8, align 1
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"struct.std::array", align 8
  %19 = alloca %"struct.std::array", align 8
  %20 = alloca %"struct.std::array", align 8
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 6392, ptr %2) #8
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEd(ptr noundef nonnull align 8 dereferenceable(6392) %2, double noundef 1.000000e-02)
  call void @llvm.lifetime.start.p0(i64 720, ptr %3) #8
  invoke void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(720) %3)
          to label %21 unwind label %81

21:                                               ; preds = %0
  call void @llvm.lifetime.start.p0(i64 2016, ptr %6) #8
  invoke void @_ZN6ruckig15OutputParameterILm3ENS_14StandardVectorEEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(2016) %6)
          to label %22 unwind label %85

22:                                               ; preds = %21
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #8
  %23 = getelementptr inbounds %"struct.std::array", ptr %7, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %23, ptr align 8 @constinit, i64 24, i1 false), !tbaa.struct !5
  %24 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %24, ptr align 8 %7, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %8) #8
  %25 = getelementptr inbounds %"struct.std::array", ptr %8, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 @constinit.1, i64 24, i1 false), !tbaa.struct !5
  %26 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %26, ptr align 8 %8, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %9) #8
  %27 = getelementptr inbounds %"struct.std::array", ptr %9, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %27, ptr align 8 @constinit.2, i64 24, i1 false), !tbaa.struct !5
  %28 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 6
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %28, ptr align 8 %9, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #8
  %29 = getelementptr inbounds %"struct.std::array", ptr %10, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %29, ptr align 8 @constinit.3, i64 24, i1 false), !tbaa.struct !5
  %30 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %30, ptr align 8 %10, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #8
  %31 = getelementptr inbounds %"struct.std::array", ptr %11, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %31, ptr align 8 @constinit.4, i64 24, i1 false), !tbaa.struct !5
  %32 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %11, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #8
  %33 = getelementptr inbounds %"struct.std::array", ptr %12, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %33, ptr align 8 @constinit.5, i64 24, i1 false), !tbaa.struct !5
  %34 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %12, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #8
  %35 = getelementptr inbounds %"struct.std::array", ptr %13, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %35, ptr align 8 @constinit.6, i64 24, i1 false), !tbaa.struct !5
  %36 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %13, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #8
  %37 = getelementptr inbounds %"struct.std::array", ptr %14, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 @constinit.7, i64 24, i1 false), !tbaa.struct !5
  %38 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 11
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %38, ptr align 8 %14, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #8
  %39 = getelementptr inbounds %"struct.std::array", ptr %15, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %39, ptr align 8 @constinit.8, i64 24, i1 false), !tbaa.struct !5
  %40 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %15, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  %41 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str)
          to label %42 unwind label %85

42:                                               ; preds = %22
  %43 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %44 unwind label %85

44:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #8
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %45

45:                                               ; preds = %103, %44
  %46 = invoke noundef i32 @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EE6updateERKNS_14InputParameterILm3ES1_EERNS_15OutputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(6392) %2, ptr noundef nonnull align 8 dereferenceable(720) %3, ptr noundef nonnull align 8 dereferenceable(2016) %6)
          to label %47 unwind label %89

47:                                               ; preds = %45
  %48 = icmp eq i32 %46, 0
  br i1 %48, label %49, label %104

49:                                               ; preds = %47
  %50 = getelementptr inbounds %"class.ruckig::OutputParameter", ptr %6, i32 0, i32 6
  %51 = load double, ptr %50, align 8, !tbaa !11
  %52 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, double noundef %51)
          to label %53 unwind label %89

53:                                               ; preds = %49
  %54 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef @.str.9)
          to label %55 unwind label %89

55:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  %56 = getelementptr inbounds %"class.ruckig::OutputParameter", ptr %6, i32 0, i32 2
  invoke void @_ZN6ruckig4joinISt5arrayIdLm3EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_b(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %56, i1 noundef zeroext false)
          to label %57 unwind label %93

57:                                               ; preds = %55
  %58 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %59 unwind label %97

59:                                               ; preds = %57
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %61 unwind label %97

61:                                               ; preds = %59
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  %62 = getelementptr inbounds %"class.ruckig::OutputParameter", ptr %6, i32 0, i32 6
  %63 = load double, ptr %62, align 8, !tbaa !11
  %64 = fcmp oge double %63, 1.000000e+00
  br i1 %64, label %65, label %102

65:                                               ; preds = %61
  %66 = load i8, ptr %16, align 1, !tbaa !9, !range !20, !noundef !21
  %67 = trunc i8 %66 to i1
  br i1 %67, label %102, label %68

68:                                               ; preds = %65
  %69 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.10)
          to label %70 unwind label %89

70:                                               ; preds = %68
  %71 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %69, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %72 unwind label %89

72:                                               ; preds = %70
  store i8 1, ptr %16, align 1, !tbaa !9
  %73 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 1
  store i32 1, ptr %73, align 8, !tbaa !22
  %74 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 2
  store i32 3, ptr %74, align 4, !tbaa !59
  call void @llvm.lifetime.start.p0(i64 24, ptr %18) #8
  call void @llvm.memset.p0.i64(ptr align 8 %18, i8 0, i64 24, i1 false)
  %75 = getelementptr inbounds %"struct.std::array", ptr %18, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %75, ptr align 8 @constinit.11, i64 24, i1 false), !tbaa.struct !5
  %76 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %76, ptr align 8 %18, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %19) #8
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 24, i1 false)
  %77 = getelementptr inbounds %"struct.std::array", ptr %19, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %77, ptr align 8 @constinit.12, i64 24, i1 false), !tbaa.struct !5
  %78 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %78, ptr align 8 %19, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %20) #8
  %79 = getelementptr inbounds %"struct.std::array", ptr %20, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %79, ptr align 8 @constinit.13, i64 24, i1 false), !tbaa.struct !5
  %80 = getelementptr inbounds %"class.ruckig::InputParameter", ptr %3, i32 0, i32 12
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %80, ptr align 8 %20, i64 24, i1 false), !tbaa.struct !5
  call void @llvm.lifetime.end.p0(i64 24, ptr %20) #8
  br label %102

81:                                               ; preds = %0
  %82 = landingpad { ptr, i32 }
          cleanup
  %83 = extractvalue { ptr, i32 } %82, 0
  store ptr %83, ptr %4, align 8
  %84 = extractvalue { ptr, i32 } %82, 1
  store i32 %84, ptr %5, align 4
  br label %119

85:                                               ; preds = %42, %22, %21
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %4, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %5, align 4
  br label %118

89:                                               ; preds = %113, %111, %109, %106, %104, %102, %70, %68, %53, %49, %45
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %4, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %5, align 4
  br label %117

93:                                               ; preds = %55
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %4, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %5, align 4
  br label %101

97:                                               ; preds = %59, %57
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %4, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %5, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br label %101

101:                                              ; preds = %97, %93
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %117

102:                                              ; preds = %72, %65, %61
  invoke void @_ZNK6ruckig15OutputParameterILm3ENS_14StandardVectorEE13pass_to_inputERNS_14InputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(2016) %6, ptr noundef nonnull align 8 dereferenceable(720) %3)
          to label %103 unwind label %89

103:                                              ; preds = %102
  br label %45, !llvm.loop !60

104:                                              ; preds = %47
  %105 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
          to label %106 unwind label %89

106:                                              ; preds = %104
  %107 = getelementptr inbounds %"class.ruckig::OutputParameter", ptr %6, i32 0, i32 1
  %108 = invoke noundef double @_ZNK6ruckig10TrajectoryILm3ENS_14StandardVectorEE12get_durationEv(ptr noundef nonnull align 8 dereferenceable(1880) %107)
          to label %109 unwind label %89

109:                                              ; preds = %106
  %110 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %105, double noundef %108)
          to label %111 unwind label %89

111:                                              ; preds = %109
  %112 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %110, ptr noundef @.str.15)
          to label %113 unwind label %89

113:                                              ; preds = %111
  %114 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %112, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %115 unwind label %89

115:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 2016, ptr %6) #8
  call void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720) %3) #8
  call void @llvm.lifetime.end.p0(i64 720, ptr %3) #8
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392) %2) #8
  call void @llvm.lifetime.end.p0(i64 6392, ptr %2) #8
  %116 = load i32, ptr %1, align 4
  ret i32 %116

117:                                              ; preds = %101, %89
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #8
  br label %118

118:                                              ; preds = %117, %85
  call void @llvm.lifetime.end.p0(i64 2016, ptr %6) #8
  call void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720) %3) #8
  br label %119

119:                                              ; preds = %118, %81
  call void @llvm.lifetime.end.p0(i64 720, ptr %3) #8
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392) %2) #8
  call void @llvm.lifetime.end.p0(i64 6392, ptr %2) #8
  br label %120

120:                                              ; preds = %119
  %121 = load ptr, ptr %4, align 8
  %122 = load i32, ptr %5, align 4
  %123 = insertvalue { ptr, i32 } poison, ptr %121, 0
  %124 = insertvalue { ptr, i32 } %123, i32 %122, 1
  resume { ptr, i32 } %124
}

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

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EE6updateERKNS_14InputParameterILm3ES1_EERNS_15OutputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(6392), ptr noundef nonnull align 8 dereferenceable(720), ptr noundef nonnull align 8 dereferenceable(2016)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6ruckig4joinISt5arrayIdLm3EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_b(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) #4

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #5 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #6

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK6ruckig15OutputParameterILm3ENS_14StandardVectorEE13pass_to_inputERNS_14InputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(2016), ptr noundef nonnull align 8 dereferenceable(720)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK6ruckig10TrajectoryILm3ENS_14StandardVectorEE12get_durationEv(ptr noundef nonnull align 8 dereferenceable(1880)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392)) unnamed_addr #7 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{i64 0, i64 24, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !16, i64 1984}
!12 = !{!"_ZTSN6ruckig15OutputParameterILm3ENS_14StandardVectorEEE", !13, i64 0, !14, i64 8, !18, i64 1888, !18, i64 1912, !18, i64 1936, !18, i64 1960, !16, i64 1984, !13, i64 1992, !10, i64 2000, !10, i64 2001, !10, i64 2002, !16, i64 2008}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSN6ruckig10TrajectoryILm3ENS_14StandardVectorEEE", !15, i64 0, !16, i64 1728, !17, i64 1736, !18, i64 1744, !19, i64 1768, !13, i64 1864, !13, i64 1872}
!15 = !{!"_ZTSSt5arrayIS_IN6ruckig7ProfileELm3EELm1EE", !7, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = !{!"_ZTSSt5arrayIdLm1EE", !7, i64 0}
!18 = !{!"_ZTSSt5arrayIdLm3EE", !7, i64 0}
!19 = !{!"_ZTSSt5arrayIN6ruckig5BoundELm3EE", !7, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!23, !24, i64 8}
!23 = !{!"_ZTSN6ruckig14InputParameterILm3ENS_14StandardVectorEEE", !13, i64 0, !24, i64 8, !25, i64 12, !26, i64 16, !18, i64 24, !18, i64 48, !18, i64 72, !18, i64 96, !18, i64 120, !18, i64 144, !18, i64 168, !18, i64 192, !18, i64 216, !27, i64 240, !27, i64 272, !31, i64 304, !36, i64 328, !36, i64 360, !36, i64 392, !36, i64 424, !36, i64 456, !36, i64 488, !36, i64 520, !27, i64 552, !27, i64 584, !41, i64 616, !42, i64 620, !46, i64 636, !50, i64 656, !54, i64 672, !50, i64 704}
!24 = !{!"_ZTSN6ruckig16ControlInterfaceE", !7, i64 0}
!25 = !{!"_ZTSN6ruckig15SynchronizationE", !7, i64 0}
!26 = !{!"_ZTSN6ruckig22DurationDiscretizationE", !7, i64 0}
!27 = !{!"_ZTSSt8optionalISt5arrayIdLm3EEE", !28, i64 0}
!28 = !{!"_ZTSSt14_Optional_baseISt5arrayIdLm3EELb1ELb1EE", !29, i64 0}
!29 = !{!"_ZTSSt17_Optional_payloadISt5arrayIdLm3EELb1ELb1ELb1EE", !30, i64 0}
!30 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIdLm3EEE", !7, i64 0, !10, i64 24}
!31 = !{!"_ZTSSt6vectorISt5arrayIdLm3EESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE17_Vector_impl_dataE", !35, i64 0, !35, i64 8, !35, i64 16}
!35 = !{!"any pointer", !7, i64 0}
!36 = !{!"_ZTSSt8optionalISt6vectorISt5arrayIdLm3EESaIS2_EEE", !37, i64 0}
!37 = !{!"_ZTSSt14_Optional_baseISt6vectorISt5arrayIdLm3EESaIS2_EELb0ELb0EE", !38, i64 0}
!38 = !{!"_ZTSSt17_Optional_payloadISt6vectorISt5arrayIdLm3EESaIS2_EELb0ELb0ELb0EE", !39, i64 0}
!39 = !{!"_ZTSSt17_Optional_payloadISt6vectorISt5arrayIdLm3EESaIS2_EELb1ELb0ELb0EE", !40, i64 0}
!40 = !{!"_ZTSSt22_Optional_payload_baseISt6vectorISt5arrayIdLm3EESaIS2_EEE", !7, i64 0, !10, i64 24}
!41 = !{!"_ZTSSt5arrayIbLm3EE", !7, i64 0}
!42 = !{!"_ZTSSt8optionalISt5arrayIN6ruckig16ControlInterfaceELm3EEE", !43, i64 0}
!43 = !{!"_ZTSSt14_Optional_baseISt5arrayIN6ruckig16ControlInterfaceELm3EELb1ELb1EE", !44, i64 0}
!44 = !{!"_ZTSSt17_Optional_payloadISt5arrayIN6ruckig16ControlInterfaceELm3EELb1ELb1ELb1EE", !45, i64 0}
!45 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIN6ruckig16ControlInterfaceELm3EEE", !7, i64 0, !10, i64 12}
!46 = !{!"_ZTSSt8optionalISt5arrayIN6ruckig15SynchronizationELm3EEE", !47, i64 0}
!47 = !{!"_ZTSSt14_Optional_baseISt5arrayIN6ruckig15SynchronizationELm3EELb1ELb1EE", !48, i64 0}
!48 = !{!"_ZTSSt17_Optional_payloadISt5arrayIN6ruckig15SynchronizationELm3EELb1ELb1ELb1EE", !49, i64 0}
!49 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIN6ruckig15SynchronizationELm3EEE", !7, i64 0, !10, i64 12}
!50 = !{!"_ZTSSt8optionalIdE", !51, i64 0}
!51 = !{!"_ZTSSt14_Optional_baseIdLb1ELb1EE", !52, i64 0}
!52 = !{!"_ZTSSt17_Optional_payloadIdLb1ELb1ELb1EE", !53, i64 0}
!53 = !{!"_ZTSSt22_Optional_payload_baseIdE", !7, i64 0, !10, i64 8}
!54 = !{!"_ZTSSt8optionalISt6vectorIdSaIdEEE", !55, i64 0}
!55 = !{!"_ZTSSt14_Optional_baseISt6vectorIdSaIdEELb0ELb0EE", !56, i64 0}
!56 = !{!"_ZTSSt17_Optional_payloadISt6vectorIdSaIdEELb0ELb0ELb0EE", !57, i64 0}
!57 = !{!"_ZTSSt17_Optional_payloadISt6vectorIdSaIdEELb1ELb0ELb0EE", !58, i64 0}
!58 = !{!"_ZTSSt22_Optional_payload_baseISt6vectorIdSaIdEEE", !7, i64 0, !10, i64 24}
!59 = !{!23, !25, i64 12}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%"class.ruckig::Ruckig" = type { %"class.ruckig::InputParameter", i8, %"class.ruckig::Calculator", i64, i64, double }
%"class.ruckig::InputParameter" = type { i64, i32, i32, i32, %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"class.std::optional", %"class.std::optional", %"class.std::vector", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional.0", %"class.std::optional", %"class.std::optional", %"struct.std::array.10", i8, %"class.std::optional.11", %"class.std::optional.20", [4 x i8], %"class.std::optional.29", %"class.std::optional.37", %"class.std::optional.29" }
%"struct.std::array" = type { [3 x double] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::array<double, 3>, std::allocator<std::array<double, 3>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::optional.0" = type { %"struct.std::_Optional_base.1" }
%"struct.std::_Optional_base.1" = type { %"struct.std::_Optional_payload.3" }
%"struct.std::_Optional_payload.3" = type { %"struct.std::_Optional_payload.base.7", [7 x i8] }
%"struct.std::_Optional_payload.base.7" = type { %"struct.std::_Optional_payload_base.base.6" }
%"struct.std::_Optional_payload_base.base.6" = type <{ %"union.std::_Optional_payload_base<std::vector<std::array<double, 3>>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::vector<std::array<double, 3>>>::_Storage" = type { %"class.std::vector" }
%"class.std::optional" = type { %"struct.std::_Optional_base" }
%"struct.std::_Optional_base" = type { %"struct.std::_Optional_payload" }
%"struct.std::_Optional_payload" = type { %"struct.std::_Optional_payload_base.base", [7 x i8] }
%"struct.std::_Optional_payload_base.base" = type <{ %"union.std::_Optional_payload_base<std::array<double, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<double, 3>>::_Storage" = type { %"struct.std::array" }
%"struct.std::array.10" = type { [3 x i8] }
%"class.std::optional.11" = type { %"struct.std::_Optional_base.12" }
%"struct.std::_Optional_base.12" = type { %"struct.std::_Optional_payload.14" }
%"struct.std::_Optional_payload.14" = type { %"struct.std::_Optional_payload_base.base.17", [3 x i8] }
%"struct.std::_Optional_payload_base.base.17" = type <{ %"union.std::_Optional_payload_base<std::array<ruckig::ControlInterface, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<ruckig::ControlInterface, 3>>::_Storage" = type { %"struct.std::array.16" }
%"struct.std::array.16" = type { [3 x i32] }
%"class.std::optional.20" = type { %"struct.std::_Optional_base.21" }
%"struct.std::_Optional_base.21" = type { %"struct.std::_Optional_payload.23" }
%"struct.std::_Optional_payload.23" = type { %"struct.std::_Optional_payload_base.base.26", [3 x i8] }
%"struct.std::_Optional_payload_base.base.26" = type <{ %"union.std::_Optional_payload_base<std::array<ruckig::Synchronization, 3>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::array<ruckig::Synchronization, 3>>::_Storage" = type { %"struct.std::array.25" }
%"struct.std::array.25" = type { [3 x i32] }
%"class.std::optional.37" = type { %"struct.std::_Optional_base.38" }
%"struct.std::_Optional_base.38" = type { %"struct.std::_Optional_payload.40" }
%"struct.std::_Optional_payload.40" = type { %"struct.std::_Optional_payload.base.49", [7 x i8] }
%"struct.std::_Optional_payload.base.49" = type { %"struct.std::_Optional_payload_base.base.48" }
%"struct.std::_Optional_payload_base.base.48" = type <{ %"union.std::_Optional_payload_base<std::vector<double>>::_Storage", i8 }>
%"union.std::_Optional_payload_base<std::vector<double>>::_Storage" = type { %"class.std::vector.43" }
%"class.std::vector.43" = type { %"struct.std::_Vector_base.44" }
%"struct.std::_Vector_base.44" = 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 { ptr, ptr, ptr }
%"class.std::optional.29" = type { %"struct.std::_Optional_base.30" }
%"struct.std::_Optional_base.30" = type { %"struct.std::_Optional_payload.32" }
%"struct.std::_Optional_payload.32" = type { %"struct.std::_Optional_payload_base.base.34", [7 x i8] }
%"struct.std::_Optional_payload_base.base.34" = type <{ %"union.std::_Optional_payload_base<double>::_Storage", i8 }>
%"union.std::_Optional_payload_base<double>::_Storage" = type { double }
%"class.ruckig::Calculator" = type { %"class.ruckig::TargetCalculator" }
%"class.ruckig::TargetCalculator" = type { %"struct.std::array", %"struct.std::array", %"struct.std::array.52", %"struct.std::array.53", %"struct.std::array.54", %"struct.std::array", %"struct.std::array", %"struct.std::array.16", %"struct.std::array.25", i64 }
%"struct.std::array.52" = type { [10 x double] }
%"struct.std::array.53" = type { [10 x i64] }
%"struct.std::array.54" = type { [3 x %"class.ruckig::Block"] }
%"class.ruckig::Block" = type { %"class.ruckig::Profile", double, %"class.std::optional.58", %"class.std::optional.58" }
%"class.ruckig::Profile" = type <{ %"struct.std::array.55", %"struct.std::array.55", %"struct.std::array.55", %"struct.std::array.56", %"struct.std::array.56", %"struct.std::array.56", %"class.ruckig::BrakeProfile", %"class.ruckig::BrakeProfile", double, double, double, i32, i32, i32, [4 x i8] }>
%"struct.std::array.55" = type { [7 x double] }
%"struct.std::array.56" = type { [8 x double] }
%"class.ruckig::BrakeProfile" = type { double, %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57", %"struct.std::array.57" }
%"struct.std::array.57" = type { [2 x double] }
%"class.std::optional.58" = type { %"struct.std::_Optional_base.59" }
%"struct.std::_Optional_base.59" = type { %"struct.std::_Optional_payload.61" }
%"struct.std::_Optional_payload.61" = type { %"struct.std::_Optional_payload_base.base.63", [7 x i8] }
%"struct.std::_Optional_payload_base.base.63" = type <{ %"union.std::_Optional_payload_base<ruckig::Block::Interval>::_Storage", i8 }>
%"union.std::_Optional_payload_base<ruckig::Block::Interval>::_Storage" = type { %"struct.ruckig::Block::Interval" }
%"struct.ruckig::Block::Interval" = type { double, double, %"class.ruckig::Profile" }
%"class.ruckig::OutputParameter" = type { i64, %"class.ruckig::Trajectory", %"struct.std::array", %"struct.std::array", %"struct.std::array", %"struct.std::array", double, i64, i8, i8, i8, double }
%"class.ruckig::Trajectory" = type { %"struct.std::array.66", double, %"struct.std::array.68", %"struct.std::array", %"struct.std::array.69", i64, i64 }
%"struct.std::array.66" = type { [1 x %"struct.std::array.67"] }
%"struct.std::array.67" = type { [3 x %"class.ruckig::Profile"] }
%"struct.std::array.68" = type { [1 x double] }
%"struct.std::array.69" = type { [3 x %"struct.ruckig::Bound"] }
%"struct.ruckig::Bound" = type { double, double, double, double }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }

@constinit = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.1 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.2 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.3 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.4 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.5 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.6 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.7 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.8 = external hidden local_unnamed_addr constant [3 x double], align 8
@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@constinit.11 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.12 = external hidden local_unnamed_addr constant [3 x double], align 8
@constinit.13 = external hidden local_unnamed_addr constant [3 x double], align 8
@.str.14 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %1 = alloca %"class.ruckig::Ruckig", align 8
  %2 = alloca %"class.ruckig::InputParameter", align 8
  %3 = alloca %"class.ruckig::OutputParameter", align 8
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 6392, ptr nonnull %1) #7
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEd(ptr noundef nonnull align 8 dereferenceable(6392) %1, double noundef 1.000000e-02)
  call void @llvm.lifetime.start.p0(i64 720, ptr nonnull %2) #7
  invoke void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(720) %2)
          to label %5 unwind label %45

5:                                                ; preds = %0
  call void @llvm.lifetime.start.p0(i64 2016, ptr nonnull %3) #7
  invoke void @_ZN6ruckig15OutputParameterILm3ENS_14StandardVectorEEC2ILm3ETnNSt9enable_ifIXgeT_Li1EEiE4typeELi0EEEv(ptr noundef nonnull align 8 dereferenceable(2016) %3)
          to label %6 unwind label %47

6:                                                ; preds = %5
  %7 = getelementptr inbounds i8, ptr %2, i64 24
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) @constinit, i64 24, i1 false), !tbaa.struct !5
  %8 = getelementptr inbounds i8, ptr %2, i64 48
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %8, ptr noundef nonnull align 8 dereferenceable(24) @constinit.1, i64 24, i1 false), !tbaa.struct !5
  %9 = getelementptr inbounds i8, ptr %2, i64 72
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) @constinit.2, i64 24, i1 false), !tbaa.struct !5
  %10 = getelementptr inbounds i8, ptr %2, i64 96
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) @constinit.3, i64 24, i1 false), !tbaa.struct !5
  %11 = getelementptr inbounds i8, ptr %2, i64 120
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) @constinit.4, i64 24, i1 false), !tbaa.struct !5
  %12 = getelementptr inbounds i8, ptr %2, i64 144
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) @constinit.5, i64 24, i1 false), !tbaa.struct !5
  %13 = getelementptr inbounds i8, ptr %2, i64 168
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) @constinit.6, i64 24, i1 false), !tbaa.struct !5
  %14 = getelementptr inbounds i8, ptr %2, i64 192
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) @constinit.7, i64 24, i1 false), !tbaa.struct !5
  %15 = getelementptr inbounds i8, ptr %2, i64 216
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) @constinit.8, i64 24, i1 false), !tbaa.struct !5
  %16 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str)
          to label %17 unwind label %47

17:                                               ; preds = %6
  %18 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.preheader unwind label %47

.preheader:                                       ; preds = %17
  %19 = getelementptr inbounds i8, ptr %3, i64 1984
  %20 = getelementptr inbounds i8, ptr %3, i64 1888
  %21 = getelementptr inbounds i8, ptr %2, i64 8
  %22 = getelementptr inbounds i8, ptr %2, i64 12
  br label %23

23:                                               ; preds = %.preheader, %54
  %.0 = phi i1 [ %.1, %54 ], [ false, %.preheader ]
  %24 = invoke noundef i32 @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EE6updateERKNS_14InputParameterILm3ES1_EERNS_15OutputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(6392) %1, ptr noundef nonnull align 8 dereferenceable(720) %2, ptr noundef nonnull align 8 dereferenceable(2016) %3)
          to label %25 unwind label %.loopexit

25:                                               ; preds = %23
  %26 = icmp eq i32 %24, 0
  br i1 %26, label %27, label %55

27:                                               ; preds = %25
  %28 = load double, ptr %19, align 8, !tbaa !9
  %29 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, double noundef %28)
          to label %30 unwind label %.loopexit

30:                                               ; preds = %27
  %31 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull @.str.9)
          to label %32 unwind label %.loopexit

32:                                               ; preds = %30
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #7
  invoke void @_ZN6ruckig4joinISt5arrayIdLm3EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_b(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %4, ptr noundef nonnull align 8 dereferenceable(24) %20, i1 noundef zeroext false)
          to label %33 unwind label %49

33:                                               ; preds = %32
  %34 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKNSt7__cxx1112basic_stringIS4_S5_T1_EE(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(32) %4)
          to label %35 unwind label %51

35:                                               ; preds = %33
  %36 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %37 unwind label %51

37:                                               ; preds = %35
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  %38 = load double, ptr %19, align 8, !tbaa !9
  %39 = fcmp ult double %38, 1.000000e+00
  %brmerge = select i1 %39, i1 true, i1 %.0
  br i1 %brmerge, label %54, label %40

40:                                               ; preds = %37
  %41 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.10)
          to label %42 unwind label %.loopexit

42:                                               ; preds = %40
  %43 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %44 unwind label %.loopexit

44:                                               ; preds = %42
  store i32 1, ptr %21, align 8, !tbaa !19
  store i32 3, ptr %22, align 4, !tbaa !56
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %11, ptr noundef nonnull align 8 dereferenceable(24) @constinit.11, i64 24, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef nonnull align 8 dereferenceable(24) @constinit.12, i64 24, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %15, ptr noundef nonnull align 8 dereferenceable(24) @constinit.13, i64 24, i1 false), !tbaa.struct !5
  br label %54

45:                                               ; preds = %0
  %46 = landingpad { ptr, i32 }
          cleanup
  br label %67

47:                                               ; preds = %17, %6, %5
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %66

.loopexit:                                        ; preds = %23, %27, %30, %40, %42, %54
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %66

.loopexit.split-lp:                               ; preds = %55, %57, %61, %63
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %66

49:                                               ; preds = %32
  %50 = landingpad { ptr, i32 }
          cleanup
  br label %53

51:                                               ; preds = %35, %33
  %52 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  br label %53

53:                                               ; preds = %51, %49
  %.pn = phi { ptr, i32 } [ %52, %51 ], [ %50, %49 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #7
  br label %66

54:                                               ; preds = %37, %44
  %.1 = phi i1 [ true, %44 ], [ %.0, %37 ]
  invoke void @_ZNK6ruckig15OutputParameterILm3ENS_14StandardVectorEE13pass_to_inputERNS_14InputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(2016) %3, ptr noundef nonnull align 8 dereferenceable(720) %2)
          to label %23 unwind label %.loopexit, !llvm.loop !57

55:                                               ; preds = %25
  %56 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.14)
          to label %57 unwind label %.loopexit.split-lp

57:                                               ; preds = %55
  %58 = getelementptr inbounds i8, ptr %3, i64 8
  %59 = call noundef double @_ZNK6ruckig10TrajectoryILm3ENS_14StandardVectorEE12get_durationEv(ptr noundef nonnull align 8 dereferenceable(1880) %58)
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEd(ptr noundef nonnull align 8 dereferenceable(8) %56, double noundef %59)
          to label %61 unwind label %.loopexit.split-lp

61:                                               ; preds = %57
  %62 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef nonnull @.str.15)
          to label %63 unwind label %.loopexit.split-lp

63:                                               ; preds = %61
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %65 unwind label %.loopexit.split-lp

65:                                               ; preds = %63
  call void @llvm.lifetime.end.p0(i64 2016, ptr nonnull %3) #7
  call void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720) %2) #7
  call void @llvm.lifetime.end.p0(i64 720, ptr nonnull %2) #7
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392) %1) #7
  call void @llvm.lifetime.end.p0(i64 6392, ptr nonnull %1) #7
  ret i32 0

66:                                               ; preds = %.loopexit, %.loopexit.split-lp, %53, %47
  %.pn21.pn = phi { ptr, i32 } [ %48, %47 ], [ %.pn, %53 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 2016, ptr nonnull %3) #7
  call void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720) %2) #7
  br label %67

67:                                               ; preds = %66, %45
  %.pn21.pn.pn = phi { ptr, i32 } [ %.pn21.pn, %66 ], [ %46, %45 ]
  call void @llvm.lifetime.end.p0(i64 720, ptr nonnull %2) #7
  call void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392) %1) #7
  call void @llvm.lifetime.end.p0(i64 6392, ptr nonnull %1) #7
  resume { ptr, i32 } %.pn21.pn.pn
}

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

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EE6updateERKNS_14InputParameterILm3ES1_EERNS_15OutputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(6392), ptr noundef nonnull align 8 dereferenceable(720), ptr noundef nonnull align 8 dereferenceable(2016)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN6ruckig4joinISt5arrayIdLm3EEEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_b(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(24), i1 noundef zeroext) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK6ruckig15OutputParameterILm3ENS_14StandardVectorEE13pass_to_inputERNS_14InputParameterILm3ES1_EE(ptr noundef nonnull align 8 dereferenceable(2016), ptr noundef nonnull align 8 dereferenceable(720)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef double @_ZNK6ruckig10TrajectoryILm3ENS_14StandardVectorEE12get_durationEv(ptr noundef nonnull align 8 dereferenceable(1880)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6ruckig14InputParameterILm3ENS_14StandardVectorEED2Ev(ptr noundef nonnull align 8 dereferenceable(720)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6ruckig6RuckigILm3ENS_14StandardVectorELb0EED2Ev(ptr noundef nonnull align 8 dereferenceable(6392)) unnamed_addr #6 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{i64 0, i64 24, !6}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !14, i64 1984}
!10 = !{!"_ZTSN6ruckig15OutputParameterILm3ENS_14StandardVectorEEE", !11, i64 0, !12, i64 8, !16, i64 1888, !16, i64 1912, !16, i64 1936, !16, i64 1960, !14, i64 1984, !11, i64 1992, !18, i64 2000, !18, i64 2001, !18, i64 2002, !14, i64 2008}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTSN6ruckig10TrajectoryILm3ENS_14StandardVectorEEE", !13, i64 0, !14, i64 1728, !15, i64 1736, !16, i64 1744, !17, i64 1768, !11, i64 1864, !11, i64 1872}
!13 = !{!"_ZTSSt5arrayIS_IN6ruckig7ProfileELm3EELm1EE", !7, i64 0}
!14 = !{!"double", !7, i64 0}
!15 = !{!"_ZTSSt5arrayIdLm1EE", !7, i64 0}
!16 = !{!"_ZTSSt5arrayIdLm3EE", !7, i64 0}
!17 = !{!"_ZTSSt5arrayIN6ruckig5BoundELm3EE", !7, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{!20, !21, i64 8}
!20 = !{!"_ZTSN6ruckig14InputParameterILm3ENS_14StandardVectorEEE", !11, i64 0, !21, i64 8, !22, i64 12, !23, i64 16, !16, i64 24, !16, i64 48, !16, i64 72, !16, i64 96, !16, i64 120, !16, i64 144, !16, i64 168, !16, i64 192, !16, i64 216, !24, i64 240, !24, i64 272, !28, i64 304, !33, i64 328, !33, i64 360, !33, i64 392, !33, i64 424, !33, i64 456, !33, i64 488, !33, i64 520, !24, i64 552, !24, i64 584, !38, i64 616, !39, i64 620, !43, i64 636, !47, i64 656, !51, i64 672, !47, i64 704}
!21 = !{!"_ZTSN6ruckig16ControlInterfaceE", !7, i64 0}
!22 = !{!"_ZTSN6ruckig15SynchronizationE", !7, i64 0}
!23 = !{!"_ZTSN6ruckig22DurationDiscretizationE", !7, i64 0}
!24 = !{!"_ZTSSt8optionalISt5arrayIdLm3EEE", !25, i64 0}
!25 = !{!"_ZTSSt14_Optional_baseISt5arrayIdLm3EELb1ELb1EE", !26, i64 0}
!26 = !{!"_ZTSSt17_Optional_payloadISt5arrayIdLm3EELb1ELb1ELb1EE", !27, i64 0}
!27 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIdLm3EEE", !7, i64 0, !18, i64 24}
!28 = !{!"_ZTSSt6vectorISt5arrayIdLm3EESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseISt5arrayIdLm3EESaIS1_EE17_Vector_impl_dataE", !32, i64 0, !32, i64 8, !32, i64 16}
!32 = !{!"any pointer", !7, i64 0}
!33 = !{!"_ZTSSt8optionalISt6vectorISt5arrayIdLm3EESaIS2_EEE", !34, i64 0}
!34 = !{!"_ZTSSt14_Optional_baseISt6vectorISt5arrayIdLm3EESaIS2_EELb0ELb0EE", !35, i64 0}
!35 = !{!"_ZTSSt17_Optional_payloadISt6vectorISt5arrayIdLm3EESaIS2_EELb0ELb0ELb0EE", !36, i64 0}
!36 = !{!"_ZTSSt17_Optional_payloadISt6vectorISt5arrayIdLm3EESaIS2_EELb1ELb0ELb0EE", !37, i64 0}
!37 = !{!"_ZTSSt22_Optional_payload_baseISt6vectorISt5arrayIdLm3EESaIS2_EEE", !7, i64 0, !18, i64 24}
!38 = !{!"_ZTSSt5arrayIbLm3EE", !7, i64 0}
!39 = !{!"_ZTSSt8optionalISt5arrayIN6ruckig16ControlInterfaceELm3EEE", !40, i64 0}
!40 = !{!"_ZTSSt14_Optional_baseISt5arrayIN6ruckig16ControlInterfaceELm3EELb1ELb1EE", !41, i64 0}
!41 = !{!"_ZTSSt17_Optional_payloadISt5arrayIN6ruckig16ControlInterfaceELm3EELb1ELb1ELb1EE", !42, i64 0}
!42 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIN6ruckig16ControlInterfaceELm3EEE", !7, i64 0, !18, i64 12}
!43 = !{!"_ZTSSt8optionalISt5arrayIN6ruckig15SynchronizationELm3EEE", !44, i64 0}
!44 = !{!"_ZTSSt14_Optional_baseISt5arrayIN6ruckig15SynchronizationELm3EELb1ELb1EE", !45, i64 0}
!45 = !{!"_ZTSSt17_Optional_payloadISt5arrayIN6ruckig15SynchronizationELm3EELb1ELb1ELb1EE", !46, i64 0}
!46 = !{!"_ZTSSt22_Optional_payload_baseISt5arrayIN6ruckig15SynchronizationELm3EEE", !7, i64 0, !18, i64 12}
!47 = !{!"_ZTSSt8optionalIdE", !48, i64 0}
!48 = !{!"_ZTSSt14_Optional_baseIdLb1ELb1EE", !49, i64 0}
!49 = !{!"_ZTSSt17_Optional_payloadIdLb1ELb1ELb1EE", !50, i64 0}
!50 = !{!"_ZTSSt22_Optional_payload_baseIdE", !7, i64 0, !18, i64 8}
!51 = !{!"_ZTSSt8optionalISt6vectorIdSaIdEEE", !52, i64 0}
!52 = !{!"_ZTSSt14_Optional_baseISt6vectorIdSaIdEELb0ELb0EE", !53, i64 0}
!53 = !{!"_ZTSSt17_Optional_payloadISt6vectorIdSaIdEELb0ELb0ELb0EE", !54, i64 0}
!54 = !{!"_ZTSSt17_Optional_payloadISt6vectorIdSaIdEELb1ELb0ELb0EE", !55, i64 0}
!55 = !{!"_ZTSSt22_Optional_payload_baseISt6vectorIdSaIdEEE", !7, i64 0, !18, i64 24}
!56 = !{!20, !22, i64 12}
!57 = distinct !{!57, !58}
!58 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopSimplifyPass,MemCpyOptPass,SROAPass,SimplifyCFGPass