; LLVM IR from jrouwe/JoltPhysics :: Samples/Tests/Vehicle/VehicleStressTest.ll (ZN17VehicleStressTest10InitializeEv)

; 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::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.36", %"class.JPH::RefConst.32" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.31 }
%union.anon.31 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.33", i32, i32 }
%"class.JPH::RefConst.33" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.36" = type { ptr }
%"class.JPH::RefConst.32" = type { ptr }
%"class.JPH::BodyID" = type { i32 }
%"class.JPH::VehicleConstraintSettings" = type { %"class.JPH::ConstraintSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::Array.40", %"class.JPH::Array.23", %"class.JPH::Ref.43" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.39", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.39" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Array.40" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"class.JPH::Ref.43" = type { ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.JPH::Ref.49" = type { ptr }
%"class.JPH::Ref" = type { ptr }
%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::WheelSettings" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.44", [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::RefTarget.44" = type { %"struct.std::atomic" }
%"class.JPH::SpringSettings" = type { i8, %union.anon.45, float }
%union.anon.45 = type { float }
%"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.44", [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::LinearCurve" = type { %"class.JPH::Array.46" }
%"class.JPH::Array.46" = type { i64, i64, ptr }
%"class.JPH::WheeledVehicleControllerSettings" = type <{ %"class.JPH::VehicleControllerSettings.base", [4 x i8], %"class.JPH::VehicleEngineSettings", %"class.JPH::VehicleTransmissionSettings", %"class.JPH::Array.54", float, [4 x i8] }>
%"class.JPH::VehicleControllerSettings.base" = type <{ %"class.JPH::SerializableObject", %"class.JPH::RefTarget.50" }>
%"class.JPH::RefTarget.50" = type { %"struct.std::atomic" }
%"class.JPH::VehicleEngineSettings" = type { float, float, float, %"class.JPH::LinearCurve", float, float }
%"class.JPH::VehicleTransmissionSettings" = type { i8, %"class.JPH::Array.51", %"class.JPH::Array.51", float, float, float, float, float, float }
%"class.JPH::Array.51" = type { i64, i64, ptr }
%"class.JPH::Array.54" = type { i64, i64, ptr }
%"class.JPH::VehicleDifferentialSettings" = type { i32, i32, float, float, float, float }
%class.VehicleStressTest = type <{ %class.Test, %"class.JPH::Array", float, float, float, [4 x i8] }>
%"class.JPH::Array" = type { i64, i64, ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN17VehicleStressTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(148) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"class.JPH::BodyCreationSettings", align 16
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::Quat", align 16
  %9 = alloca %"class.JPH::BodyID", align 4
  %10 = alloca %"class.JPH::BodyCreationSettings", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Quat", align 16
  %14 = alloca %"class.JPH::BodyID", align 4
  %15 = alloca %"class.JPH::BodyCreationSettings", align 16
  %16 = alloca %"class.JPH::Vec3", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Quat", align 16
  %19 = alloca %"class.JPH::BodyID", align 4
  %20 = alloca %"class.JPH::BodyCreationSettings", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Quat", align 16
  %24 = alloca %"class.JPH::BodyID", align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca %"class.JPH::RefConst.32", align 8
  %32 = alloca %"class.JPH::Vec3", align 16
  %33 = alloca %"class.JPH::BodyCreationSettings", align 16
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Quat", align 16
  %36 = alloca %"class.JPH::VehicleConstraintSettings", align 16
  %37 = alloca ptr, align 8
  %38 = alloca %"class.JPH::Vec3", align 16
  %39 = alloca ptr, align 8
  %40 = alloca %"class.JPH::Vec3", align 16
  %41 = alloca ptr, align 8
  %42 = alloca %"class.JPH::Vec3", align 16
  %43 = alloca ptr, align 8
  %44 = alloca %"class.JPH::Vec3", align 16
  %45 = alloca %"class.std::initializer_list", align 8
  %46 = alloca [4 x %"class.JPH::Ref.49"], align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca %"class.JPH::Vec3", align 16
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca %"class.JPH::Vec3", align 16
  %61 = alloca %"class.JPH::Ref", align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %62 = load ptr, ptr %2, align 8
  %63 = call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %62)
  %64 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %3) #11
  %66 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 5.000000e+01, float noundef 5.000000e+00, float noundef 5.000000e-01)
          to label %67 unwind label %291

67:                                               ; preds = %1
  %68 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 0
  %69 = load double, ptr %68, align 16
  %70 = getelementptr inbounds { double, double }, ptr %4, i32 0, i32 1
  %71 = load double, ptr %70, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %66, double %69, double %71, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %72 unwind label %291

72:                                               ; preds = %67
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef -5.000000e+01)
  %73 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %74 = getelementptr inbounds %"class.JPH::Quat", ptr %8, i32 0, i32 0
  %75 = getelementptr inbounds %"class.JPH::Vec4", ptr %74, i32 0, i32 0
  %76 = getelementptr inbounds %union.anon.31, ptr %75, i32 0, i32 0
  %77 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 0
  %78 = extractvalue { double, double } %73, 0
  store double %78, ptr %77, align 16
  %79 = getelementptr inbounds { double, double }, ptr %76, i32 0, i32 1
  %80 = extractvalue { double, double } %73, 1
  store double %80, ptr %79, align 8
  %81 = getelementptr inbounds { double, double }, ptr %7, i32 0, i32 0
  %82 = load double, ptr %81, align 16
  %83 = getelementptr inbounds { double, double }, ptr %7, i32 0, i32 1
  %84 = load double, ptr %83, align 8
  %85 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 0
  %86 = load double, ptr %85, align 16
  %87 = getelementptr inbounds { double, double }, ptr %8, i32 0, i32 1
  %88 = load double, ptr %87, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %3, ptr noundef %66, double %82, double %84, double %86, double %88, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %89 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef nonnull align 16 dereferenceable(256) %3, i32 noundef 1)
          to label %90 unwind label %295

90:                                               ; preds = %72
  %91 = getelementptr inbounds %"class.JPH::BodyID", ptr %9, i32 0, i32 0
  store i32 %89, ptr %91, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %3) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %3) #11
  %92 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %93 = load ptr, ptr %92, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %10) #11
  %94 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %11, float noundef 5.000000e+01, float noundef 5.000000e+00, float noundef 5.000000e-01)
          to label %95 unwind label %300

95:                                               ; preds = %90
  %96 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %97 = load double, ptr %96, align 16
  %98 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %99 = load double, ptr %98, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %94, double %97, double %99, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %100 unwind label %300

100:                                              ; preds = %95
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 5.000000e+01)
  %101 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %102 = getelementptr inbounds %"class.JPH::Quat", ptr %13, i32 0, i32 0
  %103 = getelementptr inbounds %"class.JPH::Vec4", ptr %102, i32 0, i32 0
  %104 = getelementptr inbounds %union.anon.31, ptr %103, i32 0, i32 0
  %105 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 0
  %106 = extractvalue { double, double } %101, 0
  store double %106, ptr %105, align 16
  %107 = getelementptr inbounds { double, double }, ptr %104, i32 0, i32 1
  %108 = extractvalue { double, double } %101, 1
  store double %108, ptr %107, align 8
  %109 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %110 = load double, ptr %109, align 16
  %111 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %112 = load double, ptr %111, align 8
  %113 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %114 = load double, ptr %113, align 16
  %115 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %116 = load double, ptr %115, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %10, ptr noundef %94, double %110, double %112, double %114, double %116, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %117 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %93, ptr noundef nonnull align 16 dereferenceable(256) %10, i32 noundef 1)
          to label %118 unwind label %304

118:                                              ; preds = %100
  %119 = getelementptr inbounds %"class.JPH::BodyID", ptr %14, i32 0, i32 0
  store i32 %117, ptr %119, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #11
  %120 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %121 = load ptr, ptr %120, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %15) #11
  %122 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %16, float noundef 5.000000e-01, float noundef 5.000000e+00, float noundef 5.000000e+01)
          to label %123 unwind label %309

123:                                              ; preds = %118
  %124 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %125 = load double, ptr %124, align 16
  %126 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %127 = load double, ptr %126, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %122, double %125, double %127, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %128 unwind label %309

128:                                              ; preds = %123
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %17, float noundef -5.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %129 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %130 = getelementptr inbounds %"class.JPH::Quat", ptr %18, i32 0, i32 0
  %131 = getelementptr inbounds %"class.JPH::Vec4", ptr %130, i32 0, i32 0
  %132 = getelementptr inbounds %union.anon.31, ptr %131, i32 0, i32 0
  %133 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 0
  %134 = extractvalue { double, double } %129, 0
  store double %134, ptr %133, align 16
  %135 = getelementptr inbounds { double, double }, ptr %132, i32 0, i32 1
  %136 = extractvalue { double, double } %129, 1
  store double %136, ptr %135, align 8
  %137 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %138 = load double, ptr %137, align 16
  %139 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %140 = load double, ptr %139, align 8
  %141 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 0
  %142 = load double, ptr %141, align 16
  %143 = getelementptr inbounds { double, double }, ptr %18, i32 0, i32 1
  %144 = load double, ptr %143, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %15, ptr noundef %122, double %138, double %140, double %142, double %144, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %145 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %121, ptr noundef nonnull align 16 dereferenceable(256) %15, i32 noundef 1)
          to label %146 unwind label %313

146:                                              ; preds = %128
  %147 = getelementptr inbounds %"class.JPH::BodyID", ptr %19, i32 0, i32 0
  store i32 %145, ptr %147, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %15) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %15) #11
  %148 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %149 = load ptr, ptr %148, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %20) #11
  %150 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 5.000000e-01, float noundef 5.000000e+00, float noundef 5.000000e+01)
          to label %151 unwind label %318

151:                                              ; preds = %146
  %152 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 0
  %153 = load double, ptr %152, align 16
  %154 = getelementptr inbounds { double, double }, ptr %21, i32 0, i32 1
  %155 = load double, ptr %154, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %150, double %153, double %155, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %156 unwind label %318

156:                                              ; preds = %151
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %22, float noundef 5.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %157 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %158 = getelementptr inbounds %"class.JPH::Quat", ptr %23, i32 0, i32 0
  %159 = getelementptr inbounds %"class.JPH::Vec4", ptr %158, i32 0, i32 0
  %160 = getelementptr inbounds %union.anon.31, ptr %159, i32 0, i32 0
  %161 = getelementptr inbounds { double, double }, ptr %160, i32 0, i32 0
  %162 = extractvalue { double, double } %157, 0
  store double %162, ptr %161, align 16
  %163 = getelementptr inbounds { double, double }, ptr %160, i32 0, i32 1
  %164 = extractvalue { double, double } %157, 1
  store double %164, ptr %163, align 8
  %165 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %166 = load double, ptr %165, align 16
  %167 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %168 = load double, ptr %167, align 8
  %169 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 0
  %170 = load double, ptr %169, align 16
  %171 = getelementptr inbounds { double, double }, ptr %23, i32 0, i32 1
  %172 = load double, ptr %171, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %20, ptr noundef %150, double %166, double %168, double %170, double %172, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %173 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %149, ptr noundef nonnull align 16 dereferenceable(256) %20, i32 noundef 1)
          to label %174 unwind label %322

174:                                              ; preds = %156
  %175 = getelementptr inbounds %"class.JPH::BodyID", ptr %24, i32 0, i32 0
  store i32 %173, ptr %175, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #11
  store float 0x3FD3333340000000, ptr %25, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #11
  store float 0x3FB99999A0000000, ptr %26, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #11
  store float 2.000000e+00, ptr %27, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  store float 0x3FECCCCCC0000000, ptr %28, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #11
  store float 0x3FC99999A0000000, ptr %29, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #11
  %176 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  store float %176, ptr %30, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  %177 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %32, float noundef 0x3FECCCCCC0000000, float noundef 0x3FC99999A0000000, float noundef 2.000000e+00)
          to label %178 unwind label %327

178:                                              ; preds = %174
  %179 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 0
  %180 = load double, ptr %179, align 16
  %181 = getelementptr inbounds { double, double }, ptr %32, i32 0, i32 1
  %182 = load double, ptr %181, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %177, double %180, double %182, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %183 unwind label %327

183:                                              ; preds = %178
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef %177)
  call void @llvm.lifetime.start.p0(i64 256, ptr %33) #11
  %184 = invoke noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %31)
          to label %185 unwind label %331

185:                                              ; preds = %183
  %186 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %187 unwind label %331

187:                                              ; preds = %185
  %188 = getelementptr inbounds %"class.JPH::Vec3", ptr %34, i32 0, i32 0
  %189 = getelementptr inbounds %union.anon, ptr %188, i32 0, i32 0
  %190 = getelementptr inbounds { double, double }, ptr %189, i32 0, i32 0
  %191 = extractvalue { double, double } %186, 0
  store double %191, ptr %190, align 16
  %192 = getelementptr inbounds { double, double }, ptr %189, i32 0, i32 1
  %193 = extractvalue { double, double } %186, 1
  store double %193, ptr %192, align 8
  %194 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %195 unwind label %331

195:                                              ; preds = %187
  %196 = getelementptr inbounds %"class.JPH::Quat", ptr %35, i32 0, i32 0
  %197 = getelementptr inbounds %"class.JPH::Vec4", ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds %union.anon.31, ptr %197, i32 0, i32 0
  %199 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 0
  %200 = extractvalue { double, double } %194, 0
  store double %200, ptr %199, align 16
  %201 = getelementptr inbounds { double, double }, ptr %198, i32 0, i32 1
  %202 = extractvalue { double, double } %194, 1
  store double %202, ptr %201, align 8
  %203 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %204 = load double, ptr %203, align 16
  %205 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %206 = load double, ptr %205, align 8
  %207 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 0
  %208 = load double, ptr %207, align 16
  %209 = getelementptr inbounds { double, double }, ptr %35, i32 0, i32 1
  %210 = load double, ptr %209, align 8
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %33, ptr noundef %184, double %204, double %206, double %208, double %210, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %211 unwind label %331

211:                                              ; preds = %195
  %212 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %33, i32 0, i32 26
  store i8 1, ptr %212, align 16, !tbaa !19
  %213 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %33, i32 0, i32 28
  %214 = getelementptr inbounds %"class.JPH::MassProperties", ptr %213, i32 0, i32 0
  store float 1.500000e+03, ptr %214, align 16, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 144, ptr %36) #11
  invoke void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %36)
          to label %215 unwind label %335

215:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  %216 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %217 unwind label %339

217:                                              ; preds = %215
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %216)
          to label %218 unwind label %343

218:                                              ; preds = %217
  store ptr %216, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %38, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0x3FF6666660000000)
          to label %219 unwind label %347

219:                                              ; preds = %218
  %220 = load ptr, ptr %37, align 8, !tbaa !5
  %221 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %220, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %221, ptr align 16 %38, i64 16, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #11
  %222 = load ptr, ptr %37, align 8, !tbaa !5
  %223 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %222, i32 0, i32 3
  store float 0x3FE0C15240000000, ptr %223, align 4, !tbaa !39
  %224 = load ptr, ptr %37, align 8, !tbaa !5
  %225 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %224, i32 0, i32 7
  store float 0.000000e+00, ptr %225, align 4, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #11
  %226 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %227 unwind label %351

227:                                              ; preds = %219
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %226)
          to label %228 unwind label %355

228:                                              ; preds = %227
  store ptr %226, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %40, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0x3FF6666660000000)
          to label %229 unwind label %359

229:                                              ; preds = %228
  %230 = load ptr, ptr %39, align 8, !tbaa !5
  %231 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %230, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %231, ptr align 16 %40, i64 16, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  %232 = load ptr, ptr %39, align 8, !tbaa !5
  %233 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %232, i32 0, i32 3
  store float 0x3FE0C15240000000, ptr %233, align 4, !tbaa !39
  %234 = load ptr, ptr %39, align 8, !tbaa !5
  %235 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %234, i32 0, i32 7
  store float 0.000000e+00, ptr %235, align 4, !tbaa !50
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %236 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %237 unwind label %363

237:                                              ; preds = %229
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %236)
          to label %238 unwind label %367

238:                                              ; preds = %237
  store ptr %236, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %42, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0xBFF6666660000000)
          to label %239 unwind label %371

239:                                              ; preds = %238
  %240 = load ptr, ptr %41, align 8, !tbaa !5
  %241 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %240, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %241, ptr align 16 %42, i64 16, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  %242 = load ptr, ptr %41, align 8, !tbaa !5
  %243 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %242, i32 0, i32 3
  store float 0.000000e+00, ptr %243, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #11
  %244 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %245 unwind label %375

245:                                              ; preds = %239
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %244)
          to label %246 unwind label %379

246:                                              ; preds = %245
  store ptr %244, ptr %43, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %44, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0xBFF6666660000000)
          to label %247 unwind label %383

247:                                              ; preds = %246
  %248 = load ptr, ptr %43, align 8, !tbaa !5
  %249 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %248, i32 0, i32 3
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %249, ptr align 16 %44, i64 16, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  %250 = load ptr, ptr %43, align 8, !tbaa !5
  %251 = getelementptr inbounds %"class.JPH::WheelSettingsWV", ptr %250, i32 0, i32 3
  store float 0.000000e+00, ptr %251, align 4, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #11
  store ptr %46, ptr %47, align 8
  %252 = load ptr, ptr %37, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef %252)
          to label %253 unwind label %387

253:                                              ; preds = %247
  %254 = getelementptr inbounds %"class.JPH::Ref.49", ptr %46, i64 1
  store ptr %254, ptr %47, align 8
  %255 = load ptr, ptr %39, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %254, ptr noundef %255)
          to label %256 unwind label %387

256:                                              ; preds = %253
  %257 = getelementptr inbounds %"class.JPH::Ref.49", ptr %46, i64 2
  store ptr %257, ptr %47, align 8
  %258 = load ptr, ptr %41, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %257, ptr noundef %258)
          to label %259 unwind label %387

259:                                              ; preds = %256
  %260 = getelementptr inbounds %"class.JPH::Ref.49", ptr %46, i64 3
  store ptr %260, ptr %47, align 8
  %261 = load ptr, ptr %43, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %260, ptr noundef %261)
          to label %262 unwind label %387

262:                                              ; preds = %259
  %263 = getelementptr inbounds %"class.std::initializer_list", ptr %45, i32 0, i32 0
  store ptr %46, ptr %263, align 8, !tbaa !51
  %264 = getelementptr inbounds %"class.std::initializer_list", ptr %45, i32 0, i32 1
  store i64 4, ptr %264, align 8, !tbaa !53
  %265 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %36, i32 0, i32 4
  %266 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8
  %268 = getelementptr inbounds { ptr, i64 }, ptr %45, i32 0, i32 1
  %269 = load i64, ptr %268, align 8
  %270 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEaSESt16initializer_listIS3_E(ptr noundef nonnull align 8 dereferenceable(24) %265, ptr %267, i64 %269)
          to label %271 unwind label %398

271:                                              ; preds = %262
  %272 = getelementptr inbounds [4 x %"class.JPH::Ref.49"], ptr %46, i32 0, i32 0
  %273 = getelementptr inbounds %"class.JPH::Ref.49", ptr %272, i64 4
  br label %274

274:                                              ; preds = %274, %271
  %275 = phi ptr [ %273, %271 ], [ %276, %274 ]
  %276 = getelementptr inbounds %"class.JPH::Ref.49", ptr %275, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %276) #11
  %277 = icmp eq ptr %276, %272
  br i1 %277, label %278, label %274

278:                                              ; preds = %274
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #11
  %279 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %36, i32 0, i32 4
  store ptr %279, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #11
  %280 = load ptr, ptr %48, align 8, !tbaa !5
  %281 = invoke noundef ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %280)
          to label %282 unwind label %410

282:                                              ; preds = %278
  store ptr %281, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #11
  %283 = load ptr, ptr %48, align 8, !tbaa !5
  %284 = invoke noundef ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %283)
          to label %285 unwind label %414

285:                                              ; preds = %282
  store ptr %284, ptr %50, align 8, !tbaa !5
  br label %286

286:                                              ; preds = %426, %285
  %287 = load ptr, ptr %49, align 8, !tbaa !5
  %288 = load ptr, ptr %50, align 8, !tbaa !5
  %289 = icmp ne ptr %287, %288
  br i1 %289, label %418, label %290

290:                                              ; preds = %286
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  br label %435

291:                                              ; preds = %67, %1
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %5, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %66) #11
  br label %299

295:                                              ; preds = %72
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %5, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %3) #11
  br label %299

299:                                              ; preds = %295, %291
  call void @llvm.lifetime.end.p0(i64 256, ptr %3) #11
  br label %593

300:                                              ; preds = %95, %90
  %301 = landingpad { ptr, i32 }
          cleanup
  %302 = extractvalue { ptr, i32 } %301, 0
  store ptr %302, ptr %5, align 8
  %303 = extractvalue { ptr, i32 } %301, 1
  store i32 %303, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %94) #11
  br label %308

304:                                              ; preds = %100
  %305 = landingpad { ptr, i32 }
          cleanup
  %306 = extractvalue { ptr, i32 } %305, 0
  store ptr %306, ptr %5, align 8
  %307 = extractvalue { ptr, i32 } %305, 1
  store i32 %307, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %10) #11
  br label %308

308:                                              ; preds = %304, %300
  call void @llvm.lifetime.end.p0(i64 256, ptr %10) #11
  br label %593

309:                                              ; preds = %123, %118
  %310 = landingpad { ptr, i32 }
          cleanup
  %311 = extractvalue { ptr, i32 } %310, 0
  store ptr %311, ptr %5, align 8
  %312 = extractvalue { ptr, i32 } %310, 1
  store i32 %312, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %122) #11
  br label %317

313:                                              ; preds = %128
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %5, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %15) #11
  br label %317

317:                                              ; preds = %313, %309
  call void @llvm.lifetime.end.p0(i64 256, ptr %15) #11
  br label %593

318:                                              ; preds = %151, %146
  %319 = landingpad { ptr, i32 }
          cleanup
  %320 = extractvalue { ptr, i32 } %319, 0
  store ptr %320, ptr %5, align 8
  %321 = extractvalue { ptr, i32 } %319, 1
  store i32 %321, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %150) #11
  br label %326

322:                                              ; preds = %156
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %5, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %6, align 4
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %20) #11
  br label %326

326:                                              ; preds = %322, %318
  call void @llvm.lifetime.end.p0(i64 256, ptr %20) #11
  br label %593

327:                                              ; preds = %178, %174
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %5, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %6, align 4
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %177) #11
  br label %592

331:                                              ; preds = %195, %187, %185, %183
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %5, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %6, align 4
  br label %591

335:                                              ; preds = %211
  %336 = landingpad { ptr, i32 }
          cleanup
  %337 = extractvalue { ptr, i32 } %336, 0
  store ptr %337, ptr %5, align 8
  %338 = extractvalue { ptr, i32 } %336, 1
  store i32 %338, ptr %6, align 4
  br label %590

339:                                              ; preds = %215
  %340 = landingpad { ptr, i32 }
          cleanup
  %341 = extractvalue { ptr, i32 } %340, 0
  store ptr %341, ptr %5, align 8
  %342 = extractvalue { ptr, i32 } %340, 1
  store i32 %342, ptr %6, align 4
  br label %589

343:                                              ; preds = %217
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %5, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %6, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %216) #11
  br label %589

347:                                              ; preds = %218
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %5, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #11
  br label %589

351:                                              ; preds = %219
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %5, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %6, align 4
  br label %588

355:                                              ; preds = %227
  %356 = landingpad { ptr, i32 }
          cleanup
  %357 = extractvalue { ptr, i32 } %356, 0
  store ptr %357, ptr %5, align 8
  %358 = extractvalue { ptr, i32 } %356, 1
  store i32 %358, ptr %6, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %226) #11
  br label %588

359:                                              ; preds = %228
  %360 = landingpad { ptr, i32 }
          cleanup
  %361 = extractvalue { ptr, i32 } %360, 0
  store ptr %361, ptr %5, align 8
  %362 = extractvalue { ptr, i32 } %360, 1
  store i32 %362, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #11
  br label %588

363:                                              ; preds = %229
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %5, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %6, align 4
  br label %587

367:                                              ; preds = %237
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %5, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %6, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %236) #11
  br label %587

371:                                              ; preds = %238
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %5, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #11
  br label %587

375:                                              ; preds = %239
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %5, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %6, align 4
  br label %586

379:                                              ; preds = %245
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %5, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %6, align 4
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %244) #11
  br label %586

383:                                              ; preds = %246
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %5, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #11
  br label %586

387:                                              ; preds = %259, %256, %253, %247
  %388 = landingpad { ptr, i32 }
          cleanup
  %389 = extractvalue { ptr, i32 } %388, 0
  store ptr %389, ptr %5, align 8
  %390 = extractvalue { ptr, i32 } %388, 1
  store i32 %390, ptr %6, align 4
  %391 = load ptr, ptr %47, align 8
  %392 = icmp eq ptr %46, %391
  br i1 %392, label %397, label %393

393:                                              ; preds = %393, %387
  %394 = phi ptr [ %391, %387 ], [ %395, %393 ]
  %395 = getelementptr inbounds %"class.JPH::Ref.49", ptr %394, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %395) #11
  %396 = icmp eq ptr %395, %46
  br i1 %396, label %397, label %393

397:                                              ; preds = %393, %387
  br label %409

398:                                              ; preds = %262
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %5, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %6, align 4
  %402 = getelementptr inbounds [4 x %"class.JPH::Ref.49"], ptr %46, i32 0, i32 0
  %403 = getelementptr inbounds %"class.JPH::Ref.49", ptr %402, i64 4
  br label %404

404:                                              ; preds = %404, %398
  %405 = phi ptr [ %403, %398 ], [ %406, %404 ]
  %406 = getelementptr inbounds %"class.JPH::Ref.49", ptr %405, i64 -1
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %406) #11
  %407 = icmp eq ptr %406, %402
  br i1 %407, label %408, label %404

408:                                              ; preds = %404
  br label %409

409:                                              ; preds = %408, %397
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #11
  br label %586

410:                                              ; preds = %278
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %5, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %6, align 4
  br label %434

414:                                              ; preds = %282
  %415 = landingpad { ptr, i32 }
          cleanup
  %416 = extractvalue { ptr, i32 } %415, 0
  store ptr %416, ptr %5, align 8
  %417 = extractvalue { ptr, i32 } %415, 1
  store i32 %417, ptr %6, align 4
  br label %433

418:                                              ; preds = %286
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #11
  %419 = load ptr, ptr %49, align 8, !tbaa !5
  %420 = invoke noundef ptr @_ZNK3JPH3RefINS_13WheelSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %419)
          to label %421 unwind label %429

421:                                              ; preds = %418
  store ptr %420, ptr %51, align 8, !tbaa !5
  %422 = load ptr, ptr %51, align 8, !tbaa !5
  %423 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %422, i32 0, i32 13
  store float 0x3FD3333340000000, ptr %423, align 8, !tbaa !54
  %424 = load ptr, ptr %51, align 8, !tbaa !5
  %425 = getelementptr inbounds %"class.JPH::WheelSettings", ptr %424, i32 0, i32 14
  store float 0x3FB99999A0000000, ptr %425, align 4, !tbaa !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %426

426:                                              ; preds = %421
  %427 = load ptr, ptr %49, align 8, !tbaa !5
  %428 = getelementptr inbounds %"class.JPH::Ref.49", ptr %427, i32 1
  store ptr %428, ptr %49, align 8, !tbaa !5
  br label %286

429:                                              ; preds = %418
  %430 = landingpad { ptr, i32 }
          cleanup
  %431 = extractvalue { ptr, i32 } %430, 0
  store ptr %431, ptr %5, align 8
  %432 = extractvalue { ptr, i32 } %430, 1
  store i32 %432, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #11
  br label %433

433:                                              ; preds = %429, %414
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #11
  br label %434

434:                                              ; preds = %433, %410
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #11
  br label %586

435:                                              ; preds = %290
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #11
  %436 = invoke noundef ptr @_ZN3JPH32WheeledVehicleControllerSettingsnwEm(i64 noundef 176)
          to label %437 unwind label %463

437:                                              ; preds = %435
  invoke void @_ZN3JPH32WheeledVehicleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %436)
          to label %438 unwind label %467

438:                                              ; preds = %437
  store ptr %436, ptr %52, align 8, !tbaa !5
  %439 = load ptr, ptr %52, align 8, !tbaa !5
  %440 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %36, i32 0, i32 6
  %441 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_25VehicleControllerSettingsEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %440, ptr noundef %439)
          to label %442 unwind label %463

442:                                              ; preds = %438
  %443 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 6.000000e+01)
          to label %444 unwind label %463

444:                                              ; preds = %442
  %445 = getelementptr inbounds %"class.JPH::VehicleConstraintSettings", ptr %36, i32 0, i32 3
  store float %443, ptr %445, align 16, !tbaa !56
  %446 = load ptr, ptr %52, align 8, !tbaa !5
  %447 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %446, i32 0, i32 4
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %447, i64 noundef 1)
          to label %448 unwind label %463

448:                                              ; preds = %444
  %449 = load ptr, ptr %52, align 8, !tbaa !5
  %450 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %449, i32 0, i32 4
  %451 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %450, i64 noundef 0)
          to label %452 unwind label %463

452:                                              ; preds = %448
  %453 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %451, i32 0, i32 0
  store i32 0, ptr %453, align 4, !tbaa !63
  %454 = load ptr, ptr %52, align 8, !tbaa !5
  %455 = getelementptr inbounds %"class.JPH::WheeledVehicleControllerSettings", ptr %454, i32 0, i32 4
  %456 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %455, i64 noundef 0)
          to label %457 unwind label %463

457:                                              ; preds = %452
  %458 = getelementptr inbounds %"class.JPH::VehicleDifferentialSettings", ptr %456, i32 0, i32 1
  store i32 1, ptr %458, align 4, !tbaa !65
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #11
  store i32 0, ptr %53, align 4, !tbaa !66
  br label %459

459:                                              ; preds = %581, %457
  %460 = load i32, ptr %53, align 4, !tbaa !66
  %461 = icmp slt i32 %460, 15
  br i1 %461, label %471, label %462

462:                                              ; preds = %459
  store i32 4, ptr %54, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %584

463:                                              ; preds = %452, %448, %444, %442, %438, %435
  %464 = landingpad { ptr, i32 }
          cleanup
  %465 = extractvalue { ptr, i32 } %464, 0
  store ptr %465, ptr %5, align 8
  %466 = extractvalue { ptr, i32 } %464, 1
  store i32 %466, ptr %6, align 4
  br label %585

467:                                              ; preds = %437
  %468 = landingpad { ptr, i32 }
          cleanup
  %469 = extractvalue { ptr, i32 } %468, 0
  store ptr %469, ptr %5, align 8
  %470 = extractvalue { ptr, i32 } %468, 1
  store i32 %470, ptr %6, align 4
  call void @_ZN3JPH32WheeledVehicleControllerSettingsdlEPv(ptr noundef %436) #11
  br label %585

471:                                              ; preds = %459
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #11
  store i32 0, ptr %55, align 4, !tbaa !66
  br label %472

472:                                              ; preds = %540, %471
  %473 = load i32, ptr %55, align 4, !tbaa !66
  %474 = icmp slt i32 %473, 15
  br i1 %474, label %476, label %475

475:                                              ; preds = %472
  store i32 7, ptr %54, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  br label %580

476:                                              ; preds = %472
  call void @llvm.lifetime.start.p0(i64 16, ptr %56) #11
  %477 = load i32, ptr %53, align 4, !tbaa !66
  %478 = sitofp i32 %477 to float
  %479 = call float @llvm.fmuladd.f32(float %478, float 4.000000e+00, float -2.800000e+01)
  %480 = load i32, ptr %55, align 4, !tbaa !66
  %481 = sitofp i32 %480 to float
  %482 = call float @llvm.fmuladd.f32(float %481, float 5.000000e+00, float -3.500000e+01)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %56, float noundef %479, float noundef 2.000000e+00, float noundef %482)
          to label %483 unwind label %543

483:                                              ; preds = %476
  %484 = getelementptr inbounds %"class.JPH::BodyCreationSettings", ptr %33, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %484, ptr align 16 %56, i64 16, i1 false), !tbaa.struct !37
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #11
  %485 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %486 = load ptr, ptr %485, align 8, !tbaa !9
  %487 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %486, ptr noundef nonnull align 16 dereferenceable(256) %33)
          to label %488 unwind label %547

488:                                              ; preds = %483
  store ptr %487, ptr %57, align 8, !tbaa !5
  %489 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 3
  %490 = load ptr, ptr %489, align 8, !tbaa !9
  %491 = load ptr, ptr %57, align 8, !tbaa !5
  %492 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %491)
          to label %493 unwind label %547

493:                                              ; preds = %488
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %490, ptr noundef nonnull align 4 dereferenceable(4) %492, i32 noundef 0)
          to label %494 unwind label %547

494:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #11
  %495 = invoke noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef 416)
          to label %496 unwind label %551

496:                                              ; preds = %494
  %497 = load ptr, ptr %57, align 8, !tbaa !5
  invoke void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408) %495, ptr noundef nonnull align 16 dereferenceable(122) %497, ptr noundef nonnull align 16 dereferenceable(144) %36)
          to label %498 unwind label %555

498:                                              ; preds = %496
  store ptr %495, ptr %58, align 8, !tbaa !5
  %499 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN3JPH17VehicleConstraint37SetNumStepsBetweenCollisionTestActiveEj(ptr noundef nonnull align 16 dereferenceable(408) %499, i32 noundef 2)
          to label %500 unwind label %551

500:                                              ; preds = %498
  %501 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN3JPH17VehicleConstraint39SetNumStepsBetweenCollisionTestInactiveEj(ptr noundef nonnull align 16 dereferenceable(408) %501, i32 noundef 0)
          to label %502 unwind label %551

502:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #11
  %503 = invoke noundef ptr @_ZN3JPH25VehicleCollisionTesterRaynwEm(i64 noundef 80)
          to label %504 unwind label %559

504:                                              ; preds = %502
  %505 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %506 unwind label %563

506:                                              ; preds = %504
  %507 = getelementptr inbounds %"class.JPH::Vec3", ptr %60, i32 0, i32 0
  %508 = getelementptr inbounds %union.anon, ptr %507, i32 0, i32 0
  %509 = getelementptr inbounds { double, double }, ptr %508, i32 0, i32 0
  %510 = extractvalue { double, double } %505, 0
  store double %510, ptr %509, align 16
  %511 = getelementptr inbounds { double, double }, ptr %508, i32 0, i32 1
  %512 = extractvalue { double, double } %505, 1
  store double %512, ptr %511, align 8
  %513 = invoke noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 8.000000e+01)
          to label %514 unwind label %563

514:                                              ; preds = %506
  %515 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 0
  %516 = load double, ptr %515, align 16
  %517 = getelementptr inbounds { double, double }, ptr %60, i32 0, i32 1
  %518 = load double, ptr %517, align 8
  invoke void @_ZN3JPH25VehicleCollisionTesterRayC2EtNS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(68) %503, i16 noundef zeroext 1, double %516, double %518, float noundef %513)
          to label %519 unwind label %563

519:                                              ; preds = %514
  store ptr %503, ptr %59, align 8, !tbaa !5
  %520 = load ptr, ptr %58, align 8, !tbaa !5
  %521 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN3JPH17VehicleConstraint25SetVehicleCollisionTesterEPKNS_22VehicleCollisionTesterE(ptr noundef nonnull align 16 dereferenceable(408) %520, ptr noundef %521)
          to label %522 unwind label %559

522:                                              ; preds = %519
  %523 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 2
  %524 = load ptr, ptr %523, align 8, !tbaa !67
  %525 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %524, ptr noundef %525)
          to label %526 unwind label %559

526:                                              ; preds = %522
  %527 = getelementptr inbounds %class.Test, ptr %62, i32 0, i32 2
  %528 = load ptr, ptr %527, align 8, !tbaa !67
  %529 = load ptr, ptr %58, align 8, !tbaa !5
  %530 = icmp eq ptr %529, null
  br i1 %530, label %533, label %531

531:                                              ; preds = %526
  %532 = getelementptr inbounds i8, ptr %529, i64 32
  br label %533

533:                                              ; preds = %531, %526
  %534 = phi ptr [ %532, %531 ], [ null, %526 ]
  invoke void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172) %528, ptr noundef %534)
          to label %535 unwind label %559

535:                                              ; preds = %533
  %536 = getelementptr inbounds %class.VehicleStressTest, ptr %62, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #11
  %537 = load ptr, ptr %58, align 8, !tbaa !5
  invoke void @_ZN3JPH3RefINS_17VehicleConstraintEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef %537)
          to label %538 unwind label %567

538:                                              ; preds = %535
  invoke void @_ZN3JPH5ArrayINS_3RefINS_17VehicleConstraintEEENS_12STLAllocatorIS3_EEE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %536, ptr noundef nonnull align 8 dereferenceable(8) %61)
          to label %539 unwind label %571

539:                                              ; preds = %538
  call void @_ZN3JPH3RefINS_17VehicleConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %55, align 4, !tbaa !66
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %55, align 4, !tbaa !66
  br label %472, !llvm.loop !68

543:                                              ; preds = %476
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %5, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %56) #11
  br label %579

547:                                              ; preds = %493, %488, %483
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %5, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %6, align 4
  br label %578

551:                                              ; preds = %500, %498, %494
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %5, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %6, align 4
  br label %577

555:                                              ; preds = %496
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %5, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %6, align 4
  call void @_ZN3JPH10ConstraintdlEPv(ptr noundef %495) #11
  br label %577

559:                                              ; preds = %533, %522, %519, %502
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %5, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %6, align 4
  br label %576

563:                                              ; preds = %514, %506, %504
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %5, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %6, align 4
  call void @_ZN3JPH25VehicleCollisionTesterRaydlEPv(ptr noundef %503) #11
  br label %576

567:                                              ; preds = %535
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %5, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %6, align 4
  br label %575

571:                                              ; preds = %538
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %5, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %6, align 4
  call void @_ZN3JPH3RefINS_17VehicleConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #11
  br label %575

575:                                              ; preds = %571, %567
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  br label %576

576:                                              ; preds = %575, %563, %559
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #11
  br label %577

577:                                              ; preds = %576, %555, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #11
  br label %578

578:                                              ; preds = %577, %547
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  br label %579

579:                                              ; preds = %578, %543
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #11
  br label %585

580:                                              ; preds = %475
  br label %581

581:                                              ; preds = %580
  %582 = load i32, ptr %53, align 4, !tbaa !66
  %583 = add nsw i32 %582, 1
  store i32 %583, ptr %53, align 4, !tbaa !66
  br label %459, !llvm.loop !70

584:                                              ; preds = %462
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %36) #11
  call void @llvm.lifetime.end.p0(i64 144, ptr %36) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr %33) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  ret void

585:                                              ; preds = %579, %467, %463
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #11
  br label %586

586:                                              ; preds = %585, %434, %409, %383, %379, %375
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #11
  br label %587

587:                                              ; preds = %586, %371, %367, %363
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %588

588:                                              ; preds = %587, %359, %355, %351
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #11
  br label %589

589:                                              ; preds = %588, %347, %343, %339
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %36) #11
  br label %590

590:                                              ; preds = %589, %335
  call void @llvm.lifetime.end.p0(i64 144, ptr %36) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %33) #11
  br label %591

591:                                              ; preds = %590, %331
  call void @llvm.lifetime.end.p0(i64 256, ptr %33) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #11
  br label %592

592:                                              ; preds = %591, %327
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #11
  br label %593

593:                                              ; preds = %592, %326, %317, %308, %299
  %594 = load ptr, ptr %5, align 8
  %595 = load i32, ptr %6, align 4
  %596 = insertvalue { ptr, i32 } poison, ptr %594, 0
  %597 = insertvalue { ptr, i32 } %596, i32 %595, 1
  resume { ptr, i32 } %597
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) #2

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) #2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef) #3 align 2

declare void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216)) unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef) #5 align 2

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH32WheeledVehicleControllerSettingsnwEm(i64 noundef) #3 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH32WheeledVehicleControllerSettingsdlEPv(ptr noundef) #5 align 2

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) #2

declare void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #2

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef) #3 align 2

declare void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10ConstraintdlEPv(ptr noundef) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17VehicleConstraint37SetNumStepsBetweenCollisionTestActiveEj(ptr noundef nonnull align 16 dereferenceable(408), i32 noundef) #10 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH17VehicleConstraint39SetNumStepsBetweenCollisionTestInactiveEj(ptr noundef nonnull align 16 dereferenceable(408), i32 noundef) #10 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH25VehicleCollisionTesterRaynwEm(i64 noundef) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH25VehicleCollisionTesterRayC2EtNS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(68), i16 noundef zeroext, double, double, float noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH25VehicleCollisionTesterRaydlEPv(ptr noundef) #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) #1 align 2

declare void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) #2

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = { "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 = { 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 #5 = { 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 #6 = { 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 #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { 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 #11 = { 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, !6, i64 24}
!10 = !{!"_ZTS4Test", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !11, i64 48, !12, i64 56}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !13, i64 0}
!13 = !{!"_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, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !6, i64 48}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!17, !17, i64 0}
!19 = !{!20, !31, i64 144}
!20 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !21, i64 0, !22, i64 16, !21, i64 32, !21, i64 48, !14, i64 64, !24, i64 72, !25, i64 80, !28, i64 96, !29, i64 97, !11, i64 98, !11, i64 99, !11, i64 100, !11, i64 101, !11, i64 102, !30, i64 103, !11, i64 104, !11, i64 105, !17, i64 108, !17, i64 112, !17, i64 116, !17, i64 120, !17, i64 124, !17, i64 128, !17, i64 132, !27, i64 136, !27, i64 140, !31, i64 144, !17, i64 148, !32, i64 160, !34, i64 240, !35, i64 248}
!21 = !{!"_ZTSN3JPH4Vec3E", !7, i64 0}
!22 = !{!"_ZTSN3JPH4QuatE", !23, i64 0}
!23 = !{!"_ZTSN3JPH4Vec4E", !7, i64 0}
!24 = !{!"short", !7, i64 0}
!25 = !{!"_ZTSN3JPH14CollisionGroupE", !26, i64 0, !27, i64 8, !27, i64 12}
!26 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !6, i64 0}
!27 = !{!"int", !7, i64 0}
!28 = !{!"_ZTSN3JPH11EMotionTypeE", !7, i64 0}
!29 = !{!"_ZTSN3JPH12EAllowedDOFsE", !7, i64 0}
!30 = !{!"_ZTSN3JPH14EMotionQualityE", !7, i64 0}
!31 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !7, i64 0}
!32 = !{!"_ZTSN3JPH14MassPropertiesE", !17, i64 0, !33, i64 16}
!33 = !{!"_ZTSN3JPH5Mat44E", !7, i64 0}
!34 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !6, i64 0}
!35 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !6, i64 0}
!36 = !{!20, !17, i64 160}
!37 = !{i64 0, i64 16, !38}
!38 = !{!7, !7, i64 0}
!39 = !{!40, !17, i64 156}
!40 = !{!"_ZTSN3JPH15WheelSettingsWVE", !41, i64 0, !17, i64 148, !17, i64 152, !17, i64 156, !48, i64 160, !48, i64 184, !17, i64 208, !17, i64 212}
!41 = !{!"_ZTSN3JPH13WheelSettingsE", !42, i64 0, !43, i64 8, !21, i64 16, !21, i64 32, !21, i64 48, !21, i64 64, !21, i64 80, !21, i64 96, !17, i64 112, !17, i64 116, !17, i64 120, !46, i64 124, !17, i64 136, !17, i64 140, !11, i64 144}
!42 = !{!"_ZTSN3JPH18SerializableObjectE"}
!43 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !44, i64 0}
!44 = !{!"_ZTSSt6atomicIjE", !45, i64 0}
!45 = !{!"_ZTSSt13__atomic_baseIjE", !27, i64 0}
!46 = !{!"_ZTSN3JPH14SpringSettingsE", !47, i64 0, !7, i64 4, !17, i64 8}
!47 = !{!"_ZTSN3JPH11ESpringModeE", !7, i64 0}
!48 = !{!"_ZTSN3JPH11LinearCurveE", !49, i64 0}
!49 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !14, i64 0, !14, i64 8, !6, i64 16}
!50 = !{!40, !17, i64 212}
!51 = !{!52, !6, i64 0}
!52 = !{!"_ZTSSt16initializer_listIN3JPH3RefINS0_13WheelSettingsEEEE", !6, i64 0, !14, i64 8}
!53 = !{!52, !14, i64 8}
!54 = !{!41, !17, i64 136}
!55 = !{!41, !17, i64 140}
!56 = !{!57, !17, i64 80}
!57 = !{!"_ZTSN3JPH25VehicleConstraintSettingsE", !58, i64 0, !21, i64 48, !21, i64 64, !17, i64 80, !60, i64 88, !61, i64 112, !62, i64 136}
!58 = !{!"_ZTSN3JPH18ConstraintSettingsE", !42, i64 0, !59, i64 8, !11, i64 12, !27, i64 16, !27, i64 20, !27, i64 24, !17, i64 28, !14, i64 32}
!59 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !44, i64 0}
!60 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEE", !14, i64 0, !14, i64 8, !6, i64 16}
!61 = !{!"_ZTSN3JPH5ArrayINS_18VehicleAntiRollBarENS_12STLAllocatorIS1_EEEE", !14, i64 0, !14, i64 8, !6, i64 16}
!62 = !{!"_ZTSN3JPH3RefINS_25VehicleControllerSettingsEEE", !6, i64 0}
!63 = !{!64, !27, i64 0}
!64 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !27, i64 0, !27, i64 4, !17, i64 8, !17, i64 12, !17, i64 16, !17, i64 20}
!65 = !{!64, !27, i64 4}
!66 = !{!27, !27, i64 0}
!67 = !{!10, !6, i64 16}
!68 = distinct !{!68, !69}
!69 = !{!"llvm.loop.mustprogress"}
!70 = distinct !{!70, !69}


; 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::BodyCreationSettings" = type { %"class.JPH::Vec3", %"class.JPH::Quat", %"class.JPH::Vec3", %"class.JPH::Vec3", i64, i16, %"class.JPH::CollisionGroup", i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, float, float, float, float, float, float, float, i32, i32, i8, float, %"class.JPH::MassProperties", %"class.JPH::RefConst.36", %"class.JPH::RefConst.32" }
%"class.JPH::Quat" = type { %"class.JPH::Vec4" }
%"class.JPH::Vec4" = type { %union.anon.31 }
%union.anon.31 = type { <4 x float> }
%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::CollisionGroup" = type { %"class.JPH::RefConst.33", i32, i32 }
%"class.JPH::RefConst.33" = type { ptr }
%"class.JPH::MassProperties" = type { float, %"class.JPH::Mat44" }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::RefConst.36" = type { ptr }
%"class.JPH::RefConst.32" = type { ptr }
%"class.JPH::VehicleConstraintSettings" = type { %"class.JPH::ConstraintSettings", %"class.JPH::Vec3", %"class.JPH::Vec3", float, %"class.JPH::Array.40", %"class.JPH::Array.23", %"class.JPH::Ref.43" }
%"class.JPH::ConstraintSettings" = type { %"class.JPH::SerializableObject", %"class.JPH::RefTarget.39", i8, i32, i32, i32, float, i64 }
%"class.JPH::SerializableObject" = type { ptr }
%"class.JPH::RefTarget.39" = type { %"struct.std::atomic" }
%"struct.std::atomic" = type { %"struct.std::__atomic_base" }
%"struct.std::__atomic_base" = type { i32 }
%"class.JPH::Array.40" = type { i64, i64, ptr }
%"class.JPH::Array.23" = type { i64, i64, ptr }
%"class.JPH::Ref.43" = type { ptr }
%"class.JPH::Ref.49" = type { ptr }
%"class.JPH::Ref" = type { ptr }

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN17VehicleStressTest10InitializeEv(ptr noundef nonnull align 8 dereferenceable(148) %0) unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"class.JPH::BodyCreationSettings", align 16
  %3 = alloca %"class.JPH::Vec3", align 16
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::BodyCreationSettings", align 16
  %6 = alloca %"class.JPH::Vec3", align 16
  %7 = alloca %"class.JPH::Vec3", align 16
  %8 = alloca %"class.JPH::BodyCreationSettings", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::BodyCreationSettings", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::RefConst.32", align 8
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = alloca %"class.JPH::BodyCreationSettings", align 16
  %17 = alloca %"class.JPH::VehicleConstraintSettings", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca %"class.JPH::Vec3", align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca [4 x %"class.JPH::Ref.49"], align 8
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Ref", align 8
  %25 = tail call noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112) %0)
  %26 = getelementptr inbounds i8, ptr %0, i64 24
  %27 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %2) #11
  %28 = tail call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %3, float noundef 5.000000e+01, float noundef 5.000000e+00, float noundef 5.000000e-01)
          to label %29 unwind label %150

29:                                               ; preds = %1
  %30 = load double, ptr %3, align 16
  %31 = getelementptr inbounds i8, ptr %3, i64 8
  %32 = load double, ptr %31, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %28, double %30, double %32, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %33 unwind label %150

33:                                               ; preds = %29
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %4, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef -5.000000e+01)
  %34 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %35 = extractvalue { double, double } %34, 0
  %36 = extractvalue { double, double } %34, 1
  %37 = load double, ptr %4, align 16
  %38 = getelementptr inbounds i8, ptr %4, i64 8
  %39 = load double, ptr %38, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %2, ptr noundef nonnull %28, double %37, double %39, double %35, double %36, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %40 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %27, ptr noundef nonnull align 16 dereferenceable(256) %2, i32 noundef 1)
          to label %41 unwind label %152

41:                                               ; preds = %33
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %2) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %2) #11
  %42 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %5) #11
  %43 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %6, float noundef 5.000000e+01, float noundef 5.000000e+00, float noundef 5.000000e-01)
          to label %44 unwind label %155

44:                                               ; preds = %41
  %45 = load double, ptr %6, align 16
  %46 = getelementptr inbounds i8, ptr %6, i64 8
  %47 = load double, ptr %46, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %43, double %45, double %47, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %48 unwind label %155

48:                                               ; preds = %44
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %7, float noundef 0.000000e+00, float noundef 0.000000e+00, float noundef 5.000000e+01)
  %49 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %50 = extractvalue { double, double } %49, 0
  %51 = extractvalue { double, double } %49, 1
  %52 = load double, ptr %7, align 16
  %53 = getelementptr inbounds i8, ptr %7, i64 8
  %54 = load double, ptr %53, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %5, ptr noundef nonnull %43, double %52, double %54, double %50, double %51, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %55 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %42, ptr noundef nonnull align 16 dereferenceable(256) %5, i32 noundef 1)
          to label %56 unwind label %157

56:                                               ; preds = %48
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #11
  %57 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #11
  %58 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %9, float noundef 5.000000e-01, float noundef 5.000000e+00, float noundef 5.000000e+01)
          to label %59 unwind label %160

59:                                               ; preds = %56
  %60 = load double, ptr %9, align 16
  %61 = getelementptr inbounds i8, ptr %9, i64 8
  %62 = load double, ptr %61, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %58, double %60, double %62, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %63 unwind label %160

63:                                               ; preds = %59
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %10, float noundef -5.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %64 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %65 = extractvalue { double, double } %64, 0
  %66 = extractvalue { double, double } %64, 1
  %67 = load double, ptr %10, align 16
  %68 = getelementptr inbounds i8, ptr %10, i64 8
  %69 = load double, ptr %68, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %8, ptr noundef nonnull %58, double %67, double %69, double %65, double %66, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %70 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %57, ptr noundef nonnull align 16 dereferenceable(256) %8, i32 noundef 1)
          to label %71 unwind label %162

71:                                               ; preds = %63
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  %72 = load ptr, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %11) #11
  %73 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %12, float noundef 5.000000e-01, float noundef 5.000000e+00, float noundef 5.000000e+01)
          to label %74 unwind label %165

74:                                               ; preds = %71
  %75 = load double, ptr %12, align 16
  %76 = getelementptr inbounds i8, ptr %12, i64 8
  %77 = load double, ptr %76, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %73, double %75, double %77, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %78 unwind label %165

78:                                               ; preds = %74
  call void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %13, float noundef 5.000000e+01, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %79 = call { double, double } @_ZN3JPH4Quat9sIdentityEv()
  %80 = extractvalue { double, double } %79, 0
  %81 = extractvalue { double, double } %79, 1
  %82 = load double, ptr %13, align 16
  %83 = getelementptr inbounds i8, ptr %13, i64 8
  %84 = load double, ptr %83, align 8
  call void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %11, ptr noundef nonnull %73, double %82, double %84, double %80, double %81, i8 noundef zeroext 0, i16 noundef zeroext 0)
  %85 = invoke i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %72, ptr noundef nonnull align 16 dereferenceable(256) %11, i32 noundef 1)
          to label %86 unwind label %167

86:                                               ; preds = %78
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #11
  %87 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 3.000000e+01)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #11
  %88 = call noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef 80)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %15, float noundef 0x3FECCCCCC0000000, float noundef 0x3FC99999A0000000, float noundef 2.000000e+00)
          to label %89 unwind label %170

89:                                               ; preds = %86
  %90 = load double, ptr %15, align 16
  %91 = getelementptr inbounds i8, ptr %15, i64 8
  %92 = load double, ptr %91, align 8
  invoke void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80) %88, double %90, double %92, float noundef 0x3FA99999A0000000, ptr noundef null)
          to label %93 unwind label %170

93:                                               ; preds = %89
  call void @_ZN3JPH8RefConstINS_5ShapeEEC2EPKS1_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull %88)
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %16) #11
  %94 = call noundef ptr @_ZNK3JPH8RefConstINS_5ShapeEEcvPKS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %14)
  %95 = invoke { double, double } @_ZN3JPH4Vec35sZeroEv()
          to label %96 unwind label %172

96:                                               ; preds = %93
  %97 = invoke { double, double } @_ZN3JPH4Quat9sIdentityEv()
          to label %98 unwind label %172

98:                                               ; preds = %96
  %99 = extractvalue { double, double } %95, 1
  %100 = extractvalue { double, double } %95, 0
  %101 = extractvalue { double, double } %97, 0
  %102 = extractvalue { double, double } %97, 1
  invoke void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256) %16, ptr noundef %94, double %100, double %99, double %101, double %102, i8 noundef zeroext 2, i16 noundef zeroext 1)
          to label %103 unwind label %172

103:                                              ; preds = %98
  %104 = getelementptr inbounds i8, ptr %16, i64 144
  store i8 1, ptr %104, align 16, !tbaa !17
  %105 = getelementptr inbounds i8, ptr %16, i64 160
  store float 1.500000e+03, ptr %105, align 16, !tbaa !34
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %17) #11
  invoke void @_ZN3JPH25VehicleConstraintSettingsC2Ev(ptr noundef nonnull align 16 dereferenceable(144) %17)
          to label %106 unwind label %174

106:                                              ; preds = %103
  %107 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %108 unwind label %176

108:                                              ; preds = %106
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %107)
          to label %109 unwind label %178

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %18, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0x3FF6666660000000)
          to label %110 unwind label %180

110:                                              ; preds = %109
  %111 = getelementptr inbounds i8, ptr %107, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %111, ptr noundef nonnull align 16 dereferenceable(16) %18, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  %112 = getelementptr inbounds i8, ptr %107, i64 156
  store float 0x3FE0C15240000000, ptr %112, align 4, !tbaa !37
  %113 = getelementptr inbounds i8, ptr %107, i64 212
  store float 0.000000e+00, ptr %113, align 4, !tbaa !48
  %114 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %115 unwind label %182

115:                                              ; preds = %110
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %114)
          to label %116 unwind label %184

116:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %19) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %19, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0x3FF6666660000000)
          to label %117 unwind label %186

117:                                              ; preds = %116
  %118 = getelementptr inbounds i8, ptr %114, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %118, ptr noundef nonnull align 16 dereferenceable(16) %19, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  %119 = getelementptr inbounds i8, ptr %114, i64 156
  store float 0x3FE0C15240000000, ptr %119, align 4, !tbaa !37
  %120 = getelementptr inbounds i8, ptr %114, i64 212
  store float 0.000000e+00, ptr %120, align 4, !tbaa !48
  %121 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %122 unwind label %188

122:                                              ; preds = %117
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %121)
          to label %123 unwind label %190

123:                                              ; preds = %122
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %20) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %20, float noundef 0x3FECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0xBFF6666660000000)
          to label %124 unwind label %192

124:                                              ; preds = %123
  %125 = getelementptr inbounds i8, ptr %121, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %125, ptr noundef nonnull align 16 dereferenceable(16) %20, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  %126 = getelementptr inbounds i8, ptr %121, i64 156
  store float 0.000000e+00, ptr %126, align 4, !tbaa !37
  %127 = invoke noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef 224)
          to label %128 unwind label %194

128:                                              ; preds = %124
  invoke void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216) %127)
          to label %129 unwind label %196

129:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %21) #11
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %21, float noundef 0xBFECCCCCC0000000, float noundef 0xBFC70A3D60000000, float noundef 0xBFF6666660000000)
          to label %130 unwind label %198

130:                                              ; preds = %129
  %131 = getelementptr inbounds i8, ptr %127, i64 16
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %131, ptr noundef nonnull align 16 dereferenceable(16) %21, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  %132 = getelementptr inbounds i8, ptr %127, i64 156
  store float 0.000000e+00, ptr %132, align 4, !tbaa !37
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #11
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull %107)
          to label %134 unwind label %.thread

.thread:                                          ; preds = %130
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

134:                                              ; preds = %130
  %135 = getelementptr inbounds i8, ptr %22, i64 8
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %135, ptr noundef nonnull %114)
          to label %136 unwind label %200

136:                                              ; preds = %134
  %137 = getelementptr inbounds i8, ptr %22, i64 16
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %137, ptr noundef nonnull %121)
          to label %138 unwind label %200

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %22, i64 24
  invoke void @_ZN3JPH3RefINS_13WheelSettingsEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull %127)
          to label %140 unwind label %200

140:                                              ; preds = %138
  %141 = getelementptr inbounds i8, ptr %17, i64 88
  %142 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEaSESt16initializer_listIS3_E(ptr noundef nonnull align 8 dereferenceable(24) %141, ptr nonnull %22, i64 4)
          to label %143 unwind label %.loopexit.loopexit

143:                                              ; preds = %140
  %144 = getelementptr inbounds i8, ptr %22, i64 24
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %144) #11
  %145 = getelementptr inbounds i8, ptr %22, i64 16
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %145) #11
  %146 = getelementptr inbounds i8, ptr %22, i64 8
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %146) #11
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #11
  %147 = call noundef ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %141)
  %148 = call noundef ptr @_ZN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %141)
  %.not119 = icmp eq ptr %147, %148
  br i1 %.not119, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %143
  %149 = invoke noundef ptr @_ZN3JPH32WheeledVehicleControllerSettingsnwEm(i64 noundef 176)
          to label %213 unwind label %232

150:                                              ; preds = %29, %1
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %28) #11
  br label %154

152:                                              ; preds = %33
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %2) #11
  br label %154

154:                                              ; preds = %152, %150
  %.pn = phi { ptr, i32 } [ %153, %152 ], [ %151, %150 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %2) #11
  br label %289

155:                                              ; preds = %44, %41
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %43) #11
  br label %159

157:                                              ; preds = %48
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %5) #11
  br label %159

159:                                              ; preds = %157, %155
  %.pn87 = phi { ptr, i32 } [ %158, %157 ], [ %156, %155 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %5) #11
  br label %289

160:                                              ; preds = %59, %56
  %161 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %58) #11
  br label %164

162:                                              ; preds = %63
  %163 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %8) #11
  br label %164

164:                                              ; preds = %162, %160
  %.pn89 = phi { ptr, i32 } [ %163, %162 ], [ %161, %160 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #11
  br label %289

165:                                              ; preds = %74, %71
  %166 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %73) #11
  br label %169

167:                                              ; preds = %78
  %168 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %11) #11
  br label %169

169:                                              ; preds = %167, %165
  %.pn91 = phi { ptr, i32 } [ %168, %167 ], [ %166, %165 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %11) #11
  br label %289

170:                                              ; preds = %89, %86
  %171 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH8BoxShapedlEPv(ptr noundef %88) #11
  br label %288

172:                                              ; preds = %98, %96, %93
  %173 = landingpad { ptr, i32 }
          cleanup
  br label %287

174:                                              ; preds = %103
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %286

176:                                              ; preds = %106
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %285

178:                                              ; preds = %108
  %179 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %107) #11
  br label %285

180:                                              ; preds = %109
  %181 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #11
  br label %285

182:                                              ; preds = %110
  %183 = landingpad { ptr, i32 }
          cleanup
  br label %285

184:                                              ; preds = %115
  %185 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %114) #11
  br label %285

186:                                              ; preds = %116
  %187 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %19) #11
  br label %285

188:                                              ; preds = %117
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %285

190:                                              ; preds = %122
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %121) #11
  br label %285

192:                                              ; preds = %123
  %193 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %20) #11
  br label %285

194:                                              ; preds = %124
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %285

196:                                              ; preds = %128
  %197 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef %127) #11
  br label %285

198:                                              ; preds = %129
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %21) #11
  br label %285

200:                                              ; preds = %138, %136, %134
  %.081 = phi ptr [ %139, %138 ], [ %137, %136 ], [ %135, %134 ]
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %202

202:                                              ; preds = %200, %202
  %203 = phi ptr [ %.081, %200 ], [ %204, %202 ]
  %204 = getelementptr inbounds i8, ptr %203, i64 -8
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %204) #11
  %205 = icmp eq ptr %204, %22
  br i1 %205, label %.loopexit, label %202

.loopexit.loopexit:                               ; preds = %140
  %206 = landingpad { ptr, i32 }
          cleanup
  %207 = getelementptr inbounds i8, ptr %22, i64 24
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %207) #11
  %208 = getelementptr inbounds i8, ptr %22, i64 16
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %208) #11
  %209 = getelementptr inbounds i8, ptr %22, i64 8
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %209) #11
  call void @_ZN3JPH3RefINS_13WheelSettingsEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #11
  br label %.loopexit

.loopexit:                                        ; preds = %202, %.loopexit.loopexit, %.thread
  %.pn93 = phi { ptr, i32 } [ %133, %.thread ], [ %206, %.loopexit.loopexit ], [ %201, %202 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #11
  br label %285

.lr.ph:                                           ; preds = %143, %.lr.ph
  %.082120 = phi ptr [ %212, %.lr.ph ], [ %147, %143 ]
  %210 = call noundef ptr @_ZNK3JPH3RefINS_13WheelSettingsEEcvPS1_Ev(ptr noundef nonnull align 8 dereferenceable(8) %.082120)
  %211 = getelementptr inbounds i8, ptr %210, i64 136
  store <2 x float> <float 0x3FD3333340000000, float 0x3FB99999A0000000>, ptr %211, align 8, !tbaa !49
  %212 = getelementptr inbounds i8, ptr %.082120, i64 8
  %.not = icmp eq ptr %212, %148
  br i1 %.not, label %._crit_edge, label %.lr.ph

213:                                              ; preds = %._crit_edge
  invoke void @_ZN3JPH32WheeledVehicleControllerSettingsC2Ev(ptr noundef nonnull align 8 dereferenceable(172) %149)
          to label %214 unwind label %234

214:                                              ; preds = %213
  %215 = getelementptr inbounds i8, ptr %17, i64 136
  %216 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3JPH3RefINS_25VehicleControllerSettingsEEaSEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef nonnull %149)
          to label %217 unwind label %232

217:                                              ; preds = %214
  %218 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 6.000000e+01)
  %219 = getelementptr inbounds i8, ptr %17, i64 80
  store float %218, ptr %219, align 16, !tbaa !50
  %220 = getelementptr inbounds i8, ptr %149, i64 144
  invoke void @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef 1)
          to label %221 unwind label %232

221:                                              ; preds = %217
  %222 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef 0)
          to label %223 unwind label %232

223:                                              ; preds = %221
  store i32 0, ptr %222, align 4, !tbaa !57
  %224 = invoke noundef nonnull align 4 dereferenceable(24) ptr @_ZN3JPH5ArrayINS_27VehicleDifferentialSettingsENS_12STLAllocatorIS1_EEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %220, i64 noundef 0)
          to label %225 unwind label %232

225:                                              ; preds = %223
  %226 = getelementptr inbounds i8, ptr %224, i64 4
  store i32 1, ptr %226, align 4, !tbaa !59
  %227 = getelementptr inbounds i8, ptr %0, i64 16
  %228 = getelementptr inbounds i8, ptr %0, i64 112
  br label %.preheader

.preheader:                                       ; preds = %225, %236
  %.083122 = phi i32 [ 0, %225 ], [ %237, %236 ]
  %229 = uitofp nneg i32 %.083122 to float
  %230 = call float @llvm.fmuladd.f32(float %229, float 4.000000e+00, float -2.800000e+01)
  br label %238

231:                                              ; preds = %236
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %17) #11
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %17) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #11
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %16) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #11
  ret void

232:                                              ; preds = %223, %221, %217, %214, %._crit_edge
  %233 = landingpad { ptr, i32 }
          cleanup
  br label %285

234:                                              ; preds = %213
  %235 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH32WheeledVehicleControllerSettingsdlEPv(ptr noundef %149) #11
  br label %285

236:                                              ; preds = %266
  %237 = add nuw nsw i32 %.083122, 1
  %exitcond133.not = icmp eq i32 %237, 15
  br i1 %exitcond133.not, label %231, label %.preheader, !llvm.loop !60

238:                                              ; preds = %.preheader, %266
  %.084121 = phi i32 [ 0, %.preheader ], [ %267, %266 ]
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %23) #11
  %239 = uitofp nneg i32 %.084121 to float
  %240 = call float @llvm.fmuladd.f32(float %239, float 5.000000e+00, float -3.500000e+01)
  invoke void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16) %23, float noundef %230, float noundef 2.000000e+00, float noundef %240)
          to label %241 unwind label %268

241:                                              ; preds = %238
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(16) %16, ptr noundef nonnull align 16 dereferenceable(16) %23, i64 16, i1 false), !tbaa.struct !35
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  %242 = load ptr, ptr %26, align 8, !tbaa !5
  %243 = invoke noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24) %242, ptr noundef nonnull align 16 dereferenceable(256) %16)
          to label %244 unwind label %270

244:                                              ; preds = %241
  %245 = load ptr, ptr %26, align 8, !tbaa !5
  %246 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3JPH4Body5GetIDEv(ptr noundef nonnull align 16 dereferenceable(122) %243)
  invoke void @_ZN3JPH13BodyInterface7AddBodyERKNS_6BodyIDENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24) %245, ptr noundef nonnull align 4 dereferenceable(4) %246, i32 noundef 0)
          to label %247 unwind label %270

247:                                              ; preds = %244
  %248 = invoke noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef 416)
          to label %249 unwind label %272

249:                                              ; preds = %247
  invoke void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408) %248, ptr noundef nonnull align 16 dereferenceable(122) %243, ptr noundef nonnull align 16 dereferenceable(144) %17)
          to label %250 unwind label %274

250:                                              ; preds = %249
  call void @_ZN3JPH17VehicleConstraint37SetNumStepsBetweenCollisionTestActiveEj(ptr noundef nonnull align 16 dereferenceable(408) %248, i32 noundef 2)
  call void @_ZN3JPH17VehicleConstraint39SetNumStepsBetweenCollisionTestInactiveEj(ptr noundef nonnull align 16 dereferenceable(408) %248, i32 noundef 0)
  %251 = invoke noundef ptr @_ZN3JPH25VehicleCollisionTesterRaynwEm(i64 noundef 80)
          to label %252 unwind label %276

252:                                              ; preds = %250
  %253 = invoke { double, double } @_ZN3JPH4Vec36sAxisYEv()
          to label %254 unwind label %278

254:                                              ; preds = %252
  %255 = extractvalue { double, double } %253, 0
  %256 = extractvalue { double, double } %253, 1
  %257 = call noundef float @_ZN3JPH16DegreesToRadiansEf(float noundef 8.000000e+01)
  invoke void @_ZN3JPH25VehicleCollisionTesterRayC2EtNS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(68) %251, i16 noundef zeroext 1, double %255, double %256, float noundef %257)
          to label %258 unwind label %278

258:                                              ; preds = %254
  invoke void @_ZN3JPH17VehicleConstraint25SetVehicleCollisionTesterEPKNS_22VehicleCollisionTesterE(ptr noundef nonnull align 16 dereferenceable(408) %248, ptr noundef nonnull %251)
          to label %259 unwind label %276

259:                                              ; preds = %258
  %260 = load ptr, ptr %227, align 8, !tbaa !62
  invoke void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172) %260, ptr noundef nonnull %248)
          to label %261 unwind label %276

261:                                              ; preds = %259
  %262 = load ptr, ptr %227, align 8, !tbaa !62
  %263 = getelementptr inbounds i8, ptr %248, i64 32
  invoke void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172) %262, ptr noundef nonnull %263)
          to label %264 unwind label %276

264:                                              ; preds = %261
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #11
  invoke void @_ZN3JPH3RefINS_17VehicleConstraintEEC2EPS1_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull %248)
          to label %265 unwind label %280

265:                                              ; preds = %264
  invoke void @_ZN3JPH5ArrayINS_3RefINS_17VehicleConstraintEEENS_12STLAllocatorIS3_EEE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %228, ptr noundef nonnull align 8 dereferenceable(8) %24)
          to label %266 unwind label %282

266:                                              ; preds = %265
  call void @_ZN3JPH3RefINS_17VehicleConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #11
  %267 = add nuw nsw i32 %.084121, 1
  %exitcond.not = icmp eq i32 %267, 15
  br i1 %exitcond.not, label %236, label %238, !llvm.loop !63

268:                                              ; preds = %238
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %23) #11
  br label %285

270:                                              ; preds = %244, %241
  %271 = landingpad { ptr, i32 }
          cleanup
  br label %285

272:                                              ; preds = %247
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %285

274:                                              ; preds = %249
  %275 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH10ConstraintdlEPv(ptr noundef %248) #11
  br label %285

276:                                              ; preds = %261, %259, %258, %250
  %277 = landingpad { ptr, i32 }
          cleanup
  br label %285

278:                                              ; preds = %254, %252
  %279 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH25VehicleCollisionTesterRaydlEPv(ptr noundef %251) #11
  br label %285

280:                                              ; preds = %264
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %284

282:                                              ; preds = %265
  %283 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3JPH3RefINS_17VehicleConstraintEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  br label %284

284:                                              ; preds = %282, %280
  %.pn95 = phi { ptr, i32 } [ %283, %282 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #11
  br label %285

285:                                              ; preds = %182, %184, %186, %194, %196, %198, %.loopexit, %268, %272, %274, %284, %278, %276, %270, %234, %232, %192, %190, %188, %180, %178, %176
  %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %181, %180 ], [ %179, %178 ], [ %177, %176 ], [ %187, %186 ], [ %185, %184 ], [ %183, %182 ], [ %193, %192 ], [ %191, %190 ], [ %189, %188 ], [ %.pn93, %.loopexit ], [ %199, %198 ], [ %197, %196 ], [ %195, %194 ], [ %233, %232 ], [ %235, %234 ], [ %269, %268 ], [ %271, %270 ], [ %275, %274 ], [ %273, %272 ], [ %.pn95, %284 ], [ %277, %276 ], [ %279, %278 ]
  call void @_ZN3JPH25VehicleConstraintSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(144) %17) #11
  br label %286

286:                                              ; preds = %285, %174
  %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn, %285 ], [ %175, %174 ]
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %17) #11
  call void @_ZN3JPH20BodyCreationSettingsD2Ev(ptr noundef nonnull align 16 dereferenceable(256) %16) #11
  br label %287

287:                                              ; preds = %286, %172
  %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %286 ], [ %173, %172 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %16) #11
  call void @_ZN3JPH8RefConstINS_5ShapeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %14) #11
  br label %288

288:                                              ; preds = %287, %170
  %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %287 ], [ %171, %170 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #11
  br label %289

289:                                              ; preds = %288, %169, %164, %159, %154
  %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %288 ], [ %.pn91, %169 ], [ %.pn89, %164 ], [ %.pn87, %159 ], [ %.pn, %154 ]
  resume { ptr, i32 } %.pn95.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

declare noundef nonnull align 16 dereferenceable(122) ptr @_ZN4Test17CreateMeshTerrainEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #2

declare i32 @_ZN3JPH13BodyInterface16CreateAndAddBodyERKNS_20BodyCreationSettingsENS_11EActivationE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256), i32 noundef) local_unnamed_addr #2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH8BoxShapenwEm(i64 noundef) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN3JPH4Vec3C2Efff(ptr noundef nonnull align 16 dereferenceable(16), float noundef, float noundef, float noundef) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH8BoxShapeC2ENS_4Vec3EfPKNS_15PhysicsMaterialE(ptr noundef nonnull align 16 dereferenceable(80), double, double, float noundef, ptr noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH8BoxShapedlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH20BodyCreationSettingsC2EPKNS_5ShapeENS_4Vec3ENS_4QuatENS_11EMotionTypeEt(ptr noundef nonnull align 16 dereferenceable(256), ptr noundef, double, double, double, double, i8 noundef zeroext, i16 noundef zeroext) unnamed_addr #1 align 2

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH15WheelSettingsWVnwEm(i64 noundef) local_unnamed_addr #3 align 2

declare void @_ZN3JPH15WheelSettingsWVC1Ev(ptr noundef nonnull align 16 dereferenceable(216)) unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH15WheelSettingsWVdlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH32WheeledVehicleControllerSettingsnwEm(i64 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH32WheeledVehicleControllerSettingsdlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

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

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

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

declare noundef ptr @_ZN3JPH13BodyInterface10CreateBodyERKNS_20BodyCreationSettingsE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 16 dereferenceable(256)) local_unnamed_addr #2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH10ConstraintnwEm(i64 noundef) local_unnamed_addr #3 align 2

declare void @_ZN3JPH17VehicleConstraintC1ERNS_4BodyERKNS_25VehicleConstraintSettingsE(ptr noundef nonnull align 16 dereferenceable(408), ptr noundef nonnull align 16 dereferenceable(122), ptr noundef nonnull align 16 dereferenceable(144)) unnamed_addr #2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH10ConstraintdlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef ptr @_ZN3JPH25VehicleCollisionTesterRaynwEm(i64 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH25VehicleCollisionTesterRayC2EtNS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(68), i16 noundef zeroext, double, double, float noundef) unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH25VehicleCollisionTesterRaydlEPv(ptr noundef) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3JPH13PhysicsSystem13AddConstraintEPNS_10ConstraintE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) local_unnamed_addr #1 align 2

declare void @_ZN3JPH13PhysicsSystem15AddStepListenerEPNS_19PhysicsStepListenerE(ptr noundef nonnull align 16 dereferenceable(1172), ptr noundef) local_unnamed_addr #2

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 = { "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 = { 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 #5 = { 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 #6 = { 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 #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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #9 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #10 = { 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 #11 = { 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 24}
!6 = !{!"_ZTS4Test", !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !11, i64 56}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSSt13unordered_mapIN3JPH6BodyIDENSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_12STLAllocatorIcEEEESt4hashIS1_ESt8equal_toIS1_ESaISt4pairIKS1_S8_EEE", !12, i64 0}
!12 = !{!"_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", !7, i64 0, !13, i64 8, !14, i64 16, !13, i64 24, !15, i64 32, !7, i64 48}
!13 = !{!"long", !8, i64 0}
!14 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !16, i64 0, !13, i64 8}
!16 = !{!"float", !8, i64 0}
!17 = !{!18, !29, i64 144}
!18 = !{!"_ZTSN3JPH20BodyCreationSettingsE", !19, i64 0, !20, i64 16, !19, i64 32, !19, i64 48, !13, i64 64, !22, i64 72, !23, i64 80, !26, i64 96, !27, i64 97, !10, i64 98, !10, i64 99, !10, i64 100, !10, i64 101, !10, i64 102, !28, i64 103, !10, i64 104, !10, i64 105, !16, i64 108, !16, i64 112, !16, i64 116, !16, i64 120, !16, i64 124, !16, i64 128, !16, i64 132, !25, i64 136, !25, i64 140, !29, i64 144, !16, i64 148, !30, i64 160, !32, i64 240, !33, i64 248}
!19 = !{!"_ZTSN3JPH4Vec3E", !8, i64 0}
!20 = !{!"_ZTSN3JPH4QuatE", !21, i64 0}
!21 = !{!"_ZTSN3JPH4Vec4E", !8, i64 0}
!22 = !{!"short", !8, i64 0}
!23 = !{!"_ZTSN3JPH14CollisionGroupE", !24, i64 0, !25, i64 8, !25, i64 12}
!24 = !{!"_ZTSN3JPH8RefConstINS_11GroupFilterEEE", !7, i64 0}
!25 = !{!"int", !8, i64 0}
!26 = !{!"_ZTSN3JPH11EMotionTypeE", !8, i64 0}
!27 = !{!"_ZTSN3JPH12EAllowedDOFsE", !8, i64 0}
!28 = !{!"_ZTSN3JPH14EMotionQualityE", !8, i64 0}
!29 = !{!"_ZTSN3JPH23EOverrideMassPropertiesE", !8, i64 0}
!30 = !{!"_ZTSN3JPH14MassPropertiesE", !16, i64 0, !31, i64 16}
!31 = !{!"_ZTSN3JPH5Mat44E", !8, i64 0}
!32 = !{!"_ZTSN3JPH8RefConstINS_13ShapeSettingsEEE", !7, i64 0}
!33 = !{!"_ZTSN3JPH8RefConstINS_5ShapeEEE", !7, i64 0}
!34 = !{!18, !16, i64 160}
!35 = !{i64 0, i64 16, !36}
!36 = !{!8, !8, i64 0}
!37 = !{!38, !16, i64 156}
!38 = !{!"_ZTSN3JPH15WheelSettingsWVE", !39, i64 0, !16, i64 148, !16, i64 152, !16, i64 156, !46, i64 160, !46, i64 184, !16, i64 208, !16, i64 212}
!39 = !{!"_ZTSN3JPH13WheelSettingsE", !40, i64 0, !41, i64 8, !19, i64 16, !19, i64 32, !19, i64 48, !19, i64 64, !19, i64 80, !19, i64 96, !16, i64 112, !16, i64 116, !16, i64 120, !44, i64 124, !16, i64 136, !16, i64 140, !10, i64 144}
!40 = !{!"_ZTSN3JPH18SerializableObjectE"}
!41 = !{!"_ZTSN3JPH9RefTargetINS_13WheelSettingsEEE", !42, i64 0}
!42 = !{!"_ZTSSt6atomicIjE", !43, i64 0}
!43 = !{!"_ZTSSt13__atomic_baseIjE", !25, i64 0}
!44 = !{!"_ZTSN3JPH14SpringSettingsE", !45, i64 0, !8, i64 4, !16, i64 8}
!45 = !{!"_ZTSN3JPH11ESpringModeE", !8, i64 0}
!46 = !{!"_ZTSN3JPH11LinearCurveE", !47, i64 0}
!47 = !{!"_ZTSN3JPH5ArrayINS_11LinearCurve5PointENS_12STLAllocatorIS2_EEEE", !13, i64 0, !13, i64 8, !7, i64 16}
!48 = !{!38, !16, i64 212}
!49 = !{!16, !16, i64 0}
!50 = !{!51, !16, i64 80}
!51 = !{!"_ZTSN3JPH25VehicleConstraintSettingsE", !52, i64 0, !19, i64 48, !19, i64 64, !16, i64 80, !54, i64 88, !55, i64 112, !56, i64 136}
!52 = !{!"_ZTSN3JPH18ConstraintSettingsE", !40, i64 0, !53, i64 8, !10, i64 12, !25, i64 16, !25, i64 20, !25, i64 24, !16, i64 28, !13, i64 32}
!53 = !{!"_ZTSN3JPH9RefTargetINS_18ConstraintSettingsEEE", !42, i64 0}
!54 = !{!"_ZTSN3JPH5ArrayINS_3RefINS_13WheelSettingsEEENS_12STLAllocatorIS3_EEEE", !13, i64 0, !13, i64 8, !7, i64 16}
!55 = !{!"_ZTSN3JPH5ArrayINS_18VehicleAntiRollBarENS_12STLAllocatorIS1_EEEE", !13, i64 0, !13, i64 8, !7, i64 16}
!56 = !{!"_ZTSN3JPH3RefINS_25VehicleControllerSettingsEEE", !7, i64 0}
!57 = !{!58, !25, i64 0}
!58 = !{!"_ZTSN3JPH27VehicleDifferentialSettingsE", !25, i64 0, !25, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20}
!59 = !{!58, !25, i64 4}
!60 = distinct !{!60, !61}
!61 = !{!"llvm.loop.mustprogress"}
!62 = !{!6, !7, i64 16}
!63 = distinct !{!63, !61}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass