; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Vehicle (MotorcycleTest)

; 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::BroadPhaseLayer" = type { i8 }
%"class.JPH::Color" = type { %union.anon.82 }
%union.anon.82 = type { i32 }
%"class.JPH::SphereShape" = type { %"class.JPH::ConvexShape.base", float }
%"class.JPH::ConvexShape.base" = type <{ %"class.JPH::Shape.base", [6 x i8], %"class.JPH::RefConst.41", float }>
%"class.JPH::Shape.base" = type <{ ptr, %"class.JPH::RefTarget.40", [4 x i8], i64, i8, i8 }>
%"class.JPH::RefTarget.40" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.41" = type { ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.67", %"class.JPH::StaticArray.67" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.67" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>
%class.MotorcycleTest = type { %class.VehicleTest, ptr, %"class.JPH::Ref", %"class.JPH::Mat44", float, float, float, float }
%class.VehicleTest = type { %class.Test, %"class.JPH::Array" }
%class.Test = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.JPH::Array" = type { i64, i64, ptr }
%"class.JPH::Ref" = type { ptr }
%"class.JPH::WheelSettings" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.50", [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::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.50" = type { %"struct.std::atomic" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.51, float }
%union.anon.51 = type { float }

@_ZN14MotorcycleTest21sEnableLeanControllerE = external dso_local global i8, align 1
@_ZN14MotorcycleTest16sOverrideGravityE = external dso_local global i8, align 1
@_ZN16BroadPhaseLayersL10NON_MOVINGE = external hidden constant %"class.JPH::BroadPhaseLayer", align 1
@_ZN3JPH5Color6sGreenE = external global %"class.JPH::Color", align 4

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

declare i32 @__gxx_personality_v0(...)

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16)) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240)) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14MotorcycleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 16 dereferenceable(240) %0, ptr noundef nonnull align 16 dereferenceable(80) %1) unnamed_addr #4 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"class.JPH::SphereShape", align 8
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca %"struct.JPH::RShapeCast", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Mat44", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::ShapeCastSettings", align 16
  %16 = alloca %"class.JPH::ClosestHitCollisionCollector", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %19 = alloca %"class.JPH::BroadPhaseLayer", align 1
  %20 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %21 = alloca %"class.JPH::BodyFilter", align 8
  %22 = alloca %"class.JPH::ShapeFilter", align 8
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca %"class.JPH::Mat44", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca %"class.JPH::Vec3", align 16
  %30 = alloca %"class.JPH::Color", align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %31 = load ptr, ptr %3, align 8
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11VehicleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 8 dereferenceable(136) %31, ptr noundef nonnull align 16 dereferenceable(80) %32)
  call void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240) %31)
  %33 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 6
  %34 = load float, ptr %33, align 8, !tbaa !9
  %35 = fcmp une float %34, 0.000000e+00
  br i1 %35, label %44, label %36

36:                                               ; preds = %2
  %37 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 4
  %38 = load float, ptr %37, align 16, !tbaa !23
  %39 = fcmp une float %38, 0.000000e+00
  br i1 %39, label %44, label %40

40:                                               ; preds = %36
  %41 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 7
  %42 = load float, ptr %41, align 4, !tbaa !24
  %43 = fcmp une float %42, 0.000000e+00
  br i1 %43, label %44, label %50

44:                                               ; preds = %40, %36, %2
  %45 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 3
  %46 = load ptr, ptr %45, align 8, !tbaa !25
  %47 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 1
  %48 = load ptr, ptr %47, align 8, !tbaa !26
  %49 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %48)
  call void @_ZN3JPH13BodyInterface12ActivateBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %46, ptr noundef nonnull align 4 dereferenceable(4) %49)
  br label %50

50:                                               ; preds = %44, %40
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #10
  %51 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %52 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %51)
  %53 = call noundef ptr @_ZN3JPH17VehicleConstraint13GetControllerEv(ptr noundef nonnull align 16 dereferenceable(408) %52)
  store ptr %53, ptr %5, align 8, !tbaa !5
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 4
  %56 = load float, ptr %55, align 16, !tbaa !23
  %57 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 6
  %58 = load float, ptr %57, align 8, !tbaa !9
  %59 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 7
  %60 = load float, ptr %59, align 4, !tbaa !24
  call void @_ZN3JPH24WheeledVehicleController14SetDriverInputEffff(ptr noundef nonnull align 8 dereferenceable(256) %54, float noundef %56, float noundef %58, float noundef %60, float noundef 0.000000e+00)
  %61 = load ptr, ptr %5, align 8, !tbaa !5
  %62 = load i8, ptr @_ZN14MotorcycleTest21sEnableLeanControllerE, align 1, !tbaa !27, !range !28, !noundef !29
  %63 = trunc i8 %62 to i1
  call void @_ZN3JPH20MotorcycleController20EnableLeanControllerEb(ptr noundef nonnull align 16 dereferenceable(312) %61, i1 noundef zeroext %63)
  %64 = load i8, ptr @_ZN14MotorcycleTest16sOverrideGravityE, align 1, !tbaa !27, !range !28, !noundef !29
  %65 = trunc i8 %64 to i1
  br i1 %65, label %66, label %237

66:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 48, ptr %6) #10
  call void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %6, float noundef 5.000000e-01, ptr noundef null)
  %67 = getelementptr inbounds i8, ptr %6, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %67)
          to label %68 unwind label %183

68:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 144, ptr %9) #10
  %69 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %70 unwind label %187

70:                                               ; preds = %68
  %71 = getelementptr inbounds %"class.JPH::Vec3", ptr %10, i32 0, i32 0
  %72 = getelementptr inbounds %union.anon.20, ptr %71, i32 0, i32 0
  %73 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 0
  %74 = extractvalue { double, double } %69, 0
  store double %74, ptr %73, align 16
  %75 = getelementptr inbounds { double, double }, ptr %72, i32 0, i32 1
  %76 = extractvalue { double, double } %69, 1
  store double %76, ptr %75, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %11) #10
  %77 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 1
  %78 = load ptr, ptr %77, align 8, !tbaa !26
  %79 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %78)
          to label %80 unwind label %191

80:                                               ; preds = %70
  %81 = getelementptr inbounds %"class.JPH::Vec3", ptr %12, i32 0, i32 0
  %82 = getelementptr inbounds %union.anon.20, ptr %81, i32 0, i32 0
  %83 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 0
  %84 = extractvalue { double, double } %79, 0
  store double %84, ptr %83, align 16
  %85 = getelementptr inbounds { double, double }, ptr %82, i32 0, i32 1
  %86 = extractvalue { double, double } %79, 1
  store double %86, ptr %85, align 8
  %87 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %88 = load double, ptr %87, align 16
  %89 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %90 = load double, ptr %89, align 8
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %11, double %88, double %90)
          to label %91 unwind label %191

91:                                               ; preds = %80
  %92 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %93 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %92)
          to label %94 unwind label %191

94:                                               ; preds = %91
  %95 = invoke { double, double } @_ZNK3JPH17VehicleConstraint10GetWorldUpEv(ptr noundef nonnull align 16 dereferenceable(408) %93)
          to label %96 unwind label %191

96:                                               ; preds = %94
  %97 = getelementptr inbounds %"class.JPH::Vec3", ptr %14, i32 0, i32 0
  %98 = getelementptr inbounds %union.anon.20, ptr %97, i32 0, i32 0
  %99 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 0
  %100 = extractvalue { double, double } %95, 0
  store double %100, ptr %99, align 16
  %101 = getelementptr inbounds { double, double }, ptr %98, i32 0, i32 1
  %102 = extractvalue { double, double } %95, 1
  store double %102, ptr %101, align 8
  %103 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %104 = load double, ptr %103, align 16
  %105 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %106 = load double, ptr %105, align 8
  %107 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef -3.000000e+00, double %104, double %106)
          to label %108 unwind label %191

108:                                              ; preds = %96
  %109 = getelementptr inbounds %"class.JPH::Vec3", ptr %13, i32 0, i32 0
  %110 = getelementptr inbounds %union.anon.20, ptr %109, i32 0, i32 0
  %111 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 0
  %112 = extractvalue { double, double } %107, 0
  store double %112, ptr %111, align 16
  %113 = getelementptr inbounds { double, double }, ptr %110, i32 0, i32 1
  %114 = extractvalue { double, double } %107, 1
  store double %114, ptr %113, align 8
  %115 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 0
  %116 = load double, ptr %115, align 16
  %117 = getelementptr inbounds { double, double }, ptr %10, i32 0, i32 1
  %118 = load double, ptr %117, align 8
  %119 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %120 = load double, ptr %119, align 16
  %121 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %122 = load double, ptr %121, align 8
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %9, ptr noundef %6, double %116, double %118, ptr noundef nonnull align 16 dereferenceable(64) %11, double %120, double %122)
          to label %123 unwind label %191

123:                                              ; preds = %108
  call void @llvm.lifetime.end.p0(i64 64, ptr %11) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #10
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %15)
          to label %124 unwind label %195

124:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 1184, ptr %16) #10
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %16)
          to label %125 unwind label %199

125:                                              ; preds = %124
  %126 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 2
  %127 = load ptr, ptr %126, align 16, !tbaa !30
  %128 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %127)
          to label %129 unwind label %203

129:                                              ; preds = %125
  %130 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 1
  %131 = load ptr, ptr %130, align 8, !tbaa !26
  %132 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %131)
          to label %133 unwind label %203

133:                                              ; preds = %129
  %134 = getelementptr inbounds %"class.JPH::Vec3", ptr %17, i32 0, i32 0
  %135 = getelementptr inbounds %union.anon.20, ptr %134, i32 0, i32 0
  %136 = getelementptr inbounds { double, double }, ptr %135, i32 0, i32 0
  %137 = extractvalue { double, double } %132, 0
  store double %137, ptr %136, align 16
  %138 = getelementptr inbounds { double, double }, ptr %135, i32 0, i32 1
  %139 = extractvalue { double, double } %132, 1
  store double %139, ptr %138, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %19, ptr align 1 @_ZN16BroadPhaseLayersL10NON_MOVINGE, i64 1, i1 false), !tbaa.struct !31
  %140 = getelementptr inbounds %"class.JPH::BroadPhaseLayer", ptr %19, i32 0, i32 0
  %141 = load i8, ptr %140, align 1
  invoke void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %18, i8 %141)
          to label %142 unwind label %207

142:                                              ; preds = %133
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #10
  invoke void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %20, i16 noundef zeroext 0)
          to label %143 unwind label %211

143:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 8, i1 false)
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %22) #10
  call void @llvm.memset.p0.i64(ptr align 8 %22, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %22)
          to label %144 unwind label %215

144:                                              ; preds = %143
  %145 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %146 = load double, ptr %145, align 16
  %147 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %148 = load double, ptr %147, align 8
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %128, ptr noundef nonnull align 16 dereferenceable(144) %9, ptr noundef nonnull align 16 dereferenceable(36) %15, double %146, double %148, ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(12) %22)
          to label %149 unwind label %219

149:                                              ; preds = %144
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %22) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %20) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %18) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #10
  %150 = invoke noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %16)
          to label %151 unwind label %203

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

152:                                              ; preds = %151
  %153 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %154 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %153)
          to label %155 unwind label %203

155:                                              ; preds = %152
  %156 = getelementptr inbounds %"class.JPH::ClosestHitCollisionCollector", ptr %16, i32 0, i32 2
  %157 = getelementptr inbounds %"class.JPH::CollideShapeResult", ptr %156, i32 0, i32 2
  %158 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %157)
          to label %159 unwind label %203

159:                                              ; preds = %155
  %160 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %161 = getelementptr inbounds %union.anon.20, ptr %160, i32 0, i32 0
  %162 = getelementptr inbounds { double, double }, ptr %161, i32 0, i32 0
  %163 = extractvalue { double, double } %158, 0
  store double %163, ptr %162, align 16
  %164 = getelementptr inbounds { double, double }, ptr %161, i32 0, i32 1
  %165 = extractvalue { double, double } %158, 1
  store double %165, ptr %164, align 8
  %166 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 0
  %167 = load double, ptr %166, align 16
  %168 = getelementptr inbounds { double, double }, ptr %24, i32 0, i32 1
  %169 = load double, ptr %168, align 8
  %170 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x40239EB860000000, double %167, double %169)
          to label %171 unwind label %203

171:                                              ; preds = %159
  %172 = getelementptr inbounds %"class.JPH::Vec3", ptr %23, i32 0, i32 0
  %173 = getelementptr inbounds %union.anon.20, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 0
  %175 = extractvalue { double, double } %170, 0
  store double %175, ptr %174, align 16
  %176 = getelementptr inbounds { double, double }, ptr %173, i32 0, i32 1
  %177 = extractvalue { double, double } %170, 1
  store double %177, ptr %176, align 8
  %178 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %179 = load double, ptr %178, align 16
  %180 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %181 = load double, ptr %180, align 8
  invoke void @_ZN3JPH17VehicleConstraint15OverrideGravityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(408) %154, double %179, double %181)
          to label %182 unwind label %203

182:                                              ; preds = %171
  br label %231

183:                                              ; preds = %66
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %7, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %8, align 4
  br label %236

187:                                              ; preds = %68
  %188 = landingpad { ptr, i32 }
          cleanup
  %189 = extractvalue { ptr, i32 } %188, 0
  store ptr %189, ptr %7, align 8
  %190 = extractvalue { ptr, i32 } %188, 1
  store i32 %190, ptr %8, align 4
  br label %235

191:                                              ; preds = %108, %96, %94, %91, %80, %70
  %192 = landingpad { ptr, i32 }
          cleanup
  %193 = extractvalue { ptr, i32 } %192, 0
  store ptr %193, ptr %7, align 8
  %194 = extractvalue { ptr, i32 } %192, 1
  store i32 %194, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 64, ptr %11) #10
  br label %235

195:                                              ; preds = %123
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %7, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %8, align 4
  br label %234

199:                                              ; preds = %124
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %7, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %8, align 4
  br label %233

203:                                              ; preds = %229, %226, %171, %159, %155, %152, %149, %129, %125
  %204 = landingpad { ptr, i32 }
          cleanup
  %205 = extractvalue { ptr, i32 } %204, 0
  store ptr %205, ptr %7, align 8
  %206 = extractvalue { ptr, i32 } %204, 1
  store i32 %206, ptr %8, align 4
  br label %232

207:                                              ; preds = %133
  %208 = landingpad { ptr, i32 }
          cleanup
  %209 = extractvalue { ptr, i32 } %208, 0
  store ptr %209, ptr %7, align 8
  %210 = extractvalue { ptr, i32 } %208, 1
  store i32 %210, ptr %8, align 4
  br label %225

211:                                              ; preds = %142
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %7, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %8, align 4
  br label %224

215:                                              ; preds = %143
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %7, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %8, align 4
  br label %223

219:                                              ; preds = %144
  %220 = landingpad { ptr, i32 }
          cleanup
  %221 = extractvalue { ptr, i32 } %220, 0
  store ptr %221, ptr %7, align 8
  %222 = extractvalue { ptr, i32 } %220, 1
  store i32 %222, ptr %8, align 4
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %22) #10
  br label %223

223:                                              ; preds = %219, %215
  call void @llvm.lifetime.end.p0(i64 16, ptr %22) #10
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %20) #10
  br label %224

224:                                              ; preds = %223, %211
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #10
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %18) #10
  br label %225

225:                                              ; preds = %224, %207
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #10
  br label %232

226:                                              ; preds = %151
  %227 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %228 = invoke noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %227)
          to label %229 unwind label %203

229:                                              ; preds = %226
  invoke void @_ZN3JPH17VehicleConstraint20ResetGravityOverrideEv(ptr noundef nonnull align 16 dereferenceable(408) %228)
          to label %230 unwind label %203

230:                                              ; preds = %229
  br label %231

231:                                              ; preds = %230, %182
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %16) #10
  call void @llvm.lifetime.end.p0(i64 1184, ptr %16) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 144, ptr %9) #10
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %6) #10
  br label %237

232:                                              ; preds = %225, %203
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %16) #10
  br label %233

233:                                              ; preds = %232, %199
  call void @llvm.lifetime.end.p0(i64 1184, ptr %16) #10
  br label %234

234:                                              ; preds = %233, %195
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #10
  br label %235

235:                                              ; preds = %234, %191, %187
  call void @llvm.lifetime.end.p0(i64 144, ptr %9) #10
  br label %236

236:                                              ; preds = %235, %183
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %6) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #10
  br label %292

237:                                              ; preds = %231, %50
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 0, ptr %25, align 4, !tbaa !33
  br label %238

238:                                              ; preds = %288, %237
  %239 = load i32, ptr %25, align 4, !tbaa !33
  %240 = icmp ult i32 %239, 2
  br i1 %240, label %242, label %241

241:                                              ; preds = %238
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %291

242:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %243 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %244 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %243)
  %245 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408) %244)
  %246 = load i32, ptr %25, align 4, !tbaa !33
  %247 = zext i32 %246 to i64
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %245, i64 noundef %247)
  %249 = load ptr, ptr %248, align 8, !tbaa !5
  %250 = call noundef ptr @_ZNK3JPH5Wheel11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(404) %249)
  store ptr %250, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %27) #10
  %251 = getelementptr inbounds %class.MotorcycleTest, ptr %31, i32 0, i32 2
  %252 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %251)
  %253 = load i32, ptr %25, align 4, !tbaa !33
  %254 = call { double, double } @_ZN3JPH4Vec36sAxisYEv()
  %255 = getelementptr inbounds %"class.JPH::Vec3", ptr %28, i32 0, i32 0
  %256 = getelementptr inbounds %union.anon.20, ptr %255, i32 0, i32 0
  %257 = getelementptr inbounds { double, double }, ptr %256, i32 0, i32 0
  %258 = extractvalue { double, double } %254, 0
  store double %258, ptr %257, align 16
  %259 = getelementptr inbounds { double, double }, ptr %256, i32 0, i32 1
  %260 = extractvalue { double, double } %254, 1
  store double %260, ptr %259, align 8
  %261 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %262 = getelementptr inbounds %"class.JPH::Vec3", ptr %29, i32 0, i32 0
  %263 = getelementptr inbounds %union.anon.20, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 0
  %265 = extractvalue { double, double } %261, 0
  store double %265, ptr %264, align 16
  %266 = getelementptr inbounds { double, double }, ptr %263, i32 0, i32 1
  %267 = extractvalue { double, double } %261, 1
  store double %267, ptr %266, align 8
  %268 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %269 = load double, ptr %268, align 16
  %270 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %271 = load double, ptr %270, align 8
  %272 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 0
  %273 = load double, ptr %272, align 16
  %274 = getelementptr inbounds { double, double }, ptr %29, i32 0, i32 1
  %275 = load double, ptr %274, align 8
  call void @_ZNK3JPH17VehicleConstraint22GetWheelWorldTransformEjNS_4Vec3ES1_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16 %27, ptr noundef nonnull align 16 dereferenceable(408) %252, i32 noundef %253, double %269, double %271, double %273, double %275)
  %276 = getelementptr inbounds %class.Test, ptr %31, i32 0, i32 4
  %277 = load ptr, ptr %276, align 16, !tbaa !35
  %278 = load ptr, ptr %26, align 8, !tbaa !5
  %279 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %278, i32 0, i32 14
  %280 = load float, ptr %279, align 4, !tbaa !36
  %281 = fmul float 5.000000e-01, %280
  %282 = load ptr, ptr %26, align 8, !tbaa !5
  %283 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %282, i32 0, i32 13
  %284 = load float, ptr %283, align 8, !tbaa !45
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 @_ZN3JPH5Color6sGreenE, i64 4, i1 false), !tbaa.struct !46
  %285 = getelementptr inbounds %"class.JPH::Color", ptr %30, i32 0, i32 0
  %286 = getelementptr inbounds %union.anon.82, ptr %285, i32 0, i32 0
  %287 = load i32, ptr %286, align 4
  call void @_ZN3JPH13DebugRenderer12DrawCylinderERKNS_5Mat44EffNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320) %277, ptr noundef nonnull align 16 dereferenceable(64) %27, float noundef %281, float noundef %284, i32 %287, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %288

288:                                              ; preds = %242
  %289 = load i32, ptr %25, align 4, !tbaa !33
  %290 = add i32 %289, 1
  store i32 %290, ptr %25, align 4, !tbaa !33
  br label %238, !llvm.loop !47

291:                                              ; preds = %241
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #10
  ret void

292:                                              ; preds = %236
  %293 = load ptr, ptr %7, align 8
  %294 = load i32, ptr %8, align 4
  %295 = insertvalue { ptr, i32 } poison, ptr %293, 0
  %296 = insertvalue { ptr, i32 } %295, i32 %294, 1
  resume { ptr, i32 } %296
}

declare void @_ZN11VehicleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #5

declare void @_ZN3JPH13BodyInterface12ActivateBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH17VehicleConstraint13GetControllerEv(ptr noundef nonnull align 16 dereferenceable(408)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24WheeledVehicleController14SetDriverInputEffff(ptr noundef nonnull align 8 dereferenceable(256), float noundef, float noundef, float noundef, float noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20MotorcycleController20EnableLeanControllerEb(ptr noundef nonnull align 16 dereferenceable(312), i1 noundef zeroext) #6 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec34sOneEv() #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122)) #7 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK3JPH17VehicleConstraint10GetWorldUpEv(ptr noundef nonnull align 16 dereferenceable(408)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36)) unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172)) #6 align 2

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9), i8) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10), i16 noundef zeroext) unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #6 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17VehicleConstraint15OverrideGravityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(408), double, double) #6 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169)) unnamed_addr #2 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408)) #6 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) #7 align 2

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

declare void @_ZNK3JPH17VehicleConstraint22GetWheelWorldTransformEjNS_4Vec3ES1_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(408), i32 noundef, double, double, double, double) #5

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisYEv() #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisXEv() #3 align 2

declare void @_ZN3JPH13DebugRenderer12DrawCylinderERKNS_5Mat44EffNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), float noundef, float noundef, i32, i32 noundef, i32 noundef) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { alwaysinline 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 uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 nounwind willreturn memory(argmem: write) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !19, i64 232}
!10 = !{!"_ZTS14MotorcycleTest", !11, i64 0, !6, i64 136, !21, i64 144, !22, i64 160, !19, i64 224, !19, i64 228, !19, i64 232, !19, i64 236}
!11 = !{!"_ZTS11VehicleTest", !12, i64 0, !20, i64 112}
!12 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !14, i64 56}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !15, i64 0}
!15 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !6, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !6, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !19, i64 0, !16, i64 8}
!19 = !{!"float", !7, i64 0}
!20 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !16, i64 0, !16, i64 8, !6, i64 16}
!21 = !{!"_ZTSN3JPH3RefINS_17VehicleConstraintEEE", !6, i64 0}
!22 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!23 = !{!10, !19, i64 224}
!24 = !{!10, !19, i64 236}
!25 = !{!12, !6, i64 24}
!26 = !{!10, !6, i64 136}
!27 = !{!13, !13, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!12, !6, i64 16}
!31 = !{i64 0, i64 1, !32}
!32 = !{!7, !7, i64 0}
!33 = !{!34, !34, i64 0}
!34 = !{!"int", !7, i64 0}
!35 = !{!12, !6, i64 32}
!36 = !{!37, !19, i64 140}
!37 = !{!"_ZTSN3JPH13WheelSettingsE", !38, i64 0, !39, i64 8, !42, i64 16, !42, i64 32, !42, i64 48, !42, i64 64, !42, i64 80, !42, i64 96, !19, i64 112, !19, i64 116, !19, i64 120, !43, i64 124, !19, i64 136, !19, i64 140, !13, i64 144}
!38 = !{!"_ZTSN3JPH18SerializableObjectE"}
!39 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !40, i64 0}
!40 = !{!"_ZTSSt6atomicIjE", !41, i64 0}
!41 = !{!"_ZTSSt13__atomic_baseIjE", !34, i64 0}
!42 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!43 = !{!"_ZTSN3JPH14SpringSettingsE", !44, i64 0, !7, i64 4, !19, i64 8}
!44 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!45 = !{!37, !19, i64 136}
!46 = !{i64 0, i64 4, !32}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}


; 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::BroadPhaseLayer" = type { i8 }
%"class.JPH::Color" = type { %union.anon.82 }
%union.anon.82 = type { i32 }
%"class.JPH::SphereShape" = type { %"class.JPH::ConvexShape.base", float }
%"class.JPH::ConvexShape.base" = type <{ %"class.JPH::Shape.base", [6 x i8], %"class.JPH::RefConst.41", float }>
%"class.JPH::Shape.base" = type <{ ptr, %"class.JPH::RefTarget.40", [4 x i8], i64, i8, i8 }>
%"class.JPH::RefTarget.40" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::RefConst.41" = type { ptr }
%"struct.JPH::RShapeCast" = type { %"struct.JPH::ShapeCastT" }
%"struct.JPH::ShapeCastT" = type { ptr, %"class.JPH::Vec3", %"class.JPH::Mat44", %"class.JPH::Vec3", %"class.JPH::AABox" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon.20 }
%union.anon.20 = type { <4 x float> }
%"class.JPH::AABox" = type { %"class.JPH::Vec3", %"class.JPH::Vec3" }
%"class.JPH::ShapeCastSettings" = type <{ %"class.JPH::CollideSettingsBase", i8, i8, i8, i8, [12 x i8] }>
%"class.JPH::CollideSettingsBase" = type { i8, i8, float, float, %"class.JPH::Vec3" }
%"class.JPH::ClosestHitCollisionCollector" = type <{ %"class.JPH::CollisionCollector", [8 x i8], %"class.JPH::ShapeCastResult", i8, [15 x i8] }>
%"class.JPH::CollisionCollector" = type { ptr, float, ptr }
%"class.JPH::ShapeCastResult" = type <{ %"class.JPH::CollideShapeResult", float, i8, [11 x i8] }>
%"class.JPH::CollideShapeResult" = type { %"class.JPH::Vec3", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::SubShapeID", %"class.JPH::SubShapeID", %"class.JPH::BodyID", %"class.JPH::StaticArray.67", %"class.JPH::StaticArray.67" }
%"class.JPH::SubShapeID" = type { i32 }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::StaticArray.67" = type { i32, [12 x i8], [32 x %"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage"] }
%"struct.JPH::StaticArray<JPH::Vec3, 32>::Storage" = type { [16 x i8] }
%"class.JPH::SpecifiedBroadPhaseLayerFilter" = type <{ %"class.JPH::BroadPhaseLayerFilter", %"class.JPH::BroadPhaseLayer", [7 x i8] }>
%"class.JPH::BroadPhaseLayerFilter" = type { ptr }
%"class.JPH::SpecifiedObjectLayerFilter" = type <{ %"class.JPH::ObjectLayerFilter", i16, [6 x i8] }>
%"class.JPH::ObjectLayerFilter" = type { ptr }
%"class.JPH::BodyFilter" = type { ptr }
%"class.JPH::ShapeFilter" = type <{ ptr, %"class.JPH::BodyID", [4 x i8] }>

@_ZN14MotorcycleTest21sEnableLeanControllerE = external dso_local local_unnamed_addr global i8, align 1
@_ZN14MotorcycleTest16sOverrideGravityE = external dso_local local_unnamed_addr global i8, align 1
@_ZN16BroadPhaseLayersL10NON_MOVINGE = external hidden local_unnamed_addr constant %"class.JPH::BroadPhaseLayer", align 1
@_ZN3JPH5Color6sGreenE = external local_unnamed_addr global %"class.JPH::Color", align 4

; 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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN14MotorcycleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 16 dereferenceable(240) %0, ptr noundef nonnull align 16 dereferenceable(80) %1) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.JPH::SphereShape", align 8
  %4 = alloca %"struct.JPH::RShapeCast", align 16
  %5 = alloca %"class.JPH::Mat44", align 16
  %6 = alloca %"class.JPH::ShapeCastSettings", align 16
  %7 = alloca %"class.JPH::ClosestHitCollisionCollector", align 16
  %8 = alloca %"class.JPH::SpecifiedBroadPhaseLayerFilter", align 8
  %9 = alloca %"class.JPH::SpecifiedObjectLayerFilter", align 8
  %10 = alloca %"class.JPH::BodyFilter", align 8
  %11 = alloca %"class.JPH::ShapeFilter", align 8
  %12 = alloca %"class.JPH::Mat44", align 16
  tail call void @_ZN11VehicleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 8 dereferenceable(136) %0, ptr noundef nonnull align 16 dereferenceable(80) %1)
  tail call void @_ZN14MotorcycleTest17UpdateCameraPivotEv(ptr noundef nonnull align 16 dereferenceable(240) %0)
  %13 = getelementptr inbounds i8, ptr %0, i64 232
  %14 = load float, ptr %13, align 8, !tbaa !5
  %15 = fcmp une float %14, 0.000000e+00
  %16 = getelementptr inbounds i8, ptr %0, i64 224
  %17 = load float, ptr %16, align 16
  %18 = fcmp une float %17, 0.000000e+00
  %or.cond = select i1 %15, i1 true, i1 %18
  %19 = getelementptr inbounds i8, ptr %0, i64 236
  %20 = load float, ptr %19, align 4
  %21 = fcmp une float %20, 0.000000e+00
  %or.cond47 = select i1 %or.cond, i1 true, i1 %21
  br i1 %or.cond47, label %22, label %28

22:                                               ; preds = %2
  %23 = getelementptr inbounds i8, ptr %0, i64 24
  %24 = load ptr, ptr %23, align 8, !tbaa !22
  %25 = getelementptr inbounds i8, ptr %0, i64 136
  %26 = load ptr, ptr %25, align 8, !tbaa !23
  %27 = tail call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %26)
  tail call void @_ZN3JPH13BodyInterface12ActivateBodyERKNS_6BodyIDE(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 4 dereferenceable(4) %27)
  br label %28

28:                                               ; preds = %2, %22
  %29 = getelementptr inbounds i8, ptr %0, i64 144
  %30 = tail call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %31 = tail call noundef ptr @_ZN3JPH17VehicleConstraint13GetControllerEv(ptr noundef nonnull align 16 dereferenceable(408) %30)
  %32 = load float, ptr %16, align 16, !tbaa !24
  %33 = load float, ptr %13, align 8, !tbaa !5
  %34 = load float, ptr %19, align 4, !tbaa !25
  tail call void @_ZN3JPH24WheeledVehicleController14SetDriverInputEffff(ptr noundef nonnull align 8 dereferenceable(256) %31, float noundef %32, float noundef %33, float noundef %34, float noundef 0.000000e+00)
  %35 = load i8, ptr @_ZN14MotorcycleTest21sEnableLeanControllerE, align 1, !tbaa !26, !range !27, !noundef !28
  %36 = trunc nuw i8 %35 to i1
  tail call void @_ZN3JPH20MotorcycleController20EnableLeanControllerEb(ptr noundef nonnull align 16 dereferenceable(312) %31, i1 noundef zeroext %36)
  %37 = load i8, ptr @_ZN14MotorcycleTest16sOverrideGravityE, align 1, !tbaa !26, !range !27, !noundef !28
  %38 = trunc nuw i8 %37 to i1
  br i1 %38, label %39, label %110

39:                                               ; preds = %28
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %3) #9
  call void @_ZN3JPH11SphereShapeC2EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 8 dereferenceable(48) %3, float noundef 5.000000e-01, ptr noundef null)
  %40 = getelementptr inbounds i8, ptr %3, i64 8
  invoke void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %41 unwind label %86

41:                                               ; preds = %39
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %4) #9
  %42 = invoke { double, double } @_ZN3JPH4Vec34sOneEv()
          to label %43 unwind label %88

43:                                               ; preds = %41
  %44 = extractvalue { double, double } %42, 0
  %45 = extractvalue { double, double } %42, 1
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #9
  %46 = getelementptr inbounds i8, ptr %0, i64 136
  %47 = load ptr, ptr %46, align 8, !tbaa !23
  %48 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %47)
          to label %49 unwind label %90

49:                                               ; preds = %43
  %50 = extractvalue { double, double } %48, 0
  %51 = extractvalue { double, double } %48, 1
  invoke void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %5, double %50, double %51)
          to label %52 unwind label %90

52:                                               ; preds = %49
  %53 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %54 = call { double, double } @_ZNK3JPH17VehicleConstraint10GetWorldUpEv(ptr noundef nonnull align 16 dereferenceable(408) %53)
  %55 = extractvalue { double, double } %54, 0
  %56 = extractvalue { double, double } %54, 1
  %57 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef -3.000000e+00, double %55, double %56)
          to label %58 unwind label %90

58:                                               ; preds = %52
  %59 = extractvalue { double, double } %57, 0
  %60 = extractvalue { double, double } %57, 1
  invoke void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144) %4, ptr noundef nonnull %3, double %44, double %45, ptr noundef nonnull align 16 dereferenceable(64) %5, double %59, double %60)
          to label %61 unwind label %90

61:                                               ; preds = %58
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %6) #9
  invoke void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36) %6)
          to label %62 unwind label %92

62:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 1184, ptr nonnull %7) #9
  invoke void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %7)
          to label %63 unwind label %94

63:                                               ; preds = %62
  %64 = getelementptr inbounds i8, ptr %0, i64 16
  %65 = load ptr, ptr %64, align 16, !tbaa !29
  %66 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3JPH13PhysicsSystem19GetNarrowPhaseQueryEv(ptr noundef nonnull align 16 dereferenceable(1172) %65)
  %67 = load ptr, ptr %46, align 8, !tbaa !23
  %68 = invoke { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122) %67)
          to label %69 unwind label %96

69:                                               ; preds = %63
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #9
  %.sroa.012.0.copyload = load i8, ptr @_ZN16BroadPhaseLayersL10NON_MOVINGE, align 1, !tbaa !30
  call void @_ZN3JPH30SpecifiedBroadPhaseLayerFilterC2ENS_15BroadPhaseLayerE(ptr noundef nonnull align 8 dereferenceable(9) %8, i8 %.sroa.012.0.copyload)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #9
  call void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10) %9, i16 noundef zeroext 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  store i64 0, ptr %10, align 8
  call void @_ZN3JPH10BodyFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #9
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %11, i8 0, i64 16, i1 false)
  invoke void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12) %11)
          to label %70 unwind label %98

70:                                               ; preds = %69
  %71 = extractvalue { double, double } %68, 1
  %72 = extractvalue { double, double } %68, 0
  invoke void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16) %66, ptr noundef nonnull align 16 dereferenceable(144) %4, ptr noundef nonnull align 16 dereferenceable(36) %6, double %72, double %71, ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(12) %11)
          to label %73 unwind label %100

73:                                               ; preds = %70
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %11) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %8) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #9
  %74 = call noundef zeroext i1 @_ZNK3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEE6HadHitEv(ptr noundef nonnull align 16 dereferenceable(1169) %7)
  %75 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  br i1 %74, label %76, label %103

76:                                               ; preds = %73
  %77 = getelementptr inbounds i8, ptr %7, i64 64
  %78 = invoke { double, double } @_ZNK3JPH4Vec310NormalizedEv(ptr noundef nonnull align 16 dereferenceable(16) %77)
          to label %79 unwind label %96

79:                                               ; preds = %76
  %80 = extractvalue { double, double } %78, 0
  %81 = extractvalue { double, double } %78, 1
  %82 = invoke { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef 0x40239EB860000000, double %80, double %81)
          to label %83 unwind label %96

83:                                               ; preds = %79
  %84 = extractvalue { double, double } %82, 0
  %85 = extractvalue { double, double } %82, 1
  call void @_ZN3JPH17VehicleConstraint15OverrideGravityENS_4Vec3E(ptr noundef nonnull align 16 dereferenceable(408) %75, double %84, double %85)
  br label %104

86:                                               ; preds = %39
  %87 = landingpad { ptr, i32 }
          cleanup
  br label %109

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

90:                                               ; preds = %58, %52, %49, %43
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #9
  br label %108

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

94:                                               ; preds = %62
  %95 = landingpad { ptr, i32 }
          cleanup
  br label %106

96:                                               ; preds = %103, %79, %76, %63
  %97 = landingpad { ptr, i32 }
          cleanup
  br label %105

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

100:                                              ; preds = %70
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH11ShapeFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %11) #9
  br label %102

102:                                              ; preds = %100, %98
  %.pn = phi { ptr, i32 } [ %101, %100 ], [ %99, %98 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #9
  call void @_ZN3JPH10BodyFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  call void @_ZN3JPH17ObjectLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(10) %9) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #9
  call void @_ZN3JPH21BroadPhaseLayerFilterD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %8) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #9
  br label %105

103:                                              ; preds = %73
  invoke void @_ZN3JPH17VehicleConstraint20ResetGravityOverrideEv(ptr noundef nonnull align 16 dereferenceable(408) %75)
          to label %104 unwind label %96

104:                                              ; preds = %103, %83
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %7) #9
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %4) #9
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #9
  br label %110

105:                                              ; preds = %102, %96
  %.pn37 = phi { ptr, i32 } [ %97, %96 ], [ %.pn, %102 ]
  call void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEED2Ev(ptr noundef nonnull align 16 dereferenceable(1169) %7) #9
  br label %106

106:                                              ; preds = %105, %94
  %.pn37.pn = phi { ptr, i32 } [ %.pn37, %105 ], [ %95, %94 ]
  call void @llvm.lifetime.end.p0(i64 1184, ptr nonnull %7) #9
  br label %107

107:                                              ; preds = %106, %92
  %.pn37.pn.pn = phi { ptr, i32 } [ %.pn37.pn, %106 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %6) #9
  br label %108

108:                                              ; preds = %107, %90, %88
  %.pn37.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn, %107 ], [ %91, %90 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %4) #9
  br label %109

109:                                              ; preds = %108, %86
  %.pn37.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn.pn, %108 ], [ %87, %86 ]
  call void @_ZN3JPH11ConvexShapeD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %3) #9
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %3) #9
  resume { ptr, i32 } %.pn37.pn.pn.pn.pn

110:                                              ; preds = %104, %28
  %111 = getelementptr inbounds i8, ptr %0, i64 32
  %112 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %113 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408) %112)
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef 0)
  %115 = load ptr, ptr %114, align 8, !tbaa !31
  %116 = call noundef ptr @_ZNK3JPH5Wheel11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(404) %115)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #9
  %117 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %118 = call { double, double } @_ZN3JPH4Vec36sAxisYEv()
  %119 = extractvalue { double, double } %118, 0
  %120 = extractvalue { double, double } %118, 1
  %121 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %122 = extractvalue { double, double } %121, 0
  %123 = extractvalue { double, double } %121, 1
  call void @_ZNK3JPH17VehicleConstraint22GetWheelWorldTransformEjNS_4Vec3ES1_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %12, ptr noundef nonnull align 16 dereferenceable(408) %117, i32 noundef 0, double %119, double %120, double %122, double %123)
  %124 = load ptr, ptr %111, align 16, !tbaa !32
  %125 = getelementptr inbounds i8, ptr %116, i64 140
  %126 = load float, ptr %125, align 4, !tbaa !33
  %127 = fmul float %126, 5.000000e-01
  %128 = getelementptr inbounds i8, ptr %116, i64 136
  %129 = load float, ptr %128, align 8, !tbaa !43
  %.sroa.0.0.copyload = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !30
  call void @_ZN3JPH13DebugRenderer12DrawCylinderERKNS_5Mat44EffNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320) %124, ptr noundef nonnull align 16 dereferenceable(64) %12, float noundef %127, float noundef %129, i32 %.sroa.0.0.copyload, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  %130 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %131 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH17VehicleConstraint9GetWheelsEv(ptr noundef nonnull align 16 dereferenceable(408) %130)
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH5ArrayIPNS_5WheelENS_12STLAllocatorIS2_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %131, i64 noundef 1)
  %133 = load ptr, ptr %132, align 8, !tbaa !31
  %134 = call noundef ptr @_ZNK3JPH5Wheel11GetSettingsEv(ptr noundef nonnull align 16 dereferenceable(404) %133)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #9
  %135 = call noundef ptr @_ZNK3JPH3RefINS_17VehicleConstraintEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29)
  %136 = call { double, double } @_ZN3JPH4Vec36sAxisYEv()
  %137 = extractvalue { double, double } %136, 0
  %138 = extractvalue { double, double } %136, 1
  %139 = call { double, double } @_ZN3JPH4Vec36sAxisXEv()
  %140 = extractvalue { double, double } %139, 0
  %141 = extractvalue { double, double } %139, 1
  call void @_ZNK3JPH17VehicleConstraint22GetWheelWorldTransformEjNS_4Vec3ES1_(ptr dead_on_unwind nonnull writable sret(%"class.JPH::Mat44") align 16 %12, ptr noundef nonnull align 16 dereferenceable(408) %135, i32 noundef 1, double %137, double %138, double %140, double %141)
  %142 = load ptr, ptr %111, align 16, !tbaa !32
  %143 = getelementptr inbounds i8, ptr %134, i64 140
  %144 = load float, ptr %143, align 4, !tbaa !33
  %145 = fmul float %144, 5.000000e-01
  %146 = getelementptr inbounds i8, ptr %134, i64 136
  %147 = load float, ptr %146, align 8, !tbaa !43
  %.sroa.0.0.copyload.1 = load i32, ptr @_ZN3JPH5Color6sGreenE, align 4, !tbaa !30
  call void @_ZN3JPH13DebugRenderer12DrawCylinderERKNS_5Mat44EffNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320) %142, ptr noundef nonnull align 16 dereferenceable(64) %12, float noundef %145, float noundef %147, i32 %.sroa.0.0.copyload.1, i32 noundef 0, i32 noundef 0)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #9
  ret void
}

declare void @_ZN11VehicleTest16PrePhysicsUpdateERKN4Test15PreUpdateParamsE(ptr noundef nonnull align 8 dereferenceable(136), ptr noundef nonnull align 16 dereferenceable(80)) unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3JPH17VehicleConstraint13GetControllerEv(ptr noundef nonnull align 16 dereferenceable(408)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH24WheeledVehicleController14SetDriverInputEffff(ptr noundef nonnull align 8 dereferenceable(256), float noundef, float noundef, float noundef, float noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH20MotorcycleController20EnableLeanControllerEb(ptr noundef nonnull align 16 dereferenceable(312), i1 noundef zeroext) local_unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZNK3JPH9RefTargetINS_5ShapeEE11SetEmbeddedEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec34sOneEv() local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH5Mat4412sTranslationENS_4Vec3E(ptr dead_on_unwind noalias writable sret(%"class.JPH::Mat44") align 16, double, double) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Body11GetPositionEv(ptr noundef nonnull align 16 dereferenceable(122)) local_unnamed_addr #6 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPHmlEfNS_4Vec3E(float noundef, double, double) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { double, double } @_ZNK3JPH17VehicleConstraint10GetWorldUpEv(ptr noundef nonnull align 16 dereferenceable(408)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH10RShapeCastCI2NS_10ShapeCastTINS_4Vec3ENS_5Mat44ES0_EEEPKNS_5ShapeES2_RKS3_S2_(ptr noundef nonnull align 16 dereferenceable(144), ptr noundef, double, double, ptr noundef nonnull align 16 dereferenceable(64), double, double) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH17ShapeCastSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(36)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH28ClosestHitCollisionCollectorINS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEEEC2Ev(ptr noundef nonnull align 16 dereferenceable(1169)) unnamed_addr #6 align 2

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

declare void @_ZNK3JPH16NarrowPhaseQuery9CastShapeERKNS_10RShapeCastERKNS_17ShapeCastSettingsENS_4Vec3ERNS_18CollisionCollectorINS_15ShapeCastResultENS_33CollisionCollectorTraitsCastShapeEEERKNS_21BroadPhaseLayerFilterERKNS_17ObjectLayerFilterERKNS_10BodyFilterERKNS_11ShapeFilterE(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 16 dereferenceable(144), ptr noundef nonnull align 16 dereferenceable(36), double, double, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH26SpecifiedObjectLayerFilterC2Et(ptr noundef nonnull align 8 dereferenceable(10), i16 noundef zeroext) unnamed_addr #5 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3JPH11ShapeFilterC2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #6 align 2

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZNK3JPH17VehicleConstraint22GetWheelWorldTransformEjNS_4Vec3ES1_(ptr dead_on_unwind writable sret(%"class.JPH::Mat44") align 16, ptr noundef nonnull align 16 dereferenceable(408), i32 noundef, double, double, double, double) local_unnamed_addr #4

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisYEv() local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec36sAxisXEv() local_unnamed_addr #2 align 2

declare void @_ZN3JPH13DebugRenderer12DrawCylinderERKNS_5Mat44EffNS_5ColorENS0_11ECastShadowENS0_9EDrawModeE(ptr noundef nonnull align 8 dereferenceable(320), ptr noundef nonnull align 16 dereferenceable(64), float noundef, float noundef, i32, i32 noundef, i32 noundef) local_unnamed_addr #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { 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 #7 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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, !18, i64 232}
!6 = !{!"_ZTS14MotorcycleTest", !7, i64 0, !9, i64 136, !20, i64 144, !21, i64 160, !18, i64 224, !18, i64 228, !18, i64 232, !18, i64 236}
!7 = !{!"_ZTS11VehicleTest", !8, i64 0, !19, i64 112}
!8 = !{!"_ZTS4Test", !9, i64 8, !9, i64 16, !9, i64 24, !9, i64 32, !9, i64 40, !12, i64 48, !13, i64 56}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"bool", !10, i64 0}
!13 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !14, i64 0}
!14 = !{!"_ZTSSt10_HashtableIN3JPH6BodyIDESt4pairIKS1_NSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEEESaISB_ENSt8__detail10_Select1stESt8equal_toIS1_ESt4hashIS1_ENSD_18_Mod_range_hashingENSD_20_Default_ranged_hashENSD_20_Prime_rehash_policyENSD_17_Hashtable_traitsILb1ELb0ELb1EEEE", !9, i64 0, !15, i64 8, !16, i64 16, !15, i64 24, !17, i64 32, !9, i64 48}
!15 = !{!"long", !10, i64 0}
!16 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !9, i64 0}
!17 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !18, i64 0, !15, i64 8}
!18 = !{!"float", !10, i64 0}
!19 = !{!"_ZTSN3JPH5ArrayIN11VehicleTest4LineENS_12STLAllocatorIS2_EEEE", !15, i64 0, !15, i64 8, !9, i64 16}
!20 = !{!"_ZTSN3JPH3RefINS_17VehicleConstraintEEE", !9, i64 0}
!21 = !{!"_ZTSN3JPH5Mat44E", !10, i64 0}
!22 = !{!8, !9, i64 24}
!23 = !{!6, !9, i64 136}
!24 = !{!6, !18, i64 224}
!25 = !{!6, !18, i64 236}
!26 = !{!12, !12, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!8, !9, i64 16}
!30 = !{!10, !10, i64 0}
!31 = !{!9, !9, i64 0}
!32 = !{!8, !9, i64 32}
!33 = !{!34, !18, i64 140}
!34 = !{!"_ZTSN3JPH13WheelSettingsE", !35, i64 0, !36, i64 8, !40, i64 16, !40, i64 32, !40, i64 48, !40, i64 64, !40, i64 80, !40, i64 96, !18, i64 112, !18, i64 116, !18, i64 120, !41, i64 124, !18, i64 136, !18, i64 140, !12, i64 144}
!35 = !{!"_ZTSN3JPH18SerializableObjectE"}
!36 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !37, i64 0}
!37 = !{!"_ZTSSt6atomicIjE", !38, i64 0}
!38 = !{!"_ZTSSt13__atomic_baseIjE", !39, i64 0}
!39 = !{!"int", !10, i64 0}
!40 = !{!"_ZTSN3JPH4Vec3E", !10, i64 0}
!41 = !{!"_ZTSN3JPH14SpringSettingsE", !42, i64 0, !10, i64 4, !18, i64 8}
!42 = !{!"_ZTSN3JPH11ESpringModeE", !10, i64 0}
!43 = !{!34, !18, i64 136}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,SROAPass,SimplifyCFGPass,TailCallElimPass