; LLVM IR from mackorone/mms :: old/v2/src/sim/Mouse.ll (ZN3sim5Mouse6updateERKNS_8DurationE)

; 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.sim::Radians" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }
%"struct.std::pair.176" = type { %"class.sim::Cartesian", %"class.sim::Radians" }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::MetersPerSecond" = type { %"class.sim::Speed" }
%"class.sim::Speed" = type { ptr, double }
%"class.sim::RadiansPerSecond" = type { %"class.sim::AngularVelocity" }
%"class.sim::AngularVelocity" = type { ptr, double }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"struct.std::pair.164" = type { ptr, ptr }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Tuple_impl.178", %"struct.std::_Head_base.181" }
%"struct.std::_Tuple_impl.178" = type { %"struct.std::_Tuple_impl.179", %"struct.std::_Head_base.180" }
%"struct.std::_Tuple_impl.179" = type { %"struct.std::_Head_base" }
%"struct.std::_Head_base" = type { %"class.sim::RadiansPerSecond" }
%"struct.std::_Head_base.180" = type { %"class.sim::MetersPerSecond" }
%"struct.std::_Head_base.181" = type { %"class.sim::MetersPerSecond" }
%"struct.std::_Rb_tree_iterator.168" = type { ptr }
%"struct.std::pair.169" = type { ptr, ptr }
%"class.sim::Mouse" = type { ptr, %"class.sim::Cartesian", %"class.sim::Radians", %"class.sim::Polygon", %"class.sim::Polygon", %"class.sim::Polygon", %"class.std::map.134", %"class.std::map.139", %"class.std::map.144", %"class.std::map.149", %"class.sim::CurveTurnFactorCalculator", %"class.sim::RadiansPerSecond", %"class.sim::Cartesian", %"class.sim::Radians", %"class.std::mutex" }
%"class.sim::Polygon" = type { %"class.std::vector.124", %"class.std::vector.129" }
%"class.std::vector.124" = type { %"struct.std::_Vector_base.125" }
%"struct.std::_Vector_base.125" = type { %"struct.std::_Vector_base<sim::Cartesian, std::allocator<sim::Cartesian>>::_Vector_impl" }
%"struct.std::_Vector_base<sim::Cartesian, std::allocator<sim::Cartesian>>::_Vector_impl" = type { %"struct.std::_Vector_base<sim::Cartesian, std::allocator<sim::Cartesian>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sim::Cartesian, std::allocator<sim::Cartesian>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.129" = type { %"struct.std::_Vector_base.130" }
%"struct.std::_Vector_base.130" = type { %"struct.std::_Vector_base<sim::Triangle, std::allocator<sim::Triangle>>::_Vector_impl" }
%"struct.std::_Vector_base<sim::Triangle, std::allocator<sim::Triangle>>::_Vector_impl" = type { %"struct.std::_Vector_base<sim::Triangle, std::allocator<sim::Triangle>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sim::Triangle, std::allocator<sim::Triangle>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.134" = type { %"class.std::_Rb_tree.135" }
%"class.std::_Rb_tree.135" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, sim::Wheel>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::Wheel>>, 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>, sim::Wheel>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::Wheel>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"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, ptr, ptr, ptr }
%"class.std::map.139" = type { %"class.std::_Rb_tree.140" }
%"class.std::_Rb_tree.140" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, sim::Sensor>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::Sensor>>, 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>, sim::Sensor>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::Sensor>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.144" = type { %"class.std::_Rb_tree.145" }
%"class.std::_Rb_tree.145" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, sim::WheelEffect>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::WheelEffect>>, 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>, sim::WheelEffect>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, sim::WheelEffect>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.149" = type { %"class.std::_Rb_tree.150" }
%"class.std::_Rb_tree.150" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, std::pair<double, double>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::pair<double, double>>>, 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::pair<double, double>>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, std::pair<double, double>>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.sim::CurveTurnFactorCalculator" = type { double, double }
%"class.std::mutex" = type { %"class.std::__mutex_base" }
%"class.std::__mutex_base" = type { %union.pthread_mutex_t }
%union.pthread_mutex_t = type { %struct.__pthread_mutex_s }
%struct.__pthread_mutex_s = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list }
%struct.__pthread_internal_list = type { ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3sim16RadiansPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1

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

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

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

declare void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind noalias writable sret(%"class.sim::Radians") align 8, ptr noundef nonnull align 8 dereferenceable(528)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse36getCurrentSensorPositionAndDirectionERKNS_6SensorERKNS_9CartesianERKNS_7RadiansE(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.176") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3sim5Mouse6updateERKNS_8DurationE(ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"class.sim::MetersPerSecond", align 8
  %6 = alloca %"class.sim::MetersPerSecond", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"class.sim::RadiansPerSecond", align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %12 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"struct.std::pair.164", align 8
  %15 = alloca %"class.sim::Radians", align 8
  %16 = alloca %"class.sim::RadiansPerSecond", align 8
  %17 = alloca %"class.std::tuple", align 8
  %18 = alloca %"class.sim::RadiansPerSecond", align 8
  %19 = alloca %"class.sim::MetersPerSecond", align 8
  %20 = alloca %"class.sim::Radians", align 8
  %21 = alloca %"class.sim::MetersPerSecond", align 8
  %22 = alloca %"class.sim::Radians", align 8
  %23 = alloca %"class.sim::MetersPerSecond", align 8
  %24 = alloca %"class.sim::Radians", align 8
  %25 = alloca %"class.sim::MetersPerSecond", align 8
  %26 = alloca %"class.sim::MetersPerSecond", align 8
  %27 = alloca %"class.sim::Radians", align 8
  %28 = alloca %"class.sim::MetersPerSecond", align 8
  %29 = alloca %"class.sim::MetersPerSecond", align 8
  %30 = alloca %"class.sim::RadiansPerSecond", align 8
  %31 = alloca %"class.sim::Radians", align 8
  %32 = alloca %"class.sim::Cartesian", align 8
  %33 = alloca %"class.sim::Meters", align 8
  %34 = alloca %"class.sim::Meters", align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %37 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %38 = alloca ptr, align 8
  %39 = alloca %"struct.std::pair.169", align 8
  %40 = alloca %"struct.std::pair.176", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %41 = load ptr, ptr %3, align 8
  %42 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 14
  call void @_ZNSt5mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(40) %42)
  call void @llvm.lifetime.start.p0(i64 16, ptr %5) #6
  call void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr %6) #6
  invoke void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef 0.000000e+00)
          to label %43 unwind label %55

43:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #6
  invoke void @_ZN3sim16RadiansPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef 0.000000e+00)
          to label %44 unwind label %59

44:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %45 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 6
  store ptr %45, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %46 = load ptr, ptr %10, align 8, !tbaa !5
  %47 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %46) #6
  %48 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %11, i32 0, i32 0
  store ptr %47, ptr %48, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %49 = load ptr, ptr %10, align 8, !tbaa !5
  %50 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %49) #6
  %51 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %12, i32 0, i32 0
  store ptr %50, ptr %51, align 8
  br label %52

52:                                               ; preds = %113, %44
  %53 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #6
  br i1 %53, label %63, label %54

54:                                               ; preds = %52
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  br label %199

55:                                               ; preds = %2
  %56 = landingpad { ptr, i32 }
          cleanup
  %57 = extractvalue { ptr, i32 } %56, 0
  store ptr %57, ptr %7, align 8
  %58 = extractvalue { ptr, i32 } %56, 1
  store i32 %58, ptr %8, align 4
  br label %324

59:                                               ; preds = %43
  %60 = landingpad { ptr, i32 }
          cleanup
  %61 = extractvalue { ptr, i32 } %60, 0
  store ptr %61, ptr %7, align 8
  %62 = extractvalue { ptr, i32 } %60, 1
  store i32 %62, ptr %8, align 4
  br label %323

63:                                               ; preds = %52
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %14) #6
  %64 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  invoke void @_ZNSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEEC2IS6_S9_TnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE18_ConstructiblePairISF_SG_EEclsr6_PCCFPISF_SG_EE26_ImplicitlyConvertiblePairISF_SG_EEEbE4typeELb1EEERKS_ISF_SG_E(ptr noundef nonnull align 8 dereferenceable(16) %14, ptr noundef nonnull align 8 dereferenceable(304) %64)
          to label %65 unwind label %115

65:                                               ; preds = %63
  store ptr %14, ptr %13, align 8, !tbaa !5
  %66 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 6
  %67 = load ptr, ptr %13, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.std::pair.164", ptr %67, i32 0, i32 0
  %69 = load ptr, ptr %68, align 8, !tbaa !9
  %70 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %66, ptr noundef nonnull align 8 dereferenceable(32) %69)
          to label %71 unwind label %119

71:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #6
  %72 = load ptr, ptr %13, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.std::pair.164", ptr %72, i32 0, i32 1
  %74 = load ptr, ptr %73, align 8, !tbaa !11
  invoke void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8 %16, ptr noundef nonnull align 8 dereferenceable(272) %74)
          to label %75 unwind label %123

75:                                               ; preds = %71
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %15, ptr noundef nonnull align 8 dereferenceable(16) %16, ptr noundef nonnull align 8 dereferenceable(16) %76)
          to label %77 unwind label %127

77:                                               ; preds = %75
  invoke void @_ZN3sim5Wheel14updateRotationERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(272) %70, ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %78 unwind label %131

78:                                               ; preds = %77
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr %17) #6
  %79 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 8
  %80 = load ptr, ptr %13, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.std::pair.164", ptr %80, i32 0, i32 0
  %82 = load ptr, ptr %81, align 8, !tbaa !9
  %83 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %79, ptr noundef nonnull align 8 dereferenceable(32) %82)
          to label %84 unwind label %137

84:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #6
  %85 = load ptr, ptr %13, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.std::pair.164", ptr %85, i32 0, i32 1
  %87 = load ptr, ptr %86, align 8, !tbaa !11
  invoke void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8 %18, ptr noundef nonnull align 8 dereferenceable(272) %87)
          to label %88 unwind label %141

88:                                               ; preds = %84
  invoke void @_ZNK3sim11WheelEffect10getEffectsERKNS_16RadiansPerSecondE(ptr dead_on_unwind writable sret(%"class.std::tuple") align 8 %17, ptr noundef nonnull align 8 dereferenceable(48) %83, ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %89 unwind label %145

89:                                               ; preds = %88
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %19) #6
  %90 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %20, ptr noundef nonnull align 8 dereferenceable(528) %41)
  %91 = invoke noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16) %20)
          to label %92 unwind label %150

92:                                               ; preds = %89
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %19, ptr noundef nonnull align 8 dereferenceable(16) %90, double noundef %91)
          to label %93 unwind label %150

93:                                               ; preds = %92
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %94 unwind label %154

94:                                               ; preds = %93
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #6
  %95 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %22, ptr noundef nonnull align 8 dereferenceable(528) %41)
  %96 = invoke noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16) %22)
          to label %97 unwind label %159

97:                                               ; preds = %94
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %21, ptr noundef nonnull align 8 dereferenceable(16) %95, double noundef %96)
          to label %98 unwind label %159

98:                                               ; preds = %97
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %99 unwind label %163

99:                                               ; preds = %98
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #6
  %100 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %24, ptr noundef nonnull align 8 dereferenceable(528) %41)
  %101 = invoke noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16) %24)
          to label %102 unwind label %168

102:                                              ; preds = %99
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %23, ptr noundef nonnull align 8 dereferenceable(16) %100, double noundef %101)
          to label %103 unwind label %168

103:                                              ; preds = %102
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %23)
          to label %104 unwind label %172

104:                                              ; preds = %103
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #6
  %105 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %27, ptr noundef nonnull align 8 dereferenceable(528) %41)
  %106 = invoke noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16) %27)
          to label %107 unwind label %177

107:                                              ; preds = %104
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %26, ptr noundef nonnull align 8 dereferenceable(16) %105, double noundef %106)
          to label %108 unwind label %177

108:                                              ; preds = %107
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %25, ptr noundef nonnull align 8 dereferenceable(16) %26, double noundef -1.000000e+00)
          to label %109 unwind label %181

109:                                              ; preds = %108
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %25)
          to label %110 unwind label %185

110:                                              ; preds = %109
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  %111 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm2EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  invoke void @_ZN3sim16RadiansPerSecondpLERKNS_15AngularVelocityE(ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %111)
          to label %112 unwind label %191

112:                                              ; preds = %110
  call void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  br label %113

113:                                              ; preds = %112
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #6
  br label %52

115:                                              ; preds = %63
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %7, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %8, align 4
  br label %198

119:                                              ; preds = %65
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %7, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %8, align 4
  br label %197

123:                                              ; preds = %71
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %7, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %8, align 4
  br label %136

127:                                              ; preds = %75
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %7, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %8, align 4
  br label %135

131:                                              ; preds = %77
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %7, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %8, align 4
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  br label %135

135:                                              ; preds = %131, %127
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  br label %136

136:                                              ; preds = %135, %123
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #6
  br label %197

137:                                              ; preds = %78
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %7, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %8, align 4
  br label %196

141:                                              ; preds = %84
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %7, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %8, align 4
  br label %149

145:                                              ; preds = %88
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %7, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %8, align 4
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  br label %149

149:                                              ; preds = %145, %141
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #6
  br label %196

150:                                              ; preds = %92, %89
  %151 = landingpad { ptr, i32 }
          cleanup
  %152 = extractvalue { ptr, i32 } %151, 0
  store ptr %152, ptr %7, align 8
  %153 = extractvalue { ptr, i32 } %151, 1
  store i32 %153, ptr %8, align 4
  br label %158

154:                                              ; preds = %93
  %155 = landingpad { ptr, i32 }
          cleanup
  %156 = extractvalue { ptr, i32 } %155, 0
  store ptr %156, ptr %7, align 8
  %157 = extractvalue { ptr, i32 } %155, 1
  store i32 %157, ptr %8, align 4
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  br label %158

158:                                              ; preds = %154, %150
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %19) #6
  br label %195

159:                                              ; preds = %97, %94
  %160 = landingpad { ptr, i32 }
          cleanup
  %161 = extractvalue { ptr, i32 } %160, 0
  store ptr %161, ptr %7, align 8
  %162 = extractvalue { ptr, i32 } %160, 1
  store i32 %162, ptr %8, align 4
  br label %167

163:                                              ; preds = %98
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %7, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %8, align 4
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #6
  br label %167

167:                                              ; preds = %163, %159
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #6
  br label %195

168:                                              ; preds = %102, %99
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %7, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %8, align 4
  br label %176

172:                                              ; preds = %103
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %7, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %8, align 4
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  br label %176

176:                                              ; preds = %172, %168
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #6
  br label %195

177:                                              ; preds = %107, %104
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %7, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %8, align 4
  br label %190

181:                                              ; preds = %108
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %7, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %8, align 4
  br label %189

185:                                              ; preds = %109
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %7, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %8, align 4
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  br label %189

189:                                              ; preds = %185, %181
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %26) #6
  br label %190

190:                                              ; preds = %189, %177
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %25) #6
  br label %195

191:                                              ; preds = %110
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %7, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %8, align 4
  br label %195

195:                                              ; preds = %191, %190, %176, %167, %158
  call void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %17) #6
  br label %196

196:                                              ; preds = %195, %149, %137
  call void @llvm.lifetime.end.p0(i64 48, ptr %17) #6
  br label %197

197:                                              ; preds = %196, %136, %119
  call void @llvm.lifetime.end.p0(i64 16, ptr %14) #6
  br label %198

198:                                              ; preds = %197, %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  br label %322

199:                                              ; preds = %54
  call void @llvm.lifetime.start.p0(i64 16, ptr %28) #6
  %200 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 6
  %201 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %200) #6
  %202 = uitofp i64 %201 to double
  invoke void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %28, ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef %202)
          to label %203 unwind label %235

203:                                              ; preds = %199
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #6
  %204 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 6
  %205 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %204) #6
  %206 = uitofp i64 %205 to double
  invoke void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8 %29, ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef %206)
          to label %207 unwind label %239

207:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 16, ptr %30) #6
  %208 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 6
  %209 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %208) #6
  %210 = uitofp i64 %209 to double
  invoke void @_ZNK3sim16RadiansPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8 %30, ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef %210)
          to label %211 unwind label %243

211:                                              ; preds = %207
  %212 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 11
  %213 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim16RadiansPerSecondaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %212, ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %31) #6
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8 %31, ptr noundef nonnull align 8 dereferenceable(16) %30, ptr noundef nonnull align 8 dereferenceable(16) %214)
          to label %215 unwind label %247

215:                                              ; preds = %211
  %216 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 13
  invoke void @_ZN3sim7RadianspLERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %216, ptr noundef nonnull align 8 dereferenceable(16) %31)
          to label %217 unwind label %251

217:                                              ; preds = %215
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %33) #6
  %218 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %33, ptr noundef nonnull align 8 dereferenceable(16) %28, ptr noundef nonnull align 8 dereferenceable(16) %218)
          to label %219 unwind label %256

219:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #6
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8 %34, ptr noundef nonnull align 8 dereferenceable(16) %29, ptr noundef nonnull align 8 dereferenceable(16) %220)
          to label %221 unwind label %260

221:                                              ; preds = %219
  invoke void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(16) %33, ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %222 unwind label %264

222:                                              ; preds = %221
  %223 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 12
  invoke void @_ZN3sim9CartesianpLERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40) %223, ptr noundef nonnull align 8 dereferenceable(40) %32)
          to label %224 unwind label %268

224:                                              ; preds = %222
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %225 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 7
  store ptr %225, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %226 = load ptr, ptr %35, align 8, !tbaa !5
  %227 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %226) #6
  %228 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %36, i32 0, i32 0
  store ptr %227, ptr %228, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %229 = load ptr, ptr %35, align 8, !tbaa !5
  %230 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %229) #6
  %231 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %37, i32 0, i32 0
  store ptr %230, ptr %231, align 8
  br label %232

232:                                              ; preds = %295, %224
  %233 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #6
  br i1 %233, label %275, label %234

234:                                              ; preds = %232
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %311

235:                                              ; preds = %199
  %236 = landingpad { ptr, i32 }
          cleanup
  %237 = extractvalue { ptr, i32 } %236, 0
  store ptr %237, ptr %7, align 8
  %238 = extractvalue { ptr, i32 } %236, 1
  store i32 %238, ptr %8, align 4
  br label %321

239:                                              ; preds = %203
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %7, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %8, align 4
  br label %320

243:                                              ; preds = %207
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %7, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %8, align 4
  br label %319

247:                                              ; preds = %211
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %7, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %8, align 4
  br label %255

251:                                              ; preds = %215
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %7, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %8, align 4
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %31) #6
  br label %255

255:                                              ; preds = %251, %247
  call void @llvm.lifetime.end.p0(i64 16, ptr %31) #6
  br label %318

256:                                              ; preds = %217
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %7, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %8, align 4
  br label %274

260:                                              ; preds = %219
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %7, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %8, align 4
  br label %273

264:                                              ; preds = %221
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %7, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %8, align 4
  br label %272

268:                                              ; preds = %222
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %7, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %8, align 4
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #6
  br label %272

272:                                              ; preds = %268, %264
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #6
  br label %273

273:                                              ; preds = %272, %260
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %33) #6
  br label %274

274:                                              ; preds = %273, %256
  call void @llvm.lifetime.end.p0(i64 16, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #6
  br label %318

275:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #6
  %276 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #6
  invoke void @_ZNSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEEC2IS6_S9_TnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE18_ConstructiblePairISF_SG_EEclsr6_PCCFPISF_SG_EE26_ImplicitlyConvertiblePairISF_SG_EEEbE4typeELb1EEERKS_ISF_SG_E(ptr noundef nonnull align 8 dereferenceable(16) %39, ptr noundef nonnull align 8 dereferenceable(224) %276)
          to label %277 unwind label %297

277:                                              ; preds = %275
  store ptr %39, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %40) #6
  %278 = load ptr, ptr %38, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.std::pair.169", ptr %278, i32 0, i32 1
  %280 = load ptr, ptr %279, align 8, !tbaa !12
  %281 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 12
  %282 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 13
  invoke void @_ZNK3sim5Mouse36getCurrentSensorPositionAndDirectionERKNS_6SensorERKNS_9CartesianERKNS_7RadiansE(ptr dead_on_unwind writable sret(%"struct.std::pair.176") align 8 %40, ptr noundef nonnull align 8 dereferenceable(528) %41, ptr noundef nonnull align 8 dereferenceable(192) %280, ptr noundef nonnull align 8 dereferenceable(40) %281, ptr noundef nonnull align 8 dereferenceable(16) %282)
          to label %283 unwind label %301

283:                                              ; preds = %277
  %284 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 7
  %285 = load ptr, ptr %38, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.std::pair.169", ptr %285, i32 0, i32 0
  %287 = load ptr, ptr %286, align 8, !tbaa !14
  %288 = invoke noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %284, ptr noundef nonnull align 8 dereferenceable(32) %287)
          to label %289 unwind label %305

289:                                              ; preds = %283
  %290 = getelementptr inbounds %"struct.std::pair.176", ptr %40, i32 0, i32 0
  %291 = getelementptr inbounds %"struct.std::pair.176", ptr %40, i32 0, i32 1
  %292 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 0
  %293 = load ptr, ptr %292, align 8, !tbaa !15
  invoke void @_ZN3sim6Sensor13updateReadingERKNS_9CartesianERKNS_7RadiansERKNS_4MazeE(ptr noundef nonnull align 8 dereferenceable(192) %288, ptr noundef nonnull align 8 dereferenceable(40) %290, ptr noundef nonnull align 8 dereferenceable(16) %291, ptr noundef nonnull align 8 dereferenceable(26) %293)
          to label %294 unwind label %305

294:                                              ; preds = %289
  call void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %40) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  br label %295

295:                                              ; preds = %294
  %296 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #6
  br label %232

297:                                              ; preds = %275
  %298 = landingpad { ptr, i32 }
          cleanup
  %299 = extractvalue { ptr, i32 } %298, 0
  store ptr %299, ptr %7, align 8
  %300 = extractvalue { ptr, i32 } %298, 1
  store i32 %300, ptr %8, align 4
  br label %310

301:                                              ; preds = %277
  %302 = landingpad { ptr, i32 }
          cleanup
  %303 = extractvalue { ptr, i32 } %302, 0
  store ptr %303, ptr %7, align 8
  %304 = extractvalue { ptr, i32 } %302, 1
  store i32 %304, ptr %8, align 4
  br label %309

305:                                              ; preds = %289, %283
  %306 = landingpad { ptr, i32 }
          cleanup
  %307 = extractvalue { ptr, i32 } %306, 0
  store ptr %307, ptr %7, align 8
  %308 = extractvalue { ptr, i32 } %306, 1
  store i32 %308, ptr %8, align 4
  call void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %40) #6
  br label %309

309:                                              ; preds = %305, %301
  call void @llvm.lifetime.end.p0(i64 56, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #6
  br label %310

310:                                              ; preds = %309, %297
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  br label %318

311:                                              ; preds = %234
  %312 = getelementptr inbounds %"class.sim::Mouse", ptr %41, i32 0, i32 14
  invoke void @_ZNSt5mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(40) %312)
          to label %313 unwind label %314

313:                                              ; preds = %311
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #6
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  ret void

314:                                              ; preds = %311
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %7, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %8, align 4
  br label %318

318:                                              ; preds = %314, %310, %274, %255
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #6
  br label %319

319:                                              ; preds = %318, %243
  call void @llvm.lifetime.end.p0(i64 16, ptr %30) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #6
  br label %320

320:                                              ; preds = %319, %239
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  br label %321

321:                                              ; preds = %320, %235
  call void @llvm.lifetime.end.p0(i64 16, ptr %28) #6
  br label %322

322:                                              ; preds = %321, %198
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #6
  br label %323

323:                                              ; preds = %322, %59
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #6
  br label %324

324:                                              ; preds = %323, %55
  call void @llvm.lifetime.end.p0(i64 16, ptr %6) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr %5) #6
  br label %325

325:                                              ; preds = %324
  %326 = load ptr, ptr %7, align 8
  %327 = load i32, ptr %8, align 4
  %328 = insertvalue { ptr, i32 } poison, ptr %326, 0
  %329 = insertvalue { ptr, i32 } %328, i32 %327, 1
  resume { ptr, i32 } %329
}

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

declare void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(272) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

declare void @_ZN3sim5Wheel14updateRotationERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(16)) #1

declare void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(272)) #1

declare void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

declare void @_ZNK3sim11WheelEffect10getEffectsERKNS_16RadiansPerSecondE(ptr dead_on_unwind writable sret(%"class.std::tuple") align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) #3

declare void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) #1

declare noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16)) #1

declare void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

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

declare noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm2EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) #3

declare void @_ZN3sim16RadiansPerSecondpLERKNS_15AngularVelocityE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

declare void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) #3 align 2

declare void @_ZNK3sim16RadiansPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim16RadiansPerSecondaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #5 align 2

declare void @_ZN3sim7RadianspLERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

declare void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) #1

declare void @_ZN3sim9CartesianpLERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

declare void @_ZN3sim6Sensor13updateReadingERKNS_9CartesianERKNS_7RadiansERKNS_4MazeE(ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(26)) #1

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEE", !6, i64 0, !6, i64 8}
!11 = !{!10, !6, i64 8}
!12 = !{!13, !6, i64 8}
!13 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEE", !6, i64 0, !6, i64 8}
!14 = !{!13, !6, i64 0}
!15 = !{!16, !6, i64 0}
!16 = !{!"_ZTSN3sim5MouseE", !6, i64 0, !17, i64 8, !22, i64 48, !24, i64 64, !24, i64 112, !24, i64 160, !33, i64 208, !42, i64 256, !45, i64 304, !48, i64 352, !51, i64 400, !52, i64 416, !17, i64 432, !22, i64 472, !54, i64 488}
!17 = !{!"_ZTSN3sim9CartesianE", !18, i64 0}
!18 = !{!"_ZTSN3sim10CoordinateE", !19, i64 8, !19, i64 24}
!19 = !{!"_ZTSN3sim6MetersE", !20, i64 0}
!20 = !{!"_ZTSN3sim8DistanceE", !21, i64 8}
!21 = !{!"double", !7, i64 0}
!22 = !{!"_ZTSN3sim7RadiansE", !23, i64 0}
!23 = !{!"_ZTSN3sim5AngleE", !21, i64 8}
!24 = !{!"_ZTSN3sim7PolygonE", !25, i64 0, !29, i64 24}
!25 = !{!"_ZTSSt6vectorIN3sim9CartesianESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIN3sim9CartesianESaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3sim9CartesianESaIS1_EE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIN3sim9CartesianESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!29 = !{!"_ZTSSt6vectorIN3sim8TriangleESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIN3sim8TriangleESaIS1_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3sim8TriangleESaIS1_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3sim8TriangleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !34, i64 0}
!34 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim5WheelEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !35, i64 0}
!35 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim5WheelEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !36, i64 0, !38, i64 8}
!36 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !37, i64 0}
!37 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!38 = !{!"_ZTSSt15_Rb_tree_header", !39, i64 0, !41, i64 32}
!39 = !{!"_ZTSSt18_Rb_tree_node_base", !40, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!40 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!41 = !{!"long", !7, i64 0}
!42 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !43, i64 0}
!43 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim6SensorEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !44, i64 0}
!44 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim6SensorEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !36, i64 0, !38, i64 8}
!45 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !46, i64 0}
!46 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim11WheelEffectEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !47, i64 0}
!47 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim11WheelEffectEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !36, i64 0, !38, i64 8}
!48 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEE", !49, i64 0}
!49 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IddEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE", !50, i64 0}
!50 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IddEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE13_Rb_tree_implISD_Lb1EEE", !36, i64 0, !38, i64 8}
!51 = !{!"_ZTSN3sim25CurveTurnFactorCalculatorE", !21, i64 0, !21, i64 8}
!52 = !{!"_ZTSN3sim16RadiansPerSecondE", !53, i64 0}
!53 = !{!"_ZTSN3sim15AngularVelocityE", !21, i64 8}
!54 = !{!"_ZTSSt5mutex", !55, i64 0}
!55 = !{!"_ZTSSt12__mutex_base", !7, i64 0}


; 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.sim::Radians" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }
%"struct.std::pair.176" = type { %"class.sim::Cartesian", %"class.sim::Radians" }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::MetersPerSecond" = type { %"class.sim::Speed" }
%"class.sim::Speed" = type { ptr, double }
%"class.sim::RadiansPerSecond" = type { %"class.sim::AngularVelocity" }
%"class.sim::AngularVelocity" = type { ptr, double }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"struct.std::pair.164" = type { ptr, ptr }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Tuple_impl.178", %"struct.std::_Head_base.181" }
%"struct.std::_Tuple_impl.178" = type { %"struct.std::_Tuple_impl.179", %"struct.std::_Head_base.180" }
%"struct.std::_Tuple_impl.179" = type { %"struct.std::_Head_base" }
%"struct.std::_Head_base" = type { %"class.sim::RadiansPerSecond" }
%"struct.std::_Head_base.180" = type { %"class.sim::MetersPerSecond" }
%"struct.std::_Head_base.181" = type { %"class.sim::MetersPerSecond" }
%"struct.std::_Rb_tree_iterator.168" = type { ptr }
%"struct.std::pair.169" = type { ptr, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN3sim16RadiansPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1

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

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

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

declare void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind noalias writable sret(%"class.sim::Radians") align 8, ptr noundef nonnull align 8 dereferenceable(528)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse36getCurrentSensorPositionAndDirectionERKNS_6SensorERKNS_9CartesianERKNS_7RadiansE(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.176") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3sim5Mouse6updateERKNS_8DurationE(ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(16) %1) local_unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.sim::MetersPerSecond", align 8
  %4 = alloca %"class.sim::MetersPerSecond", align 8
  %5 = alloca %"class.sim::RadiansPerSecond", align 8
  %6 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %7 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %8 = alloca %"struct.std::pair.164", align 8
  %9 = alloca %"class.sim::Radians", align 8
  %10 = alloca %"class.sim::RadiansPerSecond", align 8
  %11 = alloca %"class.std::tuple", align 8
  %12 = alloca %"class.sim::RadiansPerSecond", align 8
  %13 = alloca %"class.sim::MetersPerSecond", align 8
  %14 = alloca %"class.sim::Radians", align 8
  %15 = alloca %"class.sim::MetersPerSecond", align 8
  %16 = alloca %"class.sim::Radians", align 8
  %17 = alloca %"class.sim::MetersPerSecond", align 8
  %18 = alloca %"class.sim::Radians", align 8
  %19 = alloca %"class.sim::MetersPerSecond", align 8
  %20 = alloca %"class.sim::MetersPerSecond", align 8
  %21 = alloca %"class.sim::Radians", align 8
  %22 = alloca %"class.sim::MetersPerSecond", align 8
  %23 = alloca %"class.sim::MetersPerSecond", align 8
  %24 = alloca %"class.sim::RadiansPerSecond", align 8
  %25 = alloca %"class.sim::Radians", align 8
  %26 = alloca %"class.sim::Cartesian", align 8
  %27 = alloca %"class.sim::Meters", align 8
  %28 = alloca %"class.sim::Meters", align 8
  %29 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %30 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %31 = alloca %"struct.std::pair.169", align 8
  %32 = alloca %"struct.std::pair.176", align 8
  %33 = getelementptr inbounds i8, ptr %0, i64 488
  tail call void @_ZNSt5mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(40) %33)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #6
  call void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %3, double noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #6
  invoke void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %4, double noundef 0.000000e+00)
          to label %34 unwind label %44

34:                                               ; preds = %2
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #6
  invoke void @_ZN3sim16RadiansPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef 0.000000e+00)
          to label %35 unwind label %46

35:                                               ; preds = %34
  %36 = getelementptr inbounds i8, ptr %0, i64 208
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #6
  %37 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %36) #6
  store ptr %37, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #6
  %38 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %36) #6
  store ptr %38, ptr %7, align 8
  %39 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  br i1 %39, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %35
  %40 = getelementptr inbounds i8, ptr %8, i64 8
  %41 = getelementptr inbounds i8, ptr %0, i64 304
  br label %48

._crit_edge:                                      ; preds = %85, %35
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %22) #6
  %42 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %36) #6
  %43 = uitofp i64 %42 to double
  invoke void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %22, ptr noundef nonnull align 8 dereferenceable(16) %3, double noundef %43)
          to label %133 unwind label %156

44:                                               ; preds = %2
  %45 = landingpad { ptr, i32 }
          cleanup
  br label %203

46:                                               ; preds = %34
  %47 = landingpad { ptr, i32 }
          cleanup
  br label %202

48:                                               ; preds = %.lr.ph, %85
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #6
  %49 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  call void @_ZNSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEEC2IS6_S9_TnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE18_ConstructiblePairISF_SG_EEclsr6_PCCFPISF_SG_EE26_ImplicitlyConvertiblePairISF_SG_EEEbE4typeELb1EEERKS_ISF_SG_E(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(304) %49)
  %50 = load ptr, ptr %8, align 8, !tbaa !5
  %51 = invoke noundef nonnull align 8 dereferenceable(272) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 8 dereferenceable(32) %50)
          to label %52 unwind label %88

52:                                               ; preds = %48
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #6
  %53 = load ptr, ptr %40, align 8, !tbaa !10
  invoke void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::RadiansPerSecond") align 8 %10, ptr noundef nonnull align 8 dereferenceable(272) %53)
          to label %54 unwind label %90

54:                                               ; preds = %52
  invoke void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %9, ptr noundef nonnull align 8 dereferenceable(16) %10, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %55 unwind label %92

55:                                               ; preds = %54
  invoke void @_ZN3sim5Wheel14updateRotationERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(272) %51, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %56 unwind label %94

56:                                               ; preds = %55
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #6
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %11) #6
  %57 = load ptr, ptr %8, align 8, !tbaa !5
  %58 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %41, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %59 unwind label %98

59:                                               ; preds = %56
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #6
  %60 = load ptr, ptr %40, align 8, !tbaa !10
  invoke void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::RadiansPerSecond") align 8 %12, ptr noundef nonnull align 8 dereferenceable(272) %60)
          to label %61 unwind label %100

61:                                               ; preds = %59
  invoke void @_ZNK3sim11WheelEffect10getEffectsERKNS_16RadiansPerSecondE(ptr dead_on_unwind nonnull writable sret(%"class.std::tuple") align 8 %11, ptr noundef nonnull align 8 dereferenceable(48) %58, ptr noundef nonnull align 8 dereferenceable(16) %12)
          to label %62 unwind label %102

62:                                               ; preds = %61
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #6
  %63 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %14, ptr noundef nonnull align 8 dereferenceable(528) %0)
  %64 = invoke noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16) %14)
          to label %65 unwind label %105

65:                                               ; preds = %62
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %13, ptr noundef nonnull align 8 dereferenceable(16) %63, double noundef %64)
          to label %66 unwind label %105

66:                                               ; preds = %65
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %13)
          to label %67 unwind label %107

67:                                               ; preds = %66
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #6
  %68 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %16, ptr noundef nonnull align 8 dereferenceable(528) %0)
  %69 = invoke noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16) %16)
          to label %70 unwind label %110

70:                                               ; preds = %67
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %15, ptr noundef nonnull align 8 dereferenceable(16) %68, double noundef %69)
          to label %71 unwind label %110

71:                                               ; preds = %70
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %15)
          to label %72 unwind label %112

72:                                               ; preds = %71
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #6
  %73 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %18, ptr noundef nonnull align 8 dereferenceable(528) %0)
  %74 = invoke noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %75 unwind label %115

75:                                               ; preds = %72
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %17, ptr noundef nonnull align 8 dereferenceable(16) %73, double noundef %74)
          to label %76 unwind label %115

76:                                               ; preds = %75
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %3, ptr noundef nonnull align 8 dereferenceable(16) %17)
          to label %77 unwind label %117

77:                                               ; preds = %76
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #6
  %78 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #6
  call void @_ZNK3sim5Mouse18getCurrentRotationEv(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %21, ptr noundef nonnull align 8 dereferenceable(528) %0)
  %79 = invoke noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16) %21)
          to label %80 unwind label %120

80:                                               ; preds = %77
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %20, ptr noundef nonnull align 8 dereferenceable(16) %78, double noundef %79)
          to label %81 unwind label %120

81:                                               ; preds = %80
  invoke void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %19, ptr noundef nonnull align 8 dereferenceable(16) %20, double noundef -1.000000e+00)
          to label %82 unwind label %122

82:                                               ; preds = %81
  invoke void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16) %4, ptr noundef nonnull align 8 dereferenceable(16) %19)
          to label %83 unwind label %124

83:                                               ; preds = %82
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #6
  %84 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm2EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  invoke void @_ZN3sim16RadiansPerSecondpLERKNS_15AngularVelocityE(ptr noundef nonnull align 8 dereferenceable(16) %5, ptr noundef nonnull align 8 dereferenceable(16) %84)
          to label %85 unwind label %128

85:                                               ; preds = %83
  call void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #6
  %87 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #6
  br i1 %87, label %48, label %._crit_edge

88:                                               ; preds = %48
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %132

90:                                               ; preds = %52
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %97

92:                                               ; preds = %54
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %96

94:                                               ; preds = %55
  %95 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #6
  br label %96

96:                                               ; preds = %94, %92
  %.pn50 = phi { ptr, i32 } [ %95, %94 ], [ %93, %92 ]
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %10) #6
  br label %97

97:                                               ; preds = %96, %90
  %.pn50.pn = phi { ptr, i32 } [ %.pn50, %96 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #6
  br label %132

98:                                               ; preds = %56
  %99 = landingpad { ptr, i32 }
          cleanup
  br label %131

100:                                              ; preds = %59
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %104

102:                                              ; preds = %61
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %12) #6
  br label %104

104:                                              ; preds = %102, %100
  %.pn53 = phi { ptr, i32 } [ %103, %102 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #6
  br label %131

105:                                              ; preds = %65, %62
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %109

107:                                              ; preds = %66
  %108 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #6
  br label %109

109:                                              ; preds = %107, %105
  %.pn55 = phi { ptr, i32 } [ %108, %107 ], [ %106, %105 ]
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #6
  br label %130

110:                                              ; preds = %70, %67
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %114

112:                                              ; preds = %71
  %113 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %15) #6
  br label %114

114:                                              ; preds = %112, %110
  %.pn57 = phi { ptr, i32 } [ %113, %112 ], [ %111, %110 ]
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #6
  br label %130

115:                                              ; preds = %75, %72
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %119

117:                                              ; preds = %76
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %17) #6
  br label %119

119:                                              ; preds = %117, %115
  %.pn59 = phi { ptr, i32 } [ %118, %117 ], [ %116, %115 ]
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #6
  br label %130

120:                                              ; preds = %80, %77
  %121 = landingpad { ptr, i32 }
          cleanup
  br label %127

122:                                              ; preds = %81
  %123 = landingpad { ptr, i32 }
          cleanup
  br label %126

124:                                              ; preds = %82
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #6
  br label %126

126:                                              ; preds = %124, %122
  %.pn61 = phi { ptr, i32 } [ %125, %124 ], [ %123, %122 ]
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %20) #6
  br label %127

127:                                              ; preds = %126, %120
  %.pn61.pn = phi { ptr, i32 } [ %.pn61, %126 ], [ %121, %120 ]
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #6
  br label %130

128:                                              ; preds = %83
  %129 = landingpad { ptr, i32 }
          cleanup
  br label %130

130:                                              ; preds = %128, %127, %119, %114, %109
  %.pn64 = phi { ptr, i32 } [ %129, %128 ], [ %.pn61.pn, %127 ], [ %.pn59, %119 ], [ %.pn57, %114 ], [ %.pn55, %109 ]
  call void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %11) #6
  br label %131

131:                                              ; preds = %130, %104, %98
  %.pn64.pn = phi { ptr, i32 } [ %.pn64, %130 ], [ %.pn53, %104 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #6
  br label %132

132:                                              ; preds = %131, %97, %88
  %.pn64.pn.pn = phi { ptr, i32 } [ %.pn64.pn, %131 ], [ %.pn50.pn, %97 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  br label %201

133:                                              ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #6
  %134 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %36) #6
  %135 = uitofp i64 %134 to double
  invoke void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::MetersPerSecond") align 8 %23, ptr noundef nonnull align 8 dereferenceable(16) %4, double noundef %135)
          to label %136 unwind label %158

136:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #6
  %137 = call noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48) %36) #6
  %138 = uitofp i64 %137 to double
  invoke void @_ZNK3sim16RadiansPerSeconddvEd(ptr dead_on_unwind nonnull writable sret(%"class.sim::RadiansPerSecond") align 8 %24, ptr noundef nonnull align 8 dereferenceable(16) %5, double noundef %138)
          to label %139 unwind label %160

139:                                              ; preds = %136
  %140 = getelementptr inbounds i8, ptr %0, i64 416
  %141 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim16RadiansPerSecondaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %140, ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %25) #6
  invoke void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Radians") align 8 %25, ptr noundef nonnull align 8 dereferenceable(16) %24, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %142 unwind label %162

142:                                              ; preds = %139
  %143 = getelementptr inbounds i8, ptr %0, i64 472
  invoke void @_ZN3sim7RadianspLERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %143, ptr noundef nonnull align 8 dereferenceable(16) %25)
          to label %144 unwind label %164

144:                                              ; preds = %142
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %26) #6
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #6
  invoke void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %27, ptr noundef nonnull align 8 dereferenceable(16) %22, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %145 unwind label %167

145:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %28) #6
  invoke void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Meters") align 8 %28, ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 8 dereferenceable(16) %1)
          to label %146 unwind label %169

146:                                              ; preds = %145
  invoke void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40) %26, ptr noundef nonnull align 8 dereferenceable(16) %27, ptr noundef nonnull align 8 dereferenceable(16) %28)
          to label %147 unwind label %171

147:                                              ; preds = %146
  %148 = getelementptr inbounds i8, ptr %0, i64 432
  invoke void @_ZN3sim9CartesianpLERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40) %148, ptr noundef nonnull align 8 dereferenceable(40) %26)
          to label %149 unwind label %173

149:                                              ; preds = %147
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %26) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #6
  %150 = getelementptr inbounds i8, ptr %0, i64 256
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #6
  %151 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %150) #6
  store ptr %151, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #6
  %152 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %150) #6
  store ptr %152, ptr %30, align 8
  %153 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  br i1 %153, label %.lr.ph72, label %._crit_edge73

.lr.ph72:                                         ; preds = %149
  %154 = getelementptr inbounds i8, ptr %31, i64 8
  %155 = getelementptr inbounds i8, ptr %32, i64 40
  br label %178

._crit_edge73:                                    ; preds = %186, %149
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  invoke void @_ZNSt5mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(40) %33)
          to label %194 unwind label %195

156:                                              ; preds = %._crit_edge
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %200

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

160:                                              ; preds = %136
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %198

162:                                              ; preds = %139
  %163 = landingpad { ptr, i32 }
          cleanup
  br label %166

164:                                              ; preds = %142
  %165 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %25) #6
  br label %166

166:                                              ; preds = %164, %162
  %.pn = phi { ptr, i32 } [ %165, %164 ], [ %163, %162 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %25) #6
  br label %197

167:                                              ; preds = %144
  %168 = landingpad { ptr, i32 }
          cleanup
  br label %177

169:                                              ; preds = %145
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %176

171:                                              ; preds = %146
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %175

173:                                              ; preds = %147
  %174 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %26) #6
  br label %175

175:                                              ; preds = %173, %171
  %.pn40 = phi { ptr, i32 } [ %174, %173 ], [ %172, %171 ]
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #6
  br label %176

176:                                              ; preds = %175, %169
  %.pn40.pn = phi { ptr, i32 } [ %.pn40, %175 ], [ %170, %169 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %28) #6
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #6
  br label %177

177:                                              ; preds = %176, %167
  %.pn40.pn.pn = phi { ptr, i32 } [ %.pn40.pn, %176 ], [ %168, %167 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %26) #6
  br label %197

178:                                              ; preds = %.lr.ph72, %186
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #6
  %179 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  call void @_ZNSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEEC2IS6_S9_TnNSt9enable_ifIXaaclsr6_PCCFPIT_T0_EE18_ConstructiblePairISF_SG_EEclsr6_PCCFPISF_SG_EE26_ImplicitlyConvertiblePairISF_SG_EEEbE4typeELb1EEERKS_ISF_SG_E(ptr noundef nonnull align 8 dereferenceable(16) %31, ptr noundef nonnull align 8 dereferenceable(224) %179)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %32) #6
  %180 = load ptr, ptr %154, align 8, !tbaa !11
  invoke void @_ZNK3sim5Mouse36getCurrentSensorPositionAndDirectionERKNS_6SensorERKNS_9CartesianERKNS_7RadiansE(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.176") align 8 %32, ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(192) %180, ptr noundef nonnull align 8 dereferenceable(40) %148, ptr noundef nonnull align 8 dereferenceable(16) %143)
          to label %181 unwind label %189

181:                                              ; preds = %178
  %182 = load ptr, ptr %31, align 8, !tbaa !13
  %183 = invoke noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48) %150, ptr noundef nonnull align 8 dereferenceable(32) %182)
          to label %184 unwind label %191

184:                                              ; preds = %181
  %185 = load ptr, ptr %0, align 8, !tbaa !14
  invoke void @_ZN3sim6Sensor13updateReadingERKNS_9CartesianERKNS_7RadiansERKNS_4MazeE(ptr noundef nonnull align 8 dereferenceable(192) %183, ptr noundef nonnull align 8 dereferenceable(40) %32, ptr noundef nonnull align 8 dereferenceable(16) %155, ptr noundef nonnull align 8 dereferenceable(26) %185)
          to label %186 unwind label %191

186:                                              ; preds = %184
  call void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %32) #6
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  %187 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #6
  %188 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #6
  br i1 %188, label %178, label %._crit_edge73

189:                                              ; preds = %178
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %193

191:                                              ; preds = %184, %181
  %192 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3sim9CartesianENS0_7RadiansEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %32) #6
  br label %193

193:                                              ; preds = %191, %189
  %.pn44 = phi { ptr, i32 } [ %192, %191 ], [ %190, %189 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %32) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #6
  br label %197

194:                                              ; preds = %._crit_edge73
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #6
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  ret void

195:                                              ; preds = %._crit_edge73
  %196 = landingpad { ptr, i32 }
          cleanup
  br label %197

197:                                              ; preds = %195, %193, %177, %166
  %.pn44.pn = phi { ptr, i32 } [ %.pn44, %193 ], [ %196, %195 ], [ %.pn40.pn.pn, %177 ], [ %.pn, %166 ]
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %24) #6
  br label %198

198:                                              ; preds = %197, %160
  %.pn44.pn.pn = phi { ptr, i32 } [ %.pn44.pn, %197 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #6
  br label %199

199:                                              ; preds = %198, %158
  %.pn44.pn.pn.pn = phi { ptr, i32 } [ %.pn44.pn.pn, %198 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %22) #6
  br label %200

200:                                              ; preds = %199, %156
  %.pn44.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn44.pn.pn.pn, %199 ], [ %157, %156 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %22) #6
  br label %201

201:                                              ; preds = %200, %132
  %.pn64.pn.pn.pn = phi { ptr, i32 } [ %.pn64.pn.pn, %132 ], [ %.pn44.pn.pn.pn.pn, %200 ]
  call void @_ZN3sim15AngularVelocityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %5) #6
  br label %202

202:                                              ; preds = %201, %46
  %.pn64.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn64.pn.pn.pn, %201 ], [ %47, %46 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %4) #6
  br label %203

203:                                              ; preds = %202, %44
  %.pn64.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn64.pn.pn.pn.pn, %202 ], [ %45, %44 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  call void @_ZN3sim5SpeedD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %3) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #6
  resume { ptr, i32 } %.pn64.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt5mutex4lockEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #4 align 2

declare void @_ZN3sim15MetersPerSecondC1Ed(ptr noundef nonnull align 8 dereferenceable(16), double noundef) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(272) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

declare void @_ZN3sim5Wheel14updateRotationERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

declare void @_ZNK3sim5Wheel18getAngularVelocityEv(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #1

declare void @_ZNK3sim16RadiansPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Radians") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

declare void @_ZNK3sim11WheelEffect10getEffectsERKNS_16RadiansPerSecondE(ptr dead_on_unwind writable sret(%"class.std::tuple") align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3

declare void @_ZNK3sim15MetersPerSecondmlEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) local_unnamed_addr #1

declare noundef double @_ZNK3sim5Angle6getCosEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

declare void @_ZN3sim15MetersPerSecondpLERKNS_5SpeedE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

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

declare noundef double @_ZNK3sim5Angle6getSinEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm1EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZSt3getILm2EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEERNSt13tuple_elementIXT_ESt5tupleIJDpT0_EEE4typeERS7_(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3

declare void @_ZN3sim16RadiansPerSecondpLERKNS_15AngularVelocityE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt11_Tuple_implILm0EJN3sim15MetersPerSecondES1_NS0_16RadiansPerSecondEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

declare void @_ZNK3sim15MetersPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::MetersPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #3 align 2

declare void @_ZNK3sim16RadiansPerSeconddvEd(ptr dead_on_unwind writable sret(%"class.sim::RadiansPerSecond") align 8, ptr noundef nonnull align 8 dereferenceable(16), double noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim16RadiansPerSecondaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

declare void @_ZN3sim7RadianspLERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

declare void @_ZNK3sim15MetersPerSecondmlERKNS_8DurationE(ptr dead_on_unwind writable sret(%"class.sim::Meters") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #1

declare void @_ZN3sim9CartesianpLERKNS_10CoordinateE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE2atERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #4 align 2

declare void @_ZN3sim6Sensor13updateReadingERKNS_9CartesianERKNS_7RadiansERKNS_4MazeE(ptr noundef nonnull align 8 dereferenceable(192), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(26)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt5mutex6unlockEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEE", !7, i64 0, !7, i64 8}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!12, !7, i64 8}
!12 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEE", !7, i64 0, !7, i64 8}
!13 = !{!12, !7, i64 0}
!14 = !{!15, !7, i64 0}
!15 = !{!"_ZTSN3sim5MouseE", !7, i64 0, !16, i64 8, !21, i64 48, !23, i64 64, !23, i64 112, !23, i64 160, !32, i64 208, !41, i64 256, !44, i64 304, !47, i64 352, !50, i64 400, !51, i64 416, !16, i64 432, !21, i64 472, !53, i64 488}
!16 = !{!"_ZTSN3sim9CartesianE", !17, i64 0}
!17 = !{!"_ZTSN3sim10CoordinateE", !18, i64 8, !18, i64 24}
!18 = !{!"_ZTSN3sim6MetersE", !19, i64 0}
!19 = !{!"_ZTSN3sim8DistanceE", !20, i64 8}
!20 = !{!"double", !8, i64 0}
!21 = !{!"_ZTSN3sim7RadiansE", !22, i64 0}
!22 = !{!"_ZTSN3sim5AngleE", !20, i64 8}
!23 = !{!"_ZTSN3sim7PolygonE", !24, i64 0, !28, i64 24}
!24 = !{!"_ZTSSt6vectorIN3sim9CartesianESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3sim9CartesianESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3sim9CartesianESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3sim9CartesianESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!28 = !{!"_ZTSSt6vectorIN3sim8TriangleESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIN3sim8TriangleESaIS1_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN3sim8TriangleESaIS1_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3sim8TriangleESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!32 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !33, i64 0}
!33 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim5WheelEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !34, i64 0}
!34 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim5WheelEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !35, i64 0, !37, i64 8}
!35 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !36, i64 0}
!36 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEE"}
!37 = !{!"_ZTSSt15_Rb_tree_header", !38, i64 0, !40, i64 32}
!38 = !{!"_ZTSSt18_Rb_tree_node_base", !39, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!39 = !{!"_ZTSSt14_Rb_tree_color", !8, i64 0}
!40 = !{!"long", !8, i64 0}
!41 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !42, i64 0}
!42 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim6SensorEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !43, i64 0}
!43 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim6SensorEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !35, i64 0, !37, i64 8}
!44 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEE", !45, i64 0}
!45 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim11WheelEffectEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE", !46, i64 0}
!46 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N3sim11WheelEffectEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE13_Rb_tree_implISE_Lb1EEE", !35, i64 0, !37, i64 8}
!47 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEE", !48, i64 0}
!48 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IddEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE", !49, i64 0}
!49 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_S6_IddEESt10_Select1stIS9_ESt4lessIS5_ESaIS9_EE13_Rb_tree_implISD_Lb1EEE", !35, i64 0, !37, i64 8}
!50 = !{!"_ZTSN3sim25CurveTurnFactorCalculatorE", !20, i64 0, !20, i64 8}
!51 = !{!"_ZTSN3sim16RadiansPerSecondE", !52, i64 0}
!52 = !{!"_ZTSN3sim15AngularVelocityE", !20, i64 8}
!53 = !{!"_ZTSSt5mutex", !54, i64 0}
!54 = !{!"_ZTSSt12__mutex_base", !8, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass