; LLVM IR from jrouwe/JoltPhysics :: Jolt/Physics/Vehicle (WheeledVehicleController)

; 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.anon.31 = type { i8 }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::WheeledVehicleController" = type { %"class.JPH::VehicleController", float, float, float, float, %"class.JPH::VehicleEngine", %"class.JPH::VehicleTransmission", %"class.JPH::Array.5", float, float, %"class.std::function.29" }
%"class.JPH::VehicleController" = type { ptr, ptr }
%"class.JPH::VehicleEngine" = type <{ %"class.JPH::VehicleEngineSettings", float, [4 x i8] }>
%"class.JPH::VehicleEngineSettings" = type { float, float, float, %"class.JPH::LinearCurve", float, float }
%"class.JPH::LinearCurve" = type { %"class.JPH::Array" }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::VehicleTransmission" = type <{ %"class.JPH::VehicleTransmissionSettings", i32, float, float, float, float, [4 x i8] }>
%"class.JPH::VehicleTransmissionSettings" = type { i8, %"class.JPH::Array.2", %"class.JPH::Array.2", float, float, float, float, float, float }
%"class.JPH::Array.2" = type { i64, i64, ptr }
%"class.JPH::Array.5" = type { i64, i64, ptr }
%"class.std::function.29" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.JPH::WheeledVehicleControllerSettings" = type <{ %"class.JPH::VehicleControllerSettings.base", [4 x i8], %"class.JPH::VehicleEngineSettings", %"class.JPH::VehicleTransmissionSettings", %"class.JPH::Array.5", float, [4 x i8] }>
%"class.JPH::VehicleControllerSettings.base" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget" }>
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::VehicleDifferentialSettings" = type { i32, i32, float, float, float, float }

@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@_ZTVN3JPH24WheeledVehicleControllerE = external dso_local unnamed_addr constant { [11 x ptr] }, align 8
@.str.8 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [127 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [37 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) #1

; 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) #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24WheeledVehicleControllerC2ERKNS_32WheeledVehicleControllerSettingsERNS_17VehicleConstraintE(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(172) %1, ptr noundef nonnull align 16 dereferenceable(408) %2) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %class.anon.31, align 1
  %10 = alloca %"struct.JPH::AssertLastParam", align 1
  %11 = alloca %"struct.JPH::AssertLastParam", align 1
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca float, align 4
  %16 = alloca %"struct.JPH::AssertLastParam", align 1
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca float, align 4
  %21 = alloca %"struct.JPH::AssertLastParam", align 1
  %22 = alloca %"struct.JPH::AssertLastParam", align 1
  %23 = alloca %"struct.JPH::AssertLastParam", align 1
  %24 = alloca %"struct.JPH::AssertLastParam", align 1
  %25 = alloca %"struct.JPH::AssertLastParam", align 1
  %26 = alloca %"struct.JPH::AssertLastParam", align 1
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca %"struct.JPH::AssertLastParam", align 1
  %30 = alloca %"struct.JPH::AssertLastParam", align 1
  %31 = alloca %"struct.JPH::AssertLastParam", align 1
  %32 = alloca %"struct.JPH::AssertLastParam", align 1
  %33 = alloca %"struct.JPH::AssertLastParam", align 1
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %34 = load ptr, ptr %4, align 8
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN3JPH17VehicleControllerC2ERNS_17VehicleConstraintE(ptr noundef nonnull align 8 dereferenceable(16) %34, ptr noundef nonnull align 16 dereferenceable(408) %35)
  store ptr getelementptr inbounds inrange(-16, 72) ({ [11 x ptr] }, ptr @_ZTVN3JPH24WheeledVehicleControllerE, i32 0, i32 0, i32 2), ptr %34, align 8, !tbaa !9
  %36 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 1
  store float 0.000000e+00, ptr %36, align 8, !tbaa !11
  %37 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 2
  store float 0.000000e+00, ptr %37, align 4, !tbaa !28
  %38 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 3
  store float 0.000000e+00, ptr %38, align 8, !tbaa !29
  %39 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 4
  store float 0.000000e+00, ptr %39, align 4, !tbaa !30
  %40 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 5
  invoke void @_ZN3JPH13VehicleEngineC2Ev(ptr noundef nonnull align 8 dereferenceable(52) %40)
          to label %41 unwind label %62

41:                                               ; preds = %3
  %42 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 6
  invoke void @_ZN3JPH19VehicleTransmissionC2Ev(ptr noundef nonnull align 8 dereferenceable(100) %42)
          to label %43 unwind label %66

43:                                               ; preds = %41
  %44 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 7
  call void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #6
  %45 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 9
  store float 0.000000e+00, ptr %45, align 4, !tbaa !31
  %46 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 1, ptr %9) #6
  call void @_ZNSt8functionIFvjRfS0_ffffffEEC2IN3JPH24WheeledVehicleController23mTireMaxImpulseCallbackMUljS0_S0_ffffffE_EvEEOT_(ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(1) %9) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #6
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %47, i32 0, i32 2
  %49 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 5
  %50 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3JPH21VehicleEngineSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %49, ptr noundef nonnull align 8 dereferenceable(48) %48)
          to label %51 unwind label %70

51:                                               ; preds = %43
  br label %52

52:                                               ; preds = %51
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %53, i32 0, i32 2
  %55 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %54, i32 0, i32 1
  %56 = load float, ptr %55, align 4, !tbaa !32
  %57 = fcmp oge float %56, 0.000000e+00
  br i1 %57, label %74, label %58

58:                                               ; preds = %52
  %59 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.8, ptr noundef @.str.3, i32 noundef 177)
          to label %60 unwind label %70

60:                                               ; preds = %58
  br i1 %59, label %61, label %74

61:                                               ; preds = %60
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !39
  br label %74

62:                                               ; preds = %3
  %63 = landingpad { ptr, i32 }
          cleanup
  %64 = extractvalue { ptr, i32 } %63, 0
  store ptr %64, ptr %7, align 8
  %65 = extractvalue { ptr, i32 } %63, 1
  store i32 %65, ptr %8, align 4
  br label %383

66:                                               ; preds = %41
  %67 = landingpad { ptr, i32 }
          cleanup
  %68 = extractvalue { ptr, i32 } %67, 0
  store ptr %68, ptr %7, align 8
  %69 = extractvalue { ptr, i32 } %67, 1
  store i32 %69, ptr %8, align 4
  br label %382

70:                                               ; preds = %374, %277, %272, %266, %253, %236, %213, %200, %98, %93, %87, %58, %43
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %7, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %8, align 4
  br label %381

74:                                               ; preds = %61, %60, %52
  br label %75

75:                                               ; preds = %74
  br label %76

76:                                               ; preds = %75
  br label %77

77:                                               ; preds = %76
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %78, i32 0, i32 2
  %80 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %79, i32 0, i32 1
  %81 = load float, ptr %80, align 4, !tbaa !32
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %82, i32 0, i32 2
  %84 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %83, i32 0, i32 2
  %85 = load float, ptr %84, align 8, !tbaa !40
  %86 = fcmp ole float %81, %85
  br i1 %86, label %91, label %87

87:                                               ; preds = %77
  %88 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.9, ptr noundef @.str.3, i32 noundef 178)
          to label %89 unwind label %70

89:                                               ; preds = %87
  br i1 %88, label %90, label %91

90:                                               ; preds = %89
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !41
  br label %91

91:                                               ; preds = %90, %89, %77
  br label %92

92:                                               ; preds = %91
  br label %93

93:                                               ; preds = %92
  %94 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 5
  %95 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 5
  %96 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %95, i32 0, i32 1
  %97 = load float, ptr %96, align 4, !tbaa !42
  invoke void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52) %94, float noundef %97)
          to label %98 unwind label %70

98:                                               ; preds = %93
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %99, i32 0, i32 3
  %101 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 6
  %102 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN3JPH27VehicleTransmissionSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %101, ptr noundef nonnull align 8 dereferenceable(80) %100)
          to label %103 unwind label %70

103:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %104, i32 0, i32 3
  %106 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %105, i32 0, i32 1
  store ptr %106, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %107 = load ptr, ptr %12, align 8, !tbaa !5
  %108 = invoke noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %107)
          to label %109 unwind label %118

109:                                              ; preds = %103
  store ptr %108, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = invoke noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %110)
          to label %112 unwind label %122

112:                                              ; preds = %109
  store ptr %111, ptr %14, align 8, !tbaa !5
  br label %113

113:                                              ; preds = %143, %112
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = load ptr, ptr %14, align 8, !tbaa !5
  %116 = icmp ne ptr %114, %115
  br i1 %116, label %126, label %117

117:                                              ; preds = %113
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %148

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

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

126:                                              ; preds = %113
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = load float, ptr %127, align 4, !tbaa !43
  store float %128, ptr %15, align 4, !tbaa !43
  br label %129

129:                                              ; preds = %126
  %130 = load float, ptr %15, align 4, !tbaa !43
  %131 = fcmp ogt float %130, 0.000000e+00
  br i1 %131, label %140, label %132

132:                                              ; preds = %129
  %133 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.10, ptr noundef @.str.3, i32 noundef 185)
          to label %134 unwind label %136

134:                                              ; preds = %132
  br i1 %133, label %135, label %140

135:                                              ; preds = %134
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !44
  br label %140

136:                                              ; preds = %132
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %7, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %146

140:                                              ; preds = %135, %134, %129
  br label %141

141:                                              ; preds = %140
  br label %142

142:                                              ; preds = %141
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %143

143:                                              ; preds = %142
  %144 = load ptr, ptr %13, align 8, !tbaa !5
  %145 = getelementptr inbounds float, ptr %144, i32 1
  store ptr %145, ptr %13, align 8, !tbaa !5
  br label %113

146:                                              ; preds = %136, %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %147

147:                                              ; preds = %146, %118
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  br label %381

148:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #6
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %149, i32 0, i32 3
  %151 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %150, i32 0, i32 2
  store ptr %151, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %152 = load ptr, ptr %17, align 8, !tbaa !5
  %153 = invoke noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %152)
          to label %154 unwind label %163

154:                                              ; preds = %148
  store ptr %153, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %155 = load ptr, ptr %17, align 8, !tbaa !5
  %156 = invoke noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %155)
          to label %157 unwind label %167

157:                                              ; preds = %154
  store ptr %156, ptr %19, align 8, !tbaa !5
  br label %158

158:                                              ; preds = %188, %157
  %159 = load ptr, ptr %18, align 8, !tbaa !5
  %160 = load ptr, ptr %19, align 8, !tbaa !5
  %161 = icmp ne ptr %159, %160
  br i1 %161, label %171, label %162

162:                                              ; preds = %158
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %193

163:                                              ; preds = %148
  %164 = landingpad { ptr, i32 }
          cleanup
  %165 = extractvalue { ptr, i32 } %164, 0
  store ptr %165, ptr %7, align 8
  %166 = extractvalue { ptr, i32 } %164, 1
  store i32 %166, ptr %8, align 4
  br label %192

167:                                              ; preds = %154
  %168 = landingpad { ptr, i32 }
          cleanup
  %169 = extractvalue { ptr, i32 } %168, 0
  store ptr %169, ptr %7, align 8
  %170 = extractvalue { ptr, i32 } %168, 1
  store i32 %170, ptr %8, align 4
  br label %191

171:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %172 = load ptr, ptr %18, align 8, !tbaa !5
  %173 = load float, ptr %172, align 4, !tbaa !43
  store float %173, ptr %20, align 4, !tbaa !43
  br label %174

174:                                              ; preds = %171
  %175 = load float, ptr %20, align 4, !tbaa !43
  %176 = fcmp olt float %175, 0.000000e+00
  br i1 %176, label %185, label %177

177:                                              ; preds = %174
  %178 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.11, ptr noundef @.str.3, i32 noundef 187)
          to label %179 unwind label %181

179:                                              ; preds = %177
  br i1 %178, label %180, label %185

180:                                              ; preds = %179
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !45
  br label %185

181:                                              ; preds = %177
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %7, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %191

185:                                              ; preds = %180, %179, %174
  br label %186

186:                                              ; preds = %185
  br label %187

187:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %188

188:                                              ; preds = %187
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = getelementptr inbounds float, ptr %189, i32 1
  store ptr %190, ptr %18, align 8, !tbaa !5
  br label %158

191:                                              ; preds = %181, %167
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %192

192:                                              ; preds = %191, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #6
  br label %381

193:                                              ; preds = %162
  br label %194

194:                                              ; preds = %193
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %195, i32 0, i32 3
  %197 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %196, i32 0, i32 3
  %198 = load float, ptr %197, align 8, !tbaa !46
  %199 = fcmp oge float %198, 0.000000e+00
  br i1 %199, label %204, label %200

200:                                              ; preds = %194
  %201 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.12, ptr noundef @.str.3, i32 noundef 189)
          to label %202 unwind label %70

202:                                              ; preds = %200
  br i1 %201, label %203, label %204

203:                                              ; preds = %202
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !47
  br label %204

204:                                              ; preds = %203, %202, %194
  br label %205

205:                                              ; preds = %204
  br label %206

206:                                              ; preds = %205
  br label %207

207:                                              ; preds = %206
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %208, i32 0, i32 3
  %210 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %209, i32 0, i32 7
  %211 = load float, ptr %210, align 8, !tbaa !48
  %212 = fcmp ogt float %211, 0.000000e+00
  br i1 %212, label %217, label %213

213:                                              ; preds = %207
  %214 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.13, ptr noundef @.str.3, i32 noundef 190)
          to label %215 unwind label %70

215:                                              ; preds = %213
  br i1 %214, label %216, label %217

216:                                              ; preds = %215
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !49
  br label %217

217:                                              ; preds = %216, %215, %207
  br label %218

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218
  br label %220

220:                                              ; preds = %219
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %221, i32 0, i32 3
  %223 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %222, i32 0, i32 0
  %224 = load i8, ptr %223, align 8, !tbaa !50
  %225 = icmp ne i8 %224, 0
  br i1 %225, label %240, label %226

226:                                              ; preds = %220
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %227, i32 0, i32 3
  %229 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %228, i32 0, i32 6
  %230 = load float, ptr %229, align 4, !tbaa !51
  %231 = load ptr, ptr %5, align 8, !tbaa !5
  %232 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %231, i32 0, i32 2
  %233 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %232, i32 0, i32 2
  %234 = load float, ptr %233, align 8, !tbaa !40
  %235 = fcmp olt float %230, %234
  br i1 %235, label %240, label %236

236:                                              ; preds = %226
  %237 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.14, ptr noundef @.str.3, i32 noundef 191)
          to label %238 unwind label %70

238:                                              ; preds = %236
  br i1 %237, label %239, label %240

239:                                              ; preds = %238
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !52
  br label %240

240:                                              ; preds = %239, %238, %226, %220
  br label %241

241:                                              ; preds = %240
  br label %242

242:                                              ; preds = %241
  br label %243

243:                                              ; preds = %242
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %244, i32 0, i32 3
  %246 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %245, i32 0, i32 6
  %247 = load float, ptr %246, align 4, !tbaa !51
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %248, i32 0, i32 3
  %250 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %249, i32 0, i32 7
  %251 = load float, ptr %250, align 8, !tbaa !48
  %252 = fcmp ogt float %247, %251
  br i1 %252, label %257, label %253

253:                                              ; preds = %243
  %254 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.15, ptr noundef @.str.3, i32 noundef 192)
          to label %255 unwind label %70

255:                                              ; preds = %253
  br i1 %254, label %256, label %257

256:                                              ; preds = %255
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !53
  br label %257

257:                                              ; preds = %256, %255, %243
  br label %258

258:                                              ; preds = %257
  br label %259

259:                                              ; preds = %258
  br label %260

260:                                              ; preds = %259
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %261, i32 0, i32 3
  %263 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %262, i32 0, i32 8
  %264 = load float, ptr %263, align 4, !tbaa !54
  %265 = fcmp ogt float %264, 0.000000e+00
  br i1 %265, label %270, label %266

266:                                              ; preds = %260
  %267 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.16, ptr noundef @.str.3, i32 noundef 193)
          to label %268 unwind label %70

268:                                              ; preds = %266
  br i1 %267, label %269, label %270

269:                                              ; preds = %268
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !55
  br label %270

270:                                              ; preds = %269, %268, %260
  br label %271

271:                                              ; preds = %270
  br label %272

272:                                              ; preds = %271
  %273 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 7
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %274, i32 0, i32 4
  %276 = invoke noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %275)
          to label %277 unwind label %70

277:                                              ; preds = %272
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %273, i64 noundef %276)
          to label %278 unwind label %70

278:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !56
  br label %279

279:                                              ; preds = %361, %278
  %280 = load i32, ptr %27, align 4, !tbaa !56
  %281 = zext i32 %280 to i64
  %282 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 7
  %283 = invoke noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %282)
          to label %284 unwind label %287

284:                                              ; preds = %279
  %285 = icmp ult i64 %281, %283
  br i1 %285, label %291, label %286

286:                                              ; preds = %284
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %365

287:                                              ; preds = %279
  %288 = landingpad { ptr, i32 }
          cleanup
  %289 = extractvalue { ptr, i32 } %288, 0
  store ptr %289, ptr %7, align 8
  %290 = extractvalue { ptr, i32 } %288, 1
  store i32 %290, ptr %8, align 4
  br label %364

291:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %292, i32 0, i32 4
  %294 = load i32, ptr %27, align 4, !tbaa !56
  %295 = zext i32 %294 to i64
  %296 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %293, i64 noundef %295)
          to label %297 unwind label %313

297:                                              ; preds = %291
  store ptr %296, ptr %28, align 8, !tbaa !5
  %298 = load ptr, ptr %28, align 8, !tbaa !5
  %299 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 7
  %300 = load i32, ptr %27, align 4, !tbaa !56
  %301 = zext i32 %300 to i64
  %302 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %299, i64 noundef %301)
          to label %303 unwind label %313

303:                                              ; preds = %297
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %302, ptr align 4 %298, i64 24, i1 false), !tbaa.struct !57
  br label %304

304:                                              ; preds = %303
  %305 = load ptr, ptr %28, align 8, !tbaa !5
  %306 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %305, i32 0, i32 2
  %307 = load float, ptr %306, align 4, !tbaa !58
  %308 = fcmp ogt float %307, 0.000000e+00
  br i1 %308, label %317, label %309

309:                                              ; preds = %304
  %310 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.17, ptr noundef @.str.3, i32 noundef 201)
          to label %311 unwind label %313

311:                                              ; preds = %309
  br i1 %310, label %312, label %317

312:                                              ; preds = %311
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !60
  br label %317

313:                                              ; preds = %354, %342, %330, %309, %297, %291
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %7, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %364

317:                                              ; preds = %312, %311, %304
  br label %318

318:                                              ; preds = %317
  br label %319

319:                                              ; preds = %318
  br label %320

320:                                              ; preds = %319
  %321 = load ptr, ptr %28, align 8, !tbaa !5
  %322 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %321, i32 0, i32 3
  %323 = load float, ptr %322, align 4, !tbaa !61
  %324 = fcmp oge float %323, 0.000000e+00
  br i1 %324, label %325, label %330

325:                                              ; preds = %320
  %326 = load ptr, ptr %28, align 8, !tbaa !5
  %327 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %326, i32 0, i32 3
  %328 = load float, ptr %327, align 4, !tbaa !61
  %329 = fcmp ole float %328, 1.000000e+00
  br i1 %329, label %334, label %330

330:                                              ; preds = %325, %320
  %331 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.18, ptr noundef @.str.3, i32 noundef 202)
          to label %332 unwind label %313

332:                                              ; preds = %330
  br i1 %331, label %333, label %334

333:                                              ; preds = %332
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !62
  br label %334

334:                                              ; preds = %333, %332, %325
  br label %335

335:                                              ; preds = %334
  br label %336

336:                                              ; preds = %335
  br label %337

337:                                              ; preds = %336
  %338 = load ptr, ptr %28, align 8, !tbaa !5
  %339 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %338, i32 0, i32 5
  %340 = load float, ptr %339, align 4, !tbaa !63
  %341 = fcmp oge float %340, 0.000000e+00
  br i1 %341, label %346, label %342

342:                                              ; preds = %337
  %343 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.19, ptr noundef @.str.3, i32 noundef 203)
          to label %344 unwind label %313

344:                                              ; preds = %342
  br i1 %343, label %345, label %346

345:                                              ; preds = %344
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !64
  br label %346

346:                                              ; preds = %345, %344, %337
  br label %347

347:                                              ; preds = %346
  br label %348

348:                                              ; preds = %347
  br label %349

349:                                              ; preds = %348
  %350 = load ptr, ptr %28, align 8, !tbaa !5
  %351 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %350, i32 0, i32 4
  %352 = load float, ptr %351, align 4, !tbaa !65
  %353 = fcmp ogt float %352, 1.000000e+00
  br i1 %353, label %358, label %354

354:                                              ; preds = %349
  %355 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.20, ptr noundef @.str.3, i32 noundef 204)
          to label %356 unwind label %313

356:                                              ; preds = %354
  br i1 %355, label %357, label %358

357:                                              ; preds = %356
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !66
  br label %358

358:                                              ; preds = %357, %356, %349
  br label %359

359:                                              ; preds = %358
  br label %360

360:                                              ; preds = %359
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  br label %361

361:                                              ; preds = %360
  %362 = load i32, ptr %27, align 4, !tbaa !56
  %363 = add i32 %362, 1
  store i32 %363, ptr %27, align 4, !tbaa !56
  br label %279, !llvm.loop !67

364:                                              ; preds = %313, %287
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  br label %381

365:                                              ; preds = %286
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %366, i32 0, i32 5
  %368 = load float, ptr %367, align 8, !tbaa !69
  %369 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 8
  store float %368, ptr %369, align 8, !tbaa !70
  br label %370

370:                                              ; preds = %365
  %371 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %34, i32 0, i32 8
  %372 = load float, ptr %371, align 8, !tbaa !70
  %373 = fcmp ogt float %372, 1.000000e+00
  br i1 %373, label %378, label %374

374:                                              ; preds = %370
  %375 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.21, ptr noundef @.str.3, i32 noundef 208)
          to label %376 unwind label %70

376:                                              ; preds = %374
  br i1 %375, label %377, label %378

377:                                              ; preds = %376
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #6, !srcloc !71
  br label %378

378:                                              ; preds = %377, %376, %370
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379
  ret void

381:                                              ; preds = %364, %192, %147, %70
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #6
  call void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %44) #6
  call void @_ZN3JPH27VehicleTransmissionSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %42) #6
  br label %382

382:                                              ; preds = %381, %66
  call void @_ZN3JPH21VehicleEngineSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(52) %40) #6
  br label %383

383:                                              ; preds = %382, %62
  call void @_ZN3JPH17VehicleControllerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %34) #6
  br label %384

384:                                              ; preds = %383
  %385 = load ptr, ptr %7, align 8
  %386 = load i32, ptr %8, align 4
  %387 = insertvalue { ptr, i32 } poison, ptr %385, 0
  %388 = insertvalue { ptr, i32 } %387, i32 %386, 1
  resume { ptr, i32 } %388
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH13VehicleEngineC2Ev(ptr noundef nonnull align 8 dereferenceable(52)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH19VehicleTransmissionC2Ev(ptr noundef nonnull align 8 dereferenceable(100)) unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52), float noundef) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZN3JPH27VehicleTransmissionSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #1 align 2

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !14, i64 16}
!12 = !{!"_ZTSN3JPH24WheeledVehicleControllerE", !13, i64 0, !14, i64 16, !14, i64 20, !14, i64 24, !14, i64 28, !15, i64 32, !20, i64 88, !25, i64 192, !14, i64 216, !14, i64 220, !26, i64 224}
!13 = !{!"_ZTSN3JPH17VehicleControllerE", !6, i64 8}
!14 = !{!"float", !7, i64 0}
!15 = !{!"_ZTSN3JPH13VehicleEngineE", !16, i64 0, !14, i64 48}
!16 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !14, i64 0, !14, i64 4, !14, i64 8, !17, i64 16, !14, i64 40, !14, i64 44}
!17 = !{!"_ZTSN3JPH11LinearCurveE", !18, i64 0}
!18 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSN3JPH19VehicleTransmissionE", !21, i64 0, !24, i64 80, !14, i64 84, !14, i64 88, !14, i64 92, !14, i64 96}
!21 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !22, i64 0, !23, i64 8, !23, i64 32, !14, i64 56, !14, i64 60, !14, i64 64, !14, i64 68, !14, i64 72, !14, i64 76}
!22 = !{!"_ZTSN3JPH17ETransmissionModeE", !7, i64 0}
!23 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!24 = !{!"int", !7, i64 0}
!25 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !19, i64 0, !19, i64 8, !6, i64 16}
!26 = !{!"_ZTSSt8functionIFvjRfS0_ffffffEE", !27, i64 0, !6, i64 24}
!27 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!28 = !{!12, !14, i64 20}
!29 = !{!12, !14, i64 24}
!30 = !{!12, !14, i64 28}
!31 = !{!12, !14, i64 220}
!32 = !{!33, !14, i64 20}
!33 = !{!"_ZTSN3JPH32WheeledVehicleControllerSettingsE", !34, i64 0, !16, i64 16, !21, i64 64, !25, i64 144, !14, i64 168}
!34 = !{!"_ZTSN3JPH25VehicleControllerSettingsE", !35, i64 0, !36, i64 8}
!35 = !{!"_ZTSN3JPH18SerializableObjectE"}
!36 = !{!"_ZTSN3JPH9RefTargetINS_25VehicleControllerSettingsEEE", !37, i64 0}
!37 = !{!"_ZTSSt6atomicIjE", !38, i64 0}
!38 = !{!"_ZTSSt13__atomic_baseIjE", !24, i64 0}
!39 = !{i64 2159645298}
!40 = !{!33, !14, i64 24}
!41 = !{i64 2159645720}
!42 = !{!16, !14, i64 4}
!43 = !{!14, !14, i64 0}
!44 = !{i64 2159646046}
!45 = !{i64 2159646372}
!46 = !{!33, !14, i64 120}
!47 = !{i64 2159646770}
!48 = !{!33, !14, i64 136}
!49 = !{i64 2159647170}
!50 = !{!33, !22, i64 64}
!51 = !{!33, !14, i64 132}
!52 = !{i64 2159647732}
!53 = !{i64 2159648196}
!54 = !{!33, !14, i64 140}
!55 = !{i64 2159648600}
!56 = !{!24, !24, i64 0}
!57 = !{i64 0, i64 4, !56, i64 4, i64 4, !56, i64 8, i64 4, !43, i64 12, i64 4, !43, i64 16, i64 4, !43, i64 20, i64 4, !43}
!58 = !{!59, !14, i64 8}
!59 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !24, i64 0, !24, i64 4, !14, i64 8, !14, i64 12, !14, i64 16, !14, i64 20}
!60 = !{i64 2159648964}
!61 = !{!59, !14, i64 12}
!62 = !{i64 2159649382}
!63 = !{!59, !14, i64 20}
!64 = !{i64 2159649748}
!65 = !{!59, !14, i64 16}
!66 = !{i64 2159650110}
!67 = distinct !{!67, !68}
!68 = !{!"llvm.loop.mustprogress"}
!69 = !{!33, !14, i64 168}
!70 = !{!12, !14, i64 216}
!71 = !{i64 2159650492}


; 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.anon.31 = type { i8 }

@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@_ZTVN3JPH24WheeledVehicleControllerE = external dso_local unnamed_addr constant { [11 x ptr] }, align 8
@.str.8 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [127 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [37 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; 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) #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24WheeledVehicleControllerC2ERKNS_32WheeledVehicleControllerSettingsERNS_17VehicleConstraintE(ptr noundef nonnull align 8 dereferenceable(256) %0, ptr noundef nonnull align 8 dereferenceable(172) %1, ptr noundef nonnull align 16 dereferenceable(408) %2) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %class.anon.31, align 1
  tail call void @_ZN3JPH17VehicleControllerC2ERNS_17VehicleConstraintE(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 16 dereferenceable(408) %2)
  store ptr getelementptr inbounds inrange(-16, 72) (i8, ptr @_ZTVN3JPH24WheeledVehicleControllerE, i64 16), ptr %0, align 8, !tbaa !5
  %5 = getelementptr inbounds i8, ptr %0, i64 16
  %6 = getelementptr inbounds i8, ptr %0, i64 32
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %5, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH13VehicleEngineC2Ev(ptr noundef nonnull align 8 dereferenceable(52) %6)
          to label %7 unwind label %23

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %0, i64 88
  invoke void @_ZN3JPH19VehicleTransmissionC2Ev(ptr noundef nonnull align 8 dereferenceable(100) %8)
          to label %9 unwind label %25

9:                                                ; preds = %7
  %10 = getelementptr inbounds i8, ptr %0, i64 192
  tail call void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  %11 = getelementptr inbounds i8, ptr %0, i64 220
  store float 0.000000e+00, ptr %11, align 4, !tbaa !8
  %12 = getelementptr inbounds i8, ptr %0, i64 224
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #7
  call void @_ZNSt8functionIFvjRfS0_ffffffEEC2IN3JPH24WheeledVehicleController23mTireMaxImpulseCallbackMUljS0_S0_ffffffE_EvEEOT_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 1 dereferenceable(1) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #7
  %13 = getelementptr inbounds i8, ptr %1, i64 16
  %14 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3JPH21VehicleEngineSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %6, ptr noundef nonnull align 8 dereferenceable(48) %13)
          to label %15 unwind label %27

15:                                               ; preds = %9
  %16 = getelementptr inbounds i8, ptr %1, i64 20
  %17 = load float, ptr %16, align 4, !tbaa !27
  %18 = fcmp ult float %17, 0.000000e+00
  br i1 %18, label %19, label %29

19:                                               ; preds = %15
  %20 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.3, i32 noundef 177)
          to label %21 unwind label %27

21:                                               ; preds = %19
  br i1 %20, label %22, label %29

22:                                               ; preds = %21
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !34
  br label %29

23:                                               ; preds = %3
  %24 = landingpad { ptr, i32 }
          cleanup
  br label %173

25:                                               ; preds = %7
  %26 = landingpad { ptr, i32 }
          cleanup
  br label %172

27:                                               ; preds = %166, %114, %110, %102, %93, %82, %74, %41, %38, %34, %19, %9
  %28 = landingpad { ptr, i32 }
          cleanup
  br label %171

29:                                               ; preds = %15, %21, %22
  %30 = load float, ptr %16, align 4, !tbaa !27
  %31 = getelementptr inbounds i8, ptr %1, i64 24
  %32 = load float, ptr %31, align 8, !tbaa !35
  %33 = fcmp ugt float %30, %32
  br i1 %33, label %34, label %38

34:                                               ; preds = %29
  %35 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.3, i32 noundef 178)
          to label %36 unwind label %27

36:                                               ; preds = %34
  br i1 %35, label %37, label %38

37:                                               ; preds = %36
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !36
  br label %38

38:                                               ; preds = %37, %36, %29
  %39 = getelementptr inbounds i8, ptr %0, i64 36
  %40 = load float, ptr %39, align 4, !tbaa !37
  invoke void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52) %6, float noundef %40)
          to label %41 unwind label %27

41:                                               ; preds = %38
  %42 = getelementptr inbounds i8, ptr %1, i64 64
  %43 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN3JPH27VehicleTransmissionSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80) %8, ptr noundef nonnull align 8 dereferenceable(80) %42)
          to label %44 unwind label %27

44:                                               ; preds = %41
  %45 = getelementptr inbounds i8, ptr %1, i64 72
  %46 = call noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
  %47 = call noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
  %.not58 = icmp eq ptr %46, %47
  br i1 %.not58, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %59, %44
  %48 = getelementptr inbounds i8, ptr %1, i64 96
  %49 = call noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %50 = call noundef ptr @_ZNK3JPH5ArrayIfNS_12STLAllocatorIfEEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %48)
  %.not5360 = icmp eq ptr %49, %50
  br i1 %.not5360, label %._crit_edge64, label %.lr.ph63

.lr.ph:                                           ; preds = %44, %59
  %.04959 = phi ptr [ %60, %59 ], [ %46, %44 ]
  %51 = load float, ptr %.04959, align 4, !tbaa !38
  %52 = fcmp ogt float %51, 0.000000e+00
  br i1 %52, label %59, label %53

53:                                               ; preds = %.lr.ph
  %54 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.3, i32 noundef 185)
          to label %55 unwind label %57

55:                                               ; preds = %53
  br i1 %54, label %56, label %59

56:                                               ; preds = %55
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !39
  br label %59

57:                                               ; preds = %53
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %171

59:                                               ; preds = %56, %55, %.lr.ph
  %60 = getelementptr inbounds i8, ptr %.04959, i64 4
  %.not = icmp eq ptr %60, %47
  br i1 %.not, label %._crit_edge, label %.lr.ph

._crit_edge64:                                    ; preds = %72, %._crit_edge
  %61 = getelementptr inbounds i8, ptr %1, i64 120
  %62 = load float, ptr %61, align 8, !tbaa !40
  %63 = fcmp ult float %62, 0.000000e+00
  br i1 %63, label %74, label %78

.lr.ph63:                                         ; preds = %._crit_edge, %72
  %.05061 = phi ptr [ %73, %72 ], [ %49, %._crit_edge ]
  %64 = load float, ptr %.05061, align 4, !tbaa !38
  %65 = fcmp olt float %64, 0.000000e+00
  br i1 %65, label %72, label %66

66:                                               ; preds = %.lr.ph63
  %67 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.3, i32 noundef 187)
          to label %68 unwind label %70

68:                                               ; preds = %66
  br i1 %67, label %69, label %72

69:                                               ; preds = %68
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !41
  br label %72

70:                                               ; preds = %66
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %171

72:                                               ; preds = %69, %68, %.lr.ph63
  %73 = getelementptr inbounds i8, ptr %.05061, i64 4
  %.not53 = icmp eq ptr %73, %50
  br i1 %.not53, label %._crit_edge64, label %.lr.ph63

74:                                               ; preds = %._crit_edge64
  %75 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.3, i32 noundef 189)
          to label %76 unwind label %27

76:                                               ; preds = %74
  br i1 %75, label %77, label %78

77:                                               ; preds = %76
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !42
  br label %78

78:                                               ; preds = %._crit_edge64, %76, %77
  %79 = getelementptr inbounds i8, ptr %1, i64 136
  %80 = load float, ptr %79, align 8, !tbaa !43
  %81 = fcmp ogt float %80, 0.000000e+00
  br i1 %81, label %86, label %82

82:                                               ; preds = %78
  %83 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.3, i32 noundef 190)
          to label %84 unwind label %27

84:                                               ; preds = %82
  br i1 %83, label %85, label %86

85:                                               ; preds = %84
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !44
  br label %86

86:                                               ; preds = %78, %84, %85
  %87 = load i8, ptr %42, align 8, !tbaa !45
  %.not54 = icmp eq i8 %87, 0
  br i1 %.not54, label %88, label %97

88:                                               ; preds = %86
  %89 = getelementptr inbounds i8, ptr %1, i64 132
  %90 = load float, ptr %89, align 4, !tbaa !46
  %91 = load float, ptr %31, align 8, !tbaa !35
  %92 = fcmp olt float %90, %91
  br i1 %92, label %97, label %93

93:                                               ; preds = %88
  %94 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.14, ptr noundef nonnull @.str.3, i32 noundef 191)
          to label %95 unwind label %27

95:                                               ; preds = %93
  br i1 %94, label %96, label %97

96:                                               ; preds = %95
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !47
  br label %97

97:                                               ; preds = %86, %88, %95, %96
  %98 = getelementptr inbounds i8, ptr %1, i64 132
  %99 = load float, ptr %98, align 4, !tbaa !46
  %100 = load float, ptr %79, align 8, !tbaa !43
  %101 = fcmp ogt float %99, %100
  br i1 %101, label %106, label %102

102:                                              ; preds = %97
  %103 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.15, ptr noundef nonnull @.str.3, i32 noundef 192)
          to label %104 unwind label %27

104:                                              ; preds = %102
  br i1 %103, label %105, label %106

105:                                              ; preds = %104
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !48
  br label %106

106:                                              ; preds = %97, %104, %105
  %107 = getelementptr inbounds i8, ptr %1, i64 140
  %108 = load float, ptr %107, align 4, !tbaa !49
  %109 = fcmp ogt float %108, 0.000000e+00
  br i1 %109, label %114, label %110

110:                                              ; preds = %106
  %111 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.3, i32 noundef 193)
          to label %112 unwind label %27

112:                                              ; preds = %110
  br i1 %111, label %113, label %114

113:                                              ; preds = %112
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !50
  br label %114

114:                                              ; preds = %113, %112, %106
  %115 = getelementptr inbounds i8, ptr %1, i64 144
  %116 = call noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %115)
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %116)
          to label %.preheader unwind label %27

.preheader:                                       ; preds = %114
  %117 = call noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %.not68 = icmp eq i64 %117, 0
  br i1 %.not68, label %._crit_edge67, label %.lr.ph66

._crit_edge67:                                    ; preds = %161, %.preheader
  %118 = getelementptr inbounds i8, ptr %1, i64 168
  %119 = load float, ptr %118, align 8, !tbaa !51
  %120 = getelementptr inbounds i8, ptr %0, i64 216
  store float %119, ptr %120, align 8, !tbaa !52
  %121 = fcmp ogt float %119, 1.000000e+00
  br i1 %121, label %170, label %166

.lr.ph66:                                         ; preds = %.preheader, %161
  %122 = phi i64 [ %163, %161 ], [ 0, %.preheader ]
  %.04565 = phi i32 [ %162, %161 ], [ 0, %.preheader ]
  %123 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %115, i64 noundef %122)
          to label %124 unwind label %134

124:                                              ; preds = %.lr.ph66
  %125 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %122)
          to label %126 unwind label %134

126:                                              ; preds = %124
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %125, ptr noundef nonnull align 4 dereferenceable(24) %123, i64 24, i1 false), !tbaa.struct !53
  %127 = getelementptr inbounds i8, ptr %123, i64 8
  %128 = load float, ptr %127, align 4, !tbaa !55
  %129 = fcmp ogt float %128, 0.000000e+00
  br i1 %129, label %136, label %130

130:                                              ; preds = %126
  %131 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.3, i32 noundef 201)
          to label %132 unwind label %134

132:                                              ; preds = %130
  br i1 %131, label %133, label %136

133:                                              ; preds = %132
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !57
  br label %136

134:                                              ; preds = %157, %149, %141, %130, %124, %.lr.ph66
  %135 = landingpad { ptr, i32 }
          cleanup
  br label %171

136:                                              ; preds = %126, %132, %133
  %137 = getelementptr inbounds i8, ptr %123, i64 12
  %138 = load float, ptr %137, align 4, !tbaa !58
  %139 = fcmp ult float %138, 0.000000e+00
  %140 = fcmp ugt float %138, 1.000000e+00
  %or.cond = or i1 %139, %140
  br i1 %or.cond, label %141, label %145

141:                                              ; preds = %136
  %142 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.3, i32 noundef 202)
          to label %143 unwind label %134

143:                                              ; preds = %141
  br i1 %142, label %144, label %145

144:                                              ; preds = %143
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !59
  br label %145

145:                                              ; preds = %136, %143, %144
  %146 = getelementptr inbounds i8, ptr %123, i64 20
  %147 = load float, ptr %146, align 4, !tbaa !60
  %148 = fcmp ult float %147, 0.000000e+00
  br i1 %148, label %149, label %153

149:                                              ; preds = %145
  %150 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.19, ptr noundef nonnull @.str.3, i32 noundef 203)
          to label %151 unwind label %134

151:                                              ; preds = %149
  br i1 %150, label %152, label %153

152:                                              ; preds = %151
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !61
  br label %153

153:                                              ; preds = %145, %151, %152
  %154 = getelementptr inbounds i8, ptr %123, i64 16
  %155 = load float, ptr %154, align 4, !tbaa !62
  %156 = fcmp ogt float %155, 1.000000e+00
  br i1 %156, label %161, label %157

157:                                              ; preds = %153
  %158 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.3, i32 noundef 204)
          to label %159 unwind label %134

159:                                              ; preds = %157
  br i1 %158, label %160, label %161

160:                                              ; preds = %159
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !63
  br label %161

161:                                              ; preds = %160, %159, %153
  %162 = add i32 %.04565, 1
  %163 = zext i32 %162 to i64
  %164 = call noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10)
  %165 = icmp ugt i64 %164, %163
  br i1 %165, label %.lr.ph66, label %._crit_edge67, !llvm.loop !64

166:                                              ; preds = %._crit_edge67
  %167 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.3, i32 noundef 208)
          to label %168 unwind label %27

168:                                              ; preds = %166
  br i1 %167, label %169, label %170

169:                                              ; preds = %168
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #7, !srcloc !66
  br label %170

170:                                              ; preds = %169, %168, %._crit_edge67
  ret void

171:                                              ; preds = %134, %70, %57, %27
  %.pn = phi { ptr, i32 } [ %58, %57 ], [ %71, %70 ], [ %135, %134 ], [ %28, %27 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @_ZN3JPH27VehicleTransmissionSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(100) %8) #7
  br label %172

172:                                              ; preds = %171, %25
  %.pn.pn = phi { ptr, i32 } [ %.pn, %171 ], [ %26, %25 ]
  call void @_ZN3JPH21VehicleEngineSettingsD2Ev(ptr noundef nonnull align 8 dereferenceable(52) %6) #7
  br label %173

173:                                              ; preds = %172, %23
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %172 ], [ %24, %23 ]
  call void @_ZN3JPH17VehicleControllerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %0) #7
  resume { ptr, i32 } %.pn.pn.pn
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH13VehicleEngineC2Ev(ptr noundef nonnull align 8 dereferenceable(52)) unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH19VehicleTransmissionC2Ev(ptr noundef nonnull align 8 dereferenceable(100)) unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52), float noundef) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZN3JPH27VehicleTransmissionSettingsaSERKS0_(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #7 = { 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 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !13, i64 220}
!9 = !{!"_ZTSN3JPH24WheeledVehicleControllerE", !10, i64 0, !13, i64 16, !13, i64 20, !13, i64 24, !13, i64 28, !14, i64 32, !19, i64 88, !24, i64 192, !13, i64 216, !13, i64 220, !25, i64 224}
!10 = !{!"_ZTSN3JPH17VehicleControllerE", !11, i64 8}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !7, i64 0}
!13 = !{!"float", !12, i64 0}
!14 = !{!"_ZTSN3JPH13VehicleEngineE", !15, i64 0, !13, i64 48}
!15 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !13, i64 0, !13, i64 4, !13, i64 8, !16, i64 16, !13, i64 40, !13, i64 44}
!16 = !{!"_ZTSN3JPH11LinearCurveE", !17, i64 0}
!17 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !18, i64 0, !18, i64 8, !11, i64 16}
!18 = !{!"long", !12, i64 0}
!19 = !{!"_ZTSN3JPH19VehicleTransmissionE", !20, i64 0, !23, i64 80, !13, i64 84, !13, i64 88, !13, i64 92, !13, i64 96}
!20 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !21, i64 0, !22, i64 8, !22, i64 32, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !13, i64 76}
!21 = !{!"_ZTSN3JPH17ETransmissionModeE", !12, i64 0}
!22 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !18, i64 0, !18, i64 8, !11, i64 16}
!23 = !{!"int", !12, i64 0}
!24 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !18, i64 0, !18, i64 8, !11, i64 16}
!25 = !{!"_ZTSSt8functionIFvjRfS0_ffffffEE", !26, i64 0, !11, i64 24}
!26 = !{!"_ZTSSt14_Function_base", !12, i64 0, !11, i64 16}
!27 = !{!28, !13, i64 20}
!28 = !{!"_ZTSN3JPH32WheeledVehicleControllerSettingsE", !29, i64 0, !15, i64 16, !20, i64 64, !24, i64 144, !13, i64 168}
!29 = !{!"_ZTSN3JPH25VehicleControllerSettingsE", !30, i64 0, !31, i64 8}
!30 = !{!"_ZTSN3JPH18SerializableObjectE"}
!31 = !{!"_ZTSN3JPH9RefTargetINS_25VehicleControllerSettingsEEE", !32, i64 0}
!32 = !{!"_ZTSSt6atomicIjE", !33, i64 0}
!33 = !{!"_ZTSSt13__atomic_baseIjE", !23, i64 0}
!34 = !{i64 2159645298}
!35 = !{!28, !13, i64 24}
!36 = !{i64 2159645720}
!37 = !{!15, !13, i64 4}
!38 = !{!13, !13, i64 0}
!39 = !{i64 2159646046}
!40 = !{!28, !13, i64 120}
!41 = !{i64 2159646372}
!42 = !{i64 2159646770}
!43 = !{!28, !13, i64 136}
!44 = !{i64 2159647170}
!45 = !{!28, !21, i64 64}
!46 = !{!28, !13, i64 132}
!47 = !{i64 2159647732}
!48 = !{i64 2159648196}
!49 = !{!28, !13, i64 140}
!50 = !{i64 2159648600}
!51 = !{!28, !13, i64 168}
!52 = !{!9, !13, i64 216}
!53 = !{i64 0, i64 4, !54, i64 4, i64 4, !54, i64 8, i64 4, !38, i64 12, i64 4, !38, i64 16, i64 4, !38, i64 20, i64 4, !38}
!54 = !{!23, !23, i64 0}
!55 = !{!56, !13, i64 8}
!56 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !23, i64 0, !23, i64 4, !13, i64 8, !13, i64 12, !13, i64 16, !13, i64 20}
!57 = !{i64 2159648964}
!58 = !{!56, !13, i64 12}
!59 = !{i64 2159649382}
!60 = !{!56, !13, i64 20}
!61 = !{i64 2159649748}
!62 = !{!56, !13, i64 16}
!63 = !{i64 2159650110}
!64 = distinct !{!64, !65}
!65 = !{!"llvm.loop.mustprogress"}
!66 = !{i64 2159650492}


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