; 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.JPH::Array.33" = type { i64, i64, ptr }
%struct.DrivenDifferential = type { ptr, float, float, float }
%"struct.JPH::AssertLastParam" = type { i8 }
%"class.JPH::Array.36" = type { i64, i64, ptr }
%"class.JPH::VehicleDifferentialSettings" = type { i32, i32, float, float, float, float }
%struct.DrivenWheel = type { ptr, float, float, float }
%"class.JPH::DynMatrix" = type { i32, i32, %"class.JPH::Array.2" }
%"class.JPH::Array.2" = type { i64, i64, ptr }
%"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.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::WheelSettingsWV" = type { %"class.JPH::WheelSettings.base", float, float, float, %"class.JPH::LinearCurve", %"class.JPH::LinearCurve", float, float, [8 x i8] }
%"class.JPH::WheelSettings.base" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.12", [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, float, %"class.JPH::SpringSettings", float, float, i8 }>
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.12" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::SpringSettings" = type { i8, %union.anon.13, float }
%union.anon.13 = type { float }
%"class.JPH::WheelSettings" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.12", [4 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, float, %"class.JPH::SpringSettings", float, float, i8, [15 x i8] }>
%"class.JPH::WheelWV" = type { %"class.JPH::Wheel.base", float, float, float, float, float, [8 x i8] }
%"class.JPH::Wheel.base" = type <{ ptr, %"class.JPH::RefConst", %"class.JPH::BodyID", %"class.JPH::SubShapeID", ptr, float, [12 x i8], %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, float, float, float, float, %"class.JPH::AxisConstraintPart", %"class.JPH::AxisConstraintPart", %"class.JPH::AxisConstraintPart", %"class.JPH::AxisConstraintPart" }>
%"class.JPH::RefConst" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::AxisConstraintPart" = type { %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", %"class.JPH::Float3", float, %"class.JPH::SpringPart", float }
%"class.JPH::Float3" = type { float, float, float }
%"class.JPH::SpringPart" = type { float, float }

@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [49 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH7WheelWV6UpdateEjfRKNS_17VehicleConstraintE(ptr noundef nonnull align 16 dereferenceable(424), i32 noundef, float noundef, ptr noundef nonnull align 16 dereferenceable(408)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424)) #3 align 2

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH4SignIfEET_S1_(float noundef) #6

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404)) #7 align 2

declare noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100)) #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408)) #7 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemE(ptr noundef nonnull align 8 dereferenceable(256) %0, float noundef %1, ptr noundef nonnull align 16 dereferenceable(1172) %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca float, align 4
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca %"class.JPH::Array.33", align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca float, align 4
  %25 = alloca i32, align 4
  %26 = alloca [2 x i32], align 4
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca %struct.DrivenDifferential, align 8
  %32 = alloca float, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca %"struct.JPH::AssertLastParam", align 1
  %47 = alloca float, align 4
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca float, align 4
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %"struct.JPH::AssertLastParam", align 1
  %58 = alloca %"class.JPH::Array.36", align 8
  %59 = alloca float, align 4
  %60 = alloca ptr, align 8
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca ptr, align 8
  %64 = alloca %"class.JPH::VehicleDifferentialSettings", align 4
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca float, align 4
  %70 = alloca %struct.DrivenWheel, align 8
  %71 = alloca %struct.DrivenWheel, align 8
  %72 = alloca %struct.DrivenWheel, align 8
  %73 = alloca %struct.DrivenWheel, align 8
  %74 = alloca i8, align 1
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %"class.JPH::DynMatrix", align 8
  %78 = alloca %"class.JPH::DynMatrix", align 8
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca float, align 4
  %83 = alloca float, align 4
  %84 = alloca i32, align 4
  %85 = alloca ptr, align 8
  %86 = alloca ptr, align 8
  %87 = alloca float, align 4
  %88 = alloca float, align 4
  %89 = alloca float, align 4
  %90 = alloca i32, align 4
  %91 = alloca ptr, align 8
  %92 = alloca float, align 4
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca i32, align 4
  %96 = alloca ptr, align 8
  %97 = alloca ptr, align 8
  %98 = alloca float, align 4
  %99 = alloca %"struct.JPH::AssertLastParam", align 1
  %100 = alloca i8, align 1
  %101 = alloca ptr, align 8
  %102 = alloca ptr, align 8
  %103 = alloca ptr, align 8
  %104 = alloca ptr, align 8
  %105 = alloca i8, align 1
  %106 = alloca ptr, align 8
  %107 = alloca ptr, align 8
  %108 = alloca ptr, align 8
  %109 = alloca ptr, align 8
  %110 = alloca ptr, align 8
  %111 = alloca ptr, align 8
  %112 = alloca float, align 4
  %113 = alloca float, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store float %1, ptr %5, align 4, !tbaa !9
  store ptr %2, ptr %6, align 8, !tbaa !5
  %114 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %115 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %116 = call noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %115)
  store float %116, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %117 = getelementptr inbounds %"class.JPH::VehicleController", ptr %114, i32 0, i32 1
  %118 = load ptr, ptr %117, align 8, !tbaa !11
  %119 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408) %118)
  store ptr %119, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  store i32 0, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %120 = load ptr, ptr %8, align 8, !tbaa !5
  %121 = call noundef i64 @_ZNK3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %120)
  %122 = trunc i64 %121 to i32
  store i32 %122, ptr %10, align 4, !tbaa !13
  br label %123

123:                                              ; preds = %139, %3
  %124 = load i32, ptr %9, align 4, !tbaa !13
  %125 = load i32, ptr %10, align 4, !tbaa !13
  %126 = icmp ult i32 %124, %125
  br i1 %126, label %128, label %127

127:                                              ; preds = %123
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #9
  br label %142

128:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %129 = load ptr, ptr %8, align 8, !tbaa !5
  %130 = load i32, ptr %9, align 4, !tbaa !13
  %131 = zext i32 %130 to i64
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %129, i64 noundef %131)
  %133 = load ptr, ptr %132, align 8, !tbaa !5
  store ptr %133, ptr %11, align 8, !tbaa !5
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  %135 = load i32, ptr %9, align 4, !tbaa !13
  %136 = load float, ptr %5, align 4, !tbaa !9
  %137 = getelementptr inbounds %"class.JPH::VehicleController", ptr %114, i32 0, i32 1
  %138 = load ptr, ptr %137, align 8, !tbaa !11
  call void @_ZN3JPH7WheelWV6UpdateEjfRKNS_17VehicleConstraintE(ptr noundef nonnull align 16 dereferenceable(424) %134, i32 noundef %135, float noundef %136, ptr noundef nonnull align 16 dereferenceable(408) %138)
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  br label %139

139:                                              ; preds = %128
  %140 = load i32, ptr %9, align 4, !tbaa !13
  %141 = add i32 %140, 1
  store i32 %141, ptr %9, align 4, !tbaa !13
  br label %123, !llvm.loop !15

142:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %143 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 1
  %144 = load float, ptr %143, align 8, !tbaa !17
  %145 = call noundef float @_ZSt3absf(float noundef %144)
  store float %145, ptr %12, align 4, !tbaa !9
  %146 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %147 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %146, i32 0, i32 0
  %148 = load i8, ptr %147, align 8, !tbaa !31
  %149 = icmp eq i8 %148, 0
  br i1 %149, label %150, label %155

150:                                              ; preds = %142
  %151 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %152 = call noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100) %151)
  %153 = load float, ptr %12, align 4, !tbaa !9
  %154 = fmul float %153, %152
  store float %154, ptr %12, align 4, !tbaa !9
  br label %155

155:                                              ; preds = %150, %142
  %156 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %157 = load float, ptr %5, align 4, !tbaa !9
  call void @_ZN3JPH13VehicleEngine12ApplyDampingEf(ptr noundef nonnull align 8 dereferenceable(52) %156, float noundef %157)
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %158 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %159 = load float, ptr %12, align 4, !tbaa !9
  %160 = call noundef float @_ZNK3JPH13VehicleEngine9GetTorqueEf(ptr noundef nonnull align 8 dereferenceable(52) %158, float noundef %159)
  store float %160, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #9
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  %161 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 7
  %162 = invoke noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %161)
          to label %163 unwind label %177

163:                                              ; preds = %155
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %14, i64 noundef %162)
          to label %164 unwind label %177

164:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #9
  store float 0x47EFFFFFE0000000, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  store float 0.000000e+00, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %165 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 7
  store ptr %165, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %166 = load ptr, ptr %19, align 8, !tbaa !5
  %167 = invoke noundef ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %166)
          to label %168 unwind label %181

168:                                              ; preds = %164
  store ptr %167, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %169 = load ptr, ptr %19, align 8, !tbaa !5
  %170 = invoke noundef ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %169)
          to label %171 unwind label %185

171:                                              ; preds = %168
  store ptr %170, ptr %21, align 8, !tbaa !5
  br label %172

172:                                              ; preds = %273, %171
  %173 = load ptr, ptr %20, align 8, !tbaa !5
  %174 = load ptr, ptr %21, align 8, !tbaa !5
  %175 = icmp ne ptr %173, %174
  br i1 %175, label %189, label %176

176:                                              ; preds = %172
  store i32 5, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %279

177:                                              ; preds = %163, %155
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %15, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %16, align 4
  br label %1258

181:                                              ; preds = %164
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %15, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %16, align 4
  br label %278

185:                                              ; preds = %168
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %15, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %16, align 4
  br label %277

189:                                              ; preds = %172
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %190 = load ptr, ptr %20, align 8, !tbaa !5
  store ptr %190, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  store float 0.000000e+00, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  store i32 0, ptr %25, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %191 = load ptr, ptr %23, align 8, !tbaa !5
  %192 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %191, i32 0, i32 0
  %193 = load i32, ptr %192, align 4, !tbaa !32
  store i32 %193, ptr %26, align 4, !tbaa !13
  %194 = getelementptr inbounds i32, ptr %26, i64 1
  %195 = load ptr, ptr %23, align 8, !tbaa !5
  %196 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %195, i32 0, i32 1
  %197 = load i32, ptr %196, align 4, !tbaa !34
  store i32 %197, ptr %194, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  store ptr %26, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %198 = load ptr, ptr %27, align 8, !tbaa !5
  %199 = getelementptr inbounds [2 x i32], ptr %198, i64 0, i64 0
  store ptr %199, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %200 = load ptr, ptr %27, align 8, !tbaa !5
  %201 = getelementptr inbounds [2 x i32], ptr %200, i64 0, i64 0
  %202 = getelementptr inbounds i32, ptr %201, i64 2
  store ptr %202, ptr %29, align 8, !tbaa !5
  br label %203

203:                                              ; preds = %231, %189
  %204 = load ptr, ptr %28, align 8, !tbaa !5
  %205 = load ptr, ptr %29, align 8, !tbaa !5
  %206 = icmp ne ptr %204, %205
  br i1 %206, label %208, label %207

207:                                              ; preds = %203
  store i32 7, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %234

208:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %209 = load ptr, ptr %28, align 8, !tbaa !5
  %210 = load i32, ptr %209, align 4, !tbaa !13
  store i32 %210, ptr %30, align 4, !tbaa !13
  %211 = load i32, ptr %30, align 4, !tbaa !13
  %212 = icmp ne i32 %211, -1
  br i1 %212, label %213, label %230

213:                                              ; preds = %208
  %214 = load ptr, ptr %8, align 8, !tbaa !5
  %215 = load i32, ptr %30, align 4, !tbaa !13
  %216 = sext i32 %215 to i64
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %214, i64 noundef %216)
          to label %218 unwind label %226

218:                                              ; preds = %213
  %219 = load ptr, ptr %217, align 8, !tbaa !5
  %220 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %219)
          to label %221 unwind label %226

221:                                              ; preds = %218
  %222 = load float, ptr %24, align 4, !tbaa !9
  %223 = fadd float %222, %220
  store float %223, ptr %24, align 4, !tbaa !9
  %224 = load i32, ptr %25, align 4, !tbaa !13
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %25, align 4, !tbaa !13
  br label %230

226:                                              ; preds = %218, %213
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %15, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %276

230:                                              ; preds = %221, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  br label %231

231:                                              ; preds = %230
  %232 = load ptr, ptr %28, align 8, !tbaa !5
  %233 = getelementptr inbounds i32, ptr %232, i32 1
  store ptr %233, ptr %28, align 8, !tbaa !5
  br label %203

234:                                              ; preds = %207
  %235 = load i32, ptr %25, align 4, !tbaa !13
  %236 = icmp sgt i32 %235, 0
  br i1 %236, label %237, label %272

237:                                              ; preds = %234
  %238 = load float, ptr %24, align 4, !tbaa !9
  %239 = load ptr, ptr %23, align 8, !tbaa !5
  %240 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %239, i32 0, i32 2
  %241 = load float, ptr %240, align 4, !tbaa !35
  %242 = fmul float %238, %241
  %243 = load i32, ptr %25, align 4, !tbaa !13
  %244 = sitofp i32 %243 to float
  %245 = fdiv float %242, %244
  %246 = invoke noundef float @_ZSt3absf(float noundef %245)
          to label %247 unwind label %264

247:                                              ; preds = %237
  store float %246, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #9
  %248 = getelementptr inbounds %struct.DrivenDifferential, ptr %31, i32 0, i32 0
  %249 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %249, ptr %248, align 8, !tbaa !36
  %250 = getelementptr inbounds %struct.DrivenDifferential, ptr %31, i32 0, i32 1
  %251 = load float, ptr %24, align 4, !tbaa !9
  store float %251, ptr %250, align 8, !tbaa !38
  %252 = getelementptr inbounds %struct.DrivenDifferential, ptr %31, i32 0, i32 2
  %253 = load ptr, ptr %23, align 8, !tbaa !5
  %254 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %253, i32 0, i32 5
  %255 = load float, ptr %254, align 4, !tbaa !39
  store float %255, ptr %252, align 4, !tbaa !40
  %256 = getelementptr inbounds %struct.DrivenDifferential, ptr %31, i32 0, i32 3
  store float 0.000000e+00, ptr %256, align 8, !tbaa !41
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %31)
          to label %257 unwind label %268

257:                                              ; preds = %247
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  %258 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %259 unwind label %264

259:                                              ; preds = %257
  %260 = load float, ptr %258, align 4, !tbaa !9
  store float %260, ptr %17, align 4, !tbaa !9
  %261 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %18, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %262 unwind label %264

262:                                              ; preds = %259
  %263 = load float, ptr %261, align 4, !tbaa !9
  store float %263, ptr %18, align 4, !tbaa !9
  br label %272

264:                                              ; preds = %259, %257, %237
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %15, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %16, align 4
  br label %276

268:                                              ; preds = %247
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %15, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #9
  br label %276

272:                                              ; preds = %262, %234
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %273

273:                                              ; preds = %272
  %274 = load ptr, ptr %20, align 8, !tbaa !5
  %275 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %274, i32 1
  store ptr %275, ptr %20, align 8, !tbaa !5
  br label %172

276:                                              ; preds = %268, %264, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  br label %277

277:                                              ; preds = %276, %185
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %278

278:                                              ; preds = %277, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %1257

279:                                              ; preds = %176
  %280 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 8
  %281 = load float, ptr %280, align 8, !tbaa !42
  %282 = fcmp olt float %281, 0x47EFFFFFE0000000
  br i1 %282, label %283, label %446

283:                                              ; preds = %279
  %284 = load float, ptr %18, align 4, !tbaa !9
  %285 = load float, ptr %17, align 4, !tbaa !9
  %286 = fcmp ogt float %284, %285
  br i1 %286, label %287, label %446

287:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  store float 0.000000e+00, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  store ptr %14, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %288 = load ptr, ptr %33, align 8, !tbaa !5
  %289 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %288)
          to label %290 unwind label %299

290:                                              ; preds = %287
  store ptr %289, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %291 = load ptr, ptr %33, align 8, !tbaa !5
  %292 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %291)
          to label %293 unwind label %303

293:                                              ; preds = %290
  store ptr %292, ptr %35, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %325, %293
  %295 = load ptr, ptr %34, align 8, !tbaa !5
  %296 = load ptr, ptr %35, align 8, !tbaa !5
  %297 = icmp ne ptr %295, %296
  br i1 %297, label %307, label %298

298:                                              ; preds = %294
  store i32 9, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %329

299:                                              ; preds = %287
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %15, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %16, align 4
  br label %328

303:                                              ; preds = %290
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %15, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  br label %328

307:                                              ; preds = %294
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %308 = load ptr, ptr %34, align 8, !tbaa !5
  store ptr %308, ptr %36, align 8, !tbaa !5
  %309 = load float, ptr %18, align 4, !tbaa !9
  %310 = load ptr, ptr %36, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.DrivenDifferential, ptr %310, i32 0, i32 1
  %312 = load float, ptr %311, align 8, !tbaa !38
  %313 = fsub float %309, %312
  %314 = load float, ptr %18, align 4, !tbaa !9
  %315 = load float, ptr %17, align 4, !tbaa !9
  %316 = fsub float %314, %315
  %317 = fdiv float %313, %316
  %318 = load ptr, ptr %36, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.DrivenDifferential, ptr %318, i32 0, i32 3
  store float %317, ptr %319, align 8, !tbaa !41
  %320 = load ptr, ptr %36, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.DrivenDifferential, ptr %320, i32 0, i32 3
  %322 = load float, ptr %321, align 8, !tbaa !41
  %323 = load float, ptr %32, align 4, !tbaa !9
  %324 = fadd float %323, %322
  store float %324, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %325

325:                                              ; preds = %307
  %326 = load ptr, ptr %34, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.DrivenDifferential, ptr %326, i32 1
  store ptr %327, ptr %34, align 8, !tbaa !5
  br label %294

328:                                              ; preds = %303, %299
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %445

329:                                              ; preds = %298
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  store ptr %14, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %330 = load ptr, ptr %37, align 8, !tbaa !5
  %331 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %330)
          to label %332 unwind label %341

332:                                              ; preds = %329
  store ptr %331, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %333 = load ptr, ptr %37, align 8, !tbaa !5
  %334 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %333)
          to label %335 unwind label %345

335:                                              ; preds = %332
  store ptr %334, ptr %39, align 8, !tbaa !5
  br label %336

336:                                              ; preds = %356, %335
  %337 = load ptr, ptr %38, align 8, !tbaa !5
  %338 = load ptr, ptr %39, align 8, !tbaa !5
  %339 = icmp ne ptr %337, %338
  br i1 %339, label %349, label %340

340:                                              ; preds = %336
  store i32 11, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %360

341:                                              ; preds = %329
  %342 = landingpad { ptr, i32 }
          cleanup
  %343 = extractvalue { ptr, i32 } %342, 0
  store ptr %343, ptr %15, align 8
  %344 = extractvalue { ptr, i32 } %342, 1
  store i32 %344, ptr %16, align 4
  br label %359

345:                                              ; preds = %332
  %346 = landingpad { ptr, i32 }
          cleanup
  %347 = extractvalue { ptr, i32 } %346, 0
  store ptr %347, ptr %15, align 8
  %348 = extractvalue { ptr, i32 } %346, 1
  store i32 %348, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %359

349:                                              ; preds = %336
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #9
  %350 = load ptr, ptr %38, align 8, !tbaa !5
  store ptr %350, ptr %40, align 8, !tbaa !5
  %351 = load float, ptr %32, align 4, !tbaa !9
  %352 = load ptr, ptr %40, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.DrivenDifferential, ptr %352, i32 0, i32 3
  %354 = load float, ptr %353, align 8, !tbaa !41
  %355 = fdiv float %354, %351
  store float %355, ptr %353, align 8, !tbaa !41
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #9
  br label %356

356:                                              ; preds = %349
  %357 = load ptr, ptr %38, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.DrivenDifferential, ptr %357, i32 1
  store ptr %358, ptr %38, align 8, !tbaa !5
  br label %336

359:                                              ; preds = %345, %341
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %445

360:                                              ; preds = %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  store float 0x3F50624DE0000000, ptr %41, align 4, !tbaa !9
  %361 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %41, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %362 unwind label %385

362:                                              ; preds = %360
  %363 = load float, ptr %361, align 4, !tbaa !9
  store float %363, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  store float 0x3F50624DE0000000, ptr %42, align 4, !tbaa !9
  %364 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %365 unwind label %389

365:                                              ; preds = %362
  %366 = load float, ptr %364, align 4, !tbaa !9
  store float %366, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  %367 = load float, ptr %18, align 4, !tbaa !9
  %368 = load float, ptr %17, align 4, !tbaa !9
  %369 = fdiv float %367, %368
  %370 = fsub float %369, 1.000000e+00
  %371 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 8
  %372 = load float, ptr %371, align 8, !tbaa !42
  %373 = fsub float %372, 1.000000e+00
  %374 = fdiv float %370, %373
  store float %374, ptr %44, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  store float 1.000000e+00, ptr %45, align 4, !tbaa !9
  %375 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %376 unwind label %393

376:                                              ; preds = %365
  %377 = load float, ptr %375, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  store float %377, ptr %43, align 4, !tbaa !9
  br label %378

378:                                              ; preds = %376
  %379 = load float, ptr %43, align 4, !tbaa !9
  %380 = fcmp oge float %379, 0.000000e+00
  br i1 %380, label %401, label %381

381:                                              ; preds = %378
  %382 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.22, ptr noundef @.str.3, i32 noundef 345)
          to label %383 unwind label %397

383:                                              ; preds = %381
  br i1 %382, label %384, label %401

384:                                              ; preds = %383
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !43
  br label %401

385:                                              ; preds = %360
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %15, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  br label %445

389:                                              ; preds = %362
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %15, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  br label %445

393:                                              ; preds = %365
  %394 = landingpad { ptr, i32 }
          cleanup
  %395 = extractvalue { ptr, i32 } %394, 0
  store ptr %395, ptr %15, align 8
  %396 = extractvalue { ptr, i32 } %394, 1
  store i32 %396, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  br label %444

397:                                              ; preds = %381
  %398 = landingpad { ptr, i32 }
          cleanup
  %399 = extractvalue { ptr, i32 } %398, 0
  store ptr %399, ptr %15, align 8
  %400 = extractvalue { ptr, i32 } %398, 1
  store i32 %400, ptr %16, align 4
  br label %444

401:                                              ; preds = %384, %383, %378
  br label %402

402:                                              ; preds = %401
  br label %403

403:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #9
  %404 = load float, ptr %43, align 4, !tbaa !9
  %405 = fsub float 1.000000e+00, %404
  store float %405, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  store ptr %14, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %406 = load ptr, ptr %48, align 8, !tbaa !5
  %407 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %406)
          to label %408 unwind label %417

408:                                              ; preds = %403
  store ptr %407, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %409 = load ptr, ptr %48, align 8, !tbaa !5
  %410 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %409)
          to label %411 unwind label %421

411:                                              ; preds = %408
  store ptr %410, ptr %50, align 8, !tbaa !5
  br label %412

412:                                              ; preds = %439, %411
  %413 = load ptr, ptr %49, align 8, !tbaa !5
  %414 = load ptr, ptr %50, align 8, !tbaa !5
  %415 = icmp ne ptr %413, %414
  br i1 %415, label %425, label %416

416:                                              ; preds = %412
  store i32 15, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %443

417:                                              ; preds = %403
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %15, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %16, align 4
  br label %442

421:                                              ; preds = %408
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %15, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %442

425:                                              ; preds = %412
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %426 = load ptr, ptr %49, align 8, !tbaa !5
  store ptr %426, ptr %51, align 8, !tbaa !5
  %427 = load float, ptr %47, align 4, !tbaa !9
  %428 = load ptr, ptr %51, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.DrivenDifferential, ptr %428, i32 0, i32 2
  %430 = load float, ptr %429, align 4, !tbaa !40
  %431 = load float, ptr %43, align 4, !tbaa !9
  %432 = load ptr, ptr %51, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.DrivenDifferential, ptr %432, i32 0, i32 3
  %434 = load float, ptr %433, align 8, !tbaa !41
  %435 = fmul float %431, %434
  %436 = call float @llvm.fmuladd.f32(float %427, float %430, float %435)
  %437 = load ptr, ptr %51, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.DrivenDifferential, ptr %437, i32 0, i32 2
  store float %436, ptr %438, align 4, !tbaa !40
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %439

439:                                              ; preds = %425
  %440 = load ptr, ptr %49, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.DrivenDifferential, ptr %440, i32 1
  store ptr %441, ptr %49, align 8, !tbaa !5
  br label %412

442:                                              ; preds = %421, %417
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  br label %444

443:                                              ; preds = %416
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %446

444:                                              ; preds = %442, %397, %393
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  br label %445

445:                                              ; preds = %444, %389, %385, %359, %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %1257

446:                                              ; preds = %443, %283, %279
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  store float 0.000000e+00, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  store ptr %14, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #9
  %447 = load ptr, ptr %53, align 8, !tbaa !5
  %448 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %447)
          to label %449 unwind label %458

449:                                              ; preds = %446
  store ptr %448, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %450 = load ptr, ptr %53, align 8, !tbaa !5
  %451 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %450)
          to label %452 unwind label %462

452:                                              ; preds = %449
  store ptr %451, ptr %55, align 8, !tbaa !5
  br label %453

453:                                              ; preds = %473, %452
  %454 = load ptr, ptr %54, align 8, !tbaa !5
  %455 = load ptr, ptr %55, align 8, !tbaa !5
  %456 = icmp ne ptr %454, %455
  br i1 %456, label %466, label %457

457:                                              ; preds = %453
  store i32 17, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %477

458:                                              ; preds = %446
  %459 = landingpad { ptr, i32 }
          cleanup
  %460 = extractvalue { ptr, i32 } %459, 0
  store ptr %460, ptr %15, align 8
  %461 = extractvalue { ptr, i32 } %459, 1
  store i32 %461, ptr %16, align 4
  br label %476

462:                                              ; preds = %449
  %463 = landingpad { ptr, i32 }
          cleanup
  %464 = extractvalue { ptr, i32 } %463, 0
  store ptr %464, ptr %15, align 8
  %465 = extractvalue { ptr, i32 } %463, 1
  store i32 %465, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %476

466:                                              ; preds = %453
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #9
  %467 = load ptr, ptr %54, align 8, !tbaa !5
  store ptr %467, ptr %56, align 8, !tbaa !5
  %468 = load ptr, ptr %56, align 8, !tbaa !5
  %469 = getelementptr inbounds %struct.DrivenDifferential, ptr %468, i32 0, i32 2
  %470 = load float, ptr %469, align 4, !tbaa !40
  %471 = load float, ptr %52, align 4, !tbaa !9
  %472 = fadd float %471, %470
  store float %472, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #9
  br label %473

473:                                              ; preds = %466
  %474 = load ptr, ptr %54, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.DrivenDifferential, ptr %474, i32 1
  store ptr %475, ptr %54, align 8, !tbaa !5
  br label %453

476:                                              ; preds = %462, %458
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %1256

477:                                              ; preds = %457
  br label %478

478:                                              ; preds = %477
  %479 = load float, ptr %52, align 4, !tbaa !9
  %480 = fsub float %479, 1.000000e+00
  %481 = invoke noundef float @_ZSt3absf(float noundef %480)
          to label %482 unwind label %488

482:                                              ; preds = %478
  %483 = fcmp olt float %481, 0x3EB0C6F7A0000000
  br i1 %483, label %492, label %484

484:                                              ; preds = %482
  %485 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef @.str.23, ptr noundef @.str.3, i32 noundef 358)
          to label %486 unwind label %488

486:                                              ; preds = %484
  br i1 %485, label %487, label %492

487:                                              ; preds = %486
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !44
  br label %492

488:                                              ; preds = %484, %478
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %15, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %16, align 4
  br label %1256

492:                                              ; preds = %487, %486, %482
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 24, ptr %58) #9
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #9
  %495 = load ptr, ptr %8, align 8, !tbaa !5
  %496 = invoke noundef i64 @_ZNK3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %495)
          to label %497 unwind label %513

497:                                              ; preds = %494
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %496)
          to label %498 unwind label %513

498:                                              ; preds = %497
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %499 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %500 = invoke noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100) %499)
          to label %501 unwind label %517

501:                                              ; preds = %498
  store float %500, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  store ptr %14, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %502 = load ptr, ptr %60, align 8, !tbaa !5
  %503 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %502)
          to label %504 unwind label %521

504:                                              ; preds = %501
  store ptr %503, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #9
  %505 = load ptr, ptr %60, align 8, !tbaa !5
  %506 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %505)
          to label %507 unwind label %525

507:                                              ; preds = %504
  store ptr %506, ptr %62, align 8, !tbaa !5
  br label %508

508:                                              ; preds = %663, %507
  %509 = load ptr, ptr %61, align 8, !tbaa !5
  %510 = load ptr, ptr %62, align 8, !tbaa !5
  %511 = icmp ne ptr %509, %510
  br i1 %511, label %529, label %512

512:                                              ; preds = %508
  store i32 21, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  br label %671

513:                                              ; preds = %497, %494
  %514 = landingpad { ptr, i32 }
          cleanup
  %515 = extractvalue { ptr, i32 } %514, 0
  store ptr %515, ptr %15, align 8
  %516 = extractvalue { ptr, i32 } %514, 1
  store i32 %516, ptr %16, align 4
  br label %1255

517:                                              ; preds = %498
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %15, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %16, align 4
  br label %1254

521:                                              ; preds = %501
  %522 = landingpad { ptr, i32 }
          cleanup
  %523 = extractvalue { ptr, i32 } %522, 0
  store ptr %523, ptr %15, align 8
  %524 = extractvalue { ptr, i32 } %522, 1
  store i32 %524, ptr %16, align 4
  br label %670

525:                                              ; preds = %504
  %526 = landingpad { ptr, i32 }
          cleanup
  %527 = extractvalue { ptr, i32 } %526, 0
  store ptr %527, ptr %15, align 8
  %528 = extractvalue { ptr, i32 } %526, 1
  store i32 %528, ptr %16, align 4
  br label %669

529:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #9
  %530 = load ptr, ptr %61, align 8, !tbaa !5
  store ptr %530, ptr %63, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %64) #9
  %531 = load ptr, ptr %63, align 8, !tbaa !5
  %532 = getelementptr inbounds %struct.DrivenDifferential, ptr %531, i32 0, i32 0
  %533 = load ptr, ptr %532, align 8, !tbaa !36
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %64, ptr align 4 %533, i64 24, i1 false), !tbaa.struct !45
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %534 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %64, i32 0, i32 0
  %535 = load i32, ptr %534, align 4, !tbaa !32
  %536 = icmp ne i32 %535, -1
  br i1 %536, label %537, label %545

537:                                              ; preds = %529
  %538 = load ptr, ptr %8, align 8, !tbaa !5
  %539 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %64, i32 0, i32 0
  %540 = load i32, ptr %539, align 4, !tbaa !32
  %541 = sext i32 %540 to i64
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %538, i64 noundef %541)
          to label %543 unwind label %603

543:                                              ; preds = %537
  %544 = load ptr, ptr %542, align 8, !tbaa !5
  br label %546

545:                                              ; preds = %529
  br label %546

546:                                              ; preds = %545, %543
  %547 = phi ptr [ %544, %543 ], [ null, %545 ]
  store ptr %547, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %548 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %64, i32 0, i32 1
  %549 = load i32, ptr %548, align 4, !tbaa !34
  %550 = icmp ne i32 %549, -1
  br i1 %550, label %551, label %559

551:                                              ; preds = %546
  %552 = load ptr, ptr %8, align 8, !tbaa !5
  %553 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %64, i32 0, i32 1
  %554 = load i32, ptr %553, align 4, !tbaa !34
  %555 = sext i32 %554 to i64
  %556 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %552, i64 noundef %555)
          to label %557 unwind label %607

557:                                              ; preds = %551
  %558 = load ptr, ptr %556, align 8, !tbaa !5
  br label %560

559:                                              ; preds = %546
  br label %560

560:                                              ; preds = %559, %557
  %561 = phi ptr [ %558, %557 ], [ null, %559 ]
  store ptr %561, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %562 = load float, ptr %59, align 4, !tbaa !9
  %563 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %64, i32 0, i32 2
  %564 = load float, ptr %563, align 4, !tbaa !35
  %565 = fmul float %562, %564
  store float %565, ptr %67, align 4, !tbaa !9
  %566 = load ptr, ptr %65, align 8, !tbaa !5
  %567 = icmp ne ptr %566, null
  br i1 %567, label %568, label %624

568:                                              ; preds = %560
  %569 = load ptr, ptr %66, align 8, !tbaa !5
  %570 = icmp ne ptr %569, null
  br i1 %570, label %571, label %624

571:                                              ; preds = %568
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %572 = load ptr, ptr %65, align 8, !tbaa !5
  %573 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %572)
          to label %574 unwind label %611

574:                                              ; preds = %571
  %575 = load ptr, ptr %66, align 8, !tbaa !5
  %576 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %575)
          to label %577 unwind label %611

577:                                              ; preds = %574
  invoke void @_ZNK3JPH27VehicleDifferentialSettings20CalculateTorqueRatioEffRfS1_(ptr noundef nonnull align 4 dereferenceable(24) %64, float noundef %573, float noundef %576, ptr noundef nonnull align 4 dereferenceable(4) %68, ptr noundef nonnull align 4 dereferenceable(4) %69)
          to label %578 unwind label %611

578:                                              ; preds = %577
  call void @llvm.lifetime.start.p0(i64 24, ptr %70) #9
  %579 = getelementptr inbounds %struct.DrivenWheel, ptr %70, i32 0, i32 0
  %580 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %580, ptr %579, align 8, !tbaa !46
  %581 = getelementptr inbounds %struct.DrivenWheel, ptr %70, i32 0, i32 1
  %582 = load float, ptr %67, align 4, !tbaa !9
  store float %582, ptr %581, align 8, !tbaa !48
  %583 = getelementptr inbounds %struct.DrivenWheel, ptr %70, i32 0, i32 2
  %584 = load ptr, ptr %63, align 8, !tbaa !5
  %585 = getelementptr inbounds %struct.DrivenDifferential, ptr %584, i32 0, i32 2
  %586 = load float, ptr %585, align 4, !tbaa !40
  %587 = load float, ptr %68, align 4, !tbaa !9
  %588 = fmul float %586, %587
  store float %588, ptr %583, align 4, !tbaa !49
  %589 = getelementptr inbounds %struct.DrivenWheel, ptr %70, i32 0, i32 3
  store float 0.000000e+00, ptr %589, align 8, !tbaa !50
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %70)
          to label %590 unwind label %615

590:                                              ; preds = %578
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %71) #9
  %591 = getelementptr inbounds %struct.DrivenWheel, ptr %71, i32 0, i32 0
  %592 = load ptr, ptr %66, align 8, !tbaa !5
  store ptr %592, ptr %591, align 8, !tbaa !46
  %593 = getelementptr inbounds %struct.DrivenWheel, ptr %71, i32 0, i32 1
  %594 = load float, ptr %67, align 4, !tbaa !9
  store float %594, ptr %593, align 8, !tbaa !48
  %595 = getelementptr inbounds %struct.DrivenWheel, ptr %71, i32 0, i32 2
  %596 = load ptr, ptr %63, align 8, !tbaa !5
  %597 = getelementptr inbounds %struct.DrivenDifferential, ptr %596, i32 0, i32 2
  %598 = load float, ptr %597, align 4, !tbaa !40
  %599 = load float, ptr %69, align 4, !tbaa !9
  %600 = fmul float %598, %599
  store float %600, ptr %595, align 4, !tbaa !49
  %601 = getelementptr inbounds %struct.DrivenWheel, ptr %71, i32 0, i32 3
  store float 0.000000e+00, ptr %601, align 8, !tbaa !50
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %71)
          to label %602 unwind label %619

602:                                              ; preds = %590
  call void @llvm.lifetime.end.p0(i64 24, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  br label %662

603:                                              ; preds = %537
  %604 = landingpad { ptr, i32 }
          cleanup
  %605 = extractvalue { ptr, i32 } %604, 0
  store ptr %605, ptr %15, align 8
  %606 = extractvalue { ptr, i32 } %604, 1
  store i32 %606, ptr %16, align 4
  br label %668

607:                                              ; preds = %551
  %608 = landingpad { ptr, i32 }
          cleanup
  %609 = extractvalue { ptr, i32 } %608, 0
  store ptr %609, ptr %15, align 8
  %610 = extractvalue { ptr, i32 } %608, 1
  store i32 %610, ptr %16, align 4
  br label %667

611:                                              ; preds = %577, %574, %571
  %612 = landingpad { ptr, i32 }
          cleanup
  %613 = extractvalue { ptr, i32 } %612, 0
  store ptr %613, ptr %15, align 8
  %614 = extractvalue { ptr, i32 } %612, 1
  store i32 %614, ptr %16, align 4
  br label %623

615:                                              ; preds = %578
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %15, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %70) #9
  br label %623

619:                                              ; preds = %590
  %620 = landingpad { ptr, i32 }
          cleanup
  %621 = extractvalue { ptr, i32 } %620, 0
  store ptr %621, ptr %15, align 8
  %622 = extractvalue { ptr, i32 } %620, 1
  store i32 %622, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %71) #9
  br label %623

623:                                              ; preds = %619, %615, %611
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  br label %666

624:                                              ; preds = %568, %560
  %625 = load ptr, ptr %65, align 8, !tbaa !5
  %626 = icmp ne ptr %625, null
  br i1 %626, label %627, label %642

627:                                              ; preds = %624
  call void @llvm.lifetime.start.p0(i64 24, ptr %72) #9
  %628 = getelementptr inbounds %struct.DrivenWheel, ptr %72, i32 0, i32 0
  %629 = load ptr, ptr %65, align 8, !tbaa !5
  store ptr %629, ptr %628, align 8, !tbaa !46
  %630 = getelementptr inbounds %struct.DrivenWheel, ptr %72, i32 0, i32 1
  %631 = load float, ptr %67, align 4, !tbaa !9
  store float %631, ptr %630, align 8, !tbaa !48
  %632 = getelementptr inbounds %struct.DrivenWheel, ptr %72, i32 0, i32 2
  %633 = load ptr, ptr %63, align 8, !tbaa !5
  %634 = getelementptr inbounds %struct.DrivenDifferential, ptr %633, i32 0, i32 2
  %635 = load float, ptr %634, align 4, !tbaa !40
  store float %635, ptr %632, align 4, !tbaa !49
  %636 = getelementptr inbounds %struct.DrivenWheel, ptr %72, i32 0, i32 3
  store float 0.000000e+00, ptr %636, align 8, !tbaa !50
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %72)
          to label %637 unwind label %638

637:                                              ; preds = %627
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #9
  br label %661

638:                                              ; preds = %627
  %639 = landingpad { ptr, i32 }
          cleanup
  %640 = extractvalue { ptr, i32 } %639, 0
  store ptr %640, ptr %15, align 8
  %641 = extractvalue { ptr, i32 } %639, 1
  store i32 %641, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %72) #9
  br label %666

642:                                              ; preds = %624
  %643 = load ptr, ptr %66, align 8, !tbaa !5
  %644 = icmp ne ptr %643, null
  br i1 %644, label %645, label %660

645:                                              ; preds = %642
  call void @llvm.lifetime.start.p0(i64 24, ptr %73) #9
  %646 = getelementptr inbounds %struct.DrivenWheel, ptr %73, i32 0, i32 0
  %647 = load ptr, ptr %66, align 8, !tbaa !5
  store ptr %647, ptr %646, align 8, !tbaa !46
  %648 = getelementptr inbounds %struct.DrivenWheel, ptr %73, i32 0, i32 1
  %649 = load float, ptr %67, align 4, !tbaa !9
  store float %649, ptr %648, align 8, !tbaa !48
  %650 = getelementptr inbounds %struct.DrivenWheel, ptr %73, i32 0, i32 2
  %651 = load ptr, ptr %63, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.DrivenDifferential, ptr %651, i32 0, i32 2
  %653 = load float, ptr %652, align 4, !tbaa !40
  store float %653, ptr %650, align 4, !tbaa !49
  %654 = getelementptr inbounds %struct.DrivenWheel, ptr %73, i32 0, i32 3
  store float 0.000000e+00, ptr %654, align 8, !tbaa !50
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %73)
          to label %655 unwind label %656

655:                                              ; preds = %645
  call void @llvm.lifetime.end.p0(i64 24, ptr %73) #9
  br label %660

656:                                              ; preds = %645
  %657 = landingpad { ptr, i32 }
          cleanup
  %658 = extractvalue { ptr, i32 } %657, 0
  store ptr %658, ptr %15, align 8
  %659 = extractvalue { ptr, i32 } %657, 1
  store i32 %659, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %73) #9
  br label %666

660:                                              ; preds = %655, %642
  br label %661

661:                                              ; preds = %660, %637
  br label %662

662:                                              ; preds = %661, %602
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %663

663:                                              ; preds = %662
  %664 = load ptr, ptr %61, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.DrivenDifferential, ptr %664, i32 1
  store ptr %665, ptr %61, align 8, !tbaa !5
  br label %508

666:                                              ; preds = %656, %638, %623
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  br label %667

667:                                              ; preds = %666, %607
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  br label %668

668:                                              ; preds = %667, %603
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #9
  br label %669

669:                                              ; preds = %668, %525
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #9
  br label %670

670:                                              ; preds = %669, %521
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  br label %1254

671:                                              ; preds = %512
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #9
  store i8 0, ptr %74, align 1, !tbaa !51
  %672 = invoke noundef zeroext i1 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %673 unwind label %728

673:                                              ; preds = %671
  br i1 %672, label %1052, label %674

674:                                              ; preds = %673
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  %675 = invoke noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %676 unwind label %732

676:                                              ; preds = %674
  %677 = trunc i64 %675 to i32
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %75, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #9
  %679 = load i32, ptr %75, align 4, !tbaa !13
  %680 = sub nsw i32 %679, 1
  store i32 %680, ptr %76, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #9
  %681 = load i32, ptr %75, align 4, !tbaa !13
  %682 = load i32, ptr %75, align 4, !tbaa !13
  invoke void @_ZN3JPH9DynMatrixC2Ejj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %681, i32 noundef %682)
          to label %683 unwind label %736

683:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #9
  %684 = load i32, ptr %75, align 4, !tbaa !13
  invoke void @_ZN3JPH9DynMatrixC2Ejj(ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %684, i32 noundef 1)
          to label %685 unwind label %740

685:                                              ; preds = %683
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %686 = invoke noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %687 unwind label %744

687:                                              ; preds = %685
  %688 = uitofp i64 %686 to float
  store float %688, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %689 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %690 = invoke noundef float @_ZNK3JPH13VehicleEngine18GetAngularVelocityEv(ptr noundef nonnull align 8 dereferenceable(52) %689)
          to label %691 unwind label %748

691:                                              ; preds = %687
  store float %690, ptr %80, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #9
  %692 = load float, ptr %59, align 4, !tbaa !9
  %693 = fcmp une float %692, 0.000000e+00
  br i1 %693, label %694, label %702

694:                                              ; preds = %691
  %695 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %696 = invoke noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100) %695)
          to label %697 unwind label %752

697:                                              ; preds = %694
  %698 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %699 = getelementptr inbounds %"class.JPH::VehicleTransmissionSettings", ptr %698, i32 0, i32 8
  %700 = load float, ptr %699, align 4, !tbaa !53
  %701 = fmul float %696, %700
  br label %703

702:                                              ; preds = %691
  br label %703

703:                                              ; preds = %702, %697
  %704 = phi float [ %701, %697 ], [ 0.000000e+00, %702 ]
  store float %704, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %705 = load float, ptr %5, align 4, !tbaa !9
  %706 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %707 = getelementptr inbounds %"class.JPH::VehicleEngineSettings", ptr %706, i32 0, i32 4
  %708 = load float, ptr %707, align 8, !tbaa !54
  %709 = fdiv float %705, %708
  store float %709, ptr %82, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #9
  %710 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 9
  %711 = load float, ptr %710, align 4, !tbaa !55
  %712 = fcmp ogt float %711, 0.000000e+00
  br i1 %712, label %713, label %718

713:                                              ; preds = %703
  %714 = load float, ptr %5, align 4, !tbaa !9
  %715 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 9
  %716 = load float, ptr %715, align 4, !tbaa !55
  %717 = fdiv float %714, %716
  br label %719

718:                                              ; preds = %703
  br label %719

719:                                              ; preds = %718, %713
  %720 = phi float [ %717, %713 ], [ 0.000000e+00, %718 ]
  store float %720, ptr %83, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #9
  store i32 0, ptr %84, align 4, !tbaa !13
  br label %721

721:                                              ; preds = %941, %719
  %722 = load i32, ptr %84, align 4, !tbaa !13
  %723 = invoke noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %724 unwind label %756

724:                                              ; preds = %721
  %725 = trunc i64 %723 to i32
  %726 = icmp slt i32 %722, %725
  br i1 %726, label %760, label %727

727:                                              ; preds = %724
  store i32 23, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %949

728:                                              ; preds = %1055, %671
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %15, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %16, align 4
  br label %1253

732:                                              ; preds = %674
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %15, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %16, align 4
  br label %1051

736:                                              ; preds = %676
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %15, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %16, align 4
  br label %1050

740:                                              ; preds = %683
  %741 = landingpad { ptr, i32 }
          cleanup
  %742 = extractvalue { ptr, i32 } %741, 0
  store ptr %742, ptr %15, align 8
  %743 = extractvalue { ptr, i32 } %741, 1
  store i32 %743, ptr %16, align 4
  br label %1049

744:                                              ; preds = %685
  %745 = landingpad { ptr, i32 }
          cleanup
  %746 = extractvalue { ptr, i32 } %745, 0
  store ptr %746, ptr %15, align 8
  %747 = extractvalue { ptr, i32 } %745, 1
  store i32 %747, ptr %16, align 4
  br label %1048

748:                                              ; preds = %687
  %749 = landingpad { ptr, i32 }
          cleanup
  %750 = extractvalue { ptr, i32 } %749, 0
  store ptr %750, ptr %15, align 8
  %751 = extractvalue { ptr, i32 } %749, 1
  store i32 %751, ptr %16, align 4
  br label %1047

752:                                              ; preds = %694
  %753 = landingpad { ptr, i32 }
          cleanup
  %754 = extractvalue { ptr, i32 } %753, 0
  store ptr %754, ptr %15, align 8
  %755 = extractvalue { ptr, i32 } %753, 1
  store i32 %755, ptr %16, align 4
  br label %1046

756:                                              ; preds = %721
  %757 = landingpad { ptr, i32 }
          cleanup
  %758 = extractvalue { ptr, i32 } %757, 0
  store ptr %758, ptr %15, align 8
  %759 = extractvalue { ptr, i32 } %757, 1
  store i32 %759, ptr %16, align 4
  br label %948

760:                                              ; preds = %724
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %761 = load i32, ptr %84, align 4, !tbaa !13
  %762 = sext i32 %761 to i64
  %763 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %762)
          to label %764 unwind label %794

764:                                              ; preds = %760
  store ptr %763, ptr %85, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #9
  %765 = load ptr, ptr %85, align 8, !tbaa !5
  %766 = getelementptr inbounds %struct.DrivenWheel, ptr %765, i32 0, i32 0
  %767 = load ptr, ptr %766, align 8, !tbaa !46
  %768 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %767)
          to label %769 unwind label %798

769:                                              ; preds = %764
  store ptr %768, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #9
  %770 = load ptr, ptr %86, align 8, !tbaa !5
  %771 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %770, i32 0, i32 1
  %772 = load float, ptr %771, align 4, !tbaa !56
  store float %772, ptr %87, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #9
  %773 = load float, ptr %81, align 4, !tbaa !9
  %774 = load ptr, ptr %85, align 8, !tbaa !5
  %775 = getelementptr inbounds %struct.DrivenWheel, ptr %774, i32 0, i32 1
  %776 = load float, ptr %775, align 8, !tbaa !48
  %777 = fmul float %773, %776
  store float %777, ptr %88, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #9
  %778 = load float, ptr %5, align 4, !tbaa !9
  %779 = load float, ptr %88, align 4, !tbaa !9
  %780 = fmul float %778, %779
  %781 = load ptr, ptr %85, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.DrivenWheel, ptr %781, i32 0, i32 2
  %783 = load float, ptr %782, align 4, !tbaa !49
  %784 = fmul float %780, %783
  %785 = load float, ptr %87, align 4, !tbaa !9
  %786 = fdiv float %784, %785
  store float %786, ptr %89, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  store i32 0, ptr %90, align 4, !tbaa !13
  br label %787

787:                                              ; preds = %822, %769
  %788 = load i32, ptr %90, align 4, !tbaa !13
  %789 = invoke noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %790 unwind label %802

790:                                              ; preds = %787
  %791 = trunc i64 %789 to i32
  %792 = icmp slt i32 %788, %791
  br i1 %792, label %806, label %793

793:                                              ; preds = %790
  store i32 26, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %830

794:                                              ; preds = %760
  %795 = landingpad { ptr, i32 }
          cleanup
  %796 = extractvalue { ptr, i32 } %795, 0
  store ptr %796, ptr %15, align 8
  %797 = extractvalue { ptr, i32 } %795, 1
  store i32 %797, ptr %16, align 4
  br label %947

798:                                              ; preds = %764
  %799 = landingpad { ptr, i32 }
          cleanup
  %800 = extractvalue { ptr, i32 } %799, 0
  store ptr %800, ptr %15, align 8
  %801 = extractvalue { ptr, i32 } %799, 1
  store i32 %801, ptr %16, align 4
  br label %946

802:                                              ; preds = %787
  %803 = landingpad { ptr, i32 }
          cleanup
  %804 = extractvalue { ptr, i32 } %803, 0
  store ptr %804, ptr %15, align 8
  %805 = extractvalue { ptr, i32 } %803, 1
  store i32 %805, ptr %16, align 4
  br label %829

806:                                              ; preds = %790
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #9
  %807 = load i32, ptr %90, align 4, !tbaa !13
  %808 = sext i32 %807 to i64
  %809 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %808)
          to label %810 unwind label %825

810:                                              ; preds = %806
  store ptr %809, ptr %91, align 8, !tbaa !5
  %811 = load float, ptr %89, align 4, !tbaa !9
  %812 = load ptr, ptr %91, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.DrivenWheel, ptr %812, i32 0, i32 1
  %814 = load float, ptr %813, align 8, !tbaa !48
  %815 = fmul float %811, %814
  %816 = load float, ptr %79, align 4, !tbaa !9
  %817 = fdiv float %815, %816
  %818 = load i32, ptr %84, align 4, !tbaa !13
  %819 = load i32, ptr %90, align 4, !tbaa !13
  %820 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %818, i32 noundef %819)
          to label %821 unwind label %825

821:                                              ; preds = %810
  store float %817, ptr %820, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  br label %822

822:                                              ; preds = %821
  %823 = load i32, ptr %90, align 4, !tbaa !13
  %824 = add nsw i32 %823, 1
  store i32 %824, ptr %90, align 4, !tbaa !13
  br label %787, !llvm.loop !66

825:                                              ; preds = %810, %806
  %826 = landingpad { ptr, i32 }
          cleanup
  %827 = extractvalue { ptr, i32 } %826, 0
  store ptr %827, ptr %15, align 8
  %828 = extractvalue { ptr, i32 } %826, 1
  store i32 %828, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #9
  br label %829

829:                                              ; preds = %825, %802
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  br label %945

830:                                              ; preds = %793
  %831 = load i32, ptr %84, align 4, !tbaa !13
  %832 = load i32, ptr %84, align 4, !tbaa !13
  %833 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %831, i32 noundef %832)
          to label %834 unwind label %872

834:                                              ; preds = %830
  %835 = load float, ptr %833, align 4, !tbaa !9
  %836 = fadd float %835, 1.000000e+00
  store float %836, ptr %833, align 4, !tbaa !9
  %837 = load float, ptr %89, align 4, !tbaa !9
  %838 = fneg float %837
  %839 = load i32, ptr %84, align 4, !tbaa !13
  %840 = load i32, ptr %76, align 4, !tbaa !13
  %841 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %839, i32 noundef %840)
          to label %842 unwind label %872

842:                                              ; preds = %834
  store float %838, ptr %841, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #9
  store float 0.000000e+00, ptr %92, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #9
  %843 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 3
  %844 = load float, ptr %843, align 8, !tbaa !67
  %845 = load ptr, ptr %86, align 8, !tbaa !5
  %846 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %845, i32 0, i32 6
  %847 = load float, ptr %846, align 16, !tbaa !68
  %848 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 4
  %849 = load float, ptr %848, align 4, !tbaa !69
  %850 = load ptr, ptr %86, align 8, !tbaa !5
  %851 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %850, i32 0, i32 7
  %852 = load float, ptr %851, align 4, !tbaa !70
  %853 = fmul float %849, %852
  %854 = call float @llvm.fmuladd.f32(float %844, float %847, float %853)
  store float %854, ptr %93, align 4, !tbaa !9
  %855 = load float, ptr %93, align 4, !tbaa !9
  %856 = fcmp ogt float %855, 0.000000e+00
  br i1 %856, label %857, label %892

857:                                              ; preds = %842
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #9
  %858 = load ptr, ptr %85, align 8, !tbaa !5
  %859 = getelementptr inbounds %struct.DrivenWheel, ptr %858, i32 0, i32 0
  %860 = load ptr, ptr %859, align 8, !tbaa !46
  %861 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %860)
          to label %862 unwind label %876

862:                                              ; preds = %857
  %863 = fcmp une float %861, 0.000000e+00
  br i1 %863, label %864, label %880

864:                                              ; preds = %862
  %865 = load ptr, ptr %85, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.DrivenWheel, ptr %865, i32 0, i32 0
  %867 = load ptr, ptr %866, align 8, !tbaa !46
  %868 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %867)
          to label %869 unwind label %876

869:                                              ; preds = %864
  %870 = invoke noundef float @_ZN3JPH4SignIfEET_S1_(float noundef %868)
          to label %871 unwind label %876

871:                                              ; preds = %869
  store float %870, ptr %94, align 4, !tbaa !9
  br label %886

872:                                              ; preds = %834, %830
  %873 = landingpad { ptr, i32 }
          cleanup
  %874 = extractvalue { ptr, i32 } %873, 0
  store ptr %874, ptr %15, align 8
  %875 = extractvalue { ptr, i32 } %873, 1
  store i32 %875, ptr %16, align 4
  br label %945

876:                                              ; preds = %883, %880, %869, %864, %857
  %877 = landingpad { ptr, i32 }
          cleanup
  %878 = extractvalue { ptr, i32 } %877, 0
  store ptr %878, ptr %15, align 8
  %879 = extractvalue { ptr, i32 } %877, 1
  store i32 %879, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  br label %944

880:                                              ; preds = %862
  %881 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %882 = invoke noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100) %881)
          to label %883 unwind label %876

883:                                              ; preds = %880
  %884 = invoke noundef float @_ZN3JPH4SignIfEET_S1_(float noundef %882)
          to label %885 unwind label %876

885:                                              ; preds = %883
  store float %884, ptr %94, align 4, !tbaa !9
  br label %886

886:                                              ; preds = %885, %871
  %887 = load float, ptr %94, align 4, !tbaa !9
  %888 = load float, ptr %5, align 4, !tbaa !9
  %889 = fmul float %887, %888
  %890 = load float, ptr %93, align 4, !tbaa !9
  %891 = fmul float %889, %890
  store float %891, ptr %92, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #9
  br label %892

892:                                              ; preds = %886, %842
  %893 = load ptr, ptr %85, align 8, !tbaa !5
  %894 = getelementptr inbounds %struct.DrivenWheel, ptr %893, i32 0, i32 0
  %895 = load ptr, ptr %894, align 8, !tbaa !46
  %896 = invoke noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404) %895)
          to label %897 unwind label %911

897:                                              ; preds = %892
  br i1 %896, label %898, label %915

898:                                              ; preds = %897
  %899 = load float, ptr %83, align 4, !tbaa !9
  %900 = load ptr, ptr %85, align 8, !tbaa !5
  %901 = getelementptr inbounds %struct.DrivenWheel, ptr %900, i32 0, i32 0
  %902 = load ptr, ptr %901, align 8, !tbaa !46
  %903 = invoke noundef float @_ZNK3JPH5Wheel21GetLongitudinalLambdaEv(ptr noundef nonnull align 16 dereferenceable(404) %902)
          to label %904 unwind label %911

904:                                              ; preds = %898
  %905 = fmul float %899, %903
  %906 = load ptr, ptr %86, align 8, !tbaa !5
  %907 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %906, i32 0, i32 13
  %908 = load float, ptr %907, align 8, !tbaa !71
  %909 = load float, ptr %92, align 4, !tbaa !9
  %910 = call float @llvm.fmuladd.f32(float %905, float %908, float %909)
  store float %910, ptr %92, align 4, !tbaa !9
  br label %915

911:                                              ; preds = %930, %923, %915, %898, %892
  %912 = landingpad { ptr, i32 }
          cleanup
  %913 = extractvalue { ptr, i32 } %912, 0
  store ptr %913, ptr %15, align 8
  %914 = extractvalue { ptr, i32 } %912, 1
  store i32 %914, ptr %16, align 4
  br label %944

915:                                              ; preds = %904, %897
  %916 = load float, ptr %92, align 4, !tbaa !9
  %917 = load ptr, ptr %85, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.DrivenWheel, ptr %917, i32 0, i32 3
  store float %916, ptr %918, align 8, !tbaa !50
  %919 = load ptr, ptr %85, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.DrivenWheel, ptr %919, i32 0, i32 0
  %921 = load ptr, ptr %920, align 8, !tbaa !46
  %922 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %921)
          to label %923 unwind label %911

923:                                              ; preds = %915
  %924 = load float, ptr %92, align 4, !tbaa !9
  %925 = load float, ptr %87, align 4, !tbaa !9
  %926 = fdiv float %924, %925
  %927 = fsub float %922, %926
  %928 = load i32, ptr %84, align 4, !tbaa !13
  %929 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %928, i32 noundef 0)
          to label %930 unwind label %911

930:                                              ; preds = %923
  store float %927, ptr %929, align 4, !tbaa !9
  %931 = load float, ptr %82, align 4, !tbaa !9
  %932 = fneg float %931
  %933 = load float, ptr %88, align 4, !tbaa !9
  %934 = fmul float %932, %933
  %935 = load float, ptr %79, align 4, !tbaa !9
  %936 = fdiv float %934, %935
  %937 = load i32, ptr %76, align 4, !tbaa !13
  %938 = load i32, ptr %84, align 4, !tbaa !13
  %939 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %937, i32 noundef %938)
          to label %940 unwind label %911

940:                                              ; preds = %930
  store float %936, ptr %939, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  br label %941

941:                                              ; preds = %940
  %942 = load i32, ptr %84, align 4, !tbaa !13
  %943 = add nsw i32 %942, 1
  store i32 %943, ptr %84, align 4, !tbaa !13
  br label %721, !llvm.loop !72

944:                                              ; preds = %911, %876
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #9
  br label %945

945:                                              ; preds = %944, %872, %829
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #9
  br label %946

946:                                              ; preds = %945, %798
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #9
  br label %947

947:                                              ; preds = %946, %794
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  br label %948

948:                                              ; preds = %947, %756
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %1045

949:                                              ; preds = %727
  %950 = load float, ptr %82, align 4, !tbaa !9
  %951 = load float, ptr %81, align 4, !tbaa !9
  %952 = call float @llvm.fmuladd.f32(float %950, float %951, float 1.000000e+00)
  %953 = load i32, ptr %76, align 4, !tbaa !13
  %954 = load i32, ptr %76, align 4, !tbaa !13
  %955 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %77, i32 noundef %953, i32 noundef %954)
          to label %956 unwind label %974

956:                                              ; preds = %949
  store float %952, ptr %955, align 4, !tbaa !9
  %957 = load float, ptr %80, align 4, !tbaa !9
  %958 = load float, ptr %82, align 4, !tbaa !9
  %959 = load float, ptr %13, align 4, !tbaa !9
  %960 = call float @llvm.fmuladd.f32(float %958, float %959, float %957)
  %961 = load i32, ptr %76, align 4, !tbaa !13
  %962 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %961, i32 noundef 0)
          to label %963 unwind label %974

963:                                              ; preds = %956
  store float %960, ptr %962, align 4, !tbaa !9
  %964 = invoke noundef zeroext i1 @_ZN3JPH19GaussianEliminationINS_9DynMatrixES1_EEbRT_RT0_f(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef nonnull align 8 dereferenceable(32) %78, float noundef 0x3C9CD2B2A0000000)
          to label %965 unwind label %974

965:                                              ; preds = %963
  br i1 %964, label %966, label %1036

966:                                              ; preds = %965
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #9
  store i32 0, ptr %95, align 4, !tbaa !13
  br label %967

967:                                              ; preds = %1010, %966
  %968 = load i32, ptr %95, align 4, !tbaa !13
  %969 = invoke noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %970 unwind label %978

970:                                              ; preds = %967
  %971 = trunc i64 %969 to i32
  %972 = icmp slt i32 %968, %971
  br i1 %972, label %982, label %973

973:                                              ; preds = %970
  store i32 29, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1028

974:                                              ; preds = %1037, %1032, %1028, %963, %956, %949
  %975 = landingpad { ptr, i32 }
          cleanup
  %976 = extractvalue { ptr, i32 } %975, 0
  store ptr %976, ptr %15, align 8
  %977 = extractvalue { ptr, i32 } %975, 1
  store i32 %977, ptr %16, align 4
  br label %1045

978:                                              ; preds = %967
  %979 = landingpad { ptr, i32 }
          cleanup
  %980 = extractvalue { ptr, i32 } %979, 0
  store ptr %980, ptr %15, align 8
  %981 = extractvalue { ptr, i32 } %979, 1
  store i32 %981, ptr %16, align 4
  br label %1027

982:                                              ; preds = %970
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #9
  %983 = load i32, ptr %95, align 4, !tbaa !13
  %984 = sext i32 %983 to i64
  %985 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %58, i64 noundef %984)
          to label %986 unwind label %1013

986:                                              ; preds = %982
  store ptr %985, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %987 = load ptr, ptr %96, align 8, !tbaa !5
  %988 = getelementptr inbounds %struct.DrivenWheel, ptr %987, i32 0, i32 0
  %989 = load ptr, ptr %988, align 8, !tbaa !46
  %990 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %989)
          to label %991 unwind label %1017

991:                                              ; preds = %986
  store ptr %990, ptr %97, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #9
  %992 = load i32, ptr %95, align 4, !tbaa !13
  %993 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %992, i32 noundef 0)
          to label %994 unwind label %1021

994:                                              ; preds = %991
  %995 = load float, ptr %993, align 4, !tbaa !9
  store float %995, ptr %98, align 4, !tbaa !9
  %996 = load ptr, ptr %96, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.DrivenWheel, ptr %996, i32 0, i32 3
  %998 = load float, ptr %997, align 8, !tbaa !50
  %999 = load ptr, ptr %97, align 8, !tbaa !5
  %1000 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %999, i32 0, i32 1
  %1001 = load float, ptr %1000, align 4, !tbaa !56
  %1002 = fdiv float %998, %1001
  %1003 = load float, ptr %98, align 4, !tbaa !9
  %1004 = fadd float %1003, %1002
  store float %1004, ptr %98, align 4, !tbaa !9
  %1005 = load ptr, ptr %96, align 8, !tbaa !5
  %1006 = getelementptr inbounds %struct.DrivenWheel, ptr %1005, i32 0, i32 0
  %1007 = load ptr, ptr %1006, align 8, !tbaa !46
  %1008 = load float, ptr %98, align 4, !tbaa !9
  invoke void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404) %1007, float noundef %1008)
          to label %1009 unwind label %1021

1009:                                             ; preds = %994
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %1010

1010:                                             ; preds = %1009
  %1011 = load i32, ptr %95, align 4, !tbaa !13
  %1012 = add nsw i32 %1011, 1
  store i32 %1012, ptr %95, align 4, !tbaa !13
  br label %967, !llvm.loop !73

1013:                                             ; preds = %982
  %1014 = landingpad { ptr, i32 }
          cleanup
  %1015 = extractvalue { ptr, i32 } %1014, 0
  store ptr %1015, ptr %15, align 8
  %1016 = extractvalue { ptr, i32 } %1014, 1
  store i32 %1016, ptr %16, align 4
  br label %1026

1017:                                             ; preds = %986
  %1018 = landingpad { ptr, i32 }
          cleanup
  %1019 = extractvalue { ptr, i32 } %1018, 0
  store ptr %1019, ptr %15, align 8
  %1020 = extractvalue { ptr, i32 } %1018, 1
  store i32 %1020, ptr %16, align 4
  br label %1025

1021:                                             ; preds = %994, %991
  %1022 = landingpad { ptr, i32 }
          cleanup
  %1023 = extractvalue { ptr, i32 } %1022, 0
  store ptr %1023, ptr %15, align 8
  %1024 = extractvalue { ptr, i32 } %1022, 1
  store i32 %1024, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #9
  br label %1025

1025:                                             ; preds = %1021, %1017
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %1026

1026:                                             ; preds = %1025, %1013
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %1027

1027:                                             ; preds = %1026, %978
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #9
  br label %1045

1028:                                             ; preds = %973
  %1029 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %1030 = load i32, ptr %76, align 4, !tbaa !13
  %1031 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %78, i32 noundef %1030, i32 noundef 0)
          to label %1032 unwind label %974

1032:                                             ; preds = %1028
  %1033 = load float, ptr %1031, align 4, !tbaa !9
  %1034 = fmul float %1033, 0x4023193D60000000
  invoke void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52) %1029, float noundef %1034)
          to label %1035 unwind label %974

1035:                                             ; preds = %1032
  store i8 1, ptr %74, align 1, !tbaa !51
  br label %1044

1036:                                             ; preds = %965
  br label %1037

1037:                                             ; preds = %1036
  %1038 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef @.str.24, ptr noundef @.str.3, i32 noundef 593, ptr noundef @.str.25)
          to label %1039 unwind label %974

1039:                                             ; preds = %1037
  br i1 %1038, label %1040, label %1041

1040:                                             ; preds = %1039
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #9, !srcloc !74
  br label %1041

1041:                                             ; preds = %1040, %1039
  br label %1042

1042:                                             ; preds = %1041
  br label %1043

1043:                                             ; preds = %1042
  br label %1044

1044:                                             ; preds = %1043, %1035
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #9
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1052

1045:                                             ; preds = %1027, %974, %948
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  br label %1046

1046:                                             ; preds = %1045, %752
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #9
  br label %1047

1047:                                             ; preds = %1046, %748
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %1048

1048:                                             ; preds = %1047, %744
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  br label %1049

1049:                                             ; preds = %1048, %740
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #9
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #9
  br label %1050

1050:                                             ; preds = %1049, %736
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #9
  br label %1051

1051:                                             ; preds = %1050, %732
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1253

1052:                                             ; preds = %1044, %673
  %1053 = load i8, ptr %74, align 1, !tbaa !51, !range !75, !noundef !76
  %1054 = trunc i8 %1053 to i1
  br i1 %1054, label %1060, label %1055

1055:                                             ; preds = %1052
  %1056 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %1057 = load float, ptr %13, align 4, !tbaa !9
  %1058 = load float, ptr %5, align 4, !tbaa !9
  invoke void @_ZN3JPH13VehicleEngine11ApplyTorqueEff(ptr noundef nonnull align 8 dereferenceable(52) %1056, float noundef %1057, float noundef %1058)
          to label %1059 unwind label %728

1059:                                             ; preds = %1055
  br label %1060

1060:                                             ; preds = %1059, %1052
  call void @llvm.lifetime.start.p0(i64 1, ptr %100) #9
  store i8 0, ptr %100, align 1, !tbaa !51
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  store ptr %58, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #9
  %1061 = load ptr, ptr %101, align 8, !tbaa !5
  %1062 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1061)
          to label %1063 unwind label %1072

1063:                                             ; preds = %1060
  store ptr %1062, ptr %102, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #9
  %1064 = load ptr, ptr %101, align 8, !tbaa !5
  %1065 = invoke noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1064)
          to label %1066 unwind label %1076

1066:                                             ; preds = %1063
  store ptr %1065, ptr %103, align 8, !tbaa !5
  br label %1067

1067:                                             ; preds = %1110, %1066
  %1068 = load ptr, ptr %102, align 8, !tbaa !5
  %1069 = load ptr, ptr %103, align 8, !tbaa !5
  %1070 = icmp ne ptr %1068, %1069
  br i1 %1070, label %1080, label %1071

1071:                                             ; preds = %1067
  store i32 34, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1119

1072:                                             ; preds = %1060
  %1073 = landingpad { ptr, i32 }
          cleanup
  %1074 = extractvalue { ptr, i32 } %1073, 0
  store ptr %1074, ptr %15, align 8
  %1075 = extractvalue { ptr, i32 } %1073, 1
  store i32 %1075, ptr %16, align 4
  br label %1118

1076:                                             ; preds = %1063
  %1077 = landingpad { ptr, i32 }
          cleanup
  %1078 = extractvalue { ptr, i32 } %1077, 0
  store ptr %1078, ptr %15, align 8
  %1079 = extractvalue { ptr, i32 } %1077, 1
  store i32 %1079, ptr %16, align 4
  br label %1117

1080:                                             ; preds = %1067
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #9
  %1081 = load ptr, ptr %102, align 8, !tbaa !5
  store ptr %1081, ptr %104, align 8, !tbaa !5
  %1082 = load ptr, ptr %104, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.DrivenWheel, ptr %1082, i32 0, i32 2
  %1084 = load float, ptr %1083, align 4, !tbaa !49
  %1085 = fcmp ogt float %1084, 0.000000e+00
  br i1 %1085, label %1086, label %1101

1086:                                             ; preds = %1080
  %1087 = load ptr, ptr %104, align 8, !tbaa !5
  %1088 = getelementptr inbounds %struct.DrivenWheel, ptr %1087, i32 0, i32 0
  %1089 = load ptr, ptr %1088, align 8, !tbaa !46
  %1090 = invoke noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404) %1089)
          to label %1091 unwind label %1113

1091:                                             ; preds = %1086
  br i1 %1090, label %1092, label %1099

1092:                                             ; preds = %1091
  %1093 = load ptr, ptr %104, align 8, !tbaa !5
  %1094 = getelementptr inbounds %struct.DrivenWheel, ptr %1093, i32 0, i32 0
  %1095 = load ptr, ptr %1094, align 8, !tbaa !46
  %1096 = getelementptr inbounds %"class.JPH::WheelWV", ptr %1095, i32 0, i32 1
  %1097 = load float, ptr %1096, align 4, !tbaa !77
  %1098 = fcmp ogt float %1097, 0x3FB99999A0000000
  br label %1099

1099:                                             ; preds = %1092, %1091
  %1100 = phi i1 [ true, %1091 ], [ %1098, %1092 ]
  br label %1101

1101:                                             ; preds = %1099, %1080
  %1102 = phi i1 [ false, %1080 ], [ %1100, %1099 ]
  %1103 = zext i1 %1102 to i32
  %1104 = load i8, ptr %100, align 1, !tbaa !51, !range !75, !noundef !76
  %1105 = trunc i8 %1104 to i1
  %1106 = zext i1 %1105 to i32
  %1107 = or i32 %1106, %1103
  %1108 = icmp ne i32 %1107, 0
  %1109 = zext i1 %1108 to i8
  store i8 %1109, ptr %100, align 1, !tbaa !51
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  br label %1110

1110:                                             ; preds = %1101
  %1111 = load ptr, ptr %102, align 8, !tbaa !5
  %1112 = getelementptr inbounds %struct.DrivenWheel, ptr %1111, i32 1
  store ptr %1112, ptr %102, align 8, !tbaa !5
  br label %1067

1113:                                             ; preds = %1086
  %1114 = landingpad { ptr, i32 }
          cleanup
  %1115 = extractvalue { ptr, i32 } %1114, 0
  store ptr %1115, ptr %15, align 8
  %1116 = extractvalue { ptr, i32 } %1114, 1
  store i32 %1116, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  br label %1117

1117:                                             ; preds = %1113, %1076
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  br label %1118

1118:                                             ; preds = %1117, %1072
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1252

1119:                                             ; preds = %1071
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #9
  %1120 = load i8, ptr %100, align 1, !tbaa !51, !range !75, !noundef !76
  %1121 = trunc i8 %1120 to i1
  br i1 %1121, label %1128, label %1122

1122:                                             ; preds = %1119
  %1123 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %1124 = invoke noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %1123)
          to label %1125 unwind label %1153

1125:                                             ; preds = %1122
  %1126 = load float, ptr %7, align 4, !tbaa !9
  %1127 = fcmp oge float %1124, %1126
  br label %1128

1128:                                             ; preds = %1125, %1119
  %1129 = phi i1 [ false, %1119 ], [ %1127, %1125 ]
  %1130 = zext i1 %1129 to i8
  store i8 %1130, ptr %105, align 1, !tbaa !51
  %1131 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 6
  %1132 = load float, ptr %5, align 4, !tbaa !9
  %1133 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 5
  %1134 = invoke noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %1133)
          to label %1135 unwind label %1153

1135:                                             ; preds = %1128
  %1136 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 1
  %1137 = load float, ptr %1136, align 8, !tbaa !17
  %1138 = load i8, ptr %105, align 1, !tbaa !51, !range !75, !noundef !76
  %1139 = trunc i8 %1138 to i1
  invoke void @_ZN3JPH19VehicleTransmission6UpdateEfffb(ptr noundef nonnull align 8 dereferenceable(100) %1131, float noundef %1132, float noundef %1134, float noundef %1137, i1 noundef zeroext %1139)
          to label %1140 unwind label %1153

1140:                                             ; preds = %1135
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #9
  %1141 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %1141, ptr %106, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %1142 = load ptr, ptr %106, align 8, !tbaa !5
  %1143 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1142)
          to label %1144 unwind label %1157

1144:                                             ; preds = %1140
  store ptr %1143, ptr %107, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %1145 = load ptr, ptr %106, align 8, !tbaa !5
  %1146 = invoke noundef ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1145)
          to label %1147 unwind label %1161

1147:                                             ; preds = %1144
  store ptr %1146, ptr %108, align 8, !tbaa !5
  br label %1148

1148:                                             ; preds = %1242, %1147
  %1149 = load ptr, ptr %107, align 8, !tbaa !5
  %1150 = load ptr, ptr %108, align 8, !tbaa !5
  %1151 = icmp ne ptr %1149, %1150
  br i1 %1151, label %1165, label %1152

1152:                                             ; preds = %1148
  store i32 36, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  br label %1248

1153:                                             ; preds = %1135, %1128, %1122
  %1154 = landingpad { ptr, i32 }
          cleanup
  %1155 = extractvalue { ptr, i32 } %1154, 0
  store ptr %1155, ptr %15, align 8
  %1156 = extractvalue { ptr, i32 } %1154, 1
  store i32 %1156, ptr %16, align 4
  br label %1251

1157:                                             ; preds = %1140
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %15, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %16, align 4
  br label %1247

1161:                                             ; preds = %1144
  %1162 = landingpad { ptr, i32 }
          cleanup
  %1163 = extractvalue { ptr, i32 } %1162, 0
  store ptr %1163, ptr %15, align 8
  %1164 = extractvalue { ptr, i32 } %1162, 1
  store i32 %1164, ptr %16, align 4
  br label %1246

1165:                                             ; preds = %1148
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #9
  %1166 = load ptr, ptr %107, align 8, !tbaa !5
  %1167 = load ptr, ptr %1166, align 8, !tbaa !5
  store ptr %1167, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #9
  %1168 = load ptr, ptr %109, align 8, !tbaa !5
  store ptr %1168, ptr %110, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %1169 = load ptr, ptr %110, align 8, !tbaa !5
  %1170 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %1169)
          to label %1171 unwind label %1215

1171:                                             ; preds = %1165
  store ptr %1170, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #9
  %1172 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 3
  %1173 = load float, ptr %1172, align 8, !tbaa !67
  %1174 = load ptr, ptr %111, align 8, !tbaa !5
  %1175 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %1174, i32 0, i32 6
  %1176 = load float, ptr %1175, align 16, !tbaa !68
  %1177 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 4
  %1178 = load float, ptr %1177, align 4, !tbaa !69
  %1179 = load ptr, ptr %111, align 8, !tbaa !5
  %1180 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %1179, i32 0, i32 7
  %1181 = load float, ptr %1180, align 4, !tbaa !70
  %1182 = fmul float %1178, %1181
  %1183 = call float @llvm.fmuladd.f32(float %1173, float %1176, float %1182)
  store float %1183, ptr %112, align 4, !tbaa !9
  %1184 = load float, ptr %112, align 4, !tbaa !9
  %1185 = fcmp ogt float %1184, 0.000000e+00
  br i1 %1185, label %1186, label %1238

1186:                                             ; preds = %1171
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #9
  %1187 = load ptr, ptr %110, align 8, !tbaa !5
  %1188 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %1187)
          to label %1189 unwind label %1219

1189:                                             ; preds = %1186
  %1190 = invoke noundef float @_ZSt3absf(float noundef %1188)
          to label %1191 unwind label %1219

1191:                                             ; preds = %1189
  %1192 = load ptr, ptr %111, align 8, !tbaa !5
  %1193 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %1192, i32 0, i32 1
  %1194 = load float, ptr %1193, align 4, !tbaa !56
  %1195 = fmul float %1190, %1194
  %1196 = load float, ptr %5, align 4, !tbaa !9
  %1197 = fdiv float %1195, %1196
  store float %1197, ptr %113, align 4, !tbaa !9
  %1198 = load float, ptr %112, align 4, !tbaa !9
  %1199 = load float, ptr %113, align 4, !tbaa !9
  %1200 = fcmp ogt float %1198, %1199
  br i1 %1200, label %1201, label %1223

1201:                                             ; preds = %1191
  %1202 = load ptr, ptr %110, align 8, !tbaa !5
  invoke void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404) %1202, float noundef 0.000000e+00)
          to label %1203 unwind label %1219

1203:                                             ; preds = %1201
  %1204 = load float, ptr %112, align 4, !tbaa !9
  %1205 = load float, ptr %113, align 4, !tbaa !9
  %1206 = fsub float %1204, %1205
  %1207 = load float, ptr %5, align 4, !tbaa !9
  %1208 = fmul float %1206, %1207
  %1209 = load ptr, ptr %111, align 8, !tbaa !5
  %1210 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %1209, i32 0, i32 13
  %1211 = load float, ptr %1210, align 8, !tbaa !71
  %1212 = fdiv float %1208, %1211
  %1213 = load ptr, ptr %110, align 8, !tbaa !5
  %1214 = getelementptr inbounds %"class.JPH::WheelWV", ptr %1213, i32 0, i32 5
  store float %1212, ptr %1214, align 4, !tbaa !86
  br label %1237

1215:                                             ; preds = %1165
  %1216 = landingpad { ptr, i32 }
          cleanup
  %1217 = extractvalue { ptr, i32 } %1216, 0
  store ptr %1217, ptr %15, align 8
  %1218 = extractvalue { ptr, i32 } %1216, 1
  store i32 %1218, ptr %16, align 4
  br label %1245

1219:                                             ; preds = %1229, %1227, %1223, %1201, %1189, %1186
  %1220 = landingpad { ptr, i32 }
          cleanup
  %1221 = extractvalue { ptr, i32 } %1220, 0
  store ptr %1221, ptr %15, align 8
  %1222 = extractvalue { ptr, i32 } %1220, 1
  store i32 %1222, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #9
  br label %1245

1223:                                             ; preds = %1191
  %1224 = load ptr, ptr %110, align 8, !tbaa !5
  %1225 = load ptr, ptr %110, align 8, !tbaa !5
  %1226 = invoke noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %1225)
          to label %1227 unwind label %1219

1227:                                             ; preds = %1223
  %1228 = invoke noundef float @_ZN3JPH4SignIfEET_S1_(float noundef %1226)
          to label %1229 unwind label %1219

1229:                                             ; preds = %1227
  %1230 = fneg float %1228
  %1231 = load float, ptr %112, align 4, !tbaa !9
  %1232 = fmul float %1230, %1231
  %1233 = load float, ptr %5, align 4, !tbaa !9
  invoke void @_ZN3JPH7WheelWV11ApplyTorqueEff(ptr noundef nonnull align 16 dereferenceable(424) %1224, float noundef %1232, float noundef %1233)
          to label %1234 unwind label %1219

1234:                                             ; preds = %1229
  %1235 = load ptr, ptr %110, align 8, !tbaa !5
  %1236 = getelementptr inbounds %"class.JPH::WheelWV", ptr %1235, i32 0, i32 5
  store float 0.000000e+00, ptr %1236, align 4, !tbaa !86
  br label %1237

1237:                                             ; preds = %1234, %1203
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  br label %1241

1238:                                             ; preds = %1171
  %1239 = load ptr, ptr %110, align 8, !tbaa !5
  %1240 = getelementptr inbounds %"class.JPH::WheelWV", ptr %1239, i32 0, i32 5
  store float 0.000000e+00, ptr %1240, align 4, !tbaa !86
  br label %1241

1241:                                             ; preds = %1238, %1237
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  br label %1242

1242:                                             ; preds = %1241
  %1243 = load ptr, ptr %107, align 8, !tbaa !5
  %1244 = getelementptr inbounds ptr, ptr %1243, i32 1
  store ptr %1244, ptr %107, align 8, !tbaa !5
  br label %1148

1245:                                             ; preds = %1219, %1215
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  br label %1246

1246:                                             ; preds = %1245, %1161
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  br label %1247

1247:                                             ; preds = %1246, %1157
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  br label %1251

1248:                                             ; preds = %1152
  %1249 = load float, ptr %5, align 4, !tbaa !9
  %1250 = getelementptr inbounds %"class.JPH::WheeledVehicleController", ptr %114, i32 0, i32 9
  store float %1249, ptr %1250, align 4, !tbaa !55
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  ret void

1251:                                             ; preds = %1247, %1153
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  br label %1252

1252:                                             ; preds = %1251, %1118
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #9
  br label %1253

1253:                                             ; preds = %1252, %1051, %728
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  br label %1254

1254:                                             ; preds = %1253, %670, %517
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  br label %1255

1255:                                             ; preds = %1254, %513
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %58) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %58) #9
  br label %1256

1256:                                             ; preds = %1255, %488, %476
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  br label %1257

1257:                                             ; preds = %1256, %445, %278
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #9
  br label %1258

1258:                                             ; preds = %1257, %177
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  br label %1259

1259:                                             ; preds = %1258
  %1260 = load ptr, ptr %15, align 8
  %1261 = load i32, ptr %16, align 4
  %1262 = insertvalue { ptr, i32 } poison, ptr %1260, 0
  %1263 = insertvalue { ptr, i32 } %1262, i32 %1261, 1
  resume { ptr, i32 } %1263
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52)) #7 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100)) #7 align 2

declare void @_ZN3JPH13VehicleEngine12ApplyDampingEf(ptr noundef nonnull align 8 dereferenceable(52), float noundef) #8

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

declare void @_ZNK3JPH27VehicleDifferentialSettings20CalculateTorqueRatioEffRfS1_(ptr noundef nonnull align 4 dereferenceable(24), float noundef, float noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH13VehicleEngine18GetAngularVelocityEv(ptr noundef nonnull align 8 dereferenceable(52)) #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Wheel21GetLongitudinalLambdaEv(ptr noundef nonnull align 16 dereferenceable(404)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404), float noundef) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

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

declare void @_ZN3JPH13VehicleEngine11ApplyTorqueEff(ptr noundef nonnull align 8 dereferenceable(52), float noundef, float noundef) #8

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

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

declare void @_ZN3JPH19VehicleTransmission6UpdateEfffb(ptr noundef nonnull align 8 dereferenceable(100), float noundef, float noundef, float noundef, i1 noundef zeroext) #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH7WheelWV11ApplyTorqueEff(ptr noundef nonnull align 16 dereferenceable(424), float noundef, float noundef) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 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 = { 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { "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 #9 = { 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 = !{!"float", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"_ZTSN3JPH17VehicleControllerE", !6, i64 8}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = !{!18, !10, i64 16}
!18 = !{!"_ZTSN3JPH24WheeledVehicleControllerE", !12, i64 0, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !19, i64 32, !24, i64 88, !28, i64 192, !10, i64 216, !10, i64 220, !29, i64 224}
!19 = !{!"_ZTSN3JPH13VehicleEngineE", !20, i64 0, !10, i64 48}
!20 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !10, i64 0, !10, i64 4, !10, i64 8, !21, i64 16, !10, i64 40, !10, i64 44}
!21 = !{!"_ZTSN3JPH11LinearCurveE", !22, i64 0}
!22 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !23, i64 0, !23, i64 8, !6, i64 16}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN3JPH19VehicleTransmissionE", !25, i64 0, !14, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96}
!25 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !26, i64 0, !27, i64 8, !27, i64 32, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76}
!26 = !{!"_ZTSN3JPH17ETransmissionModeE", !7, i64 0}
!27 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !23, i64 0, !23, i64 8, !6, i64 16}
!28 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !23, i64 0, !23, i64 8, !6, i64 16}
!29 = !{!"_ZTSSt8functionIFvjRfS0_ffffffEE", !30, i64 0, !6, i64 24}
!30 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!31 = !{!25, !26, i64 0}
!32 = !{!33, !14, i64 0}
!33 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !14, i64 0, !14, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20}
!34 = !{!33, !14, i64 4}
!35 = !{!33, !10, i64 8}
!36 = !{!37, !6, i64 0}
!37 = !{!"_ZTSZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferential", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!38 = !{!37, !10, i64 8}
!39 = !{!33, !10, i64 20}
!40 = !{!37, !10, i64 12}
!41 = !{!37, !10, i64 16}
!42 = !{!18, !10, i64 216}
!43 = !{i64 2159650884}
!44 = !{i64 2159651274}
!45 = !{i64 0, i64 4, !13, i64 4, i64 4, !13, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9, i64 20, i64 4, !9}
!46 = !{!47, !6, i64 0}
!47 = !{!"_ZTSZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheel", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!48 = !{!47, !10, i64 8}
!49 = !{!47, !10, i64 12}
!50 = !{!47, !10, i64 16}
!51 = !{!52, !52, i64 0}
!52 = !{!"bool", !7, i64 0}
!53 = !{!25, !10, i64 76}
!54 = !{!20, !10, i64 40}
!55 = !{!18, !10, i64 220}
!56 = !{!57, !10, i64 148}
!57 = !{!"_ZTSN3JPH15WheelSettingsWVE", !58, i64 0, !10, i64 148, !10, i64 152, !10, i64 156, !21, i64 160, !21, i64 184, !10, i64 208, !10, i64 212}
!58 = !{!"_ZTSN3JPH13WheelSettingsE", !59, i64 0, !60, i64 8, !63, i64 16, !63, i64 32, !63, i64 48, !63, i64 64, !63, i64 80, !63, i64 96, !10, i64 112, !10, i64 116, !10, i64 120, !64, i64 124, !10, i64 136, !10, i64 140, !52, i64 144}
!59 = !{!"_ZTSN3JPH18SerializableObjectE"}
!60 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !61, i64 0}
!61 = !{!"_ZTSSt6atomicIjE", !62, i64 0}
!62 = !{!"_ZTSSt13__atomic_baseIjE", !14, i64 0}
!63 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!64 = !{!"_ZTSN3JPH14SpringSettingsE", !65, i64 0, !7, i64 4, !10, i64 8}
!65 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!66 = distinct !{!66, !16}
!67 = !{!18, !10, i64 24}
!68 = !{!57, !10, i64 208}
!69 = !{!18, !10, i64 28}
!70 = !{!57, !10, i64 212}
!71 = !{!58, !10, i64 136}
!72 = distinct !{!72, !16}
!73 = distinct !{!73, !16}
!74 = !{i64 2159651645}
!75 = !{i8 0, i8 2}
!76 = !{}
!77 = !{!78, !10, i64 404}
!78 = !{!"_ZTSN3JPH7WheelWVE", !79, i64 0, !10, i64 404, !10, i64 408, !10, i64 412, !10, i64 416, !10, i64 420}
!79 = !{!"_ZTSN3JPH5WheelE", !80, i64 8, !81, i64 16, !82, i64 20, !6, i64 24, !10, i64 32, !63, i64 48, !63, i64 64, !63, i64 80, !63, i64 96, !63, i64 112, !10, i64 128, !10, i64 132, !10, i64 136, !10, i64 140, !10, i64 144, !83, i64 148, !83, i64 212, !83, i64 276, !83, i64 340}
!80 = !{!"_ZTSN3JPH8RefConstINS_13WheelSettingsEEE", !6, i64 0}
!81 = !{!"_ZTSN3JPH6BodyIDE", !14, i64 0}
!82 = !{!"_ZTSN3JPH10SubShapeIDE", !14, i64 0}
!83 = !{!"_ZTSN3JPH18AxisConstraintPartE", !84, i64 0, !84, i64 12, !84, i64 24, !84, i64 36, !10, i64 48, !85, i64 52, !10, i64 60}
!84 = !{!"_ZTSN3JPH6Float3E", !10, i64 0, !10, i64 4, !10, i64 8}
!85 = !{!"_ZTSN3JPH10SpringPartE", !10, i64 0, !10, i64 4}
!86 = !{!78, !10, i64 420}


; 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.JPH::Array.33" = type { i64, i64, ptr }
%struct.DrivenDifferential = type { ptr, float, float, float }
%"class.JPH::Array.36" = type { i64, i64, ptr }
%"class.JPH::VehicleDifferentialSettings" = type { i32, i32, float, float, float, float }
%struct.DrivenWheel = type { ptr, float, float, float }
%"class.JPH::DynMatrix" = type { i32, i32, %"class.JPH::Array.2" }
%"class.JPH::Array.2" = type { i64, i64, ptr }

@.str.3 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [49 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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH7WheelWV6UpdateEjfRKNS_17VehicleConstraintE(ptr noundef nonnull align 16 dereferenceable(424), i32 noundef, float noundef, ptr noundef nonnull align 16 dereferenceable(408)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #4

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZN3JPH4SignIfEET_S1_(float noundef) local_unnamed_addr #6

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404)) local_unnamed_addr #7 align 2

declare noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100)) local_unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408)) local_unnamed_addr #7 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemE(ptr noundef nonnull align 8 dereferenceable(256) %0, float noundef %1, ptr nocapture noundef nonnull readnone align 16 dereferenceable(1172) %2) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.JPH::Array.33", align 8
  %5 = alloca float, align 4
  %6 = alloca float, align 4
  %7 = alloca float, align 4
  %8 = alloca %struct.DrivenDifferential, align 8
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca %"class.JPH::Array.36", align 8
  %14 = alloca %"class.JPH::VehicleDifferentialSettings", align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca %struct.DrivenWheel, align 8
  %18 = alloca %struct.DrivenWheel, align 8
  %19 = alloca %struct.DrivenWheel, align 8
  %20 = alloca %struct.DrivenWheel, align 8
  %21 = alloca %"class.JPH::DynMatrix", align 8
  %22 = alloca %"class.JPH::DynMatrix", align 8
  %23 = getelementptr inbounds i8, ptr %0, i64 32
  %24 = tail call noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %23)
  %25 = getelementptr inbounds i8, ptr %0, i64 8
  %26 = load ptr, ptr %25, align 8, !tbaa !5
  %27 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408) %26)
  %28 = tail call noundef i64 @_ZNK3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %29 = and i64 %28, 4294967295
  %.not392 = icmp eq i64 %29, 0
  br i1 %.not392, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %3
  %wide.trip.count = and i64 %28, 4294967295
  br label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %3
  %30 = getelementptr inbounds i8, ptr %0, i64 16
  %31 = load float, ptr %30, align 8, !tbaa !10
  %32 = tail call noundef float @_ZSt3absf(float noundef %31)
  %33 = getelementptr inbounds i8, ptr %0, i64 88
  %34 = load i8, ptr %33, align 8, !tbaa !26
  %35 = icmp eq i8 %34, 0
  br i1 %35, label %40, label %43

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %36 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %indvars.iv)
  %37 = load ptr, ptr %36, align 8, !tbaa !27
  %38 = load ptr, ptr %25, align 8, !tbaa !5
  %39 = trunc nuw i64 %indvars.iv to i32
  tail call void @_ZN3JPH7WheelWV6UpdateEjfRKNS_17VehicleConstraintE(ptr noundef nonnull align 16 dereferenceable(424) %37, i32 noundef %39, float noundef %1, ptr noundef nonnull align 16 dereferenceable(408) %38)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

40:                                               ; preds = %._crit_edge
  %41 = tail call noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100) %33)
  %42 = fmul float %32, %41
  br label %43

43:                                               ; preds = %40, %._crit_edge
  %.0228 = phi float [ %42, %40 ], [ %32, %._crit_edge ]
  tail call void @_ZN3JPH13VehicleEngine12ApplyDampingEf(ptr noundef nonnull align 8 dereferenceable(52) %23, float noundef %1)
  %44 = tail call noundef float @_ZNK3JPH13VehicleEngine9GetTorqueEf(ptr noundef nonnull align 8 dereferenceable(52) %23, float noundef %.0228)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #10
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  %45 = getelementptr inbounds i8, ptr %0, i64 192
  %46 = call noundef i64 @_ZNK3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %4, i64 noundef %46)
          to label %47 unwind label %56

47:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #10
  store float 0x47EFFFFFE0000000, ptr %5, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #10
  store float 0.000000e+00, ptr %6, align 4, !tbaa !30
  %48 = call noundef ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
  %49 = call noundef ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %45)
  %.not336 = icmp eq ptr %48, %49
  br i1 %.not336, label %._crit_edge340, label %.lr.ph339

.lr.ph339:                                        ; preds = %47
  %50 = getelementptr inbounds i8, ptr %8, i64 8
  %51 = getelementptr inbounds i8, ptr %8, i64 12
  %52 = getelementptr inbounds i8, ptr %8, i64 16
  br label %58

._crit_edge340:                                   ; preds = %99, %47
  %53 = getelementptr inbounds i8, ptr %0, i64 216
  %54 = load float, ptr %53, align 8, !tbaa !31
  %55 = fcmp olt float %54, 0x47EFFFFFE0000000
  br i1 %55, label %102, label %.loopexit

56:                                               ; preds = %43
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %592

58:                                               ; preds = %.lr.ph339, %99
  %.0253337 = phi ptr [ %48, %.lr.ph339 ], [ %100, %99 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #10
  store float 0.000000e+00, ptr %7, align 4, !tbaa !30
  %59 = load i32, ptr %.0253337, align 4, !tbaa !32
  %60 = getelementptr inbounds i8, ptr %.0253337, i64 4
  %61 = load i32, ptr %60, align 4, !tbaa !34
  %.not321.not = icmp eq i32 %59, -1
  br i1 %.not321.not, label %72, label %62

62:                                               ; preds = %58
  %63 = sext i32 %59 to i64
  %64 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %63)
          to label %65 unwind label %70

65:                                               ; preds = %62
  %66 = load ptr, ptr %64, align 8, !tbaa !27
  %67 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %66)
  %68 = load float, ptr %7, align 4, !tbaa !30
  %69 = fadd float %67, %68
  store float %69, ptr %7, align 4, !tbaa !30
  br label %72

70:                                               ; preds = %74, %62
  %71 = landingpad { ptr, i32 }
          cleanup
  br label %101

72:                                               ; preds = %65, %58
  %73 = phi float [ %69, %65 ], [ 0.000000e+00, %58 ]
  %.1256 = phi i32 [ 2, %65 ], [ 1, %58 ]
  %.not321.1 = icmp eq i32 %61, -1
  br i1 %.not321.1, label %81, label %74

74:                                               ; preds = %72
  %75 = sext i32 %61 to i64
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %75)
          to label %.thread407 unwind label %70

.thread407:                                       ; preds = %74
  %77 = load ptr, ptr %76, align 8, !tbaa !27
  %78 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %77)
  %79 = load float, ptr %7, align 4, !tbaa !30
  %80 = fadd float %78, %79
  store float %80, ptr %7, align 4, !tbaa !30
  br label %82

81:                                               ; preds = %72
  br i1 %.not321.not, label %99, label %82

82:                                               ; preds = %.thread407, %81
  %.1256.1409 = phi i32 [ %.1256, %.thread407 ], [ 1, %81 ]
  %83 = phi float [ %80, %.thread407 ], [ %73, %81 ]
  %84 = getelementptr inbounds i8, ptr %.0253337, i64 8
  %85 = load float, ptr %84, align 4, !tbaa !35
  %86 = fmul float %83, %85
  %87 = uitofp nneg i32 %.1256.1409 to float
  %88 = fdiv float %86, %87
  %89 = call noundef float @_ZSt3absf(float noundef %88)
  store float %89, ptr %7, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #10
  store ptr %.0253337, ptr %8, align 8, !tbaa !36
  store float %89, ptr %50, align 8, !tbaa !38
  %90 = getelementptr inbounds i8, ptr %.0253337, i64 20
  %91 = load float, ptr %90, align 4, !tbaa !39
  store float %91, ptr %51, align 4, !tbaa !40
  store float 0.000000e+00, ptr %52, align 8, !tbaa !41
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %8)
          to label %92 unwind label %97

92:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  %93 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %5, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %94 = load float, ptr %93, align 4, !tbaa !30
  store float %94, ptr %5, align 4, !tbaa !30
  %95 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %6, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %96 = load float, ptr %95, align 4, !tbaa !30
  store float %96, ptr %6, align 4, !tbaa !30
  br label %99

97:                                               ; preds = %82
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #10
  br label %101

99:                                               ; preds = %92, %81
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  %100 = getelementptr inbounds i8, ptr %.0253337, i64 24
  %.not = icmp eq ptr %100, %49
  br i1 %.not, label %._crit_edge340, label %58

101:                                              ; preds = %97, %70
  %.pn322 = phi { ptr, i32 } [ %71, %70 ], [ %98, %97 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #10
  br label %591

102:                                              ; preds = %._crit_edge340
  %103 = load float, ptr %6, align 4, !tbaa !30
  %104 = load float, ptr %5, align 4, !tbaa !30
  %105 = fcmp ogt float %103, %104
  br i1 %105, label %106, label %.loopexit

106:                                              ; preds = %102
  %107 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %108 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not286341 = icmp eq ptr %107, %108
  br i1 %.not286341, label %._crit_edge346, label %.lr.ph345

.lr.ph345:                                        ; preds = %106
  %109 = load float, ptr %6, align 4, !tbaa !30
  %110 = load float, ptr %5, align 4, !tbaa !30
  %111 = fsub float %109, %110
  br label %138

._crit_edge346:                                   ; preds = %138, %106
  %.0258.lcssa = phi float [ 0.000000e+00, %106 ], [ %144, %138 ]
  %112 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %113 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not287347 = icmp eq ptr %112, %113
  br i1 %.not287347, label %._crit_edge351, label %.lr.ph350.preheader

.lr.ph350.preheader:                              ; preds = %._crit_edge346
  %114 = ptrtoint ptr %113 to i64
  %115 = ptrtoint ptr %112 to i64
  %116 = add i64 %114, -24
  %117 = sub i64 %116, %115
  %min.iters.check = icmp ult i64 %117, 96
  br i1 %min.iters.check, label %.lr.ph350.preheader442, label %vector.ph

.lr.ph350.preheader442:                           ; preds = %vector.body, %.lr.ph350.preheader
  %.0261348.ph = phi ptr [ %112, %.lr.ph350.preheader ], [ %ind.end, %vector.body ]
  br label %.lr.ph350

vector.ph:                                        ; preds = %.lr.ph350.preheader
  %118 = udiv i64 %117, 24
  %119 = add nuw nsw i64 %118, 1
  %n.mod.vf = and i64 %119, 3
  %120 = icmp eq i64 %n.mod.vf, 0
  %121 = select i1 %120, i64 4, i64 %n.mod.vf
  %n.vec = sub nsw i64 %119, %121
  %122 = mul i64 %n.vec, 24
  %ind.end = getelementptr i8, ptr %112, i64 %122
  %broadcast.splatinsert = insertelement <4 x float> poison, float %.0258.lcssa, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  %invariant.gep = getelementptr i8, ptr %112, i64 16
  %invariant.gep446 = getelementptr i8, ptr %112, i64 16
  %invariant.gep448 = getelementptr i8, ptr %112, i64 64
  %invariant.gep450 = getelementptr i8, ptr %112, i64 88
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = mul i64 %index, 24
  %123 = or disjoint i64 %offset.idx, 24
  %gep = getelementptr i8, ptr %invariant.gep, i64 %offset.idx
  %gep447 = getelementptr i8, ptr %invariant.gep446, i64 %123
  %gep449 = getelementptr i8, ptr %invariant.gep448, i64 %offset.idx
  %gep451 = getelementptr i8, ptr %invariant.gep450, i64 %offset.idx
  %124 = load float, ptr %gep, align 8, !tbaa !41
  %125 = load float, ptr %gep447, align 8, !tbaa !41
  %126 = load float, ptr %gep449, align 8, !tbaa !41
  %127 = load float, ptr %gep451, align 8, !tbaa !41
  %128 = insertelement <4 x float> poison, float %124, i64 0
  %129 = insertelement <4 x float> %128, float %125, i64 1
  %130 = insertelement <4 x float> %129, float %126, i64 2
  %131 = insertelement <4 x float> %130, float %127, i64 3
  %132 = fdiv <4 x float> %131, %broadcast.splat
  %133 = extractelement <4 x float> %132, i64 0
  store float %133, ptr %gep, align 8, !tbaa !41
  %134 = extractelement <4 x float> %132, i64 1
  store float %134, ptr %gep447, align 8, !tbaa !41
  %135 = extractelement <4 x float> %132, i64 2
  store float %135, ptr %gep449, align 8, !tbaa !41
  %136 = extractelement <4 x float> %132, i64 3
  store float %136, ptr %gep451, align 8, !tbaa !41
  %index.next = add nuw i64 %index, 4
  %137 = icmp eq i64 %index.next, %n.vec
  br i1 %137, label %.lr.ph350.preheader442, label %vector.body, !llvm.loop !42

138:                                              ; preds = %.lr.ph345, %138
  %.0258343 = phi float [ 0.000000e+00, %.lr.ph345 ], [ %144, %138 ]
  %.0259342 = phi ptr [ %107, %.lr.ph345 ], [ %145, %138 ]
  %139 = getelementptr inbounds i8, ptr %.0259342, i64 8
  %140 = load float, ptr %139, align 8, !tbaa !38
  %141 = fsub float %109, %140
  %142 = fdiv float %141, %111
  %143 = getelementptr inbounds i8, ptr %.0259342, i64 16
  store float %142, ptr %143, align 8, !tbaa !41
  %144 = fadd float %.0258343, %142
  %145 = getelementptr inbounds i8, ptr %.0259342, i64 24
  %.not286 = icmp eq ptr %145, %108
  br i1 %.not286, label %._crit_edge346, label %138

._crit_edge351:                                   ; preds = %.lr.ph350, %._crit_edge346
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  store float 0x3F50624DE0000000, ptr %9, align 4, !tbaa !30
  %146 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %147 = load float, ptr %146, align 4, !tbaa !30
  store float %147, ptr %5, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #10
  store float 0x3F50624DE0000000, ptr %10, align 4, !tbaa !30
  %148 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %149 = load float, ptr %148, align 4, !tbaa !30
  store float %149, ptr %6, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #10
  %150 = load float, ptr %5, align 4, !tbaa !30
  %151 = fdiv float %149, %150
  %152 = fadd float %151, -1.000000e+00
  %153 = load float, ptr %53, align 8, !tbaa !31
  %154 = fadd float %153, -1.000000e+00
  %155 = fdiv float %152, %154
  store float %155, ptr %11, align 4, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #10
  store float 1.000000e+00, ptr %12, align 4, !tbaa !30
  %156 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIfERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %12)
  %157 = load float, ptr %156, align 4, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #10
  %158 = fcmp ult float %157, 0.000000e+00
  br i1 %158, label %163, label %169

.lr.ph350:                                        ; preds = %.lr.ph350.preheader442, %.lr.ph350
  %.0261348 = phi ptr [ %162, %.lr.ph350 ], [ %.0261348.ph, %.lr.ph350.preheader442 ]
  %159 = getelementptr inbounds i8, ptr %.0261348, i64 16
  %160 = load float, ptr %159, align 8, !tbaa !41
  %161 = fdiv float %160, %.0258.lcssa
  store float %161, ptr %159, align 8, !tbaa !41
  %162 = getelementptr inbounds i8, ptr %.0261348, i64 24
  %.not287 = icmp eq ptr %162, %113
  br i1 %.not287, label %._crit_edge351, label %.lr.ph350, !llvm.loop !45

163:                                              ; preds = %._crit_edge351
  %164 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.3, i32 noundef 345)
          to label %165 unwind label %167

165:                                              ; preds = %163
  br i1 %164, label %166, label %169

166:                                              ; preds = %165
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #10, !srcloc !46
  br label %169

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

169:                                              ; preds = %166, %165, %._crit_edge351
  %170 = fsub float 1.000000e+00, %157
  %171 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %172 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not288352 = icmp eq ptr %171, %172
  br i1 %.not288352, label %.loopexit, label %.lr.ph355.preheader

.lr.ph355.preheader:                              ; preds = %169
  %173 = ptrtoint ptr %172 to i64
  %174 = ptrtoint ptr %171 to i64
  %175 = add i64 %173, -24
  %176 = sub i64 %175, %174
  %min.iters.check422 = icmp ult i64 %176, 96
  br i1 %min.iters.check422, label %.lr.ph355.preheader441, label %vector.ph423

vector.ph423:                                     ; preds = %.lr.ph355.preheader
  %177 = udiv i64 %176, 24
  %178 = add nuw nsw i64 %177, 1
  %n.mod.vf424 = and i64 %178, 3
  %179 = icmp eq i64 %n.mod.vf424, 0
  %180 = select i1 %179, i64 4, i64 %n.mod.vf424
  %n.vec425 = sub nsw i64 %178, %180
  %181 = mul i64 %n.vec425, 24
  %ind.end426 = getelementptr i8, ptr %171, i64 %181
  %broadcast.splatinsert435 = insertelement <4 x float> poison, float %157, i64 0
  %broadcast.splat436 = shufflevector <4 x float> %broadcast.splatinsert435, <4 x float> poison, <4 x i32> zeroinitializer
  %broadcast.splatinsert437 = insertelement <4 x float> poison, float %170, i64 0
  %broadcast.splat438 = shufflevector <4 x float> %broadcast.splatinsert437, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body428

vector.body428:                                   ; preds = %vector.body428, %vector.ph423
  %index429 = phi i64 [ 0, %vector.ph423 ], [ %index.next439, %vector.body428 ]
  %offset.idx430 = mul i64 %index429, 24
  %182 = or disjoint i64 %offset.idx430, 24
  %next.gep431 = getelementptr i8, ptr %171, i64 %offset.idx430
  %next.gep432 = getelementptr i8, ptr %171, i64 %182
  %183 = getelementptr i8, ptr %171, i64 %offset.idx430
  %184 = getelementptr i8, ptr %171, i64 %offset.idx430
  %185 = getelementptr inbounds i8, ptr %next.gep431, i64 12
  %186 = getelementptr inbounds i8, ptr %next.gep432, i64 12
  %187 = getelementptr i8, ptr %183, i64 60
  %188 = getelementptr i8, ptr %184, i64 84
  %189 = load float, ptr %185, align 4, !tbaa !40
  %190 = load float, ptr %186, align 4, !tbaa !40
  %191 = load float, ptr %187, align 4, !tbaa !40
  %192 = load float, ptr %188, align 4, !tbaa !40
  %193 = insertelement <4 x float> poison, float %189, i64 0
  %194 = insertelement <4 x float> %193, float %190, i64 1
  %195 = insertelement <4 x float> %194, float %191, i64 2
  %196 = insertelement <4 x float> %195, float %192, i64 3
  %197 = getelementptr inbounds i8, ptr %next.gep431, i64 16
  %198 = getelementptr inbounds i8, ptr %next.gep432, i64 16
  %199 = getelementptr i8, ptr %183, i64 64
  %200 = getelementptr i8, ptr %184, i64 88
  %201 = load float, ptr %197, align 8, !tbaa !41
  %202 = load float, ptr %198, align 8, !tbaa !41
  %203 = load float, ptr %199, align 8, !tbaa !41
  %204 = load float, ptr %200, align 8, !tbaa !41
  %205 = insertelement <4 x float> poison, float %201, i64 0
  %206 = insertelement <4 x float> %205, float %202, i64 1
  %207 = insertelement <4 x float> %206, float %203, i64 2
  %208 = insertelement <4 x float> %207, float %204, i64 3
  %209 = fmul <4 x float> %broadcast.splat436, %208
  %210 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %broadcast.splat438, <4 x float> %196, <4 x float> %209)
  %211 = extractelement <4 x float> %210, i64 0
  store float %211, ptr %185, align 4, !tbaa !40
  %212 = extractelement <4 x float> %210, i64 1
  store float %212, ptr %186, align 4, !tbaa !40
  %213 = extractelement <4 x float> %210, i64 2
  store float %213, ptr %187, align 4, !tbaa !40
  %214 = extractelement <4 x float> %210, i64 3
  store float %214, ptr %188, align 4, !tbaa !40
  %index.next439 = add nuw i64 %index429, 4
  %215 = icmp eq i64 %index.next439, %n.vec425
  br i1 %215, label %.lr.ph355.preheader441, label %vector.body428, !llvm.loop !47

.lr.ph355.preheader441:                           ; preds = %vector.body428, %.lr.ph355.preheader
  %.0263353.ph = phi ptr [ %171, %.lr.ph355.preheader ], [ %ind.end426, %vector.body428 ]
  br label %.lr.ph355

.lr.ph355:                                        ; preds = %.lr.ph355.preheader441, %.lr.ph355
  %.0263353 = phi ptr [ %222, %.lr.ph355 ], [ %.0263353.ph, %.lr.ph355.preheader441 ]
  %216 = getelementptr inbounds i8, ptr %.0263353, i64 12
  %217 = load float, ptr %216, align 4, !tbaa !40
  %218 = getelementptr inbounds i8, ptr %.0263353, i64 16
  %219 = load float, ptr %218, align 8, !tbaa !41
  %220 = fmul float %157, %219
  %221 = call float @llvm.fmuladd.f32(float %170, float %217, float %220)
  store float %221, ptr %216, align 4, !tbaa !40
  %222 = getelementptr inbounds i8, ptr %.0263353, i64 24
  %.not288 = icmp eq ptr %222, %172
  br i1 %.not288, label %.loopexit, label %.lr.ph355, !llvm.loop !48

.loopexit:                                        ; preds = %.lr.ph355, %169, %102, %._crit_edge340
  %223 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %224 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not289356 = icmp eq ptr %223, %224
  br i1 %.not289356, label %._crit_edge361, label %.lr.ph360

._crit_edge361:                                   ; preds = %.lr.ph360, %.loopexit
  %.0264.lcssa = phi float [ 0.000000e+00, %.loopexit ], [ %230, %.lr.ph360 ]
  %225 = fadd float %.0264.lcssa, -1.000000e+00
  %226 = call noundef float @_ZSt3absf(float noundef %225)
  %227 = fcmp olt float %226, 0x3EB0C6F7A0000000
  br i1 %227, label %238, label %232

.lr.ph360:                                        ; preds = %.loopexit, %.lr.ph360
  %.0264358 = phi float [ %230, %.lr.ph360 ], [ 0.000000e+00, %.loopexit ]
  %.0265357 = phi ptr [ %231, %.lr.ph360 ], [ %223, %.loopexit ]
  %228 = getelementptr inbounds i8, ptr %.0265357, i64 12
  %229 = load float, ptr %228, align 4, !tbaa !40
  %230 = fadd float %.0264358, %229
  %231 = getelementptr inbounds i8, ptr %.0265357, i64 24
  %.not289 = icmp eq ptr %231, %224
  br i1 %.not289, label %._crit_edge361, label %.lr.ph360

232:                                              ; preds = %._crit_edge361
  %233 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jNS_15AssertLastParamE(ptr noundef nonnull @.str.23, ptr noundef nonnull @.str.3, i32 noundef 358)
          to label %234 unwind label %236

234:                                              ; preds = %232
  br i1 %233, label %235, label %238

235:                                              ; preds = %234
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #10, !srcloc !49
  br label %238

236:                                              ; preds = %232
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %591

238:                                              ; preds = %235, %234, %._crit_edge361
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #10
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %239 = call noundef i64 @_ZNK3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %239)
          to label %240 unwind label %260

240:                                              ; preds = %238
  %241 = invoke noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100) %33)
          to label %242 unwind label %262

242:                                              ; preds = %240
  %243 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %244 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %4)
  %.not290363 = icmp eq ptr %243, %244
  br i1 %.not290363, label %._crit_edge367, label %.lr.ph366

.lr.ph366:                                        ; preds = %242
  %245 = getelementptr inbounds i8, ptr %14, i64 4
  %246 = getelementptr inbounds i8, ptr %14, i64 8
  %247 = getelementptr inbounds i8, ptr %20, i64 8
  %248 = getelementptr inbounds i8, ptr %20, i64 12
  %249 = getelementptr inbounds i8, ptr %20, i64 16
  %250 = getelementptr inbounds i8, ptr %19, i64 8
  %251 = getelementptr inbounds i8, ptr %19, i64 12
  %252 = getelementptr inbounds i8, ptr %19, i64 16
  %253 = getelementptr inbounds i8, ptr %17, i64 8
  %254 = getelementptr inbounds i8, ptr %17, i64 12
  %255 = getelementptr inbounds i8, ptr %17, i64 16
  %256 = getelementptr inbounds i8, ptr %18, i64 8
  %257 = getelementptr inbounds i8, ptr %18, i64 12
  %258 = getelementptr inbounds i8, ptr %18, i64 16
  br label %264

._crit_edge367:                                   ; preds = %.thread327, %242
  %259 = call noundef zeroext i1 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  br i1 %259, label %.critedge, label %329

260:                                              ; preds = %238
  %261 = landingpad { ptr, i32 }
          cleanup
  br label %590

262:                                              ; preds = %240
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %590

264:                                              ; preds = %.lr.ph366, %.thread327
  %.0268364 = phi ptr [ %243, %.lr.ph366 ], [ %327, %.thread327 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #10
  %265 = load ptr, ptr %.0268364, align 8, !tbaa !36
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(24) %14, ptr noundef nonnull align 4 dereferenceable(24) %265, i64 24, i1 false), !tbaa.struct !50
  %266 = load i32, ptr %14, align 4, !tbaa !32
  %.not310 = icmp eq i32 %266, -1
  br i1 %.not310, label %.thread328, label %267

267:                                              ; preds = %264
  %268 = sext i32 %266 to i64
  %269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %268)
          to label %270 unwind label %300

270:                                              ; preds = %267
  %271 = load ptr, ptr %269, align 8, !tbaa !27
  %272 = load i32, ptr %245, align 4, !tbaa !34
  %.not311 = icmp eq i32 %272, -1
  br i1 %.not311, label %.thread, label %276

.thread328:                                       ; preds = %264
  %273 = load i32, ptr %245, align 4, !tbaa !34
  %.not311329 = icmp eq i32 %273, -1
  br i1 %.not311329, label %.thread327, label %276

.thread:                                          ; preds = %270
  %274 = load float, ptr %246, align 4, !tbaa !35
  %275 = fmul float %241, %274
  %.not330 = icmp eq ptr %271, null
  br i1 %.not330, label %.thread327, label %312

276:                                              ; preds = %.thread328, %270
  %277 = phi i32 [ %273, %.thread328 ], [ %272, %270 ]
  %278 = phi ptr [ null, %.thread328 ], [ %271, %270 ]
  %279 = sext i32 %277 to i64
  %280 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %27, i64 noundef %279)
          to label %281 unwind label %302

281:                                              ; preds = %276
  %282 = load ptr, ptr %280, align 8, !tbaa !27
  %283 = load float, ptr %246, align 4, !tbaa !35
  %284 = fmul float %241, %283
  %285 = icmp ne ptr %278, null
  %286 = icmp ne ptr %282, null
  %or.cond = select i1 %285, i1 %286, i1 false
  br i1 %or.cond, label %287, label %311

287:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #10
  %288 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %278)
  %289 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %282)
  invoke void @_ZNK3JPH27VehicleDifferentialSettings20CalculateTorqueRatioEffRfS1_(ptr noundef nonnull align 4 dereferenceable(24) %14, float noundef %288, float noundef %289, ptr noundef nonnull align 4 dereferenceable(4) %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %290 unwind label %304

290:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %17) #10
  store ptr %278, ptr %17, align 8, !tbaa !52
  store float %284, ptr %253, align 8, !tbaa !54
  %291 = getelementptr inbounds i8, ptr %.0268364, i64 12
  %292 = load float, ptr %291, align 4, !tbaa !40
  %293 = load float, ptr %15, align 4, !tbaa !30
  %294 = fmul float %292, %293
  store float %294, ptr %254, align 4, !tbaa !55
  store float 0.000000e+00, ptr %255, align 8, !tbaa !56
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %295 unwind label %306

295:                                              ; preds = %290
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #10
  store ptr %282, ptr %18, align 8, !tbaa !52
  store float %284, ptr %256, align 8, !tbaa !54
  %296 = load float, ptr %291, align 4, !tbaa !40
  %297 = load float, ptr %16, align 4, !tbaa !30
  %298 = fmul float %296, %297
  store float %298, ptr %257, align 4, !tbaa !55
  store float 0.000000e+00, ptr %258, align 8, !tbaa !56
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %18)
          to label %299 unwind label %308

299:                                              ; preds = %295
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #10
  br label %.thread327

300:                                              ; preds = %267
  %301 = landingpad { ptr, i32 }
          cleanup
  br label %328

302:                                              ; preds = %276
  %303 = landingpad { ptr, i32 }
          cleanup
  br label %328

304:                                              ; preds = %287
  %305 = landingpad { ptr, i32 }
          cleanup
  br label %310

306:                                              ; preds = %290
  %307 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %17) #10
  br label %310

308:                                              ; preds = %295
  %309 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #10
  br label %310

310:                                              ; preds = %308, %306, %304
  %.pn312 = phi { ptr, i32 } [ %309, %308 ], [ %307, %306 ], [ %305, %304 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #10
  br label %328

311:                                              ; preds = %281
  br i1 %285, label %312, label %320

312:                                              ; preds = %.thread, %311
  %313 = phi ptr [ %271, %.thread ], [ %278, %311 ]
  %314 = phi float [ %275, %.thread ], [ %284, %311 ]
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #10
  store ptr %313, ptr %19, align 8, !tbaa !52
  store float %314, ptr %250, align 8, !tbaa !54
  %315 = getelementptr inbounds i8, ptr %.0268364, i64 12
  %316 = load float, ptr %315, align 4, !tbaa !40
  store float %316, ptr %251, align 4, !tbaa !55
  store float 0.000000e+00, ptr %252, align 8, !tbaa !56
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %19)
          to label %317 unwind label %318

317:                                              ; preds = %312
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #10
  br label %.thread327

318:                                              ; preds = %312
  %319 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #10
  br label %328

320:                                              ; preds = %311
  br i1 %286, label %321, label %.thread327

321:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %20) #10
  store ptr %282, ptr %20, align 8, !tbaa !52
  store float %284, ptr %247, align 8, !tbaa !54
  %322 = getelementptr inbounds i8, ptr %.0268364, i64 12
  %323 = load float, ptr %322, align 4, !tbaa !40
  store float %323, ptr %248, align 4, !tbaa !55
  store float 0.000000e+00, ptr %249, align 8, !tbaa !56
  invoke void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %324 unwind label %325

324:                                              ; preds = %321
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #10
  br label %.thread327

325:                                              ; preds = %321
  %326 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %20) #10
  br label %328

.thread327:                                       ; preds = %.thread328, %.thread, %317, %324, %320, %299
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  %327 = getelementptr inbounds i8, ptr %.0268364, i64 24
  %.not290 = icmp eq ptr %327, %244
  br i1 %.not290, label %._crit_edge367, label %264

328:                                              ; preds = %302, %325, %318, %310, %300
  %.pn312.pn.pn.pn = phi { ptr, i32 } [ %301, %300 ], [ %303, %302 ], [ %.pn312, %310 ], [ %319, %318 ], [ %326, %325 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #10
  br label %590

329:                                              ; preds = %._crit_edge367
  %330 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %331 = trunc i64 %330 to i32
  %332 = add nsw i32 %331, 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #10
  invoke void @_ZN3JPH9DynMatrixC2Ejj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %332, i32 noundef %332)
          to label %333 unwind label %363

333:                                              ; preds = %329
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #10
  invoke void @_ZN3JPH9DynMatrixC2Ejj(ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef %332, i32 noundef 1)
          to label %334 unwind label %365

334:                                              ; preds = %333
  %335 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %336 = uitofp i64 %335 to float
  %337 = call noundef float @_ZNK3JPH13VehicleEngine18GetAngularVelocityEv(ptr noundef nonnull align 8 dereferenceable(52) %23)
  %338 = fcmp une float %241, 0.000000e+00
  br i1 %338, label %339, label %344

339:                                              ; preds = %334
  %340 = call noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100) %33)
  %341 = getelementptr inbounds i8, ptr %0, i64 164
  %342 = load float, ptr %341, align 4, !tbaa !57
  %343 = fmul float %340, %342
  br label %344

344:                                              ; preds = %334, %339
  %345 = phi float [ %343, %339 ], [ 0.000000e+00, %334 ]
  %346 = getelementptr inbounds i8, ptr %0, i64 72
  %347 = load float, ptr %346, align 8, !tbaa !58
  %348 = fdiv float %1, %347
  %349 = getelementptr inbounds i8, ptr %0, i64 220
  %350 = load float, ptr %349, align 4, !tbaa !59
  %351 = fcmp ogt float %350, 0.000000e+00
  %352 = fdiv float %1, %350
  %353 = select i1 %351, float %352, float 0.000000e+00
  %354 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %355 = trunc i64 %354 to i32
  %356 = icmp sgt i32 %355, 0
  br i1 %356, label %.lr.ph374, label %._crit_edge375

.lr.ph374:                                        ; preds = %344
  %357 = getelementptr inbounds i8, ptr %0, i64 24
  %358 = getelementptr inbounds i8, ptr %0, i64 28
  %359 = fneg float %348
  br label %367

._crit_edge375:                                   ; preds = %461, %344
  %360 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %331, i32 noundef %331)
          to label %467 unwind label %478

361:                                              ; preds = %.critedge
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %590

363:                                              ; preds = %329
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %515

365:                                              ; preds = %333
  %366 = landingpad { ptr, i32 }
          cleanup
  br label %514

367:                                              ; preds = %.lr.ph374, %461
  %indvars.iv399 = phi i64 [ 0, %.lr.ph374 ], [ %indvars.iv.next400, %461 ]
  %368 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv399)
          to label %369 unwind label %388

369:                                              ; preds = %367
  %370 = load ptr, ptr %368, align 8, !tbaa !52
  %371 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %370)
          to label %372 unwind label %390

372:                                              ; preds = %369
  %373 = getelementptr inbounds i8, ptr %371, i64 148
  %374 = load float, ptr %373, align 4, !tbaa !60
  %375 = getelementptr inbounds i8, ptr %368, i64 8
  %376 = load float, ptr %375, align 8, !tbaa !54
  %377 = fmul float %345, %376
  %378 = fmul float %377, %1
  %379 = getelementptr inbounds i8, ptr %368, i64 12
  %380 = load float, ptr %379, align 4, !tbaa !55
  %381 = fmul float %380, %378
  %382 = fdiv float %381, %374
  %383 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %384 = trunc i64 %383 to i32
  %385 = icmp sgt i32 %384, 0
  %386 = trunc nuw nsw i64 %indvars.iv399 to i32
  br i1 %385, label %.lr.ph370, label %._crit_edge371

._crit_edge371:                                   ; preds = %398, %372
  %387 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %386, i32 noundef %386)
          to label %406 unwind label %428

388:                                              ; preds = %367
  %389 = landingpad { ptr, i32 }
          cleanup
  br label %513

390:                                              ; preds = %369
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %513

.lr.ph370:                                        ; preds = %372, %398
  %indvars.iv396 = phi i64 [ %indvars.iv.next397, %398 ], [ 0, %372 ]
  %392 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv396)
          to label %393 unwind label %404

393:                                              ; preds = %.lr.ph370
  %394 = getelementptr inbounds i8, ptr %392, i64 8
  %395 = load float, ptr %394, align 8, !tbaa !54
  %396 = trunc nuw nsw i64 %indvars.iv396 to i32
  %397 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %386, i32 noundef %396)
          to label %398 unwind label %404

398:                                              ; preds = %393
  %399 = fmul float %382, %395
  %400 = fdiv float %399, %336
  store float %400, ptr %397, align 4, !tbaa !30
  %indvars.iv.next397 = add nuw nsw i64 %indvars.iv396, 1
  %401 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %sext = shl i64 %401, 32
  %402 = ashr exact i64 %sext, 32
  %403 = icmp slt i64 %indvars.iv.next397, %402
  br i1 %403, label %.lr.ph370, label %._crit_edge371, !llvm.loop !71

404:                                              ; preds = %393, %.lr.ph370
  %405 = landingpad { ptr, i32 }
          cleanup
  br label %513

406:                                              ; preds = %._crit_edge371
  %407 = load float, ptr %387, align 4, !tbaa !30
  %408 = fadd float %407, 1.000000e+00
  store float %408, ptr %387, align 4, !tbaa !30
  %409 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %386, i32 noundef %331)
          to label %410 unwind label %428

410:                                              ; preds = %406
  %411 = fneg float %382
  store float %411, ptr %409, align 4, !tbaa !30
  %412 = load float, ptr %357, align 8, !tbaa !72
  %413 = getelementptr inbounds i8, ptr %371, i64 208
  %414 = load float, ptr %413, align 16, !tbaa !73
  %415 = load float, ptr %358, align 4, !tbaa !74
  %416 = getelementptr inbounds i8, ptr %371, i64 212
  %417 = load float, ptr %416, align 4, !tbaa !75
  %418 = fmul float %415, %417
  %419 = call float @llvm.fmuladd.f32(float %412, float %414, float %418)
  %420 = fcmp ogt float %419, 0.000000e+00
  br i1 %420, label %421, label %438

421:                                              ; preds = %410
  %422 = load ptr, ptr %368, align 8, !tbaa !52
  %423 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %422)
  %424 = fcmp une float %423, 0.000000e+00
  br i1 %424, label %425, label %432

425:                                              ; preds = %421
  %426 = load ptr, ptr %368, align 8, !tbaa !52
  %427 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %426)
  br label %434

428:                                              ; preds = %406, %._crit_edge371
  %429 = landingpad { ptr, i32 }
          cleanup
  br label %513

430:                                              ; preds = %432
  %431 = landingpad { ptr, i32 }
          cleanup
  br label %513

432:                                              ; preds = %421
  %433 = invoke noundef float @_ZNK3JPH19VehicleTransmission15GetCurrentRatioEv(ptr noundef nonnull align 8 dereferenceable(100) %33)
          to label %434 unwind label %430

434:                                              ; preds = %432, %425
  %.sink = phi float [ %427, %425 ], [ %433, %432 ]
  %435 = call noundef float @_ZN3JPH4SignIfEET_S1_(float noundef %.sink)
  %436 = fmul float %435, %1
  %437 = fmul float %419, %436
  br label %438

438:                                              ; preds = %434, %410
  %.0269 = phi float [ %437, %434 ], [ 0.000000e+00, %410 ]
  %439 = load ptr, ptr %368, align 8, !tbaa !52
  %440 = invoke noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404) %439)
          to label %441 unwind label %450

441:                                              ; preds = %438
  br i1 %440, label %442, label %452

442:                                              ; preds = %441
  %443 = load ptr, ptr %368, align 8, !tbaa !52
  %444 = invoke noundef float @_ZNK3JPH5Wheel21GetLongitudinalLambdaEv(ptr noundef nonnull align 16 dereferenceable(404) %443)
          to label %445 unwind label %450

445:                                              ; preds = %442
  %446 = fmul float %353, %444
  %447 = getelementptr inbounds i8, ptr %371, i64 136
  %448 = load float, ptr %447, align 8, !tbaa !76
  %449 = call float @llvm.fmuladd.f32(float %446, float %448, float %.0269)
  br label %452

450:                                              ; preds = %457, %452, %442, %438
  %451 = landingpad { ptr, i32 }
          cleanup
  br label %513

452:                                              ; preds = %445, %441
  %.1270 = phi float [ %449, %445 ], [ %.0269, %441 ]
  %453 = getelementptr inbounds i8, ptr %368, i64 16
  store float %.1270, ptr %453, align 8, !tbaa !56
  %454 = load ptr, ptr %368, align 8, !tbaa !52
  %455 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %454)
  %456 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef %386, i32 noundef 0)
          to label %457 unwind label %450

457:                                              ; preds = %452
  %458 = fdiv float %.1270, %374
  %459 = fsub float %455, %458
  store float %459, ptr %456, align 4, !tbaa !30
  %460 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %331, i32 noundef %386)
          to label %461 unwind label %450

461:                                              ; preds = %457
  %462 = fmul float %377, %359
  %463 = fdiv float %462, %336
  store float %463, ptr %460, align 4, !tbaa !30
  %indvars.iv.next400 = add nuw nsw i64 %indvars.iv399, 1
  %464 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %sext405 = shl i64 %464, 32
  %465 = ashr exact i64 %sext405, 32
  %466 = icmp slt i64 %indvars.iv.next400, %465
  br i1 %466, label %367, label %._crit_edge375, !llvm.loop !77

467:                                              ; preds = %._crit_edge375
  %468 = call float @llvm.fmuladd.f32(float %348, float %345, float 1.000000e+00)
  store float %468, ptr %360, align 4, !tbaa !30
  %469 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef %331, i32 noundef 0)
          to label %470 unwind label %478

470:                                              ; preds = %467
  %471 = call float @llvm.fmuladd.f32(float %348, float %44, float %337)
  store float %471, ptr %469, align 4, !tbaa !30
  %472 = invoke noundef zeroext i1 @_ZN3JPH19GaussianEliminationINS_9DynMatrixES1_EEbRT_RT0_f(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %22, float noundef 0x3C9CD2B2A0000000)
          to label %473 unwind label %478

473:                                              ; preds = %470
  br i1 %472, label %.preheader, label %508

.preheader:                                       ; preds = %473
  %474 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %475 = trunc i64 %474 to i32
  %476 = icmp sgt i32 %475, 0
  br i1 %476, label %.lr.ph377, label %._crit_edge378

._crit_edge378:                                   ; preds = %487, %.preheader
  %477 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef %331, i32 noundef 0)
          to label %505 unwind label %478

478:                                              ; preds = %508, %505, %._crit_edge378, %470, %467, %._crit_edge375
  %479 = landingpad { ptr, i32 }
          cleanup
  br label %513

.lr.ph377:                                        ; preds = %.preheader, %487
  %indvars.iv402 = phi i64 [ %indvars.iv.next403, %487 ], [ 0, %.preheader ]
  %480 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %13, i64 noundef %indvars.iv402)
          to label %481 unwind label %499

481:                                              ; preds = %.lr.ph377
  %482 = load ptr, ptr %480, align 8, !tbaa !52
  %483 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %482)
          to label %484 unwind label %501

484:                                              ; preds = %481
  %485 = trunc nuw nsw i64 %indvars.iv402 to i32
  %486 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH9DynMatrixclEjj(ptr noundef nonnull align 8 dereferenceable(32) %22, i32 noundef %485, i32 noundef 0)
          to label %487 unwind label %503

487:                                              ; preds = %484
  %488 = load float, ptr %486, align 4, !tbaa !30
  %489 = getelementptr inbounds i8, ptr %480, i64 16
  %490 = load float, ptr %489, align 8, !tbaa !56
  %491 = getelementptr inbounds i8, ptr %483, i64 148
  %492 = load float, ptr %491, align 4, !tbaa !60
  %493 = fdiv float %490, %492
  %494 = fadd float %488, %493
  %495 = load ptr, ptr %480, align 8, !tbaa !52
  call void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404) %495, float noundef %494)
  %indvars.iv.next403 = add nuw nsw i64 %indvars.iv402, 1
  %496 = call noundef i64 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %sext406 = shl i64 %496, 32
  %497 = ashr exact i64 %sext406, 32
  %498 = icmp slt i64 %indvars.iv.next403, %497
  br i1 %498, label %.lr.ph377, label %._crit_edge378, !llvm.loop !78

499:                                              ; preds = %.lr.ph377
  %500 = landingpad { ptr, i32 }
          cleanup
  br label %513

501:                                              ; preds = %481
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %513

503:                                              ; preds = %484
  %504 = landingpad { ptr, i32 }
          cleanup
  br label %513

505:                                              ; preds = %._crit_edge378
  %506 = load float, ptr %477, align 4, !tbaa !30
  %507 = fmul float %506, 0x4023193D60000000
  invoke void @_ZN3JPH13VehicleEngine13SetCurrentRPMEf(ptr noundef nonnull align 8 dereferenceable(52) %23, float noundef %507)
          to label %512 unwind label %478

508:                                              ; preds = %473
  %509 = invoke noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef nonnull @.str.24, ptr noundef nonnull @.str.3, i32 noundef 593, ptr noundef nonnull @.str.25)
          to label %510 unwind label %478

510:                                              ; preds = %508
  br i1 %509, label %511, label %512

511:                                              ; preds = %510
  call void asm sideeffect "int $$0x3", "~{dirflag},~{fpsr},~{flags}"() #10, !srcloc !79
  br label %512

512:                                              ; preds = %505, %510, %511
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #10
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  br i1 %472, label %516, label %.critedge

513:                                              ; preds = %499, %503, %501, %388, %404, %428, %450, %430, %390, %478
  %.pn295.pn.pn.pn = phi { ptr, i32 } [ %479, %478 ], [ %389, %388 ], [ %391, %390 ], [ %405, %404 ], [ %429, %428 ], [ %451, %450 ], [ %431, %430 ], [ %500, %499 ], [ %504, %503 ], [ %502, %501 ]
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #10
  br label %514

514:                                              ; preds = %513, %365
  %.pn295.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn295.pn.pn.pn, %513 ], [ %366, %365 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #10
  call void @_ZN3JPH9DynMatrixD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #10
  br label %515

515:                                              ; preds = %514, %363
  %.pn295.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn295.pn.pn.pn.pn, %514 ], [ %364, %363 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #10
  br label %590

.critedge:                                        ; preds = %._crit_edge367, %512
  invoke void @_ZN3JPH13VehicleEngine11ApplyTorqueEff(ptr noundef nonnull align 8 dereferenceable(52) %23, float noundef %44, float noundef %1)
          to label %516 unwind label %361

516:                                              ; preds = %.critedge, %512
  %517 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %518 = call noundef ptr @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13)
  %.not302379 = icmp eq ptr %517, %518
  br i1 %.not302379, label %.critedge391, label %.lr.ph383

._crit_edge384:                                   ; preds = %531
  br i1 %533, label %539, label %.critedge391

.lr.ph383:                                        ; preds = %516, %531
  %.0260381 = phi ptr [ %534, %531 ], [ %517, %516 ]
  %.0262380 = phi i1 [ %533, %531 ], [ false, %516 ]
  %519 = getelementptr inbounds i8, ptr %.0260381, i64 12
  %520 = load float, ptr %519, align 4, !tbaa !55
  %521 = fcmp ogt float %520, 0.000000e+00
  br i1 %521, label %522, label %531

522:                                              ; preds = %.lr.ph383
  %523 = load ptr, ptr %.0260381, align 8, !tbaa !52
  %524 = invoke noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404) %523)
          to label %525 unwind label %535

525:                                              ; preds = %522
  br i1 %524, label %526, label %531

526:                                              ; preds = %525
  %527 = load ptr, ptr %.0260381, align 8, !tbaa !52
  %528 = getelementptr inbounds i8, ptr %527, i64 404
  %529 = load float, ptr %528, align 4, !tbaa !80
  %530 = fcmp ogt float %529, 0x3FB99999A0000000
  br label %531

531:                                              ; preds = %525, %526, %.lr.ph383
  %532 = phi i1 [ false, %.lr.ph383 ], [ true, %525 ], [ %530, %526 ]
  %533 = or i1 %.0262380, %532
  %534 = getelementptr inbounds i8, ptr %.0260381, i64 24
  %.not302 = icmp eq ptr %534, %518
  br i1 %.not302, label %._crit_edge384, label %.lr.ph383

535:                                              ; preds = %522
  %536 = landingpad { ptr, i32 }
          cleanup
  br label %590

.critedge391:                                     ; preds = %516, %._crit_edge384
  %537 = call noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %23)
  %538 = fcmp oge float %537, %24
  br label %539

539:                                              ; preds = %.critedge391, %._crit_edge384
  %540 = phi i1 [ false, %._crit_edge384 ], [ %538, %.critedge391 ]
  %541 = call noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52) %23)
  %542 = load float, ptr %30, align 8, !tbaa !10
  invoke void @_ZN3JPH19VehicleTransmission6UpdateEfffb(ptr noundef nonnull align 8 dereferenceable(100) %33, float noundef %1, float noundef %541, float noundef %542, i1 noundef zeroext %540)
          to label %543 unwind label %549

543:                                              ; preds = %539
  %544 = call noundef ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %545 = call noundef ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %27)
  %.not303386 = icmp eq ptr %544, %545
  br i1 %.not303386, label %._crit_edge390, label %.lr.ph389

.lr.ph389:                                        ; preds = %543
  %546 = getelementptr inbounds i8, ptr %0, i64 24
  %547 = getelementptr inbounds i8, ptr %0, i64 28
  br label %551

._crit_edge390:                                   ; preds = %587, %543
  %548 = getelementptr inbounds i8, ptr %0, i64 220
  store float %1, ptr %548, align 4, !tbaa !59
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  ret void

549:                                              ; preds = %539
  %550 = landingpad { ptr, i32 }
          cleanup
  br label %590

551:                                              ; preds = %.lr.ph389, %587
  %.0254387 = phi ptr [ %544, %.lr.ph389 ], [ %589, %587 ]
  %552 = load ptr, ptr %.0254387, align 8, !tbaa !27
  %553 = invoke noundef ptr @_ZNK3JPH7WheelWV11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(424) %552)
          to label %554 unwind label %578

554:                                              ; preds = %551
  %555 = load float, ptr %546, align 8, !tbaa !72
  %556 = getelementptr inbounds i8, ptr %553, i64 208
  %557 = load float, ptr %556, align 16, !tbaa !73
  %558 = load float, ptr %547, align 4, !tbaa !74
  %559 = getelementptr inbounds i8, ptr %553, i64 212
  %560 = load float, ptr %559, align 4, !tbaa !75
  %561 = fmul float %558, %560
  %562 = call float @llvm.fmuladd.f32(float %555, float %557, float %561)
  %563 = fcmp ogt float %562, 0.000000e+00
  br i1 %563, label %564, label %587

564:                                              ; preds = %554
  %565 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %552)
  %566 = call noundef float @_ZSt3absf(float noundef %565)
  %567 = getelementptr inbounds i8, ptr %553, i64 148
  %568 = load float, ptr %567, align 4, !tbaa !60
  %569 = fmul float %566, %568
  %570 = fdiv float %569, %1
  %571 = fcmp ogt float %562, %570
  br i1 %571, label %572, label %582

572:                                              ; preds = %564
  call void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404) %552, float noundef 0.000000e+00)
  %573 = fsub float %562, %570
  %574 = fmul float %573, %1
  %575 = getelementptr inbounds i8, ptr %553, i64 136
  %576 = load float, ptr %575, align 8, !tbaa !76
  %577 = fdiv float %574, %576
  br label %587

578:                                              ; preds = %551
  %579 = landingpad { ptr, i32 }
          cleanup
  br label %590

580:                                              ; preds = %582
  %581 = landingpad { ptr, i32 }
          cleanup
  br label %590

582:                                              ; preds = %564
  %583 = call noundef float @_ZNK3JPH5Wheel18GetAngularVelocityEv(ptr noundef nonnull align 16 dereferenceable(404) %552)
  %584 = call noundef float @_ZN3JPH4SignIfEET_S1_(float noundef %583)
  %585 = fneg float %584
  %586 = fmul float %562, %585
  invoke void @_ZN3JPH7WheelWV11ApplyTorqueEff(ptr noundef nonnull align 16 dereferenceable(424) %552, float noundef %586, float noundef %1)
          to label %587 unwind label %580

587:                                              ; preds = %554, %582, %572
  %.sink413 = phi float [ %577, %572 ], [ 0.000000e+00, %582 ], [ 0.000000e+00, %554 ]
  %588 = getelementptr inbounds i8, ptr %552, i64 420
  store float %.sink413, ptr %588, align 4, !tbaa !89
  %589 = getelementptr inbounds i8, ptr %.0254387, i64 8
  %.not303 = icmp eq ptr %589, %545
  br i1 %.not303, label %._crit_edge390, label %551

590:                                              ; preds = %262, %328, %535, %578, %580, %549, %515, %361, %260
  %.pn312.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %261, %260 ], [ %.pn312.pn.pn.pn, %328 ], [ %263, %262 ], [ %362, %361 ], [ %.pn295.pn.pn.pn.pn.pn, %515 ], [ %536, %535 ], [ %550, %549 ], [ %581, %580 ], [ %579, %578 ]
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  br label %591

591:                                              ; preds = %236, %590, %167, %101
  %.pn322.pn = phi { ptr, i32 } [ %.pn322, %101 ], [ %168, %167 ], [ %.pn312.pn.pn.pn.pn.pn, %590 ], [ %237, %236 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #10
  br label %592

592:                                              ; preds = %591, %56
  %.pn322.pn.pn = phi { ptr, i32 } [ %.pn322.pn, %591 ], [ %57, %56 ]
  call void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #10
  resume { ptr, i32 } %.pn322.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH13VehicleEngine13GetCurrentRPMEv(ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #7 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH19VehicleTransmission17GetClutchFrictionEv(ptr noundef nonnull align 8 dereferenceable(100)) local_unnamed_addr #7 align 2

declare void @_ZN3JPH13VehicleEngine12ApplyDampingEf(ptr noundef nonnull align 8 dereferenceable(52), float noundef) local_unnamed_addr #8

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferentialNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #7 align 2

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

declare void @_ZNK3JPH27VehicleDifferentialSettings20CalculateTorqueRatioEffRfS1_(ptr noundef nonnull align 4 dereferenceable(24), float noundef, float noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #8

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZNK3JPH5ArrayIZNS_24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheelNS_12STLAllocatorIS4_EEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH13VehicleEngine18GetAngularVelocityEv(ptr noundef nonnull align 8 dereferenceable(52)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH5Wheel10HasContactEv(ptr noundef nonnull align 16 dereferenceable(404)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH5Wheel21GetLongitudinalLambdaEv(ptr noundef nonnull align 16 dereferenceable(404)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5Wheel18SetAngularVelocityEf(ptr noundef nonnull align 16 dereferenceable(404), float noundef) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN3JPH23AssertFailedParamHelperEPKcS1_jS1_NS_15AssertLastParamE(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

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

declare void @_ZN3JPH13VehicleEngine11ApplyTorqueEff(ptr noundef nonnull align 8 dereferenceable(52), float noundef, float noundef) local_unnamed_addr #8

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

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

declare void @_ZN3JPH19VehicleTransmission6UpdateEfffb(ptr noundef nonnull align 8 dereferenceable(100), float noundef, float noundef, float noundef, i1 noundef zeroext) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH7WheelWV11ApplyTorqueEff(ptr noundef nonnull align 16 dereferenceable(424), float noundef, float noundef) local_unnamed_addr #3 align 2

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) #9

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"_ZTSN3JPH17VehicleControllerE", !7, i64 8}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !12, i64 16}
!11 = !{!"_ZTSN3JPH24WheeledVehicleControllerE", !6, i64 0, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !13, i64 32, !18, i64 88, !23, i64 192, !12, i64 216, !12, i64 220, !24, i64 224}
!12 = !{!"float", !8, i64 0}
!13 = !{!"_ZTSN3JPH13VehicleEngineE", !14, i64 0, !12, i64 48}
!14 = !{!"_ZTSN3JPH21VehicleEngineSettingsE", !12, i64 0, !12, i64 4, !12, i64 8, !15, i64 16, !12, i64 40, !12, i64 44}
!15 = !{!"_ZTSN3JPH11LinearCurveE", !16, i64 0}
!16 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !17, i64 0, !17, i64 8, !7, i64 16}
!17 = !{!"long", !8, i64 0}
!18 = !{!"_ZTSN3JPH19VehicleTransmissionE", !19, i64 0, !22, i64 80, !12, i64 84, !12, i64 88, !12, i64 92, !12, i64 96}
!19 = !{!"_ZTSN3JPH27VehicleTransmissionSettingsE", !20, i64 0, !21, i64 8, !21, i64 32, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76}
!20 = !{!"_ZTSN3JPH17ETransmissionModeE", !8, i64 0}
!21 = !{!"_ZTSN3JPH5ArrayIfNS_12STLAllocatorIfEEEE", !17, i64 0, !17, i64 8, !7, i64 16}
!22 = !{!"int", !8, i64 0}
!23 = !{!"_ZTSN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEE", !17, i64 0, !17, i64 8, !7, i64 16}
!24 = !{!"_ZTSSt8functionIFvjRfS0_ffffffEE", !25, i64 0, !7, i64 24}
!25 = !{!"_ZTSSt14_Function_base", !8, i64 0, !7, i64 16}
!26 = !{!19, !20, i64 0}
!27 = !{!7, !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!12, !12, i64 0}
!31 = !{!11, !12, i64 216}
!32 = !{!33, !22, i64 0}
!33 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !22, i64 0, !22, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20}
!34 = !{!33, !22, i64 4}
!35 = !{!33, !12, i64 8}
!36 = !{!37, !7, i64 0}
!37 = !{!"_ZTSZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE18DrivenDifferential", !7, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!38 = !{!37, !12, i64 8}
!39 = !{!33, !12, i64 20}
!40 = !{!37, !12, i64 12}
!41 = !{!37, !12, i64 16}
!42 = distinct !{!42, !43, !44}
!43 = !{!"llvm.loop.isvectorized", i32 1}
!44 = !{!"llvm.loop.unroll.runtime.disable"}
!45 = distinct !{!45, !44, !43}
!46 = !{i64 2159650884}
!47 = distinct !{!47, !43, !44}
!48 = distinct !{!48, !44, !43}
!49 = !{i64 2159651274}
!50 = !{i64 0, i64 4, !51, i64 4, i64 4, !51, i64 8, i64 4, !30, i64 12, i64 4, !30, i64 16, i64 4, !30, i64 20, i64 4, !30}
!51 = !{!22, !22, i64 0}
!52 = !{!53, !7, i64 0}
!53 = !{!"_ZTSZN3JPH24WheeledVehicleController11PostCollideEfRNS_13PhysicsSystemEE11DrivenWheel", !7, i64 0, !12, i64 8, !12, i64 12, !12, i64 16}
!54 = !{!53, !12, i64 8}
!55 = !{!53, !12, i64 12}
!56 = !{!53, !12, i64 16}
!57 = !{!19, !12, i64 76}
!58 = !{!14, !12, i64 40}
!59 = !{!11, !12, i64 220}
!60 = !{!61, !12, i64 148}
!61 = !{!"_ZTSN3JPH15WheelSettingsWVE", !62, i64 0, !12, i64 148, !12, i64 152, !12, i64 156, !15, i64 160, !15, i64 184, !12, i64 208, !12, i64 212}
!62 = !{!"_ZTSN3JPH13WheelSettingsE", !63, i64 0, !64, i64 8, !67, i64 16, !67, i64 32, !67, i64 48, !67, i64 64, !67, i64 80, !67, i64 96, !12, i64 112, !12, i64 116, !12, i64 120, !68, i64 124, !12, i64 136, !12, i64 140, !70, i64 144}
!63 = !{!"_ZTSN3JPH18SerializableObjectE"}
!64 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !65, i64 0}
!65 = !{!"_ZTSSt6atomicIjE", !66, i64 0}
!66 = !{!"_ZTSSt13__atomic_baseIjE", !22, i64 0}
!67 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!68 = !{!"_ZTSN3JPH14SpringSettingsE", !69, i64 0, !8, i64 4, !12, i64 8}
!69 = !{!"_ZTSN3JPH11ESpringModeE", !8, i64 0}
!70 = !{!"bool", !8, i64 0}
!71 = distinct !{!71, !29}
!72 = !{!11, !12, i64 24}
!73 = !{!61, !12, i64 208}
!74 = !{!11, !12, i64 28}
!75 = !{!61, !12, i64 212}
!76 = !{!62, !12, i64 136}
!77 = distinct !{!77, !29}
!78 = distinct !{!78, !29}
!79 = !{i64 2159651645}
!80 = !{!81, !12, i64 404}
!81 = !{!"_ZTSN3JPH7WheelWVE", !82, i64 0, !12, i64 404, !12, i64 408, !12, i64 412, !12, i64 416, !12, i64 420}
!82 = !{!"_ZTSN3JPH5WheelE", !83, i64 8, !84, i64 16, !85, i64 20, !7, i64 24, !12, i64 32, !67, i64 48, !67, i64 64, !67, i64 80, !67, i64 96, !67, i64 112, !12, i64 128, !12, i64 132, !12, i64 136, !12, i64 140, !12, i64 144, !86, i64 148, !86, i64 212, !86, i64 276, !86, i64 340}
!83 = !{!"_ZTSN3JPH8RefConstINS_13WheelSettingsEEE", !7, i64 0}
!84 = !{!"_ZTSN3JPH6BodyIDE", !22, i64 0}
!85 = !{!"_ZTSN3JPH10SubShapeIDE", !22, i64 0}
!86 = !{!"_ZTSN3JPH18AxisConstraintPartE", !87, i64 0, !87, i64 12, !87, i64 24, !87, i64 36, !12, i64 48, !88, i64 52, !12, i64 60}
!87 = !{!"_ZTSN3JPH6Float3E", !12, i64 0, !12, i64 4, !12, i64 8}
!88 = !{!"_ZTSN3JPH10SpringPartE", !12, i64 0, !12, i64 4}
!89 = !{!81, !12, i64 420}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass