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

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

%"class.std::map.30" = type { %"class.std::_Rb_tree.31" }
%"class.std::_Rb_tree.31" = type { %"struct.std::_Rb_tree<sim::Direction, std::pair<const sim::Direction, sim::Degrees>, std::_Select1st<std::pair<const sim::Direction, sim::Degrees>>, std::less<sim::Direction>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<sim::Direction, std::pair<const sim::Direction, sim::Degrees>, std::_Select1st<std::pair<const sim::Direction, sim::Degrees>>, std::less<sim::Direction>>::_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.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Radians" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }
%"class.sim::MouseParser" = type { %"class.pugi::xml_document", %"class.pugi::xml_node", %"class.sim::Radians", %"class.sim::Cartesian" }
%"class.pugi::xml_document" = type { %"class.pugi::xml_node", ptr, [192 x i8] }
%"class.pugi::xml_node" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"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" }
%"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::vector.159" = type { %"struct.std::_Vector_base.160" }
%"struct.std::_Vector_base.160" = type { %"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl" }
%"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl" = type { %"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"struct.std::pair.164" = type { ptr, ptr }
%"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::RadiansPerSecond" = type { %"class.sim::AngularVelocity" }
%"class.sim::AngularVelocity" = type { ptr, 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 }

@_ZN3simL18DIRECTION_TO_ANGLEE = external hidden global %"class.std::map.30", align 8

; 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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3sim5Mouse10initializeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_9DirectionE(ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef %2) #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i8, align 1
  %9 = alloca %"class.sim::Meters", align 8
  %10 = alloca %"class.sim::Cartesian", align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %"class.sim::Radians", align 8
  %14 = alloca %"class.sim::MouseParser", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.sim::Polygon", align 8
  %19 = alloca %"class.std::map.134", align 8
  %20 = alloca %"class.std::map.139", align 8
  %21 = alloca %"class.std::map.144", align 8
  %22 = alloca %"class.std::map.149", align 8
  %23 = alloca %"class.sim::CurveTurnFactorCalculator", align 8
  %24 = alloca %"class.std::vector.159", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %27 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"struct.std::pair.164", align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %32 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"struct.std::pair.169", align 8
  %35 = alloca %"class.sim::Polygon", align 8
  %36 = alloca %"class.sim::Polygon", align 8
  %37 = alloca %"class.sim::Meters", align 8
  %38 = alloca %"class.std::vector.129", align 8
  %39 = alloca %"class.std::vector.129", align 8
  %40 = alloca %"class.std::vector.129", align 8
  %41 = alloca ptr, align 8
  %42 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %43 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %44 = alloca ptr, align 8
  %45 = alloca %"struct.std::pair.164", align 8
  %46 = alloca %"class.std::vector.129", align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %49 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %50 = alloca ptr, align 8
  %51 = alloca %"struct.std::pair.169", align 8
  %52 = alloca %"class.std::vector.129", align 8
  %53 = alloca %"class.std::vector.129", align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store i32 %2, ptr %7, align 4, !tbaa !9
  %54 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #8
  store i8 1, ptr %8, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  %55 = call noundef ptr @_ZN3sim1PEv()
  %56 = call noundef double @_ZN3sim5Param10wallLengthEv(ptr noundef nonnull align 8 dereferenceable(1056) %55)
  %57 = call noundef ptr @_ZN3sim1PEv()
  %58 = call noundef double @_ZN3sim5Param9wallWidthEv(ptr noundef nonnull align 8 dereferenceable(1056) %57)
  %59 = fadd double %56, %58
  %60 = fdiv double %59, 2.000000e+00
  call void @_ZN3sim6MetersC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %9, double noundef %60)
  call void @llvm.lifetime.start.p0(i64 40, ptr %10) #8
  invoke void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40) %10, ptr noundef nonnull align 8 dereferenceable(16) %9, ptr noundef nonnull align 8 dereferenceable(16) %9)
          to label %61 unwind label %82

61:                                               ; preds = %3
  %62 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %63 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3sim9CartesianaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %62, ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %10) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #8
  %64 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %65 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 12
  %66 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3sim9CartesianaSERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %65, ptr noundef nonnull align 8 dereferenceable(40) %64) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %13) #8
  %67 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt3mapIN3sim9DirectionENS0_7DegreesESt4lessIS1_ESaISt4pairIKS1_S2_EEE2atERS6_(ptr noundef nonnull align 8 dereferenceable(48) @_ZN3simL18DIRECTION_TO_ANGLEE, ptr noundef nonnull align 4 dereferenceable(4) %7)
          to label %68 unwind label %86

68:                                               ; preds = %61
  invoke void @_ZN3sim7RadiansC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %13, ptr noundef nonnull align 8 dereferenceable(16) %67)
          to label %69 unwind label %86

69:                                               ; preds = %68
  %70 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  %71 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim7RadiansaSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %70, ptr noundef nonnull align 8 dereferenceable(16) %13) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  %72 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  %73 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 13
  %74 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim7RadiansaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %73, ptr noundef nonnull align 8 dereferenceable(16) %72) #8
  call void @llvm.lifetime.start.p0(i64 272, ptr %14) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #8
  invoke void @_ZN3sim9Directory20getResMouseDirectoryB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16)
          to label %75 unwind label %90

75:                                               ; preds = %69
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %77 unwind label %94

77:                                               ; preds = %75
  invoke void @_ZN3sim11MouseParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb(ptr noundef nonnull align 8 dereferenceable(272) %14, ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef %8)
          to label %78 unwind label %98

78:                                               ; preds = %77
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  %79 = load i8, ptr %8, align 1, !tbaa !11, !range !13, !noundef !14
  %80 = trunc i8 %79 to i1
  br i1 %80, label %104, label %81

81:                                               ; preds = %78
  store i1 false, ptr %4, align 1
  store i32 1, ptr %17, align 4
  br label %346

82:                                               ; preds = %3
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %11, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 40, ptr %10) #8
  br label %350

86:                                               ; preds = %68, %61
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %11, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %13) #8
  br label %350

90:                                               ; preds = %69
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %11, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %12, align 4
  br label %103

94:                                               ; preds = %75
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %11, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %12, align 4
  br label %102

98:                                               ; preds = %77
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %11, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #8
  br label %102

102:                                              ; preds = %98, %94
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  br label %103

103:                                              ; preds = %102, %90
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #8
  br label %349

104:                                              ; preds = %78
  call void @llvm.lifetime.start.p0(i64 48, ptr %18) #8
  %105 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %106 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  invoke void @_ZN3sim11MouseParser7getBodyERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8 %18, ptr noundef nonnull align 8 dereferenceable(272) %14, ptr noundef nonnull align 8 dereferenceable(40) %105, ptr noundef nonnull align 8 dereferenceable(16) %106, ptr noundef %8)
          to label %107 unwind label %151

107:                                              ; preds = %104
  %108 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 3
  %109 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %108, ptr noundef nonnull align 8 dereferenceable(48) %18)
          to label %110 unwind label %155

110:                                              ; preds = %107
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %18) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %19) #8
  %111 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %112 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  invoke void @_ZN3sim11MouseParser9getWheelsB5cxx11ERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.std::map.134") align 8 %19, ptr noundef nonnull align 8 dereferenceable(272) %14, ptr noundef nonnull align 8 dereferenceable(40) %111, ptr noundef nonnull align 8 dereferenceable(16) %112, ptr noundef %8)
          to label %113 unwind label %160

113:                                              ; preds = %110
  %114 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  %115 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %114, ptr noundef nonnull align 8 dereferenceable(48) %19) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %20) #8
  %116 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %117 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  %118 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 0
  %119 = load ptr, ptr %118, align 8, !tbaa !15
  invoke void @_ZN3sim11MouseParser10getSensorsB5cxx11ERKNS_9CartesianERKNS_7RadiansERKNS_4MazeEPb(ptr dead_on_unwind writable sret(%"class.std::map.139") align 8 %20, ptr noundef nonnull align 8 dereferenceable(272) %14, ptr noundef nonnull align 8 dereferenceable(40) %116, ptr noundef nonnull align 8 dereferenceable(16) %117, ptr noundef nonnull align 8 dereferenceable(26) %119, ptr noundef %8)
          to label %120 unwind label %164

120:                                              ; preds = %113
  %121 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 7
  %122 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %121, ptr noundef nonnull align 8 dereferenceable(48) %20) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %20) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %21) #8
  %123 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  %124 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 2
  %125 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  invoke void @_ZNK3sim5Mouse15getWheelEffectsERKNS_9CartesianERKNS_7RadiansERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessISD_ESaISt4pairIKSD_SE_EEE(ptr dead_on_unwind writable sret(%"class.std::map.144") align 8 %21, ptr noundef nonnull align 8 dereferenceable(528) %54, ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(16) %124, ptr noundef nonnull align 8 dereferenceable(48) %125)
          to label %126 unwind label %168

126:                                              ; preds = %120
  %127 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 8
  %128 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %127, ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %21) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %22) #8
  %129 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  %130 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 8
  invoke void @_ZNK3sim5Mouse30getWheelSpeedAdjustmentFactorsERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEE(ptr dead_on_unwind writable sret(%"class.std::map.149") align 8 %22, ptr noundef nonnull align 8 dereferenceable(528) %54, ptr noundef nonnull align 8 dereferenceable(48) %129, ptr noundef nonnull align 8 dereferenceable(48) %130)
          to label %131 unwind label %172

131:                                              ; preds = %126
  %132 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 9
  %133 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEEaSEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %132, ptr noundef nonnull align 8 dereferenceable(48) %22) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %22) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #8
  %134 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  %135 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 8
  %136 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 9
  invoke void @_ZN3sim25CurveTurnFactorCalculatorC1ERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEERKS1_IS7_SB_IddESA_SaISB_ISC_SO_EEE(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull align 8 dereferenceable(48) %134, ptr noundef nonnull align 8 dereferenceable(48) %135, ptr noundef nonnull align 8 dereferenceable(48) %136)
          to label %137 unwind label %176

137:                                              ; preds = %131
  %138 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %138, ptr align 8 %23, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #8
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #8
  %139 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 3
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(48) %139)
          to label %140 unwind label %180

140:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %141 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  store ptr %141, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %142 = load ptr, ptr %25, align 8, !tbaa !5
  %143 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %142) #8
  %144 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %26, i32 0, i32 0
  store ptr %143, ptr %144, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %145 = load ptr, ptr %25, align 8, !tbaa !5
  %146 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %145) #8
  %147 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %27, i32 0, i32 0
  store ptr %146, ptr %147, align 8
  br label %148

148:                                              ; preds = %193, %140
  %149 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  br i1 %149, label %184, label %150

150:                                              ; preds = %148
  store i32 2, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %204

151:                                              ; preds = %104
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %11, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %12, align 4
  br label %159

155:                                              ; preds = %107
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %11, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %12, align 4
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %18) #8
  br label %159

159:                                              ; preds = %155, %151
  call void @llvm.lifetime.end.p0(i64 48, ptr %18) #8
  br label %348

160:                                              ; preds = %110
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %11, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %19) #8
  br label %348

164:                                              ; preds = %113
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %11, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %20) #8
  br label %348

168:                                              ; preds = %120
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %11, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %21) #8
  br label %348

172:                                              ; preds = %126
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %11, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 48, ptr %22) #8
  br label %348

176:                                              ; preds = %131
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %11, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #8
  br label %348

180:                                              ; preds = %249, %247, %245, %137
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %11, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %12, align 4
  br label %345

184:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  %185 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  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) %29, ptr noundef nonnull align 8 dereferenceable(304) %185)
          to label %186 unwind label %195

186:                                              ; preds = %184
  store ptr %29, ptr %28, align 8, !tbaa !5
  %187 = load ptr, ptr %28, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.std::pair.164", ptr %187, i32 0, i32 1
  %189 = load ptr, ptr %188, align 8, !tbaa !58
  %190 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272) %189)
          to label %191 unwind label %199

191:                                              ; preds = %186
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(48) %190)
          to label %192 unwind label %199

192:                                              ; preds = %191
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %193

193:                                              ; preds = %192
  %194 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  br label %148

195:                                              ; preds = %184
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %11, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %12, align 4
  br label %203

199:                                              ; preds = %191, %186
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %11, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  br label %203

203:                                              ; preds = %199, %195
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %345

204:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %205 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 7
  store ptr %205, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %206 = load ptr, ptr %30, align 8, !tbaa !5
  %207 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %206) #8
  %208 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %31, i32 0, i32 0
  store ptr %207, ptr %208, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %209 = load ptr, ptr %30, align 8, !tbaa !5
  %210 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %209) #8
  %211 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %32, i32 0, i32 0
  store ptr %210, ptr %211, align 8
  br label %212

212:                                              ; preds = %224, %204
  %213 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  br i1 %213, label %215, label %214

214:                                              ; preds = %212
  store i32 4, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %235

215:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #8
  %216 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  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) %34, ptr noundef nonnull align 8 dereferenceable(224) %216)
          to label %217 unwind label %226

217:                                              ; preds = %215
  store ptr %34, ptr %33, align 8, !tbaa !5
  %218 = load ptr, ptr %33, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.std::pair.169", ptr %218, i32 0, i32 1
  %220 = load ptr, ptr %219, align 8, !tbaa !60
  %221 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %220)
          to label %222 unwind label %230

222:                                              ; preds = %217
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(48) %221)
          to label %223 unwind label %230

223:                                              ; preds = %222
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %224

224:                                              ; preds = %223
  %225 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  br label %212

226:                                              ; preds = %215
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %11, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %12, align 4
  br label %234

230:                                              ; preds = %222, %217
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %11, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #8
  br label %234

234:                                              ; preds = %230, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %345

235:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 48, ptr %35) #8
  invoke void @_ZN3sim17GeometryUtilities10convexHullERKSt6vectorINS_7PolygonESaIS2_EE(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8 %35, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %236 unwind label %262

236:                                              ; preds = %235
  %237 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 4
  %238 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %237, ptr noundef nonnull align 8 dereferenceable(48) %35)
          to label %239 unwind label %266

239:                                              ; preds = %236
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %36) #8
  %240 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %37) #8
  invoke void @_ZN3sim6MetersC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %37, double noundef 5.000000e-03)
          to label %241 unwind label %271

241:                                              ; preds = %239
  invoke void @_ZN3sim17GeometryUtilities19createCirclePolygonERKNS_9CartesianERKNS_8DistanceEi(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8 %36, ptr noundef nonnull align 8 dereferenceable(40) %240, ptr noundef nonnull align 8 dereferenceable(16) %37, i32 noundef 8)
          to label %242 unwind label %275

242:                                              ; preds = %241
  %243 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 5
  %244 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %243, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %245 unwind label %279

245:                                              ; preds = %242
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  %246 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 3
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %38, ptr noundef nonnull align 8 dereferenceable(48) %246)
          to label %247 unwind label %180

247:                                              ; preds = %245
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #8
  %248 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 4
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %39, ptr noundef nonnull align 8 dereferenceable(48) %248)
          to label %249 unwind label %180

249:                                              ; preds = %247
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #8
  %250 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 5
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %40, ptr noundef nonnull align 8 dereferenceable(48) %250)
          to label %251 unwind label %180

251:                                              ; preds = %249
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %252 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 6
  store ptr %252, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  %253 = load ptr, ptr %41, align 8, !tbaa !5
  %254 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %253) #8
  %255 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %42, i32 0, i32 0
  store ptr %254, ptr %255, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %256 = load ptr, ptr %41, align 8, !tbaa !5
  %257 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %256) #8
  %258 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", ptr %43, i32 0, i32 0
  store ptr %257, ptr %258, align 8
  br label %259

259:                                              ; preds = %294, %251
  %260 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  br i1 %260, label %285, label %261

261:                                              ; preds = %259
  store i32 6, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %305

262:                                              ; preds = %235
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %11, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %12, align 4
  br label %270

266:                                              ; preds = %236
  %267 = landingpad { ptr, i32 }
          cleanup
  %268 = extractvalue { ptr, i32 } %267, 0
  store ptr %268, ptr %11, align 8
  %269 = extractvalue { ptr, i32 } %267, 1
  store i32 %269, ptr %12, align 4
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %35) #8
  br label %270

270:                                              ; preds = %266, %262
  call void @llvm.lifetime.end.p0(i64 48, ptr %35) #8
  br label %345

271:                                              ; preds = %239
  %272 = landingpad { ptr, i32 }
          cleanup
  %273 = extractvalue { ptr, i32 } %272, 0
  store ptr %273, ptr %11, align 8
  %274 = extractvalue { ptr, i32 } %272, 1
  store i32 %274, ptr %12, align 4
  br label %284

275:                                              ; preds = %241
  %276 = landingpad { ptr, i32 }
          cleanup
  %277 = extractvalue { ptr, i32 } %276, 0
  store ptr %277, ptr %11, align 8
  %278 = extractvalue { ptr, i32 } %276, 1
  store i32 %278, ptr %12, align 4
  br label %283

279:                                              ; preds = %242
  %280 = landingpad { ptr, i32 }
          cleanup
  %281 = extractvalue { ptr, i32 } %280, 0
  store ptr %281, ptr %11, align 8
  %282 = extractvalue { ptr, i32 } %280, 1
  store i32 %282, ptr %12, align 4
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #8
  br label %283

283:                                              ; preds = %279, %275
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #8
  br label %284

284:                                              ; preds = %283, %271
  call void @llvm.lifetime.end.p0(i64 16, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #8
  br label %345

285:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %45) #8
  %286 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  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) %45, ptr noundef nonnull align 8 dereferenceable(304) %286)
          to label %287 unwind label %296

287:                                              ; preds = %285
  store ptr %45, ptr %44, align 8, !tbaa !5
  %288 = load ptr, ptr %44, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.std::pair.164", ptr %288, i32 0, i32 1
  %290 = load ptr, ptr %289, align 8, !tbaa !58
  %291 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272) %290)
          to label %292 unwind label %300

292:                                              ; preds = %287
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %46, ptr noundef nonnull align 8 dereferenceable(48) %291)
          to label %293 unwind label %300

293:                                              ; preds = %292
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %294

294:                                              ; preds = %293
  %295 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  br label %259

296:                                              ; preds = %285
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %11, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %12, align 4
  br label %304

300:                                              ; preds = %292, %287
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %11, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %45) #8
  br label %304

304:                                              ; preds = %300, %296
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %345

305:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %306 = getelementptr inbounds %"class.sim::Mouse", ptr %54, i32 0, i32 7
  store ptr %306, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %307 = load ptr, ptr %47, align 8, !tbaa !5
  %308 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %307) #8
  %309 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %48, i32 0, i32 0
  store ptr %308, ptr %309, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %310 = load ptr, ptr %47, align 8, !tbaa !5
  %311 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %310) #8
  %312 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.168", ptr %49, i32 0, i32 0
  store ptr %311, ptr %312, align 8
  br label %313

313:                                              ; preds = %331, %305
  %314 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #8
  br i1 %314, label %316, label %315

315:                                              ; preds = %313
  store i32 8, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %342

316:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %51) #8
  %317 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  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) %51, ptr noundef nonnull align 8 dereferenceable(224) %317)
          to label %318 unwind label %333

318:                                              ; preds = %316
  store ptr %51, ptr %50, align 8, !tbaa !5
  %319 = load ptr, ptr %50, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.std::pair.169", ptr %319, i32 0, i32 1
  %321 = load ptr, ptr %320, align 8, !tbaa !60
  %322 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %321)
          to label %323 unwind label %337

323:                                              ; preds = %318
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %52, ptr noundef nonnull align 8 dereferenceable(48) %322)
          to label %324 unwind label %337

324:                                              ; preds = %323
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #8
  %325 = load ptr, ptr %50, align 8, !tbaa !5
  %326 = getelementptr inbounds %"struct.std::pair.169", ptr %325, i32 0, i32 1
  %327 = load ptr, ptr %326, align 8, !tbaa !60
  %328 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor21getInitialViewPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %327)
          to label %329 unwind label %337

329:                                              ; preds = %324
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8 %53, ptr noundef nonnull align 8 dereferenceable(48) %328)
          to label %330 unwind label %337

330:                                              ; preds = %329
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %53) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %331

331:                                              ; preds = %330
  %332 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  br label %313

333:                                              ; preds = %316
  %334 = landingpad { ptr, i32 }
          cleanup
  %335 = extractvalue { ptr, i32 } %334, 0
  store ptr %335, ptr %11, align 8
  %336 = extractvalue { ptr, i32 } %334, 1
  store i32 %336, ptr %12, align 4
  br label %341

337:                                              ; preds = %329, %324, %323, %318
  %338 = landingpad { ptr, i32 }
          cleanup
  %339 = extractvalue { ptr, i32 } %338, 0
  store ptr %339, ptr %11, align 8
  %340 = extractvalue { ptr, i32 } %338, 1
  store i32 %340, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %51) #8
  br label %341

341:                                              ; preds = %337, %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %345

342:                                              ; preds = %315
  %343 = load i8, ptr %8, align 1, !tbaa !11, !range !13, !noundef !14
  %344 = trunc i8 %343 to i1
  store i1 %344, ptr %4, align 1
  store i32 1, ptr %17, align 4
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #8
  br label %346

345:                                              ; preds = %341, %304, %284, %270, %234, %203, %180
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #8
  br label %348

346:                                              ; preds = %342, %81
  call void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %14) #8
  call void @llvm.lifetime.end.p0(i64 272, ptr %14) #8
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  %347 = load i1, ptr %4, align 1
  ret i1 %347

348:                                              ; preds = %345, %176, %172, %168, %164, %160, %159
  call void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %14) #8
  br label %349

349:                                              ; preds = %348, %103
  call void @llvm.lifetime.end.p0(i64 272, ptr %14) #8
  br label %350

350:                                              ; preds = %349, %86, %82
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  br label %351

351:                                              ; preds = %350
  %352 = load ptr, ptr %11, align 8
  %353 = load i32, ptr %12, align 4
  %354 = insertvalue { ptr, i32 } poison, ptr %352, 0
  %355 = insertvalue { ptr, i32 } %354, i32 %353, 1
  resume { ptr, i32 } %355
}

declare noundef ptr @_ZN3sim1PEv() #6

declare noundef double @_ZN3sim5Param10wallLengthEv(ptr noundef nonnull align 8 dereferenceable(1056)) #6

declare noundef double @_ZN3sim5Param9wallWidthEv(ptr noundef nonnull align 8 dereferenceable(1056)) #6

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

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 #6

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

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

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

declare void @_ZN3sim7RadiansC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

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

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

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

declare void @_ZN3sim9Directory20getResMouseDirectoryB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8) #6

declare void @_ZN3sim11MouseParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #6

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

declare void @_ZN3sim11MouseParser7getBodyERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #7 align 2

declare void @_ZN3sim11MouseParser9getWheelsB5cxx11ERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.std::map.134") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) #6

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

declare void @_ZN3sim11MouseParser10getSensorsB5cxx11ERKNS_9CartesianERKNS_7RadiansERKNS_4MazeEPb(ptr dead_on_unwind writable sret(%"class.std::map.139") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(26), ptr noundef) #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse15getWheelEffectsERKNS_9CartesianERKNS_7RadiansERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessISD_ESaISt4pairIKSD_SE_EEE(ptr dead_on_unwind noalias writable sret(%"class.std::map.144") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse30getWheelSpeedAdjustmentFactorsERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEE(ptr dead_on_unwind noalias writable sret(%"class.std::map.149") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

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

declare void @_ZN3sim25CurveTurnFactorCalculatorC1ERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEERKS1_IS7_SB_IddESA_SaISB_ISC_SO_EEE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; 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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272)) #6

; 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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192)) #6

; 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

declare void @_ZN3sim17GeometryUtilities10convexHullERKSt6vectorINS_7PolygonESaIS2_EE(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #6

declare void @_ZN3sim17GeometryUtilities19createCirclePolygonERKNS_9CartesianERKNS_8DistanceEi(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #6

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

declare void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8, ptr noundef nonnull align 8 dereferenceable(48)) #6

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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor21getInitialViewPolygonEv(ptr noundef nonnull align 8 dereferenceable(192)) #6

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272)) unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN3sim9DirectionE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{i8 0, i8 2}
!14 = !{}
!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}
!56 = !{i64 0, i64 8, !57, i64 8, i64 8, !57}
!57 = !{!21, !21, i64 0}
!58 = !{!59, !6, i64 8}
!59 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEE", !6, i64 0, !6, i64 8}
!60 = !{!61, !6, i64 8}
!61 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEE", !6, i64 0, !6, i64 8}


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

%"class.std::map.30" = type { %"class.std::_Rb_tree.31" }
%"class.std::_Rb_tree.31" = type { %"struct.std::_Rb_tree<sim::Direction, std::pair<const sim::Direction, sim::Degrees>, std::_Select1st<std::pair<const sim::Direction, sim::Degrees>>, std::less<sim::Direction>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<sim::Direction, std::pair<const sim::Direction, sim::Degrees>, std::_Select1st<std::pair<const sim::Direction, sim::Degrees>>, std::less<sim::Direction>>::_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.sim::Meters" = type { %"class.sim::Distance" }
%"class.sim::Distance" = type { ptr, double }
%"class.sim::Cartesian" = type { %"class.sim::Coordinate" }
%"class.sim::Coordinate" = type { ptr, %"class.sim::Meters", %"class.sim::Meters" }
%"class.sim::Radians" = type { %"class.sim::Angle" }
%"class.sim::Angle" = type { ptr, double }
%"class.sim::MouseParser" = type { %"class.pugi::xml_document", %"class.pugi::xml_node", %"class.sim::Radians", %"class.sim::Cartesian" }
%"class.pugi::xml_document" = type { %"class.pugi::xml_node", ptr, [192 x i8] }
%"class.pugi::xml_node" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"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" }
%"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::vector.159" = type { %"struct.std::_Vector_base.160" }
%"struct.std::_Vector_base.160" = type { %"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl" }
%"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl" = type { %"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl_data" }
%"struct.std::_Vector_base<sim::Polygon, std::allocator<sim::Polygon>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"struct.std::pair.164" = type { ptr, ptr }
%"struct.std::_Rb_tree_iterator.168" = type { ptr }
%"struct.std::pair.169" = type { ptr, ptr }

@_ZN3simL18DIRECTION_TO_ANGLEE = external hidden global %"class.std::map.30", align 8

; 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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN3sim5Mouse10initializeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_9DirectionE(ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(32) %1, i32 noundef %2) local_unnamed_addr #5 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca i8, align 1
  %6 = alloca %"class.sim::Meters", align 8
  %7 = alloca %"class.sim::Cartesian", align 8
  %8 = alloca %"class.sim::Radians", align 8
  %9 = alloca %"class.sim::MouseParser", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.sim::Polygon", align 8
  %13 = alloca %"class.std::map.134", align 8
  %14 = alloca %"class.std::map.139", align 8
  %15 = alloca %"class.std::map.144", align 8
  %16 = alloca %"class.std::map.149", align 8
  %17 = alloca %"class.sim::CurveTurnFactorCalculator", align 8
  %18 = alloca %"class.std::vector.159", align 8
  %19 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %20 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %21 = alloca %"struct.std::pair.164", align 8
  %22 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %23 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %24 = alloca %"struct.std::pair.169", align 8
  %25 = alloca %"class.sim::Polygon", align 8
  %26 = alloca %"class.sim::Polygon", align 8
  %27 = alloca %"class.sim::Meters", align 8
  %28 = alloca %"class.std::vector.129", align 8
  %29 = alloca %"class.std::vector.129", align 8
  %30 = alloca %"class.std::vector.129", align 8
  %31 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %32 = alloca %"struct.std::_Rb_tree_iterator", align 8
  %33 = alloca %"struct.std::pair.164", align 8
  %34 = alloca %"class.std::vector.129", align 8
  %35 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %36 = alloca %"struct.std::_Rb_tree_iterator.168", align 8
  %37 = alloca %"struct.std::pair.169", align 8
  %38 = alloca %"class.std::vector.129", align 8
  %39 = alloca %"class.std::vector.129", align 8
  store i32 %2, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #8
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #8
  %40 = tail call noundef ptr @_ZN3sim1PEv()
  %41 = tail call noundef double @_ZN3sim5Param10wallLengthEv(ptr noundef nonnull align 8 dereferenceable(1056) %40)
  %42 = tail call noundef ptr @_ZN3sim1PEv()
  %43 = tail call noundef double @_ZN3sim5Param9wallWidthEv(ptr noundef nonnull align 8 dereferenceable(1056) %42)
  %44 = fadd double %41, %43
  %45 = fmul double %44, 5.000000e-01
  call void @_ZN3sim6MetersC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %6, double noundef %45)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #8
  invoke void @_ZN3sim9CartesianC1ERKNS_8DistanceES3_(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef nonnull align 8 dereferenceable(16) %6, ptr noundef nonnull align 8 dereferenceable(16) %6)
          to label %46 unwind label %63

46:                                               ; preds = %3
  %47 = getelementptr inbounds i8, ptr %0, i64 8
  %48 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3sim9CartesianaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(40) %7) #8
  call void @_ZN3sim10CoordinateD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #8
  %49 = getelementptr inbounds i8, ptr %0, i64 432
  %50 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3sim9CartesianaSERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %49, ptr noundef nonnull align 8 dereferenceable(40) %47) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #8
  %51 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt3mapIN3sim9DirectionENS0_7DegreesESt4lessIS1_ESaISt4pairIKS1_S2_EEE2atERS6_(ptr noundef nonnull align 8 dereferenceable(48) @_ZN3simL18DIRECTION_TO_ANGLEE, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %52 unwind label %65

52:                                               ; preds = %46
  invoke void @_ZN3sim7RadiansC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16) %8, ptr noundef nonnull align 8 dereferenceable(16) %51)
          to label %53 unwind label %65

53:                                               ; preds = %52
  %54 = getelementptr inbounds i8, ptr %0, i64 48
  %55 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim7RadiansaSEOS0_(ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @_ZN3sim5AngleD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %8) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  %56 = getelementptr inbounds i8, ptr %0, i64 472
  %57 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3sim7RadiansaSERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %56, ptr noundef nonnull align 8 dereferenceable(16) %54) #8
  call void @llvm.lifetime.start.p0(i64 272, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  invoke void @_ZN3sim9Directory20getResMouseDirectoryB5cxx11Ev(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11)
          to label %58 unwind label %67

58:                                               ; preds = %53
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %59 unwind label %69

59:                                               ; preds = %58
  invoke void @_ZN3sim11MouseParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb(ptr noundef nonnull align 8 dereferenceable(272) %9, ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull %5)
          to label %60 unwind label %71

60:                                               ; preds = %59
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  %61 = load i8, ptr %5, align 1, !tbaa !9, !range !11, !noundef !12
  %62 = trunc nuw i8 %61 to i1
  br i1 %62, label %75, label %201

63:                                               ; preds = %3
  %64 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #8
  br label %204

65:                                               ; preds = %52, %46
  %66 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #8
  br label %204

67:                                               ; preds = %53
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %74

69:                                               ; preds = %58
  %70 = landingpad { ptr, i32 }
          cleanup
  br label %73

71:                                               ; preds = %59
  %72 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  br label %73

73:                                               ; preds = %71, %69
  %.pn = phi { ptr, i32 } [ %72, %71 ], [ %70, %69 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %74

74:                                               ; preds = %73, %67
  %.pn.pn = phi { ptr, i32 } [ %.pn, %73 ], [ %68, %67 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %203

75:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %12) #8
  invoke void @_ZN3sim11MouseParser7getBodyERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind nonnull writable sret(%"class.sim::Polygon") align 8 %12, ptr noundef nonnull align 8 dereferenceable(272) %9, ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull %5)
          to label %76 unwind label %104

76:                                               ; preds = %75
  %77 = getelementptr inbounds i8, ptr %0, i64 64
  %78 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %77, ptr noundef nonnull align 8 dereferenceable(48) %12)
          to label %79 unwind label %106

79:                                               ; preds = %76
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %12) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %13) #8
  invoke void @_ZN3sim11MouseParser9getWheelsB5cxx11ERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind nonnull writable sret(%"class.std::map.134") align 8 %13, ptr noundef nonnull align 8 dereferenceable(272) %9, ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull %5)
          to label %80 unwind label %109

80:                                               ; preds = %79
  %81 = getelementptr inbounds i8, ptr %0, i64 208
  %82 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %81, ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %13) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %14) #8
  %83 = load ptr, ptr %0, align 8, !tbaa !13
  invoke void @_ZN3sim11MouseParser10getSensorsB5cxx11ERKNS_9CartesianERKNS_7RadiansERKNS_4MazeEPb(ptr dead_on_unwind nonnull writable sret(%"class.std::map.139") align 8 %14, ptr noundef nonnull align 8 dereferenceable(272) %9, ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull align 8 dereferenceable(26) %83, ptr noundef nonnull %5)
          to label %84 unwind label %111

84:                                               ; preds = %80
  %85 = getelementptr inbounds i8, ptr %0, i64 256
  %86 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %85, ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %14) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %15) #8
  invoke void @_ZNK3sim5Mouse15getWheelEffectsERKNS_9CartesianERKNS_7RadiansERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessISD_ESaISt4pairIKSD_SE_EEE(ptr dead_on_unwind nonnull writable sret(%"class.std::map.144") align 8 %15, ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(16) %54, ptr noundef nonnull align 8 dereferenceable(48) %81)
          to label %87 unwind label %113

87:                                               ; preds = %84
  %88 = getelementptr inbounds i8, ptr %0, i64 304
  %89 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(48) %88, ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim11WheelEffectESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %15) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %16) #8
  invoke void @_ZNK3sim5Mouse30getWheelSpeedAdjustmentFactorsERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEE(ptr dead_on_unwind nonnull writable sret(%"class.std::map.149") align 8 %16, ptr noundef nonnull align 8 dereferenceable(528) %0, ptr noundef nonnull align 8 dereferenceable(48) %81, ptr noundef nonnull align 8 dereferenceable(48) %88)
          to label %90 unwind label %115

90:                                               ; preds = %87
  %91 = getelementptr inbounds i8, ptr %0, i64 352
  %92 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEEaSEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %91, ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIddESt4lessIS5_ESaIS6_IKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %16) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %17) #8
  invoke void @_ZN3sim25CurveTurnFactorCalculatorC1ERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEERKS1_IS7_SB_IddESA_SaISB_ISC_SO_EEE(ptr noundef nonnull align 8 dereferenceable(16) %17, ptr noundef nonnull align 8 dereferenceable(48) %81, ptr noundef nonnull align 8 dereferenceable(48) %88, ptr noundef nonnull align 8 dereferenceable(48) %91)
          to label %93 unwind label %117

93:                                               ; preds = %90
  %94 = getelementptr inbounds i8, ptr %0, i64 400
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %94, ptr noundef nonnull align 8 dereferenceable(16) %17, i64 16, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #8
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(48) %77)
          to label %95 unwind label %119

95:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  %96 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %81) #8
  store ptr %96, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  %97 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %81) #8
  store ptr %97, ptr %20, align 8
  %98 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  br i1 %98, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %95
  %99 = getelementptr inbounds i8, ptr %21, i64 8
  br label %121

._crit_edge:                                      ; preds = %126, %95
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  %100 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %85) #8
  store ptr %100, ptr %22, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %101 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %85) #8
  store ptr %101, ptr %23, align 8
  %102 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  br i1 %102, label %.lr.ph43, label %._crit_edge44

.lr.ph43:                                         ; preds = %._crit_edge
  %103 = getelementptr inbounds i8, ptr %24, i64 8
  br label %131

104:                                              ; preds = %75
  %105 = landingpad { ptr, i32 }
          cleanup
  br label %108

106:                                              ; preds = %76
  %107 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %12) #8
  br label %108

108:                                              ; preds = %106, %104
  %.pn30 = phi { ptr, i32 } [ %107, %106 ], [ %105, %104 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %12) #8
  br label %202

109:                                              ; preds = %79
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #8
  br label %202

111:                                              ; preds = %80
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %14) #8
  br label %202

113:                                              ; preds = %84
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %15) #8
  br label %202

115:                                              ; preds = %87
  %116 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %16) #8
  br label %202

117:                                              ; preds = %90
  %118 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %17) #8
  br label %202

119:                                              ; preds = %151, %150, %149, %93
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %200

121:                                              ; preds = %.lr.ph, %126
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #8
  %122 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  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) %21, ptr noundef nonnull align 8 dereferenceable(304) %122)
  %123 = load ptr, ptr %99, align 8, !tbaa !57
  %124 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272) %123)
          to label %125 unwind label %129

125:                                              ; preds = %121
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(48) %124)
          to label %126 unwind label %129

126:                                              ; preds = %125
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  %127 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  %128 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  br i1 %128, label %121, label %._crit_edge

129:                                              ; preds = %125, %121
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  br label %200

._crit_edge44:                                    ; preds = %136, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %25) #8
  invoke void @_ZN3sim17GeometryUtilities10convexHullERKSt6vectorINS_7PolygonESaIS2_EE(ptr dead_on_unwind nonnull writable sret(%"class.sim::Polygon") align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %141 unwind label %161

131:                                              ; preds = %.lr.ph43, %136
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #8
  %132 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #8
  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) %24, ptr noundef nonnull align 8 dereferenceable(224) %132)
  %133 = load ptr, ptr %103, align 8, !tbaa !59
  %134 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %133)
          to label %135 unwind label %139

135:                                              ; preds = %131
  invoke void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(48) %134)
          to label %136 unwind label %139

136:                                              ; preds = %135
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #8
  %137 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #8
  %138 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  br i1 %138, label %131, label %._crit_edge44

139:                                              ; preds = %135, %131
  %140 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  br label %200

141:                                              ; preds = %._crit_edge44
  %142 = getelementptr inbounds i8, ptr %0, i64 112
  %143 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %142, ptr noundef nonnull align 8 dereferenceable(48) %25)
          to label %144 unwind label %163

144:                                              ; preds = %141
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %25) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %26) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %27) #8
  invoke void @_ZN3sim6MetersC1Ed(ptr noundef nonnull align 8 dereferenceable(16) %27, double noundef 5.000000e-03)
          to label %145 unwind label %166

145:                                              ; preds = %144
  invoke void @_ZN3sim17GeometryUtilities19createCirclePolygonERKNS_9CartesianERKNS_8DistanceEi(ptr dead_on_unwind nonnull writable sret(%"class.sim::Polygon") align 8 %26, ptr noundef nonnull align 8 dereferenceable(40) %47, ptr noundef nonnull align 8 dereferenceable(16) %27, i32 noundef 8)
          to label %146 unwind label %168

146:                                              ; preds = %145
  %147 = getelementptr inbounds i8, ptr %0, i64 160
  %148 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %147, ptr noundef nonnull align 8 dereferenceable(48) %26)
          to label %149 unwind label %170

149:                                              ; preds = %146
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %26) #8
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %26) #8
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %28, ptr noundef nonnull align 8 dereferenceable(48) %77)
          to label %150 unwind label %119

150:                                              ; preds = %149
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %28) #8
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %29, ptr noundef nonnull align 8 dereferenceable(48) %142)
          to label %151 unwind label %119

151:                                              ; preds = %150
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %29) #8
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %30, ptr noundef nonnull align 8 dereferenceable(48) %147)
          to label %152 unwind label %119

152:                                              ; preds = %151
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %30) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #8
  %153 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %81) #8
  store ptr %153, ptr %31, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #8
  %154 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %81) #8
  store ptr %154, ptr %32, align 8
  %155 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  br i1 %155, label %.lr.ph46, label %._crit_edge47

.lr.ph46:                                         ; preds = %152
  %156 = getelementptr inbounds i8, ptr %33, i64 8
  br label %174

._crit_edge47:                                    ; preds = %179, %152
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  %157 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %85) #8
  store ptr %157, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  %158 = call ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorESt4lessIS5_ESaISt4pairIKS5_S7_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %85) #8
  store ptr %158, ptr %36, align 8
  %159 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  br i1 %159, label %.lr.ph49, label %._crit_edge50

.lr.ph49:                                         ; preds = %._crit_edge47
  %160 = getelementptr inbounds i8, ptr %37, i64 8
  br label %186

161:                                              ; preds = %._crit_edge44
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %165

163:                                              ; preds = %141
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %25) #8
  br label %165

165:                                              ; preds = %163, %161
  %.pn32 = phi { ptr, i32 } [ %164, %163 ], [ %162, %161 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %25) #8
  br label %200

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

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

170:                                              ; preds = %146
  %171 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3sim7PolygonD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %26) #8
  br label %172

172:                                              ; preds = %170, %168
  %.pn34 = phi { ptr, i32 } [ %171, %170 ], [ %169, %168 ]
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %27) #8
  br label %173

173:                                              ; preds = %172, %166
  %.pn34.pn = phi { ptr, i32 } [ %.pn34, %172 ], [ %167, %166 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %27) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %26) #8
  br label %200

174:                                              ; preds = %.lr.ph46, %179
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %33) #8
  %175 = call noundef nonnull align 8 dereferenceable(304) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  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) %33, ptr noundef nonnull align 8 dereferenceable(304) %175)
  %176 = load ptr, ptr %156, align 8, !tbaa !57
  %177 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272) %176)
          to label %178 unwind label %182

178:                                              ; preds = %174
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %34, ptr noundef nonnull align 8 dereferenceable(48) %177)
          to label %179 unwind label %182

179:                                              ; preds = %178
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #8
  %180 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  %181 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim5WheelEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32) #8
  br i1 %181, label %174, label %._crit_edge47

182:                                              ; preds = %178, %174
  %183 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #8
  br label %200

._crit_edge50:                                    ; preds = %195, %._crit_edge47
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  %184 = load i8, ptr %5, align 1, !tbaa !9, !range !11, !noundef !12
  %185 = trunc nuw i8 %184 to i1
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #8
  br label %201

186:                                              ; preds = %.lr.ph49, %195
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %37) #8
  %187 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  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) %37, ptr noundef nonnull align 8 dereferenceable(224) %187)
  %188 = load ptr, ptr %160, align 8, !tbaa !59
  %189 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %188)
          to label %190 unwind label %198

190:                                              ; preds = %186
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %38, ptr noundef nonnull align 8 dereferenceable(48) %189)
          to label %191 unwind label %198

191:                                              ; preds = %190
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %38) #8
  %192 = load ptr, ptr %160, align 8, !tbaa !59
  %193 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor21getInitialViewPolygonEv(ptr noundef nonnull align 8 dereferenceable(192) %192)
          to label %194 unwind label %198

194:                                              ; preds = %191
  invoke void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.129") align 8 %39, ptr noundef nonnull align 8 dereferenceable(48) %193)
          to label %195 unwind label %198

195:                                              ; preds = %194
  call void @_ZNSt6vectorIN3sim8TriangleESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  %196 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  %197 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN3sim6SensorEEESD_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  br i1 %197, label %186, label %._crit_edge50

198:                                              ; preds = %194, %191, %190, %186
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  br label %200

200:                                              ; preds = %198, %182, %173, %165, %139, %129, %119
  %.pn37 = phi { ptr, i32 } [ %130, %129 ], [ %140, %139 ], [ %183, %182 ], [ %199, %198 ], [ %120, %119 ], [ %.pn34.pn, %173 ], [ %.pn32, %165 ]
  call void @_ZNSt6vectorIN3sim7PolygonESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #8
  br label %202

201:                                              ; preds = %60, %._crit_edge50
  %.0 = phi i1 [ %185, %._crit_edge50 ], [ false, %60 ]
  call void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %9) #8
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %9) #8
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #8
  ret i1 %.0

202:                                              ; preds = %200, %117, %115, %113, %111, %109, %108
  %.pn37.pn = phi { ptr, i32 } [ %.pn37, %200 ], [ %118, %117 ], [ %116, %115 ], [ %114, %113 ], [ %112, %111 ], [ %110, %109 ], [ %.pn30, %108 ]
  call void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272) %9) #8
  br label %203

203:                                              ; preds = %202, %74
  %.pn37.pn.pn = phi { ptr, i32 } [ %.pn37.pn, %202 ], [ %.pn.pn, %74 ]
  call void @llvm.lifetime.end.p0(i64 272, ptr nonnull %9) #8
  br label %204

204:                                              ; preds = %203, %65, %63
  %.pn37.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn, %203 ], [ %66, %65 ], [ %64, %63 ]
  call void @_ZN3sim8DistanceD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #8
  resume { ptr, i32 } %.pn37.pn.pn.pn
}

declare noundef ptr @_ZN3sim1PEv() local_unnamed_addr #6

declare noundef double @_ZN3sim5Param10wallLengthEv(ptr noundef nonnull align 8 dereferenceable(1056)) local_unnamed_addr #6

declare noundef double @_ZN3sim5Param9wallWidthEv(ptr noundef nonnull align 8 dereferenceable(1056)) local_unnamed_addr #6

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

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 #6

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

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

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

declare void @_ZN3sim7RadiansC1ERKNS_5AngleE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6

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

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

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

declare void @_ZN3sim9Directory20getResMouseDirectoryB5cxx11Ev(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8) local_unnamed_addr #6

declare void @_ZN3sim11MouseParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb(ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #6

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

declare void @_ZN3sim11MouseParser7getBodyERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN3sim7PolygonaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #7 align 2

declare void @_ZN3sim11MouseParser9getWheelsB5cxx11ERKNS_9CartesianERKNS_7RadiansEPb(ptr dead_on_unwind writable sret(%"class.std::map.134") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) local_unnamed_addr #6

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

declare void @_ZN3sim11MouseParser10getSensorsB5cxx11ERKNS_9CartesianERKNS_7RadiansERKNS_4MazeEPb(ptr dead_on_unwind writable sret(%"class.std::map.139") align 8, ptr noundef nonnull align 8 dereferenceable(272), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(26), ptr noundef) local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse15getWheelEffectsERKNS_9CartesianERKNS_7RadiansERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessISD_ESaISt4pairIKSD_SE_EEE(ptr dead_on_unwind noalias writable sret(%"class.std::map.144") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3sim5Mouse30getWheelSpeedAdjustmentFactorsERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEE(ptr dead_on_unwind noalias writable sret(%"class.std::map.149") align 8, ptr noundef nonnull align 8 dereferenceable(528), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

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

declare void @_ZN3sim25CurveTurnFactorCalculatorC1ERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5WheelESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS1_IS7_NS_11WheelEffectESA_SaISB_ISC_SI_EEERKS1_IS7_SB_IddESA_SaISB_ISC_SO_EEE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3sim7PolygonESaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; 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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim5Wheel17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(272)) local_unnamed_addr #6

; 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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor17getInitialPolygonEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #6

; 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

declare void @_ZN3sim17GeometryUtilities10convexHullERKSt6vectorINS_7PolygonESaIS2_EE(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

declare void @_ZN3sim17GeometryUtilities19createCirclePolygonERKNS_9CartesianERKNS_8DistanceEi(ptr dead_on_unwind writable sret(%"class.sim::Polygon") align 8, ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #6

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

declare void @_ZNK3sim7Polygon12getTrianglesEv(ptr dead_on_unwind writable sret(%"class.std::vector.129") align 8, ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6

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

declare noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3sim6Sensor21getInitialViewPolygonEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3sim11MouseParserD2Ev(ptr noundef nonnull align 8 dereferenceable(272)) unnamed_addr #4 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTSN3sim9DirectionE", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !15, i64 0}
!14 = !{!"_ZTSN3sim5MouseE", !15, 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}
!15 = !{!"any pointer", !7, i64 0}
!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", !7, 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", !15, i64 0, !15, i64 8, !15, 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", !15, i64 0, !15, i64 8, !15, 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, !15, i64 8, !15, i64 16, !15, i64 24}
!39 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!40 = !{!"long", !7, 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", !7, i64 0}
!55 = !{i64 0, i64 8, !56, i64 8, i64 8, !56}
!56 = !{!20, !20, i64 0}
!57 = !{!58, !15, i64 8}
!58 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim5WheelEE", !15, i64 0, !15, i64 8}
!59 = !{!60, !15, i64 8}
!60 = !{!"_ZTSSt4pairIRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN3sim6SensorEE", !15, i64 0, !15, i64 8}


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