; LLVM IR from mackorone/mms :: old/v2/src/mouse/continuous/Continuous.ll (ZN10continuous10Continuous14pivotTurnRightEv)

; 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::__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.std::allocator.0" = type { i8 }
%"class.continuous::Continuous" = type { %class.IMouseAlgorithm, i32, i32, i32, i32, float, float, [256 x i8], [5 x i8], [3 x i8], i8, i8, i32, i8, i8, i8, i8, i32, i32, i32, i8, i8, i8, i8, i8, float, i32, i32, i32, double, double, double, double, double, double, i32, i32, ptr }
%class.IMouseAlgorithm = type { ptr }

@.str.68 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [12 x i8], align 1

; 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: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408)) #2 align 2

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

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

declare void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296), ptr noundef nonnull align 8 dereferenceable(32), double noundef) #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10continuous10Continuous14pivotTurnRightEv(ptr noundef nonnull align 8 dereferenceable(408) %0) #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca double, align 8
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.0", align 1
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.0", align 1
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::allocator.0", align 1
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::allocator.0", align 1
  %24 = alloca double, align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::allocator.0", align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.0", align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator.0", align 1
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.std::allocator.0", align 1
  store ptr %0, ptr %2, align 8, !tbaa !5
  %33 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 190, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  store double 0.000000e+00, ptr %8, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 400, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store double 1.370000e+02, ptr %10, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %34 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %35 = load ptr, ptr %34, align 8, !tbaa !13
  %36 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %35)
  store double %36, ptr %11, align 8, !tbaa !11
  %37 = load double, ptr %11, align 8, !tbaa !11
  %38 = fcmp oge double %37, 0.000000e+00
  br i1 %38, label %39, label %42

39:                                               ; preds = %1
  %40 = load double, ptr %11, align 8, !tbaa !11
  %41 = fcmp olt double %40, 4.500000e+01
  br i1 %41, label %48, label %42

42:                                               ; preds = %39, %1
  %43 = load double, ptr %11, align 8, !tbaa !11
  %44 = fcmp ogt double %43, 3.150000e+02
  br i1 %44, label %45, label %49

45:                                               ; preds = %42
  %46 = load double, ptr %11, align 8, !tbaa !11
  %47 = fcmp ole double %46, 3.600000e+02
  br i1 %47, label %48, label %49

48:                                               ; preds = %45, %39
  store double 1.800000e+02, ptr %10, align 8, !tbaa !11
  br label %66

49:                                               ; preds = %45, %42
  %50 = load double, ptr %11, align 8, !tbaa !11
  %51 = fcmp ogt double %50, 4.500000e+01
  br i1 %51, label %52, label %56

52:                                               ; preds = %49
  %53 = load double, ptr %11, align 8, !tbaa !11
  %54 = fcmp olt double %53, 1.350000e+02
  br i1 %54, label %55, label %56

55:                                               ; preds = %52
  store double 2.700000e+02, ptr %10, align 8, !tbaa !11
  br label %65

56:                                               ; preds = %52, %49
  %57 = load double, ptr %11, align 8, !tbaa !11
  %58 = fcmp ogt double %57, 1.350000e+02
  br i1 %58, label %59, label %63

59:                                               ; preds = %56
  %60 = load double, ptr %11, align 8, !tbaa !11
  %61 = fcmp olt double %60, 2.250000e+02
  br i1 %61, label %62, label %63

62:                                               ; preds = %59
  store double 0.000000e+00, ptr %10, align 8, !tbaa !11
  br label %64

63:                                               ; preds = %59, %56
  store double 9.000000e+01, ptr %10, align 8, !tbaa !11
  br label %64

64:                                               ; preds = %63, %62
  br label %65

65:                                               ; preds = %64, %55
  br label %66

66:                                               ; preds = %65, %48
  %67 = call noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br i1 %67, label %68, label %155

68:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  store double 0x3FEEA7EF9DB22D0E, ptr %13, align 8, !tbaa !11
  %69 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %70 = load double, ptr %69, align 8, !tbaa !19
  %71 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %72 = load double, ptr %71, align 8, !tbaa !20
  %73 = fadd double %70, %72
  %74 = fdiv double %73, 2.000000e+00
  %75 = load double, ptr %13, align 8, !tbaa !11
  %76 = fcmp oge double %74, %75
  br i1 %76, label %77, label %115

77:                                               ; preds = %68
  br label %78

78:                                               ; preds = %95, %77
  %79 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %80 = load double, ptr %79, align 8, !tbaa !19
  %81 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %82 = load double, ptr %81, align 8, !tbaa !20
  %83 = fadd double %80, %82
  %84 = fdiv double %83, 2.000000e+00
  %85 = load double, ptr %13, align 8, !tbaa !11
  %86 = fcmp oge double %84, %85
  br i1 %86, label %87, label %114

87:                                               ; preds = %78
  %88 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %89 = load ptr, ptr %88, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %90 unwind label %96

90:                                               ; preds = %87
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %89, ptr noundef nonnull align 8 dereferenceable(32) %14, double noundef 4.000000e+02)
          to label %91 unwind label %100

91:                                               ; preds = %90
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #5
  %92 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %93 = load ptr, ptr %92, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %94 unwind label %105

94:                                               ; preds = %91
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %93, ptr noundef nonnull align 8 dereferenceable(32) %18, double noundef -4.000000e+02)
          to label %95 unwind label %109

95:                                               ; preds = %94
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br label %78, !llvm.loop !21

96:                                               ; preds = %87
  %97 = landingpad { ptr, i32 }
          cleanup
  %98 = extractvalue { ptr, i32 } %97, 0
  store ptr %98, ptr %16, align 8
  %99 = extractvalue { ptr, i32 } %97, 1
  store i32 %99, ptr %17, align 4
  br label %104

100:                                              ; preds = %90
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %16, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  br label %104

104:                                              ; preds = %100, %96
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #5
  br label %154

105:                                              ; preds = %91
  %106 = landingpad { ptr, i32 }
          cleanup
  %107 = extractvalue { ptr, i32 } %106, 0
  store ptr %107, ptr %16, align 8
  %108 = extractvalue { ptr, i32 } %106, 1
  store i32 %108, ptr %17, align 4
  br label %113

109:                                              ; preds = %94
  %110 = landingpad { ptr, i32 }
          cleanup
  %111 = extractvalue { ptr, i32 } %110, 0
  store ptr %111, ptr %16, align 8
  %112 = extractvalue { ptr, i32 } %110, 1
  store i32 %112, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #5
  br label %113

113:                                              ; preds = %109, %105
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #5
  br label %154

114:                                              ; preds = %78
  br label %153

115:                                              ; preds = %68
  br label %116

116:                                              ; preds = %133, %115
  %117 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %118 = load double, ptr %117, align 8, !tbaa !19
  %119 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %120 = load double, ptr %119, align 8, !tbaa !20
  %121 = fadd double %118, %120
  %122 = fdiv double %121, 2.000000e+00
  %123 = load double, ptr %13, align 8, !tbaa !11
  %124 = fcmp olt double %122, %123
  br i1 %124, label %125, label %152

125:                                              ; preds = %116
  %126 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %127 = load ptr, ptr %126, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %21)
          to label %128 unwind label %134

128:                                              ; preds = %125
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %127, ptr noundef nonnull align 8 dereferenceable(32) %20, double noundef -4.000000e+02)
          to label %129 unwind label %138

129:                                              ; preds = %128
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #5
  %130 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %131 = load ptr, ptr %130, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %23)
          to label %132 unwind label %143

132:                                              ; preds = %129
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %131, ptr noundef nonnull align 8 dereferenceable(32) %22, double noundef 4.000000e+02)
          to label %133 unwind label %147

133:                                              ; preds = %132
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br label %116, !llvm.loop !23

134:                                              ; preds = %125
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %16, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %17, align 4
  br label %142

138:                                              ; preds = %128
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %16, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #5
  br label %142

142:                                              ; preds = %138, %134
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %21) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #5
  br label %154

143:                                              ; preds = %129
  %144 = landingpad { ptr, i32 }
          cleanup
  %145 = extractvalue { ptr, i32 } %144, 0
  store ptr %145, ptr %16, align 8
  %146 = extractvalue { ptr, i32 } %144, 1
  store i32 %146, ptr %17, align 4
  br label %151

147:                                              ; preds = %132
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %16, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #5
  br label %151

151:                                              ; preds = %147, %143
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %23) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #5
  br label %154

152:                                              ; preds = %116
  br label %153

153:                                              ; preds = %152, %114
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %155

154:                                              ; preds = %151, %142, %113, %104
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %274

155:                                              ; preds = %153, %66
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %33, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408) %33, i32 noundef 200)
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %33, double noundef -4.000000e+02, double noundef -4.000000e+02)
  %156 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %157 = load ptr, ptr %156, align 8, !tbaa !13
  %158 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %157)
  store double %158, ptr %12, align 8, !tbaa !11
  br label %159

159:                                              ; preds = %166, %155
  %160 = load double, ptr %12, align 8, !tbaa !11
  %161 = load double, ptr %10, align 8, !tbaa !11
  %162 = fsub double %160, %161
  %163 = fsub double %162, 9.000000e+01
  %164 = call noundef double @_ZSt3absd(double noundef %163)
  %165 = fcmp ogt double %164, 1.500000e+00
  br i1 %165, label %166, label %170

166:                                              ; preds = %159
  %167 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %168 = load ptr, ptr %167, align 8, !tbaa !13
  %169 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %168)
  store double %169, ptr %12, align 8, !tbaa !11
  br label %159, !llvm.loop !24

170:                                              ; preds = %159
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %33, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  call void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408) %33, i32 noundef 200)
  %171 = call noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br i1 %171, label %172, label %259

172:                                              ; preds = %170
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store double 0x3FEEA7EF9DB22D0E, ptr %24, align 8, !tbaa !11
  %173 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %174 = load double, ptr %173, align 8, !tbaa !19
  %175 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %176 = load double, ptr %175, align 8, !tbaa !20
  %177 = fadd double %174, %176
  %178 = fdiv double %177, 2.000000e+00
  %179 = load double, ptr %24, align 8, !tbaa !11
  %180 = fcmp oge double %178, %179
  br i1 %180, label %181, label %219

181:                                              ; preds = %172
  br label %182

182:                                              ; preds = %199, %181
  %183 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %184 = load double, ptr %183, align 8, !tbaa !19
  %185 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %186 = load double, ptr %185, align 8, !tbaa !20
  %187 = fadd double %184, %186
  %188 = fdiv double %187, 2.000000e+00
  %189 = load double, ptr %24, align 8, !tbaa !11
  %190 = fcmp oge double %188, %189
  br i1 %190, label %191, label %218

191:                                              ; preds = %182
  %192 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %193 = load ptr, ptr %192, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %194 unwind label %200

194:                                              ; preds = %191
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %193, ptr noundef nonnull align 8 dereferenceable(32) %25, double noundef 4.000000e+02)
          to label %195 unwind label %204

195:                                              ; preds = %194
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #5
  %196 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %197 = load ptr, ptr %196, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %198 unwind label %209

198:                                              ; preds = %195
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %197, ptr noundef nonnull align 8 dereferenceable(32) %27, double noundef -4.000000e+02)
          to label %199 unwind label %213

199:                                              ; preds = %198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br label %182, !llvm.loop !25

200:                                              ; preds = %191
  %201 = landingpad { ptr, i32 }
          cleanup
  %202 = extractvalue { ptr, i32 } %201, 0
  store ptr %202, ptr %16, align 8
  %203 = extractvalue { ptr, i32 } %201, 1
  store i32 %203, ptr %17, align 4
  br label %208

204:                                              ; preds = %194
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %16, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #5
  br label %208

208:                                              ; preds = %204, %200
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %26) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #5
  br label %258

209:                                              ; preds = %195
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %16, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %17, align 4
  br label %217

213:                                              ; preds = %198
  %214 = landingpad { ptr, i32 }
          cleanup
  %215 = extractvalue { ptr, i32 } %214, 0
  store ptr %215, ptr %16, align 8
  %216 = extractvalue { ptr, i32 } %214, 1
  store i32 %216, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #5
  br label %217

217:                                              ; preds = %213, %209
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #5
  br label %258

218:                                              ; preds = %182
  br label %257

219:                                              ; preds = %172
  br label %220

220:                                              ; preds = %237, %219
  %221 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 33
  %222 = load double, ptr %221, align 8, !tbaa !19
  %223 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 34
  %224 = load double, ptr %223, align 8, !tbaa !20
  %225 = fadd double %222, %224
  %226 = fdiv double %225, 2.000000e+00
  %227 = load double, ptr %24, align 8, !tbaa !11
  %228 = fcmp olt double %226, %227
  br i1 %228, label %229, label %256

229:                                              ; preds = %220
  %230 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %231 = load ptr, ptr %230, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %30) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %232 unwind label %238

232:                                              ; preds = %229
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %231, ptr noundef nonnull align 8 dereferenceable(32) %29, double noundef -4.000000e+02)
          to label %233 unwind label %242

233:                                              ; preds = %232
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #5
  %234 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %235 = load ptr, ptr %234, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %32)
          to label %236 unwind label %247

236:                                              ; preds = %233
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %235, ptr noundef nonnull align 8 dereferenceable(32) %31, double noundef 4.000000e+02)
          to label %237 unwind label %251

237:                                              ; preds = %236
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %33)
  br label %220, !llvm.loop !26

238:                                              ; preds = %229
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %16, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %17, align 4
  br label %246

242:                                              ; preds = %232
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %16, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %17, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #5
  br label %246

246:                                              ; preds = %242, %238
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #5
  br label %258

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

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

255:                                              ; preds = %251, %247
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %32) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #5
  br label %258

256:                                              ; preds = %220
  br label %257

257:                                              ; preds = %256, %218
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %259

258:                                              ; preds = %255, %246, %217, %208
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %274

259:                                              ; preds = %257, %170
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %33, double noundef -4.000000e+02, double noundef -4.000000e+02)
  %260 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %261 = load ptr, ptr %260, align 8, !tbaa !13
  %262 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %261)
  store double %262, ptr %12, align 8, !tbaa !11
  br label %263

263:                                              ; preds = %269, %259
  %264 = load double, ptr %12, align 8, !tbaa !11
  %265 = load double, ptr %10, align 8, !tbaa !11
  %266 = fsub double %264, %265
  %267 = call noundef double @_ZSt3absd(double noundef %266)
  %268 = fcmp ogt double %267, 1.500000e+00
  br i1 %268, label %269, label %273

269:                                              ; preds = %263
  %270 = getelementptr inbounds %"class.continuous::Continuous", ptr %33, i32 0, i32 37
  %271 = load ptr, ptr %270, align 8, !tbaa !13
  %272 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %271)
  store double %272, ptr %12, align 8, !tbaa !11
  br label %263, !llvm.loop !27

273:                                              ; preds = %263
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %33, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  ret void

274:                                              ; preds = %258, %154
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  br label %275

275:                                              ; preds = %274
  %276 = load ptr, ptr %16, align 8
  %277 = load i32, ptr %17, align 4
  %278 = insertvalue { ptr, i32 } poison, ptr %276, 0
  %279 = insertvalue { ptr, i32 } %278, i32 %277, 1
  resume { ptr, i32 } %279
}

declare noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) #4

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !6, i64 400}
!14 = !{!"_ZTSN10continuous10ContinuousE", !15, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !16, i64 24, !16, i64 28, !7, i64 32, !7, i64 288, !7, i64 293, !17, i64 296, !17, i64 297, !10, i64 300, !17, i64 304, !17, i64 305, !17, i64 306, !17, i64 307, !10, i64 308, !10, i64 312, !10, i64 316, !17, i64 320, !17, i64 321, !17, i64 322, !17, i64 323, !17, i64 324, !16, i64 328, !18, i64 332, !10, i64 336, !10, i64 340, !12, i64 344, !12, i64 352, !12, i64 360, !12, i64 368, !12, i64 376, !12, i64 384, !10, i64 392, !10, i64 396, !6, i64 400}
!15 = !{!"_ZTS15IMouseAlgorithm"}
!16 = !{!"float", !7, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"_ZTSN10continuous10ContinuousUt_E", !7, i64 0}
!19 = !{!14, !12, i64 376}
!20 = !{!14, !12, i64 384}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}


; 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::__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.std::allocator.0" = type { i8 }

@.str.68 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [12 x i8], align 1

; 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 nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408)) local_unnamed_addr #2 align 2

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

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

declare void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296), ptr noundef nonnull align 8 dereferenceable(32), double noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN10continuous10Continuous14pivotTurnRightEv(ptr noundef nonnull align 8 dereferenceable(408) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.std::__cxx11::basic_string", align 8
  %3 = alloca %"class.std::allocator.0", align 1
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::allocator.0", align 1
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::allocator.0", align 1
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::allocator.0", align 1
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::allocator.0", align 1
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.0", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.0", align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator.0", align 1
  %18 = getelementptr inbounds i8, ptr %0, i64 400
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  %20 = tail call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %19)
  %21 = fcmp oge double %20, 0.000000e+00
  %22 = fcmp olt double %20, 4.500000e+01
  %or.cond = and i1 %21, %22
  br i1 %or.cond, label %32, label %23

23:                                               ; preds = %1
  %24 = fcmp ogt double %20, 3.150000e+02
  %25 = fcmp ole double %20, 3.600000e+02
  %or.cond3 = and i1 %24, %25
  br i1 %or.cond3, label %32, label %26

26:                                               ; preds = %23
  %27 = fcmp ogt double %20, 4.500000e+01
  %28 = fcmp olt double %20, 1.350000e+02
  %or.cond5 = and i1 %27, %28
  br i1 %or.cond5, label %32, label %29

29:                                               ; preds = %26
  %30 = fcmp ogt double %20, 1.350000e+02
  %31 = fcmp olt double %20, 2.250000e+02
  %or.cond7 = and i1 %30, %31
  %. = select i1 %or.cond7, double 0.000000e+00, double 9.000000e+01
  br label %32

32:                                               ; preds = %29, %26, %1, %23
  %.0 = phi double [ 1.800000e+02, %23 ], [ 1.800000e+02, %1 ], [ 2.700000e+02, %26 ], [ %., %29 ]
  %33 = tail call noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  br i1 %33, label %34, label %.loopexit62

34:                                               ; preds = %32
  %35 = getelementptr inbounds i8, ptr %0, i64 376
  %36 = load double, ptr %35, align 8, !tbaa !16
  %37 = getelementptr inbounds i8, ptr %0, i64 384
  %38 = load double, ptr %37, align 8, !tbaa !17
  %39 = fadd double %36, %38
  %40 = fmul double %39, 5.000000e-01
  %41 = fcmp ult double %40, 0x3FEEA7EF9DB22D0E
  br i1 %41, label %.preheader61, label %.lr.ph

.preheader61:                                     ; preds = %34
  %42 = fcmp olt double %40, 0x3FEEA7EF9DB22D0E
  br i1 %42, label %.lr.ph65, label %.loopexit62

.lr.ph:                                           ; preds = %34, %48
  %43 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %2, ptr noundef nonnull @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %3)
          to label %44 unwind label %54

44:                                               ; preds = %.lr.ph
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %43, ptr noundef nonnull align 8 dereferenceable(32) %2, double noundef 4.000000e+02)
          to label %45 unwind label %56

45:                                               ; preds = %44
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #5
  %46 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %5)
          to label %47 unwind label %59

47:                                               ; preds = %45
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %46, ptr noundef nonnull align 8 dereferenceable(32) %4, double noundef -4.000000e+02)
          to label %48 unwind label %61

48:                                               ; preds = %47
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  %49 = load double, ptr %35, align 8, !tbaa !16
  %50 = load double, ptr %37, align 8, !tbaa !17
  %51 = fadd double %49, %50
  %52 = fmul double %51, 5.000000e-01
  %53 = fcmp ult double %52, 0x3FEEA7EF9DB22D0E
  br i1 %53, label %.loopexit62, label %.lr.ph, !llvm.loop !18

54:                                               ; preds = %.lr.ph
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %58

56:                                               ; preds = %44
  %57 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %2) #5
  br label %58

58:                                               ; preds = %56, %54
  %.pn53 = phi { ptr, i32 } [ %57, %56 ], [ %55, %54 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %3) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #5
  br label %159

59:                                               ; preds = %45
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %63

61:                                               ; preds = %47
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #5
  br label %63

63:                                               ; preds = %61, %59
  %.pn55 = phi { ptr, i32 } [ %62, %61 ], [ %60, %59 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %5) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #5
  br label %159

.lr.ph65:                                         ; preds = %.preheader61, %69
  %64 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %7) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %7)
          to label %65 unwind label %75

65:                                               ; preds = %.lr.ph65
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %64, ptr noundef nonnull align 8 dereferenceable(32) %6, double noundef -4.000000e+02)
          to label %66 unwind label %77

66:                                               ; preds = %65
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  %67 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %68 unwind label %80

68:                                               ; preds = %66
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %67, ptr noundef nonnull align 8 dereferenceable(32) %8, double noundef 4.000000e+02)
          to label %69 unwind label %82

69:                                               ; preds = %68
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  %70 = load double, ptr %35, align 8, !tbaa !16
  %71 = load double, ptr %37, align 8, !tbaa !17
  %72 = fadd double %70, %71
  %73 = fmul double %72, 5.000000e-01
  %74 = fcmp olt double %73, 0x3FEEA7EF9DB22D0E
  br i1 %74, label %.lr.ph65, label %.loopexit62, !llvm.loop !20

75:                                               ; preds = %.lr.ph65
  %76 = landingpad { ptr, i32 }
          cleanup
  br label %79

77:                                               ; preds = %65
  %78 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #5
  br label %79

79:                                               ; preds = %77, %75
  %.pn = phi { ptr, i32 } [ %78, %77 ], [ %76, %75 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %7) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #5
  br label %159

80:                                               ; preds = %66
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %84

82:                                               ; preds = %68
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #5
  br label %84

84:                                               ; preds = %82, %80
  %.pn42 = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %9) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #5
  br label %159

.loopexit62:                                      ; preds = %48, %69, %.preheader61, %32
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %0, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408) %0, i32 noundef 200)
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %0, double noundef -4.000000e+02, double noundef -4.000000e+02)
  %85 = load ptr, ptr %18, align 8, !tbaa !5
  %86 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %85)
  %87 = fsub double %86, %.0
  %88 = fadd double %87, -9.000000e+01
  %89 = call noundef double @_ZSt3absd(double noundef %88)
  %90 = fcmp ogt double %89, 1.500000e+00
  br i1 %90, label %.lr.ph66, label %._crit_edge

.lr.ph66:                                         ; preds = %.loopexit62, %.lr.ph66
  %91 = load ptr, ptr %18, align 8, !tbaa !5
  %92 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %91)
  %93 = fsub double %92, %.0
  %94 = fadd double %93, -9.000000e+01
  %95 = call noundef double @_ZSt3absd(double noundef %94)
  %96 = fcmp ogt double %95, 1.500000e+00
  br i1 %96, label %.lr.ph66, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %.lr.ph66, %.loopexit62
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %0, double noundef 0.000000e+00, double noundef 0.000000e+00)
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  call void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408) %0, i32 noundef 200)
  %97 = call noundef zeroext i1 @_ZN10continuous10Continuous9wallFrontEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  br i1 %97, label %98, label %.loopexit

98:                                               ; preds = %._crit_edge
  %99 = getelementptr inbounds i8, ptr %0, i64 376
  %100 = load double, ptr %99, align 8, !tbaa !16
  %101 = getelementptr inbounds i8, ptr %0, i64 384
  %102 = load double, ptr %101, align 8, !tbaa !17
  %103 = fadd double %100, %102
  %104 = fmul double %103, 5.000000e-01
  %105 = fcmp ult double %104, 0x3FEEA7EF9DB22D0E
  br i1 %105, label %.preheader, label %.lr.ph67

.preheader:                                       ; preds = %98
  %106 = fcmp olt double %104, 0x3FEEA7EF9DB22D0E
  br i1 %106, label %.lr.ph68, label %.loopexit

.lr.ph67:                                         ; preds = %98, %112
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %11) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %11)
          to label %108 unwind label %118

108:                                              ; preds = %.lr.ph67
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %107, ptr noundef nonnull align 8 dereferenceable(32) %10, double noundef 4.000000e+02)
          to label %109 unwind label %120

109:                                              ; preds = %108
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %111 unwind label %123

111:                                              ; preds = %109
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %110, ptr noundef nonnull align 8 dereferenceable(32) %12, double noundef -4.000000e+02)
          to label %112 unwind label %125

112:                                              ; preds = %111
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  %113 = load double, ptr %99, align 8, !tbaa !16
  %114 = load double, ptr %101, align 8, !tbaa !17
  %115 = fadd double %113, %114
  %116 = fmul double %115, 5.000000e-01
  %117 = fcmp ult double %116, 0x3FEEA7EF9DB22D0E
  br i1 %117, label %.loopexit, label %.lr.ph67, !llvm.loop !22

118:                                              ; preds = %.lr.ph67
  %119 = landingpad { ptr, i32 }
          cleanup
  br label %122

120:                                              ; preds = %108
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #5
  br label %122

122:                                              ; preds = %120, %118
  %.pn48 = phi { ptr, i32 } [ %121, %120 ], [ %119, %118 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %11) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #5
  br label %159

123:                                              ; preds = %109
  %124 = landingpad { ptr, i32 }
          cleanup
  br label %127

125:                                              ; preds = %111
  %126 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #5
  br label %127

127:                                              ; preds = %125, %123
  %.pn50 = phi { ptr, i32 } [ %126, %125 ], [ %124, %123 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #5
  br label %159

.lr.ph68:                                         ; preds = %.preheader, %133
  %128 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.68, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %129 unwind label %139

129:                                              ; preds = %.lr.ph68
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %128, ptr noundef nonnull align 8 dereferenceable(32) %14, double noundef -4.000000e+02)
          to label %130 unwind label %141

130:                                              ; preds = %129
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #5
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.69, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %132 unwind label %144

132:                                              ; preds = %130
  invoke void @_ZN3sim14MouseInterface13setWheelSpeedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEd(ptr noundef nonnull align 8 dereferenceable(296) %131, ptr noundef nonnull align 8 dereferenceable(32) %16, double noundef 4.000000e+02)
          to label %133 unwind label %146

133:                                              ; preds = %132
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #5
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #5
  call void @_ZN10continuous10Continuous11readSensorsEv(ptr noundef nonnull align 8 dereferenceable(408) %0)
  %134 = load double, ptr %99, align 8, !tbaa !16
  %135 = load double, ptr %101, align 8, !tbaa !17
  %136 = fadd double %134, %135
  %137 = fmul double %136, 5.000000e-01
  %138 = fcmp olt double %137, 0x3FEEA7EF9DB22D0E
  br i1 %138, label %.lr.ph68, label %.loopexit, !llvm.loop !23

139:                                              ; preds = %.lr.ph68
  %140 = landingpad { ptr, i32 }
          cleanup
  br label %143

141:                                              ; preds = %129
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #5
  br label %143

143:                                              ; preds = %141, %139
  %.pn44 = phi { ptr, i32 } [ %142, %141 ], [ %140, %139 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #5
  br label %159

144:                                              ; preds = %130
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %148

146:                                              ; preds = %132
  %147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #5
  br label %148

148:                                              ; preds = %146, %144
  %.pn46 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #5
  br label %159

.loopexit:                                        ; preds = %112, %133, %.preheader, %._crit_edge
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %0, double noundef -4.000000e+02, double noundef -4.000000e+02)
  %149 = load ptr, ptr %18, align 8, !tbaa !5
  %150 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %149)
  %151 = fsub double %150, %.0
  %152 = call noundef double @_ZSt3absd(double noundef %151)
  %153 = fcmp ogt double %152, 1.500000e+00
  br i1 %153, label %.lr.ph70, label %._crit_edge71

.lr.ph70:                                         ; preds = %.loopexit, %.lr.ph70
  %154 = load ptr, ptr %18, align 8, !tbaa !5
  %155 = call noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296) %154)
  %156 = fsub double %155, %.0
  %157 = call noundef double @_ZSt3absd(double noundef %156)
  %158 = fcmp ogt double %157, 1.500000e+00
  br i1 %158, label %.lr.ph70, label %._crit_edge71, !llvm.loop !24

._crit_edge71:                                    ; preds = %.lr.ph70, %.loopexit
  call void @_ZN10continuous10Continuous8setSpeedEdd(ptr noundef nonnull align 8 dereferenceable(408) %0, double noundef 0.000000e+00, double noundef 0.000000e+00)
  ret void

159:                                              ; preds = %122, %127, %143, %148, %58, %63, %79, %84
  %.pn55.pn.pn = phi { ptr, i32 } [ %.pn55, %63 ], [ %.pn53, %58 ], [ %.pn42, %84 ], [ %.pn, %79 ], [ %.pn50, %127 ], [ %.pn48, %122 ], [ %.pn46, %148 ], [ %.pn44, %143 ]
  resume { ptr, i32 } %.pn55.pn.pn
}

declare noundef double @_ZN3sim14MouseInterface22currentRotationDegreesEv(ptr noundef nonnull align 8 dereferenceable(296)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN10continuous10Continuous5delayEi(ptr noundef nonnull align 8 dereferenceable(408), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef double @_ZSt3absd(double noundef) local_unnamed_addr #4

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "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 = { 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, !15, i64 400}
!6 = !{!"_ZTSN10continuous10ContinuousE", !7, i64 0, !8, i64 8, !8, i64 12, !8, i64 16, !8, i64 20, !11, i64 24, !11, i64 28, !9, i64 32, !9, i64 288, !9, i64 293, !12, i64 296, !12, i64 297, !8, i64 300, !12, i64 304, !12, i64 305, !12, i64 306, !12, i64 307, !8, i64 308, !8, i64 312, !8, i64 316, !12, i64 320, !12, i64 321, !12, i64 322, !12, i64 323, !12, i64 324, !11, i64 328, !13, i64 332, !8, i64 336, !8, i64 340, !14, i64 344, !14, i64 352, !14, i64 360, !14, i64 368, !14, i64 376, !14, i64 384, !8, i64 392, !8, i64 396, !15, i64 400}
!7 = !{!"_ZTS15IMouseAlgorithm"}
!8 = !{!"int", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"float", !9, i64 0}
!12 = !{!"bool", !9, i64 0}
!13 = !{!"_ZTSN10continuous10ContinuousUt_E", !9, i64 0}
!14 = !{!"double", !9, i64 0}
!15 = !{!"any pointer", !9, i64 0}
!16 = !{!6, !14, i64 376}
!17 = !{!6, !14, i64 384}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}


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